From 51b8a9e36593f3ef8f4f95687f666050c5a632ba Mon Sep 17 00:00:00 2001 From: Kemal Hadimli Date: Tue, 24 Dec 2013 01:48:11 +0200 Subject: [PATCH 1/4] gps autoconfigure: wait 100ms between baud changes --- src/gps.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/gps.c b/src/gps.c index 4df644d506..95ce7bab08 100644 --- a/src/gps.c +++ b/src/gps.c @@ -9,6 +9,7 @@ #define GPS_TIMEOUT (2500) // How many entries in gpsInitData array below #define GPS_INIT_ENTRIES (5) +#define GPS_BAUD_DELAY (100) typedef struct gpsInitData_t { uint32_t baudrate; @@ -70,6 +71,7 @@ typedef struct gpsData_t { uint32_t lastLastMessage; // last-last valid GPS message. Used to calculate delta. uint32_t state_position; // incremental variable for loops + uint32_t state_ts; // timestamp for last state_position increment } gpsData_t; @@ -83,6 +85,7 @@ static void gpsSetState(uint8_t state) { gpsData.state = state; gpsData.state_position = 0; + gpsData.state_ts = millis(); } void gpsInit(uint8_t baudrate) @@ -124,6 +127,9 @@ void gpsInitHardware(void) break; if (gpsData.state == GPS_INITIALIZING) { + uint32_t m = millis(); + if (m - gpsData.state_ts < GPS_BAUD_DELAY) return; + if (gpsData.state_position < GPS_INIT_ENTRIES) { // try different speed to INIT serialSetBaudRate(core.gpsport, gpsInitData[gpsData.state_position].baudrate); @@ -131,6 +137,7 @@ void gpsInitHardware(void) serialPrint(core.gpsport, gpsInitData[mcfg.gps_baudrate].ubx); gpsData.state_position++; + gpsData.state_ts = m; } else { // we're now (hopefully) at the correct rate, next state will switch to it gpsData.baudrateIndex = mcfg.gps_baudrate; From 11abec88edfe8134b4bcbb2ecaca770c8a275c9d Mon Sep 17 00:00:00 2001 From: Kemal Hadimli Date: Tue, 24 Dec 2013 01:48:51 +0200 Subject: [PATCH 2/4] gps nmea: reset error counter on init hardware --- src/gps.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gps.c b/src/gps.c index 95ce7bab08..84a3c0b22b 100644 --- a/src/gps.c +++ b/src/gps.c @@ -117,7 +117,7 @@ void gpsInitHardware(void) // nothing to do, just set baud rate and try receiving some stuff and see if it parses serialSetBaudRate(core.gpsport, gpsInitData[gpsData.baudrateIndex].baudrate); gpsSetState(GPS_RECEIVINGDATA); - return; + break; case GPS_UBLOX: // UBX will run at mcfg.baudrate, it shouldn't be "autodetected". So here we force it to that rate From ab49f4efd2582ea461f1f08ba7d7e5a14477ab05 Mon Sep 17 00:00:00 2001 From: Kemal Hadimli Date: Tue, 24 Dec 2013 02:20:17 +0200 Subject: [PATCH 3/4] fix formatting --- src/gps.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/gps.c b/src/gps.c index 84a3c0b22b..0288543dee 100644 --- a/src/gps.c +++ b/src/gps.c @@ -123,12 +123,13 @@ void gpsInitHardware(void) // UBX will run at mcfg.baudrate, it shouldn't be "autodetected". So here we force it to that rate // Wait until GPS transmit buffer is empty - if (!isSerialTransmitBufferEmpty(core.gpsport)) - break; + if (!isSerialTransmitBufferEmpty(core.gpsport)) + break; if (gpsData.state == GPS_INITIALIZING) { uint32_t m = millis(); - if (m - gpsData.state_ts < GPS_BAUD_DELAY) return; + if (m - gpsData.state_ts < GPS_BAUD_DELAY) + return; if (gpsData.state_position < GPS_INIT_ENTRIES) { // try different speed to INIT From d9c9cbfb9f3c370a46c14deab2d4ba2777e1d420 Mon Sep 17 00:00:00 2001 From: Kemal Hadimli Date: Tue, 24 Dec 2013 16:15:08 +0200 Subject: [PATCH 4/4] another formatting fix --- src/gps.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gps.c b/src/gps.c index 0288543dee..a3f6f9c25c 100644 --- a/src/gps.c +++ b/src/gps.c @@ -122,7 +122,7 @@ void gpsInitHardware(void) case GPS_UBLOX: // UBX will run at mcfg.baudrate, it shouldn't be "autodetected". So here we force it to that rate - // Wait until GPS transmit buffer is empty + // Wait until GPS transmit buffer is empty if (!isSerialTransmitBufferEmpty(core.gpsport)) break;