From 0c10ce2235ee7d8065beaf61b8070afce6c47a79 Mon Sep 17 00:00:00 2001
From: Davide Basso <davide.basso@skywarder.eu>
Date: Wed, 7 Feb 2024 22:09:28 +0100
Subject: [PATCH] [Units] fix macro, add ostream support

---
 src/shared/sensors/BMX160/BMX160Data.h               |  4 ++--
 src/shared/sensors/BMX160/BMX160WithCorrectionData.h |  4 ++--
 src/shared/sensors/H3LIS331DL/H3LIS331DLData.h       |  4 ++--
 src/shared/sensors/LIS331HH/LIS331HHData.h           |  4 ++--
 src/shared/sensors/LIS3DSH/LIS3DSHData.h             |  4 ++--
 src/shared/sensors/LSM6DSRX/LSM6DSRXData.h           |  4 ++--
 src/shared/sensors/MPU9250/MPU9250Data.h             |  4 ++--
 src/shared/sensors/SensorData.h                      |  4 ++--
 src/shared/sensors/VN100/VN100Data.h                 |  4 ++--
 src/shared/units/Units.h                             | 11 +++++++++--
 10 files changed, 27 insertions(+), 20 deletions(-)

diff --git a/src/shared/sensors/BMX160/BMX160Data.h b/src/shared/sensors/BMX160/BMX160Data.h
index 62fd29c10..853ce135e 100644
--- a/src/shared/sensors/BMX160/BMX160Data.h
+++ b/src/shared/sensors/BMX160/BMX160Data.h
@@ -53,8 +53,8 @@ struct BMX160Data : public AccelerometerData,
 
     void print(std::ostream& os) const
     {
-        os << accelerationTimestamp << "," << accelerationX.value() << ","
-           << accelerationY.value() << "," << accelerationZ.value() << ","
+        os << accelerationTimestamp << "," << accelerationX << ","
+           << accelerationY << "," << accelerationZ << ","
            << angularSpeedTimestamp << "," << angularSpeedX << ","
            << angularSpeedY << "," << angularSpeedZ << ","
            << magneticFieldTimestamp << "," << magneticFieldX << ","
diff --git a/src/shared/sensors/BMX160/BMX160WithCorrectionData.h b/src/shared/sensors/BMX160/BMX160WithCorrectionData.h
index 0f5aaaa32..c3e22c094 100644
--- a/src/shared/sensors/BMX160/BMX160WithCorrectionData.h
+++ b/src/shared/sensors/BMX160/BMX160WithCorrectionData.h
@@ -76,8 +76,8 @@ struct BMX160WithCorrectionData : public BMX160Data
 
     void print(std::ostream& os) const
     {
-        os << accelerationTimestamp << "," << accelerationX.value() << ","
-           << accelerationY.value() << "," << accelerationZ.value() << ","
+        os << accelerationTimestamp << "," << accelerationX << ","
+           << accelerationY << "," << accelerationZ << ","
            << angularSpeedTimestamp << "," << angularSpeedX << ","
            << angularSpeedY << "," << angularSpeedZ << ","
            << magneticFieldTimestamp << "," << magneticFieldX << ","
diff --git a/src/shared/sensors/H3LIS331DL/H3LIS331DLData.h b/src/shared/sensors/H3LIS331DL/H3LIS331DLData.h
index 27a3f9c2e..d3871d843 100644
--- a/src/shared/sensors/H3LIS331DL/H3LIS331DLData.h
+++ b/src/shared/sensors/H3LIS331DL/H3LIS331DLData.h
@@ -49,8 +49,8 @@ struct H3LIS331DLData : public AccelerometerData
 
     void print(std::ostream& os) const
     {
-        os << accelerationTimestamp << "," << accelerationX.value() << ","
-           << accelerationY.value() << "," << accelerationZ.value() << "\n";
+        os << accelerationTimestamp << "," << accelerationX << ","
+           << accelerationY << "," << accelerationZ << "\n";
     }
 };
 
diff --git a/src/shared/sensors/LIS331HH/LIS331HHData.h b/src/shared/sensors/LIS331HH/LIS331HHData.h
index 31bef1fb2..72a572141 100644
--- a/src/shared/sensors/LIS331HH/LIS331HHData.h
+++ b/src/shared/sensors/LIS331HH/LIS331HHData.h
@@ -39,8 +39,8 @@ struct LIS331HHData : public AccelerometerData
 
     void print(std::ostream& os) const
     {
-        os << accelerationTimestamp << "," << accelerationX.value() << ","
-           << accelerationY.value() << "," << accelerationZ.value() << "\n";
+        os << accelerationTimestamp << "," << accelerationX << ","
+           << accelerationY << "," << accelerationZ << "\n";
     }
 };
 
diff --git a/src/shared/sensors/LIS3DSH/LIS3DSHData.h b/src/shared/sensors/LIS3DSH/LIS3DSHData.h
index f2dfa77ae..ab382c5e8 100644
--- a/src/shared/sensors/LIS3DSH/LIS3DSHData.h
+++ b/src/shared/sensors/LIS3DSH/LIS3DSHData.h
@@ -60,8 +60,8 @@ struct LIS3DSHData : public AccelerometerData, public TemperatureData
 
     void print(std::ostream& os) const
     {
-        os << accelerationTimestamp << "," << accelerationX.value() << ","
-           << accelerationY.value() << "," << accelerationZ.value() << ","
+        os << accelerationTimestamp << "," << accelerationX << ","
+           << accelerationY << "," << accelerationZ << ","
            << temperatureTimestamp << "," << temperature << "\n";
     }
 };
diff --git a/src/shared/sensors/LSM6DSRX/LSM6DSRXData.h b/src/shared/sensors/LSM6DSRX/LSM6DSRXData.h
index 268df0354..ddbe5789e 100644
--- a/src/shared/sensors/LSM6DSRX/LSM6DSRXData.h
+++ b/src/shared/sensors/LSM6DSRX/LSM6DSRXData.h
@@ -45,8 +45,8 @@ struct LSM6DSRXData : public AccelerometerData, public GyroscopeData
 
     void print(std::ostream& os) const
     {
-        os << accelerationTimestamp << "," << accelerationX.value() << ","
-           << accelerationY.value() << "," << accelerationZ.value() << ","
+        os << accelerationTimestamp << "," << accelerationX << ","
+           << accelerationY << "," << accelerationZ << ","
            << angularSpeedTimestamp << "," << angularSpeedX << ","
            << angularSpeedY << "," << angularSpeedZ << "\n";
     }
diff --git a/src/shared/sensors/MPU9250/MPU9250Data.h b/src/shared/sensors/MPU9250/MPU9250Data.h
index dd526fa50..d9d23cb04 100644
--- a/src/shared/sensors/MPU9250/MPU9250Data.h
+++ b/src/shared/sensors/MPU9250/MPU9250Data.h
@@ -56,8 +56,8 @@ struct MPU9250Data : public AccelerometerData,
 
     void print(std::ostream& os) const
     {
-        os << accelerationTimestamp << "," << accelerationX.value() << ","
-           << accelerationY.value() << "," << accelerationZ.value() << ","
+        os << accelerationTimestamp << "," << accelerationX << ","
+           << accelerationY << "," << accelerationZ << ","
            << angularSpeedTimestamp << "," << angularSpeedX << ","
            << angularSpeedY << "," << angularSpeedZ << ","
            << magneticFieldTimestamp << "," << magneticFieldX << ","
diff --git a/src/shared/sensors/SensorData.h b/src/shared/sensors/SensorData.h
index 5d172388f..2450d8921 100644
--- a/src/shared/sensors/SensorData.h
+++ b/src/shared/sensors/SensorData.h
@@ -139,8 +139,8 @@ struct AccelerometerData
 
     void print(std::ostream& os) const
     {
-        os << accelerationTimestamp << "," << accelerationX.value() << ","
-           << accelerationY.value() << "," << accelerationZ.value() << "\n";
+        os << accelerationTimestamp << "," << accelerationX << ","
+           << accelerationY << "," << accelerationZ << "\n";
     }
 
     operator Eigen::Vector3f() const
diff --git a/src/shared/sensors/VN100/VN100Data.h b/src/shared/sensors/VN100/VN100Data.h
index 0f759d957..69edf9758 100644
--- a/src/shared/sensors/VN100/VN100Data.h
+++ b/src/shared/sensors/VN100/VN100Data.h
@@ -86,8 +86,8 @@ struct VN100Data : public QuaternionData,
            << "," << quaternionZ << "," << quaternionW << ","
            << magneticFieldTimestamp << "," << magneticFieldX << ","
            << magneticFieldY << "," << magneticFieldZ << ","
-           << accelerationTimestamp << "," << accelerationX.value() << ","
-           << accelerationY.value() << "," << accelerationZ.value() << ","
+           << accelerationTimestamp << "," << accelerationX << ","
+           << accelerationY << "," << accelerationZ << ","
            << angularSpeedTimestamp << "," << angularSpeedX << ","
            << angularSpeedY << "," << angularSpeedZ << ","
            << temperatureTimestamp << "," << temperature << ","
diff --git a/src/shared/units/Units.h b/src/shared/units/Units.h
index 6e59cbcd0..1ace1725e 100644
--- a/src/shared/units/Units.h
+++ b/src/shared/units/Units.h
@@ -22,8 +22,7 @@
 
 #pragma once
 
-#include <utils/Debug.h>
-
+#include <ostream>
 #include <ratio>
 #include <typeinfo>
 
@@ -77,6 +76,14 @@ private:
     float _value;
 };
 
+// Logging
+template <UnitKind Kind, class Ratio>
+std::ostream &operator<<(std::ostream &os, const Unit<Kind, Ratio> &unit)
+{
+    os << unit.template value<Ratio>();
+    return os;
+}
+
 // Sum, Subtraction, Multiplication, Division
 template <UnitKind Kind, class Ratio>
 constexpr auto operator+(const Unit<Kind, Ratio> &lhs,
-- 
GitLab