Cell voltages fork (SoC)
Dependencies: CUER_CAN CUER_DS1820 LTC2943 LTC6804 mbed PowerControl
Diff: CANParserBMU.cpp
- Revision:
- 13:7b42af989cd1
- Parent:
- 9:82ba050a7e13
- Child:
- 14:e0e88a009f4c
--- a/CANParserBMU.cpp Fri Jun 23 17:41:17 2017 +0000 +++ b/CANParserBMU.cpp Wed Jun 28 16:56:33 2017 +0000 @@ -1,20 +1,28 @@ // Here are the functions to generate the CAN messages #include "CANParserBMU.h" #include "mbed.h" +#include "Data_Types_BMU.h" using namespace CAN_IDs; -CANMessage createTemperatureTelemetry(uint8_t ID, uint32_t CMUSerialNumber, uint16_t PCBTemperature, uint16_t cellTemperature) +/** +* This function is rewritten to give readings for individual probes rather than +* for specific CMU. As a consequence, 0x800 onwards is being used for these probes, +* as everything above about 0x700 is unused by the Tritium standard. Additionally, +* instead of using uint16, floats will be used since only one temperature reading +* is needed per message, allowing 32 bits per reading, and float is the natural +* type obtained by the sensor. +*/ +CANMessage createTemperatureTelemetry(uint8_t offset, uint32_t ProbeID, float Temperature) { CANMessage msg; msg.len = 8; - msg.id = BMS_BASE_ID + ID; // for voltage 0x601 - 0x6EF + msg.id = TEMPERATURE_BASE_ID + offset; // for temp it is 0x800 onwards CAN_Data data; - data.setLower_uLong(CMUSerialNumber); - data.set_u16(2, PCBTemperature); - data.set_u16(3, cellTemperature); + data.setLower_uLong(ProbeID); + data.setUpperFloat(Temperature); for (int i = 0; i<8; i++) { msg.data[i] = data.get_u8(i); @@ -22,6 +30,21 @@ return msg; } +/** +* Takes a CANMessage with precondition that it stores temperature of an individual +* probe and returns an individual_temperature object containing ID and reading. +*/ +individual_temperature decodeTemperatureTelemetry(CANMessage msg) +{ + individual_temperature probe_reading; + CAN_Data decode; + + decode.importCANData(msg); + probe_reading.measurement = decode.getUpperFloat(); + probe_reading.ID = decode.getLower_uLong(); + + return probe_reading; +} CANMessage createVoltageTelemetry(int offset_id, uint16_t voltage[]) {