[DO NOT MERGE] ImuCal G3 Code Sync

- Replacing FLT_MAX with large constant value fixes build issue for SLPI
  devices.

Bug: 195786366
Test: Compiled and tested on device.

PiperOrigin-RevId: 397397040
Change-Id: Ib1a08155c033fe93dcb2d3af430dadf3a732b7da
diff --git a/firmware/os/algos/calibration/nano_calibration/nano_calibration.cc b/firmware/os/algos/calibration/nano_calibration/nano_calibration.cc
index 024a031..9d8e04d 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 @@
 #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 @@
   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 6b146f4..d9e5bd7 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 @@
 
 // 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 = FLT_MAX;
+// 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/result_callback_interface.h b/firmware/os/algos/calibration/online_calibration/common_data/result_callback_interface.h
index cfe504d..585f67f 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 @@
   //                    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