|
| 1 | +// Copyright (c) 2018 Formula Slug. All Rights Reserved. |
| 2 | + |
| 3 | +#pragma once |
| 4 | + |
| 5 | +// SIDs From Accumulator |
| 6 | +constexpr uint32_t kFuncIdHeartBeatAcc = 0x701; |
| 7 | +constexpr uint32_t kFuncIdCellStartup = 0x420; |
| 8 | +constexpr uint32_t kFuncIdFaultStatus = 0x421; |
| 9 | +constexpr uint32_t kFuncIdBmsStat = 0x422; |
| 10 | +constexpr uint32_t kFuncIdCellVoltage[7] = {0x423, 0x424, 0x425, 0x426, |
| 11 | + 0x427, 0x428, 0x429}; |
| 12 | +constexpr uint32_t kFuncIdCellTempAdc[4] = {0x42a, 0x42b, 0x42c, 0x42d}; |
| 13 | + |
| 14 | +CANMessage BMSCellStartup () { |
| 15 | + const char * startupMessage = "SPICYBOI"; |
| 16 | + return CANMessage(kFuncIdCellStartup, startupMessage); |
| 17 | +} |
| 18 | + |
| 19 | +CANMessage BMSFaultStatus (uint8_t contactorState, uint8_t faultState, uint8_t warningState, uint8_t SoC, uint16_t DoD, uint16_t totalCurrent) { |
| 20 | + const unsigned char data[8]; |
| 21 | + data[0] = contactorState; |
| 22 | + data[1] = faultState; |
| 23 | + data[2] = warningState; |
| 24 | + data[3] = SoC; |
| 25 | + data[4] = DoD >> 8; |
| 26 | + data[5] = DoD; |
| 27 | + data[6] = totalCurrent >> 8; |
| 28 | + data[7] = totalCurrent; |
| 29 | + return CANMessage(kFuncIdFaultStatus, data); |
| 30 | +} |
| 31 | + |
| 32 | +CANMessage BMSStatus (uint16_t totalVoltage, uint16_t maxVoltage, uint16_t minVoltage, uint8_t maxTemp, uint8_t minTemp) { |
| 33 | + const unsigned char data[8]; |
| 34 | + data[0] = totalVoltage >> 8; |
| 35 | + data[1] = totalVoltage; |
| 36 | + data[2] = maxVoltage >> 8; |
| 37 | + data[3] = maxVoltage; |
| 38 | + data[4] = minVoltage >> 8; |
| 39 | + data[5] = minVoltage; |
| 40 | + data[6] = maxTemp; |
| 41 | + data[7] = minTemp; |
| 42 | + return CANMessage(kFuncIdBmsStat, data); |
| 43 | +} |
| 44 | + |
| 45 | +CANMessage BMSCellVoltage (uint8_t row, uint16_t * voltages) { |
| 46 | + const unsigned char data[8]; |
| 47 | + for (int i = 0; i < 8; i += 2) { |
| 48 | + data[i] = voltages[i/2] >> 8; |
| 49 | + data[++i] = voltages [i/2]; |
| 50 | + } |
| 51 | + return CANMessage(kFuncIdCellVoltage[row], data); |
| 52 | +} |
| 53 | + |
| 54 | +CANMessage BMSCellTemp (uint8_t row, uint8_t * temps) { |
| 55 | + const unsigned char data[7]; |
| 56 | + for (int i = 0; i < 7; i++) { |
| 57 | + data[i] = temps[i]; |
| 58 | + } |
| 59 | + return CANMessage(kFunIdCellTempAdc[row], data, 7); |
| 60 | +} |
0 commit comments