diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-09-18 21:01:01 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-09-18 21:01:01 +0000 |
commit | 79b2f0c02ac687aa08b76b9c29b8d658dd9a45f0 (patch) | |
tree | 08b0a07de0a29b43f0337061685e71e7490a5281 | |
parent | ce9682975dfcd8da4e6ec2cb059be8700010b512 (diff) | |
parent | 61b465491f482c985de70d2042dd9a73e8d1921b (diff) | |
download | contexthub-android12L-d2-s6-release.tar.gz |
Snap for 7745671 from 61b465491f482c985de70d2042dd9a73e8d1921b to sc-d2-releaseandroid-12.1.0_r26android-12.1.0_r25android-12.1.0_r24android-12.1.0_r23android-12.1.0_r18android-12.1.0_r17android-12.1.0_r16android-12.1.0_r15android-12.1.0_r14android-12.1.0_r13android-12.1.0_r12android12L-d2-s8-releaseandroid12L-d2-s7-releaseandroid12L-d2-s6-releaseandroid12L-d2-s5-releaseandroid12L-d2-s4-releaseandroid12L-d2-s3-releaseandroid12L-d2-s2-releaseandroid12L-d2-s1-releaseandroid12L-d2-release
Change-Id: I7c37dc756cf79a049c8b205a3a8ff05ad9496f5c
5 files changed, 42 insertions, 7 deletions
diff --git a/firmware/os/algos/calibration/nano_calibration/nano_calibration.cc b/firmware/os/algos/calibration/nano_calibration/nano_calibration.cc index 024a031d..9d8e04d6 100644 --- a/firmware/os/algos/calibration/nano_calibration/nano_calibration.cc +++ b/firmware/os/algos/calibration/nano_calibration/nano_calibration.cc @@ -54,6 +54,24 @@ using ::online_calibration::SensorType; #define LOG_TAG "[ImuCal]" #endif +// Some devices do not have multisensor ASH API support. These macros remap to +// single-sensor functions. +#ifndef ASH_MULTI_CAL_SUPPORTED +#define ashSetMultiCalibration(chre_sensor_type, sensor_index, \ + calibration_index, ash_cal_info) \ + ashSetCalibration(chre_sensor_type, ash_cal_info) + +#define ashSaveMultiCalibrationParams(chre_sensor_type, sensor_index, \ + calibration_index, ash_cal_parameters) \ + ashSaveCalibrationParams(chre_sensor_type, ash_cal_parameters) + +#define ashLoadMultiCalibrationParams(chre_sensor_type, sensor_index, \ + calibration_index, \ + recalled_ash_cal_parameters) \ + ashLoadCalibrationParams(chre_sensor_type, ASH_CAL_STORAGE_ASH, \ + recalled_ash_cal_parameters) +#endif // ASH_MULTI_CAL_SUPPORTED + #ifdef NANO_SENSOR_CAL_DBG_ENABLED #define NANO_CAL_LOGD(tag, format, ...) \ TECHENG_LOGD("%s " format, tag, ##__VA_ARGS__) @@ -146,7 +164,7 @@ bool NanoSensorCal::NotifyAshCalibration( if (result_callback_ != nullptr && send_results_callback) { result_callback_->SetCalibrationEvent(cal_data.cal_update_time_nanos, cal_data.type, sensor_index, - calibration_index, flags); + calibration_index, flags, cal_data); } // Updates the sensor offset calibration using the ASH API. diff --git a/firmware/os/algos/calibration/online_calibration/common_data/calibration_quality.h b/firmware/os/algos/calibration/online_calibration/common_data/calibration_quality.h index d6475c78..d9e5bd7e 100644 --- a/firmware/os/algos/calibration/online_calibration/common_data/calibration_quality.h +++ b/firmware/os/algos/calibration/online_calibration/common_data/calibration_quality.h @@ -64,8 +64,8 @@ enum class CalibrationQualityLevel : uint8_t { // Sets the calibration quality value when this metric is either not // implemented, or has not yet been determined (e.g., a calibration hasn't -// occurred). -constexpr float kUndeterminedCalibrationQuality = -1.0f; +// occurred). Represented with an arbitrarily large value. +constexpr float kUndeterminedCalibrationQuality = 1.0e9f; /* * Calibration quality structure that contains a quantitative (float) and diff --git a/firmware/os/algos/calibration/online_calibration/common_data/online_calibration.h b/firmware/os/algos/calibration/online_calibration/common_data/online_calibration.h index 8c95f9ba..710c442c 100644 --- a/firmware/os/algos/calibration/online_calibration/common_data/online_calibration.h +++ b/firmware/os/algos/calibration/online_calibration/common_data/online_calibration.h @@ -26,6 +26,14 @@ namespace online_calibration { +// Device physical state change types. +enum class PhysicalStateType : uint8_t { + kUnknownPhysicalState = 0, + kFoldableOpen, + kFoldableClosed, + kNumPhysicalStateTypes, +}; + /* * This abstract base class provides a set of general interface functions for * calibration algorithms. The data structures used are intended to be lean and @@ -130,6 +138,13 @@ class OnlineCalibration { // Returns the sensor-type this calibration algorithm provides updates for. virtual SensorType get_sensor_type() const = 0; + // Tells the calibrator that the device's physical state has changed. This is + // useful, for example, if there is a need for the calibration algorithm to be + // aware of and take some sort of internal action in response to a physical + // state change (e.g., for foldable devices, MagCal may adjust internal states + // to implement specific transition behavior between open/closed states). + virtual void UpdatePhysicalState(PhysicalStateType physical_state) {} + protected: // Helper function that activates the registered callback. void OnNotifyCalibrationUpdate(CalibrationTypeFlags cal_update_flags) const { diff --git a/firmware/os/algos/calibration/online_calibration/common_data/result_callback_interface.h b/firmware/os/algos/calibration/online_calibration/common_data/result_callback_interface.h index cfe504de..585f67fd 100644 --- a/firmware/os/algos/calibration/online_calibration/common_data/result_callback_interface.h +++ b/firmware/os/algos/calibration/online_calibration/common_data/result_callback_interface.h @@ -29,10 +29,10 @@ class ResultCallbackInterface { // states of a foldable device]). // flags: What kind of update the calibration was, e.g. offset, quality // degradation (like a magnetization event), over temperature, etc. - virtual void SetCalibrationEvent(uint64_t event_timestamp_nanos, - SensorType sensor_type, uint8_t sensor_index, - uint8_t calibration_index, - CalibrationTypeFlags flags) = 0; + virtual void SetCalibrationEvent( + uint64_t event_timestamp_nanos, SensorType sensor_type, + uint8_t sensor_index, uint8_t calibration_index, + CalibrationTypeFlags flags, const CalibrationDataThreeAxis &cal_data) = 0; }; } // namespace online_calibration diff --git a/firmware/os/algos/calibration/online_calibration/common_data/sensor_data.h b/firmware/os/algos/calibration/online_calibration/common_data/sensor_data.h index 23b63c9b..b6d6eb37 100644 --- a/firmware/os/algos/calibration/online_calibration/common_data/sensor_data.h +++ b/firmware/os/algos/calibration/online_calibration/common_data/sensor_data.h @@ -48,6 +48,8 @@ enum class SensorType : int8_t { kBarometerHpa = 5, // 1-axis sensor (units = hecto-Pascal). kWifiM = 6, // 3-axis sensor (units = meter). kProximity = 7, // 1-axis sensor (units = ?). + kHallEffect = 8, // 1-axis sensor (units = ?). + kHingeAngle = 9, // 1-axis sensor (units = degrees). }; // Helper function for determining if a sensor type is 3-axis, otherwise it's |