Replace cli command gps_initial_baudrate_index with gps_baudrate.

The index is not really a user concern and leads to confusion.  gps
baudrate is not set like any other baud date and the determination of an
appropriate index is hidden from the user.

If the user specifies a baudrate that is not supported the default index
is used which is current the index for 115200.

This also allows GPS to work on softserial ports at up to 19200.
This commit is contained in:
Dominic Clifton 2014-05-23 11:49:24 +01:00
parent 8103449129
commit f232b831d2
8 changed files with 36 additions and 13 deletions

View File

@ -134,6 +134,16 @@ save
## CLI command differences from baseflight
### gps_baudrate
reason: simplify
Cleanflight uses normal baud rate values for gps baudrate, baseflight uses an index.
If an unsupported baud rate value is used the gps code will select 115200 baud.
example: `set gps_baudrate = 115200`
### gps_type
reason: renamed to `gps_provider` for consistency
@ -147,9 +157,9 @@ Cleanflight supports using any RX channel for rssi. Baseflight only supports AU
In Cleanflight a value of 0 disables the feature, a higher value indicates the channel number to read RSSI information from.
Example, to use RSSI on AUX1 in Cleanflight set the value to 5, since 5 is the first AUX channel.
Example: to use RSSI on AUX1 in Cleanflight use `set rssi_aux_channel = 5`, since 5 is the first AUX channel.
### failsafe_detect_threshold
reason: improved functionality
See failsafe_min_usec and failsafe_max_usec in Failsafe documentation.
See `failsafe_min_usec` and `failsafe_max_usec` in Failsafe documentation.

View File

@ -58,7 +58,7 @@ void mixerUseConfigs(servoParam_t *servoConfToUse, flight3DConfig_t *flight3DCon
#define FLASH_WRITE_ADDR (0x08000000 + (uint32_t)((FLASH_PAGE_SIZE * FLASH_PAGE_COUNT) - FLASH_TO_RESERVE_FOR_CONFIG)) // use the last flash pages for storage master_t masterConfig; // master config struct with data independent from profiles
profile_t currentProfile; // profile config struct
static const uint8_t EEPROM_CONF_VERSION = 67;
static const uint8_t EEPROM_CONF_VERSION = 68;
static void resetAccelerometerTrims(int16_flightDynamicsTrims_t *accelerometerTrims)
{
@ -153,9 +153,12 @@ void resetSerialConfig(serialConfig_t *serialConfig)
serialConfig->serial_port_2_scenario = lookupScenarioIndex(SCENARIO_GPS_ONLY);
serialConfig->serial_port_3_scenario = lookupScenarioIndex(SCENARIO_UNUSED);
serialConfig->serial_port_4_scenario = lookupScenarioIndex(SCENARIO_UNUSED);
serialConfig->msp_baudrate = 115200;
serialConfig->cli_baudrate = 115200;
serialConfig->gps_baudrate = 115200;
serialConfig->gps_passthrough_baudrate = 115200;
serialConfig->reboot_character = 'R';
}
@ -215,7 +218,6 @@ static void resetConf(void)
masterConfig.servo_pwm_rate = 50;
// gps/nav stuff
masterConfig.gps_provider = GPS_NMEA;
masterConfig.gps_initial_baudrate_index = GPS_BAUDRATE_115200;
resetSerialConfig(&masterConfig.serialConfig);

View File

@ -52,7 +52,6 @@ typedef struct master_t {
// gps-related stuff
gpsProvider_e gps_provider;
gpsBaudRate_e gps_initial_baudrate_index;
serialConfig_t serialConfig;

View File

@ -89,6 +89,10 @@ static const gpsInitData_t gpsInitData[] = {
{ GPS_BAUDRATE_9600, 9600, "", "" }
};
#define GPS_INIT_DATA_ENTRY_COUNT (sizeof(gpsInitData) / sizeof(gpsInitData[0]))
#define DEFAULT_BAUD_RATE_INDEX 0
static const uint8_t ubloxInit[] = {
0xB5, 0x62, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x00, 0xFF, 0x19, // VGS: Course over ground and Ground speed
0xB5, 0x62, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15, // GSV: GNSS Satellites in View
@ -145,17 +149,25 @@ void gpsUseProfile(gpsProfile_t *gpsProfileToUse)
}
// When using PWM input GPS usage reduces number of available channels by 2 - see pwm_common.c/pwmInit()
void gpsInit(serialConfig_t *initialSerialConfig, uint8_t baudrateIndex, uint8_t initialGpsProvider, gpsProfile_t *initialGpsProfile, pidProfile_t *pidProfile)
void gpsInit(serialConfig_t *initialSerialConfig, uint8_t initialGpsProvider, gpsProfile_t *initialGpsProfile, pidProfile_t *pidProfile)
{
serialConfig = initialSerialConfig;
gpsData.baudrateIndex = 0;
while (gpsInitData[gpsData.baudrateIndex].baudrate != serialConfig->gps_baudrate) {
gpsData.baudrateIndex++;
if (gpsData.baudrateIndex >= GPS_INIT_DATA_ENTRY_COUNT) {
gpsData.baudrateIndex = DEFAULT_BAUD_RATE_INDEX;
break;
}
}
gpsProvider = initialGpsProvider;
gpsUseProfile(initialGpsProfile);
// init gpsData structure. if we're not actually enabled, don't bother doing anything else
gpsSetState(GPS_UNKNOWN);
gpsData.baudrateIndex = baudrateIndex;
gpsData.lastMessage = millis();
gpsData.errors = 0;
@ -167,7 +179,7 @@ void gpsInit(serialConfig_t *initialSerialConfig, uint8_t baudrateIndex, uint8_t
gpsUsePIDs(pidProfile);
// no callback - buffer will be consumed in gpsThread()
gpsPort = openSerialPort(FUNCTION_GPS, NULL, gpsInitData[baudrateIndex].baudrate, mode, SERIAL_NOT_INVERTED);
gpsPort = openSerialPort(FUNCTION_GPS, NULL, gpsInitData[gpsData.baudrateIndex].baudrate, mode, SERIAL_NOT_INVERTED);
if (!gpsPort) {
featureClear(FEATURE_GPS);
return;

View File

@ -62,7 +62,7 @@ failsafe_t* failsafeInit(rxConfig_t *intialRxConfig);
void pwmInit(drv_pwm_config_t *init);
void rxInit(rxConfig_t *rxConfig, failsafe_t *failsafe);
void buzzerInit(failsafe_t *initialFailsafe);
void gpsInit(serialConfig_t *serialConfig, uint8_t baudrateIndex, uint8_t initialGpsProvider, gpsProfile_t *initialGpsProfile, pidProfile_t *pidProfile);
void gpsInit(serialConfig_t *serialConfig, uint8_t initialGpsProvider, gpsProfile_t *initialGpsProfile, pidProfile_t *pidProfile);
bool sensorsAutodetect(sensorAlignmentConfig_t *sensorAlignmentConfig, uint16_t gyroLpf, uint8_t accHardwareToUse, int16_t magDeclinationFromConfig);
void imuInit(void);
@ -201,7 +201,6 @@ void init(void)
if (feature(FEATURE_GPS)) {
gpsInit(
&masterConfig.serialConfig,
masterConfig.gps_initial_baudrate_index,
masterConfig.gps_provider,
&currentProfile.gpsProfile,
&currentProfile.pidProfile

View File

@ -177,10 +177,10 @@ const clivalue_t valueTable[] = {
{ "reboot_character", VAR_UINT8, &masterConfig.serialConfig.reboot_character, 48, 126 },
{ "msp_baudrate", VAR_UINT32, &masterConfig.serialConfig.msp_baudrate, 1200, 115200 },
{ "cli_baudrate", VAR_UINT32, &masterConfig.serialConfig.cli_baudrate, 1200, 115200 },
{ "gps_baudrate", VAR_UINT32, &masterConfig.serialConfig.gps_baudrate, 0, 115200 },
{ "gps_passthrough_baudrate", VAR_UINT32, &masterConfig.serialConfig.gps_passthrough_baudrate, 1200, 115200 },
{ "gps_provider", VAR_UINT8, &masterConfig.gps_provider, 0, GPS_PROVIDER_MAX },
{ "gps_initial_baudrate_index", VAR_INT8, &masterConfig.gps_initial_baudrate_index, 0, GPS_BAUDRATE_MAX },
{ "serialrx_provider", VAR_UINT8, &masterConfig.rxConfig.serialrx_provider, 0, SERIALRX_PROVIDER_MAX },

View File

@ -318,6 +318,8 @@ functionConstraint_t *getConfiguredFunctionConstraint(serialPortFunction_e funct
updateSerialRxFunctionConstraint(&configuredFunctionConstraint);
break;
case FUNCTION_GPS:
configuredFunctionConstraint.maxBaudRate = serialConfig->gps_baudrate;
break;
default:
break;
}

View File

@ -91,10 +91,9 @@ typedef struct serialConfig_s {
uint32_t msp_baudrate;
uint32_t cli_baudrate;
uint32_t gps_baudrate;
uint32_t gps_passthrough_baudrate;
uint32_t hott_baudrate;
uint8_t reboot_character; // which byte is used to reboot. Default 'R', could be changed carefully to something else.
} serialConfig_t;