mirror of
https://github.com/meshtastic/firmware.git
synced 2025-06-08 22:22:05 +00:00
More GPS work (#2711)
Increase GPS buffer on esp32 Check for and flush GPS buffer when overfilled and corrupted. Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
This commit is contained in:
parent
6e0b6684ee
commit
c44986127e
@ -30,6 +30,7 @@ build_flags =
|
|||||||
-DCONFIG_BT_NIMBLE_MAX_CCCDS=20
|
-DCONFIG_BT_NIMBLE_MAX_CCCDS=20
|
||||||
-DCONFIG_BT_NIMBLE_HOST_TASK_STACK_SIZE=5120
|
-DCONFIG_BT_NIMBLE_HOST_TASK_STACK_SIZE=5120
|
||||||
-DESP_OPENSSL_SUPPRESS_LEGACY_WARNING
|
-DESP_OPENSSL_SUPPRESS_LEGACY_WARNING
|
||||||
|
-DSERIAL_BUFFER_SIZE=4096
|
||||||
;-DDEBUG_HEAP
|
;-DDEBUG_HEAP
|
||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
|
@ -174,7 +174,7 @@ bool GPS::setupGPS()
|
|||||||
|
|
||||||
#ifdef ARCH_ESP32
|
#ifdef ARCH_ESP32
|
||||||
// In esp32 framework, setRxBufferSize needs to be initialized before Serial
|
// In esp32 framework, setRxBufferSize needs to be initialized before Serial
|
||||||
_serial_gps->setRxBufferSize(2048); // the default is 256
|
_serial_gps->setRxBufferSize(SERIAL_BUFFER_SIZE); // the default is 256
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// if the overrides are not dialled in, set them from the board definitions, if they exist
|
// if the overrides are not dialled in, set them from the board definitions, if they exist
|
||||||
@ -834,6 +834,14 @@ void GPS::forceWake(bool on)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// clear the GPS rx buffer as quickly as possible
|
||||||
|
void GPS::clearBuffer()
|
||||||
|
{
|
||||||
|
int x = _serial_gps->available();
|
||||||
|
while (x--)
|
||||||
|
_serial_gps->read();
|
||||||
|
}
|
||||||
|
|
||||||
/// Prepare the GPS for the cpu entering deep or light sleep, expect to be gone for at least 100s of msecs
|
/// Prepare the GPS for the cpu entering deep or light sleep, expect to be gone for at least 100s of msecs
|
||||||
int GPS::prepareSleep(void *unused)
|
int GPS::prepareSleep(void *unused)
|
||||||
{
|
{
|
||||||
|
@ -91,6 +91,9 @@ class GPS : private concurrency::OSThread
|
|||||||
// Some GPS modules (ublock) require factory reset
|
// Some GPS modules (ublock) require factory reset
|
||||||
virtual bool factoryReset() { return true; }
|
virtual bool factoryReset() { return true; }
|
||||||
|
|
||||||
|
// Empty the input buffer as quickly as possible
|
||||||
|
void clearBuffer();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/// Do gps chipset specific init, return true for success
|
/// Do gps chipset specific init, return true for success
|
||||||
virtual bool setupGPS();
|
virtual bool setupGPS();
|
||||||
|
@ -253,8 +253,14 @@ bool NMEAGPS::hasFlow()
|
|||||||
bool NMEAGPS::whileIdle()
|
bool NMEAGPS::whileIdle()
|
||||||
{
|
{
|
||||||
bool isValid = false;
|
bool isValid = false;
|
||||||
|
#ifdef SERIAL_BUFFER_SIZE
|
||||||
|
if (_serial_gps->available() >= SERIAL_BUFFER_SIZE - 1) {
|
||||||
|
LOG_WARN("GPS Buffer full with %u bytes waiting. Flushing to avoid corruption.\n", _serial_gps->available());
|
||||||
|
clearBuffer();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
// if (_serial_gps->available() > 0)
|
// if (_serial_gps->available() > 0)
|
||||||
// LOG_DEBUG("GPS Bytes Waiting: %u\n", _serial_gps->available());
|
LOG_DEBUG("GPS Bytes Waiting: %u\n", _serial_gps->available());
|
||||||
// First consume any chars that have piled up at the receiver
|
// First consume any chars that have piled up at the receiver
|
||||||
while (_serial_gps->available() > 0) {
|
while (_serial_gps->available() > 0) {
|
||||||
int c = _serial_gps->read();
|
int c = _serial_gps->read();
|
||||||
|
Loading…
Reference in New Issue
Block a user