mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-05 10:49:42 +02:00
Add improved statemachine for isolation disable
This commit is contained in:
parent
253953c4ed
commit
b66934fb42
4 changed files with 30 additions and 18 deletions
|
@ -374,19 +374,31 @@ void EcmpBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
|
|||
if (datalayer_extended.stellantisECMP.UserRequestDisableIsoMonitoring) {
|
||||
if ((rx_frame.data.u8[0] == 0x06) && (rx_frame.data.u8[1] == 0x50) && (rx_frame.data.u8[2] == 0x03)) {
|
||||
//06,50,03,00,C8,00,14,00,
|
||||
DisableIsoMonitoringStatemachine = 2; //Send ECMP_FACTORY_MODE_ACTIVATION next loop
|
||||
DisableIsoMonitoringStatemachine = 2; //Send ECMP_ACK_MESSAGE (02 3e 00)
|
||||
}
|
||||
//if ((rx_frame.data.u8[0] == 0x03) && (rx_frame.data.u8[1] == 0x7F) && (rx_frame.data.u8[2] == 0x2E)) {
|
||||
if (DisableIsoMonitoringStatemachine == 3) {
|
||||
DisableIsoMonitoringStatemachine = 4;
|
||||
if ((rx_frame.data.u8[0] == 0x02) && (rx_frame.data.u8[1] == 0x7E) && (rx_frame.data.u8[2] == 0x00)) {
|
||||
//Expected 02,7E,00
|
||||
DisableIsoMonitoringStatemachine = 4; //Send ECMP_FACTORY_MODE_ACTIVATION next loop
|
||||
}
|
||||
//if ((rx_frame.data.u8[0] == 0x03) && (rx_frame.data.u8[1] == 0x7F) && (rx_frame.data.u8[2] == 0x2E)) {
|
||||
if (DisableIsoMonitoringStatemachine == 5) {
|
||||
DisableIsoMonitoringStatemachine = 6;
|
||||
if ((rx_frame.data.u8[0] == 0x03) && (rx_frame.data.u8[1] == 0x6E) && (rx_frame.data.u8[2] == 0xD9)) {
|
||||
//Factory mode ENTRY: 2E.D9.00.01
|
||||
DisableIsoMonitoringStatemachine = 6; //Send ECMP_DISABLE_ISOLATION_REQ next loop
|
||||
}
|
||||
//if ((rx_frame.data.u8[0] == 0x03) && (rx_frame.data.u8[1] == 0x7F) && (rx_frame.data.u8[2] == 0x31)) {
|
||||
if (DisableIsoMonitoringStatemachine == 7) {
|
||||
//UNKNOWN? 03,7F,31,24 (or 7F?)
|
||||
if ((rx_frame.data.u8[0] == 0x03) && (rx_frame.data.u8[1] == 0x7F) && (rx_frame.data.u8[2] == 0x2E)) {
|
||||
//Factory mode fails to enter with 7F
|
||||
set_event(EVENT_PID_FAILED, rx_frame.data.u8[2]);
|
||||
DisableIsoMonitoringStatemachine =
|
||||
6; //Send ECMP_DISABLE_ISOLATION_REQ next loop (pointless, since it will fail)
|
||||
}
|
||||
if ((rx_frame.data.u8[0] == 0x04) && (rx_frame.data.u8[1] == 0x31) && (rx_frame.data.u8[2] == 0x02)) {
|
||||
//Disable isolation successful 04 31 02 df e1
|
||||
DisableIsoMonitoringStatemachine = COMPLETED_STATE;
|
||||
datalayer_extended.stellantisECMP.UserRequestDisableIsoMonitoring = false;
|
||||
timeSpentDisableIsoMonitoring = COMPLETED_STATE;
|
||||
}
|
||||
if ((rx_frame.data.u8[0] == 0x03) && (rx_frame.data.u8[1] == 0x7F) && (rx_frame.data.u8[2] == 0x31)) {
|
||||
//Disable Isolation fails to enter with 7F
|
||||
set_event(EVENT_PID_FAILED, rx_frame.data.u8[2]);
|
||||
DisableIsoMonitoringStatemachine = COMPLETED_STATE;
|
||||
datalayer_extended.stellantisECMP.UserRequestDisableIsoMonitoring = false;
|
||||
timeSpentDisableIsoMonitoring = COMPLETED_STATE;
|
||||
|
@ -845,15 +857,15 @@ void EcmpBattery::transmit_can(unsigned long currentMillis) {
|
|||
DisableIsoMonitoringStatemachine = 1;
|
||||
}
|
||||
if (DisableIsoMonitoringStatemachine == 2) {
|
||||
transmit_can_frame(&ECMP_FACTORY_MODE_ACTIVATION_NEW, can_config.battery);
|
||||
transmit_can_frame(&ECMP_ACK_MESSAGE, can_config.battery);
|
||||
DisableIsoMonitoringStatemachine = 3;
|
||||
}
|
||||
if (DisableIsoMonitoringStatemachine == 4) {
|
||||
transmit_can_frame(&ECMP_DISABLE_ISOLATION_REQ, can_config.battery);
|
||||
transmit_can_frame(&ECMP_FACTORY_MODE_ACTIVATION, can_config.battery);
|
||||
DisableIsoMonitoringStatemachine = 5;
|
||||
}
|
||||
if (DisableIsoMonitoringStatemachine == 6) {
|
||||
transmit_can_frame(&ECMP_FACTORY_MODE_ACTIVATION, can_config.battery);
|
||||
transmit_can_frame(&ECMP_DISABLE_ISOLATION_REQ, can_config.battery);
|
||||
DisableIsoMonitoringStatemachine = 7;
|
||||
}
|
||||
timeSpentDisableIsoMonitoring++;
|
||||
|
|
|
@ -414,16 +414,12 @@ class EcmpBattery : public CanBattery {
|
|||
.DLC = 5,
|
||||
.ID = 0x6B4,
|
||||
.data = {0x04, 0x2E, 0xD9, 0x00, 0x01}};
|
||||
CAN_frame ECMP_FACTORY_MODE_ACTIVATION_NEW = {.FD = false,
|
||||
.ext_ID = false,
|
||||
.DLC = 4,
|
||||
.ID = 0x6B4,
|
||||
.data = {0x04, 0x2E, 0x19, 0x01}};
|
||||
CAN_frame ECMP_DISABLE_ISOLATION_REQ = {.FD = false,
|
||||
.ext_ID = false,
|
||||
.DLC = 5,
|
||||
.ID = 0x6B4,
|
||||
.data = {0x04, 0x31, 0x02, 0xDF, 0xE1}};
|
||||
CAN_frame ECMP_ACK_MESSAGE = {.FD = false, .ext_ID = false, .DLC = 3, .ID = 0x6B4, .data = {0x02, 0x3E, 0x00}};
|
||||
uint8_t data_010_CRC[8] = {0xB4, 0x96, 0x78, 0x5A, 0x3C, 0x1E, 0xF0, 0xD2};
|
||||
uint8_t data_3A2_CRC[16] = {0x0C, 0x1B, 0x2A, 0x39, 0x48, 0x57,
|
||||
0x66, 0x75, 0x84, 0x93, 0xA2, 0xB1}; // NOTE. Changes on BMS state
|
||||
|
|
|
@ -121,6 +121,7 @@ void init_events(void) {
|
|||
events.entries[EVENT_RJXZS_LOG].level = EVENT_LEVEL_INFO;
|
||||
events.entries[EVENT_PAUSE_BEGIN].level = EVENT_LEVEL_WARNING;
|
||||
events.entries[EVENT_PAUSE_END].level = EVENT_LEVEL_INFO;
|
||||
events.entries[EVENT_PID_FAILED].level = EVENT_LEVEL_INFO;
|
||||
events.entries[EVENT_WIFI_CONNECT].level = EVENT_LEVEL_INFO;
|
||||
events.entries[EVENT_WIFI_DISCONNECT].level = EVENT_LEVEL_INFO;
|
||||
events.entries[EVENT_MQTT_CONNECT].level = EVENT_LEVEL_INFO;
|
||||
|
@ -351,6 +352,8 @@ const char* get_event_message_string(EVENTS_ENUM_TYPE event) {
|
|||
return "The emulator is trying to pause the battery.";
|
||||
case EVENT_PAUSE_END:
|
||||
return "The emulator is attempting to resume battery operation from pause.";
|
||||
case EVENT_PID_FAILED:
|
||||
return "Failed to write PID request to battery";
|
||||
case EVENT_WIFI_CONNECT:
|
||||
return "Wifi connected.";
|
||||
case EVENT_WIFI_DISCONNECT:
|
||||
|
|
|
@ -95,6 +95,7 @@
|
|||
XX(EVENT_RJXZS_LOG) \
|
||||
XX(EVENT_PAUSE_BEGIN) \
|
||||
XX(EVENT_PAUSE_END) \
|
||||
XX(EVENT_PID_FAILED) \
|
||||
XX(EVENT_WIFI_CONNECT) \
|
||||
XX(EVENT_WIFI_DISCONNECT) \
|
||||
XX(EVENT_MQTT_CONNECT) \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue