Skip to content

Commit 929a9ee

Browse files
authored
Merge pull request #36 from sparkfun/release_candidate
v2.0.7
2 parents 2c71ab7 + 060db6e commit 929a9ee

File tree

4 files changed

+59
-46
lines changed

4 files changed

+59
-46
lines changed

Diff for: examples/ZED-F9P/Example5_RelativePositioningInformation/Example5_RelativePositioningInformation.ino

+11-1
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,17 @@ void loop()
156156
//Serial.print("Pushing ");
157157
//Serial.print(numBytes);
158158
//Serial.println(" bytes via I2C");
159-
myGNSS.pushRawData(((uint8_t *)&store), numBytes); // Push the RTCM data via I2C
159+
160+
//On processors which have large I2C buffers, like the ESP32, we can make the push more efficient by
161+
//calling setI2CTransactionSize first to increase the maximum I2C transmission size
162+
//(setI2CTransactionSize only needs to be called once, so it should be in setup, not loop)
163+
//myGNSS.setI2CTransactionSize(128); // Send up to 128 bytes in one I2C transmission
164+
165+
//The ESP32 seems to have an issue when using a restarts to break up long RTCM pushes
166+
//You may need to call pushRawData and set the optional 'stop' argument to true:
167+
//myGNSS.pushRawData(((uint8_t *)&store), numBytes, true); // Push the RTCM data via I2C - always use stops on long RTCM pushes
168+
169+
myGNSS.pushRawData(((uint8_t *)&store), numBytes); // Push the RTCM data via I2C - using restarts to break up long I2C pushes
160170
numBytes = 0; // Reset numBytes
161171
}
162172
#endif

Diff for: library.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=SparkFun u-blox GNSS Arduino Library
2-
version=2.0.6
2+
version=2.0.7
33
author=SparkFun Electronics <[email protected]>
44
maintainer=SparkFun Electronics <sparkfun.com>
55
sentence=Library for I2C and Serial Communication with u-blox GNSS modules<br/><br/>

Diff for: src/SparkFun_u-blox_GNSS_Arduino_Library.cpp

+45-43
Original file line numberDiff line numberDiff line change
@@ -91,15 +91,15 @@ void SFE_UBLOX_GNSS::end(void)
9191
delete[] packetUBXNAVTIMELS;
9292
packetUBXNAVTIMELS = NULL; // Redundant?
9393
}
94-
94+
9595
if (packetUBXNAVPOSECEF != NULL)
9696
{
9797
if (packetUBXNAVPOSECEF->callbackData != NULL)
9898
{
9999
delete[] packetUBXNAVPOSECEF->callbackData;
100100
}
101101
delete[] packetUBXNAVPOSECEF;
102-
packetUBXNAVPOSECEF = NULL; // Redundant?
102+
packetUBXNAVPOSECEF = NULL; // Redundant?
103103
}
104104

105105
if (packetUBXNAVSTATUS != NULL)
@@ -109,7 +109,7 @@ void SFE_UBLOX_GNSS::end(void)
109109
delete[] packetUBXNAVSTATUS->callbackData;
110110
}
111111
delete[] packetUBXNAVSTATUS;
112-
packetUBXNAVSTATUS = NULL; // Redundant?
112+
packetUBXNAVSTATUS = NULL; // Redundant?
113113
}
114114

115115
if (packetUBXNAVDOP != NULL)
@@ -119,7 +119,7 @@ void SFE_UBLOX_GNSS::end(void)
119119
delete[] packetUBXNAVDOP->callbackData;
120120
}
121121
delete[] packetUBXNAVDOP;
122-
packetUBXNAVDOP = NULL; // Redundant?
122+
packetUBXNAVDOP = NULL; // Redundant?
123123
}
124124

125125
if (packetUBXNAVATT != NULL)
@@ -129,7 +129,7 @@ void SFE_UBLOX_GNSS::end(void)
129129
delete[] packetUBXNAVATT->callbackData;
130130
}
131131
delete[] packetUBXNAVATT;
132-
packetUBXNAVATT = NULL; // Redundant?
132+
packetUBXNAVATT = NULL; // Redundant?
133133
}
134134

135135
if (packetUBXNAVPVT != NULL)
@@ -143,7 +143,7 @@ void SFE_UBLOX_GNSS::end(void)
143143
}
144144
}
145145
delete[] packetUBXNAVPVT;
146-
packetUBXNAVPVT = NULL; // Redundant?
146+
packetUBXNAVPVT = NULL; // Redundant?
147147
if (_printDebug == true)
148148
{
149149
_debugSerial->println(F("end: packetUBXNAVPVT has been deleted"));
@@ -157,7 +157,7 @@ void SFE_UBLOX_GNSS::end(void)
157157
delete[] packetUBXNAVODO->callbackData;
158158
}
159159
delete[] packetUBXNAVODO;
160-
packetUBXNAVODO = NULL; // Redundant?
160+
packetUBXNAVODO = NULL; // Redundant?
161161
}
162162

163163
if (packetUBXNAVVELECEF != NULL)
@@ -167,7 +167,7 @@ void SFE_UBLOX_GNSS::end(void)
167167
delete[] packetUBXNAVVELECEF->callbackData;
168168
}
169169
delete[] packetUBXNAVVELECEF;
170-
packetUBXNAVVELECEF = NULL; // Redundant?
170+
packetUBXNAVVELECEF = NULL; // Redundant?
171171
}
172172

173173
if (packetUBXNAVVELNED != NULL)
@@ -177,7 +177,7 @@ void SFE_UBLOX_GNSS::end(void)
177177
delete[] packetUBXNAVVELNED->callbackData;
178178
}
179179
delete[] packetUBXNAVVELNED;
180-
packetUBXNAVVELNED = NULL; // Redundant?
180+
packetUBXNAVVELNED = NULL; // Redundant?
181181
}
182182

183183
if (packetUBXNAVHPPOSECEF != NULL)
@@ -187,7 +187,7 @@ void SFE_UBLOX_GNSS::end(void)
187187
delete[] packetUBXNAVHPPOSECEF->callbackData;
188188
}
189189
delete[] packetUBXNAVHPPOSECEF;
190-
packetUBXNAVHPPOSECEF = NULL; // Redundant?
190+
packetUBXNAVHPPOSECEF = NULL; // Redundant?
191191
}
192192

193193
if (packetUBXNAVHPPOSLLH != NULL)
@@ -197,7 +197,7 @@ void SFE_UBLOX_GNSS::end(void)
197197
delete[] packetUBXNAVHPPOSLLH->callbackData;
198198
}
199199
delete[] packetUBXNAVHPPOSLLH;
200-
packetUBXNAVHPPOSLLH = NULL; // Redundant?
200+
packetUBXNAVHPPOSLLH = NULL; // Redundant?
201201
}
202202

203203
if (packetUBXNAVCLOCK != NULL)
@@ -207,7 +207,7 @@ void SFE_UBLOX_GNSS::end(void)
207207
delete[] packetUBXNAVCLOCK->callbackData;
208208
}
209209
delete[] packetUBXNAVCLOCK;
210-
packetUBXNAVCLOCK = NULL; // Redundant?
210+
packetUBXNAVCLOCK = NULL; // Redundant?
211211
}
212212

213213
if (packetUBXNAVSVIN != NULL)
@@ -217,7 +217,7 @@ void SFE_UBLOX_GNSS::end(void)
217217
delete[] packetUBXNAVSVIN->callbackData;
218218
}
219219
delete[] packetUBXNAVSVIN;
220-
packetUBXNAVSVIN = NULL; // Redundant?
220+
packetUBXNAVSVIN = NULL; // Redundant?
221221
}
222222

223223
if (packetUBXNAVRELPOSNED != NULL)
@@ -227,7 +227,7 @@ void SFE_UBLOX_GNSS::end(void)
227227
delete[] packetUBXNAVRELPOSNED->callbackData;
228228
}
229229
delete[] packetUBXNAVRELPOSNED;
230-
packetUBXNAVRELPOSNED = NULL; // Redundant?
230+
packetUBXNAVRELPOSNED = NULL; // Redundant?
231231
}
232232

233233
if (packetUBXRXMSFRBX != NULL)
@@ -237,7 +237,7 @@ void SFE_UBLOX_GNSS::end(void)
237237
delete[] packetUBXRXMSFRBX->callbackData;
238238
}
239239
delete[] packetUBXRXMSFRBX;
240-
packetUBXRXMSFRBX = NULL; // Redundant?
240+
packetUBXRXMSFRBX = NULL; // Redundant?
241241
}
242242

243243
if (packetUBXRXMRAWX != NULL)
@@ -247,7 +247,7 @@ void SFE_UBLOX_GNSS::end(void)
247247
delete[] packetUBXRXMRAWX->callbackData;
248248
}
249249
delete[] packetUBXRXMRAWX;
250-
packetUBXRXMRAWX = NULL; // Redundant?
250+
packetUBXRXMRAWX = NULL; // Redundant?
251251
}
252252

253253
if (packetUBXCFGRATE != NULL)
@@ -257,7 +257,7 @@ void SFE_UBLOX_GNSS::end(void)
257257
delete[] packetUBXCFGRATE->callbackData;
258258
}
259259
delete[] packetUBXCFGRATE;
260-
packetUBXCFGRATE = NULL; // Redundant?
260+
packetUBXCFGRATE = NULL; // Redundant?
261261
}
262262

263263
if (packetUBXTIMTM2 != NULL)
@@ -267,7 +267,7 @@ void SFE_UBLOX_GNSS::end(void)
267267
delete[] packetUBXTIMTM2->callbackData;
268268
}
269269
delete[] packetUBXTIMTM2;
270-
packetUBXTIMTM2 = NULL; // Redundant?
270+
packetUBXTIMTM2 = NULL; // Redundant?
271271
}
272272

273273
if (packetUBXESFALG != NULL)
@@ -277,7 +277,7 @@ void SFE_UBLOX_GNSS::end(void)
277277
delete[] packetUBXESFALG->callbackData;
278278
}
279279
delete[] packetUBXESFALG;
280-
packetUBXESFALG = NULL; // Redundant?
280+
packetUBXESFALG = NULL; // Redundant?
281281
}
282282

283283
if (packetUBXESFSTATUS != NULL)
@@ -287,7 +287,7 @@ void SFE_UBLOX_GNSS::end(void)
287287
delete[] packetUBXESFSTATUS->callbackData;
288288
}
289289
delete[] packetUBXESFSTATUS;
290-
packetUBXESFSTATUS = NULL; // Redundant?
290+
packetUBXESFSTATUS = NULL; // Redundant?
291291
}
292292

293293
if (packetUBXESFINS != NULL)
@@ -297,7 +297,7 @@ void SFE_UBLOX_GNSS::end(void)
297297
delete[] packetUBXESFINS->callbackData;
298298
}
299299
delete[] packetUBXESFINS;
300-
packetUBXESFINS = NULL; // Redundant?
300+
packetUBXESFINS = NULL; // Redundant?
301301
}
302302

303303
if (packetUBXESFMEAS != NULL)
@@ -307,7 +307,7 @@ void SFE_UBLOX_GNSS::end(void)
307307
delete[] packetUBXESFMEAS->callbackData;
308308
}
309309
delete[] packetUBXESFMEAS;
310-
packetUBXESFMEAS = NULL; // Redundant?
310+
packetUBXESFMEAS = NULL; // Redundant?
311311
}
312312

313313
if (packetUBXESFRAW != NULL)
@@ -317,7 +317,7 @@ void SFE_UBLOX_GNSS::end(void)
317317
delete[] packetUBXESFRAW->callbackData;
318318
}
319319
delete[] packetUBXESFRAW;
320-
packetUBXESFRAW = NULL; // Redundant?
320+
packetUBXESFRAW = NULL; // Redundant?
321321
}
322322

323323
if (packetUBXHNRATT != NULL)
@@ -327,7 +327,7 @@ void SFE_UBLOX_GNSS::end(void)
327327
delete[] packetUBXHNRATT->callbackData;
328328
}
329329
delete[] packetUBXHNRATT;
330-
packetUBXHNRATT = NULL; // Redundant?
330+
packetUBXHNRATT = NULL; // Redundant?
331331
}
332332

333333
if (packetUBXHNRINS != NULL)
@@ -337,7 +337,7 @@ void SFE_UBLOX_GNSS::end(void)
337337
delete[] packetUBXHNRINS->callbackData;
338338
}
339339
delete[] packetUBXHNRINS;
340-
packetUBXHNRINS = NULL; // Redundant?
340+
packetUBXHNRINS = NULL; // Redundant?
341341
}
342342

343343
if (packetUBXHNRPVT != NULL)
@@ -347,7 +347,7 @@ void SFE_UBLOX_GNSS::end(void)
347347
delete[] packetUBXHNRPVT->callbackData;
348348
}
349349
delete[] packetUBXHNRPVT;
350-
packetUBXHNRPVT = NULL; // Redundant?
350+
packetUBXHNRPVT = NULL; // Redundant?
351351
}
352352

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

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

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

27732773
//Write payload.
2774-
for (int i = 0; i < outgoingUBX->len; i++)
2774+
for (uint16_t i = 0; i < outgoingUBX->len; i++)
27752775
{
27762776
_serialPort->write(outgoingUBX->payload[i]);
27772777
}
@@ -2823,7 +2823,7 @@ void SFE_UBLOX_GNSS::printPacket(ubxPacket *packet, boolean alwaysPrintPayload)
28232823
{
28242824
_debugSerial->print(F(" Payload:"));
28252825

2826-
for (int x = 0; x < packet->len; x++)
2826+
for (uint16_t x = 0; x < packet->len; x++)
28272827
{
28282828
_debugSerial->print(F(" "));
28292829
_debugSerial->print(packet->payload[x], HEX);
@@ -3394,7 +3394,9 @@ void SFE_UBLOX_GNSS::checkCallbacks(void)
33943394
// Push (e.g.) RTCM data directly to the module
33953395
// Returns true if all numDataBytes were pushed successfully
33963396
// 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.
3397-
boolean SFE_UBLOX_GNSS::pushRawData(uint8_t *dataBytes, size_t numDataBytes)
3397+
// 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.
3398+
// On processors like the ESP32, you can use setI2CTransactionSize to increase the size of each transmission - to e.g. 128 bytes
3399+
boolean SFE_UBLOX_GNSS::pushRawData(uint8_t *dataBytes, size_t numDataBytes, boolean stop)
33983400
{
33993401
if (commType == COMM_TYPE_SERIAL)
34003402
{
@@ -3425,12 +3427,12 @@ boolean SFE_UBLOX_GNSS::pushRawData(uint8_t *dataBytes, size_t numDataBytes)
34253427

34263428
if (bytesLeftToWrite > 0)
34273429
{
3428-
if (_i2cPort->endTransmission(false) != 0) //Send a restart command. Do not release bus.
3429-
return (false); //Sensor did not ACK
3430+
if (_i2cPort->endTransmission(stop) != 0) //Send a restart or stop command
3431+
return (false); //Sensor did not ACK
34303432
}
34313433
else
34323434
{
3433-
if (_i2cPort->endTransmission() != 0) //We're done. Release bus.
3435+
if (_i2cPort->endTransmission() != 0) //We're done. Release bus. Always use a stop here
34343436
return (false); //Sensor did not ACK
34353437
}
34363438
}
@@ -9709,7 +9711,7 @@ uint32_t SFE_UBLOX_GNSS::getUnixEpoch(uint16_t maxWait)
97099711
packetUBXNAVPVT->moduleQueried.moduleQueried1.bits.sec = false;
97109712
packetUBXNAVPVT->moduleQueried.moduleQueried1.bits.all = false;
97119713
// assemble time elements into time_t - credits to Thomas Roell @ https://github.com/GrumpyOldPizza
9712-
uint32_t t = ((((((((uint32_t)packetUBXNAVPVT->data.year - 1970) * 365) + ((((uint32_t)packetUBXNAVPVT->data.year - 1970) + 3) / 4)) +
9714+
uint32_t t = ((((((((uint32_t)packetUBXNAVPVT->data.year - 1970) * 365) + ((((uint32_t)packetUBXNAVPVT->data.year - 1970) + 3) / 4)) +
97139715
DAYS_SINCE_MONTH[((uint32_t)packetUBXNAVPVT->data.year - 1970) & 3][(uint32_t)packetUBXNAVPVT->data.month] +
97149716
((uint32_t)packetUBXNAVPVT->data.day - 1)) * 24 +
97159717
(uint32_t)packetUBXNAVPVT->data.hour) * 60 +
@@ -9736,7 +9738,7 @@ uint32_t SFE_UBLOX_GNSS::getUnixEpoch(uint32_t& microsecond, uint16_t maxWait)
97369738
packetUBXNAVPVT->moduleQueried.moduleQueried1.bits.nano = false;
97379739
packetUBXNAVPVT->moduleQueried.moduleQueried1.bits.all = false;
97389740
// assemble time elements into time_t - credits to Thomas Roell @ https://github.com/GrumpyOldPizza
9739-
uint32_t t = ((((((((uint32_t)packetUBXNAVPVT->data.year - 1970) * 365) + ((((uint32_t)packetUBXNAVPVT->data.year - 1970) + 3) / 4)) +
9741+
uint32_t t = ((((((((uint32_t)packetUBXNAVPVT->data.year - 1970) * 365) + ((((uint32_t)packetUBXNAVPVT->data.year - 1970) + 3) / 4)) +
97409742
DAYS_SINCE_MONTH[((uint32_t)packetUBXNAVPVT->data.year - 1970) & 3][(uint32_t)packetUBXNAVPVT->data.month] +
97419743
((uint32_t)packetUBXNAVPVT->data.day - 1)) * 24 +
97429744
(uint32_t)packetUBXNAVPVT->data.hour) * 60 +
@@ -10141,7 +10143,7 @@ uint16_t SFE_UBLOX_GNSS::getMagAcc(uint16_t maxWait)
1014110143
}
1014210144

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

0 commit comments

Comments
 (0)