Skip to content

v2.0.7 #36

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
May 8, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,17 @@ void loop()
//Serial.print("Pushing ");
//Serial.print(numBytes);
//Serial.println(" bytes via I2C");
myGNSS.pushRawData(((uint8_t *)&store), numBytes); // Push the RTCM data via I2C

//On processors which have large I2C buffers, like the ESP32, we can make the push more efficient by
//calling setI2CTransactionSize first to increase the maximum I2C transmission size
//(setI2CTransactionSize only needs to be called once, so it should be in setup, not loop)
//myGNSS.setI2CTransactionSize(128); // Send up to 128 bytes in one I2C transmission

//The ESP32 seems to have an issue when using a restarts to break up long RTCM pushes
//You may need to call pushRawData and set the optional 'stop' argument to true:
//myGNSS.pushRawData(((uint8_t *)&store), numBytes, true); // Push the RTCM data via I2C - always use stops on long RTCM pushes

myGNSS.pushRawData(((uint8_t *)&store), numBytes); // Push the RTCM data via I2C - using restarts to break up long I2C pushes
numBytes = 0; // Reset numBytes
}
#endif
Expand Down
2 changes: 1 addition & 1 deletion library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=SparkFun u-blox GNSS Arduino Library
version=2.0.6
version=2.0.7
author=SparkFun Electronics <techsupport@sparkfun.com>
maintainer=SparkFun Electronics <sparkfun.com>
sentence=Library for I2C and Serial Communication with u-blox GNSS modules<br/><br/>
Expand Down
88 changes: 45 additions & 43 deletions src/SparkFun_u-blox_GNSS_Arduino_Library.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,15 +91,15 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXNAVTIMELS;
packetUBXNAVTIMELS = NULL; // Redundant?
}

if (packetUBXNAVPOSECEF != NULL)
{
if (packetUBXNAVPOSECEF->callbackData != NULL)
{
delete[] packetUBXNAVPOSECEF->callbackData;
}
delete[] packetUBXNAVPOSECEF;
packetUBXNAVPOSECEF = NULL; // Redundant?
packetUBXNAVPOSECEF = NULL; // Redundant?
}

if (packetUBXNAVSTATUS != NULL)
Expand All @@ -109,7 +109,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXNAVSTATUS->callbackData;
}
delete[] packetUBXNAVSTATUS;
packetUBXNAVSTATUS = NULL; // Redundant?
packetUBXNAVSTATUS = NULL; // Redundant?
}

if (packetUBXNAVDOP != NULL)
Expand All @@ -119,7 +119,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXNAVDOP->callbackData;
}
delete[] packetUBXNAVDOP;
packetUBXNAVDOP = NULL; // Redundant?
packetUBXNAVDOP = NULL; // Redundant?
}

if (packetUBXNAVATT != NULL)
Expand All @@ -129,7 +129,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXNAVATT->callbackData;
}
delete[] packetUBXNAVATT;
packetUBXNAVATT = NULL; // Redundant?
packetUBXNAVATT = NULL; // Redundant?
}

if (packetUBXNAVPVT != NULL)
Expand All @@ -143,7 +143,7 @@ void SFE_UBLOX_GNSS::end(void)
}
}
delete[] packetUBXNAVPVT;
packetUBXNAVPVT = NULL; // Redundant?
packetUBXNAVPVT = NULL; // Redundant?
if (_printDebug == true)
{
_debugSerial->println(F("end: packetUBXNAVPVT has been deleted"));
Expand All @@ -157,7 +157,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXNAVODO->callbackData;
}
delete[] packetUBXNAVODO;
packetUBXNAVODO = NULL; // Redundant?
packetUBXNAVODO = NULL; // Redundant?
}

if (packetUBXNAVVELECEF != NULL)
Expand All @@ -167,7 +167,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXNAVVELECEF->callbackData;
}
delete[] packetUBXNAVVELECEF;
packetUBXNAVVELECEF = NULL; // Redundant?
packetUBXNAVVELECEF = NULL; // Redundant?
}

if (packetUBXNAVVELNED != NULL)
Expand All @@ -177,7 +177,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXNAVVELNED->callbackData;
}
delete[] packetUBXNAVVELNED;
packetUBXNAVVELNED = NULL; // Redundant?
packetUBXNAVVELNED = NULL; // Redundant?
}

if (packetUBXNAVHPPOSECEF != NULL)
Expand All @@ -187,7 +187,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXNAVHPPOSECEF->callbackData;
}
delete[] packetUBXNAVHPPOSECEF;
packetUBXNAVHPPOSECEF = NULL; // Redundant?
packetUBXNAVHPPOSECEF = NULL; // Redundant?
}

if (packetUBXNAVHPPOSLLH != NULL)
Expand All @@ -197,7 +197,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXNAVHPPOSLLH->callbackData;
}
delete[] packetUBXNAVHPPOSLLH;
packetUBXNAVHPPOSLLH = NULL; // Redundant?
packetUBXNAVHPPOSLLH = NULL; // Redundant?
}

if (packetUBXNAVCLOCK != NULL)
Expand All @@ -207,7 +207,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXNAVCLOCK->callbackData;
}
delete[] packetUBXNAVCLOCK;
packetUBXNAVCLOCK = NULL; // Redundant?
packetUBXNAVCLOCK = NULL; // Redundant?
}

if (packetUBXNAVSVIN != NULL)
Expand All @@ -217,7 +217,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXNAVSVIN->callbackData;
}
delete[] packetUBXNAVSVIN;
packetUBXNAVSVIN = NULL; // Redundant?
packetUBXNAVSVIN = NULL; // Redundant?
}

if (packetUBXNAVRELPOSNED != NULL)
Expand All @@ -227,7 +227,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXNAVRELPOSNED->callbackData;
}
delete[] packetUBXNAVRELPOSNED;
packetUBXNAVRELPOSNED = NULL; // Redundant?
packetUBXNAVRELPOSNED = NULL; // Redundant?
}

if (packetUBXRXMSFRBX != NULL)
Expand All @@ -237,7 +237,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXRXMSFRBX->callbackData;
}
delete[] packetUBXRXMSFRBX;
packetUBXRXMSFRBX = NULL; // Redundant?
packetUBXRXMSFRBX = NULL; // Redundant?
}

if (packetUBXRXMRAWX != NULL)
Expand All @@ -247,7 +247,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXRXMRAWX->callbackData;
}
delete[] packetUBXRXMRAWX;
packetUBXRXMRAWX = NULL; // Redundant?
packetUBXRXMRAWX = NULL; // Redundant?
}

if (packetUBXCFGRATE != NULL)
Expand All @@ -257,7 +257,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXCFGRATE->callbackData;
}
delete[] packetUBXCFGRATE;
packetUBXCFGRATE = NULL; // Redundant?
packetUBXCFGRATE = NULL; // Redundant?
}

if (packetUBXTIMTM2 != NULL)
Expand All @@ -267,7 +267,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXTIMTM2->callbackData;
}
delete[] packetUBXTIMTM2;
packetUBXTIMTM2 = NULL; // Redundant?
packetUBXTIMTM2 = NULL; // Redundant?
}

if (packetUBXESFALG != NULL)
Expand All @@ -277,7 +277,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXESFALG->callbackData;
}
delete[] packetUBXESFALG;
packetUBXESFALG = NULL; // Redundant?
packetUBXESFALG = NULL; // Redundant?
}

if (packetUBXESFSTATUS != NULL)
Expand All @@ -287,7 +287,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXESFSTATUS->callbackData;
}
delete[] packetUBXESFSTATUS;
packetUBXESFSTATUS = NULL; // Redundant?
packetUBXESFSTATUS = NULL; // Redundant?
}

if (packetUBXESFINS != NULL)
Expand All @@ -297,7 +297,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXESFINS->callbackData;
}
delete[] packetUBXESFINS;
packetUBXESFINS = NULL; // Redundant?
packetUBXESFINS = NULL; // Redundant?
}

if (packetUBXESFMEAS != NULL)
Expand All @@ -307,7 +307,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXESFMEAS->callbackData;
}
delete[] packetUBXESFMEAS;
packetUBXESFMEAS = NULL; // Redundant?
packetUBXESFMEAS = NULL; // Redundant?
}

if (packetUBXESFRAW != NULL)
Expand All @@ -317,7 +317,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXESFRAW->callbackData;
}
delete[] packetUBXESFRAW;
packetUBXESFRAW = NULL; // Redundant?
packetUBXESFRAW = NULL; // Redundant?
}

if (packetUBXHNRATT != NULL)
Expand All @@ -327,7 +327,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXHNRATT->callbackData;
}
delete[] packetUBXHNRATT;
packetUBXHNRATT = NULL; // Redundant?
packetUBXHNRATT = NULL; // Redundant?
}

if (packetUBXHNRINS != NULL)
Expand All @@ -337,7 +337,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXHNRINS->callbackData;
}
delete[] packetUBXHNRINS;
packetUBXHNRINS = NULL; // Redundant?
packetUBXHNRINS = NULL; // Redundant?
}

if (packetUBXHNRPVT != NULL)
Expand All @@ -347,7 +347,7 @@ void SFE_UBLOX_GNSS::end(void)
delete[] packetUBXHNRPVT->callbackData;
}
delete[] packetUBXHNRPVT;
packetUBXHNRPVT = NULL; // Redundant?
packetUBXHNRPVT = NULL; // Redundant?
}

}
Expand Down Expand Up @@ -1435,7 +1435,7 @@ void SFE_UBLOX_GNSS::processRTCMframe(uint8_t incoming)
//This function is called for each byte of an RTCM frame
//Ths user can overwrite this function and process the RTCM frame as they please
//Bytes can be piped to Serial or other interface. The consumer could be a radio or the internet (Ntrip broadcaster)
void SFE_UBLOX_GNSS::processRTCM(uint8_t incoming)
void SFE_UBLOX_GNSS::processRTCM(uint8_t incoming) // IGNORE COMPILER WARNING unused parameter 'incoming'
{
//Radio.sendReliable((String)incoming); //An example of passing this byte to a radio

Expand All @@ -1458,7 +1458,7 @@ void SFE_UBLOX_GNSS::processUBX(uint8_t incoming, ubxPacket *incomingUBX, uint8_
//If incomingUBX is a user-defined custom packet, then the payload size could be different to packetCfgPayloadSize.
//TO DO: update this to prevent an overrun when receiving an automatic message
// and the incomingUBX payload size is smaller than packetCfgPayloadSize.
size_t maximum_payload_size;
uint16_t maximum_payload_size;
if (activePacketBuffer == SFE_UBLOX_PACKET_PACKETCFG)
maximum_payload_size = packetCfgPayloadSize;
else if (activePacketBuffer == SFE_UBLOX_PACKET_PACKETAUTO)
Expand Down Expand Up @@ -2404,7 +2404,7 @@ void SFE_UBLOX_GNSS::processUBXpacket(ubxPacket *msg)
packetUBXESFMEAS->data.timeTag = extractLong(msg, 0);
packetUBXESFMEAS->data.flags.all = extractInt(msg, 4);
packetUBXESFMEAS->data.id = extractInt(msg, 6);
for (int i = 0; (i < DEF_NUM_SENS) && (i < packetUBXESFMEAS->data.flags.bits.numMeas)
for (uint16_t i = 0; (i < DEF_NUM_SENS) && (i < packetUBXESFMEAS->data.flags.bits.numMeas)
&& ((i * 4) < (msg->len - 8)); i++)
{
packetUBXESFMEAS->data.data[i].data.all = extractLong(msg, 8 + (i * 4));
Expand Down Expand Up @@ -2435,10 +2435,10 @@ void SFE_UBLOX_GNSS::processUBXpacket(ubxPacket *msg)
//Parse various byte fields into storage - but only if we have memory allocated for it
if (packetUBXESFRAW != NULL)
{
for (int i = 0; (i < DEF_NUM_SENS) && ((i * 8) < (msg->len - 4)); i++)
for (uint16_t i = 0; (i < DEF_NUM_SENS) && ((i * 8) < (msg->len - 4)); i++)
{
packetUBXESFRAW->data.data[i].data.all = extractLong(msg, 8 + (i * 8));
packetUBXESFRAW->data.data[i].sTag = extractLong(msg, 8 + (i * 8) + 4);
packetUBXESFRAW->data.data[i].data.all = extractLong(msg, 4 + (i * 8));
packetUBXESFRAW->data.data[i].sTag = extractLong(msg, 8 + (i * 8));
}

//Mark all datums as fresh (not read before)
Expand Down Expand Up @@ -2468,7 +2468,7 @@ void SFE_UBLOX_GNSS::processUBXpacket(ubxPacket *msg)
packetUBXESFSTATUS->data.version = extractByte(msg, 4);
packetUBXESFSTATUS->data.fusionMode = extractByte(msg, 12);
packetUBXESFSTATUS->data.numSens = extractByte(msg, 15);
for (int i = 0; (i < DEF_NUM_SENS) && (i < packetUBXESFSTATUS->data.numSens)
for (uint16_t i = 0; (i < DEF_NUM_SENS) && (i < packetUBXESFSTATUS->data.numSens)
&& ((i * 4) < (msg->len - 16)); i++)
{
packetUBXESFSTATUS->data.status[i].sensStatus1.all = extractByte(msg, 16 + (i * 4) + 0);
Expand Down Expand Up @@ -2771,7 +2771,7 @@ void SFE_UBLOX_GNSS::sendSerialCommand(ubxPacket *outgoingUBX)
_serialPort->write(outgoingUBX->len >> 8); //MSB

//Write payload.
for (int i = 0; i < outgoingUBX->len; i++)
for (uint16_t i = 0; i < outgoingUBX->len; i++)
{
_serialPort->write(outgoingUBX->payload[i]);
}
Expand Down Expand Up @@ -2823,7 +2823,7 @@ void SFE_UBLOX_GNSS::printPacket(ubxPacket *packet, boolean alwaysPrintPayload)
{
_debugSerial->print(F(" Payload:"));

for (int x = 0; x < packet->len; x++)
for (uint16_t x = 0; x < packet->len; x++)
{
_debugSerial->print(F(" "));
_debugSerial->print(packet->payload[x], HEX);
Expand Down Expand Up @@ -3394,7 +3394,9 @@ void SFE_UBLOX_GNSS::checkCallbacks(void)
// Push (e.g.) RTCM data directly to the module
// Returns true if all numDataBytes were pushed successfully
// Warning: this function does not check that the data is valid. It is the user's responsibility to ensure the data is valid before pushing.
boolean SFE_UBLOX_GNSS::pushRawData(uint8_t *dataBytes, size_t numDataBytes)
// Default to using a restart between transmissions. But processors like ESP32 seem to need a stop (#30). Set stop to true to use a stop instead.
// On processors like the ESP32, you can use setI2CTransactionSize to increase the size of each transmission - to e.g. 128 bytes
boolean SFE_UBLOX_GNSS::pushRawData(uint8_t *dataBytes, size_t numDataBytes, boolean stop)
{
if (commType == COMM_TYPE_SERIAL)
{
Expand Down Expand Up @@ -3425,12 +3427,12 @@ boolean SFE_UBLOX_GNSS::pushRawData(uint8_t *dataBytes, size_t numDataBytes)

if (bytesLeftToWrite > 0)
{
if (_i2cPort->endTransmission(false) != 0) //Send a restart command. Do not release bus.
return (false); //Sensor did not ACK
if (_i2cPort->endTransmission(stop) != 0) //Send a restart or stop command
return (false); //Sensor did not ACK
}
else
{
if (_i2cPort->endTransmission() != 0) //We're done. Release bus.
if (_i2cPort->endTransmission() != 0) //We're done. Release bus. Always use a stop here
return (false); //Sensor did not ACK
}
}
Expand Down Expand Up @@ -9709,7 +9711,7 @@ uint32_t SFE_UBLOX_GNSS::getUnixEpoch(uint16_t maxWait)
packetUBXNAVPVT->moduleQueried.moduleQueried1.bits.sec = false;
packetUBXNAVPVT->moduleQueried.moduleQueried1.bits.all = false;
// assemble time elements into time_t - credits to Thomas Roell @ https://github.com/GrumpyOldPizza
uint32_t t = ((((((((uint32_t)packetUBXNAVPVT->data.year - 1970) * 365) + ((((uint32_t)packetUBXNAVPVT->data.year - 1970) + 3) / 4)) +
uint32_t t = ((((((((uint32_t)packetUBXNAVPVT->data.year - 1970) * 365) + ((((uint32_t)packetUBXNAVPVT->data.year - 1970) + 3) / 4)) +
DAYS_SINCE_MONTH[((uint32_t)packetUBXNAVPVT->data.year - 1970) & 3][(uint32_t)packetUBXNAVPVT->data.month] +
((uint32_t)packetUBXNAVPVT->data.day - 1)) * 24 +
(uint32_t)packetUBXNAVPVT->data.hour) * 60 +
Expand All @@ -9736,7 +9738,7 @@ uint32_t SFE_UBLOX_GNSS::getUnixEpoch(uint32_t& microsecond, uint16_t maxWait)
packetUBXNAVPVT->moduleQueried.moduleQueried1.bits.nano = false;
packetUBXNAVPVT->moduleQueried.moduleQueried1.bits.all = false;
// assemble time elements into time_t - credits to Thomas Roell @ https://github.com/GrumpyOldPizza
uint32_t t = ((((((((uint32_t)packetUBXNAVPVT->data.year - 1970) * 365) + ((((uint32_t)packetUBXNAVPVT->data.year - 1970) + 3) / 4)) +
uint32_t t = ((((((((uint32_t)packetUBXNAVPVT->data.year - 1970) * 365) + ((((uint32_t)packetUBXNAVPVT->data.year - 1970) + 3) / 4)) +
DAYS_SINCE_MONTH[((uint32_t)packetUBXNAVPVT->data.year - 1970) & 3][(uint32_t)packetUBXNAVPVT->data.month] +
((uint32_t)packetUBXNAVPVT->data.day - 1)) * 24 +
(uint32_t)packetUBXNAVPVT->data.hour) * 60 +
Expand Down Expand Up @@ -10141,7 +10143,7 @@ uint16_t SFE_UBLOX_GNSS::getMagAcc(uint16_t maxWait)
}

// getGeoidSeparation is currently redundant. The geoid separation seems to only be provided in NMEA GGA and GNS messages.
int32_t SFE_UBLOX_GNSS::getGeoidSeparation(uint16_t maxWait)
int32_t SFE_UBLOX_GNSS::getGeoidSeparation(uint16_t maxWait) // IGNORE COMPILER WARNING unused parameter 'maxWait'
{
return (0);
}
Expand Down Expand Up @@ -10395,7 +10397,7 @@ uint8_t SFE_UBLOX_GNSS::getLeapIndicator(int32_t& timeToLsEvent, uint16_t maxWai
getLeapSecondEvent(maxWait);
packetUBXNAVTIMELS->moduleQueried.moduleQueried.bits.validTimeToLsEvent = false; //Since we are about to give this to user, mark this data as stale
packetUBXNAVTIMELS->moduleQueried.moduleQueried.bits.lsChange = false;
packetUBXNAVTIMELS->moduleQueried.moduleQueried.bits.timeToLsEvent = false;
packetUBXNAVTIMELS->moduleQueried.moduleQueried.bits.timeToLsEvent = false;
packetUBXNAVTIMELS->moduleQueried.moduleQueried.bits.all = false;
timeToLsEvent = packetUBXNAVTIMELS->data.timeToLsEvent;
// returns NTP Leap Indicator
Expand Down
Loading