diff --git a/src/main/cli/settings.c b/src/main/cli/settings.c index ea5d740c2a..e76faddd1f 100644 --- a/src/main/cli/settings.c +++ b/src/main/cli/settings.c @@ -205,8 +205,8 @@ static const char * const lookupTableGPSSBASMode[] = { "AUTO", "EGNOS", "WAAS", "MSAS", "GAGAN", "NONE" }; -static const char * const lookupTableGPSUBLOXMode[] = { - "AIRBORNE", "PEDESTRIAN", "DYNAMIC" +static const char * const lookupTableGPSUBLOXModels[] = { + "PORTABLE", "STATIONARY", "PEDESTRIAN", "AUTOMOTIVE", "AT_SEA", "AIRBORNE_1G", "AIRBORNE_2G", "AIRBORNE_4G" }; #endif @@ -534,7 +534,7 @@ const lookupTableEntry_t lookupTables[] = { #ifdef USE_GPS LOOKUP_TABLE_ENTRY(lookupTableGPSProvider), LOOKUP_TABLE_ENTRY(lookupTableGPSSBASMode), - LOOKUP_TABLE_ENTRY(lookupTableGPSUBLOXMode), + LOOKUP_TABLE_ENTRY(lookupTableGPSUBLOXModels), #ifdef USE_GPS_RESCUE LOOKUP_TABLE_ENTRY(lookupTableRescueSanityType), LOOKUP_TABLE_ENTRY(lookupTableRescueAltitudeMode), @@ -1003,7 +1003,8 @@ const clivalue_t valueTable[] = { { PARAM_NAME_GPS_SBAS_MODE, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_GPS_SBAS_MODE }, PG_GPS_CONFIG, offsetof(gpsConfig_t, sbasMode) }, { PARAM_NAME_GPS_AUTO_CONFIG, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_GPS_CONFIG, offsetof(gpsConfig_t, autoConfig) }, { PARAM_NAME_GPS_AUTO_BAUD, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_GPS_CONFIG, offsetof(gpsConfig_t, autoBaud) }, - { PARAM_NAME_GPS_UBLOX_MODE, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_GPS_UBLOX_MODE }, PG_GPS_CONFIG, offsetof(gpsConfig_t, gps_ublox_mode) }, + { PARAM_NAME_GPS_UBLOX_ACQUIRE_MODEL, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_GPS_UBLOX_MODELS }, PG_GPS_CONFIG, offsetof(gpsConfig_t, gps_ublox_acquire_model) }, + { PARAM_NAME_GPS_UBLOX_FLIGHT_MODEL, VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_GPS_UBLOX_MODELS }, PG_GPS_CONFIG, offsetof(gpsConfig_t, gps_ublox_flight_model) }, { PARAM_NAME_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) }, { PARAM_NAME_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) }, { PARAM_NAME_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) }, diff --git a/src/main/cli/settings.h b/src/main/cli/settings.h index b55a6f8724..ec4d4c06cc 100644 --- a/src/main/cli/settings.h +++ b/src/main/cli/settings.h @@ -32,7 +32,7 @@ typedef enum { #ifdef USE_GPS TABLE_GPS_PROVIDER, TABLE_GPS_SBAS_MODE, - TABLE_GPS_UBLOX_MODE, + TABLE_GPS_UBLOX_MODELS, #endif #ifdef USE_GPS_RESCUE TABLE_GPS_RESCUE_SANITY_CHECK, diff --git a/src/main/fc/parameter_names.h b/src/main/fc/parameter_names.h index 6815a90f44..59f56e9612 100644 --- a/src/main/fc/parameter_names.h +++ b/src/main/fc/parameter_names.h @@ -144,7 +144,8 @@ #define PARAM_NAME_GPS_AUTO_CONFIG "gps_auto_config" #define PARAM_NAME_GPS_AUTO_BAUD "gps_auto_baud" #define PARAM_NAME_GPS_UBLOX_USE_GALILEO "gps_ublox_use_galileo" -#define PARAM_NAME_GPS_UBLOX_MODE "gps_ublox_mode" +#define PARAM_NAME_GPS_UBLOX_ACQUIRE_MODEL "gps_ublox_acquire_model" +#define PARAM_NAME_GPS_UBLOX_FLIGHT_MODEL "gps_ublox_flight_model" #define PARAM_NAME_GPS_SET_HOME_POINT_ONCE "gps_set_home_point_once" #define PARAM_NAME_GPS_USE_3D_SPEED "gps_use_3d_speed" diff --git a/src/main/io/gps.c b/src/main/io/gps.c index c6e169238d..7a846877e3 100644 --- a/src/main/io/gps.c +++ b/src/main/io/gps.c @@ -165,10 +165,6 @@ typedef enum { #define UBLOX_GNSS_ENABLE 0x1 #define UBLOX_GNSS_DEFAULT_SIGCFGMASK 0x10000 -#define UBLOX_DYNMODE_PEDESTRIAN 3 -#define UBLOX_DYNMODE_AIRBORNE_1G 6 -#define UBLOX_DYNMODE_AIRBORNE_4G 8 - typedef struct ubxHeader_s { uint8_t preamble1; uint8_t preamble2; @@ -484,19 +480,11 @@ static void ubloxSendPollMessage(uint8_t msg_id) ubloxSendMessage((const uint8_t *) &tx_buffer, 6); } -static void ubloxSendNAV5Message(bool airborne) +static void ubloxSendNAV5Message(uint8_t model) { ubxMessage_t tx_buffer; tx_buffer.payload.cfg_nav5.mask = 0xFFFF; - if (airborne) { -#if defined(GPS_UBLOX_MODE_AIRBORNE_1G) - tx_buffer.payload.cfg_nav5.dynModel = UBLOX_DYNMODE_AIRBORNE_1G; -#else - tx_buffer.payload.cfg_nav5.dynModel = UBLOX_DYNMODE_AIRBORNE_4G; -#endif - } else { - tx_buffer.payload.cfg_nav5.dynModel = UBLOX_DYNMODE_PEDESTRIAN; - } + tx_buffer.payload.cfg_nav5.dynModel = model == 0 ? model : model+1; //no model with value 1 tx_buffer.payload.cfg_nav5.fixMode = 3; tx_buffer.payload.cfg_nav5.fixedAlt = 0; tx_buffer.payload.cfg_nav5.fixedAltVar = 10000; @@ -642,7 +630,7 @@ void gpsInitUblox(void) case UBLOX_INITIALIZE: gpsData.ubloxUsePVT = true; gpsData.ubloxUseSAT = true; - ubloxSendNAV5Message(gpsConfig()->gps_ublox_mode == UBLOX_AIRBORNE); + ubloxSendNAV5Message(gpsConfig()->gps_ublox_acquire_model); break; case UBLOX_MSG_VGS: //Disable NMEA Messages ubloxSetMessageRate(0xF0, 0x05, 0); // VGS: Course over ground and Ground speed @@ -855,8 +843,8 @@ void gpsUpdate(timeUs_t currentTimeUs) } break; case UBLOX_MSG_VGS: - if (STATE(GPS_FIX) && (gpsConfig()->gps_ublox_mode == UBLOX_DYNAMIC)) { - ubloxSendNAV5Message(true); + if (STATE(GPS_FIX)) { + ubloxSendNAV5Message(gpsConfig()->gps_ublox_flight_model); gpsData.state_position = UBLOX_MSG_GSV; } if (isConfiguratorConnected()) { diff --git a/src/main/io/gps.h b/src/main/io/gps.h index ecb1460a59..a526caf479 100644 --- a/src/main/io/gps.h +++ b/src/main/io/gps.h @@ -56,10 +56,15 @@ typedef enum { #define SBAS_MODE_MAX SBAS_GAGAN typedef enum { - UBLOX_AIRBORNE = 0, - UBLOX_PEDESTRIAN, - UBLOX_DYNAMIC -} ubloxMode_e; + UBLOX_MODEL_PORTABLE = 0, + UBLOX_MODEL_STATIONARY, + UBLOX_MODEL_PEDESTRIAN, + UBLOX_MODEL_AUTOMOTIVE, + UBLOX_MODEL_AT_SEA, + UBLOX_MODEL_AIRBORNE_1G, + UBLOX_MODEL_AIRBORNE_2G, + UBLOX_MODEL_AIRBORNE_4G, +} ubloxModel_e; typedef enum { GPS_BAUDRATE_115200 = 0, diff --git a/src/main/pg/gps.c b/src/main/pg/gps.c index 3d787b818c..bf5ad8d634 100644 --- a/src/main/pg/gps.c +++ b/src/main/pg/gps.c @@ -36,7 +36,8 @@ PG_RESET_TEMPLATE(gpsConfig_t, gpsConfig, .sbasMode = SBAS_NONE, .autoConfig = GPS_AUTOCONFIG_ON, .autoBaud = GPS_AUTOBAUD_OFF, - .gps_ublox_mode = UBLOX_AIRBORNE, + .gps_ublox_acquire_model = UBLOX_MODEL_AIRBORNE_4G, + .gps_ublox_flight_model = UBLOX_MODEL_AIRBORNE_4G, .gps_ublox_use_galileo = false, .gps_set_home_point_once = false, .gps_use_3d_speed = false, diff --git a/src/main/pg/gps.h b/src/main/pg/gps.h index 0bc30a1fd0..0d41291027 100644 --- a/src/main/pg/gps.h +++ b/src/main/pg/gps.h @@ -30,7 +30,8 @@ typedef struct gpsConfig_s { uint8_t sbasMode; uint8_t autoConfig; uint8_t autoBaud; - uint8_t gps_ublox_mode; + uint8_t gps_ublox_acquire_model; + uint8_t gps_ublox_flight_model; bool gps_ublox_use_galileo; bool gps_set_home_point_once; bool gps_use_3d_speed;