From ecc9a494d32b2e252993f3e129747316f602db7f Mon Sep 17 00:00:00 2001
From: Matteo Pignataro <matteo.pignataro@skywarder.eu>
Date: Fri, 1 Sep 2023 19:46:09 +0200
Subject: [PATCH] [CanProtocolTypes] Added voltage sensor

---
 .../canbus/CanProtocol/CanProtocolTypes.h     | 29 +++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/src/shared/drivers/canbus/CanProtocol/CanProtocolTypes.h b/src/shared/drivers/canbus/CanProtocol/CanProtocolTypes.h
index 0a171082e..6a5c80d7e 100644
--- a/src/shared/drivers/canbus/CanProtocol/CanProtocolTypes.h
+++ b/src/shared/drivers/canbus/CanProtocol/CanProtocolTypes.h
@@ -24,6 +24,7 @@
 
 #include <actuators/Servo/ServoData.h>
 #include <sensors/SensorData.h>
+#include <sensors/analog/BatteryVoltageSensorData.h>
 #include <sensors/analog/Pitot/PitotData.h>
 
 #include <cstring>
@@ -111,6 +112,21 @@ inline Canbus::CanMessage toCanMessage(const ServoData& data)
     return message;
 }
 
+inline Canbus::CanMessage toCanMessage(const BatteryVoltageSensorData& data)
+{
+    Canbus::CanMessage message;
+
+    uint32_t voltage;
+    memcpy(&voltage, &(data.batVoltage), sizeof(voltage));
+
+    message.id         = -1;
+    message.length     = 1;
+    message.payload[0] = (data.voltageTimestamp & ~0x3) << 30;
+    message.payload[0] |= voltage;
+
+    return message;
+}
+
 inline PitotData pitotDataFromCanMessage(const Canbus::CanMessage& msg)
 {
     PitotData data;
@@ -174,4 +190,17 @@ inline ServoData servoDataFromCanMessage(const Canbus::CanMessage& msg)
     return data;
 }
 
+inline BatteryVoltageSensorData voltageDataFromCanMessage(
+    const Canbus::CanMessage& msg)
+{
+    BatteryVoltageSensorData data;
+
+    uint32_t voltage = msg.payload[0];
+    memcpy(&(data.batVoltage), &voltage, sizeof(data.batVoltage));
+
+    data.voltageTimestamp = (msg.payload[0] >> 30) & ~0x3;
+
+    return data;
+}
+
 }  // namespace Boardcore
-- 
GitLab