diff --git a/src/shared/drivers/canbus/CanProtocol/CanProtocolTypes.h b/src/shared/drivers/canbus/CanProtocol/CanProtocolTypes.h index cd867af3461bb1b7d8e4c6c4222491bc6aeb77dc..5ba21104f759841ec4d1d5a4eb84fb166e33795b 100644 --- a/src/shared/drivers/canbus/CanProtocol/CanProtocolTypes.h +++ b/src/shared/drivers/canbus/CanProtocol/CanProtocolTypes.h @@ -34,6 +34,134 @@ namespace Boardcore { +struct CanPitotData : PitotData +{ + uint8_t secondaryType = 0; + uint8_t source = 0; + + static std::string header() + { + return "timestamp,deltaP,airspeed,secondaryType,source\n"; + } + + void print(std::ostream& os) const + { + os << timestamp << "," << deltaP << "," << airspeed << "," + << static_cast<int>(secondaryType) << "," << static_cast<int>(source) + << "\n"; + } +}; + +struct CanPressureData : PressureData +{ + uint8_t secondaryType = 0; + uint8_t source = 0; + + static std::string header() + { + return "timestamp,pressure,secondaryType,source\n"; + } + + void print(std::ostream& os) const + { + os << pressureTimestamp << "," << pressure + << static_cast<int>(secondaryType) << "," << static_cast<int>(source) + << "\n"; + } +}; + +struct CanTemperatureData : TemperatureData +{ + uint8_t secondaryType = 0; + uint8_t source = 0; + + static std::string header() + { + return "timestamp,temperature,secondaryType,source\n"; + } + + void print(std::ostream& os) const + { + os << temperatureTimestamp << "," << temperature + << static_cast<int>(secondaryType) << "," << static_cast<int>(source) + << "\n"; + } +}; + +struct CanCurrentData : CurrentData +{ + uint8_t secondaryType = 0; + uint8_t source = 0; + + static std::string header() + { + return "timestamp,current,secondaryType,source\n"; + } + + void print(std::ostream& os) const + { + os << currentTimestamp << "," << current + << static_cast<int>(secondaryType) << "," << static_cast<int>(source) + << "\n"; + } +}; + +struct CanServoData : ServoData +{ + uint8_t secondaryType = 0; + uint8_t source = 0; + + static std::string header() + { + return "timestamp,timer,channel,position,secondaryType,source\n"; + } + + void print(std::ostream& os) const + { + os << timestamp << "," << static_cast<int>(timer) << "," + << static_cast<int>(channel) << "," << position + << static_cast<int>(secondaryType) << "," << static_cast<int>(source) + << "\n"; + } +}; + +struct CanBatteryVoltageSensorData : BatteryVoltageSensorData +{ + uint8_t secondaryType = 0; + uint8_t source = 0; + + static std::string header() + { + return "voltageTimestamp,channelId,voltage,batVoltage,secondaryType," + "source\n"; + } + + void print(std::ostream& os) const + { + os << voltageTimestamp << "," << static_cast<int>(channelId) << "," + << voltage << "," << batVoltage << static_cast<int>(secondaryType) + << "," << static_cast<int>(source) << "\n"; + } +}; + +struct CanVoltageData : VoltageData +{ + uint8_t secondaryType = 0; + uint8_t source = 0; + + static std::string header() + { + return "timestamp,voltage,secondaryType,source\n"; + } + + void print(std::ostream& os) const + { + os << voltageTimestamp << "," << voltage + << static_cast<int>(secondaryType) << "," << static_cast<int>(source) + << "\n"; + } +}; + inline Canbus::CanMessage toCanMessage(const PitotData& data) { Canbus::CanMessage message; @@ -142,90 +270,103 @@ inline Canbus::CanMessage toCanMessage(const VoltageData& data) return message; } -inline PitotData pitotDataFromCanMessage(const Canbus::CanMessage& msg) +inline CanPitotData pitotDataFromCanMessage(const Canbus::CanMessage& msg) { - PitotData data; + CanPitotData data; uint32_t airspeed = msg.payload[0]; memcpy(&(data.airspeed), &airspeed, sizeof(data.airspeed)); - data.deltaP = 0.0; // put to 0 to avoid undefined behaviour - - data.timestamp = (msg.payload[0] >> 30) & ~0x3; + data.deltaP = 0.0; // put to 0 to avoid undefined behaviour + data.timestamp = (msg.payload[0] >> 30) & ~0x3; + data.secondaryType = msg.getSecondaryType(); + data.source = msg.getSource(); return data; } -inline PressureData pressureDataFromCanMessage(const Canbus::CanMessage& msg) +inline CanPressureData pressureDataFromCanMessage(const Canbus::CanMessage& msg) { - PressureData data; + CanPressureData data; uint32_t pressure = msg.payload[0]; memcpy(&(data.pressure), &pressure, sizeof(data.pressure)); data.pressureTimestamp = (msg.payload[0] >> 30) & ~0x3; + data.secondaryType = msg.getSecondaryType(); + data.source = msg.getSource(); return data; } -inline TemperatureData temperatureDataFromCanMessage( +inline CanTemperatureData temperatureDataFromCanMessage( const Canbus::CanMessage& msg) { - TemperatureData data; + CanTemperatureData data; uint32_t temperature = msg.payload[0]; memcpy(&(data.temperature), &temperature, sizeof(data.temperature)); data.temperatureTimestamp = (msg.payload[0] >> 30) & ~0x3; + data.secondaryType = msg.getSecondaryType(); + data.source = msg.getSource(); return data; } -inline CurrentData currentDataFromCanMessage(const Canbus::CanMessage& msg) +inline CanCurrentData currentDataFromCanMessage(const Canbus::CanMessage& msg) { - CurrentData data; + CanCurrentData data; uint32_t current = msg.payload[0]; memcpy(&(data.current), ¤t, sizeof(data.current)); data.currentTimestamp = (msg.payload[0] >> 30) & ~0x3; + data.secondaryType = msg.getSecondaryType(); + data.source = msg.getSource(); return data; } -inline ServoData servoDataFromCanMessage(const Canbus::CanMessage& msg) +inline CanServoData servoDataFromCanMessage(const Canbus::CanMessage& msg) { - ServoData data; + CanServoData data; - data.timestamp = (msg.payload[0] >> 30) & ~0x3; - data.position = static_cast<uint16_t>(msg.payload[0] >> 16) / 65535.f; - data.channel = static_cast<uint8_t>(msg.payload[0] >> 8); - data.timer = static_cast<uint8_t>(msg.payload[0]); + data.timestamp = (msg.payload[0] >> 30) & ~0x3; + data.position = static_cast<uint16_t>(msg.payload[0] >> 16) / 65535.f; + data.channel = static_cast<uint8_t>(msg.payload[0] >> 8); + data.timer = static_cast<uint8_t>(msg.payload[0]); + data.secondaryType = msg.getSecondaryType(); + data.source = msg.getSource(); return data; } -inline BatteryVoltageSensorData batteryVoltageDataFromCanMessage( +inline CanBatteryVoltageSensorData batteryVoltageDataFromCanMessage( const Canbus::CanMessage& msg) { - BatteryVoltageSensorData data; + CanBatteryVoltageSensorData data; uint32_t voltage = msg.payload[0]; memcpy(&(data.batVoltage), &voltage, sizeof(data.batVoltage)); data.voltageTimestamp = (msg.payload[0] >> 30) & ~0x3; + data.secondaryType = msg.getSecondaryType(); + data.source = msg.getSource(); return data; } -inline VoltageData voltageDataFromCanMessage(const Canbus::CanMessage& msg) +inline CanVoltageData voltageDataFromCanMessage(const Canbus::CanMessage& msg) { - VoltageData data; + CanVoltageData data; uint32_t voltage = msg.payload[0]; memcpy(&(data.voltage), &voltage, sizeof(data.voltage)); data.voltageTimestamp = (msg.payload[0] >> 30) & ~0x3; + data.secondaryType = msg.getSecondaryType(); + data.source = msg.getSource(); return data; } diff --git a/src/shared/logger/LogTypes.h b/src/shared/logger/LogTypes.h index 07868d2566c1a747eba4e20f5f886220fd3b7a5c..d7b770c6ec423c5735aacde7330e266525c48ba7 100644 --- a/src/shared/logger/LogTypes.h +++ b/src/shared/logger/LogTypes.h @@ -30,6 +30,7 @@ #include <diagnostic/PrintLoggerData.h> #include <diagnostic/StackData.h> #include <drivers/adc/InternalADCData.h> +#include <drivers/canbus/CanProtocol/CanProtocolTypes.h> #include <events/EventData.h> #include <logger/Deserializer.h> #include <logger/LoggerStats.h> @@ -140,6 +141,13 @@ void registerTypes(Deserializer& ds) ds.registerType<HSCMRNN015PAData>(); ds.registerType<SSCMRNN030PAData>(); ds.registerType<PitotData>(); + ds.registerType<CanPitotData>(); + ds.registerType<CanPressureData>(); + ds.registerType<CanTemperatureData>(); + ds.registerType<CanCurrentData>(); + ds.registerType<CanServoData>(); + ds.registerType<CanBatteryVoltageSensorData>(); + ds.registerType<CanVoltageData>(); } } // namespace LogTypes