diff --git a/src/main/config/config.c b/src/main/config/config.c index 09346d8330..8fd8f99164 100755 --- a/src/main/config/config.c +++ b/src/main/config/config.c @@ -128,7 +128,7 @@ static uint32_t activeFeaturesLatch = 0; static uint8_t currentControlRateProfileIndex = 0; controlRateConfig_t *currentControlRateProfile; -static const uint8_t EEPROM_CONF_VERSION = 104; +static const uint8_t EEPROM_CONF_VERSION = 105; static void resetAccelerometerTrims(flightDynamicsTrims_t *accelerometerTrims) { @@ -392,6 +392,7 @@ static void resetConf(void) masterConfig.gyroConfig.gyroMovementCalibrationThreshold = 32; masterConfig.mag_hardware = MAG_DEFAULT; // default/autodetect + masterConfig.baro_hardware = BARO_DEFAULT; // default/autodetect resetBatteryConfig(&masterConfig.batteryConfig); diff --git a/src/main/config/config_master.h b/src/main/config/config_master.h index 854837890b..5ccc859fea 100644 --- a/src/main/config/config_master.h +++ b/src/main/config/config_master.h @@ -55,6 +55,7 @@ typedef struct master_t { gyroConfig_t gyroConfig; uint8_t mag_hardware; // Which mag hardware to use on boards with more than one device + uint8_t baro_hardware; // Barometer hardware to use uint16_t max_angle_inclination; // max inclination allowed in angle (level) mode. default 500 (50 degrees). flightDynamicsTrims_t accZero; diff --git a/src/main/io/serial_cli.c b/src/main/io/serial_cli.c index c55ffd0d4b..3704334f91 100644 --- a/src/main/io/serial_cli.c +++ b/src/main/io/serial_cli.c @@ -464,6 +464,7 @@ const clivalue_t valueTable[] = { { "baro_noise_lpf", VAR_FLOAT | PROFILE_VALUE, &masterConfig.profile[0].barometerConfig.baro_noise_lpf, 0, 1 }, { "baro_cf_vel", VAR_FLOAT | PROFILE_VALUE, &masterConfig.profile[0].barometerConfig.baro_cf_vel, 0, 1 }, { "baro_cf_alt", VAR_FLOAT | PROFILE_VALUE, &masterConfig.profile[0].barometerConfig.baro_cf_alt, 0, 1 }, + { "baro_hardware", VAR_UINT8 | MASTER_VALUE, &masterConfig.baro_hardware, 0, BARO_MAX }, { "mag_hardware", VAR_UINT8 | MASTER_VALUE, &masterConfig.mag_hardware, 0, MAG_MAX }, { "mag_declination", VAR_INT16 | PROFILE_VALUE, &masterConfig.profile[0].mag_declination, -18000, 18000 }, diff --git a/src/main/main.c b/src/main/main.c index 2717d80fbc..f0a21941a6 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -371,7 +371,7 @@ void init(void) } #endif - if (!sensorsAutodetect(&masterConfig.sensorAlignmentConfig, masterConfig.gyro_lpf, masterConfig.acc_hardware, masterConfig.mag_hardware, currentProfile->mag_declination, masterConfig.looptime, masterConfig.syncGyroToLoop)) { + if (!sensorsAutodetect(&masterConfig.sensorAlignmentConfig, masterConfig.gyro_lpf, masterConfig.acc_hardware, masterConfig.mag_hardware, masterConfig.baro_hardware, currentProfile->mag_declination, masterConfig.looptime, masterConfig.syncGyroToLoop)) { // if gyro was not detected due to whatever reason, we give up now. failureMode(3); } diff --git a/src/main/sensors/barometer.h b/src/main/sensors/barometer.h index 9e107283d0..8c7b065105 100644 --- a/src/main/sensors/barometer.h +++ b/src/main/sensors/barometer.h @@ -18,13 +18,15 @@ #pragma once typedef enum { - BARO_NONE = 0, - BARO_DEFAULT = 1, + BARO_DEFAULT = 0, + BARO_NONE = 1, BARO_BMP085 = 2, BARO_MS5611 = 3, BARO_BMP280 = 4 } baroSensor_e; +#define BARO_MAX BARO_BMP280 + #define BARO_SAMPLE_COUNT_MAX 48 typedef struct barometerConfig_s { diff --git a/src/main/sensors/initialisation.c b/src/main/sensors/initialisation.c index bae06dc063..e9282d8215 100755 --- a/src/main/sensors/initialisation.c +++ b/src/main/sensors/initialisation.c @@ -410,12 +410,12 @@ retry: sensorsSet(SENSOR_ACC); } -static void detectBaro() +static void detectBaro(baroSensor_e baroHardwareToUse) { #ifdef BARO // Detect what pressure sensors are available. baro->update() is set to sensor-specific update function - baroSensor_e baroHardware = BARO_DEFAULT; + baroSensor_e baroHardware = baroHardwareToUse; #ifdef USE_BARO_BMP085 @@ -597,7 +597,7 @@ void reconfigureAlignment(sensorAlignmentConfig_t *sensorAlignmentConfig) } } -bool sensorsAutodetect(sensorAlignmentConfig_t *sensorAlignmentConfig, uint16_t gyroLpf, uint8_t accHardwareToUse, uint8_t magHardwareToUse, int16_t magDeclinationFromConfig, uint32_t looptime, uint8_t syncGyroToLoop) +bool sensorsAutodetect(sensorAlignmentConfig_t *sensorAlignmentConfig, uint16_t gyroLpf, uint8_t accHardwareToUse, uint8_t magHardwareToUse, uint8_t baroHardwareToUse, int16_t magDeclinationFromConfig, uint32_t looptime, uint8_t syncGyroToLoop) { int16_t deg, min; @@ -608,7 +608,7 @@ bool sensorsAutodetect(sensorAlignmentConfig_t *sensorAlignmentConfig, uint16_t return false; } detectAcc(accHardwareToUse); - detectBaro(); + detectBaro(baroHardwareToUse); // Now time to init things, acc first diff --git a/src/main/sensors/initialisation.h b/src/main/sensors/initialisation.h index 7110f8d82f..986af0d2d1 100644 --- a/src/main/sensors/initialisation.h +++ b/src/main/sensors/initialisation.h @@ -17,4 +17,4 @@ #pragma once -bool sensorsAutodetect(sensorAlignmentConfig_t *sensorAlignmentConfig, uint16_t gyroLpf, uint8_t accHardwareToUse, uint8_t magHardwareToUse, int16_t magDeclinationFromConfig, uint32_t looptime, uint8_t syncGyroToLoop); +bool sensorsAutodetect(sensorAlignmentConfig_t *sensorAlignmentConfig, uint16_t gyroLpf, uint8_t accHardwareToUse, uint8_t magHardwareToUse, uint8_t baroHardwareToUse, int16_t magDeclinationFromConfig, uint32_t looptime, uint8_t syncGyroToLoop);