|
|
|
@ -42,14 +42,14 @@ class MicroNMEALocationProvider : public LocationProvider { |
|
|
|
int8_t _claims = 0; |
|
|
|
int _pin_reset; |
|
|
|
int _pin_en; |
|
|
|
long next_check = 0; |
|
|
|
unsigned long next_check = 0; |
|
|
|
long time_valid = 0; |
|
|
|
unsigned long _last_time_sync = 0; |
|
|
|
static const unsigned long TIME_SYNC_INTERVAL = 1800000; // Re-sync every 30 minutes
|
|
|
|
|
|
|
|
public : |
|
|
|
MicroNMEALocationProvider(Stream& ser, mesh::RTCClock* clock = NULL, int pin_reset = GPS_RESET, int pin_en = GPS_EN,RefCountedDigitalPin* peripher_power=NULL) : |
|
|
|
_gps_serial(&ser), nmea(_nmeaBuffer, sizeof(_nmeaBuffer)), _pin_reset(pin_reset), _pin_en(pin_en), _clock(clock), _peripher_power(peripher_power) { |
|
|
|
nmea(_nmeaBuffer, sizeof(_nmeaBuffer)), _clock(clock), _gps_serial(&ser), _peripher_power(peripher_power), _pin_reset(pin_reset), _pin_en(pin_en) { |
|
|
|
if (_pin_reset != -1) { |
|
|
|
pinMode(_pin_reset, OUTPUT); |
|
|
|
digitalWrite(_pin_reset, GPS_RESET_FORCE); |
|
|
|
@ -62,9 +62,7 @@ public : |
|
|
|
|
|
|
|
void claim() { |
|
|
|
_claims++; |
|
|
|
if (_claims > 0) { |
|
|
|
if (_peripher_power) _peripher_power->claim(); |
|
|
|
} |
|
|
|
if (_peripher_power) _peripher_power->claim(); |
|
|
|
} |
|
|
|
|
|
|
|
void release() { |
|
|
|
@ -143,7 +141,7 @@ public : |
|
|
|
|
|
|
|
if (!isValid()) time_valid = 0; |
|
|
|
|
|
|
|
if (millis() > next_check) { |
|
|
|
if ((long)(millis() - next_check) > 0) { |
|
|
|
next_check = millis() + 1000; |
|
|
|
// Re-enable time sync periodically when GPS has valid fix
|
|
|
|
if (!_time_sync_needed && _clock != NULL && (millis() - _last_time_sync) > TIME_SYNC_INTERVAL) { |
|
|
|
|