From ef556c0f59847e43a85ac615500ae843635db085 Mon Sep 17 00:00:00 2001 From: mikeller Date: Sat, 16 Nov 2019 12:48:47 +1300 Subject: [PATCH] Introduced 'baroStartCalibration()' / 'baroSetGroundLevel()' to make barometer code more self contained. --- src/main/fc/init.c | 2 +- src/main/fc/rc_controls.c | 5 +++-- src/main/sensors/barometer.c | 22 +++++++++++++++------ src/main/sensors/barometer.h | 3 ++- src/main/sensors/sensors.h | 2 -- src/test/unit/arming_prevention_unittest.cc | 2 +- src/test/unit/rc_controls_unittest.cc | 2 +- src/test/unit/vtx_unittest.cc | 2 +- 8 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/main/fc/init.c b/src/main/fc/init.c index 0570ac8f2..e84f6a192 100644 --- a/src/main/fc/init.c +++ b/src/main/fc/init.c @@ -879,7 +879,7 @@ void init(void) #endif gyroStartCalibration(false); #ifdef USE_BARO - baroSetCalibrationCycles(CALIBRATING_BARO_CYCLES); + baroStartCalibration(); #endif #if defined(USE_VTX_COMMON) || defined(USE_VTX_CONTROL) diff --git a/src/main/fc/rc_controls.c b/src/main/fc/rc_controls.c index 5555015af..8de015fd0 100644 --- a/src/main/fc/rc_controls.c +++ b/src/main/fc/rc_controls.c @@ -241,8 +241,9 @@ void processRcStickPositions() #endif #ifdef USE_BARO - if (sensors(SENSOR_BARO)) - baroSetCalibrationCycles(10); // calibrate baro to new ground level (10 * 25 ms = ~250 ms non blocking) + if (sensors(SENSOR_BARO)) { + baroSetGroundLevel(); + } #endif return; diff --git a/src/main/sensors/barometer.c b/src/main/sensors/barometer.c index f0c5abbb8..794302ccd 100644 --- a/src/main/sensors/barometer.c +++ b/src/main/sensors/barometer.c @@ -48,12 +48,9 @@ #include "fc/runtime_config.h" -#include "sensors/barometer.h" #include "sensors/sensors.h" -#ifdef USE_HARDWARE_REVISION_DETECTION -#include "hardware_revision.h" -#endif +#include "barometer.h" baro_t baro; // barometer access functions @@ -139,6 +136,11 @@ static int32_t baroGroundAltitude = 0; static int32_t baroGroundPressure = 8*101325; static uint32_t baroPressureSum = 0; +#define CALIBRATING_BARO_CYCLES 200 // 10 seconds init_delay + 200 * 25 ms = 15 seconds before ground pressure settles +#define SET_GROUND_LEVEL_BARO_CYCLES 10 // calibrate baro to new ground level (10 * 25 ms = ~250 ms non blocking) + +static bool baroReady = false; + void baroPreInit(void) { #ifdef USE_SPI @@ -278,12 +280,20 @@ bool isBaroCalibrationComplete(void) return calibratingB == 0; } -void baroSetCalibrationCycles(uint16_t calibrationCyclesRequired) +static void baroSetCalibrationCycles(uint16_t calibrationCyclesRequired) { calibratingB = calibrationCyclesRequired; } -static bool baroReady = false; +void baroStartCalibration(void) +{ + baroSetCalibrationCycles(CALIBRATING_BARO_CYCLES); +} + +void baroSetGroundLevel(void) +{ + baroSetCalibrationCycles(SET_GROUND_LEVEL_BARO_CYCLES); +} #define PRESSURE_SAMPLES_MEDIAN 3 diff --git a/src/main/sensors/barometer.h b/src/main/sensors/barometer.h index a0b06dd73..252179b11 100644 --- a/src/main/sensors/barometer.h +++ b/src/main/sensors/barometer.h @@ -64,7 +64,8 @@ extern baro_t baro; void baroPreInit(void); bool baroDetect(baroDev_t *dev, baroSensor_e baroHardwareToUse); bool isBaroCalibrationComplete(void); -void baroSetCalibrationCycles(uint16_t calibrationCyclesRequired); +void baroStartCalibration(void); +void baroSetGroundLevel(void); uint32_t baroUpdate(void); bool isBaroReady(void); int32_t baroCalculateAltitude(void); diff --git a/src/main/sensors/sensors.h b/src/main/sensors/sensors.h index ac8d85f9c..80367d12f 100644 --- a/src/main/sensors/sensors.h +++ b/src/main/sensors/sensors.h @@ -44,8 +44,6 @@ typedef union flightDynamicsTrims_u { flightDynamicsTrims_def_t values; } flightDynamicsTrims_t; -#define CALIBRATING_BARO_CYCLES 200 // 10 seconds init_delay + 200 * 25 ms = 15 seconds before ground pressure settles - typedef enum { SENSOR_GYRO = 1 << 0, // always present SENSOR_ACC = 1 << 1, diff --git a/src/test/unit/arming_prevention_unittest.cc b/src/test/unit/arming_prevention_unittest.cc index 8cf74a52f..a52fe7810 100644 --- a/src/test/unit/arming_prevention_unittest.cc +++ b/src/test/unit/arming_prevention_unittest.cc @@ -1071,7 +1071,7 @@ extern "C" { void transponderUpdate(timeUs_t) {} void GPS_reset_home_position(void) {} void accStartCalibration(void) {} - void baroSetCalibrationCycles(uint16_t) {} + void baroSetGroundLevel(void) {} void changePidProfile(uint8_t) {} void changeControlRateProfile(uint8_t) {} void dashboardEnablePageCycling(void) {} diff --git a/src/test/unit/rc_controls_unittest.cc b/src/test/unit/rc_controls_unittest.cc index ea12d6bea..895e3e708 100644 --- a/src/test/unit/rc_controls_unittest.cc +++ b/src/test/unit/rc_controls_unittest.cc @@ -631,7 +631,7 @@ uint8_t getCurrentControlRateProfileIndex(void) { return 0; } void GPS_reset_home_position(void) {} -void baroSetCalibrationCycles(uint16_t) {} +void baroSetGroundLevel(void) {} void blackboxLogEvent(FlightLogEvent, flightLogEventData_t *) {} diff --git a/src/test/unit/vtx_unittest.cc b/src/test/unit/vtx_unittest.cc index 7737bed4a..67b7b22cf 100644 --- a/src/test/unit/vtx_unittest.cc +++ b/src/test/unit/vtx_unittest.cc @@ -165,7 +165,7 @@ extern "C" { void transponderUpdate(timeUs_t) {} void GPS_reset_home_position(void) {} void accStartCalibration(void) {} - void baroSetCalibrationCycles(uint16_t) {} + void baroSetGroundLevel(void) {} void changePidProfile(uint8_t) {} void changeControlRateProfile(uint8_t) {} void dashboardEnablePageCycling(void) {}