mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-20 14:55:21 +03:00
Merge pull request #9850 from TonyBlit/fix_gps_timeout
This commit is contained in:
commit
324137e821
2 changed files with 20 additions and 3 deletions
|
@ -100,6 +100,8 @@ uint8_t GPS_svinfo_cno[GPS_SV_MAXSATS]; // Carrier to Noise Ratio (Signal St
|
|||
// How many entries in gpsInitData array below
|
||||
#define GPS_INIT_ENTRIES (GPS_BAUDRATE_MAX + 1)
|
||||
#define GPS_BAUDRATE_CHANGE_DELAY (200)
|
||||
// Timeout for waiting ACK/NAK in GPS task cycles (0.1s at 100Hz)
|
||||
#define UBLOX_ACK_TIMEOUT_MAX_COUNT (10)
|
||||
|
||||
static serialPort_t *gpsPort;
|
||||
|
||||
|
@ -404,6 +406,7 @@ static void ubloxSendConfigMessage(const uint8_t *data, uint8_t len)
|
|||
|
||||
// Save state for ACK waiting
|
||||
gpsData.ackWaitingMsgId = data[3]; //save message id for ACK
|
||||
gpsData.ackTimeoutCounter = 0;
|
||||
gpsData.ackState = UBLOX_ACK_WAITING;
|
||||
}
|
||||
|
||||
|
@ -527,7 +530,13 @@ void gpsInitUblox(void)
|
|||
ubloxSendConfigMessage((const uint8_t *) &tx_buffer, UBLOX_SBAS_MESSAGE_LENGTH);
|
||||
}
|
||||
break;
|
||||
case UBLOX_ACK_GOT_NACK: //TODO: implement a retry count, for now just ignore errors as the rest of the code is doing
|
||||
case UBLOX_ACK_WAITING:
|
||||
if ((++gpsData.ackTimeoutCounter) == UBLOX_ACK_TIMEOUT_MAX_COUNT) {
|
||||
gpsData.ackState = UBLOX_ACK_GOT_TIMEOUT;
|
||||
}
|
||||
break;
|
||||
case UBLOX_ACK_GOT_TIMEOUT:
|
||||
case UBLOX_ACK_GOT_NACK:
|
||||
case UBLOX_ACK_GOT_ACK:
|
||||
gpsData.state_position = 0;
|
||||
gpsData.ackState = UBLOX_ACK_IDLE;
|
||||
|
@ -608,7 +617,13 @@ void gpsInitUblox(void)
|
|||
ubloxSendConfigMessage((const uint8_t *) &tx_buffer, UBLOX_GNSS_MESSAGE_LENGTH);
|
||||
}
|
||||
break;
|
||||
case UBLOX_ACK_GOT_NACK: //TODO: implement a retry count, for now just ignore errors as the rest of the code is doing
|
||||
case UBLOX_ACK_WAITING:
|
||||
if ((++gpsData.ackTimeoutCounter) == UBLOX_ACK_TIMEOUT_MAX_COUNT) {
|
||||
gpsData.ackState = UBLOX_ACK_GOT_TIMEOUT;
|
||||
}
|
||||
break;
|
||||
case UBLOX_ACK_GOT_TIMEOUT:
|
||||
case UBLOX_ACK_GOT_NACK:
|
||||
case UBLOX_ACK_GOT_ACK:
|
||||
gpsData.state_position = 0;
|
||||
gpsData.ackState = UBLOX_ACK_IDLE;
|
||||
|
|
|
@ -77,7 +77,8 @@ typedef enum {
|
|||
UBLOX_ACK_IDLE = 0,
|
||||
UBLOX_ACK_WAITING,
|
||||
UBLOX_ACK_GOT_ACK,
|
||||
UBLOX_ACK_GOT_NACK
|
||||
UBLOX_ACK_GOT_NACK,
|
||||
UBLOX_ACK_GOT_TIMEOUT
|
||||
} ubloxAckState_e;
|
||||
|
||||
#define GPS_BAUDRATE_MAX GPS_BAUDRATE_9600
|
||||
|
@ -140,6 +141,7 @@ typedef struct gpsData_s {
|
|||
gpsMessageState_e messageState;
|
||||
|
||||
uint8_t ackWaitingMsgId; // Message id when waiting for ACK
|
||||
uint8_t ackTimeoutCounter; // Ack timeout counter
|
||||
ubloxAckState_e ackState;
|
||||
} gpsData_t;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue