mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-06 03:50:13 +02:00
Optimize CAN handler for faster execution
This commit is contained in:
parent
f9109d0348
commit
163af330d7
2 changed files with 36 additions and 78 deletions
|
@ -1813,31 +1813,26 @@ void TeslaBattery::transmit_can(unsigned long currentMillis) {
|
||||||
switch (muxNumber_TESLA_2E1) {
|
switch (muxNumber_TESLA_2E1) {
|
||||||
case 0:
|
case 0:
|
||||||
transmit_can_frame(&TESLA_2E1_VEHICLE_AND_RAILS);
|
transmit_can_frame(&TESLA_2E1_VEHICLE_AND_RAILS);
|
||||||
muxNumber_TESLA_2E1++;
|
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
transmit_can_frame(&TESLA_2E1_HOMELINK);
|
transmit_can_frame(&TESLA_2E1_HOMELINK);
|
||||||
muxNumber_TESLA_2E1++;
|
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
transmit_can_frame(&TESLA_2E1_REFRIGERANT_SYSTEM);
|
transmit_can_frame(&TESLA_2E1_REFRIGERANT_SYSTEM);
|
||||||
muxNumber_TESLA_2E1++;
|
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
transmit_can_frame(&TESLA_2E1_LV_BATTERY_DEBUG);
|
transmit_can_frame(&TESLA_2E1_LV_BATTERY_DEBUG);
|
||||||
muxNumber_TESLA_2E1++;
|
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
transmit_can_frame(&TESLA_2E1_MUX_5);
|
transmit_can_frame(&TESLA_2E1_MUX_5);
|
||||||
muxNumber_TESLA_2E1++;
|
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
transmit_can_frame(&TESLA_2E1_BODY_CONTROLS);
|
transmit_can_frame(&TESLA_2E1_BODY_CONTROLS);
|
||||||
muxNumber_TESLA_2E1 = 0;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
muxNumber_TESLA_2E1 = (muxNumber_TESLA_2E1 + 1) % 6; //Cycle betweeen 0-1-2-3-4-5-0...
|
||||||
//Generate next frames
|
//Generate next frames
|
||||||
generateFrameCounterChecksum(TESLA_118, 8, 4, 0, 8);
|
generateFrameCounterChecksum(TESLA_118, 8, 4, 0, 8);
|
||||||
}
|
}
|
||||||
|
@ -1848,75 +1843,45 @@ void TeslaBattery::transmit_can(unsigned long currentMillis) {
|
||||||
|
|
||||||
//0x221 VCFRONT_LVPowerState
|
//0x221 VCFRONT_LVPowerState
|
||||||
if (vehicleState == CAR_DRIVE) {
|
if (vehicleState == CAR_DRIVE) {
|
||||||
switch (muxNumber_TESLA_221) {
|
if (alternateMux) {
|
||||||
case 0:
|
generateMuxFrameCounterChecksum(TESLA_221_DRIVE_Mux0, frameCounter_TESLA_221, 52, 4, 56, 8);
|
||||||
generateMuxFrameCounterChecksum(TESLA_221_DRIVE_Mux0, frameCounter_TESLA_221, 52, 4, 56, 8);
|
transmit_can_frame(&TESLA_221_DRIVE_Mux0);
|
||||||
transmit_can_frame(&TESLA_221_DRIVE_Mux0);
|
} else {
|
||||||
muxNumber_TESLA_221++;
|
generateMuxFrameCounterChecksum(TESLA_221_DRIVE_Mux1, frameCounter_TESLA_221, 52, 4, 56, 8);
|
||||||
break;
|
transmit_can_frame(&TESLA_221_DRIVE_Mux1);
|
||||||
case 1:
|
}
|
||||||
generateMuxFrameCounterChecksum(TESLA_221_DRIVE_Mux1, frameCounter_TESLA_221, 52, 4, 56, 8);
|
} else if (vehicleState == ACCESSORY) {
|
||||||
transmit_can_frame(&TESLA_221_DRIVE_Mux1);
|
if (alternateMux) {
|
||||||
muxNumber_TESLA_221 = 0;
|
generateMuxFrameCounterChecksum(TESLA_221_ACCESSORY_Mux0, frameCounter_TESLA_221, 52, 4, 56, 8);
|
||||||
break;
|
transmit_can_frame(&TESLA_221_ACCESSORY_Mux0);
|
||||||
default:
|
} else {
|
||||||
break;
|
generateMuxFrameCounterChecksum(TESLA_221_ACCESSORY_Mux1, frameCounter_TESLA_221, 52, 4, 56, 8);
|
||||||
}
|
transmit_can_frame(&TESLA_221_ACCESSORY_Mux1);
|
||||||
}
|
}
|
||||||
if (vehicleState == ACCESSORY) {
|
} else if (vehicleState == GOING_DOWN) {
|
||||||
switch (muxNumber_TESLA_221) {
|
if (alternateMux) {
|
||||||
case 0:
|
generateMuxFrameCounterChecksum(TESLA_221_GOING_DOWN_Mux0, frameCounter_TESLA_221, 52, 4, 56, 8);
|
||||||
generateMuxFrameCounterChecksum(TESLA_221_ACCESSORY_Mux0, frameCounter_TESLA_221, 52, 4, 56, 8);
|
transmit_can_frame(&TESLA_221_GOING_DOWN_Mux0);
|
||||||
transmit_can_frame(&TESLA_221_ACCESSORY_Mux0);
|
} else {
|
||||||
muxNumber_TESLA_221++;
|
generateMuxFrameCounterChecksum(TESLA_221_GOING_DOWN_Mux1, frameCounter_TESLA_221, 52, 4, 56, 8);
|
||||||
break;
|
transmit_can_frame(&TESLA_221_GOING_DOWN_Mux1);
|
||||||
case 1:
|
}
|
||||||
generateMuxFrameCounterChecksum(TESLA_221_ACCESSORY_Mux1, frameCounter_TESLA_221, 52, 4, 56, 8);
|
} else if (vehicleState == CAR_OFF) {
|
||||||
transmit_can_frame(&TESLA_221_ACCESSORY_Mux1);
|
if (alternateMux) {
|
||||||
muxNumber_TESLA_221 = 0;
|
generateMuxFrameCounterChecksum(TESLA_221_OFF_Mux0, frameCounter_TESLA_221, 52, 4, 56, 8);
|
||||||
break;
|
transmit_can_frame(&TESLA_221_OFF_Mux0);
|
||||||
default:
|
} else {
|
||||||
break;
|
generateMuxFrameCounterChecksum(TESLA_221_OFF_Mux1, frameCounter_TESLA_221, 52, 4, 56, 8);
|
||||||
}
|
transmit_can_frame(&TESLA_221_OFF_Mux1);
|
||||||
}
|
|
||||||
if (vehicleState == GOING_DOWN) {
|
|
||||||
switch (muxNumber_TESLA_221) {
|
|
||||||
case 0:
|
|
||||||
generateMuxFrameCounterChecksum(TESLA_221_GOING_DOWN_Mux0, frameCounter_TESLA_221, 52, 4, 56, 8);
|
|
||||||
transmit_can_frame(&TESLA_221_GOING_DOWN_Mux0);
|
|
||||||
muxNumber_TESLA_221++;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
generateMuxFrameCounterChecksum(TESLA_221_GOING_DOWN_Mux1, frameCounter_TESLA_221, 52, 4, 56, 8);
|
|
||||||
transmit_can_frame(&TESLA_221_GOING_DOWN_Mux1);
|
|
||||||
muxNumber_TESLA_221 = 0;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (vehicleState == CAR_OFF) {
|
|
||||||
switch (muxNumber_TESLA_221) {
|
|
||||||
case 0:
|
|
||||||
generateMuxFrameCounterChecksum(TESLA_221_OFF_Mux0, frameCounter_TESLA_221, 52, 4, 56, 8);
|
|
||||||
transmit_can_frame(&TESLA_221_OFF_Mux0);
|
|
||||||
muxNumber_TESLA_221++;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
generateMuxFrameCounterChecksum(TESLA_221_OFF_Mux1, frameCounter_TESLA_221, 52, 4, 56, 8);
|
|
||||||
transmit_can_frame(&TESLA_221_OFF_Mux1);
|
|
||||||
muxNumber_TESLA_221 = 0;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
alternateMux ^= 1; // Flips between 0 and 1. Used to Flip between sending Mux0 and Mux1 on each pass
|
||||||
//Generate next new frame
|
//Generate next new frame
|
||||||
frameCounter_TESLA_221 = (frameCounter_TESLA_221 + 1) % 16;
|
frameCounter_TESLA_221 = (frameCounter_TESLA_221 + 1) % 16;
|
||||||
|
|
||||||
//0x3C2 VCLEFT_switchStatus
|
//0x3C2 VCLEFT_switchStatus
|
||||||
transmit_can_frame(muxNumber_TESLA_3C2 == 0 ? &TESLA_3C2_Mux0 : &TESLA_3C2_Mux1);
|
transmit_can_frame(alternateMux == 0 ? &TESLA_3C2_Mux0 : &TESLA_3C2_Mux1);
|
||||||
muxNumber_TESLA_3C2 = !muxNumber_TESLA_3C2; // Flip between sending Mux0 and Mux1 on each pass
|
|
||||||
|
|
||||||
//0x39D IBST_status
|
//0x39D IBST_status
|
||||||
transmit_can_frame(&TESLA_39D);
|
transmit_can_frame(&TESLA_39D);
|
||||||
|
@ -1956,28 +1921,23 @@ void TeslaBattery::transmit_can(unsigned long currentMillis) {
|
||||||
switch (muxNumber_TESLA_7FF) {
|
switch (muxNumber_TESLA_7FF) {
|
||||||
case 0:
|
case 0:
|
||||||
transmit_can_frame(&TESLA_7FF_Mux1);
|
transmit_can_frame(&TESLA_7FF_Mux1);
|
||||||
muxNumber_TESLA_7FF++;
|
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
transmit_can_frame(&TESLA_7FF_Mux2);
|
transmit_can_frame(&TESLA_7FF_Mux2);
|
||||||
muxNumber_TESLA_7FF++;
|
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
transmit_can_frame(&TESLA_7FF_Mux3);
|
transmit_can_frame(&TESLA_7FF_Mux3);
|
||||||
muxNumber_TESLA_7FF++;
|
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
transmit_can_frame(&TESLA_7FF_Mux4);
|
transmit_can_frame(&TESLA_7FF_Mux4);
|
||||||
muxNumber_TESLA_7FF++;
|
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
transmit_can_frame(&TESLA_7FF_Mux5);
|
transmit_can_frame(&TESLA_7FF_Mux5);
|
||||||
muxNumber_TESLA_7FF = 0;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
muxNumber_TESLA_7FF = (muxNumber_TESLA_7FF + 1) % 5; //Cycle betweeen 0-1-2-3-4-0...
|
||||||
//Generate next frames
|
//Generate next frames
|
||||||
generateTESLA_229(TESLA_229);
|
generateTESLA_229(TESLA_229);
|
||||||
generateFrameCounterChecksum(TESLA_2A8, 52, 4, 56, 8);
|
generateFrameCounterChecksum(TESLA_2A8, 52, 4, 56, 8);
|
||||||
|
|
|
@ -75,7 +75,7 @@ class TeslaBattery : public CanBattery {
|
||||||
//UDS session tracker
|
//UDS session tracker
|
||||||
//static bool uds_SessionInProgress = false; // Future use
|
//static bool uds_SessionInProgress = false; // Future use
|
||||||
//0x221 VCFRONT_LVPowerState
|
//0x221 VCFRONT_LVPowerState
|
||||||
uint8_t muxNumber_TESLA_221 = 0;
|
uint8_t alternateMux = 0;
|
||||||
uint8_t frameCounter_TESLA_221 = 15; // Start at 15 for Mux 0
|
uint8_t frameCounter_TESLA_221 = 15; // Start at 15 for Mux 0
|
||||||
uint8_t vehicleState = 1; // "OFF": 0, "DRIVE": 1, "ACCESSORY": 2, "GOING_DOWN": 3
|
uint8_t vehicleState = 1; // "OFF": 0, "DRIVE": 1, "ACCESSORY": 2, "GOING_DOWN": 3
|
||||||
static const uint8_t CAR_OFF = 0;
|
static const uint8_t CAR_OFF = 0;
|
||||||
|
@ -89,8 +89,6 @@ class TeslaBattery : public CanBattery {
|
||||||
bool TESLA_334_INITIAL_SENT = false;
|
bool TESLA_334_INITIAL_SENT = false;
|
||||||
//0x3A1 VCFRONT_vehicleStatus, 15 frame counter (temporary)
|
//0x3A1 VCFRONT_vehicleStatus, 15 frame counter (temporary)
|
||||||
uint8_t frameCounter_TESLA_3A1 = 0;
|
uint8_t frameCounter_TESLA_3A1 = 0;
|
||||||
//0x3C2 VCLEFT_switchStatus
|
|
||||||
uint8_t muxNumber_TESLA_3C2 = 0;
|
|
||||||
//0x504 TWC_status
|
//0x504 TWC_status
|
||||||
bool TESLA_504_INITIAL_SENT = false;
|
bool TESLA_504_INITIAL_SENT = false;
|
||||||
//0x7FF GTW_carConfig, 5 mux tracker
|
//0x7FF GTW_carConfig, 5 mux tracker
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue