1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-23 00:05:33 +03:00

Ublox mode selectable with an option

This commit is contained in:
Tony Cabello 2020-01-19 08:36:45 +01:00
parent a2aeb0cef4
commit c19dc26055
4 changed files with 38 additions and 6 deletions

View file

@ -193,6 +193,10 @@ static const char * const lookupTableGPSProvider[] = {
static const char * const lookupTableGPSSBASMode[] = {
"AUTO", "EGNOS", "WAAS", "MSAS", "GAGAN"
};
static const char * const lookupTableGPSUBLOXMode[] = {
"AIRBORNE", "PEDESTRIAN", "AUTO"
};
#endif
#ifdef USE_SERVOS
@ -502,6 +506,7 @@ const lookupTableEntry_t lookupTables[] = {
#ifdef USE_GPS
LOOKUP_TABLE_ENTRY(lookupTableGPSProvider),
LOOKUP_TABLE_ENTRY(lookupTableGPSSBASMode),
LOOKUP_TABLE_ENTRY(lookupTableGPSUBLOXMode),
#ifdef USE_GPS_RESCUE
LOOKUP_TABLE_ENTRY(lookupTableRescueSanityType),
LOOKUP_TABLE_ENTRY(lookupTableRescueAltitudeMode),
@ -941,6 +946,7 @@ const clivalue_t valueTable[] = {
{ "gps_auto_config", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_GPS_CONFIG, offsetof(gpsConfig_t, autoConfig) },
{ "gps_auto_baud", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_GPS_CONFIG, offsetof(gpsConfig_t, autoBaud) },
{ "gps_ublox_use_galileo", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_GPS_CONFIG, offsetof(gpsConfig_t, gps_ublox_use_galileo) },
{ "gps_ublox_mode", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_GPS_UBLOX_MODE }, PG_GPS_CONFIG, offsetof(gpsConfig_t, gps_ublox_mode) },
{ "gps_set_home_point_once", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_GPS_CONFIG, offsetof(gpsConfig_t, gps_set_home_point_once) },
{ "gps_use_3d_speed", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_GPS_CONFIG, offsetof(gpsConfig_t, gps_use_3d_speed) },

View file

@ -32,6 +32,7 @@ typedef enum {
#ifdef USE_GPS
TABLE_GPS_PROVIDER,
TABLE_GPS_SBAS_MODE,
TABLE_GPS_UBLOX_MODE,
#endif
#ifdef USE_GPS_RESCUE
TABLE_GPS_RESCUE_SANITY_CHECK,

View file

@ -232,6 +232,7 @@ PG_RESET_TEMPLATE(gpsConfig_t, gpsConfig,
.autoConfig = GPS_AUTOCONFIG_ON,
.autoBaud = GPS_AUTOBAUD_OFF,
.gps_ublox_use_galileo = false,
.gps_ublox_mode = UBLOX_AIRBORNE,
.gps_set_home_point_once = false,
.gps_use_3d_speed = false
);
@ -418,11 +419,11 @@ void gpsInitUblox(void)
if (gpsData.messageState == GPS_MESSAGE_STATE_INIT) {
if (gpsData.state_position < sizeof(ubloxInit)) {
if (gpsData.state_position < sizeof(ubloxAirborne)) {
#if defined(GPS_UBLOX_MODE_PEDESTRIAN)
serialWrite(gpsPort, ubloxInit[gpsData.state_position]);
#else
serialWrite(gpsPort, ubloxAirborne[gpsData.state_position]);
#endif
if (gpsConfig()->gps_ublox_mode == UBLOX_AIRBORNE) {
serialWrite(gpsPort, ubloxAirborne[gpsData.state_position]);
} else {
serialWrite(gpsPort, ubloxInit[gpsData.state_position]);
}
} else {
serialWrite(gpsPort, ubloxInit[gpsData.state_position]);
}
@ -456,7 +457,7 @@ void gpsInitUblox(void)
}
}
if (gpsData.messageState >= GPS_MESSAGE_STATE_ENTRY_COUNT) {
if (gpsData.messageState >= GPS_MESSAGE_STATE_INITIALIZED) {
// ublox should be initialised, try receiving
gpsSetState(GPS_RECEIVING_DATA);
}
@ -537,6 +538,21 @@ void gpsUpdate(timeUs_t currentTimeUs)
// remove GPS from capability
sensorsClear(SENSOR_GPS);
gpsSetState(GPS_LOST_COMMUNICATION);
} else {
if ((gpsData.messageState == GPS_MESSAGE_STATE_INITIALIZED) && STATE(GPS_FIX) && (gpsConfig()->gps_ublox_mode == UBLOX_AUTO)) {
gpsData.messageState = GPS_MESSAGE_STATE_PEDESTRIAN_TO_AIRBORNE;
gpsData.state_position = 0;
}
if (gpsData.messageState == GPS_MESSAGE_STATE_PEDESTRIAN_TO_AIRBORNE) {
if (gpsData.state_position < sizeof(ubloxAirborne)) {
if (isSerialTransmitBufferEmpty(gpsPort)) {
serialWrite(gpsPort, ubloxAirborne[gpsData.state_position]);
gpsData.state_position++;
}
} else {
gpsData.messageState = GPS_MESSAGE_STATE_ENTRY_COUNT;
}
}
}
break;
}

View file

@ -48,6 +48,12 @@ typedef enum {
#define SBAS_MODE_MAX SBAS_GAGAN
typedef enum {
UBLOX_AIRBORNE = 0,
UBLOX_PEDESTRIAN,
UBLOX_AUTO
} ubloxMode_e;
typedef enum {
GPS_BAUDRATE_115200 = 0,
GPS_BAUDRATE_57600,
@ -74,6 +80,7 @@ typedef struct gpsConfig_s {
gpsAutoConfig_e autoConfig;
gpsAutoBaud_e autoBaud;
uint8_t gps_ublox_use_galileo;
ubloxMode_e gps_ublox_mode;
uint8_t gps_set_home_point_once;
uint8_t gps_use_3d_speed;
} gpsConfig_t;
@ -106,6 +113,8 @@ typedef enum {
GPS_MESSAGE_STATE_INIT,
GPS_MESSAGE_STATE_SBAS,
GPS_MESSAGE_STATE_GALILEO,
GPS_MESSAGE_STATE_INITIALIZED,
GPS_MESSAGE_STATE_PEDESTRIAN_TO_AIRBORNE,
GPS_MESSAGE_STATE_ENTRY_COUNT
} gpsMessageState_e;