1
0
Fork 0
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:
Michael Keller 2020-05-28 01:14:33 +12:00 committed by GitHub
commit 324137e821
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 3 deletions

View file

@ -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;

View file

@ -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;