mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-23 08:15:30 +03:00
Transition to new per-port & per-function baud rate configuration.
This commit is contained in:
parent
b6509dd1eb
commit
1a8500c768
13 changed files with 97 additions and 35 deletions
|
@ -100,19 +100,19 @@ static serialPort_t *gpsPort;
|
|||
|
||||
typedef struct gpsInitData_t {
|
||||
uint8_t index;
|
||||
uint32_t baudrate;
|
||||
uint8_t baudrateIndex; // see baudRate_e
|
||||
const char *ubx;
|
||||
const char *mtk;
|
||||
} gpsInitData_t;
|
||||
|
||||
// NMEA will cycle through these until valid data is received
|
||||
static const gpsInitData_t gpsInitData[] = {
|
||||
{ GPS_BAUDRATE_115200, 115200, "$PUBX,41,1,0003,0001,115200,0*1E\r\n", "$PMTK251,115200*1F\r\n" },
|
||||
{ GPS_BAUDRATE_57600, 57600, "$PUBX,41,1,0003,0001,57600,0*2D\r\n", "$PMTK251,57600*2C\r\n" },
|
||||
{ GPS_BAUDRATE_38400, 38400, "$PUBX,41,1,0003,0001,38400,0*26\r\n", "$PMTK251,38400*27\r\n" },
|
||||
{ GPS_BAUDRATE_19200, 19200, "$PUBX,41,1,0003,0001,19200,0*23\r\n", "$PMTK251,19200*22\r\n" },
|
||||
{ GPS_BAUDRATE_115200, BAUD_115200, "$PUBX,41,1,0003,0001,115200,0*1E\r\n", "$PMTK251,115200*1F\r\n" },
|
||||
{ GPS_BAUDRATE_57600, BAUD_57600, "$PUBX,41,1,0003,0001,57600,0*2D\r\n", "$PMTK251,57600*2C\r\n" },
|
||||
{ GPS_BAUDRATE_38400, BAUD_38400, "$PUBX,41,1,0003,0001,38400,0*26\r\n", "$PMTK251,38400*27\r\n" },
|
||||
{ GPS_BAUDRATE_19200, BAUD_19200, "$PUBX,41,1,0003,0001,19200,0*23\r\n", "$PMTK251,19200*22\r\n" },
|
||||
// 9600 is not enough for 5Hz updates - leave for compatibility to dumb NMEA that only runs at this speed
|
||||
{ GPS_BAUDRATE_9600, 9600, "$PUBX,41,1,0003,0001,9600,0*16\r\n", "" }
|
||||
{ GPS_BAUDRATE_9600, BAUD_9600, "$PUBX,41,1,0003,0001,9600,0*16\r\n", "" }
|
||||
};
|
||||
|
||||
#define GPS_INIT_DATA_ENTRY_COUNT (sizeof(gpsInitData) / sizeof(gpsInitData[0]))
|
||||
|
@ -226,7 +226,7 @@ void gpsInit(serialConfig_t *initialSerialConfig, gpsConfig_t *initialGpsConfig)
|
|||
return;
|
||||
}
|
||||
|
||||
while (gpsInitData[gpsData.baudrateIndex].baudrate != gpsPortConfig->baudrate) {
|
||||
while (gpsInitData[gpsData.baudrateIndex].baudrateIndex != gpsPortConfig->gps_baudrateIndex) {
|
||||
gpsData.baudrateIndex++;
|
||||
if (gpsData.baudrateIndex >= GPS_INIT_DATA_ENTRY_COUNT) {
|
||||
gpsData.baudrateIndex = DEFAULT_BAUD_RATE_INDEX;
|
||||
|
@ -240,7 +240,7 @@ void gpsInit(serialConfig_t *initialSerialConfig, gpsConfig_t *initialGpsConfig)
|
|||
mode &= ~MODE_TX;
|
||||
|
||||
// no callback - buffer will be consumed in gpsThread()
|
||||
gpsPort = openSerialPort(gpsPortConfig->identifier, FUNCTION_GPS, NULL, gpsInitData[gpsData.baudrateIndex].baudrate, mode, SERIAL_NOT_INVERTED);
|
||||
gpsPort = openSerialPort(gpsPortConfig->identifier, FUNCTION_GPS, NULL, gpsInitData[gpsData.baudrateIndex].baudrateIndex, mode, SERIAL_NOT_INVERTED);
|
||||
if (!gpsPort) {
|
||||
featureClear(FEATURE_GPS);
|
||||
return;
|
||||
|
@ -255,7 +255,7 @@ void gpsInitNmea(void)
|
|||
switch(gpsData.state) {
|
||||
case GPS_INITIALIZING:
|
||||
case GPS_CHANGE_BAUD:
|
||||
serialSetBaudRate(gpsPort, gpsInitData[gpsData.baudrateIndex].baudrate);
|
||||
serialSetBaudRate(gpsPort, baudRates[gpsInitData[gpsData.baudrateIndex].baudrateIndex]);
|
||||
gpsSetState(GPS_RECEIVING_DATA);
|
||||
break;
|
||||
}
|
||||
|
@ -279,13 +279,13 @@ void gpsInitUblox(void)
|
|||
|
||||
if (gpsData.state_position < GPS_INIT_ENTRIES) {
|
||||
// try different speed to INIT
|
||||
uint32_t newBaudRate = gpsInitData[gpsData.state_position].baudrate;
|
||||
baudRate_e newBaudRateIndex = gpsInitData[gpsData.state_position].baudrateIndex;
|
||||
|
||||
gpsData.state_ts = now;
|
||||
|
||||
if (serialGetBaudRate(gpsPort) != newBaudRate) {
|
||||
if (lookupBaudRateIndex(serialGetBaudRate(gpsPort)) != newBaudRateIndex) {
|
||||
// change the rate if needed and wait a little
|
||||
serialSetBaudRate(gpsPort, newBaudRate);
|
||||
serialSetBaudRate(gpsPort, baudRates[newBaudRateIndex]);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -299,7 +299,7 @@ void gpsInitUblox(void)
|
|||
}
|
||||
break;
|
||||
case GPS_CHANGE_BAUD:
|
||||
serialSetBaudRate(gpsPort, gpsInitData[gpsData.baudrateIndex].baudrate);
|
||||
serialSetBaudRate(gpsPort, baudRates[gpsInitData[gpsData.baudrateIndex].baudrateIndex]);
|
||||
gpsSetState(GPS_CONFIGURE);
|
||||
break;
|
||||
case GPS_CONFIGURE:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue