Merge pull request #1504 from jonny5532/feature/fix-can-still-alive

Change several batteries to only flag CAN aliveness on relevant msgs
This commit is contained in:
Daniel Öster 2025-09-08 11:34:47 +03:00 committed by GitHub
commit b5ebcdbcd7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 11 additions and 8 deletions

View file

@ -44,7 +44,6 @@ void KiaHyundaiHybridBattery::
} }
void KiaHyundaiHybridBattery::handle_incoming_can_frame(CAN_frame rx_frame) { void KiaHyundaiHybridBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
switch (rx_frame.ID) { switch (rx_frame.ID) {
case 0x5F1: case 0x5F1:
break; break;
@ -53,6 +52,8 @@ void KiaHyundaiHybridBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
case 0x588: case 0x588:
break; break;
case 0x5AE: case 0x5AE:
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
interlock_missing = (bool)(rx_frame.data.u8[1] & 0x02) >> 1; interlock_missing = (bool)(rx_frame.data.u8[1] & 0x02) >> 1;
break; break;
case 0x5AF: case 0x5AF:

View file

@ -34,7 +34,6 @@ void Mg5Battery::
} }
void Mg5Battery::handle_incoming_can_frame(CAN_frame rx_frame) { void Mg5Battery::handle_incoming_can_frame(CAN_frame rx_frame) {
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
switch (rx_frame.ID) { switch (rx_frame.ID) {
case 0x171: //Following messages were detected on a MG5 battery BMS case 0x171: //Following messages were detected on a MG5 battery BMS
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE; // Let system know battery is sending CAN datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE; // Let system know battery is sending CAN

View file

@ -37,7 +37,6 @@ void PylonBattery::update_values() {
} }
void PylonBattery::handle_incoming_can_frame(CAN_frame rx_frame) { void PylonBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
datalayer_battery->status.CAN_battery_still_alive = CAN_STILL_ALIVE;
switch (rx_frame.ID) { switch (rx_frame.ID) {
case 0x7310: case 0x7310:
case 0x7311: case 0x7311:
@ -55,6 +54,7 @@ void PylonBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
break; break;
case 0x4210: case 0x4210:
case 0x4211: case 0x4211:
datalayer_battery->status.CAN_battery_still_alive = CAN_STILL_ALIVE;
voltage_dV = ((rx_frame.data.u8[1] << 8) | rx_frame.data.u8[0]); voltage_dV = ((rx_frame.data.u8[1] << 8) | rx_frame.data.u8[0]);
current_dA = ((rx_frame.data.u8[3] << 8) | rx_frame.data.u8[2]) - 30000; current_dA = ((rx_frame.data.u8[3] << 8) | rx_frame.data.u8[2]) - 30000;
SOC = rx_frame.data.u8[6]; SOC = rx_frame.data.u8[6];

View file

@ -77,7 +77,6 @@ void RangeRoverPhevBattery::update_values() {
} }
void RangeRoverPhevBattery::handle_incoming_can_frame(CAN_frame rx_frame) { void RangeRoverPhevBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
switch (rx_frame.ID) { switch (rx_frame.ID) {
case 0x080: // 15ms case 0x080: // 15ms
StatusCAT5BPOChg = (rx_frame.data.u8[0] & 0x01); StatusCAT5BPOChg = (rx_frame.data.u8[0] & 0x01);
@ -105,6 +104,7 @@ void RangeRoverPhevBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
DischargeContPwrLmt = ((rx_frame.data.u8[6] << 8) | rx_frame.data.u8[7]); DischargeContPwrLmt = ((rx_frame.data.u8[6] << 8) | rx_frame.data.u8[7]);
break; break;
case 0x102: // 20ms case 0x102: // 20ms
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
PwrGpCS = rx_frame.data.u8[0]; PwrGpCS = rx_frame.data.u8[0];
PwrGpCounter = (rx_frame.data.u8[1] & 0x3C) >> 2; PwrGpCounter = (rx_frame.data.u8[1] & 0x3C) >> 2;
VoltageExt = (((rx_frame.data.u8[1] & 0x03) << 8) | rx_frame.data.u8[2]); VoltageExt = (((rx_frame.data.u8[1] & 0x03) << 8) | rx_frame.data.u8[2]);

View file

@ -52,9 +52,10 @@ void RenaultTwizyBattery::update_values() {
} }
void RenaultTwizyBattery::handle_incoming_can_frame(CAN_frame rx_frame) { void RenaultTwizyBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
switch (rx_frame.ID) { switch (rx_frame.ID) {
case 0x155: case 0x155:
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
// max charge power is in steps of 300W from 0 to 7 // max charge power is in steps of 300W from 0 to 7
max_charge_power = (uint16_t)rx_frame.data.u8[0] * 300; max_charge_power = (uint16_t)rx_frame.data.u8[0] * 300;

View file

@ -40,9 +40,10 @@ void SimpBmsBattery::update_values() {
} }
void SimpBmsBattery::handle_incoming_can_frame(CAN_frame rx_frame) { void SimpBmsBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
switch (rx_frame.ID) { switch (rx_frame.ID) {
case 0x355: case 0x355:
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
SOC = (rx_frame.data.u8[1] << 8) + rx_frame.data.u8[0]; SOC = (rx_frame.data.u8[1] << 8) + rx_frame.data.u8[0];
SOH = (rx_frame.data.u8[3] << 8) + rx_frame.data.u8[2]; SOH = (rx_frame.data.u8[3] << 8) + rx_frame.data.u8[2];

View file

@ -89,9 +89,10 @@ void VolvoSpaBattery::
} }
void VolvoSpaBattery::handle_incoming_can_frame(CAN_frame rx_frame) { void VolvoSpaBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
switch (rx_frame.ID) { switch (rx_frame.ID) {
case 0x3A: case 0x3A:
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
if ((rx_frame.data.u8[6] & 0x80) == 0x80) if ((rx_frame.data.u8[6] & 0x80) == 0x80)
BATT_I = (0 - ((((rx_frame.data.u8[6] & 0x7F) * 256.0 + rx_frame.data.u8[7]) * 0.1) - 1638)); BATT_I = (0 - ((((rx_frame.data.u8[6] & 0x7F) * 256.0 + rx_frame.data.u8[7]) * 0.1) - 1638));
else { else {

View file

@ -74,9 +74,9 @@ void VolvoSpaHybridBattery::
} }
void VolvoSpaHybridBattery::handle_incoming_can_frame(CAN_frame rx_frame) { void VolvoSpaHybridBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
switch (rx_frame.ID) { switch (rx_frame.ID) {
case 0x3A: case 0x3A:
datalayer.battery.status.CAN_battery_still_alive = CAN_STILL_ALIVE;
if ((rx_frame.data.u8[6] & 0x80) == 0x80) if ((rx_frame.data.u8[6] & 0x80) == 0x80)
BATT_I = (0 - ((((rx_frame.data.u8[6] & 0x7F) * 256.0 + rx_frame.data.u8[7]) * 0.1) - 1638)); BATT_I = (0 - ((((rx_frame.data.u8[6] & 0x7F) * 256.0 + rx_frame.data.u8[7]) * 0.1) - 1638));
else { else {