summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-09-18 21:01:01 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-09-18 21:01:01 +0000
commit79b2f0c02ac687aa08b76b9c29b8d658dd9a45f0 (patch)
tree08b0a07de0a29b43f0337061685e71e7490a5281
parentce9682975dfcd8da4e6ec2cb059be8700010b512 (diff)
parent61b465491f482c985de70d2042dd9a73e8d1921b (diff)
downloadcontexthub-android12L-d2-s6-release.tar.gz
Change-Id: I7c37dc756cf79a049c8b205a3a8ff05ad9496f5c
-rw-r--r--firmware/os/algos/calibration/nano_calibration/nano_calibration.cc20
-rw-r--r--firmware/os/algos/calibration/online_calibration/common_data/calibration_quality.h4
-rw-r--r--firmware/os/algos/calibration/online_calibration/common_data/online_calibration.h15
-rw-r--r--firmware/os/algos/calibration/online_calibration/common_data/result_callback_interface.h8
-rw-r--r--firmware/os/algos/calibration/online_calibration/common_data/sensor_data.h2
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