From ef6ef2e9d2bb9e3dd9d9d79ba3f8bd0cf210fe3c Mon Sep 17 00:00:00 2001 From: Olexandr Tyshchenko Date: Tue, 10 Nov 2026 19:33:38 +0200 Subject: [PATCH] GPS: GPS_BAUD_PROBE_LIST as a build flag for any NmeaGpsDriver; enable on Station G2/G3 The probe list was wired only in variants/promicro/target.cpp. It is now the default list of NmeaGpsDriver when GPS_BAUD_PROBE_LIST is set, so a variant enables baud autodetection with a build flag alone. Station G2 and G3 enable it: their Grove UART connector is used with M5Stack Unit GPS modules, which default to 115200. --- src/helpers/sensors/NmeaGpsDriver.h | 14 +++++++++++++- variants/promicro/target.cpp | 7 +------ variants/station_g2/platformio.ini | 1 + variants/station_g3_esp32/platformio.ini | 1 + 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/helpers/sensors/NmeaGpsDriver.h b/src/helpers/sensors/NmeaGpsDriver.h index dfe75a4f8f4..9beacdc2fde 100644 --- a/src/helpers/sensors/NmeaGpsDriver.h +++ b/src/helpers/sensors/NmeaGpsDriver.h @@ -64,6 +64,18 @@ #endif #endif +// Optional rates detect() tries after GPS_BAUD_RATE, for GPS modules whose baud rate is +// not known in advance (e.g. -D GPS_BAUD_PROBE_LIST=9600,115200,38400). Used by every +// NmeaGpsDriver that does not pass its own list. +#ifdef GPS_BAUD_PROBE_LIST + static const uint32_t NMEA_GPS_PROBE_BAUDS[] = { GPS_BAUD_PROBE_LIST }; + #define GPS_PROBE_BAUDS NMEA_GPS_PROBE_BAUDS + #define GPS_PROBE_COUNT ((uint8_t)(sizeof(NMEA_GPS_PROBE_BAUDS) / sizeof(NMEA_GPS_PROBE_BAUDS[0]))) +#else + #define GPS_PROBE_BAUDS nullptr + #define GPS_PROBE_COUNT 0 +#endif + #ifndef PIN_GPS_SWITCH #define PIN_GPS_SWITCH (-1) #endif @@ -199,7 +211,7 @@ class NmeaGpsDriver : public GpsDriver { uint32_t baudRate = GPS_BAUD_RATE, int hardwareEnablePin = PIN_GPS_SWITCH, int hardwareEnableActive = GPS_SWITCH_ACTIVE, - const uint32_t* probeBauds = nullptr, uint8_t probeCount = 0) + const uint32_t* probeBauds = GPS_PROBE_BAUDS, uint8_t probeCount = GPS_PROBE_COUNT) : _hardwareSerial(&serial), _peripheralPower(peripheralPower), _txPin(txPin), _rxPin(rxPin), _resetPin(resetPin), _enablePin(enablePin), _enableActive(enableActive), _resetActive(resetActive), _baudRate(baudRate), diff --git a/variants/promicro/target.cpp b/variants/promicro/target.cpp index 4cdeb6e0826..5758d9cda7e 100644 --- a/variants/promicro/target.cpp +++ b/variants/promicro/target.cpp @@ -12,12 +12,7 @@ VolatileRTCClock fallback_clock; AutoDiscoverRTCClock rtc_clock(fallback_clock); #if ENV_INCLUDE_GPS #include - #ifdef GPS_BAUD_PROBE_LIST // e.g. -D GPS_BAUD_PROBE_LIST=9600,38400,115200 - static const uint32_t gps_probe_bauds[] = { GPS_BAUD_PROBE_LIST }; - NmeaGpsDriver gps_driver(Serial1, gps_probe_bauds, sizeof(gps_probe_bauds) / sizeof(gps_probe_bauds[0])); - #else - NmeaGpsDriver gps_driver(Serial1); - #endif + NmeaGpsDriver gps_driver(Serial1); MicroNMEALocationProvider nmea(gps_driver, &rtc_clock); EnvironmentSensorManager sensors = EnvironmentSensorManager(nmea); #else diff --git a/variants/station_g2/platformio.ini b/variants/station_g2/platformio.ini index c1ae765fede..c4fd344ddea 100644 --- a/variants/station_g2/platformio.ini +++ b/variants/station_g2/platformio.ini @@ -25,6 +25,7 @@ build_flags = -D PIN_USER_BTN=38 -D PIN_GPS_RX=15 -D PIN_GPS_TX=7 + -D GPS_BAUD_PROBE_LIST=9600,115200,38400 ; Grove UART GPS units (e.g. M5Stack Unit GPS v1.1) default to 115200 -D SX126X_DIO2_AS_RF_SWITCH=true -D SX126X_DIO3_TCXO_VOLTAGE=1.8 -D SX126X_CURRENT_LIMIT=140 diff --git a/variants/station_g3_esp32/platformio.ini b/variants/station_g3_esp32/platformio.ini index 7006d939ee5..2ce8bb39244 100644 --- a/variants/station_g3_esp32/platformio.ini +++ b/variants/station_g3_esp32/platformio.ini @@ -29,6 +29,7 @@ build_flags = -D PIN_USER_BTN=38 -D PIN_GPS_RX=15 -D PIN_GPS_TX=7 + -D GPS_BAUD_PROBE_LIST=9600,115200,38400 ; Grove UART GPS units (e.g. M5Stack Unit GPS v1.1) default to 115200 -D SX126X_DIO2_AS_RF_SWITCH=true -D SX126X_DIO3_TCXO_VOLTAGE=1.8 -D SX126X_CURRENT_LIMIT=140