@@ -224,24 +224,32 @@ bool GNSS_LG290P::configureOnce()
224
224
225
225
bool response = true ;
226
226
227
- response &= enterConfigMode ();
227
+ uint8_t retries = 4 ;
228
+
229
+ while ((retries > 0 ) && (!enterConfigMode (500 )))
230
+ {
231
+ retries--;
232
+ systemPrintf (" configureOnce: Enter config mode failed. %d retries remaining\r\n " , retries);
233
+ }
234
+
235
+ response &= (retries > 0 );
228
236
if (settings.debugGnss && response == false )
229
- systemPrintln (" ConfigureOnce : Enter config mode failed" );
237
+ systemPrintln (" configureOnce : Enter config mode failed" );
230
238
231
239
response &= setDataBaudRate (settings.dataPortBaud ); // LG290P UART1 is connected to CH342 (Port B)
232
240
response &= _lg290p->setPortBaudrate (2 , 115200 * 4 ); // LG290P UART2 is connected to the ESP32 UART1
233
241
response &= setRadioBaudRate (settings.radioPortBaud ); // LG290P UART3 is connected to the locking JST connector
234
242
if (settings.debugGnss && response == false )
235
- systemPrintln (" ConfigureOnce : setBauds failed" );
243
+ systemPrintln (" configureOnce : setBauds failed" );
236
244
237
245
// Enable PPS signal with a width of 200ms
238
246
response &= _lg290p->setPPS (200 , false , true ); // duration time ms, alwaysOutput, polarity
239
247
if (settings.debugGnss && response == false )
240
- systemPrintln (" ConfigureOnce : setPPS failed" );
248
+ systemPrintln (" configureOnce : setPPS failed" );
241
249
242
250
response &= setConstellations ();
243
251
if (settings.debugGnss && response == false )
244
- systemPrintln (" ConfigureOnce : setConstellations failed" );
252
+ systemPrintln (" configureOnce : setConstellations failed" );
245
253
246
254
// We do not set Rover or fix rate here because fix rate only applies in rover mode.
247
255
@@ -291,9 +299,17 @@ bool GNSS_LG290P::configureRover()
291
299
292
300
serialGNSS->flush (); // Remove any incoming characters
293
301
294
- response &= enterConfigMode ();
302
+ uint8_t retries = 4 ;
303
+
304
+ while ((retries > 0 ) && (!enterConfigMode (500 )))
305
+ {
306
+ retries--;
307
+ systemPrintf (" configureRover: Enter config mode failed. %d retries remaining\r\n " , retries);
308
+ }
309
+
310
+ response &= (retries > 0 );
295
311
if (settings.debugGnss && response == false )
296
- systemPrintln (" Rover : Enter config mode failed" );
312
+ systemPrintln (" configureRover : Enter config mode failed" );
297
313
298
314
// We must force receiver into Rover mode so that we can set fix rate
299
315
int currentMode = getMode ();
@@ -304,21 +320,21 @@ bool GNSS_LG290P::configureRover()
304
320
// fail because NMEA is not present.
305
321
_lg290p->setModeRover (); // Wait for save and reset
306
322
if (settings.debugGnss && response == false )
307
- systemPrintln (" Rover : Set mode rover failed" );
323
+ systemPrintln (" configureRover : Set mode rover failed" );
308
324
}
309
325
310
326
// Set the fix rate. Default on LG290P is 10Hz so set accordingly.
311
327
response &= setRate (settings.measurementRateMs / 1000.0 ); // May require save/reset
312
328
if (settings.debugGnss && response == false )
313
- systemPrintln (" Rover : Set rate failed" );
329
+ systemPrintln (" configureRover : Set rate failed" );
314
330
315
331
response &= enableRTCMRover ();
316
332
if (settings.debugGnss && response == false )
317
- systemPrintln (" Rover : Enable RTCM failed" );
333
+ systemPrintln (" configureRover : Enable RTCM failed" );
318
334
319
335
response &= enableNMEA ();
320
336
if (settings.debugGnss && response == false )
321
- systemPrintln (" Rover : Enable NMEA failed" );
337
+ systemPrintln (" configureRover : Enable NMEA failed" );
322
338
323
339
response &= exitConfigMode (); // We must exit config before we save otherwise we will save with NMEA/RTCM off
324
340
@@ -371,9 +387,17 @@ bool GNSS_LG290P::configureBase()
371
387
372
388
serialGNSS->flush (); // Remove any incoming characters
373
389
374
- response &= enterConfigMode ();
390
+ uint8_t retries = 4 ;
391
+
392
+ while ((retries > 0 ) && (!enterConfigMode (500 )))
393
+ {
394
+ retries--;
395
+ systemPrintf (" configureBase: Enter config mode failed. %d retries remaining\r\n " , retries);
396
+ }
397
+
398
+ response &= (retries > 0 );
375
399
if (settings.debugGnss && response == false )
376
- systemPrintln (" Base : Enter config mode failed" );
400
+ systemPrintln (" configureBase : Enter config mode failed" );
377
401
378
402
// "When set to Base Station mode, the receiver will automatically disable NMEA message output and enable RTCM MSM4
379
403
// and RTCM3-1005 message output."
@@ -391,7 +415,7 @@ bool GNSS_LG290P::configureBase()
391
415
// fail because NMEA is not present.
392
416
_lg290p->setModeBase (false ); // Don't save and reset
393
417
if (settings.debugGnss && response == false )
394
- systemPrintln (" Base : Set mode base failed" );
418
+ systemPrintln (" configureBase : Set mode base failed" );
395
419
396
420
// Device should now have survey mode disabled
397
421
}
@@ -405,16 +429,16 @@ bool GNSS_LG290P::configureBase()
405
429
// fail because NMEA is not present.
406
430
disableSurveyIn (false ); // Don't save and reset
407
431
if (settings.debugGnss && response == false )
408
- systemPrintln (" Base : disable survey in failed" );
432
+ systemPrintln (" configureBase : disable survey in failed" );
409
433
}
410
434
411
435
response &= enableRTCMBase (); // Set RTCM messages
412
436
if (settings.debugGnss && response == false )
413
- systemPrintln (" Base : Enable RTCM failed" );
437
+ systemPrintln (" configureBase : Enable RTCM failed" );
414
438
415
439
response &= enableNMEA (); // Set NMEA messages
416
440
if (settings.debugGnss && response == false )
417
- systemPrintln (" Base : Enable NMEA failed" );
441
+ systemPrintln (" configureBase : Enable NMEA failed" );
418
442
419
443
response &= exitConfigMode (); // We must exit config before we save otherwise we will save with NMEA/RTCM off
420
444
@@ -464,11 +488,20 @@ bool GNSS_LG290P::configureNtpMode()
464
488
// ----------------------------------------
465
489
// Disable NMEA and RTCM on UART2 to reduce the serial traffic
466
490
// ----------------------------------------
467
- bool GNSS_LG290P::enterConfigMode ()
491
+ bool GNSS_LG290P::enterConfigMode (unsigned long waitForSemaphoreTimeout_millis )
468
492
{
469
493
if (online.gnss )
494
+ {
495
+ unsigned long start = millis ();
496
+ bool isBlocking;
497
+ do { // Wait for up to waitForSemaphoreTimeout for library to stop blocking
498
+ isBlocking = _lg290p->isBlocking ();
499
+ } while (isBlocking && (millis () < (start + waitForSemaphoreTimeout_millis)));
500
+
501
+ // This will fail if the library is still blocking, but it is worth a punt...
470
502
return (_lg290p->sendOkCommand (" $PQTMCFGPROT" ,
471
503
" ,W,1,2,00000000,00000000" )); // Disable NMEA and RTCM on the LG290P UART2
504
+ }
472
505
return (false );
473
506
}
474
507
0 commit comments