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:
parent
a2aeb0cef4
commit
c19dc26055
4 changed files with 38 additions and 6 deletions
|
@ -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) },
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue