Improve CAN sending

This commit is contained in:
Daniel Öster 2025-09-30 13:52:43 +03:00
parent 380497ad04
commit 437f05525a
2 changed files with 46 additions and 0 deletions

View file

@ -206,6 +206,14 @@ void FordMachEBattery::transmit_can(unsigned long currentMillis) {
//TODO: handle FORD_4C properly very odd looping
counter_8_30ms = (counter_8_30ms + 1) % 8; // cycles 0-7 (8 values before wrap)
// Byte 6: counts up by 2 each step (0, 2, 4, 6, 8, 10, 12, 14)
FORD_200.data.u8[6] = counter_8_30ms * 2;
// Byte 7: counts down by 2 each step, maintaining byte6 + byte7 = 0x7F
FORD_200.data.u8[7] = 0x7F - (counter_8_30ms * 2);
transmit_can_frame(&FORD_77);
transmit_can_frame(&FORD_7D);
transmit_can_frame(&FORD_167);
@ -219,6 +227,8 @@ void FordMachEBattery::transmit_can(unsigned long currentMillis) {
transmit_can_frame(&FORD_7E);
transmit_can_frame(&FORD_48);
transmit_can_frame(&FORD_165);
transmit_can_frame(&FORD_7F);
transmit_can_frame(&FORD_200);
}
// Send 50ms CAN Message
if (currentMillis - previousMillis50 >= INTERVAL_50_MS) {
@ -243,6 +253,11 @@ void FordMachEBattery::transmit_can(unsigned long currentMillis) {
&FORD_5A); //This message actually has checksum/counter, but it seems to close contactors without those
transmit_can_frame(&FORD_166);
transmit_can_frame(&FORD_175);
transmit_can_frame(&FORD_178);
transmit_can_frame(&FORD_203);
transmit_can_frame(
&FORD_176); //This message actually has checksum/counter, but it seems to close contactors without those
transmit_can_frame(&FORD_185);
}
// Send 1s CAN Message
if (currentMillis - previousMillis1000 >= INTERVAL_1_S) {

View file

@ -34,6 +34,7 @@ class FordMachEBattery : public CanBattery {
uint16_t minimum_cellvoltage_mV = 3700;
uint8_t counter_30ms = 0;
uint8_t counter_8_30ms = 0;
CAN_frame FORD_47 = {.FD = false,
.ext_ID = false,
@ -70,6 +71,11 @@ class FordMachEBattery : public CanBattery {
.DLC = 8,
.ID = 0x07E,
.data = {0x00, 0x00, 0x3E, 0x80, 0x00, 0x04, 0x00, 0x00}};
CAN_frame FORD_7F = {.FD = false,
.ext_ID = false,
.DLC = 8,
.ID = 0x07F,
.data = {0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00}};
CAN_frame FORD_156 = {.FD = false,
.ext_ID = false,
.DLC = 8,
@ -95,11 +101,36 @@ class FordMachEBattery : public CanBattery {
.DLC = 8,
.ID = 0x175,
.data = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame FORD_176 = {.FD = false,
.ext_ID = false,
.DLC = 8,
.ID = 0x176,
.data = {0x00, 0x0E, 0xF0, 0x10, 0x00, 0x00, 0x00, 0x00}};
CAN_frame FORD_178 = {.FD = false, //Static content
.ext_ID = false,
.DLC = 8,
.ID = 0x175,
.data = {0x01, 0xB6, 0x02, 0x00, 0x4E, 0x46, 0xC6, 0x17}};
CAN_frame FORD_12F = {.FD = false,
.ext_ID = false,
.DLC = 8,
.ID = 0x12F,
.data = {0x0A, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}};
CAN_frame FORD_185 = {.FD = false,
.ext_ID = false,
.DLC = 8,
.ID = 0x185,
.data = {0x03, 0x4E, 0x75, 0x32, 0x00, 0x00, 0x00, 0x00}};
CAN_frame FORD_200 = {.FD = false,
.ext_ID = false,
.DLC = 8,
.ID = 0x200,
.data = {0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x70}};
CAN_frame FORD_203 = {.FD = false,
.ext_ID = false,
.DLC = 8,
.ID = 0x203,
.data = {0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame FORD_204 = {.FD = false,
.ext_ID = false,
.DLC = 8,