diff --git a/src/main/cli/settings.c b/src/main/cli/settings.c index 81d37812fb..cb8d677aad 100644 --- a/src/main/cli/settings.c +++ b/src/main/cli/settings.c @@ -663,7 +663,9 @@ const clivalue_t valueTable[] = { { "acc_lpf_hz", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, 400 }, PG_ACCELEROMETER_CONFIG, offsetof(accelerometerConfig_t, acc_lpf_hz) }, { "acc_trim_pitch", VAR_INT16 | MASTER_VALUE, .config.minmax = { -300, 300 }, PG_ACCELEROMETER_CONFIG, offsetof(accelerometerConfig_t, accelerometerTrims.values.pitch) }, { "acc_trim_roll", VAR_INT16 | MASTER_VALUE, .config.minmax = { -300, 300 }, PG_ACCELEROMETER_CONFIG, offsetof(accelerometerConfig_t, accelerometerTrims.values.roll) }, - { "acc_calibration", VAR_INT16 | MASTER_VALUE | MODE_ARRAY, .config.array.length = XYZ_AXIS_COUNT, PG_ACCELEROMETER_CONFIG, offsetof(accelerometerConfig_t, accZero.raw) }, + + // 4 elements are output for the ACC calibration - The 3 axis values and the 4th representing whether calibration has been performed + { "acc_calibration", VAR_INT16 | MASTER_VALUE | MODE_ARRAY, .config.array.length = 4, PG_ACCELEROMETER_CONFIG, offsetof(accelerometerConfig_t, accZero.raw) }, #endif // PG_COMPASS_CONFIG diff --git a/src/main/fc/core.c b/src/main/fc/core.c index 312d620874..82f6110a04 100644 --- a/src/main/fc/core.c +++ b/src/main/fc/core.c @@ -220,7 +220,7 @@ static bool accNeedsCalibration(void) if (sensors(SENSOR_ACC)) { // Check to see if the ACC has already been calibrated - if (accelerometerConfig()->calibrationCompleted || + if (accelerometerConfig()->accZero.values.calibrationCompleted || accelerometerConfig()->accZero.values.roll != 0 || accelerometerConfig()->accZero.values.pitch != 0 || accelerometerConfig()->accZero.values.yaw != 0) { diff --git a/src/main/sensors/acceleration.c b/src/main/sensors/acceleration.c index 35cffad022..57a4fc03a9 100644 --- a/src/main/sensors/acceleration.c +++ b/src/main/sensors/acceleration.c @@ -98,7 +98,7 @@ void resetRollAndPitchTrims(rollAndPitchTrims_t *rollAndPitchTrims) static void setConfigCalibrationCompleted(void) { - accelerometerConfigMutable()->calibrationCompleted = true; + accelerometerConfigMutable()->accZero.values.calibrationCompleted = 1; } void accResetRollAndPitchTrims(void) @@ -111,6 +111,7 @@ static void resetFlightDynamicsTrims(flightDynamicsTrims_t *accZero) accZero->values.roll = 0; accZero->values.pitch = 0; accZero->values.yaw = 0; + accZero->values.calibrationCompleted = 0; } void accResetFlightDynamicsTrims(void) @@ -124,13 +125,12 @@ void pgResetFn_accelerometerConfig(accelerometerConfig_t *instance) .acc_lpf_hz = 10, .acc_hardware = ACC_DEFAULT, .acc_high_fsr = false, - .calibrationCompleted = false, ); resetRollAndPitchTrims(&instance->accelerometerTrims); resetFlightDynamicsTrims(&instance->accZero); } -PG_REGISTER_WITH_RESET_FN(accelerometerConfig_t, accelerometerConfig, PG_ACCELEROMETER_CONFIG, 1); +PG_REGISTER_WITH_RESET_FN(accelerometerConfig_t, accelerometerConfig, PG_ACCELEROMETER_CONFIG, 2); extern uint16_t InflightcalibratingA; extern bool AccInflightCalibrationMeasurementDone; diff --git a/src/main/sensors/acceleration.h b/src/main/sensors/acceleration.h index 8d2b98cb35..4ad1b16426 100644 --- a/src/main/sensors/acceleration.h +++ b/src/main/sensors/acceleration.h @@ -72,7 +72,6 @@ typedef struct accelerometerConfig_s { bool acc_high_fsr; flightDynamicsTrims_t accZero; rollAndPitchTrims_t accelerometerTrims; - bool calibrationCompleted; // has ACC calibration been performed (should not be exposed in settings) } accelerometerConfig_t; PG_DECLARE(accelerometerConfig_t, accelerometerConfig); diff --git a/src/main/sensors/compass.c b/src/main/sensors/compass.c index 5d8baa0e0b..cfee7835e4 100644 --- a/src/main/sensors/compass.c +++ b/src/main/sensors/compass.c @@ -58,7 +58,7 @@ magDev_t magDev; mag_t mag; // mag access functions -PG_REGISTER_WITH_RESET_FN(compassConfig_t, compassConfig, PG_COMPASS_CONFIG, 1); +PG_REGISTER_WITH_RESET_FN(compassConfig_t, compassConfig, PG_COMPASS_CONFIG, 2); void pgResetFn_compassConfig(compassConfig_t *compassConfig) { diff --git a/src/main/sensors/sensors.h b/src/main/sensors/sensors.h index d26463efb5..531c67c97f 100644 --- a/src/main/sensors/sensors.h +++ b/src/main/sensors/sensors.h @@ -36,10 +36,11 @@ typedef struct int16_flightDynamicsTrims_s { int16_t roll; int16_t pitch; int16_t yaw; + int16_t calibrationCompleted; } flightDynamicsTrims_def_t; typedef union flightDynamicsTrims_u { - int16_t raw[3]; + int16_t raw[4]; flightDynamicsTrims_def_t values; } flightDynamicsTrims_t;