Merge pull request #1402 from jonny5532/feature/constexpr-can-messages-main

Add static constexpr to lots of static battery CAN_frames to save RAM
This commit is contained in:
Daniel Öster 2025-08-13 17:40:30 +03:00 committed by GitHub
commit c92a99590c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 618 additions and 571 deletions

View file

@ -137,11 +137,11 @@ class BmwI3Battery : public CanBattery {
.DLC = 8, .DLC = 8,
.ID = 0x13E, .ID = 0x13E,
.data = {0xFF, 0x31, 0xFA, 0xFA, 0xFA, 0xFA, 0x0C, 0x00}}; .data = {0xFF, 0x31, 0xFA, 0xFA, 0xFA, 0xFA, 0x0C, 0x00}};
CAN_frame BMW_192 = {.FD = false, static constexpr CAN_frame BMW_192 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x192, .ID = 0x192,
.data = {0xFF, 0xFF, 0xA3, 0x8F, 0x93, 0xFF, 0xFF, 0xFF}}; .data = {0xFF, 0xFF, 0xA3, 0x8F, 0x93, 0xFF, 0xFF, 0xFF}};
CAN_frame BMW_19B = {.FD = false, CAN_frame BMW_19B = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
@ -152,12 +152,12 @@ class BmwI3Battery : public CanBattery {
.DLC = 8, .DLC = 8,
.ID = 0x1D0, .ID = 0x1D0,
.data = {0x4D, 0xF0, 0xAE, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF}}; .data = {0x4D, 0xF0, 0xAE, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF}};
CAN_frame BMW_2CA = {.FD = false, .ext_ID = false, .DLC = 2, .ID = 0x2CA, .data = {0x57, 0x57}}; static constexpr CAN_frame BMW_2CA = {.FD = false, .ext_ID = false, .DLC = 2, .ID = 0x2CA, .data = {0x57, 0x57}};
CAN_frame BMW_2E2 = {.FD = false, static constexpr CAN_frame BMW_2E2 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x2E2, .ID = 0x2E2,
.data = {0x4F, 0xDB, 0x7F, 0xB9, 0x07, 0x51, 0xff, 0x00}}; .data = {0x4F, 0xDB, 0x7F, 0xB9, 0x07, 0x51, 0xff, 0x00}};
CAN_frame BMW_30B = {.FD = false, CAN_frame BMW_30B = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
@ -168,21 +168,21 @@ class BmwI3Battery : public CanBattery {
.DLC = 6, .DLC = 6,
.ID = 0x328, .ID = 0x328,
.data = {0xB0, 0xE4, 0x87, 0x0E, 0x30, 0x22}}; .data = {0xB0, 0xE4, 0x87, 0x0E, 0x30, 0x22}};
CAN_frame BMW_37B = {.FD = false, static constexpr CAN_frame BMW_37B = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 6, .DLC = 6,
.ID = 0x37B, .ID = 0x37B,
.data = {0x40, 0x00, 0x00, 0xFF, 0xFF, 0x00}}; .data = {0x40, 0x00, 0x00, 0xFF, 0xFF, 0x00}};
CAN_frame BMW_380 = {.FD = false, static constexpr CAN_frame BMW_380 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 7, .DLC = 7,
.ID = 0x380, .ID = 0x380,
.data = {0x56, 0x5A, 0x37, 0x39, 0x34, 0x34, 0x34}}; .data = {0x56, 0x5A, 0x37, 0x39, 0x34, 0x34, 0x34}};
CAN_frame BMW_3A0 = {.FD = false, static constexpr CAN_frame BMW_3A0 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x3A0, .ID = 0x3A0,
.data = {0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC}}; .data = {0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC}};
CAN_frame BMW_3A7 = {.FD = false, CAN_frame BMW_3A7 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 7, .DLC = 7,
@ -193,17 +193,17 @@ class BmwI3Battery : public CanBattery {
.DLC = 8, .DLC = 8,
.ID = 0x3C5, .ID = 0x3C5,
.data = {0x30, 0x05, 0x47, 0x70, 0x2c, 0xce, 0xc3, 0x34}}; .data = {0x30, 0x05, 0x47, 0x70, 0x2c, 0xce, 0xc3, 0x34}};
CAN_frame BMW_3CA = {.FD = false, static constexpr CAN_frame BMW_3CA = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x3CA, .ID = 0x3CA,
.data = {0x87, 0x80, 0x30, 0x0C, 0x0C, 0x81, 0xFF, 0xFF}}; .data = {0x87, 0x80, 0x30, 0x0C, 0x0C, 0x81, 0xFF, 0xFF}};
CAN_frame BMW_3D0 = {.FD = false, .ext_ID = false, .DLC = 2, .ID = 0x3D0, .data = {0xFD, 0xFF}}; static constexpr CAN_frame BMW_3D0 = {.FD = false, .ext_ID = false, .DLC = 2, .ID = 0x3D0, .data = {0xFD, 0xFF}};
CAN_frame BMW_3E4 = {.FD = false, static constexpr CAN_frame BMW_3E4 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 6, .DLC = 6,
.ID = 0x3E4, .ID = 0x3E4,
.data = {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF}}; .data = {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF}};
CAN_frame BMW_3E5 = {.FD = false, .ext_ID = false, .DLC = 3, .ID = 0x3E5, .data = {0xFC, 0xFF, 0xFF}}; CAN_frame BMW_3E5 = {.FD = false, .ext_ID = false, .DLC = 3, .ID = 0x3E5, .data = {0xFC, 0xFF, 0xFF}};
CAN_frame BMW_3E8 = {.FD = false, .ext_ID = false, .DLC = 2, .ID = 0x3E8, .data = {0xF0, 0xFF}}; //1000ms OBD reset CAN_frame BMW_3E8 = {.FD = false, .ext_ID = false, .DLC = 2, .ID = 0x3E8, .data = {0xF0, 0xFF}}; //1000ms OBD reset
CAN_frame BMW_3EC = {.FD = false, CAN_frame BMW_3EC = {.FD = false,
@ -216,66 +216,83 @@ class BmwI3Battery : public CanBattery {
.DLC = 8, .DLC = 8,
.ID = 0x3F9, .ID = 0x3F9,
.data = {0xA7, 0x2A, 0x00, 0xE2, 0xA6, 0x30, 0xC3, 0xFF}}; .data = {0xA7, 0x2A, 0x00, 0xE2, 0xA6, 0x30, 0xC3, 0xFF}};
CAN_frame BMW_3FB = {.FD = false, static constexpr CAN_frame BMW_3FB = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 6, .DLC = 6,
.ID = 0x3FB, .ID = 0x3FB,
.data = {0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0x00}}; .data = {0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0x00}};
CAN_frame BMW_3FC = {.FD = false, .ext_ID = false, .DLC = 3, .ID = 0x3FC, .data = {0xC0, 0xF9, 0x0F}}; CAN_frame BMW_3FC = {.FD = false, .ext_ID = false, .DLC = 3, .ID = 0x3FC, .data = {0xC0, 0xF9, 0x0F}};
CAN_frame BMW_418 = {.FD = false, static constexpr CAN_frame BMW_418 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x418, .ID = 0x418,
.data = {0xFF, 0x7C, 0xFF, 0x00, 0xC0, 0x3F, 0xFF, 0xFF}}; .data = {0xFF, 0x7C, 0xFF, 0x00, 0xC0, 0x3F, 0xFF, 0xFF}};
CAN_frame BMW_41D = {.FD = false, .ext_ID = false, .DLC = 4, .ID = 0x41D, .data = {0xFF, 0xF7, 0x7F, 0xFF}}; static constexpr CAN_frame BMW_41D = {.FD = false,
.ext_ID = false,
.DLC = 4,
.ID = 0x41D,
.data = {0xFF, 0xF7, 0x7F, 0xFF}};
CAN_frame BMW_433 = {.FD = false, CAN_frame BMW_433 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 4, .DLC = 4,
.ID = 0x433, .ID = 0x433,
.data = {0xFF, 0x00, 0x0F, 0xFF}}; // HV specification .data = {0xFF, 0x00, 0x0F, 0xFF}}; // HV specification
CAN_frame BMW_512 = {.FD = false, static constexpr CAN_frame BMW_512 = {
.ext_ID = false, .FD = false,
.DLC = 8, .ext_ID = false,
.ID = 0x512, .DLC = 8,
.data = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12}}; // 0x512 Network management .ID = 0x512,
CAN_frame BMW_592_0 = {.FD = false, .data = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12}}; // 0x512 Network management
.ext_ID = false, static constexpr CAN_frame BMW_592_0 = {.FD = false,
.DLC = 8, .ext_ID = false,
.ID = 0x592, .DLC = 8,
.data = {0x86, 0x10, 0x07, 0x21, 0x6e, 0x35, 0x5e, 0x86}}; .ID = 0x592,
CAN_frame BMW_592_1 = {.FD = false, .data = {0x86, 0x10, 0x07, 0x21, 0x6e, 0x35, 0x5e, 0x86}};
.ext_ID = false, static constexpr CAN_frame BMW_592_1 = {.FD = false,
.DLC = 8, .ext_ID = false,
.ID = 0x592, .DLC = 8,
.data = {0x86, 0x21, 0xb4, 0xdd, 0x00, 0x00, 0x00, 0x00}}; .ID = 0x592,
CAN_frame BMW_5F8 = {.FD = false, .data = {0x86, 0x21, 0xb4, 0xdd, 0x00, 0x00, 0x00, 0x00}};
.ext_ID = false, static constexpr CAN_frame BMW_5F8 = {.FD = false,
.DLC = 8,
.ID = 0x5F8,
.data = {0x64, 0x01, 0x00, 0x0B, 0x92, 0x03, 0x00, 0x05}};
CAN_frame BMW_6F1_CELL = {.FD = false,
.ext_ID = false,
.DLC = 5,
.ID = 0x6F1,
.data = {0x07, 0x03, 0x22, 0xDD, 0xBF}};
CAN_frame BMW_6F1_SOH = {.FD = false, .ext_ID = false, .DLC = 5, .ID = 0x6F1, .data = {0x07, 0x03, 0x22, 0x63, 0x35}};
CAN_frame BMW_6F1_SOC = {.FD = false, .ext_ID = false, .DLC = 5, .ID = 0x6F1, .data = {0x07, 0x03, 0x22, 0xDD, 0xBC}};
CAN_frame BMW_6F1_CELL_VOLTAGE_AVG = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 8,
.ID = 0x6F1, .ID = 0x5F8,
.data = {0x07, 0x03, 0x22, 0xDF, 0xA0}}; .data = {0x64, 0x01, 0x00, 0x0B, 0x92, 0x03, 0x00, 0x05}};
CAN_frame BMW_6F1_CONTINUE = {.FD = false, .ext_ID = false, .DLC = 4, .ID = 0x6F1, .data = {0x07, 0x30, 0x00, 0x02}}; static constexpr CAN_frame BMW_6F1_CELL = {.FD = false,
.ext_ID = false,
.DLC = 5,
.ID = 0x6F1,
.data = {0x07, 0x03, 0x22, 0xDD, 0xBF}};
static constexpr CAN_frame BMW_6F1_SOH = {.FD = false,
.ext_ID = false,
.DLC = 5,
.ID = 0x6F1,
.data = {0x07, 0x03, 0x22, 0x63, 0x35}};
static constexpr CAN_frame BMW_6F1_SOC = {.FD = false,
.ext_ID = false,
.DLC = 5,
.ID = 0x6F1,
.data = {0x07, 0x03, 0x22, 0xDD, 0xBC}};
static constexpr CAN_frame BMW_6F1_CELL_VOLTAGE_AVG = {.FD = false,
.ext_ID = false,
.DLC = 5,
.ID = 0x6F1,
.data = {0x07, 0x03, 0x22, 0xDF, 0xA0}};
static constexpr CAN_frame BMW_6F1_CONTINUE = {.FD = false,
.ext_ID = false,
.DLC = 4,
.ID = 0x6F1,
.data = {0x07, 0x30, 0x00, 0x02}};
CAN_frame BMW_6F4_CELL_VOLTAGE_CELLNO = {.FD = false, CAN_frame BMW_6F4_CELL_VOLTAGE_CELLNO = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 7, .DLC = 7,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x05, 0x31, 0x01, 0xAD, 0x6E, 0x01}}; .data = {0x07, 0x05, 0x31, 0x01, 0xAD, 0x6E, 0x01}};
CAN_frame BMW_6F4_CELL_CONTINUE = {.FD = false, static constexpr CAN_frame BMW_6F4_CELL_CONTINUE = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 6, .DLC = 6,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x04, 0x31, 0x03, 0xAD, 0x6E}}; .data = {0x07, 0x04, 0x31, 0x03, 0xAD, 0x6E}};
//The above CAN messages need to be sent towards the battery to keep it alive //The above CAN messages need to be sent towards the battery to keep it alive

View file

@ -150,7 +150,7 @@ TODO:
*/ */
//Vehicle CAN START //Vehicle CAN START
CAN_frame BMWiX_125 = { static constexpr CAN_frame BMWiX_125 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 20, .DLC = 20,
@ -178,14 +178,14 @@ CAN_frame BMWiX_12B8D087 = {.FD = true,
0x3A, // 0x3A to close contactors, 0x33 to open contactors 0x3A, // 0x3A to close contactors, 0x33 to open contactors
0xF7}}; // 0xF7 to close contactors, 0xF0 to open contactors // CCU output. 0xF7}}; // 0xF7 to close contactors, 0xF0 to open contactors // CCU output.
CAN_frame BMWiX_188 = { static constexpr CAN_frame BMWiX_188 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x188, .ID = 0x188,
.data = {0x00, 0x00, 0x00, 0x00, 0x3C, 0xFF, 0xFF, 0xFF}}; // CCU output - values while driving .data = {0x00, 0x00, 0x00, 0x00, 0x3C, 0xFF, 0xFF, 0xFF}}; // CCU output - values while driving
CAN_frame BMWiX_1EA = { static constexpr CAN_frame BMWiX_1EA = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
@ -193,7 +193,7 @@ CAN_frame BMWiX_12B8D087 = {.FD = true,
//.data = {TODO:km_least_significant, TODO:, TODO:, TODO:, TODO:km_most_significant, 0xFF, TODO:, TODO:} //.data = {TODO:km_least_significant, TODO:, TODO:, TODO:, TODO:km_most_significant, 0xFF, TODO:, TODO:}
}; // KOMBI output - kilometerstand }; // KOMBI output - kilometerstand
CAN_frame BMWiX_1FC = { static constexpr CAN_frame BMWiX_1FC = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
@ -201,7 +201,7 @@ CAN_frame BMWiX_12B8D087 = {.FD = true,
.data = {0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0xC0, .data = {0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0xC0,
0x00}}; // FIXME:(add transmitter node) output - heat management engine control - values 0x00}}; // FIXME:(add transmitter node) output - heat management engine control - values
CAN_frame BMWiX_21D = { static constexpr CAN_frame BMWiX_21D = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
@ -209,14 +209,15 @@ CAN_frame BMWiX_12B8D087 = {.FD = true,
// .data = {TODO:, TODO:, TODO:, 0xFF, 0xFF, 0xFF, 0xFF, TODO:} // .data = {TODO:, TODO:, TODO:, 0xFF, 0xFF, 0xFF, 0xFF, TODO:}
}; // FIXME:(add transmitter node) output - request heating and air conditioning system 1 }; // FIXME:(add transmitter node) output - request heating and air conditioning system 1
CAN_frame BMWiX_276 = {.FD = true, static constexpr CAN_frame BMWiX_276 = {
.ext_ID = false, .FD = true,
.DLC = 8, .ext_ID = false,
.ID = 0x276, .DLC = 8,
.data = {0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, .ID = 0x276,
0xFD}}; // BDC output - vehicle condition. Used for contactor closing .data = {0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF,
0xFD}}; // BDC output - vehicle condition. Used for contactor closing
CAN_frame BMWiX_2ED = { static constexpr CAN_frame BMWiX_2ED = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
@ -225,14 +226,14 @@ CAN_frame BMWiX_12B8D087 = {.FD = true,
0x75, 0x75,
0x75}}; // FIXME:(add transmitter node) output - ambient temperature (values seen in logs vary between 0x72 and 0x79) 0x75}}; // FIXME:(add transmitter node) output - ambient temperature (values seen in logs vary between 0x72 and 0x79)
CAN_frame BMWiX_2F1 = { static constexpr CAN_frame BMWiX_2F1 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x2F1, .ID = 0x2F1,
.data = {0xFF, 0xFF, 0xD0, 0x39, 0x94, 0x00, 0xF3, 0xFF}}; // 1000ms BDC output - values - varies at startup .data = {0xFF, 0xFF, 0xD0, 0x39, 0x94, 0x00, 0xF3, 0xFF}}; // 1000ms BDC output - values - varies at startup
CAN_frame BMWiX_340 = { static constexpr CAN_frame BMWiX_340 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 12, .DLC = 12,
@ -240,7 +241,7 @@ CAN_frame BMWiX_12B8D087 = {.FD = true,
// .data = {TODO:, TODO:, TODO:, 0xFF, TODO:, TODO:, 0x00, 0x00, TODO:, TODO:, TODO:, 0xFF, 0xFF, } // .data = {TODO:, TODO:, TODO:, 0xFF, TODO:, TODO:, 0x00, 0x00, TODO:, TODO:, TODO:, 0xFF, 0xFF, }
}; // CCU output }; // CCU output
CAN_frame BMWiX_380 = { static constexpr CAN_frame BMWiX_380 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 7, .DLC = 7,
@ -256,7 +257,7 @@ CAN_frame BMWiX_439 = {.FD = true,
.data = {0xFF, 0x3F, 0xFF, 0xF3}}; // 1000ms BDC output .data = {0xFF, 0x3F, 0xFF, 0xF3}}; // 1000ms BDC output
*/ */
CAN_frame BMWiX_442 = { static constexpr CAN_frame BMWiX_442 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 6, .DLC = 6,
@ -289,7 +290,7 @@ CAN_frame BMWiX_49C = {.FD = true,
0xFF}}; // 1000ms SME output - Suspected keep alive CONFIRM NEEDED 0xFF}}; // 1000ms SME output - Suspected keep alive CONFIRM NEEDED
*/ */
CAN_frame BMWiX_4EB = { static constexpr CAN_frame BMWiX_4EB = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
@ -297,7 +298,7 @@ CAN_frame BMWiX_49C = {.FD = true,
// .data = {TODO:, TODO:, TODO: 0xE0 or 0xE5 (while driving), 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} // .data = {TODO:, TODO:, TODO: 0xE0 or 0xE5 (while driving), 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}
}; // BDC output - RSU condition }; // BDC output - RSU condition
CAN_frame BMWiX_4F8 = { static constexpr CAN_frame BMWiX_4F8 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
@ -318,7 +319,7 @@ CAN_frame BMWiX_49C = {.FD = true,
0x01, 0x01,
0x00}}; // 100ms BDC output - Values change in car logs, these bytes are the most common. Used for contactor closing 0x00}}; // 100ms BDC output - Values change in car logs, these bytes are the most common. Used for contactor closing
CAN_frame BMWiX_6D = { static constexpr CAN_frame BMWiX_6D = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
@ -327,7 +328,7 @@ CAN_frame BMWiX_49C = {.FD = true,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0xFF}}; // 1000ms BDC output - [0] [1,2][3,4] counter x2. 3,4 is 9 higher than 1,2 is needed? [5-7] static 0xFF}}; // 1000ms BDC output - [0] [1,2][3,4] counter x2. 3,4 is 9 higher than 1,2 is needed? [5-7] static
CAN_frame BMWiX_C0 = { static constexpr CAN_frame BMWiX_C0 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 2, .DLC = 2,
@ -338,87 +339,91 @@ CAN_frame BMWiX_49C = {.FD = true,
//Vehicle CAN END //Vehicle CAN END
//Request Data CAN START //Request Data CAN START
CAN_frame BMWiX_6F4 = { static constexpr CAN_frame BMWiX_6F4 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x03, 0x22, 0xE5, 0xC7}}; // Generic UDS Request data from SME. byte 4 selects requested value .data = {0x07, 0x03, 0x22, 0xE5, 0xC7}}; // Generic UDS Request data from SME. byte 4 selects requested value
CAN_frame BMWiX_6F4_REQUEST_SLEEPMODE = { static constexpr CAN_frame BMWiX_6F4_REQUEST_SLEEPMODE = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 4, .DLC = 4,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x02, 0x11, 0x04}}; // UDS Request Request BMS/SME goes to Sleep Mode .data = {0x07, 0x02, 0x11, 0x04}}; // UDS Request Request BMS/SME goes to Sleep Mode
CAN_frame BMWiX_6F4_REQUEST_HARD_RESET = {.FD = true, static constexpr CAN_frame BMWiX_6F4_REQUEST_HARD_RESET = {
.ext_ID = false, .FD = true,
.DLC = 4, .ext_ID = false,
.ID = 0x6F4, .DLC = 4,
.data = {0x07, 0x02, 0x11, 0x01}}; // UDS Request Hard reset of BMS/SME .ID = 0x6F4,
CAN_frame BMWiX_6F4_REQUEST_CELL_TEMP = {.FD = true, .data = {0x07, 0x02, 0x11, 0x01}}; // UDS Request Hard reset of BMS/SME
.ext_ID = false, static constexpr CAN_frame BMWiX_6F4_REQUEST_CELL_TEMP = {
.DLC = 5, .FD = true,
.ID = 0x6F4, .ext_ID = false,
.data = {0x07, 0x03, 0x22, 0xDD, 0xC0}}; // UDS Request Cell Temperatures .DLC = 5,
CAN_frame BMWiX_6F4_REQUEST_SOC = {.FD = true, .ID = 0x6F4,
.ext_ID = false, .data = {0x07, 0x03, 0x22, 0xDD, 0xC0}}; // UDS Request Cell Temperatures
.DLC = 5, static constexpr CAN_frame BMWiX_6F4_REQUEST_SOC = {.FD = true,
.ID = 0x6F4, .ext_ID = false,
.data = {0x07, 0x03, 0x22, 0xE5, 0xCE}}; // Min/Avg/Max SOC% .DLC = 5,
CAN_frame BMWiX_6F4_REQUEST_CAPACITY = { .ID = 0x6F4,
.data = {0x07, 0x03, 0x22, 0xE5, 0xCE}}; // Min/Avg/Max SOC%
static constexpr CAN_frame BMWiX_6F4_REQUEST_CAPACITY = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x03, 0x22, 0xE5, .data = {0x07, 0x03, 0x22, 0xE5,
0xC7}}; //Current and max capacity kWh. Stored in kWh as 0.01 scale with -50 bias 0xC7}}; //Current and max capacity kWh. Stored in kWh as 0.01 scale with -50 bias
CAN_frame BMWiX_6F4_REQUEST_MINMAXCELLV = { static constexpr CAN_frame BMWiX_6F4_REQUEST_MINMAXCELLV = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x03, 0x22, 0xE5, 0x53}}; //Min and max cell voltage 10V = Qualifier Invalid .data = {0x07, 0x03, 0x22, 0xE5, 0x53}}; //Min and max cell voltage 10V = Qualifier Invalid
CAN_frame BMWiX_6F4_REQUEST_MAINVOLTAGE_POSTCONTACTOR = { static constexpr CAN_frame BMWiX_6F4_REQUEST_MAINVOLTAGE_POSTCONTACTOR = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x03, 0x22, 0xE5, 0x4A}}; //Main Battery Voltage (After Contactor) .data = {0x07, 0x03, 0x22, 0xE5, 0x4A}}; //Main Battery Voltage (After Contactor)
CAN_frame BMWiX_6F4_REQUEST_MAINVOLTAGE_PRECONTACTOR = { static constexpr CAN_frame BMWiX_6F4_REQUEST_MAINVOLTAGE_PRECONTACTOR = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x03, 0x22, 0xE5, 0x4D}}; //Main Battery Voltage (Pre Contactor) .data = {0x07, 0x03, 0x22, 0xE5, 0x4D}}; //Main Battery Voltage (Pre Contactor)
CAN_frame BMWiX_6F4_REQUEST_BATTERYCURRENT = { static constexpr CAN_frame BMWiX_6F4_REQUEST_BATTERYCURRENT = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x03, 0x22, 0xE5, 0x61}}; //Current amps 32bit signed MSB. dA . negative is discharge .data = {0x07, 0x03, 0x22, 0xE5, 0x61}}; //Current amps 32bit signed MSB. dA . negative is discharge
CAN_frame BMWiX_6F4_REQUEST_CELL_VOLTAGE = { static constexpr CAN_frame BMWiX_6F4_REQUEST_CELL_VOLTAGE = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x03, 0x22, 0xE5, 0x54}}; //MultiFrameIndividual Cell Voltages .data = {0x07, 0x03, 0x22, 0xE5, 0x54}}; //MultiFrameIndividual Cell Voltages
CAN_frame BMWiX_6F4_REQUEST_T30VOLTAGE = { static constexpr CAN_frame BMWiX_6F4_REQUEST_T30VOLTAGE = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x03, 0x22, 0xE5, 0xA7}}; //Terminal 30 Voltage (12V SME supply) .data = {0x07, 0x03, 0x22, 0xE5, 0xA7}}; //Terminal 30 Voltage (12V SME supply)
CAN_frame BMWiX_6F4_REQUEST_EOL_ISO = {.FD = true, static constexpr CAN_frame BMWiX_6F4_REQUEST_EOL_ISO = {
.ext_ID = false, .FD = true,
.DLC = 5, .ext_ID = false,
.ID = 0x6F4, .DLC = 5,
.data = {0x07, 0x03, 0x22, 0xA8, 0x60}}; //Request EOL Reading including ISO .ID = 0x6F4,
CAN_frame BMWiX_6F4_REQUEST_SOH = {.FD = true, .data = {0x07, 0x03, 0x22, 0xA8, 0x60}}; //Request EOL Reading including ISO
.ext_ID = false, static constexpr CAN_frame BMWiX_6F4_REQUEST_SOH = {
.DLC = 5, .FD = true,
.ID = 0x6F4, .ext_ID = false,
.data = {0x07, 0x03, 0x22, 0xE5, 0x45}}; //SOH Max Min Mean Request .DLC = 5,
CAN_frame BMWiX_6F4_REQUEST_DATASUMMARY = { .ID = 0x6F4,
.data = {0x07, 0x03, 0x22, 0xE5, 0x45}}; //SOH Max Min Mean Request
static constexpr CAN_frame BMWiX_6F4_REQUEST_DATASUMMARY = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
@ -426,106 +431,108 @@ CAN_frame BMWiX_49C = {.FD = true,
.data = { .data = {
0x07, 0x03, 0x22, 0xE5, 0x07, 0x03, 0x22, 0xE5,
0x45}}; //MultiFrame Summary Request, includes SOC/SOH/MinMax/MaxCapac/RemainCapac/max v and t at last charge. slow refreshrate 0x45}}; //MultiFrame Summary Request, includes SOC/SOH/MinMax/MaxCapac/RemainCapac/max v and t at last charge. slow refreshrate
CAN_frame BMWiX_6F4_REQUEST_PYRO = {.FD = true, static constexpr CAN_frame BMWiX_6F4_REQUEST_PYRO = {.FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x03, 0x22, 0xAC, 0x93}}; //Pyro Status .data = {0x07, 0x03, 0x22, 0xAC, 0x93}}; //Pyro Status
CAN_frame BMWiX_6F4_REQUEST_UPTIME = {.FD = true, static constexpr CAN_frame BMWiX_6F4_REQUEST_UPTIME = {
.ext_ID = false, .FD = true,
.DLC = 5, .ext_ID = false,
.ID = 0x6F4, .DLC = 5,
.data = {0x07, 0x03, 0x22, 0xE4, 0xC0}}; // Uptime and Vehicle Time Status .ID = 0x6F4,
CAN_frame BMWiX_6F4_REQUEST_HVIL = {.FD = true, .data = {0x07, 0x03, 0x22, 0xE4, 0xC0}}; // Uptime and Vehicle Time Status
.ext_ID = false, static constexpr CAN_frame BMWiX_6F4_REQUEST_HVIL = {.FD = true,
.DLC = 5, .ext_ID = false,
.ID = 0x6F4, .DLC = 5,
.data = {0x07, 0x03, 0x22, 0xE5, 0x69}}; // Request HVIL State .ID = 0x6F4,
CAN_frame BMWiX_6F4_REQUEST_BALANCINGSTATUS = {.FD = true, .data = {0x07, 0x03, 0x22, 0xE5, 0x69}}; // Request HVIL State
.ext_ID = false, static constexpr CAN_frame BMWiX_6F4_REQUEST_BALANCINGSTATUS = {
.DLC = 5, .FD = true,
.ID = 0x6F4, .ext_ID = false,
.data = {0x07, 0x03, 0x22, 0xE4, 0xCA}}; // Request Balancing Data .DLC = 5,
CAN_frame BMWiX_6F4_REQUEST_MAX_CHARGE_DISCHARGE_AMPS = { .ID = 0x6F4,
.data = {0x07, 0x03, 0x22, 0xE4, 0xCA}}; // Request Balancing Data
static constexpr CAN_frame BMWiX_6F4_REQUEST_MAX_CHARGE_DISCHARGE_AMPS = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x03, 0x22, 0xE5, 0x62}}; // Request allowable charge discharge amps .data = {0x07, 0x03, 0x22, 0xE5, 0x62}}; // Request allowable charge discharge amps
CAN_frame BMWiX_6F4_REQUEST_VOLTAGE_QUALIFIER_CHECK = { static constexpr CAN_frame BMWiX_6F4_REQUEST_VOLTAGE_QUALIFIER_CHECK = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x03, 0x22, 0xE5, 0x4B}}; // Request HV Voltage Qualifier .data = {0x07, 0x03, 0x22, 0xE5, 0x4B}}; // Request HV Voltage Qualifier
CAN_frame BMWiX_6F4_REQUEST_CONTACTORS_CLOSE = { static constexpr CAN_frame BMWiX_6F4_REQUEST_CONTACTORS_CLOSE = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 6, .DLC = 6,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x03, 0x22, 0xE5, 0x51, 0x01}}; // Request Contactors Close - Unconfirmed .data = {0x07, 0x03, 0x22, 0xE5, 0x51, 0x01}}; // Request Contactors Close - Unconfirmed
CAN_frame BMWiX_6F4_REQUEST_CONTACTORS_OPEN = { static constexpr CAN_frame BMWiX_6F4_REQUEST_CONTACTORS_OPEN = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 6, .DLC = 6,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x03, 0x22, 0xE5, 0x51, 0x01}}; // Request Contactors Open - Unconfirmed .data = {0x07, 0x03, 0x22, 0xE5, 0x51, 0x01}}; // Request Contactors Open - Unconfirmed
CAN_frame BMWiX_6F4_REQUEST_BALANCING_START = { static constexpr CAN_frame BMWiX_6F4_REQUEST_BALANCING_START = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 6, .DLC = 6,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0xF4, 0x04, 0x71, 0x01, 0xAE, 0x77}}; // Request Balancing command? .data = {0xF4, 0x04, 0x71, 0x01, 0xAE, 0x77}}; // Request Balancing command?
CAN_frame BMWiX_6F4_REQUEST_BALANCING_START2 = { static constexpr CAN_frame BMWiX_6F4_REQUEST_BALANCING_START2 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 6, .DLC = 6,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0xF4, 0x04, 0x31, 0x01, 0xAE, 0x77}}; // Request Balancing command? .data = {0xF4, 0x04, 0x31, 0x01, 0xAE, 0x77}}; // Request Balancing command?
CAN_frame BMWiX_6F4_REQUEST_PACK_VOLTAGE_LIMITS = { static constexpr CAN_frame BMWiX_6F4_REQUEST_PACK_VOLTAGE_LIMITS = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x03, 0x22, 0xE5, 0x4C}}; // Request pack voltage limits .data = {0x07, 0x03, 0x22, 0xE5, 0x4C}}; // Request pack voltage limits
CAN_frame BMWiX_6F4_CONTINUE_DATA = {.FD = true, static constexpr CAN_frame BMWiX_6F4_CONTINUE_DATA = {.FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 4, .DLC = 4,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x30, 0x00, 0x02}}; .data = {0x07, 0x30, 0x00, 0x02}};
//Action Requests: //Action Requests:
CAN_frame BMWiX_6F4_CELL_SOC = {.FD = true, static constexpr CAN_frame BMWiX_6F4_CELL_SOC = {.FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x03, 0x22, 0xE5, 0x9A}}; .data = {0x07, 0x03, 0x22, 0xE5, 0x9A}};
CAN_frame BMWiX_6F4_CELL_TEMP = {.FD = true, static constexpr CAN_frame BMWiX_6F4_CELL_TEMP = {.FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
.ID = 0x6F4, .ID = 0x6F4,
.data = {0x07, 0x03, 0x22, 0xE5, 0xCA}}; .data = {0x07, 0x03, 0x22, 0xE5, 0xCA}};
//Request Data CAN End //Request Data CAN End
//Setup UDS values to poll for //Setup UDS values to poll for
CAN_frame* UDS_REQUESTS100MS[17] = {&BMWiX_6F4_REQUEST_CELL_TEMP, static constexpr const CAN_frame* UDS_REQUESTS100MS[17] = {&BMWiX_6F4_REQUEST_CELL_TEMP,
&BMWiX_6F4_REQUEST_SOC, &BMWiX_6F4_REQUEST_SOC,
&BMWiX_6F4_REQUEST_CAPACITY, &BMWiX_6F4_REQUEST_CAPACITY,
&BMWiX_6F4_REQUEST_MINMAXCELLV, &BMWiX_6F4_REQUEST_MINMAXCELLV,
&BMWiX_6F4_REQUEST_MAINVOLTAGE_POSTCONTACTOR, &BMWiX_6F4_REQUEST_MAINVOLTAGE_POSTCONTACTOR,
&BMWiX_6F4_REQUEST_MAINVOLTAGE_PRECONTACTOR, &BMWiX_6F4_REQUEST_MAINVOLTAGE_PRECONTACTOR,
&BMWiX_6F4_REQUEST_BATTERYCURRENT, &BMWiX_6F4_REQUEST_BATTERYCURRENT,
&BMWiX_6F4_REQUEST_CELL_VOLTAGE, &BMWiX_6F4_REQUEST_CELL_VOLTAGE,
&BMWiX_6F4_REQUEST_T30VOLTAGE, &BMWiX_6F4_REQUEST_T30VOLTAGE,
&BMWiX_6F4_REQUEST_SOH, &BMWiX_6F4_REQUEST_SOH,
&BMWiX_6F4_REQUEST_UPTIME, &BMWiX_6F4_REQUEST_UPTIME,
&BMWiX_6F4_REQUEST_PYRO, &BMWiX_6F4_REQUEST_PYRO,
&BMWiX_6F4_REQUEST_EOL_ISO, &BMWiX_6F4_REQUEST_EOL_ISO,
&BMWiX_6F4_REQUEST_HVIL, &BMWiX_6F4_REQUEST_HVIL,
&BMWiX_6F4_REQUEST_MAX_CHARGE_DISCHARGE_AMPS, &BMWiX_6F4_REQUEST_MAX_CHARGE_DISCHARGE_AMPS,
&BMWiX_6F4_REQUEST_BALANCINGSTATUS, &BMWiX_6F4_REQUEST_BALANCINGSTATUS,
&BMWiX_6F4_REQUEST_PACK_VOLTAGE_LIMITS}; &BMWiX_6F4_REQUEST_PACK_VOLTAGE_LIMITS};
int numUDSreqs = sizeof(UDS_REQUESTS100MS) / sizeof(UDS_REQUESTS100MS[0]); // Number of elements in the array int numUDSreqs = sizeof(UDS_REQUESTS100MS) / sizeof(UDS_REQUESTS100MS[0]); // Number of elements in the array
//iX Intermediate vars //iX Intermediate vars

View file

@ -34,7 +34,7 @@ class CanBattery : public Battery, Transmitter, CanReceiver {
CAN_Speed change_can_speed(CAN_Speed speed); CAN_Speed change_can_speed(CAN_Speed speed);
void transmit_can_frame(CAN_frame* frame) { transmit_can_frame_to_interface(frame, can_interface); } void transmit_can_frame(const CAN_frame* frame) { transmit_can_frame_to_interface(frame, can_interface); }
}; };
#endif #endif

View file

@ -220,12 +220,13 @@ class EcmpBattery : public CanBattery {
uint16_t incoming_poll = 0; uint16_t incoming_poll = 0;
CAN_frame ECMP_010 = {.FD = false, .ext_ID = false, .DLC = 1, .ID = 0x010, .data = {0xB4}}; //VCU_BCM_Crash 100ms CAN_frame ECMP_010 = {.FD = false, .ext_ID = false, .DLC = 1, .ID = 0x010, .data = {0xB4}}; //VCU_BCM_Crash 100ms
CAN_frame ECMP_041 = {.FD = false, .ext_ID = false, .DLC = 1, .ID = 0x041, .data = {0x00}}; static constexpr CAN_frame ECMP_041 = {.FD = false, .ext_ID = false, .DLC = 1, .ID = 0x041, .data = {0x00}};
CAN_frame ECMP_0A6 = {.FD = false, static constexpr CAN_frame ECMP_0A6 = {
.ext_ID = false, .FD = false,
.DLC = 2, .ext_ID = false,
.ID = 0x0A6, .DLC = 2,
.data = {0x02, 0x00}}; //Content changes after 12minutes of runtime (not emulated) .ID = 0x0A6,
.data = {0x02, 0x00}}; //Content changes after 12minutes of runtime (not emulated)
CAN_frame ECMP_0F0 = {.FD = false, //VCU2_0F0 (Common) 20ms periodic (Perfectly emulated in Battery-Emulator) CAN_frame ECMP_0F0 = {.FD = false, //VCU2_0F0 (Common) 20ms periodic (Perfectly emulated in Battery-Emulator)
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
@ -236,42 +237,46 @@ class EcmpBattery : public CanBattery {
.DLC = 8, .DLC = 8,
.ID = 0x0F2, .ID = 0x0F2,
.data = {0x7D, 0x00, 0x4E, 0x20, 0x00, 0x00, 0x60, 0x0D}}; .data = {0x7D, 0x00, 0x4E, 0x20, 0x00, 0x00, 0x60, 0x0D}};
CAN_frame ECMP_0AE = {.FD = false, .ext_ID = false, .DLC = 5, .ID = 0x0AE, .data = {0x04, 0x77, 0x7A, 0x5E, 0xDF}}; static constexpr CAN_frame ECMP_0AE = {.FD = false,
.ext_ID = false,
.DLC = 5,
.ID = 0x0AE,
.data = {0x04, 0x77, 0x7A, 0x5E, 0xDF}};
CAN_frame ECMP_110 = {.FD = false, //??? 10ms periodic (Perfectly emulated in Battery-Emulator) CAN_frame ECMP_110 = {.FD = false, //??? 10ms periodic (Perfectly emulated in Battery-Emulator)
.ext_ID = false, // NOTE. Changes on BMS state .ext_ID = false, // NOTE. Changes on BMS state
.DLC = 8, .DLC = 8,
.ID = 0x110, .ID = 0x110,
.data = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x87, 0x05}}; .data = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x87, 0x05}};
CAN_frame ECMP_111 = {.FD = false, //??? 10ms periodic (Perfectly emulated in Battery-Emulator) static constexpr CAN_frame ECMP_111 = {.FD = false, //??? 10ms periodic (Perfectly emulated in Battery-Emulator)
.ext_ID = false, //Same content always, fully static .ext_ID = false, //Same content always, fully static
.DLC = 8, .DLC = 8,
.ID = 0x111, .ID = 0x111,
.data = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; .data = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame ECMP_112 = {.FD = false, //MCU1_112 10ms periodic (Perfectly emulated in Battery-Emulator) CAN_frame ECMP_112 = {.FD = false, //MCU1_112 10ms periodic (Perfectly emulated in Battery-Emulator)
.ext_ID = false, //Same content always, only CRC changes at end .ext_ID = false, //Same content always, only CRC changes at end
.DLC = 8, .DLC = 8,
.ID = 0x112, .ID = 0x112,
.data = {0x4E, 0x20, 0x00, 0x0F, 0xA0, 0x7D, 0x00, 0x0A}}; .data = {0x4E, 0x20, 0x00, 0x0F, 0xA0, 0x7D, 0x00, 0x0A}};
CAN_frame ECMP_114 = {.FD = false, //??? 10ms periodic (Perfectly emulated in Battery-Emulator) static constexpr CAN_frame ECMP_114 = {.FD = false, //??? 10ms periodic (Perfectly emulated in Battery-Emulator)
.ext_ID = false, //Same content always, fully static .ext_ID = false, //Same content always, fully static
.DLC = 8, .DLC = 8,
.ID = 0x114, .ID = 0x114,
.data = {0x00, 0x00, 0x00, 0x7D, 0x07, 0xD0, 0x7D, 0x00}}; .data = {0x00, 0x00, 0x00, 0x7D, 0x07, 0xD0, 0x7D, 0x00}};
CAN_frame ECMP_0C5 = {.FD = false, //DC2_0C5 10ms periodic (Perfectly emulated in Battery-Emulator) static constexpr CAN_frame ECMP_0C5 = {.FD = false, //DC2_0C5 10ms periodic (Perfectly emulated in Battery-Emulator)
.ext_ID = false, //Same content always, fully static .ext_ID = false, //Same content always, fully static
.DLC = 8, .DLC = 8,
.ID = 0x0C5, .ID = 0x0C5,
.data = {0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00}}; .data = {0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00}};
CAN_frame ECMP_17B = {.FD = false, //VCU_PCANInfo_17B 10ms periodic (Perfectly emulated in Battery-Emulator) CAN_frame ECMP_17B = {.FD = false, //VCU_PCANInfo_17B 10ms periodic (Perfectly emulated in Battery-Emulator)
.ext_ID = false, // NOTE. Changes on BMS state .ext_ID = false, // NOTE. Changes on BMS state
.DLC = 8, .DLC = 8,
.ID = 0x17B, .ID = 0x17B,
.data = {0x00, 0x00, 0x00, 0x7E, 0x78, 0x00, 0x00, 0x0F}}; // NOTE. Changes on BMS state .data = {0x00, 0x00, 0x00, 0x7E, 0x78, 0x00, 0x00, 0x0F}}; // NOTE. Changes on BMS state
CAN_frame ECMP_230 = {.FD = false, //OBC3_230 50ms periodic (Perfectly emulated in Battery-Emulator) static constexpr CAN_frame ECMP_230 = {.FD = false, //OBC3_230 50ms periodic (Perfectly emulated in Battery-Emulator)
.ext_ID = false, //Same content always, fully static .ext_ID = false, //Same content always, fully static
.DLC = 8, .DLC = 8,
.ID = 0x230, .ID = 0x230,
.data = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; .data = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame ECMP_27A = { CAN_frame ECMP_27A = {
.FD = false, //VCU_BSI_Wakeup_27A message 50ms periodic (Perfectly emulated in Battery-Emulator) .FD = false, //VCU_BSI_Wakeup_27A message 50ms periodic (Perfectly emulated in Battery-Emulator)
.ext_ID = false, // NOTE. Changes on BMS state .ext_ID = false, // NOTE. Changes on BMS state
@ -308,12 +313,13 @@ class EcmpBattery : public CanBattery {
.DLC = 8, .DLC = 8,
.ID = 0x372, .ID = 0x372,
.data = {0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; // NOTE. Changes on BMS state .data = {0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; // NOTE. Changes on BMS state
CAN_frame ECMP_37F = {.FD = false, //??? 100ms periodic (Perfectly emulated in Battery-Emulator) static constexpr CAN_frame ECMP_37F = {
.ext_ID = false, // Seems to be a bunch of temperature measurements? Static for now .FD = false, //??? 100ms periodic (Perfectly emulated in Battery-Emulator)
.DLC = 8, .ext_ID = false, // Seems to be a bunch of temperature measurements? Static for now
.ID = 0x37F, .DLC = 8,
.data = {0x45, 0x49, 0x51, 0x45, 0x45, 0x00, 0x45, 0x45}}; .ID = 0x37F,
CAN_frame ECMP_382 = { .data = {0x45, 0x49, 0x51, 0x45, 0x45, 0x00, 0x45, 0x45}};
static constexpr CAN_frame ECMP_382 = {
//BSIInfo_382 (VCU) PSA specific 100ms periodic (Perfectly emulated in Battery-Emulator) //BSIInfo_382 (VCU) PSA specific 100ms periodic (Perfectly emulated in Battery-Emulator)
.FD = false, //Same content always, fully static .FD = false, //Same content always, fully static
.ext_ID = false, .ext_ID = false,
@ -335,11 +341,11 @@ class EcmpBattery : public CanBattery {
.DLC = 8, .DLC = 8,
.ID = 0x3A3, .ID = 0x3A3,
.data = {0x4A, 0x4A, 0x40, 0x00, 0x00, 0x08, 0x00, 0x0F}}; .data = {0x4A, 0x4A, 0x40, 0x00, 0x00, 0x08, 0x00, 0x0F}};
CAN_frame ECMP_439 = {.FD = false, //OBC4 1s periodic (Perfectly emulated in Battery-Emulator) static constexpr CAN_frame ECMP_439 = {.FD = false, //OBC4 1s periodic (Perfectly emulated in Battery-Emulator)
.ext_ID = false, //Same content always, fully static .ext_ID = false, //Same content always, fully static
.DLC = 8, .DLC = 8,
.ID = 0x439, .ID = 0x439,
.data = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; .data = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame ECMP_486 = {.FD = false, //??? 1s periodic (Perfectly emulated in Battery-Emulator) CAN_frame ECMP_486 = {.FD = false, //??? 1s periodic (Perfectly emulated in Battery-Emulator)
.ext_ID = false, // NOTE. Changes on BMS state .ext_ID = false, // NOTE. Changes on BMS state
.DLC = 8, .DLC = 8,
@ -350,76 +356,88 @@ class EcmpBattery : public CanBattery {
.DLC = 8, //552 seems to be tracking time in byte 0-3 .DLC = 8, //552 seems to be tracking time in byte 0-3
.ID = 0x552, // distance in km in byte 4-6, temporal reset counter in byte 7 .ID = 0x552, // distance in km in byte 4-6, temporal reset counter in byte 7
.data = {0x00, 0x02, 0x95, 0x6D, 0x00, 0xD7, 0xB5, 0xFE}}; .data = {0x00, 0x02, 0x95, 0x6D, 0x00, 0xD7, 0xB5, 0xFE}};
CAN_frame ECMP_55F = {.FD = false, //5s periodic (Perfectly emulated in Battery-Emulator) static constexpr CAN_frame ECMP_55F = {.FD = false, //5s periodic (Perfectly emulated in Battery-Emulator)
.ext_ID = false, //Same content always, fully static .ext_ID = false, //Same content always, fully static
.DLC = 1, .DLC = 1,
.ID = 0x55F, .ID = 0x55F,
.data = {0x82}}; .data = {0x82}};
CAN_frame ECMP_591 = {.FD = false, //1s periodic static constexpr CAN_frame ECMP_591 = {.FD = false, //1s periodic
.ext_ID = false, //Always static in HV mode .ext_ID = false, //Always static in HV mode
.DLC = 8, .DLC = 8,
.ID = 0x591, .ID = 0x591,
.data = {0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}; .data = {0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}};
CAN_frame ECMP_786 = {.FD = false, //1s periodic static constexpr CAN_frame ECMP_786 = {.FD = false, //1s periodic
.ext_ID = false, //Always static in HV mode .ext_ID = false, //Always static in HV mode
.DLC = 8, .DLC = 8,
.ID = 0x786, .ID = 0x786,
.data = {0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}; .data = {0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}};
CAN_frame ECMP_794 = {.FD = false, //Unsure who sends this. Could it be BMU? CAN_frame ECMP_794 = {.FD = false, //Unsure who sends this. Could it be BMU?
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x794, .ID = 0x794,
.data = {0xB8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}; // NOTE. Changes on BMS state .data = {0xB8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}; // NOTE. Changes on BMS state
CAN_frame ECMP_POLL = {.FD = false, .ext_ID = false, .DLC = 4, .ID = 0x6B4, .data = {0x03, 0x22, 0xD8, 0x66}}; CAN_frame ECMP_POLL = {.FD = false, .ext_ID = false, .DLC = 4, .ID = 0x6B4, .data = {0x03, 0x22, 0xD8, 0x66}};
CAN_frame ECMP_ACK = {.FD = false, //Ack frame static constexpr CAN_frame ECMP_ACK = {.FD = false, //Ack frame
.ext_ID = false, .ext_ID = false,
.DLC = 3, .DLC = 3,
.ID = 0x6B4, .ID = 0x6B4,
.data = {0x30, 0x00, 0x00}}; .data = {0x30, 0x00, 0x00}};
CAN_frame ECMP_DIAG_START = {.FD = false, .ext_ID = false, .DLC = 3, .ID = 0x6B4, .data = {0x02, 0x10, 0x03}}; static constexpr CAN_frame ECMP_DIAG_START = {.FD = false,
.ext_ID = false,
.DLC = 3,
.ID = 0x6B4,
.data = {0x02, 0x10, 0x03}};
//Start diagnostic session (extended diagnostic session, mode 0x10 with sub-mode 0x03) //Start diagnostic session (extended diagnostic session, mode 0x10 with sub-mode 0x03)
CAN_frame ECMP_CONTACTOR_RESET_START = {.FD = false, static constexpr CAN_frame ECMP_CONTACTOR_RESET_START = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
.ID = 0x6B4, .ID = 0x6B4,
.data = {0x04, 0x31, 0x01, 0xDD, 0x35}}; .data = {0x04, 0x31, 0x01, 0xDD, 0x35}};
CAN_frame ECMP_CONTACTOR_RESET_PROGRESS = {.FD = false, static constexpr CAN_frame ECMP_CONTACTOR_RESET_PROGRESS = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
.ID = 0x6B4, .ID = 0x6B4,
.data = {0x04, 0x31, 0x03, 0xDD, 0x35}}; .data = {0x04, 0x31, 0x03, 0xDD, 0x35}};
CAN_frame ECMP_COLLISION_RESET_START = {.FD = false, static constexpr CAN_frame ECMP_COLLISION_RESET_START = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
.ID = 0x6B4, .ID = 0x6B4,
.data = {0x04, 0x31, 0x01, 0xDF, 0x60}}; .data = {0x04, 0x31, 0x01, 0xDF, 0x60}};
CAN_frame ECMP_COLLISION_RESET_PROGRESS = {.FD = false, static constexpr CAN_frame ECMP_COLLISION_RESET_PROGRESS = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
.ID = 0x6B4, .ID = 0x6B4,
.data = {0x04, 0x31, 0x03, 0xDF, 0x60}}; .data = {0x04, 0x31, 0x03, 0xDF, 0x60}};
CAN_frame ECMP_ISOLATION_RESET_START = {.FD = false, static constexpr CAN_frame ECMP_ISOLATION_RESET_START = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 5, .DLC = 5,
.ID = 0x6B4, .ID = 0x6B4,
.data = {0x04, 0x31, 0x01, 0xDF, 0x46}}; .data = {0x04, 0x31, 0x01, 0xDF, 0x46}};
CAN_frame ECMP_ISOLATION_RESET_PROGRESS = {.FD = false, static constexpr CAN_frame ECMP_ISOLATION_RESET_PROGRESS = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x6B4, .ID = 0x6B4,
.data = {0x04, 0x31, 0x03, 0xDF, 0x46}}; .data = {0x04, 0x31, 0x03, 0xDF, 0x46}};
CAN_frame ECMP_RESET_DONE = {.FD = false, .ext_ID = false, .DLC = 3, .ID = 0x6B4, .data = {0x02, 0x3E, 0x00}}; static constexpr CAN_frame ECMP_RESET_DONE = {.FD = false,
CAN_frame ECMP_FACTORY_MODE_ACTIVATION = {.FD = false, .ext_ID = false,
.ext_ID = false, .DLC = 3,
.DLC = 5, .ID = 0x6B4,
.ID = 0x6B4, .data = {0x02, 0x3E, 0x00}};
.data = {0x04, 0x2E, 0xD9, 0x00, 0x01}}; static constexpr CAN_frame ECMP_FACTORY_MODE_ACTIVATION = {.FD = false,
CAN_frame ECMP_DISABLE_ISOLATION_REQ = {.FD = false, .ext_ID = false,
.ext_ID = false, .DLC = 5,
.DLC = 5, .ID = 0x6B4,
.ID = 0x6B4, .data = {0x04, 0x2E, 0xD9, 0x00, 0x01}};
.data = {0x04, 0x31, 0x02, 0xDF, 0xE1}}; static constexpr CAN_frame ECMP_DISABLE_ISOLATION_REQ = {.FD = false,
CAN_frame ECMP_ACK_MESSAGE = {.FD = false, .ext_ID = false, .DLC = 3, .ID = 0x6B4, .data = {0x02, 0x3E, 0x00}}; .ext_ID = false,
.DLC = 5,
.ID = 0x6B4,
.data = {0x04, 0x31, 0x02, 0xDF, 0xE1}};
static constexpr 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_010_CRC[8] = {0xB4, 0x96, 0x78, 0x5A, 0x3C, 0x1E, 0xF0, 0xD2};
uint8_t data_3A2_CRC[16] = {0x0C, 0x1B, 0x2A, 0x39, 0x48, 0x57, uint8_t data_3A2_CRC[16] = {0x0C, 0x1B, 0x2A, 0x39, 0x48, 0x57,
0x66, 0x75, 0x84, 0x93, 0xA2, 0xB1}; // NOTE. Changes on BMS state 0x66, 0x75, 0x84, 0x93, 0xA2, 0xB1}; // NOTE. Changes on BMS state

View file

@ -128,7 +128,7 @@ uint8_t messageDelays[63] = {0, 0, 5, 10, 10, 15, 19, 19, 20, 20, 2
45, 49, 49, 50, 50, 52, 53, 53, 54, 55, 60, 60, 65, 67, 67, 70, 45, 49, 49, 50, 50, 52, 53, 53, 54, 55, 60, 60, 65, 67, 67, 70,
70, 75, 77, 77, 80, 80, 85, 90, 90, 95, 100, 100, 105, 110, 110, 115, 70, 75, 77, 77, 80, 80, 85, 90, 90, 95, 100, 100, 105, 110, 110, 115,
119, 119, 120, 120, 125, 130, 130, 135, 140, 140, 145, 149, 149, 150, 150}; 119, 119, 120, 120, 125, 130, 130, 135, 140, 140, 145, 149, 149, 150, 150};
CAN_frame message_1 = { static constexpr CAN_frame message_1 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -136,7 +136,7 @@ CAN_frame message_1 = {
.data = {0x62, 0x36, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35, .data = {0x62, 0x36, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35,
0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_2 = { static constexpr CAN_frame message_2 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -144,7 +144,7 @@ CAN_frame message_2 = {
.data = {0xd4, 0x1b, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37, .data = {0xd4, 0x1b, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37,
0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_3 = { static constexpr CAN_frame message_3 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -152,7 +152,7 @@ CAN_frame message_3 = {
.data = {0x24, 0x9b, 0x7b, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52, .data = {0x24, 0x9b, 0x7b, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52,
0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}}; 0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}};
CAN_frame message_4 = { static constexpr CAN_frame message_4 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -160,7 +160,7 @@ CAN_frame message_4 = {
.data = {0x24, 0x6f, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35, .data = {0x24, 0x6f, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35,
0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_5 = { static constexpr CAN_frame message_5 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -168,7 +168,7 @@ CAN_frame message_5 = {
.data = {0x92, 0x42, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37, .data = {0x92, 0x42, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37,
0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_6 = { static constexpr CAN_frame message_6 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -176,7 +176,7 @@ CAN_frame message_6 = {
.data = {0xd7, 0x05, 0x7c, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52, .data = {0xd7, 0x05, 0x7c, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52,
0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}}; 0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}};
CAN_frame message_7 = { static constexpr CAN_frame message_7 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -184,7 +184,7 @@ CAN_frame message_7 = {
.data = {0xb1, 0xe0, 0x26, 0x08, 0x54, 0x01, 0x04, 0x15, 0x00, 0x1a, 0x76, 0x00, 0x25, 0x01, 0x10, 0x27, .data = {0xb1, 0xe0, 0x26, 0x08, 0x54, 0x01, 0x04, 0x15, 0x00, 0x1a, 0x76, 0x00, 0x25, 0x01, 0x10, 0x27,
0x4f, 0x06, 0x18, 0x04, 0x33, 0x15, 0x34, 0x28, 0x00, 0x00, 0x10, 0x06, 0x21, 0x00, 0x4b, 0x06}}; 0x4f, 0x06, 0x18, 0x04, 0x33, 0x15, 0x34, 0x28, 0x00, 0x00, 0x10, 0x06, 0x21, 0x00, 0x4b, 0x06}};
CAN_frame message_8 = { static constexpr CAN_frame message_8 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -192,7 +192,7 @@ CAN_frame message_8 = {
.data = {0xc6, 0xab, 0x26, 0x41, 0x00, 0x00, 0x01, 0x3c, 0xac, 0x0d, 0x40, 0x20, 0x05, 0xc8, 0xa0, 0x03, .data = {0xc6, 0xab, 0x26, 0x41, 0x00, 0x00, 0x01, 0x3c, 0xac, 0x0d, 0x40, 0x20, 0x05, 0xc8, 0xa0, 0x03,
0x40, 0x20, 0x2b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0x40, 0x20, 0x2b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_9 = { static constexpr CAN_frame message_9 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -200,14 +200,14 @@ CAN_frame message_9 = {
.data = {0xee, 0x84, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35, .data = {0xee, 0x84, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35,
0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_10 = { static constexpr CAN_frame message_10 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
.ID = 0x120, .ID = 0x120,
.data = {0x58, 0xa9, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37, .data = {0x58, 0xa9, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37,
0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_11 = { static constexpr CAN_frame message_11 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -215,7 +215,7 @@ CAN_frame message_11 = {
.data = {0x91, 0x5c, 0x7d, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52, .data = {0x91, 0x5c, 0x7d, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52,
0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}}; 0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}};
CAN_frame message_12 = { static constexpr CAN_frame message_12 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -223,7 +223,7 @@ CAN_frame message_12 = {
.data = {0xa8, 0xdd, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35, .data = {0xa8, 0xdd, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35,
0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_13 = { static constexpr CAN_frame message_13 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -231,7 +231,7 @@ CAN_frame message_13 = {
.data = {0x1e, 0xf0, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37, .data = {0x1e, 0xf0, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37,
0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_14 = { static constexpr CAN_frame message_14 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -239,7 +239,7 @@ CAN_frame message_14 = {
.data = {0x5b, 0xb7, 0x7e, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52, .data = {0x5b, 0xb7, 0x7e, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52,
0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}}; 0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}};
CAN_frame message_15 = { static constexpr CAN_frame message_15 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -247,7 +247,7 @@ CAN_frame message_15 = {
.data = {0xec, 0x6d, 0x90, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35, .data = {0xec, 0x6d, 0x90, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35,
0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_16 = { static constexpr CAN_frame message_16 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -255,7 +255,7 @@ CAN_frame message_16 = {
.data = {0x5a, 0x40, 0x90, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37, .data = {0x5a, 0x40, 0x90, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37,
0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_17 = { static constexpr CAN_frame message_17 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -263,7 +263,7 @@ CAN_frame message_17 = {
.data = {0x1d, 0xee, 0x7f, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52, .data = {0x1d, 0xee, 0x7f, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52,
0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}}; 0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}};
CAN_frame message_18 = { static constexpr CAN_frame message_18 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -271,7 +271,7 @@ CAN_frame message_18 = {
.data = {0xbd, 0xb2, 0x42, 0x00, 0x00, 0x00, 0x00, 0x80, 0x59, 0x00, 0x2b, 0x00, 0x00, 0x04, 0x00, 0x00, .data = {0xbd, 0xb2, 0x42, 0x00, 0x00, 0x00, 0x00, 0x80, 0x59, 0x00, 0x2b, 0x00, 0x00, 0x04, 0x00, 0x00,
0xfa, 0xd0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xfa, 0xd0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_19 = { static constexpr CAN_frame message_19 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -279,14 +279,14 @@ CAN_frame message_19 = {
.data = {0xc1, 0xf2, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, .data = {0xc1, 0xf2, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00,
0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x70, 0x01, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x70, 0x01, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_20 = { static constexpr CAN_frame message_20 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
.ID = 0x10A, .ID = 0x10A,
.data = {0xaa, 0x34, 0x91, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35, .data = {0xaa, 0x34, 0x91, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35,
0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_21 = { static constexpr CAN_frame message_21 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -294,7 +294,7 @@ CAN_frame message_21 = {
.data = {0x1c, 0x19, 0x91, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37, .data = {0x1c, 0x19, 0x91, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37,
0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_22 = { static constexpr CAN_frame message_22 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -302,7 +302,7 @@ CAN_frame message_22 = {
.data = {0x79, 0xfb, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, .data = {0x79, 0xfb, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_23 = { static constexpr CAN_frame message_23 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -310,7 +310,7 @@ CAN_frame message_23 = {
.data = {0x6e, 0xbb, 0xa0, 0x0d, 0x04, 0x01, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, .data = {0x6e, 0xbb, 0xa0, 0x0d, 0x04, 0x01, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc7, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc7, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_24 = { static constexpr CAN_frame message_24 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -318,7 +318,7 @@ CAN_frame message_24 = {
.data = {0x00, 0x00, 0x00, 0xd2, 0x06, 0x92, 0x05, 0x34, 0x07, 0x8e, 0x08, 0x73, 0x05, 0x80, 0x05, 0x83, .data = {0x00, 0x00, 0x00, 0xd2, 0x06, 0x92, 0x05, 0x34, 0x07, 0x8e, 0x08, 0x73, 0x05, 0x80, 0x05, 0x83,
0x05, 0x73, 0x05, 0x80, 0x05, 0xed, 0x01, 0xdd, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0x05, 0x73, 0x05, 0x80, 0x05, 0xed, 0x01, 0xdd, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_25 = { static constexpr CAN_frame message_25 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -326,7 +326,7 @@ CAN_frame message_25 = {
.data = {0xbe, 0x84, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, .data = {0xbe, 0x84, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
0x75, 0x6c, 0x86, 0x0d, 0xfb, 0xdf, 0x03, 0x36, 0xc3, 0x86, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0x75, 0x6c, 0x86, 0x0d, 0xfb, 0xdf, 0x03, 0x36, 0xc3, 0x86, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_26 = { static constexpr CAN_frame message_26 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -334,7 +334,7 @@ CAN_frame message_26 = {
.data = {0x6b, 0xa2, 0x80, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52, .data = {0x6b, 0xa2, 0x80, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52,
0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}}; 0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}};
CAN_frame message_27 = { static constexpr CAN_frame message_27 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -342,7 +342,7 @@ CAN_frame message_27 = {
.data = {0x60, 0xdf, 0x92, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35, .data = {0x60, 0xdf, 0x92, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35,
0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_28 = { static constexpr CAN_frame message_28 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -350,7 +350,7 @@ CAN_frame message_28 = {
.data = {0xd6, 0xf2, 0x92, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37, .data = {0xd6, 0xf2, 0x92, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37,
0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_29 = { static constexpr CAN_frame message_29 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -358,14 +358,14 @@ CAN_frame message_29 = {
.data = {0x2d, 0xfb, 0x81, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52, .data = {0x2d, 0xfb, 0x81, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52,
0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}}; 0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}};
CAN_frame message_30 = { static constexpr CAN_frame message_30 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
.ID = 0x33A, .ID = 0x33A,
.data = {0x1a, 0x23, 0x26, 0x10, 0x27, 0x4f, 0x06, 0x00, 0xf8, 0x1b, 0x19, 0x04, 0x30, 0x01, 0x00, 0x06, .data = {0x1a, 0x23, 0x26, 0x10, 0x27, 0x4f, 0x06, 0x00, 0xf8, 0x1b, 0x19, 0x04, 0x30, 0x01, 0x00, 0x06,
0x00, 0x00, 0x00, 0x2e, 0x2d, 0x81, 0x25, 0x20, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0x00, 0x00, 0x00, 0x2e, 0x2d, 0x81, 0x25, 0x20, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_31 = { static constexpr CAN_frame message_31 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -373,7 +373,7 @@ CAN_frame message_31 = {
.data = {0x26, 0x82, 0x26, 0xf4, 0x01, 0x00, 0x00, 0x50, 0x90, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, .data = {0x26, 0x82, 0x26, 0xf4, 0x01, 0x00, 0x00, 0x50, 0x90, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_32 = { static constexpr CAN_frame message_32 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -381,7 +381,7 @@ CAN_frame message_32 = {
.data = {0x26, 0x86, 0x93, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35, .data = {0x26, 0x86, 0x93, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35,
0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_33 = { static constexpr CAN_frame message_33 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -389,7 +389,7 @@ CAN_frame message_33 = {
.data = {0x90, 0xab, 0x93, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37, .data = {0x90, 0xab, 0x93, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37,
0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_34 = { static constexpr CAN_frame message_34 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -397,7 +397,7 @@ CAN_frame message_34 = {
.data = {0xe7, 0x10, 0x82, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52, .data = {0xe7, 0x10, 0x82, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52,
0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}}; 0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}};
CAN_frame message_35 = { static constexpr CAN_frame message_35 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -405,7 +405,7 @@ CAN_frame message_35 = {
.data = {0x69, 0x8a, 0x3f, 0x01, 0x00, 0x00, 0x00, 0x15, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, .data = {0x69, 0x8a, 0x3f, 0x01, 0x00, 0x00, 0x00, 0x15, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_36 = { static constexpr CAN_frame message_36 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -413,7 +413,7 @@ CAN_frame message_36 = {
.data = {0xa3, 0xc8, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x36, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, .data = {0xa3, 0xc8, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x36, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc7, 0x02, 0x00, 0x00, 0x00, 0x00, 0x6a, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc7, 0x02, 0x00, 0x00, 0x00, 0x00, 0x6a, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_37 = { static constexpr CAN_frame message_37 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -421,7 +421,7 @@ CAN_frame message_37 = {
.data = {0xd5, 0x18, 0x94, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35, .data = {0xd5, 0x18, 0x94, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35,
0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_38 = { static constexpr CAN_frame message_38 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -429,7 +429,7 @@ CAN_frame message_38 = {
.data = {0x63, 0x35, 0x94, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37, .data = {0x63, 0x35, 0x94, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37,
0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_39 = { static constexpr CAN_frame message_39 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -437,14 +437,14 @@ CAN_frame message_39 = {
.data = {0xa1, 0x49, 0x83, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52, .data = {0xa1, 0x49, 0x83, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52,
0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}}; 0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}};
CAN_frame message_40 = { static constexpr CAN_frame message_40 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
.ID = 0x10A, .ID = 0x10A,
.data = {0x93, 0x41, 0x95, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35, .data = {0x93, 0x41, 0x95, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35,
0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_41 = { static constexpr CAN_frame message_41 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -452,7 +452,7 @@ CAN_frame message_41 = {
.data = {0x25, 0x6c, 0x95, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37, .data = {0x25, 0x6c, 0x95, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37,
0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_42 = { static constexpr CAN_frame message_42 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -460,7 +460,7 @@ CAN_frame message_42 = {
.data = {0x52, 0xd7, 0x84, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52, .data = {0x52, 0xd7, 0x84, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52,
0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}}; 0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}};
CAN_frame message_43 = { static constexpr CAN_frame message_43 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -468,7 +468,7 @@ CAN_frame message_43 = {
.data = {0x59, 0xaa, 0x96, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35, .data = {0x59, 0xaa, 0x96, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35,
0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_44 = { static constexpr CAN_frame message_44 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -476,7 +476,7 @@ CAN_frame message_44 = {
.data = {0xef, 0x87, 0x96, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37, .data = {0xef, 0x87, 0x96, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37,
0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_45 = { static constexpr CAN_frame message_45 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -484,7 +484,7 @@ CAN_frame message_45 = {
.data = {0x14, 0x8e, 0x85, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52, .data = {0x14, 0x8e, 0x85, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52,
0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}}; 0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}};
CAN_frame message_46 = { static constexpr CAN_frame message_46 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -492,7 +492,7 @@ CAN_frame message_46 = {
.data = {0x1f, 0xf3, 0x97, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35, .data = {0x1f, 0xf3, 0x97, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35,
0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_47 = { static constexpr CAN_frame message_47 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -500,7 +500,7 @@ CAN_frame message_47 = {
.data = {0xa9, 0xde, 0x97, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37, .data = {0xa9, 0xde, 0x97, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37,
0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_48 = { static constexpr CAN_frame message_48 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -508,7 +508,7 @@ CAN_frame message_48 = {
.data = {0xde, 0x65, 0x86, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52, .data = {0xde, 0x65, 0x86, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52,
0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}}; 0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}};
CAN_frame message_49 = { static constexpr CAN_frame message_49 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -516,14 +516,14 @@ CAN_frame message_49 = {
.data = {0xd3, 0x11, 0x27, 0x08, 0x54, 0x01, 0x04, 0x15, 0x00, 0x1a, 0x76, 0x00, 0x25, 0x01, 0x10, 0x27, .data = {0xd3, 0x11, 0x27, 0x08, 0x54, 0x01, 0x04, 0x15, 0x00, 0x1a, 0x76, 0x00, 0x25, 0x01, 0x10, 0x27,
0x4f, 0x06, 0x19, 0x04, 0x33, 0x15, 0x34, 0x28, 0x00, 0x00, 0x10, 0x06, 0x21, 0x00, 0x4b, 0x06}}; 0x4f, 0x06, 0x19, 0x04, 0x33, 0x15, 0x34, 0x28, 0x00, 0x00, 0x10, 0x06, 0x21, 0x00, 0x4b, 0x06}};
CAN_frame message_50 = { static constexpr CAN_frame message_50 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
.ID = 0x320, .ID = 0x320,
.data = {0x80, 0xf2, 0x27, 0x41, 0x00, 0x00, 0x01, 0x3c, 0xac, 0x0d, 0x40, 0x20, 0x05, 0xc8, 0xa0, 0x03, .data = {0x80, 0xf2, 0x27, 0x41, 0x00, 0x00, 0x01, 0x3c, 0xac, 0x0d, 0x40, 0x20, 0x05, 0xc8, 0xa0, 0x03,
0x40, 0x20, 0x2b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0x40, 0x20, 0x2b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_51 = { static constexpr CAN_frame message_51 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -531,7 +531,7 @@ CAN_frame message_51 = {
.data = {0x9e, 0x87, 0x98, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35, .data = {0x9e, 0x87, 0x98, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35,
0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_52 = { static constexpr CAN_frame message_52 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -539,7 +539,7 @@ CAN_frame message_52 = {
.data = {0x28, 0xaa, 0x98, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37, .data = {0x28, 0xaa, 0x98, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37,
0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_53 = { static constexpr CAN_frame message_53 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -547,7 +547,7 @@ CAN_frame message_53 = {
.data = {0x98, 0x3c, 0x87, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52, .data = {0x98, 0x3c, 0x87, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52,
0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}}; 0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}};
CAN_frame message_54 = { static constexpr CAN_frame message_54 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -555,7 +555,7 @@ CAN_frame message_54 = {
.data = {0xd8, 0xde, 0x99, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35, .data = {0xd8, 0xde, 0x99, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35,
0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_55 = { static constexpr CAN_frame message_55 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -563,7 +563,7 @@ CAN_frame message_55 = {
.data = {0x6e, 0xf3, 0x99, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37, .data = {0x6e, 0xf3, 0x99, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37,
0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_56 = { static constexpr CAN_frame message_56 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -571,7 +571,7 @@ CAN_frame message_56 = {
.data = {0x19, 0x48, 0x88, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52, .data = {0x19, 0x48, 0x88, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52,
0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}}; 0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}};
CAN_frame message_57 = { static constexpr CAN_frame message_57 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -579,7 +579,7 @@ CAN_frame message_57 = {
.data = {0x12, 0x35, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35, .data = {0x12, 0x35, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35,
0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_58 = { static constexpr CAN_frame message_58 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -587,7 +587,7 @@ CAN_frame message_58 = {
.data = {0xa4, 0x18, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37, .data = {0xa4, 0x18, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x37, 0x35, 0x37, 0x37,
0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_59 = { static constexpr CAN_frame message_59 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -595,7 +595,7 @@ CAN_frame message_59 = {
.data = {0x5f, 0x11, 0x89, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52, .data = {0x5f, 0x11, 0x89, 0x55, 0x44, 0x64, 0xd8, 0x1b, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x11, 0x52,
0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}}; 0x00, 0x12, 0x02, 0x64, 0x00, 0x00, 0x00, 0x08, 0x13, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00}};
CAN_frame message_60 = { static constexpr CAN_frame message_60 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -603,7 +603,7 @@ CAN_frame message_60 = {
.data = {0xfb, 0xeb, 0x43, 0x00, 0x00, 0x00, 0x00, 0x80, 0x59, 0x00, 0x2b, 0x00, 0x00, 0x04, 0x00, 0x00, .data = {0xfb, 0xeb, 0x43, 0x00, 0x00, 0x00, 0x00, 0x80, 0x59, 0x00, 0x2b, 0x00, 0x00, 0x04, 0x00, 0x00,
0xfa, 0xd0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xfa, 0xd0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8f, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_61 = { static constexpr CAN_frame message_61 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -611,7 +611,7 @@ CAN_frame message_61 = {
.data = {0xcc, 0xcd, 0xa2, 0x21, 0x00, 0xa1, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, .data = {0xcc, 0xcd, 0xa2, 0x21, 0x00, 0xa1, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_62 = { static constexpr CAN_frame message_62 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
@ -619,29 +619,29 @@ CAN_frame message_62 = {
.data = {0x87, 0xab, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, .data = {0x87, 0xab, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00,
0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x70, 0x01, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x70, 0x01, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame message_63 = { static constexpr CAN_frame message_63 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 32, .DLC = 32,
.ID = 0x10A, .ID = 0x10A,
.data = {0x54, 0x6c, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35, .data = {0x54, 0x6c, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x36, 0x39, 0x35, 0x35,
0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}}; 0xc9, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x35, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame* messages[] = {&message_1, &message_2, &message_3, &message_4, &message_5, &message_6, &message_7, static const CAN_frame* messages[] = {
&message_8, &message_9, &message_10, &message_11, &message_12, &message_13, &message_14, &message_1, &message_2, &message_3, &message_4, &message_5, &message_6, &message_7, &message_8,
&message_15, &message_16, &message_17, &message_18, &message_19, &message_20, &message_21, &message_9, &message_10, &message_11, &message_12, &message_13, &message_14, &message_15, &message_16,
&message_22, &message_23, &message_24, &message_25, &message_26, &message_27, &message_28, &message_17, &message_18, &message_19, &message_20, &message_21, &message_22, &message_23, &message_24,
&message_29, &message_30, &message_31, &message_32, &message_33, &message_34, &message_35, &message_25, &message_26, &message_27, &message_28, &message_29, &message_30, &message_31, &message_32,
&message_36, &message_37, &message_38, &message_39, &message_40, &message_41, &message_42, &message_33, &message_34, &message_35, &message_36, &message_37, &message_38, &message_39, &message_40,
&message_43, &message_44, &message_45, &message_46, &message_47, &message_48, &message_49, &message_41, &message_42, &message_43, &message_44, &message_45, &message_46, &message_47, &message_48,
&message_50, &message_51, &message_52, &message_53, &message_54, &message_55, &message_56, &message_49, &message_50, &message_51, &message_52, &message_53, &message_54, &message_55, &message_56,
&message_57, &message_58, &message_59, &message_60, &message_61, &message_62, &message_63}; &message_57, &message_58, &message_59, &message_60, &message_61, &message_62, &message_63};
/* PID polling messages */ /* PID polling messages */
CAN_frame EGMP_7E4 = {.FD = true, CAN_frame EGMP_7E4 = {.FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x7E4, .ID = 0x7E4,
.data = {0x03, 0x22, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00}}; //Poll PID 03 22 01 01 .data = {0x03, 0x22, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00}}; //Poll PID 03 22 01 01
CAN_frame EGMP_7E4_ack = { static constexpr CAN_frame EGMP_7E4_ack = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,

View file

@ -361,11 +361,11 @@ class MebBattery : public CanBattery {
.DLC = 8, .DLC = 8,
.ID = 0x1C40007B, // SOC 02 8C .ID = 0x1C40007B, // SOC 02 8C
.data = {0x03, 0x22, 0x02, 0x8C, 0x55, 0x55, 0x55, 0x55}}; .data = {0x03, 0x22, 0x02, 0x8C, 0x55, 0x55, 0x55, 0x55}};
CAN_frame MEB_ACK_FRAME = {.FD = true, static constexpr CAN_frame MEB_ACK_FRAME = {.FD = true,
.ext_ID = true, .ext_ID = true,
.DLC = 8, .DLC = 8,
.ID = 0x1C40007B, // Ack .ID = 0x1C40007B, // Ack
.data = {0x30, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55}}; .data = {0x30, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55}};
//Messages needed for contactor closing //Messages needed for contactor closing
CAN_frame MEB_040 = {.FD = true, // Airbag CAN_frame MEB_040 = {.FD = true, // Airbag
.ext_ID = false, .ext_ID = false,
@ -392,28 +392,28 @@ class MebBattery : public CanBattery {
.DLC = 8, .DLC = 8,
.ID = 0x6B2, .ID = 0x6B2,
.data = {0x6A, 0xA7, 0x37, 0x80, 0xC9, 0xBD, 0xF6, 0xC2}}; .data = {0x6A, 0xA7, 0x37, 0x80, 0xC9, 0xBD, 0xF6, 0xC2}};
CAN_frame MEB_17FC007B_poll = {.FD = true, // Non period request static constexpr CAN_frame MEB_17FC007B_poll = {.FD = true, // Non period request
.ext_ID = true, .ext_ID = true,
.DLC = 8, .DLC = 8,
.ID = 0x17FC007B, .ID = 0x17FC007B,
.data = {0x03, 0x22, 0x1E, 0x3D, 0x55, 0x55, 0x55, 0x55}}; .data = {0x03, 0x22, 0x1E, 0x3D, 0x55, 0x55, 0x55, 0x55}};
CAN_frame MEB_1A5555A6 = {.FD = true, CAN_frame MEB_1A5555A6 = {.FD = true,
.ext_ID = true, .ext_ID = true,
.DLC = 8, .DLC = 8,
.ID = 0x1A5555A6, .ID = 0x1A5555A6,
.data = {0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00}}; .data = {0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame MEB_585 = { static constexpr CAN_frame MEB_585 = {
.FD = true, .FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x585, .ID = 0x585,
.data = {0xCF, 0x38, 0xAF, 0x5B, 0x25, 0x00, 0x00, 0x00}}; // CF 38 AF 5B 25 00 00 00 in start4.log .data = {0xCF, 0x38, 0xAF, 0x5B, 0x25, 0x00, 0x00, 0x00}}; // CF 38 AF 5B 25 00 00 00 in start4.log
// .data = {0xCF, 0x38, 0x20, 0x02, 0x25, 0xF7, 0x30, 0x00}}; // CF 38 AF 5B 25 00 00 00 in start4.log // .data = {0xCF, 0x38, 0x20, 0x02, 0x25, 0xF7, 0x30, 0x00}}; // CF 38 AF 5B 25 00 00 00 in start4.log
CAN_frame MEB_5F5 = {.FD = true, static constexpr CAN_frame MEB_5F5 = {.FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x5F5, .ID = 0x5F5,
.data = {0x23, 0x02, 0x39, 0xC0, 0x1B, 0x8B, 0xC8, 0x1B}}; .data = {0x23, 0x02, 0x39, 0xC0, 0x1B, 0x8B, 0xC8, 0x1B}};
CAN_frame MEB_641 = {.FD = true, CAN_frame MEB_641 = {.FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
@ -429,56 +429,56 @@ class MebBattery : public CanBattery {
.DLC = 8, .DLC = 8,
.ID = 0x0FD, //CRC and counter, otherwise static .ID = 0x0FD, //CRC and counter, otherwise static
.data = {0x5F, 0xD0, 0x1F, 0x81, 0x00, 0x00, 0x00, 0x00}}; .data = {0x5F, 0xD0, 0x1F, 0x81, 0x00, 0x00, 0x00, 0x00}};
CAN_frame MEB_16A954FB = {.FD = true, static constexpr CAN_frame MEB_16A954FB = {.FD = true,
.ext_ID = true, .ext_ID = true,
.DLC = 8, .DLC = 8,
.ID = 0x16A954FB, .ID = 0x16A954FB,
.data = {0x00, 0xC0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00}}; .data = {0x00, 0xC0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame MEB_1A555548 = {.FD = true, static constexpr CAN_frame MEB_1A555548 = {.FD = true,
.ext_ID = true, .ext_ID = true,
.DLC = 8, .DLC = 8,
.ID = 0x1A555548, .ID = 0x1A555548,
.data = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; .data = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
CAN_frame MEB_1A55552B = {.FD = true, static constexpr CAN_frame MEB_1A55552B = {.FD = true,
.ext_ID = true, .ext_ID = true,
.DLC = 8, .DLC = 8,
.ID = 0x1A55552B, .ID = 0x1A55552B,
.data = {0x00, 0x00, 0x00, 0xA0, 0x02, 0x04, 0x00, 0x30}}; .data = {0x00, 0x00, 0x00, 0xA0, 0x02, 0x04, 0x00, 0x30}};
CAN_frame MEB_569 = {.FD = true, static constexpr CAN_frame MEB_569 = {.FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x569, //HVEM .ID = 0x569, //HVEM
.data = {0x00, 0x00, 0x01, 0x3A, 0x00, 0x00, 0x00, 0x00}}; .data = {0x00, 0x00, 0x01, 0x3A, 0x00, 0x00, 0x00, 0x00}};
CAN_frame MEB_16A954B4 = {.FD = true, static constexpr CAN_frame MEB_16A954B4 = {.FD = true,
.ext_ID = true, .ext_ID = true,
.DLC = 8, .DLC = 8,
.ID = 0x16A954B4, //eTM .ID = 0x16A954B4, //eTM
.data = {0xFE, 0xB6, 0x0D, 0x00, 0x00, 0xD5, 0x48, 0xFD}}; .data = {0xFE, 0xB6, 0x0D, 0x00, 0x00, 0xD5, 0x48, 0xFD}};
CAN_frame MEB_1B000046 = {.FD = false, // Not FD static constexpr CAN_frame MEB_1B000046 = {.FD = false, // Not FD
.ext_ID = true, .ext_ID = true,
.DLC = 8, .DLC = 8,
.ID = 0x1B000046, // Klima .ID = 0x1B000046, // Klima
.data = {0x00, 0x40, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00}}; .data = {0x00, 0x40, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00}};
CAN_frame MEB_1B000010 = {.FD = false, // Not FD static constexpr CAN_frame MEB_1B000010 = {.FD = false, // Not FD
.ext_ID = true, .ext_ID = true,
.DLC = 8, .DLC = 8,
.ID = 0x1B000010, // Gateway .ID = 0x1B000010, // Gateway
.data = {0x00, 0x50, 0x08, 0x50, 0x01, 0xFF, 0x30, 0x00}}; .data = {0x00, 0x50, 0x08, 0x50, 0x01, 0xFF, 0x30, 0x00}};
CAN_frame MEB_1B0000B9 = {.FD = false, // Not FD static constexpr CAN_frame MEB_1B0000B9 = {.FD = false, // Not FD
.ext_ID = true, .ext_ID = true,
.DLC = 8, .DLC = 8,
.ID = 0x1B0000B9, //DC/DC converter .ID = 0x1B0000B9, //DC/DC converter
.data = {0x00, 0x40, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00}}; .data = {0x00, 0x40, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00}};
CAN_frame MEB_153 = {.FD = true, static constexpr CAN_frame MEB_153 = {.FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x153, // content .ID = 0x153, // content
.data = {0x00, 0x00, 0x00, 0xFF, 0xEF, 0xFE, 0xFF, 0xFF}}; .data = {0x00, 0x00, 0x00, 0xFF, 0xEF, 0xFE, 0xFF, 0xFF}};
CAN_frame MEB_5E1 = {.FD = true, static constexpr CAN_frame MEB_5E1 = {.FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x5E1, // content .ID = 0x5E1, // content
.data = {0x7F, 0x2A, 0x00, 0x60, 0xFE, 0x00, 0x00, 0x00}}; .data = {0x7F, 0x2A, 0x00, 0x60, 0xFE, 0x00, 0x00, 0x00}};
CAN_frame MEB_3BE = {.FD = true, CAN_frame MEB_3BE = {.FD = true,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,

View file

@ -121,25 +121,25 @@ class TeslaBattery : public CanBattery {
uint16_t previous_max_percentage = datalayer.battery.settings.max_percentage; uint16_t previous_max_percentage = datalayer.battery.settings.max_percentage;
//0x082 UI_tripPlanning: "cycle_time" 1000ms //0x082 UI_tripPlanning: "cycle_time" 1000ms
CAN_frame TESLA_082 = {.FD = false, static constexpr CAN_frame TESLA_082 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x082, .ID = 0x082,
.data = {0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80}}; .data = {0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80}};
//0x102 VCLEFT_doorStatus: "cycle_time" 100ms //0x102 VCLEFT_doorStatus: "cycle_time" 100ms
CAN_frame TESLA_102 = {.FD = false, static constexpr CAN_frame TESLA_102 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x102, .ID = 0x102,
.data = {0x22, 0x33, 0x00, 0x00, 0xC0, 0x38, 0x21, 0x08}}; .data = {0x22, 0x33, 0x00, 0x00, 0xC0, 0x38, 0x21, 0x08}};
//0x103 VCRIGHT_doorStatus: "cycle_time" 100ms //0x103 VCRIGHT_doorStatus: "cycle_time" 100ms
CAN_frame TESLA_103 = {.FD = false, static constexpr CAN_frame TESLA_103 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x103, .ID = 0x103,
.data = {0x22, 0x33, 0x00, 0x00, 0x30, 0xF2, 0x20, 0x02}}; .data = {0x22, 0x33, 0x00, 0x00, 0x30, 0xF2, 0x20, 0x02}};
//0x118 DI_systemStatus: "cycle_time" 50ms, DI_systemStatusChecksum/DI_systemStatusCounter generated via generateFrameCounterChecksum //0x118 DI_systemStatus: "cycle_time" 50ms, DI_systemStatusChecksum/DI_systemStatusCounter generated via generateFrameCounterChecksum
CAN_frame TESLA_118 = {.FD = false, CAN_frame TESLA_118 = {.FD = false,
@ -229,22 +229,22 @@ class TeslaBattery : public CanBattery {
CAN_frame TESLA_229 = {.FD = false, .ext_ID = false, .DLC = 3, .ID = 0x229, .data = {0x46, 0x00, 0x00}}; CAN_frame TESLA_229 = {.FD = false, .ext_ID = false, .DLC = 3, .ID = 0x229, .data = {0x46, 0x00, 0x00}};
//0x241 VCFRONT_coolant: "cycle_time" 100ms //0x241 VCFRONT_coolant: "cycle_time" 100ms
CAN_frame TESLA_241 = {.FD = false, static constexpr CAN_frame TESLA_241 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 7, .DLC = 7,
.ID = 0x241, .ID = 0x241,
.data = {0x35, 0x34, 0x0C, 0x0F, 0x8F, 0x55, 0x00}}; .data = {0x35, 0x34, 0x0C, 0x0F, 0x8F, 0x55, 0x00}};
//0x2D1 VCFRONT_okToUseHighPower: "cycle_time" 100ms //0x2D1 VCFRONT_okToUseHighPower: "cycle_time" 100ms
CAN_frame TESLA_2D1 = {.FD = false, .ext_ID = false, .DLC = 2, .ID = 0x2D1, .data = {0xFF, 0x01}}; static constexpr CAN_frame TESLA_2D1 = {.FD = false, .ext_ID = false, .DLC = 2, .ID = 0x2D1, .data = {0xFF, 0x01}};
//0x2E1, 6 muxes //0x2E1, 6 muxes
//0x2E1 VCFRONT_status: "cycle_time" 10ms each mux/statusIndex //0x2E1 VCFRONT_status: "cycle_time" 10ms each mux/statusIndex
CAN_frame TESLA_2E1_VEHICLE_AND_RAILS = {.FD = false, static constexpr CAN_frame TESLA_2E1_VEHICLE_AND_RAILS = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x2E1, .ID = 0x2E1,
.data = {0x29, 0x0A, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00}}; .data = {0x29, 0x0A, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00}};
//{0x29, 0x0A, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00} INIT //{0x29, 0x0A, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00} INIT
//{0x29, 0x0A, 0x0D, 0xFF, 0x0F, 0x00, 0x00, 0x00} DRIVE //{0x29, 0x0A, 0x0D, 0xFF, 0x0F, 0x00, 0x00, 0x00} DRIVE
@ -253,39 +253,39 @@ class TeslaBattery : public CanBattery {
//{0x29, 0x0A, 0x06, 0xFF, 0x0F, 0x00, 0x00, 0x00} SLEEP_STANDBY //{0x29, 0x0A, 0x06, 0xFF, 0x0F, 0x00, 0x00, 0x00} SLEEP_STANDBY
//0x2E1 VCFRONT_status: "cycle_time" 10ms each mux/statusIndex //0x2E1 VCFRONT_status: "cycle_time" 10ms each mux/statusIndex
CAN_frame TESLA_2E1_HOMELINK = {.FD = false, static constexpr CAN_frame TESLA_2E1_HOMELINK = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x2E1, .ID = 0x2E1,
.data = {0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00}}; .data = {0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00}};
//0x2E1 VCFRONT_status: "cycle_time" 10ms each mux/statusIndex //0x2E1 VCFRONT_status: "cycle_time" 10ms each mux/statusIndex
CAN_frame TESLA_2E1_REFRIGERANT_SYSTEM = {.FD = false, static constexpr CAN_frame TESLA_2E1_REFRIGERANT_SYSTEM = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x2E1, .ID = 0x2E1,
.data = {0x03, 0x6D, 0x99, 0x02, 0x1B, 0x57, 0x00, 0x00}}; .data = {0x03, 0x6D, 0x99, 0x02, 0x1B, 0x57, 0x00, 0x00}};
//0x2E1 VCFRONT_status: "cycle_time" 10ms each mux/statusIndex //0x2E1 VCFRONT_status: "cycle_time" 10ms each mux/statusIndex
CAN_frame TESLA_2E1_LV_BATTERY_DEBUG = {.FD = false, static constexpr CAN_frame TESLA_2E1_LV_BATTERY_DEBUG = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x2E1, .ID = 0x2E1,
.data = {0xFC, 0x1B, 0xD1, 0x99, 0x9A, 0xD8, 0x09, 0x00}}; .data = {0xFC, 0x1B, 0xD1, 0x99, 0x9A, 0xD8, 0x09, 0x00}};
//0x2E1 VCFRONT_status: "cycle_time" 10ms each mux/statusIndex //0x2E1 VCFRONT_status: "cycle_time" 10ms each mux/statusIndex
CAN_frame TESLA_2E1_MUX_5 = {.FD = false, static constexpr CAN_frame TESLA_2E1_MUX_5 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x2E1, .ID = 0x2E1,
.data = {0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; .data = {0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
//0x2E1 VCFRONT_status: "cycle_time" 10ms each mux/statusIndex //0x2E1 VCFRONT_status: "cycle_time" 10ms each mux/statusIndex
CAN_frame TESLA_2E1_BODY_CONTROLS = {.FD = false, static constexpr CAN_frame TESLA_2E1_BODY_CONTROLS = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x2E1, .ID = 0x2E1,
.data = {0x08, 0x21, 0x04, 0x6E, 0xA0, 0x88, 0x06, 0x04}}; .data = {0x08, 0x21, 0x04, 0x6E, 0xA0, 0x88, 0x06, 0x04}};
//0x2E8 EPBR_status: "cycle_time" 100ms //0x2E8 EPBR_status: "cycle_time" 100ms
CAN_frame TESLA_2E8 = {.FD = false, CAN_frame TESLA_2E8 = {.FD = false,
@ -295,7 +295,11 @@ class TeslaBattery : public CanBattery {
.data = {0x02, 0x00, 0x10, 0x00, 0x00, 0x80, 0x00, 0x6C}}; .data = {0x02, 0x00, 0x10, 0x00, 0x00, 0x80, 0x00, 0x6C}};
//0x284 UI_vehicleModes: "cycle_time" 500ms //0x284 UI_vehicleModes: "cycle_time" 500ms
CAN_frame TESLA_284 = {.FD = false, .ext_ID = false, .DLC = 5, .ID = 0x284, .data = {0x10, 0x00, 0x00, 0x00, 0x00}}; static constexpr CAN_frame TESLA_284 = {.FD = false,
.ext_ID = false,
.DLC = 5,
.ID = 0x284,
.data = {0x10, 0x00, 0x00, 0x00, 0x00}};
//0x293 UI_chassisControl: "cycle_time" 500ms, UI_chassisControlChecksum/UI_chassisControlCounter generated via generateFrameCounterChecksum //0x293 UI_chassisControl: "cycle_time" 500ms, UI_chassisControlChecksum/UI_chassisControlCounter generated via generateFrameCounterChecksum
CAN_frame TESLA_293 = {.FD = false, CAN_frame TESLA_293 = {.FD = false,
@ -307,7 +311,7 @@ class TeslaBattery : public CanBattery {
//0x3A1 VCFRONT_vehicleStatus: "cycle_time" 50ms, VCFRONT_vehicleStatusChecksum/VCFRONT_vehicleStatusCounter eventually need to be generated via generateMuxFrameCounterChecksum //0x3A1 VCFRONT_vehicleStatus: "cycle_time" 50ms, VCFRONT_vehicleStatusChecksum/VCFRONT_vehicleStatusCounter eventually need to be generated via generateMuxFrameCounterChecksum
//Looks like 2 muxes, counter at bit 52 width 4 and checksum at bit 56 width 8? Need later software Model3_ETH.compact.json signal file or DBC. //Looks like 2 muxes, counter at bit 52 width 4 and checksum at bit 56 width 8? Need later software Model3_ETH.compact.json signal file or DBC.
//Migrated to an array until figured out //Migrated to an array until figured out
CAN_frame TESLA_3A1[16] = { static constexpr CAN_frame TESLA_3A1[16] = {
{.FD = false, .ext_ID = false, .DLC = 8, .ID = 0x3A1, .data = {0xC3, 0xFF, 0xFF, 0xFF, 0x3D, 0x00, 0xD0, 0x01}}, {.FD = false, .ext_ID = false, .DLC = 8, .ID = 0x3A1, .data = {0xC3, 0xFF, 0xFF, 0xFF, 0x3D, 0x00, 0xD0, 0x01}},
{.FD = false, .ext_ID = false, .DLC = 8, .ID = 0x3A1, .data = {0x08, 0x62, 0x0B, 0x18, 0x00, 0x28, 0xE2, 0xCB}}, {.FD = false, .ext_ID = false, .DLC = 8, .ID = 0x3A1, .data = {0x08, 0x62, 0x0B, 0x18, 0x00, 0x28, 0xE2, 0xCB}},
{.FD = false, .ext_ID = false, .DLC = 8, .ID = 0x3A1, .data = {0xC3, 0xFF, 0xFF, 0xFF, 0x3D, 0x00, 0xF0, 0x21}}, {.FD = false, .ext_ID = false, .DLC = 8, .ID = 0x3A1, .data = {0xC3, 0xFF, 0xFF, 0xFF, 0x3D, 0x00, 0xF0, 0x21}},
@ -344,11 +348,11 @@ class TeslaBattery : public CanBattery {
CAN_frame TESLA_333 = {.FD = false, .ext_ID = false, .DLC = 5, .ID = 0x333, .data = {0x84, 0x30, 0x84, 0x07, 0x02}}; CAN_frame TESLA_333 = {.FD = false, .ext_ID = false, .DLC = 5, .ID = 0x333, .data = {0x84, 0x30, 0x84, 0x07, 0x02}};
//0x334 UI request: "cycle_time" 500ms, initial frame car sends //0x334 UI request: "cycle_time" 500ms, initial frame car sends
CAN_frame TESLA_334_INITIAL = {.FD = false, static constexpr CAN_frame TESLA_334_INITIAL = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x334, .ID = 0x334,
.data = {0x3F, 0x3F, 0xC8, 0x00, 0xE2, 0x3F, 0x80, 0x1E}}; .data = {0x3F, 0x3F, 0xC8, 0x00, 0xE2, 0x3F, 0x80, 0x1E}};
//0x334 UI request: "cycle_time" 500ms, generated via generateFrameCounterChecksum //0x334 UI request: "cycle_time" 500ms, generated via generateFrameCounterChecksum
CAN_frame TESLA_334 = {.FD = false, CAN_frame TESLA_334 = {.FD = false,
@ -358,49 +362,49 @@ class TeslaBattery : public CanBattery {
.data = {0x3F, 0x3F, 0x00, 0x0F, 0xE2, 0x3F, 0x90, 0x75}}; .data = {0x3F, 0x3F, 0x00, 0x0F, 0xE2, 0x3F, 0x90, 0x75}};
//0x3B3 UI_vehicleControl2: "cycle_time" 500ms //0x3B3 UI_vehicleControl2: "cycle_time" 500ms
CAN_frame TESLA_3B3 = {.FD = false, static constexpr CAN_frame TESLA_3B3 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x3B3, .ID = 0x3B3,
.data = {0x90, 0x80, 0x05, 0x08, 0x00, 0x00, 0x00, 0x01}}; .data = {0x90, 0x80, 0x05, 0x08, 0x00, 0x00, 0x00, 0x01}};
//0x39D IBST_status: "cycle_time" 50ms, IBST_statusChecksum/IBST_statusCounter generated via generateFrameCounterChecksum //0x39D IBST_status: "cycle_time" 50ms, IBST_statusChecksum/IBST_statusCounter generated via generateFrameCounterChecksum
CAN_frame TESLA_39D = {.FD = false, .ext_ID = false, .DLC = 5, .ID = 0x39D, .data = {0xE1, 0x59, 0xC1, 0x27, 0x00}}; CAN_frame TESLA_39D = {.FD = false, .ext_ID = false, .DLC = 5, .ID = 0x39D, .data = {0xE1, 0x59, 0xC1, 0x27, 0x00}};
//0x3C2 VCLEFT_switchStatus (Mux0, initial frame car sends): "cycle_time" 50ms, sent once //0x3C2 VCLEFT_switchStatus (Mux0, initial frame car sends): "cycle_time" 50ms, sent once
CAN_frame TESLA_3C2_INITIAL = {.FD = false, static constexpr CAN_frame TESLA_3C2_INITIAL = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x3C2, .ID = 0x3C2,
.data = {0x00, 0x55, 0x55, 0x55, 0x00, 0x00, 0x5A, 0x05}}; .data = {0x00, 0x55, 0x55, 0x55, 0x00, 0x00, 0x5A, 0x05}};
//0x3C2 VCLEFT_switchStatus (Mux0): "cycle_time" 50ms each mux/SwitchStatusIndex //0x3C2 VCLEFT_switchStatus (Mux0): "cycle_time" 50ms each mux/SwitchStatusIndex
CAN_frame TESLA_3C2_Mux0 = {.FD = false, static constexpr CAN_frame TESLA_3C2_Mux0 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x3C2, .ID = 0x3C2,
.data = {0x00, 0x55, 0x55, 0x55, 0x00, 0x00, 0x5A, 0x45}}; .data = {0x00, 0x55, 0x55, 0x55, 0x00, 0x00, 0x5A, 0x45}};
//0x3C2 VCLEFT_switchStatus (Mux1): "cycle_time" 50ms each mux/SwitchStatusIndex //0x3C2 VCLEFT_switchStatus (Mux1): "cycle_time" 50ms each mux/SwitchStatusIndex
CAN_frame TESLA_3C2_Mux1 = {.FD = false, static constexpr CAN_frame TESLA_3C2_Mux1 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x3C2, .ID = 0x3C2,
.data = {0x29, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; .data = {0x29, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
//0x504 Initially sent //0x504 Initially sent
CAN_frame TESLA_504_INITIAL = {.FD = false, static constexpr CAN_frame TESLA_504_INITIAL = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x504, .ID = 0x504,
.data = {0x00, 0x1B, 0x06, 0x03, 0x00, 0x01, 0x00, 0x01}}; .data = {0x00, 0x1B, 0x06, 0x03, 0x00, 0x01, 0x00, 0x01}};
//0x55A Unknown but always sent: "cycle_time" 500ms //0x55A Unknown but always sent: "cycle_time" 500ms
CAN_frame TESLA_55A = {.FD = false, static constexpr CAN_frame TESLA_55A = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x55A, .ID = 0x55A,
.data = {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; .data = {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
//0x7FF GTW_carConfig: "cycle_time" 100ms each mux/carConfigMultiplexer (UK/RHD) //0x7FF GTW_carConfig: "cycle_time" 100ms each mux/carConfigMultiplexer (UK/RHD)
CAN_frame TESLA_7FF_Mux1 = {.FD = false, CAN_frame TESLA_7FF_Mux1 = {.FD = false,
@ -410,11 +414,11 @@ class TeslaBattery : public CanBattery {
.data = {0x01, 0x49, 0x42, 0x47, 0x00, 0x03, 0x15, 0x01}}; .data = {0x01, 0x49, 0x42, 0x47, 0x00, 0x03, 0x15, 0x01}};
//0x7FF GTW_carConfig: "cycle_time" 100ms each mux/carConfigMultiplexer //0x7FF GTW_carConfig: "cycle_time" 100ms each mux/carConfigMultiplexer
CAN_frame TESLA_7FF_Mux2 = {.FD = false, static constexpr CAN_frame TESLA_7FF_Mux2 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x7FF, .ID = 0x7FF,
.data = {0x02, 0x66, 0x32, 0x24, 0x04, 0x49, 0x95, 0x82}}; .data = {0x02, 0x66, 0x32, 0x24, 0x04, 0x49, 0x95, 0x82}};
//0x7FF GTW_carConfig: "cycle_time" 100ms each mux/carConfigMultiplexer (EU/Long Range) //0x7FF GTW_carConfig: "cycle_time" 100ms each mux/carConfigMultiplexer (EU/Long Range)
CAN_frame TESLA_7FF_Mux3 = {.FD = false, CAN_frame TESLA_7FF_Mux3 = {.FD = false,
@ -424,46 +428,46 @@ class TeslaBattery : public CanBattery {
.data = {0x03, 0x01, 0x08, 0x48, 0x01, 0x00, 0x00, 0x12}}; .data = {0x03, 0x01, 0x08, 0x48, 0x01, 0x00, 0x00, 0x12}};
//0x7FF GTW_carConfig: "cycle_time" 100ms each mux/carConfigMultiplexer //0x7FF GTW_carConfig: "cycle_time" 100ms each mux/carConfigMultiplexer
CAN_frame TESLA_7FF_Mux4 = {.FD = false, static constexpr CAN_frame TESLA_7FF_Mux4 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x7FF, .ID = 0x7FF,
.data = {0x04, 0x73, 0x03, 0x67, 0x5C, 0x00, 0x00, 0x00}}; .data = {0x04, 0x73, 0x03, 0x67, 0x5C, 0x00, 0x00, 0x00}};
//0x7FF GTW_carConfig: "cycle_time" 100ms each mux/carConfigMultiplexer //0x7FF GTW_carConfig: "cycle_time" 100ms each mux/carConfigMultiplexer
CAN_frame TESLA_7FF_Mux5 = {.FD = false, static constexpr CAN_frame TESLA_7FF_Mux5 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x7FF, .ID = 0x7FF,
.data = {0x05, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00}}; .data = {0x05, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00}};
//0x7FF GTW_carConfig: "cycle_time" 100ms each mux/carConfigMultiplexer - later firmware has muxes 6 & 7, needed? //0x7FF GTW_carConfig: "cycle_time" 100ms each mux/carConfigMultiplexer - later firmware has muxes 6 & 7, needed?
CAN_frame TESLA_7FF_Mux6 = {.FD = false, static constexpr CAN_frame TESLA_7FF_Mux6 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x7FF, .ID = 0x7FF,
.data = {0x06, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0xD0}}; .data = {0x06, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0xD0}};
//0x7FF GTW_carConfig: "cycle_time" 100ms each mux/carConfigMultiplexer - later firmware has muxes 6 & 7, needed? //0x7FF GTW_carConfig: "cycle_time" 100ms each mux/carConfigMultiplexer - later firmware has muxes 6 & 7, needed?
CAN_frame TESLA_7FF_Mux7 = {.FD = false, static constexpr CAN_frame TESLA_7FF_Mux7 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x7FF, .ID = 0x7FF,
.data = {0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00}}; .data = {0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00}};
//0x722 BMS_bmbKeepAlive: "cycle_time" 100ms, should only be sent when testing packs or diagnosing problems //0x722 BMS_bmbKeepAlive: "cycle_time" 100ms, should only be sent when testing packs or diagnosing problems
CAN_frame TESLA_722 = {.FD = false, static constexpr CAN_frame TESLA_722 = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x722, .ID = 0x722,
.data = {0x02, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}}; .data = {0x02, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}};
//0x25D CP_status: "cycle_time" 100ms, stops some cpMia errors, but not necessary for standalone pack operation so not used/necessary. Note CP_type for different regions, the below has "IEC_CCS" //0x25D CP_status: "cycle_time" 100ms, stops some cpMia errors, but not necessary for standalone pack operation so not used/necessary. Note CP_type for different regions, the below has "IEC_CCS"
CAN_frame TESLA_25D = {.FD = false, static constexpr CAN_frame TESLA_25D = {.FD = false,
.ext_ID = false, .ext_ID = false,
.DLC = 8, .DLC = 8,
.ID = 0x25D, .ID = 0x25D,
.data = {0x37, 0x41, 0x01, 0x16, 0x08, 0x00, 0x00, 0x00}}; .data = {0x37, 0x41, 0x01, 0x16, 0x08, 0x00, 0x00, 0x00}};
//0x602 BMS UDS diagnostic request: on demand //0x602 BMS UDS diagnostic request: on demand
CAN_frame TESLA_602 = {.FD = false, CAN_frame TESLA_602 = {.FD = false,
@ -473,11 +477,12 @@ class TeslaBattery : public CanBattery {
.data = {0x02, 0x27, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00}}; // Define initial UDS request .data = {0x02, 0x27, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00}}; // Define initial UDS request
//0x610 BMS Query UDS request: on demand //0x610 BMS Query UDS request: on demand
CAN_frame TESLA_610 = {.FD = false, static constexpr CAN_frame TESLA_610 = {
.ext_ID = false, .FD = false,
.DLC = 8, .ext_ID = false,
.ID = 0x610, .DLC = 8,
.data = {0x02, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}}; // Define initial UDS request .ID = 0x610,
.data = {0x02, 0x10, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}}; // Define initial UDS request
uint8_t stateMachineClearIsolationFault = 0xFF; uint8_t stateMachineClearIsolationFault = 0xFF;
uint8_t stateMachineBMSReset = 0xFF; uint8_t stateMachineBMSReset = 0xFF;

View file

@ -193,7 +193,7 @@ bool init_CAN() {
return true; return true;
} }
void transmit_can_frame_to_interface(CAN_frame* tx_frame, int interface) { void transmit_can_frame_to_interface(const CAN_frame* tx_frame, int interface) {
if (!allowed_to_send_CAN) { if (!allowed_to_send_CAN) {
return; return;
} }

View file

@ -6,7 +6,7 @@
extern bool use_canfd_as_can; extern bool use_canfd_as_can;
void dump_can_frame(CAN_frame& frame, frameDirection msgDir); void dump_can_frame(CAN_frame& frame, frameDirection msgDir);
void transmit_can_frame_to_interface(CAN_frame* tx_frame, int interface); void transmit_can_frame_to_interface(const CAN_frame* tx_frame, int interface);
class CanReceiver; class CanReceiver;

View file

@ -1,7 +1,7 @@
#include "../../Software/src/communication/Transmitter.h" #include "../../Software/src/communication/Transmitter.h"
#include "../../Software/src/communication/can/comm_can.h" #include "../../Software/src/communication/can/comm_can.h"
void transmit_can_frame_to_interface(CAN_frame* tx_frame, int interface) {} void transmit_can_frame_to_interface(const CAN_frame* tx_frame, int interface) {}
void register_can_receiver(CanReceiver* receiver, CAN_Interface interface, CAN_Speed speed) {} void register_can_receiver(CanReceiver* receiver, CAN_Interface interface, CAN_Speed speed) {}