diff options
Diffstat (limited to 'include/gyro_cal.h')
-rw-r--r-- | include/gyro_cal.h | 163 |
1 files changed, 0 insertions, 163 deletions
diff --git a/include/gyro_cal.h b/include/gyro_cal.h deleted file mode 100644 index fb69464aec..0000000000 --- a/include/gyro_cal.h +++ /dev/null @@ -1,163 +0,0 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef __CROS_EC_GYRO_CAL_H -#define __CROS_EC_GYRO_CAL_H - -#include "common.h" -#include "gyro_still_det.h" -#include "math_util.h" -#include "stdbool.h" -#include "stddef.h" -#include "vec3.h" - -struct temperature_mean_data { - int16_t temperature_min_kelvin; - int16_t temperature_max_kelvin; - int16_t latest_temperature_kelvin; - int mean_accumulator; - size_t num_points; -}; - -/** Data structure for tracking min/max window mean during device stillness. */ -struct min_max_window_mean_data { - fpv3_t gyro_winmean_min; - fpv3_t gyro_winmean_max; -}; - -struct gyro_cal { - /** Stillness detector for accelerometer. */ - struct gyro_still_det accel_stillness_detect; - /** Stillness detector for magnetometer. */ - struct gyro_still_det mag_stillness_detect; - /** Stillness detector for gyroscope. */ - struct gyro_still_det gyro_stillness_detect; - - /** - * Data for tracking temperature mean during periods of device - * stillness. - */ - struct temperature_mean_data temperature_mean_tracker; - - /** Data for tracking gyro mean during periods of device stillness. */ - struct min_max_window_mean_data window_mean_tracker; - - /** - * Aggregated sensor stillness threshold required for gyro bias - * calibration. - */ - fp_t stillness_threshold; - - /** Min and max durations for gyro bias calibration. */ - uint32_t min_still_duration_us; - uint32_t max_still_duration_us; - - /** Duration of the stillness processing windows. */ - uint32_t window_time_duration_us; - - /** Timestamp when device started a still period. */ - uint64_t start_still_time_us; - - /** - * Gyro offset estimate, and the associated calibration temperature, - * timestamp, and stillness confidence values. - * [rad/sec] - */ - fp_t bias_x, bias_y, bias_z; - int bias_temperature_kelvin; - fp_t stillness_confidence; - uint32_t calibration_time_us; - - /** - * Current window end-time for all sensors. Used to assist in keeping - * sensor data collection in sync. On initialization this will be set to - * zero indicating that sensor data will be dropped until a valid - * end-time is set from the first gyro timestamp received. - */ - uint32_t stillness_win_endtime_us; - - /** - * Watchdog timer to reset to a known good state when data capture - * stalls. - */ - uint32_t gyro_window_start_us; - uint32_t gyro_window_timeout_duration_us; - - /** Flag is "true" when the magnetometer is used. */ - bool using_mag_sensor; - - /** Flag set by user to control whether calibrations are used. */ - bool gyro_calibration_enable; - - /** Flag is 'true' when a new calibration update is ready. */ - bool new_gyro_cal_available; - - /** Flag to indicate if device was previously still. */ - bool prev_still; - - /** - * Min and maximum stillness window mean. This is used to check the - * stability of the mean values computed for the gyroscope (i.e. - * provides further validation for stillness). - */ - fpv3_t gyro_winmean_min; - fpv3_t gyro_winmean_max; - fp_t stillness_mean_delta_limit; - - /** - * The mean temperature over the stillness period. The limit is used to - * check for temperature stability and provide a gate for when - * temperature is rapidly changing. - */ - fp_t temperature_mean_kelvin; - fp_t temperature_delta_limit_kelvin; -}; - -/** - * Data structure used to configure the gyroscope calibration in individual - * sensors. - */ -struct gyro_cal_data { - /** The gyro_cal struct to use. */ - struct gyro_cal gyro_cal; - /** The sensor ID of the accelerometer to use. */ - uint8_t accel_sensor_id; - /** - * The sensor ID of the accelerometer to use (use a number greater than - * SENSOR_COUNT to skip). - */ - uint8_t mag_sensor_id; -}; - -/** Reset trackers. */ -void init_gyro_cal(struct gyro_cal *gyro_cal); - -/** Get the most recent bias calibration value. */ -void gyro_cal_get_bias(struct gyro_cal *gyro_cal, fpv3_t bias, - int *temperature_kelvin, uint32_t *calibration_time_us); - -/** Set an initial bias calibration value. */ -void gyro_cal_set_bias(struct gyro_cal *gyro_cal, fpv3_t bias, - int temperature_kelvin, uint32_t calibration_time_us); - -/** Remove gyro bias from the calibration [rad/sec]. */ -void gyro_cal_remove_bias(struct gyro_cal *gyro_cal, fpv3_t in, fpv3_t out); - -/** Returns true when a new gyro calibration is available. */ -bool gyro_cal_new_bias_available(struct gyro_cal *gyro_cal); - -/** Update the gyro calibration with gyro data [rad/sec]. */ -void gyro_cal_update_gyro(struct gyro_cal *gyro_cal, uint32_t sample_time_us, - fp_t x, fp_t y, fp_t z, int temperature_kelvin); - -/** Update the gyro calibration with mag data [micro Tesla]. */ -void gyro_cal_update_mag(struct gyro_cal *gyro_cal, uint32_t sample_time_us, - fp_t x, fp_t y, fp_t z); - -/** Update the gyro calibration with accel data [m/sec^2]. */ -void gyro_cal_update_accel(struct gyro_cal *gyro_cal, uint32_t sample_time_us, - fp_t x, fp_t y, fp_t z); - -#endif /* __CROS_EC_GYRO_CAL_H */ |