1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-17 13:25:30 +03:00

Make UBLOX models more configurable (#12587)

* Make UBLOX models more configurable

* Add more nav model
This commit is contained in:
ASDosjani 2023-04-07 10:55:54 +02:00 committed by GitHub
parent 2792d518d1
commit aead5e5a59
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 26 additions and 29 deletions

View file

@ -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) },

View file

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

View file

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

View file

@ -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()) {

View file

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

View file

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

View file

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