mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-20 14:55:21 +03:00
- add GPS auto change buadrate 4800 to 115200 support
This commit is contained in:
parent
8e2b485eac
commit
ab6f1af171
1 changed files with 40 additions and 0 deletions
|
@ -237,8 +237,10 @@ void gpsInit(serialConfig_t *initialSerialConfig, gpsConfig_t *initialGpsConfig)
|
||||||
|
|
||||||
portMode_t mode = MODE_RXTX;
|
portMode_t mode = MODE_RXTX;
|
||||||
// only RX is needed for NMEA-style GPS
|
// only RX is needed for NMEA-style GPS
|
||||||
|
#ifndef COLIBRI_RACE
|
||||||
if (gpsConfig->provider == GPS_NMEA)
|
if (gpsConfig->provider == GPS_NMEA)
|
||||||
mode &= ~MODE_TX;
|
mode &= ~MODE_TX;
|
||||||
|
#endif
|
||||||
|
|
||||||
// no callback - buffer will be consumed in gpsThread()
|
// no callback - buffer will be consumed in gpsThread()
|
||||||
gpsPort = openSerialPort(gpsPortConfig->identifier, FUNCTION_GPS, NULL, gpsInitData[gpsData.baudrateIndex].baudrateIndex, mode, SERIAL_NOT_INVERTED);
|
gpsPort = openSerialPort(gpsPortConfig->identifier, FUNCTION_GPS, NULL, gpsInitData[gpsData.baudrateIndex].baudrateIndex, mode, SERIAL_NOT_INVERTED);
|
||||||
|
@ -253,11 +255,49 @@ void gpsInit(serialConfig_t *initialSerialConfig, gpsConfig_t *initialGpsConfig)
|
||||||
|
|
||||||
void gpsInitNmea(void)
|
void gpsInitNmea(void)
|
||||||
{
|
{
|
||||||
|
#ifdef COLIBRI_RACE
|
||||||
|
uint32_t now;
|
||||||
|
#endif
|
||||||
switch(gpsData.state) {
|
switch(gpsData.state) {
|
||||||
case GPS_INITIALIZING:
|
case GPS_INITIALIZING:
|
||||||
|
#ifdef COLIBRI_RACE
|
||||||
|
now = millis();
|
||||||
|
if (now - gpsData.state_ts < 1000)
|
||||||
|
return;
|
||||||
|
gpsData.state_ts = now;
|
||||||
|
if (gpsData.state_position < 1) {
|
||||||
|
serialSetBaudRate(gpsPort, 4800);
|
||||||
|
gpsData.state_position++;
|
||||||
|
} else if (gpsData.state_position < 2) {
|
||||||
|
// print our FIXED init string for the baudrate we want to be at
|
||||||
|
serialPrint(gpsPort, "$PSRF100,1,115200,8,1,0*05\r\n");
|
||||||
|
gpsData.state_position++;
|
||||||
|
} else {
|
||||||
|
// we're now (hopefully) at the correct rate, next state will switch to it
|
||||||
|
gpsSetState(GPS_CHANGE_BAUD);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
case GPS_CHANGE_BAUD:
|
case GPS_CHANGE_BAUD:
|
||||||
|
#ifdef COLIBRI_RACE
|
||||||
|
now = millis();
|
||||||
|
if (now - gpsData.state_ts < 1000)
|
||||||
|
return;
|
||||||
|
gpsData.state_ts = now;
|
||||||
|
if (gpsData.state_position < 1) {
|
||||||
|
serialSetBaudRate(gpsPort, baudRates[gpsInitData[gpsData.baudrateIndex].baudrateIndex]);
|
||||||
|
gpsData.state_position++;
|
||||||
|
} else if (gpsData.state_position < 2) {
|
||||||
|
serialPrint(gpsPort, "$PSRF103,00,6,00,0*23\r\n");
|
||||||
|
gpsData.state_position++;
|
||||||
|
} else {
|
||||||
|
#else
|
||||||
serialSetBaudRate(gpsPort, baudRates[gpsInitData[gpsData.baudrateIndex].baudrateIndex]);
|
serialSetBaudRate(gpsPort, baudRates[gpsInitData[gpsData.baudrateIndex].baudrateIndex]);
|
||||||
|
#endif
|
||||||
gpsSetState(GPS_RECEIVING_DATA);
|
gpsSetState(GPS_RECEIVING_DATA);
|
||||||
|
#ifdef COLIBRI_RACE
|
||||||
|
}
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue