From b9c9ecd301c1a0fd988cc25d5659c3874c72f14e Mon Sep 17 00:00:00 2001 From: Daniel Nakhooda Date: Mon, 23 Feb 2026 19:14:58 -0500 Subject: [PATCH 01/12] msb additions --- can-messages/msb.json | 625 ++++++++++++++++++++---------------------- 1 file changed, 304 insertions(+), 321 deletions(-) diff --git a/can-messages/msb.json b/can-messages/msb.json index 7e74f30..607873e 100644 --- a/can-messages/msb.json +++ b/can-messages/msb.json @@ -1,61 +1,6 @@ [ { - "id": "0x602", - "desc": "Front MSB Env", - "points": [ - { - "size": 16, - "name": "temp", - "c_type": "float", - "formatter": { - "key": "divide", - "arg": 10 - }, - "sim": { - "min": 0, - "max": 80, - "inc_min": 0.01, - "inc_max": 25 - } - }, - { - "size": 16, - "name": "humidity", - "c_type": "float", - "formatter": { - "key": "divide", - "arg": 10 - }, - "sim": { - "min": 20, - "max": 80, - "inc_min": 1, - "inc_max": 2.5 - } - } - ], - "fields": [ - { - "name": "MSB/F/Temp", - "unit": "C", - "doc": "Temperature of board", - "values": [ - 1 - ] - }, - { - "name": "MSB/F/Humidity", - "unit": "", - "doc": "Humidity of board", - "values": [ - 2 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0x603", + "id": "0xBAB", "desc": "Front MSB Accel", "points": [ { @@ -110,7 +55,7 @@ "sim_freq": 500 }, { - "id": "0x604", + "id": "0xBAC", "desc": "Front MSB Gyro", "points": [ { @@ -165,88 +110,119 @@ "sim_freq": 500 }, { - "id": "0x605", - "desc": "Front MSB Strain", + "id": "0xBAD", + "desc": "Front MSB Mag", "points": [ { - "size": 32, - "name": "strain1", - "c_type": "uint32_t", - "sim": { - "min": 0, - "max": 10, - "inc_min": 0.001, - "inc_max": 0.02 - } + "size": 16, + "name": "x_mag", + "c_type": "float", + "signed": true }, { - "size": 32, - "name": "strain2", - "c_type": "uint32_t", - "sim": { - "min": 0, - "max": 10, - "inc_min": 0.001, - "inc_max": 0.02 - } + "size": 16, + "name": "y_mag", + "c_type": "float", + "signed": true + }, + { + "size": 16, + "name": "z_mag", + "c_type": "float", + "signed": true } ], "fields": [ { - "name": "MSB/F/Strain", - "unit": "", - "doc": "Strain readings", + "name": "MSB/F/Mag", + "unit": "mgauss", + "doc": "Magnetometer readings from the board", "values": [ 1, - 2 + 2, + 3 ] } ], "sim_freq": 500 }, { - "id": "0x606", - "desc": "Front Shockpot", + "id": "0xBAE", + "desc": "Front MSB Orientation", "points": [ { - "size": 32, - "name": "shock1", + "size": 16, + "name": "x_fdeg", "c_type": "float", - "ieee754_f32": true, + "signed": true, "sim": { - "min": 0, - "max": 3, - "inc_min": 0.01, - "inc_max": 0.5 + "min": -180, + "max": 180, + "inc_min": 1, + "inc_max": 30 } }, { "size": 16, - "name": "shock1_raw", - "c_type": "uint16_t", - "endianness": "little", + "name": "y_fdeg", + "c_type": "float", + "signed": true, "sim": { - "min": 0, - "max": 4095, + "min": -180, + "max": 180, "inc_min": 1, - "inc_max": 20 + "inc_max": 30 + } + }, + { + "size": 16, + "name": "z_fdeg", + "c_type": "float", + "signed": true, + "sim": { + "min": -180, + "max": 180, + "inc_min": 1, + "inc_max": 30 } } ], "fields": [ { - "name": "MSB/F/Shock", - "unit": "in", - "doc": "Shuck deflection", + "name": "MSB/F/Orientation", + "unit": "Deg", + "doc": "MSB orientation as a result of sensor fusion", "values": [ - 1 + 1, + 2, + 3 ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDAA", + "desc": "Front MSB Strain 1 and 2", + "points": [ + { + "size": 32, + "name": "strain1", + "c_type": "uint32_t" }, { - "name": "MSB/F/ShockRaw", + "size": 32, + "name": "strain2", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/F/Strain1", "unit": "", - "doc": "Raw shock value", + "doc": "Strain 1 and 2 readings", "values": [ + 1, 2 ] } @@ -254,174 +230,116 @@ "sim_freq": 500 }, { - "id": "0x607", - "desc": "Front Ride Height", + "id": "0xDAB", + "desc": "Front MSB Strain 3 and 4", "points": [ { - "size": 16, - "name": "rh", - "c_type": "float", - "signed": true, - "sim": { - "min": 0, - "max": 10, - "inc_min": 0.001, - "inc_max": 0.02 - } + "size": 32, + "name": "strain3", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "strain4", + "c_type": "uint32_t" } ], "fields": [ { - "name": "MSB/F/RideHeight", + "name": "MSB/F/Strain2", "unit": "", - "doc": "Ride height to sensor", + "doc": "Strain 3 and 4 readings", "values": [ - 1 + 1, + 2 ] } ], "sim_freq": 500 }, { - "id": "0x608", - "desc": "Front Wheel Temp", + "id": "0xDAE", + "desc": "Front Shockpot", "points": [ { - "size": 16, - "name": "wheel_temp", - "c_type": "float", - "sim": { - "min": 0, - "max": 110, - "inc_min": 0.5, - "inc_max": 1.5 - } + "size": 32, + "name": "shock1", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "shock2", + "c_type": "uint32_t" } ], "fields": [ { - "name": "MSB/F/WheelTemp", + "name": "MSB/F/Shock", "unit": "", - "doc": "As-measured wheel temperature", + "doc": "Shock Pot readings", "values": [ - 1 + 1, + 2 ] } ], "sim_freq": 500 }, { - "id": "0x609", - "desc": "Front MSB Orientation", + "id": "0xDAF", + "desc": "Front MSB Load Cells", "points": [ { - "size": 16, - "name": "x_fdeg", - "c_type": "float", - "signed": true, - "sim": { - "min": -180, - "max": 180, - "inc_min": 1, - "inc_max": 30 - } - }, - { - "size": 16, - "name": "y_fdeg", - "c_type": "float", - "signed": true, - "sim": { - "min": -180, - "max": 180, - "inc_min": 1, - "inc_max": 30 - } + "size": 32, + "name": "cell1", + "c_type": "uint32_t" }, { - "size": 16, - "name": "z_fdeg", - "c_type": "float", - "signed": true, - "sim": { - "min": -180, - "max": 180, - "inc_min": 1, - "inc_max": 30 - } + "size": 32, + "name": "cell2", + "c_type": "uint32_t" } ], "fields": [ { - "name": "MSB/F/Orientation", - "unit": "Deg", - "doc": "MSB orientation as a result of sensor fusion", + "name": "MSB/F/Cells", + "unit": "", + "doc": "Load Cell readings", "values": [ 1, - 2, - 3 + 2 ] } ], "sim_freq": 500 }, { - "id": "0x622", - "desc": "Back MSB Env", + "id": "0xDAD", + "desc": "Front MSB Wheel Angle", "points": [ { - "size": 16, - "name": "temp", - "c_type": "float", - "formatter": { - "key": "divide", - "arg": 10 - }, - "sim": { - "min": 0, - "max": 80, - "inc_min": 0.01, - "inc_max": 25 - } - }, - { - "size": 16, - "name": "humidity", - "c_type": "float", - "formatter": { - "key": "divide", - "arg": 10 - }, - "sim": { - "min": 20, - "max": 80, - "inc_min": 1, - "inc_max": 2.5 - } + "size": 32, + "name": "angle1", + "c_type": "uint32_t" } ], "fields": [ { - "name": "MSB/B/Temp", - "unit": "C", - "doc": "Temperature of board", - "values": [ - 1 - ] - }, - { - "name": "MSB/B/Humidity", + "name": "MSB/F/Angle", "unit": "", - "doc": "Humidity of board", + "doc": "Wheel Angle readings", "values": [ - 2 + 1 ] } ], "sim_freq": 500 }, + + + { - "id": "0x623", + "id": "0xBBF", "desc": "Back MSB Accel", "points": [ { @@ -463,7 +381,7 @@ ], "fields": [ { - "name": "MSB/B/Accel", + "name": "MSB/F/Accel", "unit": "mg", "doc": "IMU readings from the board", "values": [ @@ -476,7 +394,7 @@ "sim_freq": 500 }, { - "id": "0x624", + "id": "0xBC0", "desc": "Back MSB Gyro", "points": [ { @@ -518,7 +436,7 @@ ], "fields": [ { - "name": "MSB/B/Gyro", + "name": "MSB/F/Gyro", "unit": "mdps", "doc": "Gyro readings from the board", "values": [ @@ -531,88 +449,119 @@ "sim_freq": 500 }, { - "id": "0x625", - "desc": "Back MSB Strain", + "id": "0xBC1", + "desc": "Back MSB Mag", "points": [ { - "size": 32, - "name": "strain1", - "c_type": "uint32_t", - "sim": { - "min": 0, - "max": 10, - "inc_min": 0.001, - "inc_max": 0.02 - } + "size": 16, + "name": "x_mag", + "c_type": "float", + "signed": true }, { - "size": 32, - "name": "strain2", - "c_type": "uint32_t", - "sim": { - "min": 0, - "max": 10, - "inc_min": 0.001, - "inc_max": 0.02 - } + "size": 16, + "name": "y_mag", + "c_type": "float", + "signed": true + }, + { + "size": 16, + "name": "z_mag", + "c_type": "float", + "signed": true } ], "fields": [ { - "name": "MSB/B/Strain", - "unit": "", - "doc": "Strain readings", + "name": "MSB/F/Mag", + "unit": "mgauss", + "doc": "Magnetometer readings from the board", "values": [ 1, - 2 + 2, + 3 ] } ], "sim_freq": 500 }, { - "id": "0x626", - "desc": "Back Shockpot", + "id": "0xBC2", + "desc": "Back MSB Orientation", "points": [ { - "size": 32, - "name": "shock1", + "size": 16, + "name": "x_fdeg", "c_type": "float", - "ieee754_f32": true, + "signed": true, "sim": { - "min": 0, - "max": 3, - "inc_min": 0.01, - "inc_max": 0.5 + "min": -180, + "max": 180, + "inc_min": 1, + "inc_max": 30 } }, { "size": 16, - "name": "shock1_raw", - "c_type": "uint16_t", - "endianness": "little", + "name": "y_fdeg", + "c_type": "float", + "signed": true, "sim": { - "min": 0, - "max": 4095, + "min": -180, + "max": 180, "inc_min": 1, - "inc_max": 20 + "inc_max": 30 + } + }, + { + "size": 16, + "name": "z_fdeg", + "c_type": "float", + "signed": true, + "sim": { + "min": -180, + "max": 180, + "inc_min": 1, + "inc_max": 30 } } ], "fields": [ { - "name": "MSB/B/Shock", - "unit": "in", - "doc": "Shuck deflection", + "name": "MSB/F/Orientation", + "unit": "Deg", + "doc": "MSB orientation as a result of sensor fusion", "values": [ - 1 + 1, + 2, + 3 ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDBE", + "desc": "Back MSB Strain 1 and 2", + "points": [ + { + "size": 32, + "name": "strain1", + "c_type": "uint32_t" }, { - "name": "MSB/B/ShockRaw", + "size": 32, + "name": "strain2", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/F/Strain1", "unit": "", - "doc": "Raw shock value", + "doc": "Strain 1 and 2 readings", "values": [ + 1, 2 ] } @@ -620,55 +569,104 @@ "sim_freq": 500 }, { - "id": "0x627", - "desc": "Back Ride Height", + "id": "0xDBF", + "desc": "Back MSB Strain 3 and 4", "points": [ { - "size": 16, - "name": "rh", - "c_type": "float", - "signed": true, - "sim": { - "min": 0, - "max": 10, - "inc_min": 0.001, - "inc_max": 0.02 - } + "size": 32, + "name": "strain3", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "strain4", + "c_type": "uint32_t" } ], "fields": [ { - "name": "MSB/B/RideHeight", + "name": "MSB/F/Strain2", "unit": "", - "doc": "Ride height to sensor", + "doc": "Strain 3 and 4 readings", "values": [ - 1 + 1, + 2 ] } ], "sim_freq": 500 }, { - "id": "0x628", - "desc": "Back Wheel Temp", + "id": "0xDC2", + "desc": "Back Shockpot", "points": [ { - "size": 16, - "name": "wheel_temp", - "c_type": "float", - "sim": { - "min": 0, - "max": 110, - "inc_min": 0.5, - "inc_max": 1.5 - } + "size": 32, + "name": "shock1", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "shock2", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/F/Shock", + "unit": "", + "doc": "Shock Pot readings", + "values": [ + 1, + 2 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDC3", + "desc": "Back MSB Load Cells", + "points": [ + { + "size": 32, + "name": "cell1", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "cell2", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/F/Cells", + "unit": "", + "doc": "Load Cell readings", + "values": [ + 1, + 2 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDAC", + "desc": "Back MSB Thermocouple", + "points": [ + { + "size": 32, + "name": "thermo1", + "c_type": "uint32_t" } ], "fields": [ { - "name": "MSB/B/WheelTemp", + "name": "MSB/F/Thermo", "unit": "", - "doc": "As-measured wheel temperature", + "doc": "Thermocouple readings", "values": [ 1 ] @@ -677,55 +675,40 @@ "sim_freq": 500 }, { - "id": "0x629", - "desc": "Back MSB Orientation", + "id": "0xBAF", + "desc": "Back MSB TOF", "points": [ { "size": 16, - "name": "x_fdeg", - "c_type": "float", - "signed": true, - "sim": { - "min": -180, - "max": 180, - "inc_min": 1, - "inc_max": 30 - } + "name": "quadrant1", + "c_type": "uint16_t" }, { "size": 16, - "name": "y_fdeg", - "c_type": "float", - "signed": true, - "sim": { - "min": -180, - "max": 180, - "inc_min": 1, - "inc_max": 30 - } + "name": "quadrant2", + "c_type": "uint16_t" }, { "size": 16, - "name": "z_fdeg", - "c_type": "float", - "signed": true, - "sim": { - "min": -180, - "max": 180, - "inc_min": 1, - "inc_max": 30 - } + "name": "quadrant3", + "c_type": "uint16_t" + }, + { + "size": 16, + "name": "quadrant4", + "c_type": "uint16_t" } ], "fields": [ { - "name": "MSB/B/Orientation", - "unit": "Deg", - "doc": "MSB orientation as a result of sensor fusion", + "name": "MSB/F/TOF", + "unit": "", + "doc": "Time of flight readings", "values": [ 1, 2, - 3 + 3, + 4 ] } ], From 4576b2c799f925190ff3994fc2b05da99e3479d0 Mon Sep 17 00:00:00 2001 From: Daniel Nakhooda Date: Mon, 23 Feb 2026 19:15:18 -0500 Subject: [PATCH 02/12] remove space --- can-messages/msb.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/can-messages/msb.json b/can-messages/msb.json index 607873e..08441a4 100644 --- a/can-messages/msb.json +++ b/can-messages/msb.json @@ -335,9 +335,6 @@ ], "sim_freq": 500 }, - - - { "id": "0xBBF", "desc": "Back MSB Accel", From f0db15e9724b03b452c5b39828389bc689b1e3d2 Mon Sep 17 00:00:00 2001 From: Daniel Nakhooda Date: Mon, 23 Feb 2026 19:22:21 -0500 Subject: [PATCH 03/12] fixes --- can-messages/msb.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/can-messages/msb.json b/can-messages/msb.json index 08441a4..6b1f3c1 100644 --- a/can-messages/msb.json +++ b/can-messages/msb.json @@ -203,7 +203,7 @@ }, { "id": "0xDAA", - "desc": "Front MSB Strain 1 and 2", + "desc": "Front MSB Strain One and Two", "points": [ { "size": 32, @@ -231,7 +231,7 @@ }, { "id": "0xDAB", - "desc": "Front MSB Strain 3 and 4", + "desc": "Front MSB Strain Three and Four", "points": [ { "size": 32, @@ -378,7 +378,7 @@ ], "fields": [ { - "name": "MSB/F/Accel", + "name": "MSB/B/Accel", "unit": "mg", "doc": "IMU readings from the board", "values": [ @@ -433,7 +433,7 @@ ], "fields": [ { - "name": "MSB/F/Gyro", + "name": "MSB/B/Gyro", "unit": "mdps", "doc": "Gyro readings from the board", "values": [ @@ -470,7 +470,7 @@ ], "fields": [ { - "name": "MSB/F/Mag", + "name": "MSB/B/Mag", "unit": "mgauss", "doc": "Magnetometer readings from the board", "values": [ @@ -525,7 +525,7 @@ ], "fields": [ { - "name": "MSB/F/Orientation", + "name": "MSB/B/Orientation", "unit": "Deg", "doc": "MSB orientation as a result of sensor fusion", "values": [ @@ -539,7 +539,7 @@ }, { "id": "0xDBE", - "desc": "Back MSB Strain 1 and 2", + "desc": "Back MSB Strain One and Two", "points": [ { "size": 32, @@ -554,7 +554,7 @@ ], "fields": [ { - "name": "MSB/F/Strain1", + "name": "MSB/B/Strain1", "unit": "", "doc": "Strain 1 and 2 readings", "values": [ @@ -567,7 +567,7 @@ }, { "id": "0xDBF", - "desc": "Back MSB Strain 3 and 4", + "desc": "Back MSB Strain Three and Four", "points": [ { "size": 32, @@ -582,7 +582,7 @@ ], "fields": [ { - "name": "MSB/F/Strain2", + "name": "MSB/B/Strain2", "unit": "", "doc": "Strain 3 and 4 readings", "values": [ @@ -610,7 +610,7 @@ ], "fields": [ { - "name": "MSB/F/Shock", + "name": "MSB/B/Shock", "unit": "", "doc": "Shock Pot readings", "values": [ @@ -638,7 +638,7 @@ ], "fields": [ { - "name": "MSB/F/Cells", + "name": "MSB/B/Cells", "unit": "", "doc": "Load Cell readings", "values": [ @@ -661,7 +661,7 @@ ], "fields": [ { - "name": "MSB/F/Thermo", + "name": "MSB/B/Thermo", "unit": "", "doc": "Thermocouple readings", "values": [ @@ -698,7 +698,7 @@ ], "fields": [ { - "name": "MSB/F/TOF", + "name": "MSB/B/TOF", "unit": "", "doc": "Time of flight readings", "values": [ From 0d45ccfa49e95e09a79427949f1a99587412125a Mon Sep 17 00:00:00 2001 From: Daniel Nakhooda Date: Mon, 23 Feb 2026 20:21:37 -0500 Subject: [PATCH 04/12] fix duplicate key --- can-messages/msb.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/can-messages/msb.json b/can-messages/msb.json index 6b1f3c1..a9e7b5a 100644 --- a/can-messages/msb.json +++ b/can-messages/msb.json @@ -110,7 +110,7 @@ "sim_freq": 500 }, { - "id": "0xBAD", + "id": "0xBB0", "desc": "Front MSB Mag", "points": [ { @@ -446,7 +446,7 @@ "sim_freq": 500 }, { - "id": "0xBC1", + "id": "0xBC4", "desc": "Back MSB Mag", "points": [ { From 9de5365184cddb64ba75b0de1ac3eaf1f6d3ab7e Mon Sep 17 00:00:00 2001 From: EhlOps Date: Tue, 10 Mar 2026 19:26:58 -0400 Subject: [PATCH 05/12] Create RPM hall effect CAN msg --- can-messages/msb.json | 85 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/can-messages/msb.json b/can-messages/msb.json index a9e7b5a..50890a9 100644 --- a/can-messages/msb.json +++ b/can-messages/msb.json @@ -710,5 +710,90 @@ } ], "sim_freq": 500 + }, + { + "id": "0xDB0", + "desc": "Wheel RPM", + "points": [ + { + "size": 16, + "name": "Front Right", + "c_type": "uint16_t", + "sim": { + "min": 0, + "max": 10000, + "inc_min": 50, + "inc_max": 1500 + } + }, + { + "size": 16, + "name": "Front Left", + "c_type": "uint16_t", + "sim": { + "min": 0, + "max": 10000, + "inc_min": 50, + "inc_max": 1500 + } + }, + { + "size": 16, + "name": "Rear Right", + "c_type": "uint16_t", + "sim": { + "min": 0, + "max": 10000, + "inc_min": 50, + "inc_max": 1500 + } + }, + { + "size": 16, + "name": "Rear Left", + "c_type": "uint16_t", + "sim": { + "min": 0, + "max": 10000, + "inc_min": 50, + "inc_max": 1500 + } + } + ], + "fields": [ + { + "name": "MSB/F/FR_RPM", + "unit": "RPM", + "doc": "RPM value of front right wheel", + "values": [ + 1 + ] + }, + { + "name": "MSB/F/FL_RPM", + "unit": "RPM", + "doc": "RPM value of front left wheel", + "values": [ + 2 + ] + }, + { + "name": "MSB/B/RR_RPM", + "unit": "RPM", + "doc": "RPM value of rear right wheel", + "values": [ + 3 + ] + }, + { + "name": "MSB/B/RL_RPM", + "unit": "RPM", + "doc": "RPM value of rear left wheel", + "values": [ + 4 + ] + } + ], + "sim_freq": 500 } ] From 6c6ad2b1f6e01d3aa84988dd619da0e06627ca89 Mon Sep 17 00:00:00 2001 From: EhlOps Date: Thu, 12 Mar 2026 17:36:04 -0400 Subject: [PATCH 06/12] Update MSB defs --- can-messages/msb.json | 1530 ++++++++++++++++++++--------------------- 1 file changed, 733 insertions(+), 797 deletions(-) diff --git a/can-messages/msb.json b/can-messages/msb.json index 50890a9..06bcfe8 100644 --- a/can-messages/msb.json +++ b/can-messages/msb.json @@ -1,799 +1,735 @@ [ - { - "id": "0xBAB", - "desc": "Front MSB Accel", - "points": [ - { - "size": 16, - "name": "x_force", - "c_type": "float", - "signed": true, - "sim": { - "min": -2000, - "max": 2000, - "inc_min": 0.1, - "inc_max": 2.5 - } - }, - { - "size": 16, - "name": "y_force", - "c_type": "float", - "signed": true, - "sim": { - "min": -2000, - "max": 2000, - "inc_min": 0.1, - "inc_max": 2.5 - } - }, - { - "size": 16, - "name": "z_force", - "c_type": "float", - "signed": true, - "sim": { - "min": -2000, - "max": 2000, - "inc_min": 0.1, - "inc_max": 2.5 - } - } - ], - "fields": [ - { - "name": "MSB/F/Accel", - "unit": "mg", - "doc": "IMU readings from the board", - "values": [ - 1, - 2, - 3 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xBAC", - "desc": "Front MSB Gyro", - "points": [ - { - "size": 16, - "name": "x_deg", - "c_type": "float", - "signed": true, - "sim": { - "min": -500000, - "max": 500000, - "inc_min": 10, - "inc_max": 1000 - } - }, - { - "size": 16, - "name": "y_deg", - "c_type": "float", - "signed": true, - "sim": { - "min": -500000, - "max": 500000, - "inc_min": 10, - "inc_max": 1000 - } - }, - { - "size": 16, - "name": "z_deg", - "c_type": "float", - "signed": true, - "sim": { - "min": -500000, - "max": 500000, - "inc_min": 10, - "inc_max": 1000 - } - } - ], - "fields": [ - { - "name": "MSB/F/Gyro", - "unit": "mdps", - "doc": "Gyro readings from the board", - "values": [ - 1, - 2, - 3 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xBB0", - "desc": "Front MSB Mag", - "points": [ - { - "size": 16, - "name": "x_mag", - "c_type": "float", - "signed": true - }, - { - "size": 16, - "name": "y_mag", - "c_type": "float", - "signed": true - }, - { - "size": 16, - "name": "z_mag", - "c_type": "float", - "signed": true - } - ], - "fields": [ - { - "name": "MSB/F/Mag", - "unit": "mgauss", - "doc": "Magnetometer readings from the board", - "values": [ - 1, - 2, - 3 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xBAE", - "desc": "Front MSB Orientation", - "points": [ - { - "size": 16, - "name": "x_fdeg", - "c_type": "float", - "signed": true, - "sim": { - "min": -180, - "max": 180, - "inc_min": 1, - "inc_max": 30 - } - }, - { - "size": 16, - "name": "y_fdeg", - "c_type": "float", - "signed": true, - "sim": { - "min": -180, - "max": 180, - "inc_min": 1, - "inc_max": 30 - } - }, - { - "size": 16, - "name": "z_fdeg", - "c_type": "float", - "signed": true, - "sim": { - "min": -180, - "max": 180, - "inc_min": 1, - "inc_max": 30 - } - } - ], - "fields": [ - { - "name": "MSB/F/Orientation", - "unit": "Deg", - "doc": "MSB orientation as a result of sensor fusion", - "values": [ - 1, - 2, - 3 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDAA", - "desc": "Front MSB Strain One and Two", - "points": [ - { - "size": 32, - "name": "strain1", - "c_type": "uint32_t" - }, - { - "size": 32, - "name": "strain2", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/F/Strain1", - "unit": "", - "doc": "Strain 1 and 2 readings", - "values": [ - 1, - 2 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDAB", - "desc": "Front MSB Strain Three and Four", - "points": [ - { - "size": 32, - "name": "strain3", - "c_type": "uint32_t" - }, - { - "size": 32, - "name": "strain4", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/F/Strain2", - "unit": "", - "doc": "Strain 3 and 4 readings", - "values": [ - 1, - 2 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDAE", - "desc": "Front Shockpot", - "points": [ - { - "size": 32, - "name": "shock1", - "c_type": "uint32_t" - }, - { - "size": 32, - "name": "shock2", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/F/Shock", - "unit": "", - "doc": "Shock Pot readings", - "values": [ - 1, - 2 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDAF", - "desc": "Front MSB Load Cells", - "points": [ - { - "size": 32, - "name": "cell1", - "c_type": "uint32_t" - }, - { - "size": 32, - "name": "cell2", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/F/Cells", - "unit": "", - "doc": "Load Cell readings", - "values": [ - 1, - 2 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDAD", - "desc": "Front MSB Wheel Angle", - "points": [ - { - "size": 32, - "name": "angle1", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/F/Angle", - "unit": "", - "doc": "Wheel Angle readings", - "values": [ - 1 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xBBF", - "desc": "Back MSB Accel", - "points": [ - { - "size": 16, - "name": "x_force", - "c_type": "float", - "signed": true, - "sim": { - "min": -2000, - "max": 2000, - "inc_min": 0.1, - "inc_max": 2.5 - } - }, - { - "size": 16, - "name": "y_force", - "c_type": "float", - "signed": true, - "sim": { - "min": -2000, - "max": 2000, - "inc_min": 0.1, - "inc_max": 2.5 - } - }, - { - "size": 16, - "name": "z_force", - "c_type": "float", - "signed": true, - "sim": { - "min": -2000, - "max": 2000, - "inc_min": 0.1, - "inc_max": 2.5 - } - } - ], - "fields": [ - { - "name": "MSB/B/Accel", - "unit": "mg", - "doc": "IMU readings from the board", - "values": [ - 1, - 2, - 3 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xBC0", - "desc": "Back MSB Gyro", - "points": [ - { - "size": 16, - "name": "x_deg", - "c_type": "float", - "signed": true, - "sim": { - "min": -500000, - "max": 500000, - "inc_min": 10, - "inc_max": 1000 - } - }, - { - "size": 16, - "name": "y_deg", - "c_type": "float", - "signed": true, - "sim": { - "min": -500000, - "max": 500000, - "inc_min": 10, - "inc_max": 1000 - } - }, - { - "size": 16, - "name": "z_deg", - "c_type": "float", - "signed": true, - "sim": { - "min": -500000, - "max": 500000, - "inc_min": 10, - "inc_max": 1000 - } - } - ], - "fields": [ - { - "name": "MSB/B/Gyro", - "unit": "mdps", - "doc": "Gyro readings from the board", - "values": [ - 1, - 2, - 3 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xBC4", - "desc": "Back MSB Mag", - "points": [ - { - "size": 16, - "name": "x_mag", - "c_type": "float", - "signed": true - }, - { - "size": 16, - "name": "y_mag", - "c_type": "float", - "signed": true - }, - { - "size": 16, - "name": "z_mag", - "c_type": "float", - "signed": true - } - ], - "fields": [ - { - "name": "MSB/B/Mag", - "unit": "mgauss", - "doc": "Magnetometer readings from the board", - "values": [ - 1, - 2, - 3 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xBC2", - "desc": "Back MSB Orientation", - "points": [ - { - "size": 16, - "name": "x_fdeg", - "c_type": "float", - "signed": true, - "sim": { - "min": -180, - "max": 180, - "inc_min": 1, - "inc_max": 30 - } - }, - { - "size": 16, - "name": "y_fdeg", - "c_type": "float", - "signed": true, - "sim": { - "min": -180, - "max": 180, - "inc_min": 1, - "inc_max": 30 - } - }, - { - "size": 16, - "name": "z_fdeg", - "c_type": "float", - "signed": true, - "sim": { - "min": -180, - "max": 180, - "inc_min": 1, - "inc_max": 30 - } - } - ], - "fields": [ - { - "name": "MSB/B/Orientation", - "unit": "Deg", - "doc": "MSB orientation as a result of sensor fusion", - "values": [ - 1, - 2, - 3 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDBE", - "desc": "Back MSB Strain One and Two", - "points": [ - { - "size": 32, - "name": "strain1", - "c_type": "uint32_t" - }, - { - "size": 32, - "name": "strain2", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/B/Strain1", - "unit": "", - "doc": "Strain 1 and 2 readings", - "values": [ - 1, - 2 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDBF", - "desc": "Back MSB Strain Three and Four", - "points": [ - { - "size": 32, - "name": "strain3", - "c_type": "uint32_t" - }, - { - "size": 32, - "name": "strain4", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/B/Strain2", - "unit": "", - "doc": "Strain 3 and 4 readings", - "values": [ - 1, - 2 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDC2", - "desc": "Back Shockpot", - "points": [ - { - "size": 32, - "name": "shock1", - "c_type": "uint32_t" - }, - { - "size": 32, - "name": "shock2", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/B/Shock", - "unit": "", - "doc": "Shock Pot readings", - "values": [ - 1, - 2 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDC3", - "desc": "Back MSB Load Cells", - "points": [ - { - "size": 32, - "name": "cell1", - "c_type": "uint32_t" - }, - { - "size": 32, - "name": "cell2", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/B/Cells", - "unit": "", - "doc": "Load Cell readings", - "values": [ - 1, - 2 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDAC", - "desc": "Back MSB Thermocouple", - "points": [ - { - "size": 32, - "name": "thermo1", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/B/Thermo", - "unit": "", - "doc": "Thermocouple readings", - "values": [ - 1 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xBAF", - "desc": "Back MSB TOF", - "points": [ - { - "size": 16, - "name": "quadrant1", - "c_type": "uint16_t" - }, - { - "size": 16, - "name": "quadrant2", - "c_type": "uint16_t" - }, - { - "size": 16, - "name": "quadrant3", - "c_type": "uint16_t" - }, - { - "size": 16, - "name": "quadrant4", - "c_type": "uint16_t" - } - ], - "fields": [ - { - "name": "MSB/B/TOF", - "unit": "", - "doc": "Time of flight readings", - "values": [ - 1, - 2, - 3, - 4 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDB0", - "desc": "Wheel RPM", - "points": [ - { - "size": 16, - "name": "Front Right", - "c_type": "uint16_t", - "sim": { - "min": 0, - "max": 10000, - "inc_min": 50, - "inc_max": 1500 - } - }, - { - "size": 16, - "name": "Front Left", - "c_type": "uint16_t", - "sim": { - "min": 0, - "max": 10000, - "inc_min": 50, - "inc_max": 1500 - } - }, - { - "size": 16, - "name": "Rear Right", - "c_type": "uint16_t", - "sim": { - "min": 0, - "max": 10000, - "inc_min": 50, - "inc_max": 1500 - } - }, - { - "size": 16, - "name": "Rear Left", - "c_type": "uint16_t", - "sim": { - "min": 0, - "max": 10000, - "inc_min": 50, - "inc_max": 1500 - } - } - ], - "fields": [ - { - "name": "MSB/F/FR_RPM", - "unit": "RPM", - "doc": "RPM value of front right wheel", - "values": [ - 1 - ] - }, - { - "name": "MSB/F/FL_RPM", - "unit": "RPM", - "doc": "RPM value of front left wheel", - "values": [ - 2 - ] - }, - { - "name": "MSB/B/RR_RPM", - "unit": "RPM", - "doc": "RPM value of rear right wheel", - "values": [ - 3 - ] - }, - { - "name": "MSB/B/RL_RPM", - "unit": "RPM", - "doc": "RPM value of rear left wheel", - "values": [ - 4 - ] - } - ], - "sim_freq": 500 - } + { + "id": "0xBAB", + "desc": "Front MSB Accel", + "points": [ + { + "size": 16, + "name": "x_force", + "c_type": "float", + "signed": true, + "sim": { + "min": -2000, + "max": 2000, + "inc_min": 0.1, + "inc_max": 2.5 + } + }, + { + "size": 16, + "name": "y_force", + "c_type": "float", + "signed": true, + "sim": { + "min": -2000, + "max": 2000, + "inc_min": 0.1, + "inc_max": 2.5 + } + }, + { + "size": 16, + "name": "z_force", + "c_type": "float", + "signed": true, + "sim": { + "min": -2000, + "max": 2000, + "inc_min": 0.1, + "inc_max": 2.5 + } + } + ], + "fields": [ + { + "name": "MSB/F/Accel", + "unit": "mg", + "doc": "IMU readings from the board", + "values": [1, 2, 3] + } + ], + "sim_freq": 500 + }, + { + "id": "0xBAC", + "desc": "Front MSB Gyro", + "points": [ + { + "size": 16, + "name": "x_deg", + "c_type": "float", + "signed": true, + "sim": { + "min": -500000, + "max": 500000, + "inc_min": 10, + "inc_max": 1000 + } + }, + { + "size": 16, + "name": "y_deg", + "c_type": "float", + "signed": true, + "sim": { + "min": -500000, + "max": 500000, + "inc_min": 10, + "inc_max": 1000 + } + }, + { + "size": 16, + "name": "z_deg", + "c_type": "float", + "signed": true, + "sim": { + "min": -500000, + "max": 500000, + "inc_min": 10, + "inc_max": 1000 + } + } + ], + "fields": [ + { + "name": "MSB/F/Gyro", + "unit": "mdps", + "doc": "Gyro readings from the board", + "values": [1, 2, 3] + } + ], + "sim_freq": 500 + }, + { + "id": "0xBB0", + "desc": "Front MSB Mag", + "points": [ + { + "size": 16, + "name": "x_mag", + "c_type": "float", + "signed": true + }, + { + "size": 16, + "name": "y_mag", + "c_type": "float", + "signed": true + }, + { + "size": 16, + "name": "z_mag", + "c_type": "float", + "signed": true + } + ], + "fields": [ + { + "name": "MSB/F/Mag", + "unit": "mgauss", + "doc": "Magnetometer readings from the board", + "values": [1, 2, 3] + } + ], + "sim_freq": 500 + }, + { + "id": "0xBAE", + "desc": "Front MSB Orientation", + "points": [ + { + "size": 16, + "name": "x_fdeg", + "c_type": "float", + "signed": true, + "sim": { + "min": -180, + "max": 180, + "inc_min": 1, + "inc_max": 30 + } + }, + { + "size": 16, + "name": "y_fdeg", + "c_type": "float", + "signed": true, + "sim": { + "min": -180, + "max": 180, + "inc_min": 1, + "inc_max": 30 + } + }, + { + "size": 16, + "name": "z_fdeg", + "c_type": "float", + "signed": true, + "sim": { + "min": -180, + "max": 180, + "inc_min": 1, + "inc_max": 30 + } + } + ], + "fields": [ + { + "name": "MSB/F/Orientation", + "unit": "Deg", + "doc": "MSB orientation as a result of sensor fusion", + "values": [1, 2, 3] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDAA", + "desc": "Front MSB Strain One and Two", + "points": [ + { + "size": 32, + "name": "strain1", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "strain2", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/F/Strain1", + "unit": "", + "doc": "Strain 1 and 2 readings", + "values": [1, 2] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDAB", + "desc": "Front MSB Strain Three and Four", + "points": [ + { + "size": 32, + "name": "strain3", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "strain4", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/F/Strain2", + "unit": "", + "doc": "Strain 3 and 4 readings", + "values": [1, 2] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDAE", + "desc": "Front Shockpot", + "points": [ + { + "size": 32, + "name": "shock1", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "shock2", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/F/Shock", + "unit": "", + "doc": "Shock Pot readings", + "values": [1, 2] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDAF", + "desc": "Front MSB Load Cells", + "points": [ + { + "size": 32, + "name": "cell1", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "cell2", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/F/Cells", + "unit": "", + "doc": "Load Cell readings", + "values": [1, 2] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDAD", + "desc": "Front MSB Wheel Angle", + "points": [ + { + "size": 32, + "name": "angle1", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/F/Angle", + "unit": "", + "doc": "Wheel Angle readings", + "values": [1] + } + ], + "sim_freq": 500 + }, + { + "id": "0xBBF", + "desc": "Back MSB Accel", + "points": [ + { + "size": 16, + "name": "x_force", + "c_type": "float", + "signed": true, + "sim": { + "min": -2000, + "max": 2000, + "inc_min": 0.1, + "inc_max": 2.5 + } + }, + { + "size": 16, + "name": "y_force", + "c_type": "float", + "signed": true, + "sim": { + "min": -2000, + "max": 2000, + "inc_min": 0.1, + "inc_max": 2.5 + } + }, + { + "size": 16, + "name": "z_force", + "c_type": "float", + "signed": true, + "sim": { + "min": -2000, + "max": 2000, + "inc_min": 0.1, + "inc_max": 2.5 + } + } + ], + "fields": [ + { + "name": "MSB/B/Accel", + "unit": "mg", + "doc": "IMU readings from the board", + "values": [1, 2, 3] + } + ], + "sim_freq": 500 + }, + { + "id": "0xBC0", + "desc": "Back MSB Gyro", + "points": [ + { + "size": 16, + "name": "x_deg", + "c_type": "float", + "signed": true, + "sim": { + "min": -500000, + "max": 500000, + "inc_min": 10, + "inc_max": 1000 + } + }, + { + "size": 16, + "name": "y_deg", + "c_type": "float", + "signed": true, + "sim": { + "min": -500000, + "max": 500000, + "inc_min": 10, + "inc_max": 1000 + } + }, + { + "size": 16, + "name": "z_deg", + "c_type": "float", + "signed": true, + "sim": { + "min": -500000, + "max": 500000, + "inc_min": 10, + "inc_max": 1000 + } + } + ], + "fields": [ + { + "name": "MSB/B/Gyro", + "unit": "mdps", + "doc": "Gyro readings from the board", + "values": [1, 2, 3] + } + ], + "sim_freq": 500 + }, + { + "id": "0xBC4", + "desc": "Back MSB Mag", + "points": [ + { + "size": 16, + "name": "x_mag", + "c_type": "float", + "signed": true + }, + { + "size": 16, + "name": "y_mag", + "c_type": "float", + "signed": true + }, + { + "size": 16, + "name": "z_mag", + "c_type": "float", + "signed": true + } + ], + "fields": [ + { + "name": "MSB/B/Mag", + "unit": "mgauss", + "doc": "Magnetometer readings from the board", + "values": [1, 2, 3] + } + ], + "sim_freq": 500 + }, + { + "id": "0xBC2", + "desc": "Back MSB Orientation", + "points": [ + { + "size": 16, + "name": "x_fdeg", + "c_type": "float", + "signed": true, + "sim": { + "min": -180, + "max": 180, + "inc_min": 1, + "inc_max": 30 + } + }, + { + "size": 16, + "name": "y_fdeg", + "c_type": "float", + "signed": true, + "sim": { + "min": -180, + "max": 180, + "inc_min": 1, + "inc_max": 30 + } + }, + { + "size": 16, + "name": "z_fdeg", + "c_type": "float", + "signed": true, + "sim": { + "min": -180, + "max": 180, + "inc_min": 1, + "inc_max": 30 + } + } + ], + "fields": [ + { + "name": "MSB/B/Orientation", + "unit": "Deg", + "doc": "MSB orientation as a result of sensor fusion", + "values": [1, 2, 3] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDBE", + "desc": "Back MSB Strain One and Two", + "points": [ + { + "size": 32, + "name": "strain1", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "strain2", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/B/Strain1", + "unit": "", + "doc": "Strain 1 and 2 readings", + "values": [1, 2] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDBF", + "desc": "Back MSB Strain Three and Four", + "points": [ + { + "size": 32, + "name": "strain3", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "strain4", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/B/Strain2", + "unit": "", + "doc": "Strain 3 and 4 readings", + "values": [1, 2] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDC2", + "desc": "Back Shockpot", + "points": [ + { + "size": 32, + "name": "shock1", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "shock2", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/B/Shock", + "unit": "", + "doc": "Shock Pot readings", + "values": [1, 2] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDC3", + "desc": "Back MSB Load Cells", + "points": [ + { + "size": 32, + "name": "cell1", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "cell2", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/B/Cells", + "unit": "", + "doc": "Load Cell readings", + "values": [1, 2] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDAC", + "desc": "Back MSB Thermocouple", + "points": [ + { + "size": 32, + "name": "thermo1", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/B/Thermo", + "unit": "", + "doc": "Thermocouple readings", + "values": [1] + } + ], + "sim_freq": 500 + }, + { + "id": "0xBAF", + "desc": "Back MSB TOF", + "points": [ + { + "size": 16, + "name": "quadrant1", + "c_type": "uint16_t" + }, + { + "size": 16, + "name": "quadrant2", + "c_type": "uint16_t" + }, + { + "size": 16, + "name": "quadrant3", + "c_type": "uint16_t" + }, + { + "size": 16, + "name": "quadrant4", + "c_type": "uint16_t" + } + ], + "fields": [ + { + "name": "MSB/B/TOF", + "unit": "", + "doc": "Time of flight readings", + "values": [1, 2, 3, 4] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDB0", + "desc": "Front Wheel RPM", + "points": [ + { + "size": 16, + "name": "Front Right", + "c_type": "uint16_t", + "sim": { + "min": 0, + "max": 10000, + "inc_min": 50, + "inc_max": 1500 + } + }, + { + "size": 16, + "name": "Front Left", + "c_type": "uint16_t", + "sim": { + "min": 0, + "max": 10000, + "inc_min": 50, + "inc_max": 1500 + } + } + ], + "fields": [ + { + "name": "MSB/F/FR_RPM", + "unit": "RPM", + "doc": "RPM value of front right wheel", + "values": [1] + }, + { + "name": "MSB/F/FL_RPM", + "unit": "RPM", + "doc": "RPM value of front left wheel", + "values": [2] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDB1", + "desc": "Rear Wheel RPM", + "points": [ + { + "size": 16, + "name": "Rear Right", + "c_type": "uint16_t", + "sim": { + "min": 0, + "max": 10000, + "inc_min": 50, + "inc_max": 1500 + } + }, + { + "size": 16, + "name": "Rear Left", + "c_type": "uint16_t", + "sim": { + "min": 0, + "max": 10000, + "inc_min": 50, + "inc_max": 1500 + } + } + ], + "fields": [ + { + "name": "MSB/F/RR_RPM", + "unit": "RPM", + "doc": "RPM value of rear right wheel", + "values": [1] + }, + { + "name": "MSB/F/RL_RPM", + "unit": "RPM", + "doc": "RPM value of rear left wheel", + "values": [2] + } + ], + "sim_freq": 500 + } ] From 6cb043234f29f3eb8d17d2eb4fea5843577a81c8 Mon Sep 17 00:00:00 2001 From: EhlOps Date: Thu, 12 Mar 2026 17:49:52 -0400 Subject: [PATCH 07/12] Update MSB defs --- can-messages/msb.json | 1539 +++++++++++++++++++++-------------------- 1 file changed, 806 insertions(+), 733 deletions(-) diff --git a/can-messages/msb.json b/can-messages/msb.json index 06bcfe8..6e7cdc8 100644 --- a/can-messages/msb.json +++ b/can-messages/msb.json @@ -1,735 +1,808 @@ [ - { - "id": "0xBAB", - "desc": "Front MSB Accel", - "points": [ - { - "size": 16, - "name": "x_force", - "c_type": "float", - "signed": true, - "sim": { - "min": -2000, - "max": 2000, - "inc_min": 0.1, - "inc_max": 2.5 - } - }, - { - "size": 16, - "name": "y_force", - "c_type": "float", - "signed": true, - "sim": { - "min": -2000, - "max": 2000, - "inc_min": 0.1, - "inc_max": 2.5 - } - }, - { - "size": 16, - "name": "z_force", - "c_type": "float", - "signed": true, - "sim": { - "min": -2000, - "max": 2000, - "inc_min": 0.1, - "inc_max": 2.5 - } - } - ], - "fields": [ - { - "name": "MSB/F/Accel", - "unit": "mg", - "doc": "IMU readings from the board", - "values": [1, 2, 3] - } - ], - "sim_freq": 500 - }, - { - "id": "0xBAC", - "desc": "Front MSB Gyro", - "points": [ - { - "size": 16, - "name": "x_deg", - "c_type": "float", - "signed": true, - "sim": { - "min": -500000, - "max": 500000, - "inc_min": 10, - "inc_max": 1000 - } - }, - { - "size": 16, - "name": "y_deg", - "c_type": "float", - "signed": true, - "sim": { - "min": -500000, - "max": 500000, - "inc_min": 10, - "inc_max": 1000 - } - }, - { - "size": 16, - "name": "z_deg", - "c_type": "float", - "signed": true, - "sim": { - "min": -500000, - "max": 500000, - "inc_min": 10, - "inc_max": 1000 - } - } - ], - "fields": [ - { - "name": "MSB/F/Gyro", - "unit": "mdps", - "doc": "Gyro readings from the board", - "values": [1, 2, 3] - } - ], - "sim_freq": 500 - }, - { - "id": "0xBB0", - "desc": "Front MSB Mag", - "points": [ - { - "size": 16, - "name": "x_mag", - "c_type": "float", - "signed": true - }, - { - "size": 16, - "name": "y_mag", - "c_type": "float", - "signed": true - }, - { - "size": 16, - "name": "z_mag", - "c_type": "float", - "signed": true - } - ], - "fields": [ - { - "name": "MSB/F/Mag", - "unit": "mgauss", - "doc": "Magnetometer readings from the board", - "values": [1, 2, 3] - } - ], - "sim_freq": 500 - }, - { - "id": "0xBAE", - "desc": "Front MSB Orientation", - "points": [ - { - "size": 16, - "name": "x_fdeg", - "c_type": "float", - "signed": true, - "sim": { - "min": -180, - "max": 180, - "inc_min": 1, - "inc_max": 30 - } - }, - { - "size": 16, - "name": "y_fdeg", - "c_type": "float", - "signed": true, - "sim": { - "min": -180, - "max": 180, - "inc_min": 1, - "inc_max": 30 - } - }, - { - "size": 16, - "name": "z_fdeg", - "c_type": "float", - "signed": true, - "sim": { - "min": -180, - "max": 180, - "inc_min": 1, - "inc_max": 30 - } - } - ], - "fields": [ - { - "name": "MSB/F/Orientation", - "unit": "Deg", - "doc": "MSB orientation as a result of sensor fusion", - "values": [1, 2, 3] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDAA", - "desc": "Front MSB Strain One and Two", - "points": [ - { - "size": 32, - "name": "strain1", - "c_type": "uint32_t" - }, - { - "size": 32, - "name": "strain2", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/F/Strain1", - "unit": "", - "doc": "Strain 1 and 2 readings", - "values": [1, 2] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDAB", - "desc": "Front MSB Strain Three and Four", - "points": [ - { - "size": 32, - "name": "strain3", - "c_type": "uint32_t" - }, - { - "size": 32, - "name": "strain4", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/F/Strain2", - "unit": "", - "doc": "Strain 3 and 4 readings", - "values": [1, 2] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDAE", - "desc": "Front Shockpot", - "points": [ - { - "size": 32, - "name": "shock1", - "c_type": "uint32_t" - }, - { - "size": 32, - "name": "shock2", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/F/Shock", - "unit": "", - "doc": "Shock Pot readings", - "values": [1, 2] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDAF", - "desc": "Front MSB Load Cells", - "points": [ - { - "size": 32, - "name": "cell1", - "c_type": "uint32_t" - }, - { - "size": 32, - "name": "cell2", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/F/Cells", - "unit": "", - "doc": "Load Cell readings", - "values": [1, 2] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDAD", - "desc": "Front MSB Wheel Angle", - "points": [ - { - "size": 32, - "name": "angle1", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/F/Angle", - "unit": "", - "doc": "Wheel Angle readings", - "values": [1] - } - ], - "sim_freq": 500 - }, - { - "id": "0xBBF", - "desc": "Back MSB Accel", - "points": [ - { - "size": 16, - "name": "x_force", - "c_type": "float", - "signed": true, - "sim": { - "min": -2000, - "max": 2000, - "inc_min": 0.1, - "inc_max": 2.5 - } - }, - { - "size": 16, - "name": "y_force", - "c_type": "float", - "signed": true, - "sim": { - "min": -2000, - "max": 2000, - "inc_min": 0.1, - "inc_max": 2.5 - } - }, - { - "size": 16, - "name": "z_force", - "c_type": "float", - "signed": true, - "sim": { - "min": -2000, - "max": 2000, - "inc_min": 0.1, - "inc_max": 2.5 - } - } - ], - "fields": [ - { - "name": "MSB/B/Accel", - "unit": "mg", - "doc": "IMU readings from the board", - "values": [1, 2, 3] - } - ], - "sim_freq": 500 - }, - { - "id": "0xBC0", - "desc": "Back MSB Gyro", - "points": [ - { - "size": 16, - "name": "x_deg", - "c_type": "float", - "signed": true, - "sim": { - "min": -500000, - "max": 500000, - "inc_min": 10, - "inc_max": 1000 - } - }, - { - "size": 16, - "name": "y_deg", - "c_type": "float", - "signed": true, - "sim": { - "min": -500000, - "max": 500000, - "inc_min": 10, - "inc_max": 1000 - } - }, - { - "size": 16, - "name": "z_deg", - "c_type": "float", - "signed": true, - "sim": { - "min": -500000, - "max": 500000, - "inc_min": 10, - "inc_max": 1000 - } - } - ], - "fields": [ - { - "name": "MSB/B/Gyro", - "unit": "mdps", - "doc": "Gyro readings from the board", - "values": [1, 2, 3] - } - ], - "sim_freq": 500 - }, - { - "id": "0xBC4", - "desc": "Back MSB Mag", - "points": [ - { - "size": 16, - "name": "x_mag", - "c_type": "float", - "signed": true - }, - { - "size": 16, - "name": "y_mag", - "c_type": "float", - "signed": true - }, - { - "size": 16, - "name": "z_mag", - "c_type": "float", - "signed": true - } - ], - "fields": [ - { - "name": "MSB/B/Mag", - "unit": "mgauss", - "doc": "Magnetometer readings from the board", - "values": [1, 2, 3] - } - ], - "sim_freq": 500 - }, - { - "id": "0xBC2", - "desc": "Back MSB Orientation", - "points": [ - { - "size": 16, - "name": "x_fdeg", - "c_type": "float", - "signed": true, - "sim": { - "min": -180, - "max": 180, - "inc_min": 1, - "inc_max": 30 - } - }, - { - "size": 16, - "name": "y_fdeg", - "c_type": "float", - "signed": true, - "sim": { - "min": -180, - "max": 180, - "inc_min": 1, - "inc_max": 30 - } - }, - { - "size": 16, - "name": "z_fdeg", - "c_type": "float", - "signed": true, - "sim": { - "min": -180, - "max": 180, - "inc_min": 1, - "inc_max": 30 - } - } - ], - "fields": [ - { - "name": "MSB/B/Orientation", - "unit": "Deg", - "doc": "MSB orientation as a result of sensor fusion", - "values": [1, 2, 3] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDBE", - "desc": "Back MSB Strain One and Two", - "points": [ - { - "size": 32, - "name": "strain1", - "c_type": "uint32_t" - }, - { - "size": 32, - "name": "strain2", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/B/Strain1", - "unit": "", - "doc": "Strain 1 and 2 readings", - "values": [1, 2] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDBF", - "desc": "Back MSB Strain Three and Four", - "points": [ - { - "size": 32, - "name": "strain3", - "c_type": "uint32_t" - }, - { - "size": 32, - "name": "strain4", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/B/Strain2", - "unit": "", - "doc": "Strain 3 and 4 readings", - "values": [1, 2] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDC2", - "desc": "Back Shockpot", - "points": [ - { - "size": 32, - "name": "shock1", - "c_type": "uint32_t" - }, - { - "size": 32, - "name": "shock2", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/B/Shock", - "unit": "", - "doc": "Shock Pot readings", - "values": [1, 2] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDC3", - "desc": "Back MSB Load Cells", - "points": [ - { - "size": 32, - "name": "cell1", - "c_type": "uint32_t" - }, - { - "size": 32, - "name": "cell2", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/B/Cells", - "unit": "", - "doc": "Load Cell readings", - "values": [1, 2] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDAC", - "desc": "Back MSB Thermocouple", - "points": [ - { - "size": 32, - "name": "thermo1", - "c_type": "uint32_t" - } - ], - "fields": [ - { - "name": "MSB/B/Thermo", - "unit": "", - "doc": "Thermocouple readings", - "values": [1] - } - ], - "sim_freq": 500 - }, - { - "id": "0xBAF", - "desc": "Back MSB TOF", - "points": [ - { - "size": 16, - "name": "quadrant1", - "c_type": "uint16_t" - }, - { - "size": 16, - "name": "quadrant2", - "c_type": "uint16_t" - }, - { - "size": 16, - "name": "quadrant3", - "c_type": "uint16_t" - }, - { - "size": 16, - "name": "quadrant4", - "c_type": "uint16_t" - } - ], - "fields": [ - { - "name": "MSB/B/TOF", - "unit": "", - "doc": "Time of flight readings", - "values": [1, 2, 3, 4] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDB0", - "desc": "Front Wheel RPM", - "points": [ - { - "size": 16, - "name": "Front Right", - "c_type": "uint16_t", - "sim": { - "min": 0, - "max": 10000, - "inc_min": 50, - "inc_max": 1500 - } - }, - { - "size": 16, - "name": "Front Left", - "c_type": "uint16_t", - "sim": { - "min": 0, - "max": 10000, - "inc_min": 50, - "inc_max": 1500 - } - } - ], - "fields": [ - { - "name": "MSB/F/FR_RPM", - "unit": "RPM", - "doc": "RPM value of front right wheel", - "values": [1] - }, - { - "name": "MSB/F/FL_RPM", - "unit": "RPM", - "doc": "RPM value of front left wheel", - "values": [2] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDB1", - "desc": "Rear Wheel RPM", - "points": [ - { - "size": 16, - "name": "Rear Right", - "c_type": "uint16_t", - "sim": { - "min": 0, - "max": 10000, - "inc_min": 50, - "inc_max": 1500 - } - }, - { - "size": 16, - "name": "Rear Left", - "c_type": "uint16_t", - "sim": { - "min": 0, - "max": 10000, - "inc_min": 50, - "inc_max": 1500 - } - } - ], - "fields": [ - { - "name": "MSB/F/RR_RPM", - "unit": "RPM", - "doc": "RPM value of rear right wheel", - "values": [1] - }, - { - "name": "MSB/F/RL_RPM", - "unit": "RPM", - "doc": "RPM value of rear left wheel", - "values": [2] - } - ], - "sim_freq": 500 - } + { + "id": "0xBAB", + "desc": "Front MSB Accel", + "points": [ + { + "size": 16, + "name": "x_force", + "c_type": "float", + "signed": true, + "sim": { + "min": -2000, + "max": 2000, + "inc_min": 0.1, + "inc_max": 2.5 + } + }, + { + "size": 16, + "name": "y_force", + "c_type": "float", + "signed": true, + "sim": { + "min": -2000, + "max": 2000, + "inc_min": 0.1, + "inc_max": 2.5 + } + }, + { + "size": 16, + "name": "z_force", + "c_type": "float", + "signed": true, + "sim": { + "min": -2000, + "max": 2000, + "inc_min": 0.1, + "inc_max": 2.5 + } + } + ], + "fields": [ + { + "name": "MSB/F/Accel", + "unit": "mg", + "doc": "IMU readings from the board", + "values": [ + 1, + 2, + 3 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xBAC", + "desc": "Front MSB Gyro", + "points": [ + { + "size": 16, + "name": "x_deg", + "c_type": "float", + "signed": true, + "sim": { + "min": -500000, + "max": 500000, + "inc_min": 10, + "inc_max": 1000 + } + }, + { + "size": 16, + "name": "y_deg", + "c_type": "float", + "signed": true, + "sim": { + "min": -500000, + "max": 500000, + "inc_min": 10, + "inc_max": 1000 + } + }, + { + "size": 16, + "name": "z_deg", + "c_type": "float", + "signed": true, + "sim": { + "min": -500000, + "max": 500000, + "inc_min": 10, + "inc_max": 1000 + } + } + ], + "fields": [ + { + "name": "MSB/F/Gyro", + "unit": "mdps", + "doc": "Gyro readings from the board", + "values": [ + 1, + 2, + 3 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xBB0", + "desc": "Front MSB Mag", + "points": [ + { + "size": 16, + "name": "x_mag", + "c_type": "float", + "signed": true + }, + { + "size": 16, + "name": "y_mag", + "c_type": "float", + "signed": true + }, + { + "size": 16, + "name": "z_mag", + "c_type": "float", + "signed": true + } + ], + "fields": [ + { + "name": "MSB/F/Mag", + "unit": "mgauss", + "doc": "Magnetometer readings from the board", + "values": [ + 1, + 2, + 3 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xBAE", + "desc": "Front MSB Orientation", + "points": [ + { + "size": 16, + "name": "x_fdeg", + "c_type": "float", + "signed": true, + "sim": { + "min": -180, + "max": 180, + "inc_min": 1, + "inc_max": 30 + } + }, + { + "size": 16, + "name": "y_fdeg", + "c_type": "float", + "signed": true, + "sim": { + "min": -180, + "max": 180, + "inc_min": 1, + "inc_max": 30 + } + }, + { + "size": 16, + "name": "z_fdeg", + "c_type": "float", + "signed": true, + "sim": { + "min": -180, + "max": 180, + "inc_min": 1, + "inc_max": 30 + } + } + ], + "fields": [ + { + "name": "MSB/F/Orientation", + "unit": "Deg", + "doc": "MSB orientation as a result of sensor fusion", + "values": [ + 1, + 2, + 3 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDAA", + "desc": "Front MSB Strain One and Two", + "points": [ + { + "size": 32, + "name": "strain1", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "strain2", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/F/Strain1", + "unit": "", + "doc": "Strain 1 and 2 readings", + "values": [ + 1, + 2 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDAB", + "desc": "Front MSB Strain Three and Four", + "points": [ + { + "size": 32, + "name": "strain3", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "strain4", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/F/Strain2", + "unit": "", + "doc": "Strain 3 and 4 readings", + "values": [ + 1, + 2 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDAE", + "desc": "Front Shockpot", + "points": [ + { + "size": 32, + "name": "shock1", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "shock2", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/F/Shock", + "unit": "", + "doc": "Shock Pot readings", + "values": [ + 1, + 2 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDAF", + "desc": "Front MSB Load Cells", + "points": [ + { + "size": 32, + "name": "cell1", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "cell2", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/F/Cells", + "unit": "", + "doc": "Load Cell readings", + "values": [ + 1, + 2 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDAD", + "desc": "Front MSB Wheel Angle", + "points": [ + { + "size": 32, + "name": "angle1", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/F/Angle", + "unit": "", + "doc": "Wheel Angle readings", + "values": [ + 1 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xBBF", + "desc": "Back MSB Accel", + "points": [ + { + "size": 16, + "name": "x_force", + "c_type": "float", + "signed": true, + "sim": { + "min": -2000, + "max": 2000, + "inc_min": 0.1, + "inc_max": 2.5 + } + }, + { + "size": 16, + "name": "y_force", + "c_type": "float", + "signed": true, + "sim": { + "min": -2000, + "max": 2000, + "inc_min": 0.1, + "inc_max": 2.5 + } + }, + { + "size": 16, + "name": "z_force", + "c_type": "float", + "signed": true, + "sim": { + "min": -2000, + "max": 2000, + "inc_min": 0.1, + "inc_max": 2.5 + } + } + ], + "fields": [ + { + "name": "MSB/B/Accel", + "unit": "mg", + "doc": "IMU readings from the board", + "values": [ + 1, + 2, + 3 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xBC0", + "desc": "Back MSB Gyro", + "points": [ + { + "size": 16, + "name": "x_deg", + "c_type": "float", + "signed": true, + "sim": { + "min": -500000, + "max": 500000, + "inc_min": 10, + "inc_max": 1000 + } + }, + { + "size": 16, + "name": "y_deg", + "c_type": "float", + "signed": true, + "sim": { + "min": -500000, + "max": 500000, + "inc_min": 10, + "inc_max": 1000 + } + }, + { + "size": 16, + "name": "z_deg", + "c_type": "float", + "signed": true, + "sim": { + "min": -500000, + "max": 500000, + "inc_min": 10, + "inc_max": 1000 + } + } + ], + "fields": [ + { + "name": "MSB/B/Gyro", + "unit": "mdps", + "doc": "Gyro readings from the board", + "values": [ + 1, + 2, + 3 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xBC4", + "desc": "Back MSB Mag", + "points": [ + { + "size": 16, + "name": "x_mag", + "c_type": "float", + "signed": true + }, + { + "size": 16, + "name": "y_mag", + "c_type": "float", + "signed": true + }, + { + "size": 16, + "name": "z_mag", + "c_type": "float", + "signed": true + } + ], + "fields": [ + { + "name": "MSB/B/Mag", + "unit": "mgauss", + "doc": "Magnetometer readings from the board", + "values": [ + 1, + 2, + 3 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xBC2", + "desc": "Back MSB Orientation", + "points": [ + { + "size": 16, + "name": "x_fdeg", + "c_type": "float", + "signed": true, + "sim": { + "min": -180, + "max": 180, + "inc_min": 1, + "inc_max": 30 + } + }, + { + "size": 16, + "name": "y_fdeg", + "c_type": "float", + "signed": true, + "sim": { + "min": -180, + "max": 180, + "inc_min": 1, + "inc_max": 30 + } + }, + { + "size": 16, + "name": "z_fdeg", + "c_type": "float", + "signed": true, + "sim": { + "min": -180, + "max": 180, + "inc_min": 1, + "inc_max": 30 + } + } + ], + "fields": [ + { + "name": "MSB/B/Orientation", + "unit": "Deg", + "doc": "MSB orientation as a result of sensor fusion", + "values": [ + 1, + 2, + 3 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDBE", + "desc": "Back MSB Strain One and Two", + "points": [ + { + "size": 32, + "name": "strain1", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "strain2", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/B/Strain1", + "unit": "", + "doc": "Strain 1 and 2 readings", + "values": [ + 1, + 2 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDBF", + "desc": "Back MSB Strain Three and Four", + "points": [ + { + "size": 32, + "name": "strain3", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "strain4", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/B/Strain2", + "unit": "", + "doc": "Strain 3 and 4 readings", + "values": [ + 1, + 2 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDC2", + "desc": "Back Shockpot", + "points": [ + { + "size": 32, + "name": "shock1", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "shock2", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/B/Shock", + "unit": "", + "doc": "Shock Pot readings", + "values": [ + 1, + 2 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDC3", + "desc": "Back MSB Load Cells", + "points": [ + { + "size": 32, + "name": "cell1", + "c_type": "uint32_t" + }, + { + "size": 32, + "name": "cell2", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/B/Cells", + "unit": "", + "doc": "Load Cell readings", + "values": [ + 1, + 2 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDAC", + "desc": "Back MSB Thermocouple", + "points": [ + { + "size": 32, + "name": "thermo1", + "c_type": "uint32_t" + } + ], + "fields": [ + { + "name": "MSB/B/Thermo", + "unit": "", + "doc": "Thermocouple readings", + "values": [ + 1 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xBAF", + "desc": "Back MSB TOF", + "points": [ + { + "size": 16, + "name": "quadrant1", + "c_type": "uint16_t" + }, + { + "size": 16, + "name": "quadrant2", + "c_type": "uint16_t" + }, + { + "size": 16, + "name": "quadrant3", + "c_type": "uint16_t" + }, + { + "size": 16, + "name": "quadrant4", + "c_type": "uint16_t" + } + ], + "fields": [ + { + "name": "MSB/B/TOF", + "unit": "", + "doc": "Time of flight readings", + "values": [ + 1, + 2, + 3, + 4 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDB0", + "desc": "Front Wheel RPM", + "points": [ + { + "size": 16, + "name": "Front Right", + "c_type": "uint16_t", + "sim": { + "min": 0, + "max": 10000, + "inc_min": 50, + "inc_max": 1500 + } + }, + { + "size": 16, + "name": "Front Left", + "c_type": "uint16_t", + "sim": { + "min": 0, + "max": 10000, + "inc_min": 50, + "inc_max": 1500 + } + } + ], + "fields": [ + { + "name": "MSB/F/FR_RPM", + "unit": "RPM", + "doc": "RPM value of front right wheel", + "values": [ + 1 + ] + }, + { + "name": "MSB/F/FL_RPM", + "unit": "RPM", + "doc": "RPM value of front left wheel", + "values": [ + 2 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xDB1", + "desc": "Rear Wheel RPM", + "points": [ + { + "size": 16, + "name": "Rear Right", + "c_type": "uint16_t", + "sim": { + "min": 0, + "max": 10000, + "inc_min": 50, + "inc_max": 1500 + } + }, + { + "size": 16, + "name": "Rear Left", + "c_type": "uint16_t", + "sim": { + "min": 0, + "max": 10000, + "inc_min": 50, + "inc_max": 1500 + } + } + ], + "fields": [ + { + "name": "MSB/F/RR_RPM", + "unit": "RPM", + "doc": "RPM value of rear right wheel", + "values": [ + 1 + ] + }, + { + "name": "MSB/F/RL_RPM", + "unit": "RPM", + "doc": "RPM value of rear left wheel", + "values": [ + 2 + ] + } + ], + "sim_freq": 500 + } ] From 1f19e9926ec3416a382af1ae8cc3a4794ee2d6ec Mon Sep 17 00:00:00 2001 From: EhlOps Date: Thu, 12 Mar 2026 17:52:37 -0400 Subject: [PATCH 08/12] Fix calypso build --- .github/workflows/build_calypso.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_calypso.yml b/.github/workflows/build_calypso.yml index 8dc7f73..7379459 100644 --- a/.github/workflows/build_calypso.yml +++ b/.github/workflows/build_calypso.yml @@ -19,4 +19,4 @@ jobs: path: "./Odyssey-Definitions" - name: Build Calypso - run: cargo build --locked + run: cargo build From e855302c7a1290a77ee1a4306990e4284855bb08 Mon Sep 17 00:00:00 2001 From: Daniel Nakhooda Date: Wed, 8 Apr 2026 20:30:02 -0400 Subject: [PATCH 09/12] additions --- can-messages/msb.json | 314 +++++++++++++++++++++++++++++------------- 1 file changed, 220 insertions(+), 94 deletions(-) diff --git a/can-messages/msb.json b/can-messages/msb.json index 6e7cdc8..5124be4 100644 --- a/can-messages/msb.json +++ b/can-messages/msb.json @@ -201,6 +201,69 @@ ], "sim_freq": 500 }, + { + "id": "0xBB1", + "desc": "Front MSB Pressure Sensor", + "points": [ + { + "size": 32, + "name": "pressure", + "c_type": "float" + }, + { + "size": 32, + "name": "temperature", + "c_type": "float" + } + ], + "fields": [ + { + "name": "MSB/F/Pressure", + "unit": "", + "doc": "Pressure Sensor readings", + "values": [ + 1, + 2 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xBAF", + "desc": "Front Temperature Sensor", + "points": [ + { + "size": 32, + "name": "temperature", + "c_type": "float" + }, + { + "size": 32, + "name": "humidity", + "c_type": "float" + } + ], + "fields": [ + { + "name": "MSB/F/FR_RPM", + "unit": "RPM", + "doc": "RPM value of front right wheel", + "values": [ + 1 + ] + }, + { + "name": "MSB/F/FL_RPM", + "unit": "RPM", + "doc": "RPM value of front left wheel", + "values": [ + 2 + ] + } + ], + "sim_freq": 500 + }, { "id": "0xDAA", "desc": "Front MSB Strain One and Two", @@ -313,6 +376,53 @@ ], "sim_freq": 500 }, + { + "id": "0xDB0", + "desc": "Front Wheel RPM", + "points": [ + { + "size": 16, + "name": "Front Right", + "c_type": "uint16_t", + "sim": { + "min": 0, + "max": 10000, + "inc_min": 50, + "inc_max": 1500 + } + }, + { + "size": 16, + "name": "Front Left", + "c_type": "uint16_t", + "sim": { + "min": 0, + "max": 10000, + "inc_min": 50, + "inc_max": 1500 + } + } + ], + "fields": [ + { + "name": "MSB/F/FR_RPM", + "unit": "RPM", + "doc": "RPM value of front right wheel", + "values": [ + 1 + ] + }, + { + "name": "MSB/F/FL_RPM", + "unit": "RPM", + "doc": "RPM value of front left wheel", + "values": [ + 2 + ] + } + ], + "sim_freq": 500 + }, { "id": "0xDAD", "desc": "Front MSB Wheel Angle", @@ -537,6 +647,69 @@ ], "sim_freq": 500 }, + { + "id": "0xBC5", + "desc": "Back MSB Pressure Sensor", + "points": [ + { + "size": 32, + "name": "pressure", + "c_type": "float" + }, + { + "size": 32, + "name": "temperature", + "c_type": "float" + } + ], + "fields": [ + { + "name": "MSB/F/Pressure", + "unit": "", + "doc": "Pressure Sensor readings", + "values": [ + 1, + 2 + ] + } + ], + "sim_freq": 500 + }, + { + "id": "0xBC3", + "desc": "Back Temperature Sensor", + "points": [ + { + "size": 32, + "name": "temperature", + "c_type": "float" + }, + { + "size": 32, + "name": "humidity", + "c_type": "float" + } + ], + "fields": [ + { + "name": "MSB/F/FR_RPM", + "unit": "RPM", + "doc": "RPM value of front right wheel", + "values": [ + 1 + ] + }, + { + "name": "MSB/F/FL_RPM", + "unit": "RPM", + "doc": "RPM value of front left wheel", + "values": [ + 2 + ] + } + ], + "sim_freq": 500 + }, { "id": "0xDBE", "desc": "Back MSB Strain One and Two", @@ -649,6 +822,53 @@ ], "sim_freq": 500 }, + { + "id": "0xDB1", + "desc": "Rear Wheel RPM", + "points": [ + { + "size": 16, + "name": "Rear Right", + "c_type": "uint16_t", + "sim": { + "min": 0, + "max": 10000, + "inc_min": 50, + "inc_max": 1500 + } + }, + { + "size": 16, + "name": "Rear Left", + "c_type": "uint16_t", + "sim": { + "min": 0, + "max": 10000, + "inc_min": 50, + "inc_max": 1500 + } + } + ], + "fields": [ + { + "name": "MSB/F/RR_RPM", + "unit": "RPM", + "doc": "RPM value of rear right wheel", + "values": [ + 1 + ] + }, + { + "name": "MSB/F/RL_RPM", + "unit": "RPM", + "doc": "RPM value of rear left wheel", + "values": [ + 2 + ] + } + ], + "sim_freq": 500 + }, { "id": "0xDAC", "desc": "Back MSB Thermocouple", @@ -710,99 +930,5 @@ } ], "sim_freq": 500 - }, - { - "id": "0xDB0", - "desc": "Front Wheel RPM", - "points": [ - { - "size": 16, - "name": "Front Right", - "c_type": "uint16_t", - "sim": { - "min": 0, - "max": 10000, - "inc_min": 50, - "inc_max": 1500 - } - }, - { - "size": 16, - "name": "Front Left", - "c_type": "uint16_t", - "sim": { - "min": 0, - "max": 10000, - "inc_min": 50, - "inc_max": 1500 - } - } - ], - "fields": [ - { - "name": "MSB/F/FR_RPM", - "unit": "RPM", - "doc": "RPM value of front right wheel", - "values": [ - 1 - ] - }, - { - "name": "MSB/F/FL_RPM", - "unit": "RPM", - "doc": "RPM value of front left wheel", - "values": [ - 2 - ] - } - ], - "sim_freq": 500 - }, - { - "id": "0xDB1", - "desc": "Rear Wheel RPM", - "points": [ - { - "size": 16, - "name": "Rear Right", - "c_type": "uint16_t", - "sim": { - "min": 0, - "max": 10000, - "inc_min": 50, - "inc_max": 1500 - } - }, - { - "size": 16, - "name": "Rear Left", - "c_type": "uint16_t", - "sim": { - "min": 0, - "max": 10000, - "inc_min": 50, - "inc_max": 1500 - } - } - ], - "fields": [ - { - "name": "MSB/F/RR_RPM", - "unit": "RPM", - "doc": "RPM value of rear right wheel", - "values": [ - 1 - ] - }, - { - "name": "MSB/F/RL_RPM", - "unit": "RPM", - "doc": "RPM value of rear left wheel", - "values": [ - 2 - ] - } - ], - "sim_freq": 500 } ] From befa3de22743928543250f7fa3d0b9d6c769ff07 Mon Sep 17 00:00:00 2001 From: Daniel Nakhooda Date: Thu, 9 Apr 2026 20:44:44 -0400 Subject: [PATCH 10/12] fix conflict --- code-gen/Inc/can_messages_rx.h | 808 +++++++++++++++ code-gen/Inc/can_messages_tx.h | 189 ++++ code-gen/Src/can_messages_rx.c | 1747 ++++++++++++++++++++++++++++++++ code-gen/Src/can_messages_tx.c | 697 +++++++++++++ 4 files changed, 3441 insertions(+) create mode 100644 code-gen/Inc/can_messages_rx.h create mode 100644 code-gen/Inc/can_messages_tx.h create mode 100644 code-gen/Src/can_messages_rx.c create mode 100644 code-gen/Src/can_messages_tx.c diff --git a/code-gen/Inc/can_messages_rx.h b/code-gen/Inc/can_messages_rx.h new file mode 100644 index 0000000..d04329e --- /dev/null +++ b/code-gen/Inc/can_messages_rx.h @@ -0,0 +1,808 @@ +#ifndef _CAN_MSGS_RX_H +#define _CAN_MSGS_RX_H + +/* + * This file was autogenerated by the CGEN module of the Odyssey framework. + * DO NOT EDIT without also reporting the edit to the Odyssey-Definitions repository to be incorproated into the generator. +*/ + +#include + +#include "u_tx_debug.h" +#include "u_queues.h" +#include "c_utils.h" +#include "fdcan.h" +#include "bitstream.h" + +typedef struct { + uint8_t state; + float temp_average; +} bms_status_t; + +void receive_bms_status(const can_msg_t *message, bms_status_t *bms_status); + +typedef struct { + float high_val; + uint8_t high_chip; + uint8_t high_cell; + float low_val; + uint8_t low_chip; + uint8_t low_cell; + float avg_val; +} cell_voltage_t; + +void receive_cell_voltage(const can_msg_t *message, cell_voltage_t *cell_voltage); + +typedef struct { + float high_val; + uint8_t high_chip; + uint8_t high_cell; + float low_val; + uint8_t low_chip; + uint8_t low_cell; + float avg_val; +} cell_temperatures_t; + +void receive_cell_temperatures(const can_msg_t *message, cell_temperatures_t *cell_temperatures); + +typedef struct { + float seg1; + float seg2; + float seg3; + float seg4; + float seg5; +} segment_temperatures_t; + +void receive_segment_temperatures(const can_msg_t *message, segment_temperatures_t *segment_temperatures); + +typedef struct { + uint8_t state; + uint8_t break_location; + uint8_t verification_attempts; + uint8_t recovery_successful; +} segment_isospi_communication_status_t; + +void receive_segment_isospi_communication_status(const can_msg_t *message, segment_isospi_communication_status_t *segment_isospi_communication_status); + +typedef struct { + bool dcl_enforce; + bool ccl_enforce; + bool low_cell_volt; + bool high_cell_volt; + bool high_charge_volt; + bool pack_hot; + bool die_temp_max; + bool segment_comms; + bool hv_plate_comms; +} fault_status_t; + +void receive_fault_status(const can_msg_t *message, fault_status_t *fault_status); + +typedef struct { + float seg1; + float seg2; + float seg3; + float seg4; + float seg5; +} segment_average_voltages_t; + +void receive_segment_average_voltages(const can_msg_t *message, segment_average_voltages_t *segment_average_voltages); + +typedef struct { + float seg1; + float seg2; + float seg3; + float seg4; + float seg5; +} segment_total_voltages_t; + +void receive_segment_total_voltages(const can_msg_t *message, segment_total_voltages_t *segment_total_voltages); + +typedef struct { + float seg1; + float seg2; + float seg3; + float seg4; + float seg5; +} segment_delta_voltages_t; + +void receive_segment_delta_voltages(const can_msg_t *message, segment_delta_voltages_t *segment_delta_voltages); + +typedef struct { + uint8_t spare0; + uint8_t spare1; + uint16_t spare2; + uint32_t spare3; +} bms_debug_t; + +void receive_bms_debug(const can_msg_t *message, bms_debug_t *bms_debug); + +typedef struct { + uint8_t start_stop; + uint8_t code; + float value; +} bms_fault_timers_t; + +void receive_bms_fault_timers(const can_msg_t *message, bms_fault_timers_t *bms_fault_timers); + +typedef struct { + uint8_t major; + uint8_t minor; + uint8_t patch; + bool dirty; + bool local_commit; +} shepherd_version_tag_t; + +void receive_shepherd_version_tag(const can_msg_t *message, shepherd_version_tag_t *shepherd_version_tag); + +typedef struct { + uint32_t short_hash; + uint32_t author_hash; +} shepherd_version_hash_t; + +void receive_shepherd_version_hash(const can_msg_t *message, shepherd_version_hash_t *shepherd_version_hash); + +typedef struct { + uint32_t overflow_can_id; + uint16_t overflow_cnt; +} overflow_notification_for_percell_t; + +void receive_overflow_notification_for_percell(const can_msg_t *message, overflow_notification_for_percell_t *overflow_notification_for_percell); + +typedef struct { + float therm; + float voltage_a; + float voltage_b; + uint8_t chip_id; + uint8_t cell_a; + uint8_t cell_b; + bool discharging_a; + bool discharging_b; + bool cvs_a; + bool cvs_b; +} alpha_cell_data_debug_t; + +void receive_alpha_cell_data_debug(const can_msg_t *message, alpha_cell_data_debug_t *alpha_cell_data_debug); + +typedef struct { + float therm; + float voltage_a; + float voltage_b; + uint8_t chip_id; + uint8_t cell_a; + uint8_t cell_b; + bool discharging_a; + bool discharging_b; + bool cvs_a; + bool cvs_b; +} beta_cell_data_debug_t; + +void receive_beta_cell_data_debug(const can_msg_t *message, beta_cell_data_debug_t *beta_cell_data_debug); + +typedef struct { + uint8_t chip_id; + float die_temp; + float vpv; + float vmv; + bool va_ov; + bool va_uv; + bool vd_ov; + bool vd_uv; + bool vde; + bool vdel; + bool spiflt; + bool sleep; + bool thsd; + bool tmodchk; + bool oscchk; +} alpha_chip_a_debug_t; + +void receive_alpha_chip_a_debug(const can_msg_t *message, alpha_chip_a_debug_t *alpha_chip_a_debug); + +typedef struct { + float vres; + uint8_t chip_id; + float vref2; + float v_analog; + float v_digital; + bool otp1_med; + bool opt2_med; +} alpha_chip_b_debug_t; + +void receive_alpha_chip_b_debug(const can_msg_t *message, alpha_chip_b_debug_t *alpha_chip_b_debug); + +typedef struct { + uint8_t chip_id; + float die_temp; + float vpv; + float vmv; + bool va_ov; + bool va_uv; + bool vd_ov; + bool vd_uv; + bool vde; + bool vdel; + bool spiflt; + bool sleep; + bool thsd; + bool tmodchk; + bool oscchk; +} beta_chip_a_debug_t; + +void receive_beta_chip_a_debug(const can_msg_t *message, beta_chip_a_debug_t *beta_chip_a_debug); + +typedef struct { + float vres; + uint8_t chip_id; + float vref2; + float v_analog; + float v_digital; + bool otp1_med; + bool opt2_med; +} beta_chip_b_debug_t; + +void receive_beta_chip_b_debug(const can_msg_t *message, beta_chip_b_debug_t *beta_chip_b_debug); + +typedef struct { + uint8_t fan_duty_cycle; +} fan_duty_cycle_percentage_t; + +void receive_fan_duty_cycle_percentage(const can_msg_t *message, fan_duty_cycle_percentage_t *fan_duty_cycle_percentage); + +typedef struct { + uint8_t chip_id; + float therm_temp_1; + float therm_temp_2; + float therm_temp_3; +} onboard_therm_temperatures_t; + +void receive_onboard_therm_temperatures(const can_msg_t *message, onboard_therm_temperatures_t *onboard_therm_temperatures); + +typedef struct { + bool precharge_status; +} precharge_status_t; + +void receive_precharge_status(const can_msg_t *message, precharge_status_t *precharge_status); + +typedef struct { + float batt_voltage; + float ts_voltage; + float shunt_temp; + float pack_current; +} hv_plate_data_t; + +void receive_hv_plate_data(const can_msg_t *message, hv_plate_data_t *hv_plate_data); + +typedef struct { + uint8_t chip_id; + uint16_t pec_errors; +} segment_pec_errors_t; + +void receive_segment_pec_errors(const can_msg_t *message, segment_pec_errors_t *segment_pec_errors); + +typedef struct { + uint16_t pec_errors; +} hv_plate_pec_errors_t; + +void receive_hv_plate_pec_errors(const can_msg_t *message, hv_plate_pec_errors_t *hv_plate_pec_errors); + +typedef struct { + uint16_t flags; + float vreg; + float tmp1; + float vref1p25; + uint16_t osccnt; +} hv_plate_diagnostics_t; + +void receive_hv_plate_diagnostics(const can_msg_t *message, hv_plate_diagnostics_t *hv_plate_diagnostics); + +typedef struct { + float epad; + float vdig; + float vdd; + float tmp2; + float vdiv; +} hv_plate_diagnostics_second_t; + +void receive_hv_plate_diagnostics_second(const can_msg_t *message, hv_plate_diagnostics_second_t *hv_plate_diagnostics_second); + +typedef struct { + float internal_temp; +} bms_onboard_temperature_t; + +void receive_bms_onboard_temperature(const can_msg_t *message, bms_onboard_temperature_t *bms_onboard_temperature); + +typedef struct { + float imu_accelerometer_x; + float imu_accelerometer_y; + float imu_accelerometer_z; +} bms_imu_accelerometer_t; + +void receive_bms_imu_accelerometer(const can_msg_t *message, bms_imu_accelerometer_t *bms_imu_accelerometer); + +typedef struct { + float imu_gyro_x; + float imu_gyro_y; + float imu_gyro_z; +} bms_imu_gyro_t; + +void receive_bms_imu_gyro(const can_msg_t *message, bms_imu_gyro_t *bms_imu_gyro); + +typedef struct { + float Pack_SoC; + float Pack_SoC_Drift; +} pack_soc_status_t; + +void receive_pack_soc_status(const can_msg_t *message, pack_soc_status_t *pack_soc_status); + +typedef struct { + bool shutdown; +} shutdown_as_read_by_bms_t; + +void receive_shutdown_as_read_by_bms(const can_msg_t *message, shutdown_as_read_by_bms_t *shutdown_as_read_by_bms); + +typedef struct { + float accel_x; + float accel_y; + float accel_z; +} lightning_board_imu_acceleration_data_t; + +void receive_lightning_board_imu_acceleration_data(const can_msg_t *message, lightning_board_imu_acceleration_data_t *lightning_board_imu_acceleration_data); + +typedef struct { + float gyro_x; + float gyro_y; + float gyro_z; +} lightning_board_imu_gyro_data_t; + +void receive_lightning_board_imu_gyro_data(const can_msg_t *message, lightning_board_imu_gyro_data_t *lightning_board_imu_gyro_data); + +typedef struct { + uint8_t interrupt; + uint8_t distance; + uint32_t energy; +} lightning_board_lightning_sensor_information_t; + +void receive_lightning_board_lightning_sensor_information(const can_msg_t *message, lightning_board_lightning_sensor_information_t *lightning_board_lightning_sensor_information); + +typedef struct { + float mag_x; + float mag_y; + float mag_z; +} lightning_board_magnometer_sensor_information_t; + +void receive_lightning_board_magnometer_sensor_information(const can_msg_t *message, lightning_board_magnometer_sensor_information_t *lightning_board_magnometer_sensor_information); + +typedef struct { + uint8_t state; +} dashboard_efuse_state_t; + +void receive_dashboard_efuse_state(const can_msg_t *message, dashboard_efuse_state_t *dashboard_efuse_state); + +typedef struct { + uint8_t state; +} brake_efuse_state_t; + +void receive_brake_efuse_state(const can_msg_t *message, brake_efuse_state_t *brake_efuse_state); + +typedef struct { + uint8_t state; +} shutdown_efuse_state_t; + +void receive_shutdown_efuse_state(const can_msg_t *message, shutdown_efuse_state_t *shutdown_efuse_state); + +typedef struct { + uint8_t state; +} lv_efuse_state_t; + +void receive_lv_efuse_state(const can_msg_t *message, lv_efuse_state_t *lv_efuse_state); + +typedef struct { + uint8_t state; +} radfan_efuse_state_t; + +void receive_radfan_efuse_state(const can_msg_t *message, radfan_efuse_state_t *radfan_efuse_state); + +typedef struct { + uint8_t state; +} fanbatt_efuse_state_t; + +void receive_fanbatt_efuse_state(const can_msg_t *message, fanbatt_efuse_state_t *fanbatt_efuse_state); + +typedef struct { + uint8_t state; +} pumpone_efuse_state_t; + +void receive_pumpone_efuse_state(const can_msg_t *message, pumpone_efuse_state_t *pumpone_efuse_state); + +typedef struct { + uint8_t state; +} pumptwo_efuse_state_t; + +void receive_pumptwo_efuse_state(const can_msg_t *message, pumptwo_efuse_state_t *pumptwo_efuse_state); + +typedef struct { + uint8_t state; +} battbox_efuse_state_t; + +void receive_battbox_efuse_state(const can_msg_t *message, battbox_efuse_state_t *battbox_efuse_state); + +typedef struct { + uint8_t state; +} mc_efuse_state_t; + +void receive_mc_efuse_state(const can_msg_t *message, mc_efuse_state_t *mc_efuse_state); + +typedef struct { + uint8_t state; +} spare_efuse_state_t; + +void receive_spare_efuse_state(const can_msg_t *message, spare_efuse_state_t *spare_efuse_state); + +typedef struct { + uint8_t command; +} rtds_command_message_t; + +void receive_rtds_command_message(const can_msg_t *message, rtds_command_message_t *rtds_command_message); + +typedef struct { + uint8_t button_id; +} wheel_buttons_t; + +void receive_wheel_buttons(const can_msg_t *message, wheel_buttons_t *wheel_buttons); + +typedef struct { + float current_target_ac; +} ac_current_command_t; + +void receive_ac_current_command(const can_msg_t *message, ac_current_command_t *ac_current_command); + +typedef struct { + float brake_ac_current; +} brake_current_command_t; + +void receive_brake_current_command(const can_msg_t *message, brake_current_command_t *brake_current_command); + +typedef struct { + float max_current_ac_target; +} max_ac_current_command_t; + +void receive_max_ac_current_command(const can_msg_t *message, max_ac_current_command_t *max_ac_current_command); + +typedef struct { + float max_ac_brake_current_target; +} max_ac_brake_current_command_t; + +void receive_max_ac_brake_current_command(const can_msg_t *message, max_ac_brake_current_command_t *max_ac_brake_current_command); + +typedef struct { + float max_dc_current_target; +} max_dc_current_command_t; + +void receive_max_dc_current_command(const can_msg_t *message, max_dc_current_command_t *max_dc_current_command); + +typedef struct { + float max_dc_brake_current_target; +} max_dc_brake_current_command_t; + +void receive_max_dc_brake_current_command(const can_msg_t *message, max_dc_brake_current_command_t *max_dc_brake_current_command); + +typedef struct { + uint8_t drive_enable; +} drive_enable_command_t; + +void receive_drive_enable_command(const can_msg_t *message, drive_enable_command_t *drive_enable_command); + +typedef struct { + float charge_volts; + float charge_current; + uint8_t enable_charging; +} bms_charge_message_send_t; + +void receive_bms_charge_message_send(const can_msg_t *message, bms_charge_message_send_t *bms_charge_message_send); + +typedef struct { + uint16_t ADC; + float voltage; + float current; + bool is_faulted; + bool is_enabled; + uint8_t control_state; +} dashboard_efuse_t; + +void receive_dashboard_efuse(const can_msg_t *message, dashboard_efuse_t *dashboard_efuse); + +typedef struct { + uint16_t ADC; + float voltage; + float current; + bool is_faulted; + bool is_enabled; + uint8_t control_state; +} brake_efuse_t; + +void receive_brake_efuse(const can_msg_t *message, brake_efuse_t *brake_efuse); + +typedef struct { + uint16_t ADC; + float voltage; + float current; + bool is_faulted; + bool is_enabled; + uint8_t control_state; +} shutdown_efuse_t; + +void receive_shutdown_efuse(const can_msg_t *message, shutdown_efuse_t *shutdown_efuse); + +typedef struct { + uint16_t ADC; + float voltage; + float current; + bool is_faulted; + bool is_enabled; + uint8_t control_state; +} lv_efuse_t; + +void receive_lv_efuse(const can_msg_t *message, lv_efuse_t *lv_efuse); + +typedef struct { + uint16_t ADC; + float voltage; + float current; + bool is_faulted; + bool is_enabled; + uint8_t control_state; +} radfan_efuse_t; + +void receive_radfan_efuse(const can_msg_t *message, radfan_efuse_t *radfan_efuse); + +typedef struct { + uint16_t ADC; + float voltage; + float current; + bool is_faulted; + bool is_enabled; + uint8_t control_state; +} fanbatt_efuse_t; + +void receive_fanbatt_efuse(const can_msg_t *message, fanbatt_efuse_t *fanbatt_efuse); + +typedef struct { + uint16_t ADC; + float voltage; + float current; + bool is_faulted; + bool is_enabled; + uint8_t control_state; +} pumpone_efuse_t; + +void receive_pumpone_efuse(const can_msg_t *message, pumpone_efuse_t *pumpone_efuse); + +typedef struct { + uint16_t ADC; + float voltage; + float current; + bool is_faulted; + bool is_enabled; + uint8_t control_state; +} pumptwo_efuse_t; + +void receive_pumptwo_efuse(const can_msg_t *message, pumptwo_efuse_t *pumptwo_efuse); + +typedef struct { + uint16_t ADC; + float voltage; + float current; + bool is_faulted; + bool is_enabled; + uint8_t control_state; +} battbox_efuse_t; + +void receive_battbox_efuse(const can_msg_t *message, battbox_efuse_t *battbox_efuse); + +typedef struct { + uint16_t ADC; + float voltage; + float current; + bool is_faulted; + bool is_enabled; + uint8_t control_state; +} mc_efuse_t; + +void receive_mc_efuse(const can_msg_t *message, mc_efuse_t *mc_efuse); + +typedef struct { + uint16_t ADC; + float voltage; + float current; + bool is_faulted; + bool is_enabled; + uint8_t control_state; +} spare_efuse_t; + +void receive_spare_efuse(const can_msg_t *message, spare_efuse_t *spare_efuse); + +typedef struct { + bool bms_gpio; + bool bots_gpio; + bool spare_gpio; + bool bspd_gpio; + bool hv_c; + bool hvd_gpio; + bool imd_gpio; + bool ckpt_gpio; + bool inertia_sw_gpio; + bool tsms_gpio; + uint8_t UNUSED; +} shutdown_pins_t; + +void receive_shutdown_pins(const can_msg_t *message, shutdown_pins_t *shutdown_pins); + +typedef struct { + bool home_mode; + uint8_t nero_index; + int32_t car_speed; + bool tsms; + uint32_t torque_limit_percentage; + bool reverse; + uint16_t regen_limit; + bool launch_control; + uint8_t functional_state; + bool traction_control; +} car_state_t; + +void receive_car_state(const can_msg_t *message, car_state_t *car_state); + +typedef struct { + float accel_norm; + float brake_norm; +} pedal_percent_pressed_values_t; + +void receive_pedal_percent_pressed_values(const can_msg_t *message, pedal_percent_pressed_values_t *pedal_percent_pressed_values); + +typedef struct { + float accel1_volts; + float accel2_volts; + float brake1_volts; + float brake2_volts; +} pedal_sensor_voltages_t; + +void receive_pedal_sensor_voltages(const can_msg_t *message, pedal_sensor_voltages_t *pedal_sensor_voltages); + +typedef struct { + uint8_t status; +} lightning_board_light_status_t; + +void receive_lightning_board_light_status(const can_msg_t *message, lightning_board_light_status_t *lightning_board_light_status); + +typedef struct { + float vcu_temperature; + float vcu_humidity; +} temperature_sensor_t; + +void receive_temperature_sensor(const can_msg_t *message, temperature_sensor_t *temperature_sensor); + +typedef struct { + float imu_accelerometer_x; + float imu_accelerometer_y; + float imu_accelerometer_z; +} imu_accelerometer_t; + +void receive_imu_accelerometer(const can_msg_t *message, imu_accelerometer_t *imu_accelerometer); + +typedef struct { + float imu_gyro_x; + float imu_gyro_y; + float imu_gyro_z; +} imu_gyro_t; + +void receive_imu_gyro(const can_msg_t *message, imu_gyro_t *imu_gyro); + +typedef struct { + bool CAN_OUTGOING_FAULT; + bool CAN_INCOMING_FAULT; + bool BMS_CAN_MONITOR_FAULT; + bool LIGHTNING_CAN_MONITOR_FAULT; + bool SHUTDOWN_FAULT; + bool ONBOARD_TEMP_FAULT; + bool IMU_ACCEL_FAULT; + bool IMU_GYRO_FAULT; + bool BSPD_PREFAULT; + bool ONBOARD_BRAKE_OPEN_CIRCUIT_FAULT; + bool ONBOARD_ACCEL_OPEN_CIRCUIT_FAULT; + bool ONBOARD_BRAKE_SHORT_CIRCUIT_FAULT; + bool ONBOARD_ACCEL_SHORT_CIRCUIT_FAULT; + bool ONBOARD_PEDAL_DIFFERENCE_FAULT; + bool RTDS_FAULT; + bool LV_LOW_VOLTAGE_FAULT; +} faults_t; + +void receive_faults(const can_msg_t *message, faults_t *faults); + +typedef struct { + uint16_t ADC; + float Voltage; +} lv_voltage_t; + +void receive_lv_voltage(const can_msg_t *message, lv_voltage_t *lv_voltage); + +typedef struct { + uint8_t three_bits; + float float_value; + uint8_t five_bits; + uint16_t sixteen_bits; + int8_t signed_8_bits; +} vcu_test_message_t; + +void receive_vcu_test_message(const can_msg_t *message, vcu_test_message_t *vcu_test_message); + +typedef struct { + uint16_t temp; +} dti_motor_temp_as_reported_by_vcu_t; + +void receive_dti_motor_temp_as_reported_by_vcu(const can_msg_t *message, dti_motor_temp_as_reported_by_vcu_t *dti_motor_temp_as_reported_by_vcu); + +typedef struct { + uint16_t temp; +} dti_controller_temp_as_reported_by_vcu_t; + +void receive_dti_controller_temp_as_reported_by_vcu(const can_msg_t *message, dti_controller_temp_as_reported_by_vcu_t *dti_controller_temp_as_reported_by_vcu); + +typedef struct { + float temp; +} bms_battbox_temp_as_reported_by_vcu_t; + +void receive_bms_battbox_temp_as_reported_by_vcu(const can_msg_t *message, bms_battbox_temp_as_reported_by_vcu_t *bms_battbox_temp_as_reported_by_vcu); + +typedef struct { + bool brake_state; +} brake_state_as_reported_by_vcu_t; + +void receive_brake_state_as_reported_by_vcu(const can_msg_t *message, brake_state_as_reported_by_vcu_t *brake_state_as_reported_by_vcu); + +typedef struct { + bool pin_state; + bool sounding_state; + bool reverse_state; + bool error; +} rtds_state_message_t; + +void receive_rtds_state_message(const can_msg_t *message, rtds_state_message_t *rtds_state_message); + +typedef struct { + uint16_t raw; + float voltage; + float current; +} lfiu_low_current_adc_readings_t; + +void receive_lfiu_low_current_adc_readings(const can_msg_t *message, lfiu_low_current_adc_readings_t *lfiu_low_current_adc_readings); + +typedef struct { + uint16_t raw; + float voltage; + float current; +} lfiu_high_current_adc_readings_t; + +void receive_lfiu_high_current_adc_readings(const can_msg_t *message, lfiu_high_current_adc_readings_t *lfiu_high_current_adc_readings); + +typedef struct { + uint16_t one; + uint8_t two; + uint8_t three; + bool four; + uint8_t five; + uint32_t six; +} second_vcu_test_message_t; + +void receive_second_vcu_test_message(const can_msg_t *message, second_vcu_test_message_t *second_vcu_test_message); + +typedef struct { + uint8_t fan_pwm_percentage; +} lv_box_fan_pwm_t; + +void receive_lv_box_fan_pwm(const can_msg_t *message, lv_box_fan_pwm_t *lv_box_fan_pwm); + + +void receive_can(const can_msg_t *msg); + +#endif \ No newline at end of file diff --git a/code-gen/Inc/can_messages_tx.h b/code-gen/Inc/can_messages_tx.h new file mode 100644 index 0000000..3c25222 --- /dev/null +++ b/code-gen/Inc/can_messages_tx.h @@ -0,0 +1,189 @@ +#ifndef _CAN_MSGS_TX_H +#define _CAN_MSGS_TX_H + +/* + * This file was autogenerated by the CGEN module of the Odyssey framework. + * DO NOT EDIT without also reporting the edit to the Odyssey-Definitions repository to be incorproated into the generator. +*/ +#include +#include + +/** +* Contents of this message: +* MSB/F/Accel - IMU readings from the board +*/ +uint8_t send_front_msb_accel +(float x_force,float y_force,float z_force); + +/** +* Contents of this message: +* MSB/F/Gyro - Gyro readings from the board +*/ +uint8_t send_front_msb_gyro +(float x_deg,float y_deg,float z_deg); + +/** +* Contents of this message: +* MSB/F/Mag - Magnetometer readings from the board +*/ +uint8_t send_front_msb_mag +(float x_mag,float y_mag,float z_mag); + +/** +* Contents of this message: +* MSB/F/Orientation - MSB orientation as a result of sensor fusion +*/ +uint8_t send_front_msb_orientation +(float x_fdeg,float y_fdeg,float z_fdeg); + +/** +* Contents of this message: +* MSB/F/Pressure - Pressure Sensor readings +*/ +uint8_t send_front_msb_pressure_sensor +(float pressure,float temperature); + +/** +* Contents of this message: +* MSB/F/FR_RPM - RPM value of front right wheel +* MSB/F/FL_RPM - RPM value of front left wheel +*/ +uint8_t send_front_temperature_sensor +(float temperature,float humidity); + +/** +* Contents of this message: +* MSB/F/Strain1 - Strain 1 and 2 readings +*/ +uint8_t send_front_msb_strain_one_and_two +(uint32_t strain1,uint32_t strain2); + +/** +* Contents of this message: +* MSB/F/Strain2 - Strain 3 and 4 readings +*/ +uint8_t send_front_msb_strain_three_and_four +(uint32_t strain3,uint32_t strain4); + +/** +* Contents of this message: +* MSB/F/Shock - Shock Pot readings +*/ +uint8_t send_front_shockpot +(uint32_t shock1,uint32_t shock2); + +/** +* Contents of this message: +* MSB/F/Cells - Load Cell readings +*/ +uint8_t send_front_msb_load_cells +(uint32_t cell1,uint32_t cell2); + +/** +* Contents of this message: +* MSB/F/FR_RPM - RPM value of front right wheel +* MSB/F/FL_RPM - RPM value of front left wheel +*/ +uint8_t send_front_wheel_rpm +(uint16_t Front Right,uint16_t Front Left); + +/** +* Contents of this message: +* MSB/F/Angle - Wheel Angle readings +*/ +uint8_t send_front_msb_wheel_angle +(uint32_t angle1); + +/** +* Contents of this message: +* MSB/B/Accel - IMU readings from the board +*/ +uint8_t send_back_msb_accel +(float x_force,float y_force,float z_force); + +/** +* Contents of this message: +* MSB/B/Gyro - Gyro readings from the board +*/ +uint8_t send_back_msb_gyro +(float x_deg,float y_deg,float z_deg); + +/** +* Contents of this message: +* MSB/B/Mag - Magnetometer readings from the board +*/ +uint8_t send_back_msb_mag +(float x_mag,float y_mag,float z_mag); + +/** +* Contents of this message: +* MSB/B/Orientation - MSB orientation as a result of sensor fusion +*/ +uint8_t send_back_msb_orientation +(float x_fdeg,float y_fdeg,float z_fdeg); + +/** +* Contents of this message: +* MSB/F/Pressure - Pressure Sensor readings +*/ +uint8_t send_back_msb_pressure_sensor +(float pressure,float temperature); + +/** +* Contents of this message: +* MSB/F/FR_RPM - RPM value of front right wheel +* MSB/F/FL_RPM - RPM value of front left wheel +*/ +uint8_t send_back_temperature_sensor +(float temperature,float humidity); + +/** +* Contents of this message: +* MSB/B/Strain1 - Strain 1 and 2 readings +*/ +uint8_t send_back_msb_strain_one_and_two +(uint32_t strain1,uint32_t strain2); + +/** +* Contents of this message: +* MSB/B/Strain2 - Strain 3 and 4 readings +*/ +uint8_t send_back_msb_strain_three_and_four +(uint32_t strain3,uint32_t strain4); + +/** +* Contents of this message: +* MSB/B/Shock - Shock Pot readings +*/ +uint8_t send_back_shockpot +(uint32_t shock1,uint32_t shock2); + +/** +* Contents of this message: +* MSB/B/Cells - Load Cell readings +*/ +uint8_t send_back_msb_load_cells +(uint32_t cell1,uint32_t cell2); + +/** +* Contents of this message: +* MSB/F/RR_RPM - RPM value of rear right wheel +* MSB/F/RL_RPM - RPM value of rear left wheel +*/ +uint8_t send_rear_wheel_rpm +(uint16_t Rear Right,uint16_t Rear Left); + +/** +* Contents of this message: +* MSB/B/Thermo - Thermocouple readings +*/ +uint8_t send_back_msb_thermocouple +(uint32_t thermo1); + +/** +* Contents of this message: +* MSB/B/TOF - Time of flight readings +*/ +uint8_t send_back_msb_tof +(uint16_t quadrant1,uint16_t quadrant2,uint16_t quadrant3,uint16_t quadrant4); +#endif \ No newline at end of file diff --git a/code-gen/Src/can_messages_rx.c b/code-gen/Src/can_messages_rx.c new file mode 100644 index 0000000..e84b060 --- /dev/null +++ b/code-gen/Src/can_messages_rx.c @@ -0,0 +1,1747 @@ +#include "can_messages_rx.h" + +void receive_bms_status(const can_msg_t *message, bms_status_t *bms_status) { + + uint16_t data_bigendian; + memcpy(&data_bigendian, message->data, 2); + uint16_t data = __builtin_bswap16(data_bigendian); + uint64_t state_mask = (1ULL << 8) - 1ULL; + uint64_t state_raw = (data >> 8) & state_mask; + bms_status->state = (uint8_t)state_raw; + uint64_t temp_average_mask = (1ULL << 8) - 1ULL; + uint64_t temp_average_raw = (data >> 0) & temp_average_mask; + bms_status->temp_average = (float)temp_average_raw; +} + +void receive_cell_voltage(const can_msg_t *message, cell_voltage_t *cell_voltage) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t high_val_mask = (1ULL << 16) - 1ULL; + uint64_t high_val_raw = (data >> 48) & high_val_mask; + cell_voltage->high_val = (float)(high_val_raw / 10000); + uint64_t high_chip_mask = (1ULL << 4) - 1ULL; + uint64_t high_chip_raw = (data >> 44) & high_chip_mask; + cell_voltage->high_chip = (uint8_t)high_chip_raw; + uint64_t high_cell_mask = (1ULL << 4) - 1ULL; + uint64_t high_cell_raw = (data >> 40) & high_cell_mask; + cell_voltage->high_cell = (uint8_t)high_cell_raw; + uint64_t low_val_mask = (1ULL << 16) - 1ULL; + uint64_t low_val_raw = (data >> 24) & low_val_mask; + cell_voltage->low_val = (float)(low_val_raw / 10000); + uint64_t low_chip_mask = (1ULL << 4) - 1ULL; + uint64_t low_chip_raw = (data >> 20) & low_chip_mask; + cell_voltage->low_chip = (uint8_t)low_chip_raw; + uint64_t low_cell_mask = (1ULL << 4) - 1ULL; + uint64_t low_cell_raw = (data >> 16) & low_cell_mask; + cell_voltage->low_cell = (uint8_t)low_cell_raw; + uint64_t avg_val_mask = (1ULL << 16) - 1ULL; + uint64_t avg_val_raw = (data >> 0) & avg_val_mask; + cell_voltage->avg_val = (float)(avg_val_raw / 10000); +} + +void receive_cell_temperatures(const can_msg_t *message, cell_temperatures_t *cell_temperatures) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t high_val_mask = (1ULL << 16) - 1ULL; + uint64_t high_val_raw = (data >> 48) & high_val_mask; + cell_temperatures->high_val = (float)(high_val_raw / 100); + uint64_t high_chip_mask = (1ULL << 4) - 1ULL; + uint64_t high_chip_raw = (data >> 44) & high_chip_mask; + cell_temperatures->high_chip = (uint8_t)high_chip_raw; + uint64_t high_cell_mask = (1ULL << 4) - 1ULL; + uint64_t high_cell_raw = (data >> 40) & high_cell_mask; + cell_temperatures->high_cell = (uint8_t)high_cell_raw; + uint64_t low_val_mask = (1ULL << 16) - 1ULL; + uint64_t low_val_raw = (data >> 24) & low_val_mask; + cell_temperatures->low_val = (float)(low_val_raw / 100); + uint64_t low_chip_mask = (1ULL << 4) - 1ULL; + uint64_t low_chip_raw = (data >> 20) & low_chip_mask; + cell_temperatures->low_chip = (uint8_t)low_chip_raw; + uint64_t low_cell_mask = (1ULL << 4) - 1ULL; + uint64_t low_cell_raw = (data >> 16) & low_cell_mask; + cell_temperatures->low_cell = (uint8_t)low_cell_raw; + uint64_t avg_val_mask = (1ULL << 16) - 1ULL; + uint64_t avg_val_raw = (data >> 0) & avg_val_mask; + cell_temperatures->avg_val = (float)(avg_val_raw / 100); +} + +void receive_segment_temperatures(const can_msg_t *message, segment_temperatures_t *segment_temperatures) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t seg1_mask = (1ULL << 8) - 1ULL; + uint64_t seg1_bits = (data >> 56) & seg1_mask; + int64_t seg1_raw = (seg1_bits & (1ULL << (8 - 1))) + ? (int64_t)(seg1_bits | ~seg1_mask) + : (int64_t)seg1_bits; + segment_temperatures->seg1 = (float)seg1_raw; + uint64_t seg2_mask = (1ULL << 8) - 1ULL; + uint64_t seg2_bits = (data >> 48) & seg2_mask; + int64_t seg2_raw = (seg2_bits & (1ULL << (8 - 1))) + ? (int64_t)(seg2_bits | ~seg2_mask) + : (int64_t)seg2_bits; + segment_temperatures->seg2 = (float)seg2_raw; + uint64_t seg3_mask = (1ULL << 8) - 1ULL; + uint64_t seg3_bits = (data >> 40) & seg3_mask; + int64_t seg3_raw = (seg3_bits & (1ULL << (8 - 1))) + ? (int64_t)(seg3_bits | ~seg3_mask) + : (int64_t)seg3_bits; + segment_temperatures->seg3 = (float)seg3_raw; + uint64_t seg4_mask = (1ULL << 8) - 1ULL; + uint64_t seg4_bits = (data >> 32) & seg4_mask; + int64_t seg4_raw = (seg4_bits & (1ULL << (8 - 1))) + ? (int64_t)(seg4_bits | ~seg4_mask) + : (int64_t)seg4_bits; + segment_temperatures->seg4 = (float)seg4_raw; + uint64_t seg5_mask = (1ULL << 8) - 1ULL; + uint64_t seg5_bits = (data >> 24) & seg5_mask; + int64_t seg5_raw = (seg5_bits & (1ULL << (8 - 1))) + ? (int64_t)(seg5_bits | ~seg5_mask) + : (int64_t)seg5_bits; + segment_temperatures->seg5 = (float)seg5_raw; +} + +void receive_segment_isospi_communication_status(const can_msg_t *message, segment_isospi_communication_status_t *segment_isospi_communication_status) { + + uint32_t data_bigendian; + memcpy(&data_bigendian, message->data, 4); + uint32_t data = __builtin_bswap32(data_bigendian); + uint64_t state_mask = (1ULL << 8) - 1ULL; + uint64_t state_raw = (data >> 24) & state_mask; + segment_isospi_communication_status->state = (uint8_t)state_raw; + uint64_t break_location_mask = (1ULL << 8) - 1ULL; + uint64_t break_location_raw = (data >> 16) & break_location_mask; + segment_isospi_communication_status->break_location = (uint8_t)break_location_raw; + uint64_t verification_attempts_mask = (1ULL << 8) - 1ULL; + uint64_t verification_attempts_raw = (data >> 8) & verification_attempts_mask; + segment_isospi_communication_status->verification_attempts = (uint8_t)verification_attempts_raw; + uint64_t recovery_successful_mask = (1ULL << 1) - 1ULL; + uint64_t recovery_successful_raw = (data >> 7) & recovery_successful_mask; + segment_isospi_communication_status->recovery_successful = (uint8_t)recovery_successful_raw; +} + +void receive_fault_status(const can_msg_t *message, fault_status_t *fault_status) { + + uint16_t data_bigendian; + memcpy(&data_bigendian, message->data, 2); + uint16_t data = __builtin_bswap16(data_bigendian); + uint64_t dcl_enforce_mask = (1ULL << 1) - 1ULL; + uint64_t dcl_enforce_raw = (data >> 15) & dcl_enforce_mask; + fault_status->dcl_enforce = (bool)dcl_enforce_raw; + uint64_t ccl_enforce_mask = (1ULL << 1) - 1ULL; + uint64_t ccl_enforce_raw = (data >> 14) & ccl_enforce_mask; + fault_status->ccl_enforce = (bool)ccl_enforce_raw; + uint64_t low_cell_volt_mask = (1ULL << 1) - 1ULL; + uint64_t low_cell_volt_raw = (data >> 13) & low_cell_volt_mask; + fault_status->low_cell_volt = (bool)low_cell_volt_raw; + uint64_t high_cell_volt_mask = (1ULL << 1) - 1ULL; + uint64_t high_cell_volt_raw = (data >> 12) & high_cell_volt_mask; + fault_status->high_cell_volt = (bool)high_cell_volt_raw; + uint64_t high_charge_volt_mask = (1ULL << 1) - 1ULL; + uint64_t high_charge_volt_raw = (data >> 11) & high_charge_volt_mask; + fault_status->high_charge_volt = (bool)high_charge_volt_raw; + uint64_t pack_hot_mask = (1ULL << 1) - 1ULL; + uint64_t pack_hot_raw = (data >> 10) & pack_hot_mask; + fault_status->pack_hot = (bool)pack_hot_raw; + uint64_t die_temp_max_mask = (1ULL << 1) - 1ULL; + uint64_t die_temp_max_raw = (data >> 9) & die_temp_max_mask; + fault_status->die_temp_max = (bool)die_temp_max_raw; + uint64_t segment_comms_mask = (1ULL << 1) - 1ULL; + uint64_t segment_comms_raw = (data >> 8) & segment_comms_mask; + fault_status->segment_comms = (bool)segment_comms_raw; + uint64_t hv_plate_comms_mask = (1ULL << 1) - 1ULL; + uint64_t hv_plate_comms_raw = (data >> 7) & hv_plate_comms_mask; + fault_status->hv_plate_comms = (bool)hv_plate_comms_raw; +} + +void receive_segment_average_voltages(const can_msg_t *message, segment_average_voltages_t *segment_average_voltages) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t seg1_mask = (1ULL << 12) - 1ULL; + uint64_t seg1_raw = (data >> 52) & seg1_mask; + segment_average_voltages->seg1 = (float)(seg1_raw / 1000); + uint64_t seg2_mask = (1ULL << 12) - 1ULL; + uint64_t seg2_raw = (data >> 40) & seg2_mask; + segment_average_voltages->seg2 = (float)(seg2_raw / 1000); + uint64_t seg3_mask = (1ULL << 12) - 1ULL; + uint64_t seg3_raw = (data >> 28) & seg3_mask; + segment_average_voltages->seg3 = (float)(seg3_raw / 1000); + uint64_t seg4_mask = (1ULL << 12) - 1ULL; + uint64_t seg4_raw = (data >> 16) & seg4_mask; + segment_average_voltages->seg4 = (float)(seg4_raw / 1000); + uint64_t seg5_mask = (1ULL << 12) - 1ULL; + uint64_t seg5_raw = (data >> 4) & seg5_mask; + segment_average_voltages->seg5 = (float)(seg5_raw / 1000); +} + +void receive_segment_total_voltages(const can_msg_t *message, segment_total_voltages_t *segment_total_voltages) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t seg1_mask = (1ULL << 12) - 1ULL; + uint64_t seg1_raw = (data >> 52) & seg1_mask; + segment_total_voltages->seg1 = (float)(seg1_raw / 39); + uint64_t seg2_mask = (1ULL << 12) - 1ULL; + uint64_t seg2_raw = (data >> 40) & seg2_mask; + segment_total_voltages->seg2 = (float)(seg2_raw / 39); + uint64_t seg3_mask = (1ULL << 12) - 1ULL; + uint64_t seg3_raw = (data >> 28) & seg3_mask; + segment_total_voltages->seg3 = (float)(seg3_raw / 39); + uint64_t seg4_mask = (1ULL << 12) - 1ULL; + uint64_t seg4_raw = (data >> 16) & seg4_mask; + segment_total_voltages->seg4 = (float)(seg4_raw / 39); + uint64_t seg5_mask = (1ULL << 12) - 1ULL; + uint64_t seg5_raw = (data >> 4) & seg5_mask; + segment_total_voltages->seg5 = (float)(seg5_raw / 39); +} + +void receive_segment_delta_voltages(const can_msg_t *message, segment_delta_voltages_t *segment_delta_voltages) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t seg1_mask = (1ULL << 12) - 1ULL; + uint64_t seg1_raw = (data >> 52) & seg1_mask; + segment_delta_voltages->seg1 = (float)(seg1_raw / 1000); + uint64_t seg2_mask = (1ULL << 12) - 1ULL; + uint64_t seg2_raw = (data >> 40) & seg2_mask; + segment_delta_voltages->seg2 = (float)(seg2_raw / 1000); + uint64_t seg3_mask = (1ULL << 12) - 1ULL; + uint64_t seg3_raw = (data >> 28) & seg3_mask; + segment_delta_voltages->seg3 = (float)(seg3_raw / 1000); + uint64_t seg4_mask = (1ULL << 12) - 1ULL; + uint64_t seg4_raw = (data >> 16) & seg4_mask; + segment_delta_voltages->seg4 = (float)(seg4_raw / 1000); + uint64_t seg5_mask = (1ULL << 12) - 1ULL; + uint64_t seg5_raw = (data >> 4) & seg5_mask; + segment_delta_voltages->seg5 = (float)(seg5_raw / 1000); +} + +void receive_bms_debug(const can_msg_t *message, bms_debug_t *bms_debug) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t spare0_mask = (1ULL << 8) - 1ULL; + uint64_t spare0_raw = (data >> 56) & spare0_mask; + bms_debug->spare0 = (uint8_t)spare0_raw; + uint64_t spare1_mask = (1ULL << 8) - 1ULL; + uint64_t spare1_raw = (data >> 48) & spare1_mask; + bms_debug->spare1 = (uint8_t)spare1_raw; + uint64_t spare2_mask = (1ULL << 16) - 1ULL; + uint64_t spare2_raw = (data >> 32) & spare2_mask; + bms_debug->spare2 = (uint16_t)spare2_raw; + uint64_t spare3_mask = (1ULL << 32) - 1ULL; + uint64_t spare3_raw = (data >> 0) & spare3_mask; + bms_debug->spare3 = (uint32_t)spare3_raw; +} + +void receive_bms_fault_timers(const can_msg_t *message, bms_fault_timers_t *bms_fault_timers) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t start_stop_mask = (1ULL << 8) - 1ULL; + uint64_t start_stop_raw = (data >> 56) & start_stop_mask; + bms_fault_timers->start_stop = (uint8_t)start_stop_raw; + uint64_t code_mask = (1ULL << 8) - 1ULL; + uint64_t code_raw = (data >> 48) & code_mask; + bms_fault_timers->code = (uint8_t)code_raw; + uint64_t value_mask = (1ULL << 32) - 1ULL; + uint64_t value_raw = (data >> 16) & value_mask; + bms_fault_timers->value = (float)value_raw; +} + +void receive_shepherd_version_tag(const can_msg_t *message, shepherd_version_tag_t *shepherd_version_tag) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t major_mask = (1ULL << 8) - 1ULL; + uint64_t major_raw = (data >> 56) & major_mask; + shepherd_version_tag->major = (uint8_t)major_raw; + uint64_t minor_mask = (1ULL << 8) - 1ULL; + uint64_t minor_raw = (data >> 48) & minor_mask; + shepherd_version_tag->minor = (uint8_t)minor_raw; + uint64_t patch_mask = (1ULL << 8) - 1ULL; + uint64_t patch_raw = (data >> 40) & patch_mask; + shepherd_version_tag->patch = (uint8_t)patch_raw; + uint64_t dirty_mask = (1ULL << 8) - 1ULL; + uint64_t dirty_raw = (data >> 32) & dirty_mask; + shepherd_version_tag->dirty = (bool)dirty_raw; + uint64_t local_commit_mask = (1ULL << 8) - 1ULL; + uint64_t local_commit_raw = (data >> 24) & local_commit_mask; + shepherd_version_tag->local_commit = (bool)local_commit_raw; +} + +void receive_shepherd_version_hash(const can_msg_t *message, shepherd_version_hash_t *shepherd_version_hash) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t short_hash_mask = (1ULL << 32) - 1ULL; + uint64_t short_hash_raw = (data >> 32) & short_hash_mask; + shepherd_version_hash->short_hash = (uint32_t)short_hash_raw; + uint64_t author_hash_mask = (1ULL << 32) - 1ULL; + uint64_t author_hash_raw = (data >> 0) & author_hash_mask; + shepherd_version_hash->author_hash = (uint32_t)author_hash_raw; +} + +void receive_overflow_notification_for_percell(const can_msg_t *message, overflow_notification_for_percell_t *overflow_notification_for_percell) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t overflow_can_id_mask = (1ULL << 32) - 1ULL; + uint64_t overflow_can_id_raw = (data >> 32) & overflow_can_id_mask; + overflow_notification_for_percell->overflow_can_id = (uint32_t)overflow_can_id_raw; + uint64_t overflow_cnt_mask = (1ULL << 16) - 1ULL; + uint64_t overflow_cnt_raw = (data >> 16) & overflow_cnt_mask; + overflow_notification_for_percell->overflow_cnt = (uint16_t)overflow_cnt_raw; +} + +void receive_alpha_cell_data_debug(const can_msg_t *message, alpha_cell_data_debug_t *alpha_cell_data_debug) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t therm_mask = (1ULL << 10) - 1ULL; + uint64_t therm_raw = (data >> 54) & therm_mask; + alpha_cell_data_debug->therm = (float)(therm_raw / 10); + uint64_t voltage_a_mask = (1ULL << 13) - 1ULL; + uint64_t voltage_a_raw = (data >> 41) & voltage_a_mask; + alpha_cell_data_debug->voltage_a = (float)(voltage_a_raw / 1000); + uint64_t voltage_b_mask = (1ULL << 13) - 1ULL; + uint64_t voltage_b_raw = (data >> 28) & voltage_b_mask; + alpha_cell_data_debug->voltage_b = (float)(voltage_b_raw / 1000); + uint64_t chip_id_mask = (1ULL << 4) - 1ULL; + uint64_t chip_id_raw = (data >> 24) & chip_id_mask; + alpha_cell_data_debug->chip_id = (uint8_t)chip_id_raw; + uint64_t cell_a_mask = (1ULL << 4) - 1ULL; + uint64_t cell_a_raw = (data >> 20) & cell_a_mask; + alpha_cell_data_debug->cell_a = (uint8_t)cell_a_raw; + uint64_t cell_b_mask = (1ULL << 4) - 1ULL; + uint64_t cell_b_raw = (data >> 16) & cell_b_mask; + alpha_cell_data_debug->cell_b = (uint8_t)cell_b_raw; + uint64_t discharging_a_mask = (1ULL << 1) - 1ULL; + uint64_t discharging_a_raw = (data >> 15) & discharging_a_mask; + alpha_cell_data_debug->discharging_a = (bool)discharging_a_raw; + uint64_t discharging_b_mask = (1ULL << 1) - 1ULL; + uint64_t discharging_b_raw = (data >> 14) & discharging_b_mask; + alpha_cell_data_debug->discharging_b = (bool)discharging_b_raw; + uint64_t cvs_a_mask = (1ULL << 1) - 1ULL; + uint64_t cvs_a_raw = (data >> 13) & cvs_a_mask; + alpha_cell_data_debug->cvs_a = (bool)cvs_a_raw; + uint64_t cvs_b_mask = (1ULL << 1) - 1ULL; + uint64_t cvs_b_raw = (data >> 12) & cvs_b_mask; + alpha_cell_data_debug->cvs_b = (bool)cvs_b_raw; +} + +void receive_beta_cell_data_debug(const can_msg_t *message, beta_cell_data_debug_t *beta_cell_data_debug) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t therm_mask = (1ULL << 10) - 1ULL; + uint64_t therm_raw = (data >> 54) & therm_mask; + beta_cell_data_debug->therm = (float)(therm_raw / 10); + uint64_t voltage_a_mask = (1ULL << 13) - 1ULL; + uint64_t voltage_a_raw = (data >> 41) & voltage_a_mask; + beta_cell_data_debug->voltage_a = (float)(voltage_a_raw / 1000); + uint64_t voltage_b_mask = (1ULL << 13) - 1ULL; + uint64_t voltage_b_raw = (data >> 28) & voltage_b_mask; + beta_cell_data_debug->voltage_b = (float)(voltage_b_raw / 1000); + uint64_t chip_id_mask = (1ULL << 4) - 1ULL; + uint64_t chip_id_raw = (data >> 24) & chip_id_mask; + beta_cell_data_debug->chip_id = (uint8_t)chip_id_raw; + uint64_t cell_a_mask = (1ULL << 4) - 1ULL; + uint64_t cell_a_raw = (data >> 20) & cell_a_mask; + beta_cell_data_debug->cell_a = (uint8_t)cell_a_raw; + uint64_t cell_b_mask = (1ULL << 4) - 1ULL; + uint64_t cell_b_raw = (data >> 16) & cell_b_mask; + beta_cell_data_debug->cell_b = (uint8_t)cell_b_raw; + uint64_t discharging_a_mask = (1ULL << 1) - 1ULL; + uint64_t discharging_a_raw = (data >> 15) & discharging_a_mask; + beta_cell_data_debug->discharging_a = (bool)discharging_a_raw; + uint64_t discharging_b_mask = (1ULL << 1) - 1ULL; + uint64_t discharging_b_raw = (data >> 14) & discharging_b_mask; + beta_cell_data_debug->discharging_b = (bool)discharging_b_raw; + uint64_t cvs_a_mask = (1ULL << 1) - 1ULL; + uint64_t cvs_a_raw = (data >> 13) & cvs_a_mask; + beta_cell_data_debug->cvs_a = (bool)cvs_a_raw; + uint64_t cvs_b_mask = (1ULL << 1) - 1ULL; + uint64_t cvs_b_raw = (data >> 12) & cvs_b_mask; + beta_cell_data_debug->cvs_b = (bool)cvs_b_raw; +} + +void receive_alpha_chip_a_debug(const can_msg_t *message, alpha_chip_a_debug_t *alpha_chip_a_debug) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t chip_id_mask = (1ULL << 4) - 1ULL; + uint64_t chip_id_raw = (data >> 60) & chip_id_mask; + alpha_chip_a_debug->chip_id = (uint8_t)chip_id_raw; + uint64_t die_temp_mask = (1ULL << 13) - 1ULL; + uint64_t die_temp_raw = (data >> 47) & die_temp_mask; + alpha_chip_a_debug->die_temp = (float)(die_temp_raw / 100); + uint64_t vpv_mask = (1ULL << 13) - 1ULL; + uint64_t vpv_raw = (data >> 34) & vpv_mask; + alpha_chip_a_debug->vpv = (float)(vpv_raw / 100); + uint64_t vmv_mask = (1ULL << 13) - 1ULL; + uint64_t vmv_raw = (data >> 21) & vmv_mask; + alpha_chip_a_debug->vmv = (float)(vmv_raw / 1000); + uint64_t va_ov_mask = (1ULL << 1) - 1ULL; + uint64_t va_ov_raw = (data >> 20) & va_ov_mask; + alpha_chip_a_debug->va_ov = (bool)va_ov_raw; + uint64_t va_uv_mask = (1ULL << 1) - 1ULL; + uint64_t va_uv_raw = (data >> 19) & va_uv_mask; + alpha_chip_a_debug->va_uv = (bool)va_uv_raw; + uint64_t vd_ov_mask = (1ULL << 1) - 1ULL; + uint64_t vd_ov_raw = (data >> 18) & vd_ov_mask; + alpha_chip_a_debug->vd_ov = (bool)vd_ov_raw; + uint64_t vd_uv_mask = (1ULL << 1) - 1ULL; + uint64_t vd_uv_raw = (data >> 17) & vd_uv_mask; + alpha_chip_a_debug->vd_uv = (bool)vd_uv_raw; + uint64_t vde_mask = (1ULL << 1) - 1ULL; + uint64_t vde_raw = (data >> 16) & vde_mask; + alpha_chip_a_debug->vde = (bool)vde_raw; + uint64_t vdel_mask = (1ULL << 1) - 1ULL; + uint64_t vdel_raw = (data >> 15) & vdel_mask; + alpha_chip_a_debug->vdel = (bool)vdel_raw; + uint64_t spiflt_mask = (1ULL << 1) - 1ULL; + uint64_t spiflt_raw = (data >> 14) & spiflt_mask; + alpha_chip_a_debug->spiflt = (bool)spiflt_raw; + uint64_t sleep_mask = (1ULL << 1) - 1ULL; + uint64_t sleep_raw = (data >> 13) & sleep_mask; + alpha_chip_a_debug->sleep = (bool)sleep_raw; + uint64_t thsd_mask = (1ULL << 1) - 1ULL; + uint64_t thsd_raw = (data >> 12) & thsd_mask; + alpha_chip_a_debug->thsd = (bool)thsd_raw; + uint64_t tmodchk_mask = (1ULL << 1) - 1ULL; + uint64_t tmodchk_raw = (data >> 11) & tmodchk_mask; + alpha_chip_a_debug->tmodchk = (bool)tmodchk_raw; + uint64_t oscchk_mask = (1ULL << 1) - 1ULL; + uint64_t oscchk_raw = (data >> 10) & oscchk_mask; + alpha_chip_a_debug->oscchk = (bool)oscchk_raw; +} + +void receive_alpha_chip_b_debug(const can_msg_t *message, alpha_chip_b_debug_t *alpha_chip_b_debug) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t vres_mask = (1ULL << 13) - 1ULL; + uint64_t vres_raw = (data >> 51) & vres_mask; + alpha_chip_b_debug->vres = (float)(vres_raw / 1000); + uint64_t chip_id_mask = (1ULL << 4) - 1ULL; + uint64_t chip_id_raw = (data >> 47) & chip_id_mask; + alpha_chip_b_debug->chip_id = (uint8_t)chip_id_raw; + uint64_t vref2_mask = (1ULL << 13) - 1ULL; + uint64_t vref2_raw = (data >> 34) & vref2_mask; + alpha_chip_b_debug->vref2 = (float)(vref2_raw / 1000); + uint64_t v_analog_mask = (1ULL << 13) - 1ULL; + uint64_t v_analog_raw = (data >> 21) & v_analog_mask; + alpha_chip_b_debug->v_analog = (float)(v_analog_raw / 1000); + uint64_t v_digital_mask = (1ULL << 13) - 1ULL; + uint64_t v_digital_raw = (data >> 8) & v_digital_mask; + alpha_chip_b_debug->v_digital = (float)(v_digital_raw / 1000); + uint64_t otp1_med_mask = (1ULL << 1) - 1ULL; + uint64_t otp1_med_raw = (data >> 7) & otp1_med_mask; + alpha_chip_b_debug->otp1_med = (bool)otp1_med_raw; + uint64_t opt2_med_mask = (1ULL << 1) - 1ULL; + uint64_t opt2_med_raw = (data >> 6) & opt2_med_mask; + alpha_chip_b_debug->opt2_med = (bool)opt2_med_raw; +} + +void receive_beta_chip_a_debug(const can_msg_t *message, beta_chip_a_debug_t *beta_chip_a_debug) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t chip_id_mask = (1ULL << 4) - 1ULL; + uint64_t chip_id_raw = (data >> 60) & chip_id_mask; + beta_chip_a_debug->chip_id = (uint8_t)chip_id_raw; + uint64_t die_temp_mask = (1ULL << 13) - 1ULL; + uint64_t die_temp_raw = (data >> 47) & die_temp_mask; + beta_chip_a_debug->die_temp = (float)(die_temp_raw / 100); + uint64_t vpv_mask = (1ULL << 13) - 1ULL; + uint64_t vpv_raw = (data >> 34) & vpv_mask; + beta_chip_a_debug->vpv = (float)(vpv_raw / 100); + uint64_t vmv_mask = (1ULL << 13) - 1ULL; + uint64_t vmv_raw = (data >> 21) & vmv_mask; + beta_chip_a_debug->vmv = (float)(vmv_raw / 1000); + uint64_t va_ov_mask = (1ULL << 1) - 1ULL; + uint64_t va_ov_raw = (data >> 20) & va_ov_mask; + beta_chip_a_debug->va_ov = (bool)va_ov_raw; + uint64_t va_uv_mask = (1ULL << 1) - 1ULL; + uint64_t va_uv_raw = (data >> 19) & va_uv_mask; + beta_chip_a_debug->va_uv = (bool)va_uv_raw; + uint64_t vd_ov_mask = (1ULL << 1) - 1ULL; + uint64_t vd_ov_raw = (data >> 18) & vd_ov_mask; + beta_chip_a_debug->vd_ov = (bool)vd_ov_raw; + uint64_t vd_uv_mask = (1ULL << 1) - 1ULL; + uint64_t vd_uv_raw = (data >> 17) & vd_uv_mask; + beta_chip_a_debug->vd_uv = (bool)vd_uv_raw; + uint64_t vde_mask = (1ULL << 1) - 1ULL; + uint64_t vde_raw = (data >> 16) & vde_mask; + beta_chip_a_debug->vde = (bool)vde_raw; + uint64_t vdel_mask = (1ULL << 1) - 1ULL; + uint64_t vdel_raw = (data >> 15) & vdel_mask; + beta_chip_a_debug->vdel = (bool)vdel_raw; + uint64_t spiflt_mask = (1ULL << 1) - 1ULL; + uint64_t spiflt_raw = (data >> 14) & spiflt_mask; + beta_chip_a_debug->spiflt = (bool)spiflt_raw; + uint64_t sleep_mask = (1ULL << 1) - 1ULL; + uint64_t sleep_raw = (data >> 13) & sleep_mask; + beta_chip_a_debug->sleep = (bool)sleep_raw; + uint64_t thsd_mask = (1ULL << 1) - 1ULL; + uint64_t thsd_raw = (data >> 12) & thsd_mask; + beta_chip_a_debug->thsd = (bool)thsd_raw; + uint64_t tmodchk_mask = (1ULL << 1) - 1ULL; + uint64_t tmodchk_raw = (data >> 11) & tmodchk_mask; + beta_chip_a_debug->tmodchk = (bool)tmodchk_raw; + uint64_t oscchk_mask = (1ULL << 1) - 1ULL; + uint64_t oscchk_raw = (data >> 10) & oscchk_mask; + beta_chip_a_debug->oscchk = (bool)oscchk_raw; +} + +void receive_beta_chip_b_debug(const can_msg_t *message, beta_chip_b_debug_t *beta_chip_b_debug) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t vres_mask = (1ULL << 13) - 1ULL; + uint64_t vres_raw = (data >> 51) & vres_mask; + beta_chip_b_debug->vres = (float)(vres_raw / 1000); + uint64_t chip_id_mask = (1ULL << 4) - 1ULL; + uint64_t chip_id_raw = (data >> 47) & chip_id_mask; + beta_chip_b_debug->chip_id = (uint8_t)chip_id_raw; + uint64_t vref2_mask = (1ULL << 13) - 1ULL; + uint64_t vref2_raw = (data >> 34) & vref2_mask; + beta_chip_b_debug->vref2 = (float)(vref2_raw / 1000); + uint64_t v_analog_mask = (1ULL << 13) - 1ULL; + uint64_t v_analog_raw = (data >> 21) & v_analog_mask; + beta_chip_b_debug->v_analog = (float)(v_analog_raw / 1000); + uint64_t v_digital_mask = (1ULL << 13) - 1ULL; + uint64_t v_digital_raw = (data >> 8) & v_digital_mask; + beta_chip_b_debug->v_digital = (float)(v_digital_raw / 1000); + uint64_t otp1_med_mask = (1ULL << 1) - 1ULL; + uint64_t otp1_med_raw = (data >> 7) & otp1_med_mask; + beta_chip_b_debug->otp1_med = (bool)otp1_med_raw; + uint64_t opt2_med_mask = (1ULL << 1) - 1ULL; + uint64_t opt2_med_raw = (data >> 6) & opt2_med_mask; + beta_chip_b_debug->opt2_med = (bool)opt2_med_raw; +} + +void receive_fan_duty_cycle_percentage(const can_msg_t *message, fan_duty_cycle_percentage_t *fan_duty_cycle_percentage) { + + uint8_t data = message->data[0]; + uint64_t fan_duty_cycle_mask = (1ULL << 8) - 1ULL; + uint64_t fan_duty_cycle_raw = (data >> 0) & fan_duty_cycle_mask; + fan_duty_cycle_percentage->fan_duty_cycle = (uint8_t)fan_duty_cycle_raw; +} + +void receive_onboard_therm_temperatures(const can_msg_t *message, onboard_therm_temperatures_t *onboard_therm_temperatures) { + + uint8_t data = message->data[0]; + uint64_t chip_id_mask = (1ULL << 1) - 1ULL; + uint64_t chip_id_raw = (data >> 7) & chip_id_mask; + onboard_therm_temperatures->chip_id = (uint8_t)chip_id_raw; + uint64_t therm_temp_1_mask = (1ULL << 2) - 1ULL; + uint64_t therm_temp_1_raw = (data >> 5) & therm_temp_1_mask; + onboard_therm_temperatures->therm_temp_1 = (float)therm_temp_1_raw; + uint64_t therm_temp_2_mask = (1ULL << 2) - 1ULL; + uint64_t therm_temp_2_raw = (data >> 3) & therm_temp_2_mask; + onboard_therm_temperatures->therm_temp_2 = (float)therm_temp_2_raw; + uint64_t therm_temp_3_mask = (1ULL << 2) - 1ULL; + uint64_t therm_temp_3_raw = (data >> 1) & therm_temp_3_mask; + onboard_therm_temperatures->therm_temp_3 = (float)therm_temp_3_raw; +} + +void receive_precharge_status(const can_msg_t *message, precharge_status_t *precharge_status) { + + uint8_t data = message->data[0]; + uint64_t precharge_status_mask = (1ULL << 1) - 1ULL; + uint64_t precharge_status_raw = (data >> 7) & precharge_status_mask; + precharge_status->precharge_status = (bool)precharge_status_raw; +} + +void receive_hv_plate_data(const can_msg_t *message, hv_plate_data_t *hv_plate_data) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t batt_voltage_mask = (1ULL << 16) - 1ULL; + uint64_t batt_voltage_bits = (data >> 48) & batt_voltage_mask; + int64_t batt_voltage_raw = (batt_voltage_bits & (1ULL << (16 - 1))) + ? (int64_t)(batt_voltage_bits | ~batt_voltage_mask) + : (int64_t)batt_voltage_bits; + hv_plate_data->batt_voltage = (float)(batt_voltage_raw / 100); + uint64_t ts_voltage_mask = (1ULL << 16) - 1ULL; + uint64_t ts_voltage_bits = (data >> 32) & ts_voltage_mask; + int64_t ts_voltage_raw = (ts_voltage_bits & (1ULL << (16 - 1))) + ? (int64_t)(ts_voltage_bits | ~ts_voltage_mask) + : (int64_t)ts_voltage_bits; + hv_plate_data->ts_voltage = (float)(ts_voltage_raw / 100); + uint64_t shunt_temp_mask = (1ULL << 16) - 1ULL; + uint64_t shunt_temp_bits = (data >> 16) & shunt_temp_mask; + int64_t shunt_temp_raw = (shunt_temp_bits & (1ULL << (16 - 1))) + ? (int64_t)(shunt_temp_bits | ~shunt_temp_mask) + : (int64_t)shunt_temp_bits; + hv_plate_data->shunt_temp = (float)(shunt_temp_raw / 100); + uint64_t pack_current_mask = (1ULL << 16) - 1ULL; + uint64_t pack_current_bits = (data >> 0) & pack_current_mask; + int64_t pack_current_raw = (pack_current_bits & (1ULL << (16 - 1))) + ? (int64_t)(pack_current_bits | ~pack_current_mask) + : (int64_t)pack_current_bits; + hv_plate_data->pack_current = (float)(pack_current_raw / 100); +} + +void receive_segment_pec_errors(const can_msg_t *message, segment_pec_errors_t *segment_pec_errors) { + + uint32_t data_bigendian; + memcpy(&data_bigendian, message->data, 4); + uint32_t data = __builtin_bswap32(data_bigendian); + uint64_t chip_id_mask = (1ULL << 8) - 1ULL; + uint64_t chip_id_raw = (data >> 24) & chip_id_mask; + segment_pec_errors->chip_id = (uint8_t)chip_id_raw; + uint64_t pec_errors_mask = (1ULL << 16) - 1ULL; + uint64_t pec_errors_raw = (data >> 8) & pec_errors_mask; + segment_pec_errors->pec_errors = (uint16_t)pec_errors_raw; +} + +void receive_hv_plate_pec_errors(const can_msg_t *message, hv_plate_pec_errors_t *hv_plate_pec_errors) { + + uint16_t data_bigendian; + memcpy(&data_bigendian, message->data, 2); + uint16_t data = __builtin_bswap16(data_bigendian); + uint64_t pec_errors_mask = (1ULL << 16) - 1ULL; + uint64_t pec_errors_raw = (data >> 0) & pec_errors_mask; + hv_plate_pec_errors->pec_errors = (uint16_t)pec_errors_raw; +} + +void receive_hv_plate_diagnostics(const can_msg_t *message, hv_plate_diagnostics_t *hv_plate_diagnostics) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t flags_mask = (1ULL << 12) - 1ULL; + uint64_t flags_raw = (data >> 52) & flags_mask; + hv_plate_diagnostics->flags = (uint16_t)flags_raw; + uint64_t vreg_mask = (1ULL << 12) - 1ULL; + uint64_t vreg_raw = (data >> 40) & vreg_mask; + hv_plate_diagnostics->vreg = (float)(vreg_raw / 100); + uint64_t tmp1_mask = (1ULL << 12) - 1ULL; + uint64_t tmp1_raw = (data >> 28) & tmp1_mask; + hv_plate_diagnostics->tmp1 = (float)(tmp1_raw / 100); + uint64_t vref1p25_mask = (1ULL << 12) - 1ULL; + uint64_t vref1p25_raw = (data >> 16) & vref1p25_mask; + hv_plate_diagnostics->vref1p25 = (float)(vref1p25_raw / 100); + uint64_t osccnt_mask = (1ULL << 16) - 1ULL; + uint64_t osccnt_raw = (data >> 0) & osccnt_mask; + hv_plate_diagnostics->osccnt = (uint16_t)osccnt_raw; +} + +void receive_hv_plate_diagnostics_second(const can_msg_t *message, hv_plate_diagnostics_second_t *hv_plate_diagnostics_second) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t epad_mask = (1ULL << 12) - 1ULL; + uint64_t epad_raw = (data >> 52) & epad_mask; + hv_plate_diagnostics_second->epad = (float)(epad_raw / 100); + uint64_t vdig_mask = (1ULL << 12) - 1ULL; + uint64_t vdig_raw = (data >> 40) & vdig_mask; + hv_plate_diagnostics_second->vdig = (float)(vdig_raw / 100); + uint64_t vdd_mask = (1ULL << 12) - 1ULL; + uint64_t vdd_raw = (data >> 28) & vdd_mask; + hv_plate_diagnostics_second->vdd = (float)(vdd_raw / 100); + uint64_t tmp2_mask = (1ULL << 12) - 1ULL; + uint64_t tmp2_raw = (data >> 16) & tmp2_mask; + hv_plate_diagnostics_second->tmp2 = (float)(tmp2_raw / 100); + uint64_t vdiv_mask = (1ULL << 12) - 1ULL; + uint64_t vdiv_raw = (data >> 4) & vdiv_mask; + hv_plate_diagnostics_second->vdiv = (float)(vdiv_raw / 100); +} + +void receive_bms_onboard_temperature(const can_msg_t *message, bms_onboard_temperature_t *bms_onboard_temperature) { + + uint16_t data_bigendian; + memcpy(&data_bigendian, message->data, 2); + uint16_t data = __builtin_bswap16(data_bigendian); + uint64_t internal_temp_mask = (1ULL << 16) - 1ULL; + uint64_t internal_temp_raw = (data >> 0) & internal_temp_mask; + bms_onboard_temperature->internal_temp = (float)(internal_temp_raw / 100); +} + +void receive_bms_imu_accelerometer(const can_msg_t *message, bms_imu_accelerometer_t *bms_imu_accelerometer) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t imu_accelerometer_x_mask = (1ULL << 16) - 1ULL; + uint64_t imu_accelerometer_x_bits = (data >> 48) & imu_accelerometer_x_mask; + int64_t imu_accelerometer_x_raw = (imu_accelerometer_x_bits & (1ULL << (16 - 1))) + ? (int64_t)(imu_accelerometer_x_bits | ~imu_accelerometer_x_mask) + : (int64_t)imu_accelerometer_x_bits; + bms_imu_accelerometer->imu_accelerometer_x = (float)(imu_accelerometer_x_raw / 4); + uint64_t imu_accelerometer_y_mask = (1ULL << 16) - 1ULL; + uint64_t imu_accelerometer_y_bits = (data >> 32) & imu_accelerometer_y_mask; + int64_t imu_accelerometer_y_raw = (imu_accelerometer_y_bits & (1ULL << (16 - 1))) + ? (int64_t)(imu_accelerometer_y_bits | ~imu_accelerometer_y_mask) + : (int64_t)imu_accelerometer_y_bits; + bms_imu_accelerometer->imu_accelerometer_y = (float)(imu_accelerometer_y_raw / 4); + uint64_t imu_accelerometer_z_mask = (1ULL << 16) - 1ULL; + uint64_t imu_accelerometer_z_bits = (data >> 16) & imu_accelerometer_z_mask; + int64_t imu_accelerometer_z_raw = (imu_accelerometer_z_bits & (1ULL << (16 - 1))) + ? (int64_t)(imu_accelerometer_z_bits | ~imu_accelerometer_z_mask) + : (int64_t)imu_accelerometer_z_bits; + bms_imu_accelerometer->imu_accelerometer_z = (float)(imu_accelerometer_z_raw / 4); +} + +void receive_bms_imu_gyro(const can_msg_t *message, bms_imu_gyro_t *bms_imu_gyro) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t imu_gyro_x_mask = (1ULL << 16) - 1ULL; + uint64_t imu_gyro_x_bits = (data >> 48) & imu_gyro_x_mask; + int64_t imu_gyro_x_raw = (imu_gyro_x_bits & (1ULL << (16 - 1))) + ? (int64_t)(imu_gyro_x_bits | ~imu_gyro_x_mask) + : (int64_t)imu_gyro_x_bits; + bms_imu_gyro->imu_gyro_x = (float)(imu_gyro_x_raw / 100); + uint64_t imu_gyro_y_mask = (1ULL << 16) - 1ULL; + uint64_t imu_gyro_y_bits = (data >> 32) & imu_gyro_y_mask; + int64_t imu_gyro_y_raw = (imu_gyro_y_bits & (1ULL << (16 - 1))) + ? (int64_t)(imu_gyro_y_bits | ~imu_gyro_y_mask) + : (int64_t)imu_gyro_y_bits; + bms_imu_gyro->imu_gyro_y = (float)(imu_gyro_y_raw / 100); + uint64_t imu_gyro_z_mask = (1ULL << 16) - 1ULL; + uint64_t imu_gyro_z_bits = (data >> 16) & imu_gyro_z_mask; + int64_t imu_gyro_z_raw = (imu_gyro_z_bits & (1ULL << (16 - 1))) + ? (int64_t)(imu_gyro_z_bits | ~imu_gyro_z_mask) + : (int64_t)imu_gyro_z_bits; + bms_imu_gyro->imu_gyro_z = (float)(imu_gyro_z_raw / 100); +} + +void receive_pack_soc_status(const can_msg_t *message, pack_soc_status_t *pack_soc_status) { + + uint32_t data_bigendian; + memcpy(&data_bigendian, message->data, 4); + uint32_t data = __builtin_bswap32(data_bigendian); + uint64_t Pack_SoC_mask = (1ULL << 16) - 1ULL; + uint64_t Pack_SoC_raw = (data >> 16) & Pack_SoC_mask; + pack_soc_status->Pack_SoC = (float)(Pack_SoC_raw / 1000); + uint64_t Pack_SoC_Drift_mask = (1ULL << 16) - 1ULL; + uint64_t Pack_SoC_Drift_bits = (data >> 0) & Pack_SoC_Drift_mask; + int64_t Pack_SoC_Drift_raw = (Pack_SoC_Drift_bits & (1ULL << (16 - 1))) + ? (int64_t)(Pack_SoC_Drift_bits | ~Pack_SoC_Drift_mask) + : (int64_t)Pack_SoC_Drift_bits; + pack_soc_status->Pack_SoC_Drift = (float)(Pack_SoC_Drift_raw / 1000); +} + +void receive_shutdown_as_read_by_bms(const can_msg_t *message, shutdown_as_read_by_bms_t *shutdown_as_read_by_bms) { + + uint8_t data = message->data[0]; + uint64_t shutdown_mask = (1ULL << 8) - 1ULL; + uint64_t shutdown_raw = (data >> 0) & shutdown_mask; + shutdown_as_read_by_bms->shutdown = (bool)shutdown_raw; +} + +void receive_lightning_board_imu_acceleration_data(const can_msg_t *message, lightning_board_imu_acceleration_data_t *lightning_board_imu_acceleration_data) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t accel_x_mask = (1ULL << 16) - 1ULL; + uint64_t accel_x_bits = (data >> 48) & accel_x_mask; + int64_t accel_x_raw = (accel_x_bits & (1ULL << (16 - 1))) + ? (int64_t)(accel_x_bits | ~accel_x_mask) + : (int64_t)accel_x_bits; + lightning_board_imu_acceleration_data->accel_x = (float)(accel_x_raw / 1000); + uint64_t accel_y_mask = (1ULL << 16) - 1ULL; + uint64_t accel_y_bits = (data >> 32) & accel_y_mask; + int64_t accel_y_raw = (accel_y_bits & (1ULL << (16 - 1))) + ? (int64_t)(accel_y_bits | ~accel_y_mask) + : (int64_t)accel_y_bits; + lightning_board_imu_acceleration_data->accel_y = (float)(accel_y_raw / 1000); + uint64_t accel_z_mask = (1ULL << 16) - 1ULL; + uint64_t accel_z_bits = (data >> 16) & accel_z_mask; + int64_t accel_z_raw = (accel_z_bits & (1ULL << (16 - 1))) + ? (int64_t)(accel_z_bits | ~accel_z_mask) + : (int64_t)accel_z_bits; + lightning_board_imu_acceleration_data->accel_z = (float)(accel_z_raw / 1000); +} + +void receive_lightning_board_imu_gyro_data(const can_msg_t *message, lightning_board_imu_gyro_data_t *lightning_board_imu_gyro_data) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t gyro_x_mask = (1ULL << 16) - 1ULL; + uint64_t gyro_x_bits = (data >> 48) & gyro_x_mask; + int64_t gyro_x_raw = (gyro_x_bits & (1ULL << (16 - 1))) + ? (int64_t)(gyro_x_bits | ~gyro_x_mask) + : (int64_t)gyro_x_bits; + lightning_board_imu_gyro_data->gyro_x = (float)(gyro_x_raw / 1000); + uint64_t gyro_y_mask = (1ULL << 16) - 1ULL; + uint64_t gyro_y_bits = (data >> 32) & gyro_y_mask; + int64_t gyro_y_raw = (gyro_y_bits & (1ULL << (16 - 1))) + ? (int64_t)(gyro_y_bits | ~gyro_y_mask) + : (int64_t)gyro_y_bits; + lightning_board_imu_gyro_data->gyro_y = (float)(gyro_y_raw / 1000); + uint64_t gyro_z_mask = (1ULL << 16) - 1ULL; + uint64_t gyro_z_bits = (data >> 16) & gyro_z_mask; + int64_t gyro_z_raw = (gyro_z_bits & (1ULL << (16 - 1))) + ? (int64_t)(gyro_z_bits | ~gyro_z_mask) + : (int64_t)gyro_z_bits; + lightning_board_imu_gyro_data->gyro_z = (float)(gyro_z_raw / 1000); +} + +void receive_lightning_board_lightning_sensor_information(const can_msg_t *message, lightning_board_lightning_sensor_information_t *lightning_board_lightning_sensor_information) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t interrupt_mask = (1ULL << 8) - 1ULL; + uint64_t interrupt_raw = (data >> 56) & interrupt_mask; + lightning_board_lightning_sensor_information->interrupt = (uint8_t)interrupt_raw; + uint64_t distance_mask = (1ULL << 8) - 1ULL; + uint64_t distance_raw = (data >> 48) & distance_mask; + lightning_board_lightning_sensor_information->distance = (uint8_t)distance_raw; + uint64_t energy_mask = (1ULL << 32) - 1ULL; + uint64_t energy_raw = (data >> 16) & energy_mask; + lightning_board_lightning_sensor_information->energy = (uint32_t)energy_raw; +} + +void receive_lightning_board_magnometer_sensor_information(const can_msg_t *message, lightning_board_magnometer_sensor_information_t *lightning_board_magnometer_sensor_information) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t mag_x_mask = (1ULL << 16) - 1ULL; + uint64_t mag_x_bits = (data >> 48) & mag_x_mask; + int64_t mag_x_raw = (mag_x_bits & (1ULL << (16 - 1))) + ? (int64_t)(mag_x_bits | ~mag_x_mask) + : (int64_t)mag_x_bits; + lightning_board_magnometer_sensor_information->mag_x = (float)(mag_x_raw / 1000); + uint64_t mag_y_mask = (1ULL << 16) - 1ULL; + uint64_t mag_y_bits = (data >> 32) & mag_y_mask; + int64_t mag_y_raw = (mag_y_bits & (1ULL << (16 - 1))) + ? (int64_t)(mag_y_bits | ~mag_y_mask) + : (int64_t)mag_y_bits; + lightning_board_magnometer_sensor_information->mag_y = (float)(mag_y_raw / 1000); + uint64_t mag_z_mask = (1ULL << 16) - 1ULL; + uint64_t mag_z_bits = (data >> 16) & mag_z_mask; + int64_t mag_z_raw = (mag_z_bits & (1ULL << (16 - 1))) + ? (int64_t)(mag_z_bits | ~mag_z_mask) + : (int64_t)mag_z_bits; + lightning_board_magnometer_sensor_information->mag_z = (float)(mag_z_raw / 1000); +} + +void receive_dashboard_efuse_state(const can_msg_t *message, dashboard_efuse_state_t *dashboard_efuse_state) { + + uint8_t data = message->data[0]; + uint64_t state_mask = (1ULL << 8) - 1ULL; + uint64_t state_raw = (data >> 0) & state_mask; + dashboard_efuse_state->state = (uint8_t)state_raw; +} + +void receive_brake_efuse_state(const can_msg_t *message, brake_efuse_state_t *brake_efuse_state) { + + uint8_t data = message->data[0]; + uint64_t state_mask = (1ULL << 8) - 1ULL; + uint64_t state_raw = (data >> 0) & state_mask; + brake_efuse_state->state = (uint8_t)state_raw; +} + +void receive_shutdown_efuse_state(const can_msg_t *message, shutdown_efuse_state_t *shutdown_efuse_state) { + + uint8_t data = message->data[0]; + uint64_t state_mask = (1ULL << 8) - 1ULL; + uint64_t state_raw = (data >> 0) & state_mask; + shutdown_efuse_state->state = (uint8_t)state_raw; +} + +void receive_lv_efuse_state(const can_msg_t *message, lv_efuse_state_t *lv_efuse_state) { + + uint8_t data = message->data[0]; + uint64_t state_mask = (1ULL << 8) - 1ULL; + uint64_t state_raw = (data >> 0) & state_mask; + lv_efuse_state->state = (uint8_t)state_raw; +} + +void receive_radfan_efuse_state(const can_msg_t *message, radfan_efuse_state_t *radfan_efuse_state) { + + uint8_t data = message->data[0]; + uint64_t state_mask = (1ULL << 8) - 1ULL; + uint64_t state_raw = (data >> 0) & state_mask; + radfan_efuse_state->state = (uint8_t)state_raw; +} + +void receive_fanbatt_efuse_state(const can_msg_t *message, fanbatt_efuse_state_t *fanbatt_efuse_state) { + + uint8_t data = message->data[0]; + uint64_t state_mask = (1ULL << 8) - 1ULL; + uint64_t state_raw = (data >> 0) & state_mask; + fanbatt_efuse_state->state = (uint8_t)state_raw; +} + +void receive_pumpone_efuse_state(const can_msg_t *message, pumpone_efuse_state_t *pumpone_efuse_state) { + + uint8_t data = message->data[0]; + uint64_t state_mask = (1ULL << 8) - 1ULL; + uint64_t state_raw = (data >> 0) & state_mask; + pumpone_efuse_state->state = (uint8_t)state_raw; +} + +void receive_pumptwo_efuse_state(const can_msg_t *message, pumptwo_efuse_state_t *pumptwo_efuse_state) { + + uint8_t data = message->data[0]; + uint64_t state_mask = (1ULL << 8) - 1ULL; + uint64_t state_raw = (data >> 0) & state_mask; + pumptwo_efuse_state->state = (uint8_t)state_raw; +} + +void receive_battbox_efuse_state(const can_msg_t *message, battbox_efuse_state_t *battbox_efuse_state) { + + uint8_t data = message->data[0]; + uint64_t state_mask = (1ULL << 8) - 1ULL; + uint64_t state_raw = (data >> 0) & state_mask; + battbox_efuse_state->state = (uint8_t)state_raw; +} + +void receive_mc_efuse_state(const can_msg_t *message, mc_efuse_state_t *mc_efuse_state) { + + uint8_t data = message->data[0]; + uint64_t state_mask = (1ULL << 8) - 1ULL; + uint64_t state_raw = (data >> 0) & state_mask; + mc_efuse_state->state = (uint8_t)state_raw; +} + +void receive_spare_efuse_state(const can_msg_t *message, spare_efuse_state_t *spare_efuse_state) { + + uint8_t data = message->data[0]; + uint64_t state_mask = (1ULL << 8) - 1ULL; + uint64_t state_raw = (data >> 0) & state_mask; + spare_efuse_state->state = (uint8_t)state_raw; +} + +void receive_rtds_command_message(const can_msg_t *message, rtds_command_message_t *rtds_command_message) { + + uint8_t data = message->data[0]; + uint64_t command_mask = (1ULL << 8) - 1ULL; + uint64_t command_raw = (data >> 0) & command_mask; + rtds_command_message->command = (uint8_t)command_raw; +} + +void receive_wheel_buttons(const can_msg_t *message, wheel_buttons_t *wheel_buttons) { + + uint8_t data = message->data[0]; + uint64_t button_id_mask = (1ULL << 8) - 1ULL; + uint64_t button_id_raw = (data >> 0) & button_id_mask; + wheel_buttons->button_id = (uint8_t)button_id_raw; +} + +void receive_ac_current_command(const can_msg_t *message, ac_current_command_t *ac_current_command) { + + uint16_t data_bigendian; + memcpy(&data_bigendian, message->data, 2); + uint16_t data = __builtin_bswap16(data_bigendian); + uint64_t current_target_ac_mask = (1ULL << 16) - 1ULL; + uint64_t current_target_ac_bits = (data >> 0) & current_target_ac_mask; + int64_t current_target_ac_raw = (current_target_ac_bits & (1ULL << (16 - 1))) + ? (int64_t)(current_target_ac_bits | ~current_target_ac_mask) + : (int64_t)current_target_ac_bits; + ac_current_command->current_target_ac = (float)(current_target_ac_raw / 10); +} + +void receive_brake_current_command(const can_msg_t *message, brake_current_command_t *brake_current_command) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t brake_ac_current_mask = (1ULL << 16) - 1ULL; + uint64_t brake_ac_current_bits = (data >> 48) & brake_ac_current_mask; + int64_t brake_ac_current_raw = (brake_ac_current_bits & (1ULL << (16 - 1))) + ? (int64_t)(brake_ac_current_bits | ~brake_ac_current_mask) + : (int64_t)brake_ac_current_bits; + brake_current_command->brake_ac_current = (float)(brake_ac_current_raw / 10); +} + +void receive_max_ac_current_command(const can_msg_t *message, max_ac_current_command_t *max_ac_current_command) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t max_current_ac_target_mask = (1ULL << 16) - 1ULL; + uint64_t max_current_ac_target_bits = (data >> 48) & max_current_ac_target_mask; + int64_t max_current_ac_target_raw = (max_current_ac_target_bits & (1ULL << (16 - 1))) + ? (int64_t)(max_current_ac_target_bits | ~max_current_ac_target_mask) + : (int64_t)max_current_ac_target_bits; + max_ac_current_command->max_current_ac_target = (float)(max_current_ac_target_raw / 10); +} + +void receive_max_ac_brake_current_command(const can_msg_t *message, max_ac_brake_current_command_t *max_ac_brake_current_command) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t max_ac_brake_current_target_mask = (1ULL << 16) - 1ULL; + uint64_t max_ac_brake_current_target_bits = (data >> 48) & max_ac_brake_current_target_mask; + int64_t max_ac_brake_current_target_raw = (max_ac_brake_current_target_bits & (1ULL << (16 - 1))) + ? (int64_t)(max_ac_brake_current_target_bits | ~max_ac_brake_current_target_mask) + : (int64_t)max_ac_brake_current_target_bits; + max_ac_brake_current_command->max_ac_brake_current_target = (float)(max_ac_brake_current_target_raw / 10); +} + +void receive_max_dc_current_command(const can_msg_t *message, max_dc_current_command_t *max_dc_current_command) { + + uint16_t data_bigendian; + memcpy(&data_bigendian, message->data, 2); + uint16_t data = __builtin_bswap16(data_bigendian); + uint64_t max_dc_current_target_mask = (1ULL << 16) - 1ULL; + uint64_t max_dc_current_target_bits = (data >> 0) & max_dc_current_target_mask; + int64_t max_dc_current_target_raw = (max_dc_current_target_bits & (1ULL << (16 - 1))) + ? (int64_t)(max_dc_current_target_bits | ~max_dc_current_target_mask) + : (int64_t)max_dc_current_target_bits; + max_dc_current_command->max_dc_current_target = (float)(max_dc_current_target_raw / 10); +} + +void receive_max_dc_brake_current_command(const can_msg_t *message, max_dc_brake_current_command_t *max_dc_brake_current_command) { + + uint16_t data_bigendian; + memcpy(&data_bigendian, message->data, 2); + uint16_t data = __builtin_bswap16(data_bigendian); + uint64_t max_dc_brake_current_target_mask = (1ULL << 16) - 1ULL; + uint64_t max_dc_brake_current_target_bits = (data >> 0) & max_dc_brake_current_target_mask; + int64_t max_dc_brake_current_target_raw = (max_dc_brake_current_target_bits & (1ULL << (16 - 1))) + ? (int64_t)(max_dc_brake_current_target_bits | ~max_dc_brake_current_target_mask) + : (int64_t)max_dc_brake_current_target_bits; + max_dc_brake_current_command->max_dc_brake_current_target = (float)(max_dc_brake_current_target_raw / 10); +} + +void receive_drive_enable_command(const can_msg_t *message, drive_enable_command_t *drive_enable_command) { + + uint8_t data = message->data[0]; + uint64_t drive_enable_mask = (1ULL << 8) - 1ULL; + uint64_t drive_enable_raw = (data >> 0) & drive_enable_mask; + drive_enable_command->drive_enable = (uint8_t)drive_enable_raw; +} + +void receive_bms_charge_message_send(const can_msg_t *message, bms_charge_message_send_t *bms_charge_message_send) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t charge_volts_mask = (1ULL << 16) - 1ULL; + uint64_t charge_volts_raw = (data >> 48) & charge_volts_mask; + bms_charge_message_send->charge_volts = (float)(charge_volts_raw / 10); + uint64_t charge_current_mask = (1ULL << 16) - 1ULL; + uint64_t charge_current_raw = (data >> 32) & charge_current_mask; + bms_charge_message_send->charge_current = (float)(charge_current_raw / 10); + uint64_t enable_charging_mask = (1ULL << 8) - 1ULL; + uint64_t enable_charging_raw = (data >> 24) & enable_charging_mask; + bms_charge_message_send->enable_charging = (uint8_t)enable_charging_raw; +} + +void receive_dashboard_efuse(const can_msg_t *message, dashboard_efuse_t *dashboard_efuse) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t ADC_mask = (1ULL << 16) - 1ULL; + uint64_t ADC_raw = (data >> 48) & ADC_mask; + dashboard_efuse->ADC = (uint16_t)ADC_raw; + uint64_t voltage_mask = (1ULL << 16) - 1ULL; + uint64_t voltage_raw = (data >> 32) & voltage_mask; + dashboard_efuse->voltage = (float)(voltage_raw / 1000); + uint64_t current_mask = (1ULL << 16) - 1ULL; + uint64_t current_raw = (data >> 16) & current_mask; + dashboard_efuse->current = (float)(current_raw / 1000); + uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; + uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; + dashboard_efuse->is_faulted = (bool)is_faulted_raw; + uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; + uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; + dashboard_efuse->is_enabled = (bool)is_enabled_raw; + uint64_t control_state_mask = (1ULL << 8) - 1ULL; + uint64_t control_state_raw = (data >> 0) & control_state_mask; + dashboard_efuse->control_state = (uint8_t)control_state_raw; +} + +void receive_brake_efuse(const can_msg_t *message, brake_efuse_t *brake_efuse) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t ADC_mask = (1ULL << 16) - 1ULL; + uint64_t ADC_raw = (data >> 48) & ADC_mask; + brake_efuse->ADC = (uint16_t)ADC_raw; + uint64_t voltage_mask = (1ULL << 16) - 1ULL; + uint64_t voltage_raw = (data >> 32) & voltage_mask; + brake_efuse->voltage = (float)(voltage_raw / 1000); + uint64_t current_mask = (1ULL << 16) - 1ULL; + uint64_t current_raw = (data >> 16) & current_mask; + brake_efuse->current = (float)(current_raw / 1000); + uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; + uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; + brake_efuse->is_faulted = (bool)is_faulted_raw; + uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; + uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; + brake_efuse->is_enabled = (bool)is_enabled_raw; + uint64_t control_state_mask = (1ULL << 8) - 1ULL; + uint64_t control_state_raw = (data >> 0) & control_state_mask; + brake_efuse->control_state = (uint8_t)control_state_raw; +} + +void receive_shutdown_efuse(const can_msg_t *message, shutdown_efuse_t *shutdown_efuse) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t ADC_mask = (1ULL << 16) - 1ULL; + uint64_t ADC_raw = (data >> 48) & ADC_mask; + shutdown_efuse->ADC = (uint16_t)ADC_raw; + uint64_t voltage_mask = (1ULL << 16) - 1ULL; + uint64_t voltage_raw = (data >> 32) & voltage_mask; + shutdown_efuse->voltage = (float)(voltage_raw / 1000); + uint64_t current_mask = (1ULL << 16) - 1ULL; + uint64_t current_raw = (data >> 16) & current_mask; + shutdown_efuse->current = (float)(current_raw / 1000); + uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; + uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; + shutdown_efuse->is_faulted = (bool)is_faulted_raw; + uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; + uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; + shutdown_efuse->is_enabled = (bool)is_enabled_raw; + uint64_t control_state_mask = (1ULL << 8) - 1ULL; + uint64_t control_state_raw = (data >> 0) & control_state_mask; + shutdown_efuse->control_state = (uint8_t)control_state_raw; +} + +void receive_lv_efuse(const can_msg_t *message, lv_efuse_t *lv_efuse) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t ADC_mask = (1ULL << 16) - 1ULL; + uint64_t ADC_raw = (data >> 48) & ADC_mask; + lv_efuse->ADC = (uint16_t)ADC_raw; + uint64_t voltage_mask = (1ULL << 16) - 1ULL; + uint64_t voltage_raw = (data >> 32) & voltage_mask; + lv_efuse->voltage = (float)(voltage_raw / 1000); + uint64_t current_mask = (1ULL << 16) - 1ULL; + uint64_t current_raw = (data >> 16) & current_mask; + lv_efuse->current = (float)(current_raw / 1000); + uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; + uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; + lv_efuse->is_faulted = (bool)is_faulted_raw; + uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; + uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; + lv_efuse->is_enabled = (bool)is_enabled_raw; + uint64_t control_state_mask = (1ULL << 8) - 1ULL; + uint64_t control_state_raw = (data >> 0) & control_state_mask; + lv_efuse->control_state = (uint8_t)control_state_raw; +} + +void receive_radfan_efuse(const can_msg_t *message, radfan_efuse_t *radfan_efuse) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t ADC_mask = (1ULL << 16) - 1ULL; + uint64_t ADC_raw = (data >> 48) & ADC_mask; + radfan_efuse->ADC = (uint16_t)ADC_raw; + uint64_t voltage_mask = (1ULL << 16) - 1ULL; + uint64_t voltage_raw = (data >> 32) & voltage_mask; + radfan_efuse->voltage = (float)(voltage_raw / 1000); + uint64_t current_mask = (1ULL << 16) - 1ULL; + uint64_t current_raw = (data >> 16) & current_mask; + radfan_efuse->current = (float)(current_raw / 1000); + uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; + uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; + radfan_efuse->is_faulted = (bool)is_faulted_raw; + uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; + uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; + radfan_efuse->is_enabled = (bool)is_enabled_raw; + uint64_t control_state_mask = (1ULL << 8) - 1ULL; + uint64_t control_state_raw = (data >> 0) & control_state_mask; + radfan_efuse->control_state = (uint8_t)control_state_raw; +} + +void receive_fanbatt_efuse(const can_msg_t *message, fanbatt_efuse_t *fanbatt_efuse) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t ADC_mask = (1ULL << 16) - 1ULL; + uint64_t ADC_raw = (data >> 48) & ADC_mask; + fanbatt_efuse->ADC = (uint16_t)ADC_raw; + uint64_t voltage_mask = (1ULL << 16) - 1ULL; + uint64_t voltage_raw = (data >> 32) & voltage_mask; + fanbatt_efuse->voltage = (float)(voltage_raw / 1000); + uint64_t current_mask = (1ULL << 16) - 1ULL; + uint64_t current_raw = (data >> 16) & current_mask; + fanbatt_efuse->current = (float)(current_raw / 1000); + uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; + uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; + fanbatt_efuse->is_faulted = (bool)is_faulted_raw; + uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; + uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; + fanbatt_efuse->is_enabled = (bool)is_enabled_raw; + uint64_t control_state_mask = (1ULL << 8) - 1ULL; + uint64_t control_state_raw = (data >> 0) & control_state_mask; + fanbatt_efuse->control_state = (uint8_t)control_state_raw; +} + +void receive_pumpone_efuse(const can_msg_t *message, pumpone_efuse_t *pumpone_efuse) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t ADC_mask = (1ULL << 16) - 1ULL; + uint64_t ADC_raw = (data >> 48) & ADC_mask; + pumpone_efuse->ADC = (uint16_t)ADC_raw; + uint64_t voltage_mask = (1ULL << 16) - 1ULL; + uint64_t voltage_raw = (data >> 32) & voltage_mask; + pumpone_efuse->voltage = (float)(voltage_raw / 1000); + uint64_t current_mask = (1ULL << 16) - 1ULL; + uint64_t current_raw = (data >> 16) & current_mask; + pumpone_efuse->current = (float)(current_raw / 1000); + uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; + uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; + pumpone_efuse->is_faulted = (bool)is_faulted_raw; + uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; + uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; + pumpone_efuse->is_enabled = (bool)is_enabled_raw; + uint64_t control_state_mask = (1ULL << 8) - 1ULL; + uint64_t control_state_raw = (data >> 0) & control_state_mask; + pumpone_efuse->control_state = (uint8_t)control_state_raw; +} + +void receive_pumptwo_efuse(const can_msg_t *message, pumptwo_efuse_t *pumptwo_efuse) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t ADC_mask = (1ULL << 16) - 1ULL; + uint64_t ADC_raw = (data >> 48) & ADC_mask; + pumptwo_efuse->ADC = (uint16_t)ADC_raw; + uint64_t voltage_mask = (1ULL << 16) - 1ULL; + uint64_t voltage_raw = (data >> 32) & voltage_mask; + pumptwo_efuse->voltage = (float)(voltage_raw / 1000); + uint64_t current_mask = (1ULL << 16) - 1ULL; + uint64_t current_raw = (data >> 16) & current_mask; + pumptwo_efuse->current = (float)(current_raw / 1000); + uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; + uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; + pumptwo_efuse->is_faulted = (bool)is_faulted_raw; + uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; + uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; + pumptwo_efuse->is_enabled = (bool)is_enabled_raw; + uint64_t control_state_mask = (1ULL << 8) - 1ULL; + uint64_t control_state_raw = (data >> 0) & control_state_mask; + pumptwo_efuse->control_state = (uint8_t)control_state_raw; +} + +void receive_battbox_efuse(const can_msg_t *message, battbox_efuse_t *battbox_efuse) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t ADC_mask = (1ULL << 16) - 1ULL; + uint64_t ADC_raw = (data >> 48) & ADC_mask; + battbox_efuse->ADC = (uint16_t)ADC_raw; + uint64_t voltage_mask = (1ULL << 16) - 1ULL; + uint64_t voltage_raw = (data >> 32) & voltage_mask; + battbox_efuse->voltage = (float)(voltage_raw / 1000); + uint64_t current_mask = (1ULL << 16) - 1ULL; + uint64_t current_raw = (data >> 16) & current_mask; + battbox_efuse->current = (float)(current_raw / 1000); + uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; + uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; + battbox_efuse->is_faulted = (bool)is_faulted_raw; + uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; + uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; + battbox_efuse->is_enabled = (bool)is_enabled_raw; + uint64_t control_state_mask = (1ULL << 8) - 1ULL; + uint64_t control_state_raw = (data >> 0) & control_state_mask; + battbox_efuse->control_state = (uint8_t)control_state_raw; +} + +void receive_mc_efuse(const can_msg_t *message, mc_efuse_t *mc_efuse) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t ADC_mask = (1ULL << 16) - 1ULL; + uint64_t ADC_raw = (data >> 48) & ADC_mask; + mc_efuse->ADC = (uint16_t)ADC_raw; + uint64_t voltage_mask = (1ULL << 16) - 1ULL; + uint64_t voltage_raw = (data >> 32) & voltage_mask; + mc_efuse->voltage = (float)(voltage_raw / 1000); + uint64_t current_mask = (1ULL << 16) - 1ULL; + uint64_t current_raw = (data >> 16) & current_mask; + mc_efuse->current = (float)(current_raw / 1000); + uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; + uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; + mc_efuse->is_faulted = (bool)is_faulted_raw; + uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; + uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; + mc_efuse->is_enabled = (bool)is_enabled_raw; + uint64_t control_state_mask = (1ULL << 8) - 1ULL; + uint64_t control_state_raw = (data >> 0) & control_state_mask; + mc_efuse->control_state = (uint8_t)control_state_raw; +} + +void receive_spare_efuse(const can_msg_t *message, spare_efuse_t *spare_efuse) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t ADC_mask = (1ULL << 16) - 1ULL; + uint64_t ADC_raw = (data >> 48) & ADC_mask; + spare_efuse->ADC = (uint16_t)ADC_raw; + uint64_t voltage_mask = (1ULL << 16) - 1ULL; + uint64_t voltage_raw = (data >> 32) & voltage_mask; + spare_efuse->voltage = (float)(voltage_raw / 1000); + uint64_t current_mask = (1ULL << 16) - 1ULL; + uint64_t current_raw = (data >> 16) & current_mask; + spare_efuse->current = (float)(current_raw / 1000); + uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; + uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; + spare_efuse->is_faulted = (bool)is_faulted_raw; + uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; + uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; + spare_efuse->is_enabled = (bool)is_enabled_raw; + uint64_t control_state_mask = (1ULL << 8) - 1ULL; + uint64_t control_state_raw = (data >> 0) & control_state_mask; + spare_efuse->control_state = (uint8_t)control_state_raw; +} + +void receive_shutdown_pins(const can_msg_t *message, shutdown_pins_t *shutdown_pins) { + + uint16_t data_bigendian; + memcpy(&data_bigendian, message->data, 2); + uint16_t data = __builtin_bswap16(data_bigendian); + uint64_t bms_gpio_mask = (1ULL << 1) - 1ULL; + uint64_t bms_gpio_raw = (data >> 15) & bms_gpio_mask; + shutdown_pins->bms_gpio = (bool)bms_gpio_raw; + uint64_t bots_gpio_mask = (1ULL << 1) - 1ULL; + uint64_t bots_gpio_raw = (data >> 14) & bots_gpio_mask; + shutdown_pins->bots_gpio = (bool)bots_gpio_raw; + uint64_t spare_gpio_mask = (1ULL << 1) - 1ULL; + uint64_t spare_gpio_raw = (data >> 13) & spare_gpio_mask; + shutdown_pins->spare_gpio = (bool)spare_gpio_raw; + uint64_t bspd_gpio_mask = (1ULL << 1) - 1ULL; + uint64_t bspd_gpio_raw = (data >> 12) & bspd_gpio_mask; + shutdown_pins->bspd_gpio = (bool)bspd_gpio_raw; + uint64_t hv_c_mask = (1ULL << 1) - 1ULL; + uint64_t hv_c_raw = (data >> 11) & hv_c_mask; + shutdown_pins->hv_c = (bool)hv_c_raw; + uint64_t hvd_gpio_mask = (1ULL << 1) - 1ULL; + uint64_t hvd_gpio_raw = (data >> 10) & hvd_gpio_mask; + shutdown_pins->hvd_gpio = (bool)hvd_gpio_raw; + uint64_t imd_gpio_mask = (1ULL << 1) - 1ULL; + uint64_t imd_gpio_raw = (data >> 9) & imd_gpio_mask; + shutdown_pins->imd_gpio = (bool)imd_gpio_raw; + uint64_t ckpt_gpio_mask = (1ULL << 1) - 1ULL; + uint64_t ckpt_gpio_raw = (data >> 8) & ckpt_gpio_mask; + shutdown_pins->ckpt_gpio = (bool)ckpt_gpio_raw; + uint64_t inertia_sw_gpio_mask = (1ULL << 1) - 1ULL; + uint64_t inertia_sw_gpio_raw = (data >> 7) & inertia_sw_gpio_mask; + shutdown_pins->inertia_sw_gpio = (bool)inertia_sw_gpio_raw; + uint64_t tsms_gpio_mask = (1ULL << 1) - 1ULL; + uint64_t tsms_gpio_raw = (data >> 6) & tsms_gpio_mask; + shutdown_pins->tsms_gpio = (bool)tsms_gpio_raw; + uint64_t UNUSED_mask = (1ULL << 6) - 1ULL; + uint64_t UNUSED_raw = (data >> 0) & UNUSED_mask; + shutdown_pins->UNUSED = (uint8_t)UNUSED_raw; +} + +void receive_car_state(const can_msg_t *message, car_state_t *car_state) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t home_mode_mask = (1ULL << 4) - 1ULL; + uint64_t home_mode_raw = (data >> 60) & home_mode_mask; + car_state->home_mode = (bool)home_mode_raw; + uint64_t nero_index_mask = (1ULL << 4) - 1ULL; + uint64_t nero_index_raw = (data >> 56) & nero_index_mask; + car_state->nero_index = (uint8_t)nero_index_raw; + uint64_t car_speed_mask = (1ULL << 16) - 1ULL; + uint64_t car_speed_bits = (data >> 40) & car_speed_mask; + int64_t car_speed_raw = (car_speed_bits & (1ULL << (16 - 1))) + ? (int64_t)(car_speed_bits | ~car_speed_mask) + : (int64_t)car_speed_bits; + car_state->car_speed = (int32_t)(car_speed_raw / 10); + uint64_t tsms_mask = (1ULL << 1) - 1ULL; + uint64_t tsms_raw = (data >> 39) & tsms_mask; + car_state->tsms = (bool)tsms_raw; + uint64_t torque_limit_percentage_mask = (1ULL << 7) - 1ULL; + uint64_t torque_limit_percentage_raw = (data >> 32) & torque_limit_percentage_mask; + car_state->torque_limit_percentage = (uint32_t)(torque_limit_percentage_raw / 100); + uint64_t reverse_mask = (1ULL << 1) - 1ULL; + uint64_t reverse_raw = (data >> 31) & reverse_mask; + car_state->reverse = (bool)reverse_raw; + uint64_t regen_limit_mask = (1ULL << 10) - 1ULL; + uint64_t regen_limit_raw = (data >> 21) & regen_limit_mask; + car_state->regen_limit = (uint16_t)regen_limit_raw; + uint64_t launch_control_mask = (1ULL << 1) - 1ULL; + uint64_t launch_control_raw = (data >> 20) & launch_control_mask; + car_state->launch_control = (bool)launch_control_raw; + uint64_t functional_state_mask = (1ULL << 3) - 1ULL; + uint64_t functional_state_raw = (data >> 17) & functional_state_mask; + car_state->functional_state = (uint8_t)functional_state_raw; + uint64_t traction_control_mask = (1ULL << 1) - 1ULL; + uint64_t traction_control_raw = (data >> 16) & traction_control_mask; + car_state->traction_control = (bool)traction_control_raw; +} + +void receive_pedal_percent_pressed_values(const can_msg_t *message, pedal_percent_pressed_values_t *pedal_percent_pressed_values) { + + uint32_t data_bigendian; + memcpy(&data_bigendian, message->data, 4); + uint32_t data = __builtin_bswap32(data_bigendian); + uint64_t accel_norm_mask = (1ULL << 16) - 1ULL; + uint64_t accel_norm_raw = (data >> 16) & accel_norm_mask; + pedal_percent_pressed_values->accel_norm = (float)(accel_norm_raw / 100); + uint64_t brake_norm_mask = (1ULL << 16) - 1ULL; + uint64_t brake_norm_raw = (data >> 0) & brake_norm_mask; + pedal_percent_pressed_values->brake_norm = (float)(brake_norm_raw / 100); +} + +void receive_pedal_sensor_voltages(const can_msg_t *message, pedal_sensor_voltages_t *pedal_sensor_voltages) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t accel1_volts_mask = (1ULL << 16) - 1ULL; + uint64_t accel1_volts_raw = (data >> 48) & accel1_volts_mask; + pedal_sensor_voltages->accel1_volts = (float)(accel1_volts_raw / 100); + uint64_t accel2_volts_mask = (1ULL << 16) - 1ULL; + uint64_t accel2_volts_raw = (data >> 32) & accel2_volts_mask; + pedal_sensor_voltages->accel2_volts = (float)(accel2_volts_raw / 100); + uint64_t brake1_volts_mask = (1ULL << 16) - 1ULL; + uint64_t brake1_volts_raw = (data >> 16) & brake1_volts_mask; + pedal_sensor_voltages->brake1_volts = (float)(brake1_volts_raw / 100); + uint64_t brake2_volts_mask = (1ULL << 16) - 1ULL; + uint64_t brake2_volts_raw = (data >> 0) & brake2_volts_mask; + pedal_sensor_voltages->brake2_volts = (float)(brake2_volts_raw / 100); +} + +void receive_lightning_board_light_status(const can_msg_t *message, lightning_board_light_status_t *lightning_board_light_status) { + + uint8_t data = message->data[0]; + uint64_t status_mask = (1ULL << 2) - 1ULL; + uint64_t status_raw = (data >> 6) & status_mask; + lightning_board_light_status->status = (uint8_t)status_raw; +} + +void receive_temperature_sensor(const can_msg_t *message, temperature_sensor_t *temperature_sensor) { + + uint32_t data_bigendian; + memcpy(&data_bigendian, message->data, 4); + uint32_t data = __builtin_bswap32(data_bigendian); + uint64_t vcu_temperature_mask = (1ULL << 16) - 1ULL; + uint64_t vcu_temperature_bits = (data >> 16) & vcu_temperature_mask; + int64_t vcu_temperature_raw = (vcu_temperature_bits & (1ULL << (16 - 1))) + ? (int64_t)(vcu_temperature_bits | ~vcu_temperature_mask) + : (int64_t)vcu_temperature_bits; + temperature_sensor->vcu_temperature = (float)(vcu_temperature_raw / 100); + uint64_t vcu_humidity_mask = (1ULL << 16) - 1ULL; + uint64_t vcu_humidity_raw = (data >> 0) & vcu_humidity_mask; + temperature_sensor->vcu_humidity = (float)(vcu_humidity_raw / 100); +} + +void receive_imu_accelerometer(const can_msg_t *message, imu_accelerometer_t *imu_accelerometer) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t imu_accelerometer_x_mask = (1ULL << 16) - 1ULL; + uint64_t imu_accelerometer_x_bits = (data >> 48) & imu_accelerometer_x_mask; + int64_t imu_accelerometer_x_raw = (imu_accelerometer_x_bits & (1ULL << (16 - 1))) + ? (int64_t)(imu_accelerometer_x_bits | ~imu_accelerometer_x_mask) + : (int64_t)imu_accelerometer_x_bits; + imu_accelerometer->imu_accelerometer_x = (float)(imu_accelerometer_x_raw / 4); + uint64_t imu_accelerometer_y_mask = (1ULL << 16) - 1ULL; + uint64_t imu_accelerometer_y_bits = (data >> 32) & imu_accelerometer_y_mask; + int64_t imu_accelerometer_y_raw = (imu_accelerometer_y_bits & (1ULL << (16 - 1))) + ? (int64_t)(imu_accelerometer_y_bits | ~imu_accelerometer_y_mask) + : (int64_t)imu_accelerometer_y_bits; + imu_accelerometer->imu_accelerometer_y = (float)(imu_accelerometer_y_raw / 4); + uint64_t imu_accelerometer_z_mask = (1ULL << 16) - 1ULL; + uint64_t imu_accelerometer_z_bits = (data >> 16) & imu_accelerometer_z_mask; + int64_t imu_accelerometer_z_raw = (imu_accelerometer_z_bits & (1ULL << (16 - 1))) + ? (int64_t)(imu_accelerometer_z_bits | ~imu_accelerometer_z_mask) + : (int64_t)imu_accelerometer_z_bits; + imu_accelerometer->imu_accelerometer_z = (float)(imu_accelerometer_z_raw / 4); +} + +void receive_imu_gyro(const can_msg_t *message, imu_gyro_t *imu_gyro) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t imu_gyro_x_mask = (1ULL << 16) - 1ULL; + uint64_t imu_gyro_x_bits = (data >> 48) & imu_gyro_x_mask; + int64_t imu_gyro_x_raw = (imu_gyro_x_bits & (1ULL << (16 - 1))) + ? (int64_t)(imu_gyro_x_bits | ~imu_gyro_x_mask) + : (int64_t)imu_gyro_x_bits; + imu_gyro->imu_gyro_x = (float)(imu_gyro_x_raw / 100); + uint64_t imu_gyro_y_mask = (1ULL << 16) - 1ULL; + uint64_t imu_gyro_y_bits = (data >> 32) & imu_gyro_y_mask; + int64_t imu_gyro_y_raw = (imu_gyro_y_bits & (1ULL << (16 - 1))) + ? (int64_t)(imu_gyro_y_bits | ~imu_gyro_y_mask) + : (int64_t)imu_gyro_y_bits; + imu_gyro->imu_gyro_y = (float)(imu_gyro_y_raw / 100); + uint64_t imu_gyro_z_mask = (1ULL << 16) - 1ULL; + uint64_t imu_gyro_z_bits = (data >> 16) & imu_gyro_z_mask; + int64_t imu_gyro_z_raw = (imu_gyro_z_bits & (1ULL << (16 - 1))) + ? (int64_t)(imu_gyro_z_bits | ~imu_gyro_z_mask) + : (int64_t)imu_gyro_z_bits; + imu_gyro->imu_gyro_z = (float)(imu_gyro_z_raw / 100); +} + +void receive_faults(const can_msg_t *message, faults_t *faults) { + + uint16_t data_bigendian; + memcpy(&data_bigendian, message->data, 2); + uint16_t data = __builtin_bswap16(data_bigendian); + uint64_t CAN_OUTGOING_FAULT_mask = (1ULL << 1) - 1ULL; + uint64_t CAN_OUTGOING_FAULT_raw = (data >> 15) & CAN_OUTGOING_FAULT_mask; + faults->CAN_OUTGOING_FAULT = (bool)CAN_OUTGOING_FAULT_raw; + uint64_t CAN_INCOMING_FAULT_mask = (1ULL << 1) - 1ULL; + uint64_t CAN_INCOMING_FAULT_raw = (data >> 14) & CAN_INCOMING_FAULT_mask; + faults->CAN_INCOMING_FAULT = (bool)CAN_INCOMING_FAULT_raw; + uint64_t BMS_CAN_MONITOR_FAULT_mask = (1ULL << 1) - 1ULL; + uint64_t BMS_CAN_MONITOR_FAULT_raw = (data >> 13) & BMS_CAN_MONITOR_FAULT_mask; + faults->BMS_CAN_MONITOR_FAULT = (bool)BMS_CAN_MONITOR_FAULT_raw; + uint64_t LIGHTNING_CAN_MONITOR_FAULT_mask = (1ULL << 1) - 1ULL; + uint64_t LIGHTNING_CAN_MONITOR_FAULT_raw = (data >> 12) & LIGHTNING_CAN_MONITOR_FAULT_mask; + faults->LIGHTNING_CAN_MONITOR_FAULT = (bool)LIGHTNING_CAN_MONITOR_FAULT_raw; + uint64_t SHUTDOWN_FAULT_mask = (1ULL << 1) - 1ULL; + uint64_t SHUTDOWN_FAULT_raw = (data >> 11) & SHUTDOWN_FAULT_mask; + faults->SHUTDOWN_FAULT = (bool)SHUTDOWN_FAULT_raw; + uint64_t ONBOARD_TEMP_FAULT_mask = (1ULL << 1) - 1ULL; + uint64_t ONBOARD_TEMP_FAULT_raw = (data >> 10) & ONBOARD_TEMP_FAULT_mask; + faults->ONBOARD_TEMP_FAULT = (bool)ONBOARD_TEMP_FAULT_raw; + uint64_t IMU_ACCEL_FAULT_mask = (1ULL << 1) - 1ULL; + uint64_t IMU_ACCEL_FAULT_raw = (data >> 9) & IMU_ACCEL_FAULT_mask; + faults->IMU_ACCEL_FAULT = (bool)IMU_ACCEL_FAULT_raw; + uint64_t IMU_GYRO_FAULT_mask = (1ULL << 1) - 1ULL; + uint64_t IMU_GYRO_FAULT_raw = (data >> 8) & IMU_GYRO_FAULT_mask; + faults->IMU_GYRO_FAULT = (bool)IMU_GYRO_FAULT_raw; + uint64_t BSPD_PREFAULT_mask = (1ULL << 1) - 1ULL; + uint64_t BSPD_PREFAULT_raw = (data >> 7) & BSPD_PREFAULT_mask; + faults->BSPD_PREFAULT = (bool)BSPD_PREFAULT_raw; + uint64_t ONBOARD_BRAKE_OPEN_CIRCUIT_FAULT_mask = (1ULL << 1) - 1ULL; + uint64_t ONBOARD_BRAKE_OPEN_CIRCUIT_FAULT_raw = (data >> 6) & ONBOARD_BRAKE_OPEN_CIRCUIT_FAULT_mask; + faults->ONBOARD_BRAKE_OPEN_CIRCUIT_FAULT = (bool)ONBOARD_BRAKE_OPEN_CIRCUIT_FAULT_raw; + uint64_t ONBOARD_ACCEL_OPEN_CIRCUIT_FAULT_mask = (1ULL << 1) - 1ULL; + uint64_t ONBOARD_ACCEL_OPEN_CIRCUIT_FAULT_raw = (data >> 5) & ONBOARD_ACCEL_OPEN_CIRCUIT_FAULT_mask; + faults->ONBOARD_ACCEL_OPEN_CIRCUIT_FAULT = (bool)ONBOARD_ACCEL_OPEN_CIRCUIT_FAULT_raw; + uint64_t ONBOARD_BRAKE_SHORT_CIRCUIT_FAULT_mask = (1ULL << 1) - 1ULL; + uint64_t ONBOARD_BRAKE_SHORT_CIRCUIT_FAULT_raw = (data >> 4) & ONBOARD_BRAKE_SHORT_CIRCUIT_FAULT_mask; + faults->ONBOARD_BRAKE_SHORT_CIRCUIT_FAULT = (bool)ONBOARD_BRAKE_SHORT_CIRCUIT_FAULT_raw; + uint64_t ONBOARD_ACCEL_SHORT_CIRCUIT_FAULT_mask = (1ULL << 1) - 1ULL; + uint64_t ONBOARD_ACCEL_SHORT_CIRCUIT_FAULT_raw = (data >> 3) & ONBOARD_ACCEL_SHORT_CIRCUIT_FAULT_mask; + faults->ONBOARD_ACCEL_SHORT_CIRCUIT_FAULT = (bool)ONBOARD_ACCEL_SHORT_CIRCUIT_FAULT_raw; + uint64_t ONBOARD_PEDAL_DIFFERENCE_FAULT_mask = (1ULL << 1) - 1ULL; + uint64_t ONBOARD_PEDAL_DIFFERENCE_FAULT_raw = (data >> 2) & ONBOARD_PEDAL_DIFFERENCE_FAULT_mask; + faults->ONBOARD_PEDAL_DIFFERENCE_FAULT = (bool)ONBOARD_PEDAL_DIFFERENCE_FAULT_raw; + uint64_t RTDS_FAULT_mask = (1ULL << 1) - 1ULL; + uint64_t RTDS_FAULT_raw = (data >> 1) & RTDS_FAULT_mask; + faults->RTDS_FAULT = (bool)RTDS_FAULT_raw; + uint64_t LV_LOW_VOLTAGE_FAULT_mask = (1ULL << 1) - 1ULL; + uint64_t LV_LOW_VOLTAGE_FAULT_raw = (data >> 0) & LV_LOW_VOLTAGE_FAULT_mask; + faults->LV_LOW_VOLTAGE_FAULT = (bool)LV_LOW_VOLTAGE_FAULT_raw; +} + +void receive_lv_voltage(const can_msg_t *message, lv_voltage_t *lv_voltage) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t ADC_mask = (1ULL << 16) - 1ULL; + uint64_t ADC_raw = (data >> 48) & ADC_mask; + lv_voltage->ADC = (uint16_t)ADC_raw; + uint64_t Voltage_mask = (1ULL << 32) - 1ULL; + uint64_t Voltage_raw = (data >> 16) & Voltage_mask; + lv_voltage->Voltage = (float)(Voltage_raw / 1000); +} + +void receive_vcu_test_message(const can_msg_t *message, vcu_test_message_t *vcu_test_message) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t three_bits_mask = (1ULL << 3) - 1ULL; + uint64_t three_bits_raw = (data >> 61) & three_bits_mask; + vcu_test_message->three_bits = (uint8_t)three_bits_raw; + uint64_t float_value_mask = (1ULL << 32) - 1ULL; + uint64_t float_value_bits = (data >> 29) & float_value_mask; + int64_t float_value_raw = (float_value_bits & (1ULL << (32 - 1))) + ? (int64_t)(float_value_bits | ~float_value_mask) + : (int64_t)float_value_bits; + vcu_test_message->float_value = (float)(float_value_raw / 100); + uint64_t five_bits_mask = (1ULL << 5) - 1ULL; + uint64_t five_bits_raw = (data >> 24) & five_bits_mask; + vcu_test_message->five_bits = (uint8_t)five_bits_raw; + uint64_t sixteen_bits_mask = (1ULL << 16) - 1ULL; + uint64_t sixteen_bits_raw = (data >> 8) & sixteen_bits_mask; + vcu_test_message->sixteen_bits = (uint16_t)sixteen_bits_raw; + uint64_t signed_8_bits_mask = (1ULL << 8) - 1ULL; + uint64_t signed_8_bits_bits = (data >> 0) & signed_8_bits_mask; + int64_t signed_8_bits_raw = (signed_8_bits_bits & (1ULL << (8 - 1))) + ? (int64_t)(signed_8_bits_bits | ~signed_8_bits_mask) + : (int64_t)signed_8_bits_bits; + vcu_test_message->signed_8_bits = (int8_t)signed_8_bits_raw; +} + +void receive_dti_motor_temp_as_reported_by_vcu(const can_msg_t *message, dti_motor_temp_as_reported_by_vcu_t *dti_motor_temp_as_reported_by_vcu) { + + uint16_t data_bigendian; + memcpy(&data_bigendian, message->data, 2); + uint16_t data = __builtin_bswap16(data_bigendian); + uint64_t temp_mask = (1ULL << 16) - 1ULL; + uint64_t temp_raw = (data >> 0) & temp_mask; + dti_motor_temp_as_reported_by_vcu->temp = (uint16_t)temp_raw; +} + +void receive_dti_controller_temp_as_reported_by_vcu(const can_msg_t *message, dti_controller_temp_as_reported_by_vcu_t *dti_controller_temp_as_reported_by_vcu) { + + uint16_t data_bigendian; + memcpy(&data_bigendian, message->data, 2); + uint16_t data = __builtin_bswap16(data_bigendian); + uint64_t temp_mask = (1ULL << 16) - 1ULL; + uint64_t temp_raw = (data >> 0) & temp_mask; + dti_controller_temp_as_reported_by_vcu->temp = (uint16_t)temp_raw; +} + +void receive_bms_battbox_temp_as_reported_by_vcu(const can_msg_t *message, bms_battbox_temp_as_reported_by_vcu_t *bms_battbox_temp_as_reported_by_vcu) { + + uint32_t data_bigendian; + memcpy(&data_bigendian, message->data, 4); + uint32_t data = __builtin_bswap32(data_bigendian); + uint64_t temp_mask = (1ULL << 32) - 1ULL; + uint64_t temp_bits = (data >> 0) & temp_mask; + int64_t temp_raw = (temp_bits & (1ULL << (32 - 1))) + ? (int64_t)(temp_bits | ~temp_mask) + : (int64_t)temp_bits; + bms_battbox_temp_as_reported_by_vcu->temp = (float)(temp_raw / 100); +} + +void receive_brake_state_as_reported_by_vcu(const can_msg_t *message, brake_state_as_reported_by_vcu_t *brake_state_as_reported_by_vcu) { + + uint8_t data = message->data[0]; + uint64_t brake_state_mask = (1ULL << 8) - 1ULL; + uint64_t brake_state_bits = (data >> 0) & brake_state_mask; + int64_t brake_state_raw = (brake_state_bits & (1ULL << (8 - 1))) + ? (int64_t)(brake_state_bits | ~brake_state_mask) + : (int64_t)brake_state_bits; + brake_state_as_reported_by_vcu->brake_state = (bool)(brake_state_raw / 100); +} + +void receive_rtds_state_message(const can_msg_t *message, rtds_state_message_t *rtds_state_message) { + + uint32_t data_bigendian; + memcpy(&data_bigendian, message->data, 4); + uint32_t data = __builtin_bswap32(data_bigendian); + uint64_t pin_state_mask = (1ULL << 8) - 1ULL; + uint64_t pin_state_raw = (data >> 24) & pin_state_mask; + rtds_state_message->pin_state = (bool)pin_state_raw; + uint64_t sounding_state_mask = (1ULL << 8) - 1ULL; + uint64_t sounding_state_raw = (data >> 16) & sounding_state_mask; + rtds_state_message->sounding_state = (bool)sounding_state_raw; + uint64_t reverse_state_mask = (1ULL << 8) - 1ULL; + uint64_t reverse_state_raw = (data >> 8) & reverse_state_mask; + rtds_state_message->reverse_state = (bool)reverse_state_raw; + uint64_t error_mask = (1ULL << 8) - 1ULL; + uint64_t error_raw = (data >> 0) & error_mask; + rtds_state_message->error = (bool)error_raw; +} + +void receive_lfiu_low_current_adc_readings(const can_msg_t *message, lfiu_low_current_adc_readings_t *lfiu_low_current_adc_readings) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t raw_mask = (1ULL << 16) - 1ULL; + uint64_t raw_raw = (data >> 48) & raw_mask; + lfiu_low_current_adc_readings->raw = (uint16_t)raw_raw; + uint64_t voltage_mask = (1ULL << 16) - 1ULL; + uint64_t voltage_raw = (data >> 32) & voltage_mask; + lfiu_low_current_adc_readings->voltage = (float)(voltage_raw / 1000); + uint64_t current_mask = (1ULL << 16) - 1ULL; + uint64_t current_bits = (data >> 16) & current_mask; + int64_t current_raw = (current_bits & (1ULL << (16 - 1))) + ? (int64_t)(current_bits | ~current_mask) + : (int64_t)current_bits; + lfiu_low_current_adc_readings->current = (float)(current_raw / 1000); +} + +void receive_lfiu_high_current_adc_readings(const can_msg_t *message, lfiu_high_current_adc_readings_t *lfiu_high_current_adc_readings) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t raw_mask = (1ULL << 16) - 1ULL; + uint64_t raw_raw = (data >> 48) & raw_mask; + lfiu_high_current_adc_readings->raw = (uint16_t)raw_raw; + uint64_t voltage_mask = (1ULL << 16) - 1ULL; + uint64_t voltage_raw = (data >> 32) & voltage_mask; + lfiu_high_current_adc_readings->voltage = (float)(voltage_raw / 1000); + uint64_t current_mask = (1ULL << 16) - 1ULL; + uint64_t current_bits = (data >> 16) & current_mask; + int64_t current_raw = (current_bits & (1ULL << (16 - 1))) + ? (int64_t)(current_bits | ~current_mask) + : (int64_t)current_bits; + lfiu_high_current_adc_readings->current = (float)(current_raw / 100); +} + +void receive_second_vcu_test_message(const can_msg_t *message, second_vcu_test_message_t *second_vcu_test_message) { + + uint64_t data_bigendian; + memcpy(&data_bigendian, message->data, 8); + uint64_t data = __builtin_bswap64(data_bigendian); + uint64_t one_mask = (1ULL << 14) - 1ULL; + uint64_t one_raw = (data >> 50) & one_mask; + second_vcu_test_message->one = (uint16_t)one_raw; + uint64_t two_mask = (1ULL << 2) - 1ULL; + uint64_t two_raw = (data >> 48) & two_mask; + second_vcu_test_message->two = (uint8_t)two_raw; + uint64_t three_mask = (1ULL << 2) - 1ULL; + uint64_t three_raw = (data >> 46) & three_mask; + second_vcu_test_message->three = (uint8_t)three_raw; + uint64_t four_mask = (1ULL << 1) - 1ULL; + uint64_t four_raw = (data >> 45) & four_mask; + second_vcu_test_message->four = (bool)four_raw; + uint64_t five_mask = (1ULL << 6) - 1ULL; + uint64_t five_raw = (data >> 39) & five_mask; + second_vcu_test_message->five = (uint8_t)five_raw; + uint64_t six_mask = (1ULL << 23) - 1ULL; + uint64_t six_raw = (data >> 16) & six_mask; + second_vcu_test_message->six = (uint32_t)six_raw; +} + +void receive_lv_box_fan_pwm(const can_msg_t *message, lv_box_fan_pwm_t *lv_box_fan_pwm) { + + uint8_t data = message->data[0]; + uint64_t fan_pwm_percentage_mask = (1ULL << 8) - 1ULL; + uint64_t fan_pwm_percentage_raw = (data >> 0) & fan_pwm_percentage_mask; + lv_box_fan_pwm->fan_pwm_percentage = (uint8_t)fan_pwm_percentage_raw; +} + diff --git a/code-gen/Src/can_messages_tx.c b/code-gen/Src/can_messages_tx.c new file mode 100644 index 0000000..b43ad1a --- /dev/null +++ b/code-gen/Src/can_messages_tx.c @@ -0,0 +1,697 @@ + +/* + * This file was autogenerated by the CGEN module of the Odyssey framework. + * DO NOT EDIT without also reporting the edit to the Odyssey-Definitions repository to be incorproated into the generator. +*/ +#include "can_messages_tx.h" +#include + +#include "u_tx_debug.h" +#include "u_queues.h" +#include "c_utils.h" +#include "fdcan.h" +#include "bitstream.h" + + +static void handle_bitstream_overflow(bitstream_t *bitstream_res, + uint32_t can_id); + +uint8_t send_front_msb_accel +(float x_force,float y_force,float z_force) +{ + can_msg_t msg; + msg.id = 0xBAB; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + int32_t x_force_i = (int32_t)(x_force); + if(x_force_i > 32767) {x_force_i = 32767; + } else if(x_force_i < -32768) {x_force_i = -32768; + } + data |= ((uint32_t)(x_force_i) & 0xFFFFULL) << 48; + + int32_t y_force_i = (int32_t)(y_force); + if(y_force_i > 32767) {y_force_i = 32767; + } else if(y_force_i < -32768) {y_force_i = -32768; + } + data |= ((uint32_t)(y_force_i) & 0xFFFFULL) << 32; + + int32_t z_force_i = (int32_t)(z_force); + if(z_force_i > 32767) {z_force_i = 32767; + } else if(z_force_i < -32768) {z_force_i = -32768; + } + data |= ((uint32_t)(z_force_i) & 0xFFFFULL) << 16; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_front_msb_gyro +(float x_deg,float y_deg,float z_deg) +{ + can_msg_t msg; + msg.id = 0xBAC; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + int32_t x_deg_i = (int32_t)(x_deg); + if(x_deg_i > 32767) {x_deg_i = 32767; + } else if(x_deg_i < -32768) {x_deg_i = -32768; + } + data |= ((uint32_t)(x_deg_i) & 0xFFFFULL) << 48; + + int32_t y_deg_i = (int32_t)(y_deg); + if(y_deg_i > 32767) {y_deg_i = 32767; + } else if(y_deg_i < -32768) {y_deg_i = -32768; + } + data |= ((uint32_t)(y_deg_i) & 0xFFFFULL) << 32; + + int32_t z_deg_i = (int32_t)(z_deg); + if(z_deg_i > 32767) {z_deg_i = 32767; + } else if(z_deg_i < -32768) {z_deg_i = -32768; + } + data |= ((uint32_t)(z_deg_i) & 0xFFFFULL) << 16; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_front_msb_mag +(float x_mag,float y_mag,float z_mag) +{ + can_msg_t msg; + msg.id = 0xBB0; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + int32_t x_mag_i = (int32_t)(x_mag); + if(x_mag_i > 32767) {x_mag_i = 32767; + } else if(x_mag_i < -32768) {x_mag_i = -32768; + } + data |= ((uint32_t)(x_mag_i) & 0xFFFFULL) << 48; + + int32_t y_mag_i = (int32_t)(y_mag); + if(y_mag_i > 32767) {y_mag_i = 32767; + } else if(y_mag_i < -32768) {y_mag_i = -32768; + } + data |= ((uint32_t)(y_mag_i) & 0xFFFFULL) << 32; + + int32_t z_mag_i = (int32_t)(z_mag); + if(z_mag_i > 32767) {z_mag_i = 32767; + } else if(z_mag_i < -32768) {z_mag_i = -32768; + } + data |= ((uint32_t)(z_mag_i) & 0xFFFFULL) << 16; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_front_msb_orientation +(float x_fdeg,float y_fdeg,float z_fdeg) +{ + can_msg_t msg; + msg.id = 0xBAE; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + int32_t x_fdeg_i = (int32_t)(x_fdeg); + if(x_fdeg_i > 32767) {x_fdeg_i = 32767; + } else if(x_fdeg_i < -32768) {x_fdeg_i = -32768; + } + data |= ((uint32_t)(x_fdeg_i) & 0xFFFFULL) << 48; + + int32_t y_fdeg_i = (int32_t)(y_fdeg); + if(y_fdeg_i > 32767) {y_fdeg_i = 32767; + } else if(y_fdeg_i < -32768) {y_fdeg_i = -32768; + } + data |= ((uint32_t)(y_fdeg_i) & 0xFFFFULL) << 32; + + int32_t z_fdeg_i = (int32_t)(z_fdeg); + if(z_fdeg_i > 32767) {z_fdeg_i = 32767; + } else if(z_fdeg_i < -32768) {z_fdeg_i = -32768; + } + data |= ((uint32_t)(z_fdeg_i) & 0xFFFFULL) << 16; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_front_msb_pressure_sensor +(float pressure,float temperature) +{ + can_msg_t msg; + msg.id = 0xBB1; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + uint32_t pressure_i = (uint32_t)(pressure); + if(pressure_i > 4294967295ULL) {pressure_i = 4294967295; + } + data |= ((pressure_i) & 0xFFFFFFFFULL) << 32; + + uint32_t temperature_i = (uint32_t)(temperature); + if(temperature_i > 4294967295ULL) {temperature_i = 4294967295; + } + data |= ((temperature_i) & 0xFFFFFFFFULL) << 0; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_front_temperature_sensor +(float temperature,float humidity) +{ + can_msg_t msg; + msg.id = 0xBAF; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + uint32_t temperature_i = (uint32_t)(temperature); + if(temperature_i > 4294967295ULL) {temperature_i = 4294967295; + } + data |= ((temperature_i) & 0xFFFFFFFFULL) << 32; + + uint32_t humidity_i = (uint32_t)(humidity); + if(humidity_i > 4294967295ULL) {humidity_i = 4294967295; + } + data |= ((humidity_i) & 0xFFFFFFFFULL) << 0; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_front_msb_strain_one_and_two +(uint32_t strain1,uint32_t strain2) +{ + can_msg_t msg; + msg.id = 0xDAA; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + uint32_t strain1_i = (uint32_t)(strain1); + if(strain1_i > 4294967295ULL) {strain1_i = 4294967295; + } + data |= ((strain1_i) & 0xFFFFFFFFULL) << 32; + + uint32_t strain2_i = (uint32_t)(strain2); + if(strain2_i > 4294967295ULL) {strain2_i = 4294967295; + } + data |= ((strain2_i) & 0xFFFFFFFFULL) << 0; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_front_msb_strain_three_and_four +(uint32_t strain3,uint32_t strain4) +{ + can_msg_t msg; + msg.id = 0xDAB; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + uint32_t strain3_i = (uint32_t)(strain3); + if(strain3_i > 4294967295ULL) {strain3_i = 4294967295; + } + data |= ((strain3_i) & 0xFFFFFFFFULL) << 32; + + uint32_t strain4_i = (uint32_t)(strain4); + if(strain4_i > 4294967295ULL) {strain4_i = 4294967295; + } + data |= ((strain4_i) & 0xFFFFFFFFULL) << 0; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_front_shockpot +(uint32_t shock1,uint32_t shock2) +{ + can_msg_t msg; + msg.id = 0xDAE; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + uint32_t shock1_i = (uint32_t)(shock1); + if(shock1_i > 4294967295ULL) {shock1_i = 4294967295; + } + data |= ((shock1_i) & 0xFFFFFFFFULL) << 32; + + uint32_t shock2_i = (uint32_t)(shock2); + if(shock2_i > 4294967295ULL) {shock2_i = 4294967295; + } + data |= ((shock2_i) & 0xFFFFFFFFULL) << 0; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_front_msb_load_cells +(uint32_t cell1,uint32_t cell2) +{ + can_msg_t msg; + msg.id = 0xDAF; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + uint32_t cell1_i = (uint32_t)(cell1); + if(cell1_i > 4294967295ULL) {cell1_i = 4294967295; + } + data |= ((cell1_i) & 0xFFFFFFFFULL) << 32; + + uint32_t cell2_i = (uint32_t)(cell2); + if(cell2_i > 4294967295ULL) {cell2_i = 4294967295; + } + data |= ((cell2_i) & 0xFFFFFFFFULL) << 0; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_front_wheel_rpm +(uint16_t Front Right,uint16_t Front Left) +{ + can_msg_t msg; + msg.id = 0xDB0; + msg.id_is_extended = true; + uint32_t data = 0; + msg.len = 4; + uint32_t Front Right_i = (uint32_t)(Front Right); + if(Front Right_i > 65535ULL) {Front Right_i = 65535; + } + data |= ((Front Right_i) & 0xFFFFULL) << 16; + + uint32_t Front Left_i = (uint32_t)(Front Left); + if(Front Left_i > 65535ULL) {Front Left_i = 65535; + } + data |= ((Front Left_i) & 0xFFFFULL) << 0; + + uint32_t data_bigendian = __builtin_bswap32(data); + memcpy(msg.data, &data_bigendian, 4); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_front_msb_wheel_angle +(uint32_t angle1) +{ + can_msg_t msg; + msg.id = 0xDAD; + msg.id_is_extended = true; + uint32_t data = 0; + msg.len = 4; + uint32_t angle1_i = (uint32_t)(angle1); + if(angle1_i > 4294967295ULL) {angle1_i = 4294967295; + } + data |= ((angle1_i) & 0xFFFFFFFFULL) << 0; + + uint32_t data_bigendian = __builtin_bswap32(data); + memcpy(msg.data, &data_bigendian, 4); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_back_msb_accel +(float x_force,float y_force,float z_force) +{ + can_msg_t msg; + msg.id = 0xBBF; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + int32_t x_force_i = (int32_t)(x_force); + if(x_force_i > 32767) {x_force_i = 32767; + } else if(x_force_i < -32768) {x_force_i = -32768; + } + data |= ((uint32_t)(x_force_i) & 0xFFFFULL) << 48; + + int32_t y_force_i = (int32_t)(y_force); + if(y_force_i > 32767) {y_force_i = 32767; + } else if(y_force_i < -32768) {y_force_i = -32768; + } + data |= ((uint32_t)(y_force_i) & 0xFFFFULL) << 32; + + int32_t z_force_i = (int32_t)(z_force); + if(z_force_i > 32767) {z_force_i = 32767; + } else if(z_force_i < -32768) {z_force_i = -32768; + } + data |= ((uint32_t)(z_force_i) & 0xFFFFULL) << 16; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_back_msb_gyro +(float x_deg,float y_deg,float z_deg) +{ + can_msg_t msg; + msg.id = 0xBC0; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + int32_t x_deg_i = (int32_t)(x_deg); + if(x_deg_i > 32767) {x_deg_i = 32767; + } else if(x_deg_i < -32768) {x_deg_i = -32768; + } + data |= ((uint32_t)(x_deg_i) & 0xFFFFULL) << 48; + + int32_t y_deg_i = (int32_t)(y_deg); + if(y_deg_i > 32767) {y_deg_i = 32767; + } else if(y_deg_i < -32768) {y_deg_i = -32768; + } + data |= ((uint32_t)(y_deg_i) & 0xFFFFULL) << 32; + + int32_t z_deg_i = (int32_t)(z_deg); + if(z_deg_i > 32767) {z_deg_i = 32767; + } else if(z_deg_i < -32768) {z_deg_i = -32768; + } + data |= ((uint32_t)(z_deg_i) & 0xFFFFULL) << 16; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_back_msb_mag +(float x_mag,float y_mag,float z_mag) +{ + can_msg_t msg; + msg.id = 0xBC4; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + int32_t x_mag_i = (int32_t)(x_mag); + if(x_mag_i > 32767) {x_mag_i = 32767; + } else if(x_mag_i < -32768) {x_mag_i = -32768; + } + data |= ((uint32_t)(x_mag_i) & 0xFFFFULL) << 48; + + int32_t y_mag_i = (int32_t)(y_mag); + if(y_mag_i > 32767) {y_mag_i = 32767; + } else if(y_mag_i < -32768) {y_mag_i = -32768; + } + data |= ((uint32_t)(y_mag_i) & 0xFFFFULL) << 32; + + int32_t z_mag_i = (int32_t)(z_mag); + if(z_mag_i > 32767) {z_mag_i = 32767; + } else if(z_mag_i < -32768) {z_mag_i = -32768; + } + data |= ((uint32_t)(z_mag_i) & 0xFFFFULL) << 16; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_back_msb_orientation +(float x_fdeg,float y_fdeg,float z_fdeg) +{ + can_msg_t msg; + msg.id = 0xBC2; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + int32_t x_fdeg_i = (int32_t)(x_fdeg); + if(x_fdeg_i > 32767) {x_fdeg_i = 32767; + } else if(x_fdeg_i < -32768) {x_fdeg_i = -32768; + } + data |= ((uint32_t)(x_fdeg_i) & 0xFFFFULL) << 48; + + int32_t y_fdeg_i = (int32_t)(y_fdeg); + if(y_fdeg_i > 32767) {y_fdeg_i = 32767; + } else if(y_fdeg_i < -32768) {y_fdeg_i = -32768; + } + data |= ((uint32_t)(y_fdeg_i) & 0xFFFFULL) << 32; + + int32_t z_fdeg_i = (int32_t)(z_fdeg); + if(z_fdeg_i > 32767) {z_fdeg_i = 32767; + } else if(z_fdeg_i < -32768) {z_fdeg_i = -32768; + } + data |= ((uint32_t)(z_fdeg_i) & 0xFFFFULL) << 16; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_back_msb_pressure_sensor +(float pressure,float temperature) +{ + can_msg_t msg; + msg.id = 0xBC5; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + uint32_t pressure_i = (uint32_t)(pressure); + if(pressure_i > 4294967295ULL) {pressure_i = 4294967295; + } + data |= ((pressure_i) & 0xFFFFFFFFULL) << 32; + + uint32_t temperature_i = (uint32_t)(temperature); + if(temperature_i > 4294967295ULL) {temperature_i = 4294967295; + } + data |= ((temperature_i) & 0xFFFFFFFFULL) << 0; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_back_temperature_sensor +(float temperature,float humidity) +{ + can_msg_t msg; + msg.id = 0xBC3; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + uint32_t temperature_i = (uint32_t)(temperature); + if(temperature_i > 4294967295ULL) {temperature_i = 4294967295; + } + data |= ((temperature_i) & 0xFFFFFFFFULL) << 32; + + uint32_t humidity_i = (uint32_t)(humidity); + if(humidity_i > 4294967295ULL) {humidity_i = 4294967295; + } + data |= ((humidity_i) & 0xFFFFFFFFULL) << 0; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_back_msb_strain_one_and_two +(uint32_t strain1,uint32_t strain2) +{ + can_msg_t msg; + msg.id = 0xDBE; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + uint32_t strain1_i = (uint32_t)(strain1); + if(strain1_i > 4294967295ULL) {strain1_i = 4294967295; + } + data |= ((strain1_i) & 0xFFFFFFFFULL) << 32; + + uint32_t strain2_i = (uint32_t)(strain2); + if(strain2_i > 4294967295ULL) {strain2_i = 4294967295; + } + data |= ((strain2_i) & 0xFFFFFFFFULL) << 0; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_back_msb_strain_three_and_four +(uint32_t strain3,uint32_t strain4) +{ + can_msg_t msg; + msg.id = 0xDBF; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + uint32_t strain3_i = (uint32_t)(strain3); + if(strain3_i > 4294967295ULL) {strain3_i = 4294967295; + } + data |= ((strain3_i) & 0xFFFFFFFFULL) << 32; + + uint32_t strain4_i = (uint32_t)(strain4); + if(strain4_i > 4294967295ULL) {strain4_i = 4294967295; + } + data |= ((strain4_i) & 0xFFFFFFFFULL) << 0; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_back_shockpot +(uint32_t shock1,uint32_t shock2) +{ + can_msg_t msg; + msg.id = 0xDC2; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + uint32_t shock1_i = (uint32_t)(shock1); + if(shock1_i > 4294967295ULL) {shock1_i = 4294967295; + } + data |= ((shock1_i) & 0xFFFFFFFFULL) << 32; + + uint32_t shock2_i = (uint32_t)(shock2); + if(shock2_i > 4294967295ULL) {shock2_i = 4294967295; + } + data |= ((shock2_i) & 0xFFFFFFFFULL) << 0; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_back_msb_load_cells +(uint32_t cell1,uint32_t cell2) +{ + can_msg_t msg; + msg.id = 0xDC3; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + uint32_t cell1_i = (uint32_t)(cell1); + if(cell1_i > 4294967295ULL) {cell1_i = 4294967295; + } + data |= ((cell1_i) & 0xFFFFFFFFULL) << 32; + + uint32_t cell2_i = (uint32_t)(cell2); + if(cell2_i > 4294967295ULL) {cell2_i = 4294967295; + } + data |= ((cell2_i) & 0xFFFFFFFFULL) << 0; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_rear_wheel_rpm +(uint16_t Rear Right,uint16_t Rear Left) +{ + can_msg_t msg; + msg.id = 0xDB1; + msg.id_is_extended = true; + uint32_t data = 0; + msg.len = 4; + uint32_t Rear Right_i = (uint32_t)(Rear Right); + if(Rear Right_i > 65535ULL) {Rear Right_i = 65535; + } + data |= ((Rear Right_i) & 0xFFFFULL) << 16; + + uint32_t Rear Left_i = (uint32_t)(Rear Left); + if(Rear Left_i > 65535ULL) {Rear Left_i = 65535; + } + data |= ((Rear Left_i) & 0xFFFFULL) << 0; + + uint32_t data_bigendian = __builtin_bswap32(data); + memcpy(msg.data, &data_bigendian, 4); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_back_msb_thermocouple +(uint32_t thermo1) +{ + can_msg_t msg; + msg.id = 0xDAC; + msg.id_is_extended = true; + uint32_t data = 0; + msg.len = 4; + uint32_t thermo1_i = (uint32_t)(thermo1); + if(thermo1_i > 4294967295ULL) {thermo1_i = 4294967295; + } + data |= ((thermo1_i) & 0xFFFFFFFFULL) << 0; + + uint32_t data_bigendian = __builtin_bswap32(data); + memcpy(msg.data, &data_bigendian, 4); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + +uint8_t send_back_msb_tof +(uint16_t quadrant1,uint16_t quadrant2,uint16_t quadrant3,uint16_t quadrant4) +{ + can_msg_t msg; + msg.id = 0xBA0; + msg.id_is_extended = true; + uint64_t data = 0; + msg.len = 8; + uint32_t quadrant1_i = (uint32_t)(quadrant1); + if(quadrant1_i > 65535ULL) {quadrant1_i = 65535; + } + data |= ((quadrant1_i) & 0xFFFFULL) << 48; + + uint32_t quadrant2_i = (uint32_t)(quadrant2); + if(quadrant2_i > 65535ULL) {quadrant2_i = 65535; + } + data |= ((quadrant2_i) & 0xFFFFULL) << 32; + + uint32_t quadrant3_i = (uint32_t)(quadrant3); + if(quadrant3_i > 65535ULL) {quadrant3_i = 65535; + } + data |= ((quadrant3_i) & 0xFFFFULL) << 16; + + uint32_t quadrant4_i = (uint32_t)(quadrant4); + if(quadrant4_i > 65535ULL) {quadrant4_i = 65535; + } + data |= ((quadrant4_i) & 0xFFFFULL) << 0; + + uint64_t data_bigendian = __builtin_bswap64(data); + memcpy(msg.data, &data_bigendian, 8); + + return queue_send(&can_outgoing, &msg, TX_NO_WAIT); +} + + + +/// @brief A helper which sends appropriate error to stdout and CAN if a bistream overflows +/// @param bitstream_res The bitstream to check for overflow +/// @param can_id The CAN ID this bistream data is intended for +/// @return 0 if success +static void handle_bitstream_overflow(bitstream_t *bitstream_res, + uint32_t can_id) +{ + if (!bitstream_res->overflow) { + return; + } + + +} \ No newline at end of file From 62787ee1d2ddc67b3549e2a44557b5229173f58b Mon Sep 17 00:00:00 2001 From: Daniel Nakhooda Date: Thu, 9 Apr 2026 20:45:02 -0400 Subject: [PATCH 11/12] fix --- code-gen/Inc/can_messages_rx.h | 808 --------------- code-gen/Inc/can_messages_tx.h | 189 ---- code-gen/Src/can_messages_rx.c | 1747 -------------------------------- code-gen/Src/can_messages_tx.c | 697 ------------- 4 files changed, 3441 deletions(-) delete mode 100644 code-gen/Inc/can_messages_rx.h delete mode 100644 code-gen/Inc/can_messages_tx.h delete mode 100644 code-gen/Src/can_messages_rx.c delete mode 100644 code-gen/Src/can_messages_tx.c diff --git a/code-gen/Inc/can_messages_rx.h b/code-gen/Inc/can_messages_rx.h deleted file mode 100644 index d04329e..0000000 --- a/code-gen/Inc/can_messages_rx.h +++ /dev/null @@ -1,808 +0,0 @@ -#ifndef _CAN_MSGS_RX_H -#define _CAN_MSGS_RX_H - -/* - * This file was autogenerated by the CGEN module of the Odyssey framework. - * DO NOT EDIT without also reporting the edit to the Odyssey-Definitions repository to be incorproated into the generator. -*/ - -#include - -#include "u_tx_debug.h" -#include "u_queues.h" -#include "c_utils.h" -#include "fdcan.h" -#include "bitstream.h" - -typedef struct { - uint8_t state; - float temp_average; -} bms_status_t; - -void receive_bms_status(const can_msg_t *message, bms_status_t *bms_status); - -typedef struct { - float high_val; - uint8_t high_chip; - uint8_t high_cell; - float low_val; - uint8_t low_chip; - uint8_t low_cell; - float avg_val; -} cell_voltage_t; - -void receive_cell_voltage(const can_msg_t *message, cell_voltage_t *cell_voltage); - -typedef struct { - float high_val; - uint8_t high_chip; - uint8_t high_cell; - float low_val; - uint8_t low_chip; - uint8_t low_cell; - float avg_val; -} cell_temperatures_t; - -void receive_cell_temperatures(const can_msg_t *message, cell_temperatures_t *cell_temperatures); - -typedef struct { - float seg1; - float seg2; - float seg3; - float seg4; - float seg5; -} segment_temperatures_t; - -void receive_segment_temperatures(const can_msg_t *message, segment_temperatures_t *segment_temperatures); - -typedef struct { - uint8_t state; - uint8_t break_location; - uint8_t verification_attempts; - uint8_t recovery_successful; -} segment_isospi_communication_status_t; - -void receive_segment_isospi_communication_status(const can_msg_t *message, segment_isospi_communication_status_t *segment_isospi_communication_status); - -typedef struct { - bool dcl_enforce; - bool ccl_enforce; - bool low_cell_volt; - bool high_cell_volt; - bool high_charge_volt; - bool pack_hot; - bool die_temp_max; - bool segment_comms; - bool hv_plate_comms; -} fault_status_t; - -void receive_fault_status(const can_msg_t *message, fault_status_t *fault_status); - -typedef struct { - float seg1; - float seg2; - float seg3; - float seg4; - float seg5; -} segment_average_voltages_t; - -void receive_segment_average_voltages(const can_msg_t *message, segment_average_voltages_t *segment_average_voltages); - -typedef struct { - float seg1; - float seg2; - float seg3; - float seg4; - float seg5; -} segment_total_voltages_t; - -void receive_segment_total_voltages(const can_msg_t *message, segment_total_voltages_t *segment_total_voltages); - -typedef struct { - float seg1; - float seg2; - float seg3; - float seg4; - float seg5; -} segment_delta_voltages_t; - -void receive_segment_delta_voltages(const can_msg_t *message, segment_delta_voltages_t *segment_delta_voltages); - -typedef struct { - uint8_t spare0; - uint8_t spare1; - uint16_t spare2; - uint32_t spare3; -} bms_debug_t; - -void receive_bms_debug(const can_msg_t *message, bms_debug_t *bms_debug); - -typedef struct { - uint8_t start_stop; - uint8_t code; - float value; -} bms_fault_timers_t; - -void receive_bms_fault_timers(const can_msg_t *message, bms_fault_timers_t *bms_fault_timers); - -typedef struct { - uint8_t major; - uint8_t minor; - uint8_t patch; - bool dirty; - bool local_commit; -} shepherd_version_tag_t; - -void receive_shepherd_version_tag(const can_msg_t *message, shepherd_version_tag_t *shepherd_version_tag); - -typedef struct { - uint32_t short_hash; - uint32_t author_hash; -} shepherd_version_hash_t; - -void receive_shepherd_version_hash(const can_msg_t *message, shepherd_version_hash_t *shepherd_version_hash); - -typedef struct { - uint32_t overflow_can_id; - uint16_t overflow_cnt; -} overflow_notification_for_percell_t; - -void receive_overflow_notification_for_percell(const can_msg_t *message, overflow_notification_for_percell_t *overflow_notification_for_percell); - -typedef struct { - float therm; - float voltage_a; - float voltage_b; - uint8_t chip_id; - uint8_t cell_a; - uint8_t cell_b; - bool discharging_a; - bool discharging_b; - bool cvs_a; - bool cvs_b; -} alpha_cell_data_debug_t; - -void receive_alpha_cell_data_debug(const can_msg_t *message, alpha_cell_data_debug_t *alpha_cell_data_debug); - -typedef struct { - float therm; - float voltage_a; - float voltage_b; - uint8_t chip_id; - uint8_t cell_a; - uint8_t cell_b; - bool discharging_a; - bool discharging_b; - bool cvs_a; - bool cvs_b; -} beta_cell_data_debug_t; - -void receive_beta_cell_data_debug(const can_msg_t *message, beta_cell_data_debug_t *beta_cell_data_debug); - -typedef struct { - uint8_t chip_id; - float die_temp; - float vpv; - float vmv; - bool va_ov; - bool va_uv; - bool vd_ov; - bool vd_uv; - bool vde; - bool vdel; - bool spiflt; - bool sleep; - bool thsd; - bool tmodchk; - bool oscchk; -} alpha_chip_a_debug_t; - -void receive_alpha_chip_a_debug(const can_msg_t *message, alpha_chip_a_debug_t *alpha_chip_a_debug); - -typedef struct { - float vres; - uint8_t chip_id; - float vref2; - float v_analog; - float v_digital; - bool otp1_med; - bool opt2_med; -} alpha_chip_b_debug_t; - -void receive_alpha_chip_b_debug(const can_msg_t *message, alpha_chip_b_debug_t *alpha_chip_b_debug); - -typedef struct { - uint8_t chip_id; - float die_temp; - float vpv; - float vmv; - bool va_ov; - bool va_uv; - bool vd_ov; - bool vd_uv; - bool vde; - bool vdel; - bool spiflt; - bool sleep; - bool thsd; - bool tmodchk; - bool oscchk; -} beta_chip_a_debug_t; - -void receive_beta_chip_a_debug(const can_msg_t *message, beta_chip_a_debug_t *beta_chip_a_debug); - -typedef struct { - float vres; - uint8_t chip_id; - float vref2; - float v_analog; - float v_digital; - bool otp1_med; - bool opt2_med; -} beta_chip_b_debug_t; - -void receive_beta_chip_b_debug(const can_msg_t *message, beta_chip_b_debug_t *beta_chip_b_debug); - -typedef struct { - uint8_t fan_duty_cycle; -} fan_duty_cycle_percentage_t; - -void receive_fan_duty_cycle_percentage(const can_msg_t *message, fan_duty_cycle_percentage_t *fan_duty_cycle_percentage); - -typedef struct { - uint8_t chip_id; - float therm_temp_1; - float therm_temp_2; - float therm_temp_3; -} onboard_therm_temperatures_t; - -void receive_onboard_therm_temperatures(const can_msg_t *message, onboard_therm_temperatures_t *onboard_therm_temperatures); - -typedef struct { - bool precharge_status; -} precharge_status_t; - -void receive_precharge_status(const can_msg_t *message, precharge_status_t *precharge_status); - -typedef struct { - float batt_voltage; - float ts_voltage; - float shunt_temp; - float pack_current; -} hv_plate_data_t; - -void receive_hv_plate_data(const can_msg_t *message, hv_plate_data_t *hv_plate_data); - -typedef struct { - uint8_t chip_id; - uint16_t pec_errors; -} segment_pec_errors_t; - -void receive_segment_pec_errors(const can_msg_t *message, segment_pec_errors_t *segment_pec_errors); - -typedef struct { - uint16_t pec_errors; -} hv_plate_pec_errors_t; - -void receive_hv_plate_pec_errors(const can_msg_t *message, hv_plate_pec_errors_t *hv_plate_pec_errors); - -typedef struct { - uint16_t flags; - float vreg; - float tmp1; - float vref1p25; - uint16_t osccnt; -} hv_plate_diagnostics_t; - -void receive_hv_plate_diagnostics(const can_msg_t *message, hv_plate_diagnostics_t *hv_plate_diagnostics); - -typedef struct { - float epad; - float vdig; - float vdd; - float tmp2; - float vdiv; -} hv_plate_diagnostics_second_t; - -void receive_hv_plate_diagnostics_second(const can_msg_t *message, hv_plate_diagnostics_second_t *hv_plate_diagnostics_second); - -typedef struct { - float internal_temp; -} bms_onboard_temperature_t; - -void receive_bms_onboard_temperature(const can_msg_t *message, bms_onboard_temperature_t *bms_onboard_temperature); - -typedef struct { - float imu_accelerometer_x; - float imu_accelerometer_y; - float imu_accelerometer_z; -} bms_imu_accelerometer_t; - -void receive_bms_imu_accelerometer(const can_msg_t *message, bms_imu_accelerometer_t *bms_imu_accelerometer); - -typedef struct { - float imu_gyro_x; - float imu_gyro_y; - float imu_gyro_z; -} bms_imu_gyro_t; - -void receive_bms_imu_gyro(const can_msg_t *message, bms_imu_gyro_t *bms_imu_gyro); - -typedef struct { - float Pack_SoC; - float Pack_SoC_Drift; -} pack_soc_status_t; - -void receive_pack_soc_status(const can_msg_t *message, pack_soc_status_t *pack_soc_status); - -typedef struct { - bool shutdown; -} shutdown_as_read_by_bms_t; - -void receive_shutdown_as_read_by_bms(const can_msg_t *message, shutdown_as_read_by_bms_t *shutdown_as_read_by_bms); - -typedef struct { - float accel_x; - float accel_y; - float accel_z; -} lightning_board_imu_acceleration_data_t; - -void receive_lightning_board_imu_acceleration_data(const can_msg_t *message, lightning_board_imu_acceleration_data_t *lightning_board_imu_acceleration_data); - -typedef struct { - float gyro_x; - float gyro_y; - float gyro_z; -} lightning_board_imu_gyro_data_t; - -void receive_lightning_board_imu_gyro_data(const can_msg_t *message, lightning_board_imu_gyro_data_t *lightning_board_imu_gyro_data); - -typedef struct { - uint8_t interrupt; - uint8_t distance; - uint32_t energy; -} lightning_board_lightning_sensor_information_t; - -void receive_lightning_board_lightning_sensor_information(const can_msg_t *message, lightning_board_lightning_sensor_information_t *lightning_board_lightning_sensor_information); - -typedef struct { - float mag_x; - float mag_y; - float mag_z; -} lightning_board_magnometer_sensor_information_t; - -void receive_lightning_board_magnometer_sensor_information(const can_msg_t *message, lightning_board_magnometer_sensor_information_t *lightning_board_magnometer_sensor_information); - -typedef struct { - uint8_t state; -} dashboard_efuse_state_t; - -void receive_dashboard_efuse_state(const can_msg_t *message, dashboard_efuse_state_t *dashboard_efuse_state); - -typedef struct { - uint8_t state; -} brake_efuse_state_t; - -void receive_brake_efuse_state(const can_msg_t *message, brake_efuse_state_t *brake_efuse_state); - -typedef struct { - uint8_t state; -} shutdown_efuse_state_t; - -void receive_shutdown_efuse_state(const can_msg_t *message, shutdown_efuse_state_t *shutdown_efuse_state); - -typedef struct { - uint8_t state; -} lv_efuse_state_t; - -void receive_lv_efuse_state(const can_msg_t *message, lv_efuse_state_t *lv_efuse_state); - -typedef struct { - uint8_t state; -} radfan_efuse_state_t; - -void receive_radfan_efuse_state(const can_msg_t *message, radfan_efuse_state_t *radfan_efuse_state); - -typedef struct { - uint8_t state; -} fanbatt_efuse_state_t; - -void receive_fanbatt_efuse_state(const can_msg_t *message, fanbatt_efuse_state_t *fanbatt_efuse_state); - -typedef struct { - uint8_t state; -} pumpone_efuse_state_t; - -void receive_pumpone_efuse_state(const can_msg_t *message, pumpone_efuse_state_t *pumpone_efuse_state); - -typedef struct { - uint8_t state; -} pumptwo_efuse_state_t; - -void receive_pumptwo_efuse_state(const can_msg_t *message, pumptwo_efuse_state_t *pumptwo_efuse_state); - -typedef struct { - uint8_t state; -} battbox_efuse_state_t; - -void receive_battbox_efuse_state(const can_msg_t *message, battbox_efuse_state_t *battbox_efuse_state); - -typedef struct { - uint8_t state; -} mc_efuse_state_t; - -void receive_mc_efuse_state(const can_msg_t *message, mc_efuse_state_t *mc_efuse_state); - -typedef struct { - uint8_t state; -} spare_efuse_state_t; - -void receive_spare_efuse_state(const can_msg_t *message, spare_efuse_state_t *spare_efuse_state); - -typedef struct { - uint8_t command; -} rtds_command_message_t; - -void receive_rtds_command_message(const can_msg_t *message, rtds_command_message_t *rtds_command_message); - -typedef struct { - uint8_t button_id; -} wheel_buttons_t; - -void receive_wheel_buttons(const can_msg_t *message, wheel_buttons_t *wheel_buttons); - -typedef struct { - float current_target_ac; -} ac_current_command_t; - -void receive_ac_current_command(const can_msg_t *message, ac_current_command_t *ac_current_command); - -typedef struct { - float brake_ac_current; -} brake_current_command_t; - -void receive_brake_current_command(const can_msg_t *message, brake_current_command_t *brake_current_command); - -typedef struct { - float max_current_ac_target; -} max_ac_current_command_t; - -void receive_max_ac_current_command(const can_msg_t *message, max_ac_current_command_t *max_ac_current_command); - -typedef struct { - float max_ac_brake_current_target; -} max_ac_brake_current_command_t; - -void receive_max_ac_brake_current_command(const can_msg_t *message, max_ac_brake_current_command_t *max_ac_brake_current_command); - -typedef struct { - float max_dc_current_target; -} max_dc_current_command_t; - -void receive_max_dc_current_command(const can_msg_t *message, max_dc_current_command_t *max_dc_current_command); - -typedef struct { - float max_dc_brake_current_target; -} max_dc_brake_current_command_t; - -void receive_max_dc_brake_current_command(const can_msg_t *message, max_dc_brake_current_command_t *max_dc_brake_current_command); - -typedef struct { - uint8_t drive_enable; -} drive_enable_command_t; - -void receive_drive_enable_command(const can_msg_t *message, drive_enable_command_t *drive_enable_command); - -typedef struct { - float charge_volts; - float charge_current; - uint8_t enable_charging; -} bms_charge_message_send_t; - -void receive_bms_charge_message_send(const can_msg_t *message, bms_charge_message_send_t *bms_charge_message_send); - -typedef struct { - uint16_t ADC; - float voltage; - float current; - bool is_faulted; - bool is_enabled; - uint8_t control_state; -} dashboard_efuse_t; - -void receive_dashboard_efuse(const can_msg_t *message, dashboard_efuse_t *dashboard_efuse); - -typedef struct { - uint16_t ADC; - float voltage; - float current; - bool is_faulted; - bool is_enabled; - uint8_t control_state; -} brake_efuse_t; - -void receive_brake_efuse(const can_msg_t *message, brake_efuse_t *brake_efuse); - -typedef struct { - uint16_t ADC; - float voltage; - float current; - bool is_faulted; - bool is_enabled; - uint8_t control_state; -} shutdown_efuse_t; - -void receive_shutdown_efuse(const can_msg_t *message, shutdown_efuse_t *shutdown_efuse); - -typedef struct { - uint16_t ADC; - float voltage; - float current; - bool is_faulted; - bool is_enabled; - uint8_t control_state; -} lv_efuse_t; - -void receive_lv_efuse(const can_msg_t *message, lv_efuse_t *lv_efuse); - -typedef struct { - uint16_t ADC; - float voltage; - float current; - bool is_faulted; - bool is_enabled; - uint8_t control_state; -} radfan_efuse_t; - -void receive_radfan_efuse(const can_msg_t *message, radfan_efuse_t *radfan_efuse); - -typedef struct { - uint16_t ADC; - float voltage; - float current; - bool is_faulted; - bool is_enabled; - uint8_t control_state; -} fanbatt_efuse_t; - -void receive_fanbatt_efuse(const can_msg_t *message, fanbatt_efuse_t *fanbatt_efuse); - -typedef struct { - uint16_t ADC; - float voltage; - float current; - bool is_faulted; - bool is_enabled; - uint8_t control_state; -} pumpone_efuse_t; - -void receive_pumpone_efuse(const can_msg_t *message, pumpone_efuse_t *pumpone_efuse); - -typedef struct { - uint16_t ADC; - float voltage; - float current; - bool is_faulted; - bool is_enabled; - uint8_t control_state; -} pumptwo_efuse_t; - -void receive_pumptwo_efuse(const can_msg_t *message, pumptwo_efuse_t *pumptwo_efuse); - -typedef struct { - uint16_t ADC; - float voltage; - float current; - bool is_faulted; - bool is_enabled; - uint8_t control_state; -} battbox_efuse_t; - -void receive_battbox_efuse(const can_msg_t *message, battbox_efuse_t *battbox_efuse); - -typedef struct { - uint16_t ADC; - float voltage; - float current; - bool is_faulted; - bool is_enabled; - uint8_t control_state; -} mc_efuse_t; - -void receive_mc_efuse(const can_msg_t *message, mc_efuse_t *mc_efuse); - -typedef struct { - uint16_t ADC; - float voltage; - float current; - bool is_faulted; - bool is_enabled; - uint8_t control_state; -} spare_efuse_t; - -void receive_spare_efuse(const can_msg_t *message, spare_efuse_t *spare_efuse); - -typedef struct { - bool bms_gpio; - bool bots_gpio; - bool spare_gpio; - bool bspd_gpio; - bool hv_c; - bool hvd_gpio; - bool imd_gpio; - bool ckpt_gpio; - bool inertia_sw_gpio; - bool tsms_gpio; - uint8_t UNUSED; -} shutdown_pins_t; - -void receive_shutdown_pins(const can_msg_t *message, shutdown_pins_t *shutdown_pins); - -typedef struct { - bool home_mode; - uint8_t nero_index; - int32_t car_speed; - bool tsms; - uint32_t torque_limit_percentage; - bool reverse; - uint16_t regen_limit; - bool launch_control; - uint8_t functional_state; - bool traction_control; -} car_state_t; - -void receive_car_state(const can_msg_t *message, car_state_t *car_state); - -typedef struct { - float accel_norm; - float brake_norm; -} pedal_percent_pressed_values_t; - -void receive_pedal_percent_pressed_values(const can_msg_t *message, pedal_percent_pressed_values_t *pedal_percent_pressed_values); - -typedef struct { - float accel1_volts; - float accel2_volts; - float brake1_volts; - float brake2_volts; -} pedal_sensor_voltages_t; - -void receive_pedal_sensor_voltages(const can_msg_t *message, pedal_sensor_voltages_t *pedal_sensor_voltages); - -typedef struct { - uint8_t status; -} lightning_board_light_status_t; - -void receive_lightning_board_light_status(const can_msg_t *message, lightning_board_light_status_t *lightning_board_light_status); - -typedef struct { - float vcu_temperature; - float vcu_humidity; -} temperature_sensor_t; - -void receive_temperature_sensor(const can_msg_t *message, temperature_sensor_t *temperature_sensor); - -typedef struct { - float imu_accelerometer_x; - float imu_accelerometer_y; - float imu_accelerometer_z; -} imu_accelerometer_t; - -void receive_imu_accelerometer(const can_msg_t *message, imu_accelerometer_t *imu_accelerometer); - -typedef struct { - float imu_gyro_x; - float imu_gyro_y; - float imu_gyro_z; -} imu_gyro_t; - -void receive_imu_gyro(const can_msg_t *message, imu_gyro_t *imu_gyro); - -typedef struct { - bool CAN_OUTGOING_FAULT; - bool CAN_INCOMING_FAULT; - bool BMS_CAN_MONITOR_FAULT; - bool LIGHTNING_CAN_MONITOR_FAULT; - bool SHUTDOWN_FAULT; - bool ONBOARD_TEMP_FAULT; - bool IMU_ACCEL_FAULT; - bool IMU_GYRO_FAULT; - bool BSPD_PREFAULT; - bool ONBOARD_BRAKE_OPEN_CIRCUIT_FAULT; - bool ONBOARD_ACCEL_OPEN_CIRCUIT_FAULT; - bool ONBOARD_BRAKE_SHORT_CIRCUIT_FAULT; - bool ONBOARD_ACCEL_SHORT_CIRCUIT_FAULT; - bool ONBOARD_PEDAL_DIFFERENCE_FAULT; - bool RTDS_FAULT; - bool LV_LOW_VOLTAGE_FAULT; -} faults_t; - -void receive_faults(const can_msg_t *message, faults_t *faults); - -typedef struct { - uint16_t ADC; - float Voltage; -} lv_voltage_t; - -void receive_lv_voltage(const can_msg_t *message, lv_voltage_t *lv_voltage); - -typedef struct { - uint8_t three_bits; - float float_value; - uint8_t five_bits; - uint16_t sixteen_bits; - int8_t signed_8_bits; -} vcu_test_message_t; - -void receive_vcu_test_message(const can_msg_t *message, vcu_test_message_t *vcu_test_message); - -typedef struct { - uint16_t temp; -} dti_motor_temp_as_reported_by_vcu_t; - -void receive_dti_motor_temp_as_reported_by_vcu(const can_msg_t *message, dti_motor_temp_as_reported_by_vcu_t *dti_motor_temp_as_reported_by_vcu); - -typedef struct { - uint16_t temp; -} dti_controller_temp_as_reported_by_vcu_t; - -void receive_dti_controller_temp_as_reported_by_vcu(const can_msg_t *message, dti_controller_temp_as_reported_by_vcu_t *dti_controller_temp_as_reported_by_vcu); - -typedef struct { - float temp; -} bms_battbox_temp_as_reported_by_vcu_t; - -void receive_bms_battbox_temp_as_reported_by_vcu(const can_msg_t *message, bms_battbox_temp_as_reported_by_vcu_t *bms_battbox_temp_as_reported_by_vcu); - -typedef struct { - bool brake_state; -} brake_state_as_reported_by_vcu_t; - -void receive_brake_state_as_reported_by_vcu(const can_msg_t *message, brake_state_as_reported_by_vcu_t *brake_state_as_reported_by_vcu); - -typedef struct { - bool pin_state; - bool sounding_state; - bool reverse_state; - bool error; -} rtds_state_message_t; - -void receive_rtds_state_message(const can_msg_t *message, rtds_state_message_t *rtds_state_message); - -typedef struct { - uint16_t raw; - float voltage; - float current; -} lfiu_low_current_adc_readings_t; - -void receive_lfiu_low_current_adc_readings(const can_msg_t *message, lfiu_low_current_adc_readings_t *lfiu_low_current_adc_readings); - -typedef struct { - uint16_t raw; - float voltage; - float current; -} lfiu_high_current_adc_readings_t; - -void receive_lfiu_high_current_adc_readings(const can_msg_t *message, lfiu_high_current_adc_readings_t *lfiu_high_current_adc_readings); - -typedef struct { - uint16_t one; - uint8_t two; - uint8_t three; - bool four; - uint8_t five; - uint32_t six; -} second_vcu_test_message_t; - -void receive_second_vcu_test_message(const can_msg_t *message, second_vcu_test_message_t *second_vcu_test_message); - -typedef struct { - uint8_t fan_pwm_percentage; -} lv_box_fan_pwm_t; - -void receive_lv_box_fan_pwm(const can_msg_t *message, lv_box_fan_pwm_t *lv_box_fan_pwm); - - -void receive_can(const can_msg_t *msg); - -#endif \ No newline at end of file diff --git a/code-gen/Inc/can_messages_tx.h b/code-gen/Inc/can_messages_tx.h deleted file mode 100644 index 3c25222..0000000 --- a/code-gen/Inc/can_messages_tx.h +++ /dev/null @@ -1,189 +0,0 @@ -#ifndef _CAN_MSGS_TX_H -#define _CAN_MSGS_TX_H - -/* - * This file was autogenerated by the CGEN module of the Odyssey framework. - * DO NOT EDIT without also reporting the edit to the Odyssey-Definitions repository to be incorproated into the generator. -*/ -#include -#include - -/** -* Contents of this message: -* MSB/F/Accel - IMU readings from the board -*/ -uint8_t send_front_msb_accel -(float x_force,float y_force,float z_force); - -/** -* Contents of this message: -* MSB/F/Gyro - Gyro readings from the board -*/ -uint8_t send_front_msb_gyro -(float x_deg,float y_deg,float z_deg); - -/** -* Contents of this message: -* MSB/F/Mag - Magnetometer readings from the board -*/ -uint8_t send_front_msb_mag -(float x_mag,float y_mag,float z_mag); - -/** -* Contents of this message: -* MSB/F/Orientation - MSB orientation as a result of sensor fusion -*/ -uint8_t send_front_msb_orientation -(float x_fdeg,float y_fdeg,float z_fdeg); - -/** -* Contents of this message: -* MSB/F/Pressure - Pressure Sensor readings -*/ -uint8_t send_front_msb_pressure_sensor -(float pressure,float temperature); - -/** -* Contents of this message: -* MSB/F/FR_RPM - RPM value of front right wheel -* MSB/F/FL_RPM - RPM value of front left wheel -*/ -uint8_t send_front_temperature_sensor -(float temperature,float humidity); - -/** -* Contents of this message: -* MSB/F/Strain1 - Strain 1 and 2 readings -*/ -uint8_t send_front_msb_strain_one_and_two -(uint32_t strain1,uint32_t strain2); - -/** -* Contents of this message: -* MSB/F/Strain2 - Strain 3 and 4 readings -*/ -uint8_t send_front_msb_strain_three_and_four -(uint32_t strain3,uint32_t strain4); - -/** -* Contents of this message: -* MSB/F/Shock - Shock Pot readings -*/ -uint8_t send_front_shockpot -(uint32_t shock1,uint32_t shock2); - -/** -* Contents of this message: -* MSB/F/Cells - Load Cell readings -*/ -uint8_t send_front_msb_load_cells -(uint32_t cell1,uint32_t cell2); - -/** -* Contents of this message: -* MSB/F/FR_RPM - RPM value of front right wheel -* MSB/F/FL_RPM - RPM value of front left wheel -*/ -uint8_t send_front_wheel_rpm -(uint16_t Front Right,uint16_t Front Left); - -/** -* Contents of this message: -* MSB/F/Angle - Wheel Angle readings -*/ -uint8_t send_front_msb_wheel_angle -(uint32_t angle1); - -/** -* Contents of this message: -* MSB/B/Accel - IMU readings from the board -*/ -uint8_t send_back_msb_accel -(float x_force,float y_force,float z_force); - -/** -* Contents of this message: -* MSB/B/Gyro - Gyro readings from the board -*/ -uint8_t send_back_msb_gyro -(float x_deg,float y_deg,float z_deg); - -/** -* Contents of this message: -* MSB/B/Mag - Magnetometer readings from the board -*/ -uint8_t send_back_msb_mag -(float x_mag,float y_mag,float z_mag); - -/** -* Contents of this message: -* MSB/B/Orientation - MSB orientation as a result of sensor fusion -*/ -uint8_t send_back_msb_orientation -(float x_fdeg,float y_fdeg,float z_fdeg); - -/** -* Contents of this message: -* MSB/F/Pressure - Pressure Sensor readings -*/ -uint8_t send_back_msb_pressure_sensor -(float pressure,float temperature); - -/** -* Contents of this message: -* MSB/F/FR_RPM - RPM value of front right wheel -* MSB/F/FL_RPM - RPM value of front left wheel -*/ -uint8_t send_back_temperature_sensor -(float temperature,float humidity); - -/** -* Contents of this message: -* MSB/B/Strain1 - Strain 1 and 2 readings -*/ -uint8_t send_back_msb_strain_one_and_two -(uint32_t strain1,uint32_t strain2); - -/** -* Contents of this message: -* MSB/B/Strain2 - Strain 3 and 4 readings -*/ -uint8_t send_back_msb_strain_three_and_four -(uint32_t strain3,uint32_t strain4); - -/** -* Contents of this message: -* MSB/B/Shock - Shock Pot readings -*/ -uint8_t send_back_shockpot -(uint32_t shock1,uint32_t shock2); - -/** -* Contents of this message: -* MSB/B/Cells - Load Cell readings -*/ -uint8_t send_back_msb_load_cells -(uint32_t cell1,uint32_t cell2); - -/** -* Contents of this message: -* MSB/F/RR_RPM - RPM value of rear right wheel -* MSB/F/RL_RPM - RPM value of rear left wheel -*/ -uint8_t send_rear_wheel_rpm -(uint16_t Rear Right,uint16_t Rear Left); - -/** -* Contents of this message: -* MSB/B/Thermo - Thermocouple readings -*/ -uint8_t send_back_msb_thermocouple -(uint32_t thermo1); - -/** -* Contents of this message: -* MSB/B/TOF - Time of flight readings -*/ -uint8_t send_back_msb_tof -(uint16_t quadrant1,uint16_t quadrant2,uint16_t quadrant3,uint16_t quadrant4); -#endif \ No newline at end of file diff --git a/code-gen/Src/can_messages_rx.c b/code-gen/Src/can_messages_rx.c deleted file mode 100644 index e84b060..0000000 --- a/code-gen/Src/can_messages_rx.c +++ /dev/null @@ -1,1747 +0,0 @@ -#include "can_messages_rx.h" - -void receive_bms_status(const can_msg_t *message, bms_status_t *bms_status) { - - uint16_t data_bigendian; - memcpy(&data_bigendian, message->data, 2); - uint16_t data = __builtin_bswap16(data_bigendian); - uint64_t state_mask = (1ULL << 8) - 1ULL; - uint64_t state_raw = (data >> 8) & state_mask; - bms_status->state = (uint8_t)state_raw; - uint64_t temp_average_mask = (1ULL << 8) - 1ULL; - uint64_t temp_average_raw = (data >> 0) & temp_average_mask; - bms_status->temp_average = (float)temp_average_raw; -} - -void receive_cell_voltage(const can_msg_t *message, cell_voltage_t *cell_voltage) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t high_val_mask = (1ULL << 16) - 1ULL; - uint64_t high_val_raw = (data >> 48) & high_val_mask; - cell_voltage->high_val = (float)(high_val_raw / 10000); - uint64_t high_chip_mask = (1ULL << 4) - 1ULL; - uint64_t high_chip_raw = (data >> 44) & high_chip_mask; - cell_voltage->high_chip = (uint8_t)high_chip_raw; - uint64_t high_cell_mask = (1ULL << 4) - 1ULL; - uint64_t high_cell_raw = (data >> 40) & high_cell_mask; - cell_voltage->high_cell = (uint8_t)high_cell_raw; - uint64_t low_val_mask = (1ULL << 16) - 1ULL; - uint64_t low_val_raw = (data >> 24) & low_val_mask; - cell_voltage->low_val = (float)(low_val_raw / 10000); - uint64_t low_chip_mask = (1ULL << 4) - 1ULL; - uint64_t low_chip_raw = (data >> 20) & low_chip_mask; - cell_voltage->low_chip = (uint8_t)low_chip_raw; - uint64_t low_cell_mask = (1ULL << 4) - 1ULL; - uint64_t low_cell_raw = (data >> 16) & low_cell_mask; - cell_voltage->low_cell = (uint8_t)low_cell_raw; - uint64_t avg_val_mask = (1ULL << 16) - 1ULL; - uint64_t avg_val_raw = (data >> 0) & avg_val_mask; - cell_voltage->avg_val = (float)(avg_val_raw / 10000); -} - -void receive_cell_temperatures(const can_msg_t *message, cell_temperatures_t *cell_temperatures) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t high_val_mask = (1ULL << 16) - 1ULL; - uint64_t high_val_raw = (data >> 48) & high_val_mask; - cell_temperatures->high_val = (float)(high_val_raw / 100); - uint64_t high_chip_mask = (1ULL << 4) - 1ULL; - uint64_t high_chip_raw = (data >> 44) & high_chip_mask; - cell_temperatures->high_chip = (uint8_t)high_chip_raw; - uint64_t high_cell_mask = (1ULL << 4) - 1ULL; - uint64_t high_cell_raw = (data >> 40) & high_cell_mask; - cell_temperatures->high_cell = (uint8_t)high_cell_raw; - uint64_t low_val_mask = (1ULL << 16) - 1ULL; - uint64_t low_val_raw = (data >> 24) & low_val_mask; - cell_temperatures->low_val = (float)(low_val_raw / 100); - uint64_t low_chip_mask = (1ULL << 4) - 1ULL; - uint64_t low_chip_raw = (data >> 20) & low_chip_mask; - cell_temperatures->low_chip = (uint8_t)low_chip_raw; - uint64_t low_cell_mask = (1ULL << 4) - 1ULL; - uint64_t low_cell_raw = (data >> 16) & low_cell_mask; - cell_temperatures->low_cell = (uint8_t)low_cell_raw; - uint64_t avg_val_mask = (1ULL << 16) - 1ULL; - uint64_t avg_val_raw = (data >> 0) & avg_val_mask; - cell_temperatures->avg_val = (float)(avg_val_raw / 100); -} - -void receive_segment_temperatures(const can_msg_t *message, segment_temperatures_t *segment_temperatures) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t seg1_mask = (1ULL << 8) - 1ULL; - uint64_t seg1_bits = (data >> 56) & seg1_mask; - int64_t seg1_raw = (seg1_bits & (1ULL << (8 - 1))) - ? (int64_t)(seg1_bits | ~seg1_mask) - : (int64_t)seg1_bits; - segment_temperatures->seg1 = (float)seg1_raw; - uint64_t seg2_mask = (1ULL << 8) - 1ULL; - uint64_t seg2_bits = (data >> 48) & seg2_mask; - int64_t seg2_raw = (seg2_bits & (1ULL << (8 - 1))) - ? (int64_t)(seg2_bits | ~seg2_mask) - : (int64_t)seg2_bits; - segment_temperatures->seg2 = (float)seg2_raw; - uint64_t seg3_mask = (1ULL << 8) - 1ULL; - uint64_t seg3_bits = (data >> 40) & seg3_mask; - int64_t seg3_raw = (seg3_bits & (1ULL << (8 - 1))) - ? (int64_t)(seg3_bits | ~seg3_mask) - : (int64_t)seg3_bits; - segment_temperatures->seg3 = (float)seg3_raw; - uint64_t seg4_mask = (1ULL << 8) - 1ULL; - uint64_t seg4_bits = (data >> 32) & seg4_mask; - int64_t seg4_raw = (seg4_bits & (1ULL << (8 - 1))) - ? (int64_t)(seg4_bits | ~seg4_mask) - : (int64_t)seg4_bits; - segment_temperatures->seg4 = (float)seg4_raw; - uint64_t seg5_mask = (1ULL << 8) - 1ULL; - uint64_t seg5_bits = (data >> 24) & seg5_mask; - int64_t seg5_raw = (seg5_bits & (1ULL << (8 - 1))) - ? (int64_t)(seg5_bits | ~seg5_mask) - : (int64_t)seg5_bits; - segment_temperatures->seg5 = (float)seg5_raw; -} - -void receive_segment_isospi_communication_status(const can_msg_t *message, segment_isospi_communication_status_t *segment_isospi_communication_status) { - - uint32_t data_bigendian; - memcpy(&data_bigendian, message->data, 4); - uint32_t data = __builtin_bswap32(data_bigendian); - uint64_t state_mask = (1ULL << 8) - 1ULL; - uint64_t state_raw = (data >> 24) & state_mask; - segment_isospi_communication_status->state = (uint8_t)state_raw; - uint64_t break_location_mask = (1ULL << 8) - 1ULL; - uint64_t break_location_raw = (data >> 16) & break_location_mask; - segment_isospi_communication_status->break_location = (uint8_t)break_location_raw; - uint64_t verification_attempts_mask = (1ULL << 8) - 1ULL; - uint64_t verification_attempts_raw = (data >> 8) & verification_attempts_mask; - segment_isospi_communication_status->verification_attempts = (uint8_t)verification_attempts_raw; - uint64_t recovery_successful_mask = (1ULL << 1) - 1ULL; - uint64_t recovery_successful_raw = (data >> 7) & recovery_successful_mask; - segment_isospi_communication_status->recovery_successful = (uint8_t)recovery_successful_raw; -} - -void receive_fault_status(const can_msg_t *message, fault_status_t *fault_status) { - - uint16_t data_bigendian; - memcpy(&data_bigendian, message->data, 2); - uint16_t data = __builtin_bswap16(data_bigendian); - uint64_t dcl_enforce_mask = (1ULL << 1) - 1ULL; - uint64_t dcl_enforce_raw = (data >> 15) & dcl_enforce_mask; - fault_status->dcl_enforce = (bool)dcl_enforce_raw; - uint64_t ccl_enforce_mask = (1ULL << 1) - 1ULL; - uint64_t ccl_enforce_raw = (data >> 14) & ccl_enforce_mask; - fault_status->ccl_enforce = (bool)ccl_enforce_raw; - uint64_t low_cell_volt_mask = (1ULL << 1) - 1ULL; - uint64_t low_cell_volt_raw = (data >> 13) & low_cell_volt_mask; - fault_status->low_cell_volt = (bool)low_cell_volt_raw; - uint64_t high_cell_volt_mask = (1ULL << 1) - 1ULL; - uint64_t high_cell_volt_raw = (data >> 12) & high_cell_volt_mask; - fault_status->high_cell_volt = (bool)high_cell_volt_raw; - uint64_t high_charge_volt_mask = (1ULL << 1) - 1ULL; - uint64_t high_charge_volt_raw = (data >> 11) & high_charge_volt_mask; - fault_status->high_charge_volt = (bool)high_charge_volt_raw; - uint64_t pack_hot_mask = (1ULL << 1) - 1ULL; - uint64_t pack_hot_raw = (data >> 10) & pack_hot_mask; - fault_status->pack_hot = (bool)pack_hot_raw; - uint64_t die_temp_max_mask = (1ULL << 1) - 1ULL; - uint64_t die_temp_max_raw = (data >> 9) & die_temp_max_mask; - fault_status->die_temp_max = (bool)die_temp_max_raw; - uint64_t segment_comms_mask = (1ULL << 1) - 1ULL; - uint64_t segment_comms_raw = (data >> 8) & segment_comms_mask; - fault_status->segment_comms = (bool)segment_comms_raw; - uint64_t hv_plate_comms_mask = (1ULL << 1) - 1ULL; - uint64_t hv_plate_comms_raw = (data >> 7) & hv_plate_comms_mask; - fault_status->hv_plate_comms = (bool)hv_plate_comms_raw; -} - -void receive_segment_average_voltages(const can_msg_t *message, segment_average_voltages_t *segment_average_voltages) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t seg1_mask = (1ULL << 12) - 1ULL; - uint64_t seg1_raw = (data >> 52) & seg1_mask; - segment_average_voltages->seg1 = (float)(seg1_raw / 1000); - uint64_t seg2_mask = (1ULL << 12) - 1ULL; - uint64_t seg2_raw = (data >> 40) & seg2_mask; - segment_average_voltages->seg2 = (float)(seg2_raw / 1000); - uint64_t seg3_mask = (1ULL << 12) - 1ULL; - uint64_t seg3_raw = (data >> 28) & seg3_mask; - segment_average_voltages->seg3 = (float)(seg3_raw / 1000); - uint64_t seg4_mask = (1ULL << 12) - 1ULL; - uint64_t seg4_raw = (data >> 16) & seg4_mask; - segment_average_voltages->seg4 = (float)(seg4_raw / 1000); - uint64_t seg5_mask = (1ULL << 12) - 1ULL; - uint64_t seg5_raw = (data >> 4) & seg5_mask; - segment_average_voltages->seg5 = (float)(seg5_raw / 1000); -} - -void receive_segment_total_voltages(const can_msg_t *message, segment_total_voltages_t *segment_total_voltages) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t seg1_mask = (1ULL << 12) - 1ULL; - uint64_t seg1_raw = (data >> 52) & seg1_mask; - segment_total_voltages->seg1 = (float)(seg1_raw / 39); - uint64_t seg2_mask = (1ULL << 12) - 1ULL; - uint64_t seg2_raw = (data >> 40) & seg2_mask; - segment_total_voltages->seg2 = (float)(seg2_raw / 39); - uint64_t seg3_mask = (1ULL << 12) - 1ULL; - uint64_t seg3_raw = (data >> 28) & seg3_mask; - segment_total_voltages->seg3 = (float)(seg3_raw / 39); - uint64_t seg4_mask = (1ULL << 12) - 1ULL; - uint64_t seg4_raw = (data >> 16) & seg4_mask; - segment_total_voltages->seg4 = (float)(seg4_raw / 39); - uint64_t seg5_mask = (1ULL << 12) - 1ULL; - uint64_t seg5_raw = (data >> 4) & seg5_mask; - segment_total_voltages->seg5 = (float)(seg5_raw / 39); -} - -void receive_segment_delta_voltages(const can_msg_t *message, segment_delta_voltages_t *segment_delta_voltages) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t seg1_mask = (1ULL << 12) - 1ULL; - uint64_t seg1_raw = (data >> 52) & seg1_mask; - segment_delta_voltages->seg1 = (float)(seg1_raw / 1000); - uint64_t seg2_mask = (1ULL << 12) - 1ULL; - uint64_t seg2_raw = (data >> 40) & seg2_mask; - segment_delta_voltages->seg2 = (float)(seg2_raw / 1000); - uint64_t seg3_mask = (1ULL << 12) - 1ULL; - uint64_t seg3_raw = (data >> 28) & seg3_mask; - segment_delta_voltages->seg3 = (float)(seg3_raw / 1000); - uint64_t seg4_mask = (1ULL << 12) - 1ULL; - uint64_t seg4_raw = (data >> 16) & seg4_mask; - segment_delta_voltages->seg4 = (float)(seg4_raw / 1000); - uint64_t seg5_mask = (1ULL << 12) - 1ULL; - uint64_t seg5_raw = (data >> 4) & seg5_mask; - segment_delta_voltages->seg5 = (float)(seg5_raw / 1000); -} - -void receive_bms_debug(const can_msg_t *message, bms_debug_t *bms_debug) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t spare0_mask = (1ULL << 8) - 1ULL; - uint64_t spare0_raw = (data >> 56) & spare0_mask; - bms_debug->spare0 = (uint8_t)spare0_raw; - uint64_t spare1_mask = (1ULL << 8) - 1ULL; - uint64_t spare1_raw = (data >> 48) & spare1_mask; - bms_debug->spare1 = (uint8_t)spare1_raw; - uint64_t spare2_mask = (1ULL << 16) - 1ULL; - uint64_t spare2_raw = (data >> 32) & spare2_mask; - bms_debug->spare2 = (uint16_t)spare2_raw; - uint64_t spare3_mask = (1ULL << 32) - 1ULL; - uint64_t spare3_raw = (data >> 0) & spare3_mask; - bms_debug->spare3 = (uint32_t)spare3_raw; -} - -void receive_bms_fault_timers(const can_msg_t *message, bms_fault_timers_t *bms_fault_timers) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t start_stop_mask = (1ULL << 8) - 1ULL; - uint64_t start_stop_raw = (data >> 56) & start_stop_mask; - bms_fault_timers->start_stop = (uint8_t)start_stop_raw; - uint64_t code_mask = (1ULL << 8) - 1ULL; - uint64_t code_raw = (data >> 48) & code_mask; - bms_fault_timers->code = (uint8_t)code_raw; - uint64_t value_mask = (1ULL << 32) - 1ULL; - uint64_t value_raw = (data >> 16) & value_mask; - bms_fault_timers->value = (float)value_raw; -} - -void receive_shepherd_version_tag(const can_msg_t *message, shepherd_version_tag_t *shepherd_version_tag) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t major_mask = (1ULL << 8) - 1ULL; - uint64_t major_raw = (data >> 56) & major_mask; - shepherd_version_tag->major = (uint8_t)major_raw; - uint64_t minor_mask = (1ULL << 8) - 1ULL; - uint64_t minor_raw = (data >> 48) & minor_mask; - shepherd_version_tag->minor = (uint8_t)minor_raw; - uint64_t patch_mask = (1ULL << 8) - 1ULL; - uint64_t patch_raw = (data >> 40) & patch_mask; - shepherd_version_tag->patch = (uint8_t)patch_raw; - uint64_t dirty_mask = (1ULL << 8) - 1ULL; - uint64_t dirty_raw = (data >> 32) & dirty_mask; - shepherd_version_tag->dirty = (bool)dirty_raw; - uint64_t local_commit_mask = (1ULL << 8) - 1ULL; - uint64_t local_commit_raw = (data >> 24) & local_commit_mask; - shepherd_version_tag->local_commit = (bool)local_commit_raw; -} - -void receive_shepherd_version_hash(const can_msg_t *message, shepherd_version_hash_t *shepherd_version_hash) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t short_hash_mask = (1ULL << 32) - 1ULL; - uint64_t short_hash_raw = (data >> 32) & short_hash_mask; - shepherd_version_hash->short_hash = (uint32_t)short_hash_raw; - uint64_t author_hash_mask = (1ULL << 32) - 1ULL; - uint64_t author_hash_raw = (data >> 0) & author_hash_mask; - shepherd_version_hash->author_hash = (uint32_t)author_hash_raw; -} - -void receive_overflow_notification_for_percell(const can_msg_t *message, overflow_notification_for_percell_t *overflow_notification_for_percell) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t overflow_can_id_mask = (1ULL << 32) - 1ULL; - uint64_t overflow_can_id_raw = (data >> 32) & overflow_can_id_mask; - overflow_notification_for_percell->overflow_can_id = (uint32_t)overflow_can_id_raw; - uint64_t overflow_cnt_mask = (1ULL << 16) - 1ULL; - uint64_t overflow_cnt_raw = (data >> 16) & overflow_cnt_mask; - overflow_notification_for_percell->overflow_cnt = (uint16_t)overflow_cnt_raw; -} - -void receive_alpha_cell_data_debug(const can_msg_t *message, alpha_cell_data_debug_t *alpha_cell_data_debug) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t therm_mask = (1ULL << 10) - 1ULL; - uint64_t therm_raw = (data >> 54) & therm_mask; - alpha_cell_data_debug->therm = (float)(therm_raw / 10); - uint64_t voltage_a_mask = (1ULL << 13) - 1ULL; - uint64_t voltage_a_raw = (data >> 41) & voltage_a_mask; - alpha_cell_data_debug->voltage_a = (float)(voltage_a_raw / 1000); - uint64_t voltage_b_mask = (1ULL << 13) - 1ULL; - uint64_t voltage_b_raw = (data >> 28) & voltage_b_mask; - alpha_cell_data_debug->voltage_b = (float)(voltage_b_raw / 1000); - uint64_t chip_id_mask = (1ULL << 4) - 1ULL; - uint64_t chip_id_raw = (data >> 24) & chip_id_mask; - alpha_cell_data_debug->chip_id = (uint8_t)chip_id_raw; - uint64_t cell_a_mask = (1ULL << 4) - 1ULL; - uint64_t cell_a_raw = (data >> 20) & cell_a_mask; - alpha_cell_data_debug->cell_a = (uint8_t)cell_a_raw; - uint64_t cell_b_mask = (1ULL << 4) - 1ULL; - uint64_t cell_b_raw = (data >> 16) & cell_b_mask; - alpha_cell_data_debug->cell_b = (uint8_t)cell_b_raw; - uint64_t discharging_a_mask = (1ULL << 1) - 1ULL; - uint64_t discharging_a_raw = (data >> 15) & discharging_a_mask; - alpha_cell_data_debug->discharging_a = (bool)discharging_a_raw; - uint64_t discharging_b_mask = (1ULL << 1) - 1ULL; - uint64_t discharging_b_raw = (data >> 14) & discharging_b_mask; - alpha_cell_data_debug->discharging_b = (bool)discharging_b_raw; - uint64_t cvs_a_mask = (1ULL << 1) - 1ULL; - uint64_t cvs_a_raw = (data >> 13) & cvs_a_mask; - alpha_cell_data_debug->cvs_a = (bool)cvs_a_raw; - uint64_t cvs_b_mask = (1ULL << 1) - 1ULL; - uint64_t cvs_b_raw = (data >> 12) & cvs_b_mask; - alpha_cell_data_debug->cvs_b = (bool)cvs_b_raw; -} - -void receive_beta_cell_data_debug(const can_msg_t *message, beta_cell_data_debug_t *beta_cell_data_debug) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t therm_mask = (1ULL << 10) - 1ULL; - uint64_t therm_raw = (data >> 54) & therm_mask; - beta_cell_data_debug->therm = (float)(therm_raw / 10); - uint64_t voltage_a_mask = (1ULL << 13) - 1ULL; - uint64_t voltage_a_raw = (data >> 41) & voltage_a_mask; - beta_cell_data_debug->voltage_a = (float)(voltage_a_raw / 1000); - uint64_t voltage_b_mask = (1ULL << 13) - 1ULL; - uint64_t voltage_b_raw = (data >> 28) & voltage_b_mask; - beta_cell_data_debug->voltage_b = (float)(voltage_b_raw / 1000); - uint64_t chip_id_mask = (1ULL << 4) - 1ULL; - uint64_t chip_id_raw = (data >> 24) & chip_id_mask; - beta_cell_data_debug->chip_id = (uint8_t)chip_id_raw; - uint64_t cell_a_mask = (1ULL << 4) - 1ULL; - uint64_t cell_a_raw = (data >> 20) & cell_a_mask; - beta_cell_data_debug->cell_a = (uint8_t)cell_a_raw; - uint64_t cell_b_mask = (1ULL << 4) - 1ULL; - uint64_t cell_b_raw = (data >> 16) & cell_b_mask; - beta_cell_data_debug->cell_b = (uint8_t)cell_b_raw; - uint64_t discharging_a_mask = (1ULL << 1) - 1ULL; - uint64_t discharging_a_raw = (data >> 15) & discharging_a_mask; - beta_cell_data_debug->discharging_a = (bool)discharging_a_raw; - uint64_t discharging_b_mask = (1ULL << 1) - 1ULL; - uint64_t discharging_b_raw = (data >> 14) & discharging_b_mask; - beta_cell_data_debug->discharging_b = (bool)discharging_b_raw; - uint64_t cvs_a_mask = (1ULL << 1) - 1ULL; - uint64_t cvs_a_raw = (data >> 13) & cvs_a_mask; - beta_cell_data_debug->cvs_a = (bool)cvs_a_raw; - uint64_t cvs_b_mask = (1ULL << 1) - 1ULL; - uint64_t cvs_b_raw = (data >> 12) & cvs_b_mask; - beta_cell_data_debug->cvs_b = (bool)cvs_b_raw; -} - -void receive_alpha_chip_a_debug(const can_msg_t *message, alpha_chip_a_debug_t *alpha_chip_a_debug) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t chip_id_mask = (1ULL << 4) - 1ULL; - uint64_t chip_id_raw = (data >> 60) & chip_id_mask; - alpha_chip_a_debug->chip_id = (uint8_t)chip_id_raw; - uint64_t die_temp_mask = (1ULL << 13) - 1ULL; - uint64_t die_temp_raw = (data >> 47) & die_temp_mask; - alpha_chip_a_debug->die_temp = (float)(die_temp_raw / 100); - uint64_t vpv_mask = (1ULL << 13) - 1ULL; - uint64_t vpv_raw = (data >> 34) & vpv_mask; - alpha_chip_a_debug->vpv = (float)(vpv_raw / 100); - uint64_t vmv_mask = (1ULL << 13) - 1ULL; - uint64_t vmv_raw = (data >> 21) & vmv_mask; - alpha_chip_a_debug->vmv = (float)(vmv_raw / 1000); - uint64_t va_ov_mask = (1ULL << 1) - 1ULL; - uint64_t va_ov_raw = (data >> 20) & va_ov_mask; - alpha_chip_a_debug->va_ov = (bool)va_ov_raw; - uint64_t va_uv_mask = (1ULL << 1) - 1ULL; - uint64_t va_uv_raw = (data >> 19) & va_uv_mask; - alpha_chip_a_debug->va_uv = (bool)va_uv_raw; - uint64_t vd_ov_mask = (1ULL << 1) - 1ULL; - uint64_t vd_ov_raw = (data >> 18) & vd_ov_mask; - alpha_chip_a_debug->vd_ov = (bool)vd_ov_raw; - uint64_t vd_uv_mask = (1ULL << 1) - 1ULL; - uint64_t vd_uv_raw = (data >> 17) & vd_uv_mask; - alpha_chip_a_debug->vd_uv = (bool)vd_uv_raw; - uint64_t vde_mask = (1ULL << 1) - 1ULL; - uint64_t vde_raw = (data >> 16) & vde_mask; - alpha_chip_a_debug->vde = (bool)vde_raw; - uint64_t vdel_mask = (1ULL << 1) - 1ULL; - uint64_t vdel_raw = (data >> 15) & vdel_mask; - alpha_chip_a_debug->vdel = (bool)vdel_raw; - uint64_t spiflt_mask = (1ULL << 1) - 1ULL; - uint64_t spiflt_raw = (data >> 14) & spiflt_mask; - alpha_chip_a_debug->spiflt = (bool)spiflt_raw; - uint64_t sleep_mask = (1ULL << 1) - 1ULL; - uint64_t sleep_raw = (data >> 13) & sleep_mask; - alpha_chip_a_debug->sleep = (bool)sleep_raw; - uint64_t thsd_mask = (1ULL << 1) - 1ULL; - uint64_t thsd_raw = (data >> 12) & thsd_mask; - alpha_chip_a_debug->thsd = (bool)thsd_raw; - uint64_t tmodchk_mask = (1ULL << 1) - 1ULL; - uint64_t tmodchk_raw = (data >> 11) & tmodchk_mask; - alpha_chip_a_debug->tmodchk = (bool)tmodchk_raw; - uint64_t oscchk_mask = (1ULL << 1) - 1ULL; - uint64_t oscchk_raw = (data >> 10) & oscchk_mask; - alpha_chip_a_debug->oscchk = (bool)oscchk_raw; -} - -void receive_alpha_chip_b_debug(const can_msg_t *message, alpha_chip_b_debug_t *alpha_chip_b_debug) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t vres_mask = (1ULL << 13) - 1ULL; - uint64_t vres_raw = (data >> 51) & vres_mask; - alpha_chip_b_debug->vres = (float)(vres_raw / 1000); - uint64_t chip_id_mask = (1ULL << 4) - 1ULL; - uint64_t chip_id_raw = (data >> 47) & chip_id_mask; - alpha_chip_b_debug->chip_id = (uint8_t)chip_id_raw; - uint64_t vref2_mask = (1ULL << 13) - 1ULL; - uint64_t vref2_raw = (data >> 34) & vref2_mask; - alpha_chip_b_debug->vref2 = (float)(vref2_raw / 1000); - uint64_t v_analog_mask = (1ULL << 13) - 1ULL; - uint64_t v_analog_raw = (data >> 21) & v_analog_mask; - alpha_chip_b_debug->v_analog = (float)(v_analog_raw / 1000); - uint64_t v_digital_mask = (1ULL << 13) - 1ULL; - uint64_t v_digital_raw = (data >> 8) & v_digital_mask; - alpha_chip_b_debug->v_digital = (float)(v_digital_raw / 1000); - uint64_t otp1_med_mask = (1ULL << 1) - 1ULL; - uint64_t otp1_med_raw = (data >> 7) & otp1_med_mask; - alpha_chip_b_debug->otp1_med = (bool)otp1_med_raw; - uint64_t opt2_med_mask = (1ULL << 1) - 1ULL; - uint64_t opt2_med_raw = (data >> 6) & opt2_med_mask; - alpha_chip_b_debug->opt2_med = (bool)opt2_med_raw; -} - -void receive_beta_chip_a_debug(const can_msg_t *message, beta_chip_a_debug_t *beta_chip_a_debug) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t chip_id_mask = (1ULL << 4) - 1ULL; - uint64_t chip_id_raw = (data >> 60) & chip_id_mask; - beta_chip_a_debug->chip_id = (uint8_t)chip_id_raw; - uint64_t die_temp_mask = (1ULL << 13) - 1ULL; - uint64_t die_temp_raw = (data >> 47) & die_temp_mask; - beta_chip_a_debug->die_temp = (float)(die_temp_raw / 100); - uint64_t vpv_mask = (1ULL << 13) - 1ULL; - uint64_t vpv_raw = (data >> 34) & vpv_mask; - beta_chip_a_debug->vpv = (float)(vpv_raw / 100); - uint64_t vmv_mask = (1ULL << 13) - 1ULL; - uint64_t vmv_raw = (data >> 21) & vmv_mask; - beta_chip_a_debug->vmv = (float)(vmv_raw / 1000); - uint64_t va_ov_mask = (1ULL << 1) - 1ULL; - uint64_t va_ov_raw = (data >> 20) & va_ov_mask; - beta_chip_a_debug->va_ov = (bool)va_ov_raw; - uint64_t va_uv_mask = (1ULL << 1) - 1ULL; - uint64_t va_uv_raw = (data >> 19) & va_uv_mask; - beta_chip_a_debug->va_uv = (bool)va_uv_raw; - uint64_t vd_ov_mask = (1ULL << 1) - 1ULL; - uint64_t vd_ov_raw = (data >> 18) & vd_ov_mask; - beta_chip_a_debug->vd_ov = (bool)vd_ov_raw; - uint64_t vd_uv_mask = (1ULL << 1) - 1ULL; - uint64_t vd_uv_raw = (data >> 17) & vd_uv_mask; - beta_chip_a_debug->vd_uv = (bool)vd_uv_raw; - uint64_t vde_mask = (1ULL << 1) - 1ULL; - uint64_t vde_raw = (data >> 16) & vde_mask; - beta_chip_a_debug->vde = (bool)vde_raw; - uint64_t vdel_mask = (1ULL << 1) - 1ULL; - uint64_t vdel_raw = (data >> 15) & vdel_mask; - beta_chip_a_debug->vdel = (bool)vdel_raw; - uint64_t spiflt_mask = (1ULL << 1) - 1ULL; - uint64_t spiflt_raw = (data >> 14) & spiflt_mask; - beta_chip_a_debug->spiflt = (bool)spiflt_raw; - uint64_t sleep_mask = (1ULL << 1) - 1ULL; - uint64_t sleep_raw = (data >> 13) & sleep_mask; - beta_chip_a_debug->sleep = (bool)sleep_raw; - uint64_t thsd_mask = (1ULL << 1) - 1ULL; - uint64_t thsd_raw = (data >> 12) & thsd_mask; - beta_chip_a_debug->thsd = (bool)thsd_raw; - uint64_t tmodchk_mask = (1ULL << 1) - 1ULL; - uint64_t tmodchk_raw = (data >> 11) & tmodchk_mask; - beta_chip_a_debug->tmodchk = (bool)tmodchk_raw; - uint64_t oscchk_mask = (1ULL << 1) - 1ULL; - uint64_t oscchk_raw = (data >> 10) & oscchk_mask; - beta_chip_a_debug->oscchk = (bool)oscchk_raw; -} - -void receive_beta_chip_b_debug(const can_msg_t *message, beta_chip_b_debug_t *beta_chip_b_debug) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t vres_mask = (1ULL << 13) - 1ULL; - uint64_t vres_raw = (data >> 51) & vres_mask; - beta_chip_b_debug->vres = (float)(vres_raw / 1000); - uint64_t chip_id_mask = (1ULL << 4) - 1ULL; - uint64_t chip_id_raw = (data >> 47) & chip_id_mask; - beta_chip_b_debug->chip_id = (uint8_t)chip_id_raw; - uint64_t vref2_mask = (1ULL << 13) - 1ULL; - uint64_t vref2_raw = (data >> 34) & vref2_mask; - beta_chip_b_debug->vref2 = (float)(vref2_raw / 1000); - uint64_t v_analog_mask = (1ULL << 13) - 1ULL; - uint64_t v_analog_raw = (data >> 21) & v_analog_mask; - beta_chip_b_debug->v_analog = (float)(v_analog_raw / 1000); - uint64_t v_digital_mask = (1ULL << 13) - 1ULL; - uint64_t v_digital_raw = (data >> 8) & v_digital_mask; - beta_chip_b_debug->v_digital = (float)(v_digital_raw / 1000); - uint64_t otp1_med_mask = (1ULL << 1) - 1ULL; - uint64_t otp1_med_raw = (data >> 7) & otp1_med_mask; - beta_chip_b_debug->otp1_med = (bool)otp1_med_raw; - uint64_t opt2_med_mask = (1ULL << 1) - 1ULL; - uint64_t opt2_med_raw = (data >> 6) & opt2_med_mask; - beta_chip_b_debug->opt2_med = (bool)opt2_med_raw; -} - -void receive_fan_duty_cycle_percentage(const can_msg_t *message, fan_duty_cycle_percentage_t *fan_duty_cycle_percentage) { - - uint8_t data = message->data[0]; - uint64_t fan_duty_cycle_mask = (1ULL << 8) - 1ULL; - uint64_t fan_duty_cycle_raw = (data >> 0) & fan_duty_cycle_mask; - fan_duty_cycle_percentage->fan_duty_cycle = (uint8_t)fan_duty_cycle_raw; -} - -void receive_onboard_therm_temperatures(const can_msg_t *message, onboard_therm_temperatures_t *onboard_therm_temperatures) { - - uint8_t data = message->data[0]; - uint64_t chip_id_mask = (1ULL << 1) - 1ULL; - uint64_t chip_id_raw = (data >> 7) & chip_id_mask; - onboard_therm_temperatures->chip_id = (uint8_t)chip_id_raw; - uint64_t therm_temp_1_mask = (1ULL << 2) - 1ULL; - uint64_t therm_temp_1_raw = (data >> 5) & therm_temp_1_mask; - onboard_therm_temperatures->therm_temp_1 = (float)therm_temp_1_raw; - uint64_t therm_temp_2_mask = (1ULL << 2) - 1ULL; - uint64_t therm_temp_2_raw = (data >> 3) & therm_temp_2_mask; - onboard_therm_temperatures->therm_temp_2 = (float)therm_temp_2_raw; - uint64_t therm_temp_3_mask = (1ULL << 2) - 1ULL; - uint64_t therm_temp_3_raw = (data >> 1) & therm_temp_3_mask; - onboard_therm_temperatures->therm_temp_3 = (float)therm_temp_3_raw; -} - -void receive_precharge_status(const can_msg_t *message, precharge_status_t *precharge_status) { - - uint8_t data = message->data[0]; - uint64_t precharge_status_mask = (1ULL << 1) - 1ULL; - uint64_t precharge_status_raw = (data >> 7) & precharge_status_mask; - precharge_status->precharge_status = (bool)precharge_status_raw; -} - -void receive_hv_plate_data(const can_msg_t *message, hv_plate_data_t *hv_plate_data) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t batt_voltage_mask = (1ULL << 16) - 1ULL; - uint64_t batt_voltage_bits = (data >> 48) & batt_voltage_mask; - int64_t batt_voltage_raw = (batt_voltage_bits & (1ULL << (16 - 1))) - ? (int64_t)(batt_voltage_bits | ~batt_voltage_mask) - : (int64_t)batt_voltage_bits; - hv_plate_data->batt_voltage = (float)(batt_voltage_raw / 100); - uint64_t ts_voltage_mask = (1ULL << 16) - 1ULL; - uint64_t ts_voltage_bits = (data >> 32) & ts_voltage_mask; - int64_t ts_voltage_raw = (ts_voltage_bits & (1ULL << (16 - 1))) - ? (int64_t)(ts_voltage_bits | ~ts_voltage_mask) - : (int64_t)ts_voltage_bits; - hv_plate_data->ts_voltage = (float)(ts_voltage_raw / 100); - uint64_t shunt_temp_mask = (1ULL << 16) - 1ULL; - uint64_t shunt_temp_bits = (data >> 16) & shunt_temp_mask; - int64_t shunt_temp_raw = (shunt_temp_bits & (1ULL << (16 - 1))) - ? (int64_t)(shunt_temp_bits | ~shunt_temp_mask) - : (int64_t)shunt_temp_bits; - hv_plate_data->shunt_temp = (float)(shunt_temp_raw / 100); - uint64_t pack_current_mask = (1ULL << 16) - 1ULL; - uint64_t pack_current_bits = (data >> 0) & pack_current_mask; - int64_t pack_current_raw = (pack_current_bits & (1ULL << (16 - 1))) - ? (int64_t)(pack_current_bits | ~pack_current_mask) - : (int64_t)pack_current_bits; - hv_plate_data->pack_current = (float)(pack_current_raw / 100); -} - -void receive_segment_pec_errors(const can_msg_t *message, segment_pec_errors_t *segment_pec_errors) { - - uint32_t data_bigendian; - memcpy(&data_bigendian, message->data, 4); - uint32_t data = __builtin_bswap32(data_bigendian); - uint64_t chip_id_mask = (1ULL << 8) - 1ULL; - uint64_t chip_id_raw = (data >> 24) & chip_id_mask; - segment_pec_errors->chip_id = (uint8_t)chip_id_raw; - uint64_t pec_errors_mask = (1ULL << 16) - 1ULL; - uint64_t pec_errors_raw = (data >> 8) & pec_errors_mask; - segment_pec_errors->pec_errors = (uint16_t)pec_errors_raw; -} - -void receive_hv_plate_pec_errors(const can_msg_t *message, hv_plate_pec_errors_t *hv_plate_pec_errors) { - - uint16_t data_bigendian; - memcpy(&data_bigendian, message->data, 2); - uint16_t data = __builtin_bswap16(data_bigendian); - uint64_t pec_errors_mask = (1ULL << 16) - 1ULL; - uint64_t pec_errors_raw = (data >> 0) & pec_errors_mask; - hv_plate_pec_errors->pec_errors = (uint16_t)pec_errors_raw; -} - -void receive_hv_plate_diagnostics(const can_msg_t *message, hv_plate_diagnostics_t *hv_plate_diagnostics) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t flags_mask = (1ULL << 12) - 1ULL; - uint64_t flags_raw = (data >> 52) & flags_mask; - hv_plate_diagnostics->flags = (uint16_t)flags_raw; - uint64_t vreg_mask = (1ULL << 12) - 1ULL; - uint64_t vreg_raw = (data >> 40) & vreg_mask; - hv_plate_diagnostics->vreg = (float)(vreg_raw / 100); - uint64_t tmp1_mask = (1ULL << 12) - 1ULL; - uint64_t tmp1_raw = (data >> 28) & tmp1_mask; - hv_plate_diagnostics->tmp1 = (float)(tmp1_raw / 100); - uint64_t vref1p25_mask = (1ULL << 12) - 1ULL; - uint64_t vref1p25_raw = (data >> 16) & vref1p25_mask; - hv_plate_diagnostics->vref1p25 = (float)(vref1p25_raw / 100); - uint64_t osccnt_mask = (1ULL << 16) - 1ULL; - uint64_t osccnt_raw = (data >> 0) & osccnt_mask; - hv_plate_diagnostics->osccnt = (uint16_t)osccnt_raw; -} - -void receive_hv_plate_diagnostics_second(const can_msg_t *message, hv_plate_diagnostics_second_t *hv_plate_diagnostics_second) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t epad_mask = (1ULL << 12) - 1ULL; - uint64_t epad_raw = (data >> 52) & epad_mask; - hv_plate_diagnostics_second->epad = (float)(epad_raw / 100); - uint64_t vdig_mask = (1ULL << 12) - 1ULL; - uint64_t vdig_raw = (data >> 40) & vdig_mask; - hv_plate_diagnostics_second->vdig = (float)(vdig_raw / 100); - uint64_t vdd_mask = (1ULL << 12) - 1ULL; - uint64_t vdd_raw = (data >> 28) & vdd_mask; - hv_plate_diagnostics_second->vdd = (float)(vdd_raw / 100); - uint64_t tmp2_mask = (1ULL << 12) - 1ULL; - uint64_t tmp2_raw = (data >> 16) & tmp2_mask; - hv_plate_diagnostics_second->tmp2 = (float)(tmp2_raw / 100); - uint64_t vdiv_mask = (1ULL << 12) - 1ULL; - uint64_t vdiv_raw = (data >> 4) & vdiv_mask; - hv_plate_diagnostics_second->vdiv = (float)(vdiv_raw / 100); -} - -void receive_bms_onboard_temperature(const can_msg_t *message, bms_onboard_temperature_t *bms_onboard_temperature) { - - uint16_t data_bigendian; - memcpy(&data_bigendian, message->data, 2); - uint16_t data = __builtin_bswap16(data_bigendian); - uint64_t internal_temp_mask = (1ULL << 16) - 1ULL; - uint64_t internal_temp_raw = (data >> 0) & internal_temp_mask; - bms_onboard_temperature->internal_temp = (float)(internal_temp_raw / 100); -} - -void receive_bms_imu_accelerometer(const can_msg_t *message, bms_imu_accelerometer_t *bms_imu_accelerometer) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t imu_accelerometer_x_mask = (1ULL << 16) - 1ULL; - uint64_t imu_accelerometer_x_bits = (data >> 48) & imu_accelerometer_x_mask; - int64_t imu_accelerometer_x_raw = (imu_accelerometer_x_bits & (1ULL << (16 - 1))) - ? (int64_t)(imu_accelerometer_x_bits | ~imu_accelerometer_x_mask) - : (int64_t)imu_accelerometer_x_bits; - bms_imu_accelerometer->imu_accelerometer_x = (float)(imu_accelerometer_x_raw / 4); - uint64_t imu_accelerometer_y_mask = (1ULL << 16) - 1ULL; - uint64_t imu_accelerometer_y_bits = (data >> 32) & imu_accelerometer_y_mask; - int64_t imu_accelerometer_y_raw = (imu_accelerometer_y_bits & (1ULL << (16 - 1))) - ? (int64_t)(imu_accelerometer_y_bits | ~imu_accelerometer_y_mask) - : (int64_t)imu_accelerometer_y_bits; - bms_imu_accelerometer->imu_accelerometer_y = (float)(imu_accelerometer_y_raw / 4); - uint64_t imu_accelerometer_z_mask = (1ULL << 16) - 1ULL; - uint64_t imu_accelerometer_z_bits = (data >> 16) & imu_accelerometer_z_mask; - int64_t imu_accelerometer_z_raw = (imu_accelerometer_z_bits & (1ULL << (16 - 1))) - ? (int64_t)(imu_accelerometer_z_bits | ~imu_accelerometer_z_mask) - : (int64_t)imu_accelerometer_z_bits; - bms_imu_accelerometer->imu_accelerometer_z = (float)(imu_accelerometer_z_raw / 4); -} - -void receive_bms_imu_gyro(const can_msg_t *message, bms_imu_gyro_t *bms_imu_gyro) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t imu_gyro_x_mask = (1ULL << 16) - 1ULL; - uint64_t imu_gyro_x_bits = (data >> 48) & imu_gyro_x_mask; - int64_t imu_gyro_x_raw = (imu_gyro_x_bits & (1ULL << (16 - 1))) - ? (int64_t)(imu_gyro_x_bits | ~imu_gyro_x_mask) - : (int64_t)imu_gyro_x_bits; - bms_imu_gyro->imu_gyro_x = (float)(imu_gyro_x_raw / 100); - uint64_t imu_gyro_y_mask = (1ULL << 16) - 1ULL; - uint64_t imu_gyro_y_bits = (data >> 32) & imu_gyro_y_mask; - int64_t imu_gyro_y_raw = (imu_gyro_y_bits & (1ULL << (16 - 1))) - ? (int64_t)(imu_gyro_y_bits | ~imu_gyro_y_mask) - : (int64_t)imu_gyro_y_bits; - bms_imu_gyro->imu_gyro_y = (float)(imu_gyro_y_raw / 100); - uint64_t imu_gyro_z_mask = (1ULL << 16) - 1ULL; - uint64_t imu_gyro_z_bits = (data >> 16) & imu_gyro_z_mask; - int64_t imu_gyro_z_raw = (imu_gyro_z_bits & (1ULL << (16 - 1))) - ? (int64_t)(imu_gyro_z_bits | ~imu_gyro_z_mask) - : (int64_t)imu_gyro_z_bits; - bms_imu_gyro->imu_gyro_z = (float)(imu_gyro_z_raw / 100); -} - -void receive_pack_soc_status(const can_msg_t *message, pack_soc_status_t *pack_soc_status) { - - uint32_t data_bigendian; - memcpy(&data_bigendian, message->data, 4); - uint32_t data = __builtin_bswap32(data_bigendian); - uint64_t Pack_SoC_mask = (1ULL << 16) - 1ULL; - uint64_t Pack_SoC_raw = (data >> 16) & Pack_SoC_mask; - pack_soc_status->Pack_SoC = (float)(Pack_SoC_raw / 1000); - uint64_t Pack_SoC_Drift_mask = (1ULL << 16) - 1ULL; - uint64_t Pack_SoC_Drift_bits = (data >> 0) & Pack_SoC_Drift_mask; - int64_t Pack_SoC_Drift_raw = (Pack_SoC_Drift_bits & (1ULL << (16 - 1))) - ? (int64_t)(Pack_SoC_Drift_bits | ~Pack_SoC_Drift_mask) - : (int64_t)Pack_SoC_Drift_bits; - pack_soc_status->Pack_SoC_Drift = (float)(Pack_SoC_Drift_raw / 1000); -} - -void receive_shutdown_as_read_by_bms(const can_msg_t *message, shutdown_as_read_by_bms_t *shutdown_as_read_by_bms) { - - uint8_t data = message->data[0]; - uint64_t shutdown_mask = (1ULL << 8) - 1ULL; - uint64_t shutdown_raw = (data >> 0) & shutdown_mask; - shutdown_as_read_by_bms->shutdown = (bool)shutdown_raw; -} - -void receive_lightning_board_imu_acceleration_data(const can_msg_t *message, lightning_board_imu_acceleration_data_t *lightning_board_imu_acceleration_data) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t accel_x_mask = (1ULL << 16) - 1ULL; - uint64_t accel_x_bits = (data >> 48) & accel_x_mask; - int64_t accel_x_raw = (accel_x_bits & (1ULL << (16 - 1))) - ? (int64_t)(accel_x_bits | ~accel_x_mask) - : (int64_t)accel_x_bits; - lightning_board_imu_acceleration_data->accel_x = (float)(accel_x_raw / 1000); - uint64_t accel_y_mask = (1ULL << 16) - 1ULL; - uint64_t accel_y_bits = (data >> 32) & accel_y_mask; - int64_t accel_y_raw = (accel_y_bits & (1ULL << (16 - 1))) - ? (int64_t)(accel_y_bits | ~accel_y_mask) - : (int64_t)accel_y_bits; - lightning_board_imu_acceleration_data->accel_y = (float)(accel_y_raw / 1000); - uint64_t accel_z_mask = (1ULL << 16) - 1ULL; - uint64_t accel_z_bits = (data >> 16) & accel_z_mask; - int64_t accel_z_raw = (accel_z_bits & (1ULL << (16 - 1))) - ? (int64_t)(accel_z_bits | ~accel_z_mask) - : (int64_t)accel_z_bits; - lightning_board_imu_acceleration_data->accel_z = (float)(accel_z_raw / 1000); -} - -void receive_lightning_board_imu_gyro_data(const can_msg_t *message, lightning_board_imu_gyro_data_t *lightning_board_imu_gyro_data) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t gyro_x_mask = (1ULL << 16) - 1ULL; - uint64_t gyro_x_bits = (data >> 48) & gyro_x_mask; - int64_t gyro_x_raw = (gyro_x_bits & (1ULL << (16 - 1))) - ? (int64_t)(gyro_x_bits | ~gyro_x_mask) - : (int64_t)gyro_x_bits; - lightning_board_imu_gyro_data->gyro_x = (float)(gyro_x_raw / 1000); - uint64_t gyro_y_mask = (1ULL << 16) - 1ULL; - uint64_t gyro_y_bits = (data >> 32) & gyro_y_mask; - int64_t gyro_y_raw = (gyro_y_bits & (1ULL << (16 - 1))) - ? (int64_t)(gyro_y_bits | ~gyro_y_mask) - : (int64_t)gyro_y_bits; - lightning_board_imu_gyro_data->gyro_y = (float)(gyro_y_raw / 1000); - uint64_t gyro_z_mask = (1ULL << 16) - 1ULL; - uint64_t gyro_z_bits = (data >> 16) & gyro_z_mask; - int64_t gyro_z_raw = (gyro_z_bits & (1ULL << (16 - 1))) - ? (int64_t)(gyro_z_bits | ~gyro_z_mask) - : (int64_t)gyro_z_bits; - lightning_board_imu_gyro_data->gyro_z = (float)(gyro_z_raw / 1000); -} - -void receive_lightning_board_lightning_sensor_information(const can_msg_t *message, lightning_board_lightning_sensor_information_t *lightning_board_lightning_sensor_information) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t interrupt_mask = (1ULL << 8) - 1ULL; - uint64_t interrupt_raw = (data >> 56) & interrupt_mask; - lightning_board_lightning_sensor_information->interrupt = (uint8_t)interrupt_raw; - uint64_t distance_mask = (1ULL << 8) - 1ULL; - uint64_t distance_raw = (data >> 48) & distance_mask; - lightning_board_lightning_sensor_information->distance = (uint8_t)distance_raw; - uint64_t energy_mask = (1ULL << 32) - 1ULL; - uint64_t energy_raw = (data >> 16) & energy_mask; - lightning_board_lightning_sensor_information->energy = (uint32_t)energy_raw; -} - -void receive_lightning_board_magnometer_sensor_information(const can_msg_t *message, lightning_board_magnometer_sensor_information_t *lightning_board_magnometer_sensor_information) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t mag_x_mask = (1ULL << 16) - 1ULL; - uint64_t mag_x_bits = (data >> 48) & mag_x_mask; - int64_t mag_x_raw = (mag_x_bits & (1ULL << (16 - 1))) - ? (int64_t)(mag_x_bits | ~mag_x_mask) - : (int64_t)mag_x_bits; - lightning_board_magnometer_sensor_information->mag_x = (float)(mag_x_raw / 1000); - uint64_t mag_y_mask = (1ULL << 16) - 1ULL; - uint64_t mag_y_bits = (data >> 32) & mag_y_mask; - int64_t mag_y_raw = (mag_y_bits & (1ULL << (16 - 1))) - ? (int64_t)(mag_y_bits | ~mag_y_mask) - : (int64_t)mag_y_bits; - lightning_board_magnometer_sensor_information->mag_y = (float)(mag_y_raw / 1000); - uint64_t mag_z_mask = (1ULL << 16) - 1ULL; - uint64_t mag_z_bits = (data >> 16) & mag_z_mask; - int64_t mag_z_raw = (mag_z_bits & (1ULL << (16 - 1))) - ? (int64_t)(mag_z_bits | ~mag_z_mask) - : (int64_t)mag_z_bits; - lightning_board_magnometer_sensor_information->mag_z = (float)(mag_z_raw / 1000); -} - -void receive_dashboard_efuse_state(const can_msg_t *message, dashboard_efuse_state_t *dashboard_efuse_state) { - - uint8_t data = message->data[0]; - uint64_t state_mask = (1ULL << 8) - 1ULL; - uint64_t state_raw = (data >> 0) & state_mask; - dashboard_efuse_state->state = (uint8_t)state_raw; -} - -void receive_brake_efuse_state(const can_msg_t *message, brake_efuse_state_t *brake_efuse_state) { - - uint8_t data = message->data[0]; - uint64_t state_mask = (1ULL << 8) - 1ULL; - uint64_t state_raw = (data >> 0) & state_mask; - brake_efuse_state->state = (uint8_t)state_raw; -} - -void receive_shutdown_efuse_state(const can_msg_t *message, shutdown_efuse_state_t *shutdown_efuse_state) { - - uint8_t data = message->data[0]; - uint64_t state_mask = (1ULL << 8) - 1ULL; - uint64_t state_raw = (data >> 0) & state_mask; - shutdown_efuse_state->state = (uint8_t)state_raw; -} - -void receive_lv_efuse_state(const can_msg_t *message, lv_efuse_state_t *lv_efuse_state) { - - uint8_t data = message->data[0]; - uint64_t state_mask = (1ULL << 8) - 1ULL; - uint64_t state_raw = (data >> 0) & state_mask; - lv_efuse_state->state = (uint8_t)state_raw; -} - -void receive_radfan_efuse_state(const can_msg_t *message, radfan_efuse_state_t *radfan_efuse_state) { - - uint8_t data = message->data[0]; - uint64_t state_mask = (1ULL << 8) - 1ULL; - uint64_t state_raw = (data >> 0) & state_mask; - radfan_efuse_state->state = (uint8_t)state_raw; -} - -void receive_fanbatt_efuse_state(const can_msg_t *message, fanbatt_efuse_state_t *fanbatt_efuse_state) { - - uint8_t data = message->data[0]; - uint64_t state_mask = (1ULL << 8) - 1ULL; - uint64_t state_raw = (data >> 0) & state_mask; - fanbatt_efuse_state->state = (uint8_t)state_raw; -} - -void receive_pumpone_efuse_state(const can_msg_t *message, pumpone_efuse_state_t *pumpone_efuse_state) { - - uint8_t data = message->data[0]; - uint64_t state_mask = (1ULL << 8) - 1ULL; - uint64_t state_raw = (data >> 0) & state_mask; - pumpone_efuse_state->state = (uint8_t)state_raw; -} - -void receive_pumptwo_efuse_state(const can_msg_t *message, pumptwo_efuse_state_t *pumptwo_efuse_state) { - - uint8_t data = message->data[0]; - uint64_t state_mask = (1ULL << 8) - 1ULL; - uint64_t state_raw = (data >> 0) & state_mask; - pumptwo_efuse_state->state = (uint8_t)state_raw; -} - -void receive_battbox_efuse_state(const can_msg_t *message, battbox_efuse_state_t *battbox_efuse_state) { - - uint8_t data = message->data[0]; - uint64_t state_mask = (1ULL << 8) - 1ULL; - uint64_t state_raw = (data >> 0) & state_mask; - battbox_efuse_state->state = (uint8_t)state_raw; -} - -void receive_mc_efuse_state(const can_msg_t *message, mc_efuse_state_t *mc_efuse_state) { - - uint8_t data = message->data[0]; - uint64_t state_mask = (1ULL << 8) - 1ULL; - uint64_t state_raw = (data >> 0) & state_mask; - mc_efuse_state->state = (uint8_t)state_raw; -} - -void receive_spare_efuse_state(const can_msg_t *message, spare_efuse_state_t *spare_efuse_state) { - - uint8_t data = message->data[0]; - uint64_t state_mask = (1ULL << 8) - 1ULL; - uint64_t state_raw = (data >> 0) & state_mask; - spare_efuse_state->state = (uint8_t)state_raw; -} - -void receive_rtds_command_message(const can_msg_t *message, rtds_command_message_t *rtds_command_message) { - - uint8_t data = message->data[0]; - uint64_t command_mask = (1ULL << 8) - 1ULL; - uint64_t command_raw = (data >> 0) & command_mask; - rtds_command_message->command = (uint8_t)command_raw; -} - -void receive_wheel_buttons(const can_msg_t *message, wheel_buttons_t *wheel_buttons) { - - uint8_t data = message->data[0]; - uint64_t button_id_mask = (1ULL << 8) - 1ULL; - uint64_t button_id_raw = (data >> 0) & button_id_mask; - wheel_buttons->button_id = (uint8_t)button_id_raw; -} - -void receive_ac_current_command(const can_msg_t *message, ac_current_command_t *ac_current_command) { - - uint16_t data_bigendian; - memcpy(&data_bigendian, message->data, 2); - uint16_t data = __builtin_bswap16(data_bigendian); - uint64_t current_target_ac_mask = (1ULL << 16) - 1ULL; - uint64_t current_target_ac_bits = (data >> 0) & current_target_ac_mask; - int64_t current_target_ac_raw = (current_target_ac_bits & (1ULL << (16 - 1))) - ? (int64_t)(current_target_ac_bits | ~current_target_ac_mask) - : (int64_t)current_target_ac_bits; - ac_current_command->current_target_ac = (float)(current_target_ac_raw / 10); -} - -void receive_brake_current_command(const can_msg_t *message, brake_current_command_t *brake_current_command) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t brake_ac_current_mask = (1ULL << 16) - 1ULL; - uint64_t brake_ac_current_bits = (data >> 48) & brake_ac_current_mask; - int64_t brake_ac_current_raw = (brake_ac_current_bits & (1ULL << (16 - 1))) - ? (int64_t)(brake_ac_current_bits | ~brake_ac_current_mask) - : (int64_t)brake_ac_current_bits; - brake_current_command->brake_ac_current = (float)(brake_ac_current_raw / 10); -} - -void receive_max_ac_current_command(const can_msg_t *message, max_ac_current_command_t *max_ac_current_command) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t max_current_ac_target_mask = (1ULL << 16) - 1ULL; - uint64_t max_current_ac_target_bits = (data >> 48) & max_current_ac_target_mask; - int64_t max_current_ac_target_raw = (max_current_ac_target_bits & (1ULL << (16 - 1))) - ? (int64_t)(max_current_ac_target_bits | ~max_current_ac_target_mask) - : (int64_t)max_current_ac_target_bits; - max_ac_current_command->max_current_ac_target = (float)(max_current_ac_target_raw / 10); -} - -void receive_max_ac_brake_current_command(const can_msg_t *message, max_ac_brake_current_command_t *max_ac_brake_current_command) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t max_ac_brake_current_target_mask = (1ULL << 16) - 1ULL; - uint64_t max_ac_brake_current_target_bits = (data >> 48) & max_ac_brake_current_target_mask; - int64_t max_ac_brake_current_target_raw = (max_ac_brake_current_target_bits & (1ULL << (16 - 1))) - ? (int64_t)(max_ac_brake_current_target_bits | ~max_ac_brake_current_target_mask) - : (int64_t)max_ac_brake_current_target_bits; - max_ac_brake_current_command->max_ac_brake_current_target = (float)(max_ac_brake_current_target_raw / 10); -} - -void receive_max_dc_current_command(const can_msg_t *message, max_dc_current_command_t *max_dc_current_command) { - - uint16_t data_bigendian; - memcpy(&data_bigendian, message->data, 2); - uint16_t data = __builtin_bswap16(data_bigendian); - uint64_t max_dc_current_target_mask = (1ULL << 16) - 1ULL; - uint64_t max_dc_current_target_bits = (data >> 0) & max_dc_current_target_mask; - int64_t max_dc_current_target_raw = (max_dc_current_target_bits & (1ULL << (16 - 1))) - ? (int64_t)(max_dc_current_target_bits | ~max_dc_current_target_mask) - : (int64_t)max_dc_current_target_bits; - max_dc_current_command->max_dc_current_target = (float)(max_dc_current_target_raw / 10); -} - -void receive_max_dc_brake_current_command(const can_msg_t *message, max_dc_brake_current_command_t *max_dc_brake_current_command) { - - uint16_t data_bigendian; - memcpy(&data_bigendian, message->data, 2); - uint16_t data = __builtin_bswap16(data_bigendian); - uint64_t max_dc_brake_current_target_mask = (1ULL << 16) - 1ULL; - uint64_t max_dc_brake_current_target_bits = (data >> 0) & max_dc_brake_current_target_mask; - int64_t max_dc_brake_current_target_raw = (max_dc_brake_current_target_bits & (1ULL << (16 - 1))) - ? (int64_t)(max_dc_brake_current_target_bits | ~max_dc_brake_current_target_mask) - : (int64_t)max_dc_brake_current_target_bits; - max_dc_brake_current_command->max_dc_brake_current_target = (float)(max_dc_brake_current_target_raw / 10); -} - -void receive_drive_enable_command(const can_msg_t *message, drive_enable_command_t *drive_enable_command) { - - uint8_t data = message->data[0]; - uint64_t drive_enable_mask = (1ULL << 8) - 1ULL; - uint64_t drive_enable_raw = (data >> 0) & drive_enable_mask; - drive_enable_command->drive_enable = (uint8_t)drive_enable_raw; -} - -void receive_bms_charge_message_send(const can_msg_t *message, bms_charge_message_send_t *bms_charge_message_send) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t charge_volts_mask = (1ULL << 16) - 1ULL; - uint64_t charge_volts_raw = (data >> 48) & charge_volts_mask; - bms_charge_message_send->charge_volts = (float)(charge_volts_raw / 10); - uint64_t charge_current_mask = (1ULL << 16) - 1ULL; - uint64_t charge_current_raw = (data >> 32) & charge_current_mask; - bms_charge_message_send->charge_current = (float)(charge_current_raw / 10); - uint64_t enable_charging_mask = (1ULL << 8) - 1ULL; - uint64_t enable_charging_raw = (data >> 24) & enable_charging_mask; - bms_charge_message_send->enable_charging = (uint8_t)enable_charging_raw; -} - -void receive_dashboard_efuse(const can_msg_t *message, dashboard_efuse_t *dashboard_efuse) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t ADC_mask = (1ULL << 16) - 1ULL; - uint64_t ADC_raw = (data >> 48) & ADC_mask; - dashboard_efuse->ADC = (uint16_t)ADC_raw; - uint64_t voltage_mask = (1ULL << 16) - 1ULL; - uint64_t voltage_raw = (data >> 32) & voltage_mask; - dashboard_efuse->voltage = (float)(voltage_raw / 1000); - uint64_t current_mask = (1ULL << 16) - 1ULL; - uint64_t current_raw = (data >> 16) & current_mask; - dashboard_efuse->current = (float)(current_raw / 1000); - uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; - uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; - dashboard_efuse->is_faulted = (bool)is_faulted_raw; - uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; - uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; - dashboard_efuse->is_enabled = (bool)is_enabled_raw; - uint64_t control_state_mask = (1ULL << 8) - 1ULL; - uint64_t control_state_raw = (data >> 0) & control_state_mask; - dashboard_efuse->control_state = (uint8_t)control_state_raw; -} - -void receive_brake_efuse(const can_msg_t *message, brake_efuse_t *brake_efuse) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t ADC_mask = (1ULL << 16) - 1ULL; - uint64_t ADC_raw = (data >> 48) & ADC_mask; - brake_efuse->ADC = (uint16_t)ADC_raw; - uint64_t voltage_mask = (1ULL << 16) - 1ULL; - uint64_t voltage_raw = (data >> 32) & voltage_mask; - brake_efuse->voltage = (float)(voltage_raw / 1000); - uint64_t current_mask = (1ULL << 16) - 1ULL; - uint64_t current_raw = (data >> 16) & current_mask; - brake_efuse->current = (float)(current_raw / 1000); - uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; - uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; - brake_efuse->is_faulted = (bool)is_faulted_raw; - uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; - uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; - brake_efuse->is_enabled = (bool)is_enabled_raw; - uint64_t control_state_mask = (1ULL << 8) - 1ULL; - uint64_t control_state_raw = (data >> 0) & control_state_mask; - brake_efuse->control_state = (uint8_t)control_state_raw; -} - -void receive_shutdown_efuse(const can_msg_t *message, shutdown_efuse_t *shutdown_efuse) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t ADC_mask = (1ULL << 16) - 1ULL; - uint64_t ADC_raw = (data >> 48) & ADC_mask; - shutdown_efuse->ADC = (uint16_t)ADC_raw; - uint64_t voltage_mask = (1ULL << 16) - 1ULL; - uint64_t voltage_raw = (data >> 32) & voltage_mask; - shutdown_efuse->voltage = (float)(voltage_raw / 1000); - uint64_t current_mask = (1ULL << 16) - 1ULL; - uint64_t current_raw = (data >> 16) & current_mask; - shutdown_efuse->current = (float)(current_raw / 1000); - uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; - uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; - shutdown_efuse->is_faulted = (bool)is_faulted_raw; - uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; - uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; - shutdown_efuse->is_enabled = (bool)is_enabled_raw; - uint64_t control_state_mask = (1ULL << 8) - 1ULL; - uint64_t control_state_raw = (data >> 0) & control_state_mask; - shutdown_efuse->control_state = (uint8_t)control_state_raw; -} - -void receive_lv_efuse(const can_msg_t *message, lv_efuse_t *lv_efuse) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t ADC_mask = (1ULL << 16) - 1ULL; - uint64_t ADC_raw = (data >> 48) & ADC_mask; - lv_efuse->ADC = (uint16_t)ADC_raw; - uint64_t voltage_mask = (1ULL << 16) - 1ULL; - uint64_t voltage_raw = (data >> 32) & voltage_mask; - lv_efuse->voltage = (float)(voltage_raw / 1000); - uint64_t current_mask = (1ULL << 16) - 1ULL; - uint64_t current_raw = (data >> 16) & current_mask; - lv_efuse->current = (float)(current_raw / 1000); - uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; - uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; - lv_efuse->is_faulted = (bool)is_faulted_raw; - uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; - uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; - lv_efuse->is_enabled = (bool)is_enabled_raw; - uint64_t control_state_mask = (1ULL << 8) - 1ULL; - uint64_t control_state_raw = (data >> 0) & control_state_mask; - lv_efuse->control_state = (uint8_t)control_state_raw; -} - -void receive_radfan_efuse(const can_msg_t *message, radfan_efuse_t *radfan_efuse) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t ADC_mask = (1ULL << 16) - 1ULL; - uint64_t ADC_raw = (data >> 48) & ADC_mask; - radfan_efuse->ADC = (uint16_t)ADC_raw; - uint64_t voltage_mask = (1ULL << 16) - 1ULL; - uint64_t voltage_raw = (data >> 32) & voltage_mask; - radfan_efuse->voltage = (float)(voltage_raw / 1000); - uint64_t current_mask = (1ULL << 16) - 1ULL; - uint64_t current_raw = (data >> 16) & current_mask; - radfan_efuse->current = (float)(current_raw / 1000); - uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; - uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; - radfan_efuse->is_faulted = (bool)is_faulted_raw; - uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; - uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; - radfan_efuse->is_enabled = (bool)is_enabled_raw; - uint64_t control_state_mask = (1ULL << 8) - 1ULL; - uint64_t control_state_raw = (data >> 0) & control_state_mask; - radfan_efuse->control_state = (uint8_t)control_state_raw; -} - -void receive_fanbatt_efuse(const can_msg_t *message, fanbatt_efuse_t *fanbatt_efuse) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t ADC_mask = (1ULL << 16) - 1ULL; - uint64_t ADC_raw = (data >> 48) & ADC_mask; - fanbatt_efuse->ADC = (uint16_t)ADC_raw; - uint64_t voltage_mask = (1ULL << 16) - 1ULL; - uint64_t voltage_raw = (data >> 32) & voltage_mask; - fanbatt_efuse->voltage = (float)(voltage_raw / 1000); - uint64_t current_mask = (1ULL << 16) - 1ULL; - uint64_t current_raw = (data >> 16) & current_mask; - fanbatt_efuse->current = (float)(current_raw / 1000); - uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; - uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; - fanbatt_efuse->is_faulted = (bool)is_faulted_raw; - uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; - uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; - fanbatt_efuse->is_enabled = (bool)is_enabled_raw; - uint64_t control_state_mask = (1ULL << 8) - 1ULL; - uint64_t control_state_raw = (data >> 0) & control_state_mask; - fanbatt_efuse->control_state = (uint8_t)control_state_raw; -} - -void receive_pumpone_efuse(const can_msg_t *message, pumpone_efuse_t *pumpone_efuse) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t ADC_mask = (1ULL << 16) - 1ULL; - uint64_t ADC_raw = (data >> 48) & ADC_mask; - pumpone_efuse->ADC = (uint16_t)ADC_raw; - uint64_t voltage_mask = (1ULL << 16) - 1ULL; - uint64_t voltage_raw = (data >> 32) & voltage_mask; - pumpone_efuse->voltage = (float)(voltage_raw / 1000); - uint64_t current_mask = (1ULL << 16) - 1ULL; - uint64_t current_raw = (data >> 16) & current_mask; - pumpone_efuse->current = (float)(current_raw / 1000); - uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; - uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; - pumpone_efuse->is_faulted = (bool)is_faulted_raw; - uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; - uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; - pumpone_efuse->is_enabled = (bool)is_enabled_raw; - uint64_t control_state_mask = (1ULL << 8) - 1ULL; - uint64_t control_state_raw = (data >> 0) & control_state_mask; - pumpone_efuse->control_state = (uint8_t)control_state_raw; -} - -void receive_pumptwo_efuse(const can_msg_t *message, pumptwo_efuse_t *pumptwo_efuse) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t ADC_mask = (1ULL << 16) - 1ULL; - uint64_t ADC_raw = (data >> 48) & ADC_mask; - pumptwo_efuse->ADC = (uint16_t)ADC_raw; - uint64_t voltage_mask = (1ULL << 16) - 1ULL; - uint64_t voltage_raw = (data >> 32) & voltage_mask; - pumptwo_efuse->voltage = (float)(voltage_raw / 1000); - uint64_t current_mask = (1ULL << 16) - 1ULL; - uint64_t current_raw = (data >> 16) & current_mask; - pumptwo_efuse->current = (float)(current_raw / 1000); - uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; - uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; - pumptwo_efuse->is_faulted = (bool)is_faulted_raw; - uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; - uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; - pumptwo_efuse->is_enabled = (bool)is_enabled_raw; - uint64_t control_state_mask = (1ULL << 8) - 1ULL; - uint64_t control_state_raw = (data >> 0) & control_state_mask; - pumptwo_efuse->control_state = (uint8_t)control_state_raw; -} - -void receive_battbox_efuse(const can_msg_t *message, battbox_efuse_t *battbox_efuse) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t ADC_mask = (1ULL << 16) - 1ULL; - uint64_t ADC_raw = (data >> 48) & ADC_mask; - battbox_efuse->ADC = (uint16_t)ADC_raw; - uint64_t voltage_mask = (1ULL << 16) - 1ULL; - uint64_t voltage_raw = (data >> 32) & voltage_mask; - battbox_efuse->voltage = (float)(voltage_raw / 1000); - uint64_t current_mask = (1ULL << 16) - 1ULL; - uint64_t current_raw = (data >> 16) & current_mask; - battbox_efuse->current = (float)(current_raw / 1000); - uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; - uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; - battbox_efuse->is_faulted = (bool)is_faulted_raw; - uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; - uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; - battbox_efuse->is_enabled = (bool)is_enabled_raw; - uint64_t control_state_mask = (1ULL << 8) - 1ULL; - uint64_t control_state_raw = (data >> 0) & control_state_mask; - battbox_efuse->control_state = (uint8_t)control_state_raw; -} - -void receive_mc_efuse(const can_msg_t *message, mc_efuse_t *mc_efuse) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t ADC_mask = (1ULL << 16) - 1ULL; - uint64_t ADC_raw = (data >> 48) & ADC_mask; - mc_efuse->ADC = (uint16_t)ADC_raw; - uint64_t voltage_mask = (1ULL << 16) - 1ULL; - uint64_t voltage_raw = (data >> 32) & voltage_mask; - mc_efuse->voltage = (float)(voltage_raw / 1000); - uint64_t current_mask = (1ULL << 16) - 1ULL; - uint64_t current_raw = (data >> 16) & current_mask; - mc_efuse->current = (float)(current_raw / 1000); - uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; - uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; - mc_efuse->is_faulted = (bool)is_faulted_raw; - uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; - uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; - mc_efuse->is_enabled = (bool)is_enabled_raw; - uint64_t control_state_mask = (1ULL << 8) - 1ULL; - uint64_t control_state_raw = (data >> 0) & control_state_mask; - mc_efuse->control_state = (uint8_t)control_state_raw; -} - -void receive_spare_efuse(const can_msg_t *message, spare_efuse_t *spare_efuse) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t ADC_mask = (1ULL << 16) - 1ULL; - uint64_t ADC_raw = (data >> 48) & ADC_mask; - spare_efuse->ADC = (uint16_t)ADC_raw; - uint64_t voltage_mask = (1ULL << 16) - 1ULL; - uint64_t voltage_raw = (data >> 32) & voltage_mask; - spare_efuse->voltage = (float)(voltage_raw / 1000); - uint64_t current_mask = (1ULL << 16) - 1ULL; - uint64_t current_raw = (data >> 16) & current_mask; - spare_efuse->current = (float)(current_raw / 1000); - uint64_t is_faulted_mask = (1ULL << 4) - 1ULL; - uint64_t is_faulted_raw = (data >> 12) & is_faulted_mask; - spare_efuse->is_faulted = (bool)is_faulted_raw; - uint64_t is_enabled_mask = (1ULL << 4) - 1ULL; - uint64_t is_enabled_raw = (data >> 8) & is_enabled_mask; - spare_efuse->is_enabled = (bool)is_enabled_raw; - uint64_t control_state_mask = (1ULL << 8) - 1ULL; - uint64_t control_state_raw = (data >> 0) & control_state_mask; - spare_efuse->control_state = (uint8_t)control_state_raw; -} - -void receive_shutdown_pins(const can_msg_t *message, shutdown_pins_t *shutdown_pins) { - - uint16_t data_bigendian; - memcpy(&data_bigendian, message->data, 2); - uint16_t data = __builtin_bswap16(data_bigendian); - uint64_t bms_gpio_mask = (1ULL << 1) - 1ULL; - uint64_t bms_gpio_raw = (data >> 15) & bms_gpio_mask; - shutdown_pins->bms_gpio = (bool)bms_gpio_raw; - uint64_t bots_gpio_mask = (1ULL << 1) - 1ULL; - uint64_t bots_gpio_raw = (data >> 14) & bots_gpio_mask; - shutdown_pins->bots_gpio = (bool)bots_gpio_raw; - uint64_t spare_gpio_mask = (1ULL << 1) - 1ULL; - uint64_t spare_gpio_raw = (data >> 13) & spare_gpio_mask; - shutdown_pins->spare_gpio = (bool)spare_gpio_raw; - uint64_t bspd_gpio_mask = (1ULL << 1) - 1ULL; - uint64_t bspd_gpio_raw = (data >> 12) & bspd_gpio_mask; - shutdown_pins->bspd_gpio = (bool)bspd_gpio_raw; - uint64_t hv_c_mask = (1ULL << 1) - 1ULL; - uint64_t hv_c_raw = (data >> 11) & hv_c_mask; - shutdown_pins->hv_c = (bool)hv_c_raw; - uint64_t hvd_gpio_mask = (1ULL << 1) - 1ULL; - uint64_t hvd_gpio_raw = (data >> 10) & hvd_gpio_mask; - shutdown_pins->hvd_gpio = (bool)hvd_gpio_raw; - uint64_t imd_gpio_mask = (1ULL << 1) - 1ULL; - uint64_t imd_gpio_raw = (data >> 9) & imd_gpio_mask; - shutdown_pins->imd_gpio = (bool)imd_gpio_raw; - uint64_t ckpt_gpio_mask = (1ULL << 1) - 1ULL; - uint64_t ckpt_gpio_raw = (data >> 8) & ckpt_gpio_mask; - shutdown_pins->ckpt_gpio = (bool)ckpt_gpio_raw; - uint64_t inertia_sw_gpio_mask = (1ULL << 1) - 1ULL; - uint64_t inertia_sw_gpio_raw = (data >> 7) & inertia_sw_gpio_mask; - shutdown_pins->inertia_sw_gpio = (bool)inertia_sw_gpio_raw; - uint64_t tsms_gpio_mask = (1ULL << 1) - 1ULL; - uint64_t tsms_gpio_raw = (data >> 6) & tsms_gpio_mask; - shutdown_pins->tsms_gpio = (bool)tsms_gpio_raw; - uint64_t UNUSED_mask = (1ULL << 6) - 1ULL; - uint64_t UNUSED_raw = (data >> 0) & UNUSED_mask; - shutdown_pins->UNUSED = (uint8_t)UNUSED_raw; -} - -void receive_car_state(const can_msg_t *message, car_state_t *car_state) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t home_mode_mask = (1ULL << 4) - 1ULL; - uint64_t home_mode_raw = (data >> 60) & home_mode_mask; - car_state->home_mode = (bool)home_mode_raw; - uint64_t nero_index_mask = (1ULL << 4) - 1ULL; - uint64_t nero_index_raw = (data >> 56) & nero_index_mask; - car_state->nero_index = (uint8_t)nero_index_raw; - uint64_t car_speed_mask = (1ULL << 16) - 1ULL; - uint64_t car_speed_bits = (data >> 40) & car_speed_mask; - int64_t car_speed_raw = (car_speed_bits & (1ULL << (16 - 1))) - ? (int64_t)(car_speed_bits | ~car_speed_mask) - : (int64_t)car_speed_bits; - car_state->car_speed = (int32_t)(car_speed_raw / 10); - uint64_t tsms_mask = (1ULL << 1) - 1ULL; - uint64_t tsms_raw = (data >> 39) & tsms_mask; - car_state->tsms = (bool)tsms_raw; - uint64_t torque_limit_percentage_mask = (1ULL << 7) - 1ULL; - uint64_t torque_limit_percentage_raw = (data >> 32) & torque_limit_percentage_mask; - car_state->torque_limit_percentage = (uint32_t)(torque_limit_percentage_raw / 100); - uint64_t reverse_mask = (1ULL << 1) - 1ULL; - uint64_t reverse_raw = (data >> 31) & reverse_mask; - car_state->reverse = (bool)reverse_raw; - uint64_t regen_limit_mask = (1ULL << 10) - 1ULL; - uint64_t regen_limit_raw = (data >> 21) & regen_limit_mask; - car_state->regen_limit = (uint16_t)regen_limit_raw; - uint64_t launch_control_mask = (1ULL << 1) - 1ULL; - uint64_t launch_control_raw = (data >> 20) & launch_control_mask; - car_state->launch_control = (bool)launch_control_raw; - uint64_t functional_state_mask = (1ULL << 3) - 1ULL; - uint64_t functional_state_raw = (data >> 17) & functional_state_mask; - car_state->functional_state = (uint8_t)functional_state_raw; - uint64_t traction_control_mask = (1ULL << 1) - 1ULL; - uint64_t traction_control_raw = (data >> 16) & traction_control_mask; - car_state->traction_control = (bool)traction_control_raw; -} - -void receive_pedal_percent_pressed_values(const can_msg_t *message, pedal_percent_pressed_values_t *pedal_percent_pressed_values) { - - uint32_t data_bigendian; - memcpy(&data_bigendian, message->data, 4); - uint32_t data = __builtin_bswap32(data_bigendian); - uint64_t accel_norm_mask = (1ULL << 16) - 1ULL; - uint64_t accel_norm_raw = (data >> 16) & accel_norm_mask; - pedal_percent_pressed_values->accel_norm = (float)(accel_norm_raw / 100); - uint64_t brake_norm_mask = (1ULL << 16) - 1ULL; - uint64_t brake_norm_raw = (data >> 0) & brake_norm_mask; - pedal_percent_pressed_values->brake_norm = (float)(brake_norm_raw / 100); -} - -void receive_pedal_sensor_voltages(const can_msg_t *message, pedal_sensor_voltages_t *pedal_sensor_voltages) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t accel1_volts_mask = (1ULL << 16) - 1ULL; - uint64_t accel1_volts_raw = (data >> 48) & accel1_volts_mask; - pedal_sensor_voltages->accel1_volts = (float)(accel1_volts_raw / 100); - uint64_t accel2_volts_mask = (1ULL << 16) - 1ULL; - uint64_t accel2_volts_raw = (data >> 32) & accel2_volts_mask; - pedal_sensor_voltages->accel2_volts = (float)(accel2_volts_raw / 100); - uint64_t brake1_volts_mask = (1ULL << 16) - 1ULL; - uint64_t brake1_volts_raw = (data >> 16) & brake1_volts_mask; - pedal_sensor_voltages->brake1_volts = (float)(brake1_volts_raw / 100); - uint64_t brake2_volts_mask = (1ULL << 16) - 1ULL; - uint64_t brake2_volts_raw = (data >> 0) & brake2_volts_mask; - pedal_sensor_voltages->brake2_volts = (float)(brake2_volts_raw / 100); -} - -void receive_lightning_board_light_status(const can_msg_t *message, lightning_board_light_status_t *lightning_board_light_status) { - - uint8_t data = message->data[0]; - uint64_t status_mask = (1ULL << 2) - 1ULL; - uint64_t status_raw = (data >> 6) & status_mask; - lightning_board_light_status->status = (uint8_t)status_raw; -} - -void receive_temperature_sensor(const can_msg_t *message, temperature_sensor_t *temperature_sensor) { - - uint32_t data_bigendian; - memcpy(&data_bigendian, message->data, 4); - uint32_t data = __builtin_bswap32(data_bigendian); - uint64_t vcu_temperature_mask = (1ULL << 16) - 1ULL; - uint64_t vcu_temperature_bits = (data >> 16) & vcu_temperature_mask; - int64_t vcu_temperature_raw = (vcu_temperature_bits & (1ULL << (16 - 1))) - ? (int64_t)(vcu_temperature_bits | ~vcu_temperature_mask) - : (int64_t)vcu_temperature_bits; - temperature_sensor->vcu_temperature = (float)(vcu_temperature_raw / 100); - uint64_t vcu_humidity_mask = (1ULL << 16) - 1ULL; - uint64_t vcu_humidity_raw = (data >> 0) & vcu_humidity_mask; - temperature_sensor->vcu_humidity = (float)(vcu_humidity_raw / 100); -} - -void receive_imu_accelerometer(const can_msg_t *message, imu_accelerometer_t *imu_accelerometer) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t imu_accelerometer_x_mask = (1ULL << 16) - 1ULL; - uint64_t imu_accelerometer_x_bits = (data >> 48) & imu_accelerometer_x_mask; - int64_t imu_accelerometer_x_raw = (imu_accelerometer_x_bits & (1ULL << (16 - 1))) - ? (int64_t)(imu_accelerometer_x_bits | ~imu_accelerometer_x_mask) - : (int64_t)imu_accelerometer_x_bits; - imu_accelerometer->imu_accelerometer_x = (float)(imu_accelerometer_x_raw / 4); - uint64_t imu_accelerometer_y_mask = (1ULL << 16) - 1ULL; - uint64_t imu_accelerometer_y_bits = (data >> 32) & imu_accelerometer_y_mask; - int64_t imu_accelerometer_y_raw = (imu_accelerometer_y_bits & (1ULL << (16 - 1))) - ? (int64_t)(imu_accelerometer_y_bits | ~imu_accelerometer_y_mask) - : (int64_t)imu_accelerometer_y_bits; - imu_accelerometer->imu_accelerometer_y = (float)(imu_accelerometer_y_raw / 4); - uint64_t imu_accelerometer_z_mask = (1ULL << 16) - 1ULL; - uint64_t imu_accelerometer_z_bits = (data >> 16) & imu_accelerometer_z_mask; - int64_t imu_accelerometer_z_raw = (imu_accelerometer_z_bits & (1ULL << (16 - 1))) - ? (int64_t)(imu_accelerometer_z_bits | ~imu_accelerometer_z_mask) - : (int64_t)imu_accelerometer_z_bits; - imu_accelerometer->imu_accelerometer_z = (float)(imu_accelerometer_z_raw / 4); -} - -void receive_imu_gyro(const can_msg_t *message, imu_gyro_t *imu_gyro) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t imu_gyro_x_mask = (1ULL << 16) - 1ULL; - uint64_t imu_gyro_x_bits = (data >> 48) & imu_gyro_x_mask; - int64_t imu_gyro_x_raw = (imu_gyro_x_bits & (1ULL << (16 - 1))) - ? (int64_t)(imu_gyro_x_bits | ~imu_gyro_x_mask) - : (int64_t)imu_gyro_x_bits; - imu_gyro->imu_gyro_x = (float)(imu_gyro_x_raw / 100); - uint64_t imu_gyro_y_mask = (1ULL << 16) - 1ULL; - uint64_t imu_gyro_y_bits = (data >> 32) & imu_gyro_y_mask; - int64_t imu_gyro_y_raw = (imu_gyro_y_bits & (1ULL << (16 - 1))) - ? (int64_t)(imu_gyro_y_bits | ~imu_gyro_y_mask) - : (int64_t)imu_gyro_y_bits; - imu_gyro->imu_gyro_y = (float)(imu_gyro_y_raw / 100); - uint64_t imu_gyro_z_mask = (1ULL << 16) - 1ULL; - uint64_t imu_gyro_z_bits = (data >> 16) & imu_gyro_z_mask; - int64_t imu_gyro_z_raw = (imu_gyro_z_bits & (1ULL << (16 - 1))) - ? (int64_t)(imu_gyro_z_bits | ~imu_gyro_z_mask) - : (int64_t)imu_gyro_z_bits; - imu_gyro->imu_gyro_z = (float)(imu_gyro_z_raw / 100); -} - -void receive_faults(const can_msg_t *message, faults_t *faults) { - - uint16_t data_bigendian; - memcpy(&data_bigendian, message->data, 2); - uint16_t data = __builtin_bswap16(data_bigendian); - uint64_t CAN_OUTGOING_FAULT_mask = (1ULL << 1) - 1ULL; - uint64_t CAN_OUTGOING_FAULT_raw = (data >> 15) & CAN_OUTGOING_FAULT_mask; - faults->CAN_OUTGOING_FAULT = (bool)CAN_OUTGOING_FAULT_raw; - uint64_t CAN_INCOMING_FAULT_mask = (1ULL << 1) - 1ULL; - uint64_t CAN_INCOMING_FAULT_raw = (data >> 14) & CAN_INCOMING_FAULT_mask; - faults->CAN_INCOMING_FAULT = (bool)CAN_INCOMING_FAULT_raw; - uint64_t BMS_CAN_MONITOR_FAULT_mask = (1ULL << 1) - 1ULL; - uint64_t BMS_CAN_MONITOR_FAULT_raw = (data >> 13) & BMS_CAN_MONITOR_FAULT_mask; - faults->BMS_CAN_MONITOR_FAULT = (bool)BMS_CAN_MONITOR_FAULT_raw; - uint64_t LIGHTNING_CAN_MONITOR_FAULT_mask = (1ULL << 1) - 1ULL; - uint64_t LIGHTNING_CAN_MONITOR_FAULT_raw = (data >> 12) & LIGHTNING_CAN_MONITOR_FAULT_mask; - faults->LIGHTNING_CAN_MONITOR_FAULT = (bool)LIGHTNING_CAN_MONITOR_FAULT_raw; - uint64_t SHUTDOWN_FAULT_mask = (1ULL << 1) - 1ULL; - uint64_t SHUTDOWN_FAULT_raw = (data >> 11) & SHUTDOWN_FAULT_mask; - faults->SHUTDOWN_FAULT = (bool)SHUTDOWN_FAULT_raw; - uint64_t ONBOARD_TEMP_FAULT_mask = (1ULL << 1) - 1ULL; - uint64_t ONBOARD_TEMP_FAULT_raw = (data >> 10) & ONBOARD_TEMP_FAULT_mask; - faults->ONBOARD_TEMP_FAULT = (bool)ONBOARD_TEMP_FAULT_raw; - uint64_t IMU_ACCEL_FAULT_mask = (1ULL << 1) - 1ULL; - uint64_t IMU_ACCEL_FAULT_raw = (data >> 9) & IMU_ACCEL_FAULT_mask; - faults->IMU_ACCEL_FAULT = (bool)IMU_ACCEL_FAULT_raw; - uint64_t IMU_GYRO_FAULT_mask = (1ULL << 1) - 1ULL; - uint64_t IMU_GYRO_FAULT_raw = (data >> 8) & IMU_GYRO_FAULT_mask; - faults->IMU_GYRO_FAULT = (bool)IMU_GYRO_FAULT_raw; - uint64_t BSPD_PREFAULT_mask = (1ULL << 1) - 1ULL; - uint64_t BSPD_PREFAULT_raw = (data >> 7) & BSPD_PREFAULT_mask; - faults->BSPD_PREFAULT = (bool)BSPD_PREFAULT_raw; - uint64_t ONBOARD_BRAKE_OPEN_CIRCUIT_FAULT_mask = (1ULL << 1) - 1ULL; - uint64_t ONBOARD_BRAKE_OPEN_CIRCUIT_FAULT_raw = (data >> 6) & ONBOARD_BRAKE_OPEN_CIRCUIT_FAULT_mask; - faults->ONBOARD_BRAKE_OPEN_CIRCUIT_FAULT = (bool)ONBOARD_BRAKE_OPEN_CIRCUIT_FAULT_raw; - uint64_t ONBOARD_ACCEL_OPEN_CIRCUIT_FAULT_mask = (1ULL << 1) - 1ULL; - uint64_t ONBOARD_ACCEL_OPEN_CIRCUIT_FAULT_raw = (data >> 5) & ONBOARD_ACCEL_OPEN_CIRCUIT_FAULT_mask; - faults->ONBOARD_ACCEL_OPEN_CIRCUIT_FAULT = (bool)ONBOARD_ACCEL_OPEN_CIRCUIT_FAULT_raw; - uint64_t ONBOARD_BRAKE_SHORT_CIRCUIT_FAULT_mask = (1ULL << 1) - 1ULL; - uint64_t ONBOARD_BRAKE_SHORT_CIRCUIT_FAULT_raw = (data >> 4) & ONBOARD_BRAKE_SHORT_CIRCUIT_FAULT_mask; - faults->ONBOARD_BRAKE_SHORT_CIRCUIT_FAULT = (bool)ONBOARD_BRAKE_SHORT_CIRCUIT_FAULT_raw; - uint64_t ONBOARD_ACCEL_SHORT_CIRCUIT_FAULT_mask = (1ULL << 1) - 1ULL; - uint64_t ONBOARD_ACCEL_SHORT_CIRCUIT_FAULT_raw = (data >> 3) & ONBOARD_ACCEL_SHORT_CIRCUIT_FAULT_mask; - faults->ONBOARD_ACCEL_SHORT_CIRCUIT_FAULT = (bool)ONBOARD_ACCEL_SHORT_CIRCUIT_FAULT_raw; - uint64_t ONBOARD_PEDAL_DIFFERENCE_FAULT_mask = (1ULL << 1) - 1ULL; - uint64_t ONBOARD_PEDAL_DIFFERENCE_FAULT_raw = (data >> 2) & ONBOARD_PEDAL_DIFFERENCE_FAULT_mask; - faults->ONBOARD_PEDAL_DIFFERENCE_FAULT = (bool)ONBOARD_PEDAL_DIFFERENCE_FAULT_raw; - uint64_t RTDS_FAULT_mask = (1ULL << 1) - 1ULL; - uint64_t RTDS_FAULT_raw = (data >> 1) & RTDS_FAULT_mask; - faults->RTDS_FAULT = (bool)RTDS_FAULT_raw; - uint64_t LV_LOW_VOLTAGE_FAULT_mask = (1ULL << 1) - 1ULL; - uint64_t LV_LOW_VOLTAGE_FAULT_raw = (data >> 0) & LV_LOW_VOLTAGE_FAULT_mask; - faults->LV_LOW_VOLTAGE_FAULT = (bool)LV_LOW_VOLTAGE_FAULT_raw; -} - -void receive_lv_voltage(const can_msg_t *message, lv_voltage_t *lv_voltage) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t ADC_mask = (1ULL << 16) - 1ULL; - uint64_t ADC_raw = (data >> 48) & ADC_mask; - lv_voltage->ADC = (uint16_t)ADC_raw; - uint64_t Voltage_mask = (1ULL << 32) - 1ULL; - uint64_t Voltage_raw = (data >> 16) & Voltage_mask; - lv_voltage->Voltage = (float)(Voltage_raw / 1000); -} - -void receive_vcu_test_message(const can_msg_t *message, vcu_test_message_t *vcu_test_message) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t three_bits_mask = (1ULL << 3) - 1ULL; - uint64_t three_bits_raw = (data >> 61) & three_bits_mask; - vcu_test_message->three_bits = (uint8_t)three_bits_raw; - uint64_t float_value_mask = (1ULL << 32) - 1ULL; - uint64_t float_value_bits = (data >> 29) & float_value_mask; - int64_t float_value_raw = (float_value_bits & (1ULL << (32 - 1))) - ? (int64_t)(float_value_bits | ~float_value_mask) - : (int64_t)float_value_bits; - vcu_test_message->float_value = (float)(float_value_raw / 100); - uint64_t five_bits_mask = (1ULL << 5) - 1ULL; - uint64_t five_bits_raw = (data >> 24) & five_bits_mask; - vcu_test_message->five_bits = (uint8_t)five_bits_raw; - uint64_t sixteen_bits_mask = (1ULL << 16) - 1ULL; - uint64_t sixteen_bits_raw = (data >> 8) & sixteen_bits_mask; - vcu_test_message->sixteen_bits = (uint16_t)sixteen_bits_raw; - uint64_t signed_8_bits_mask = (1ULL << 8) - 1ULL; - uint64_t signed_8_bits_bits = (data >> 0) & signed_8_bits_mask; - int64_t signed_8_bits_raw = (signed_8_bits_bits & (1ULL << (8 - 1))) - ? (int64_t)(signed_8_bits_bits | ~signed_8_bits_mask) - : (int64_t)signed_8_bits_bits; - vcu_test_message->signed_8_bits = (int8_t)signed_8_bits_raw; -} - -void receive_dti_motor_temp_as_reported_by_vcu(const can_msg_t *message, dti_motor_temp_as_reported_by_vcu_t *dti_motor_temp_as_reported_by_vcu) { - - uint16_t data_bigendian; - memcpy(&data_bigendian, message->data, 2); - uint16_t data = __builtin_bswap16(data_bigendian); - uint64_t temp_mask = (1ULL << 16) - 1ULL; - uint64_t temp_raw = (data >> 0) & temp_mask; - dti_motor_temp_as_reported_by_vcu->temp = (uint16_t)temp_raw; -} - -void receive_dti_controller_temp_as_reported_by_vcu(const can_msg_t *message, dti_controller_temp_as_reported_by_vcu_t *dti_controller_temp_as_reported_by_vcu) { - - uint16_t data_bigendian; - memcpy(&data_bigendian, message->data, 2); - uint16_t data = __builtin_bswap16(data_bigendian); - uint64_t temp_mask = (1ULL << 16) - 1ULL; - uint64_t temp_raw = (data >> 0) & temp_mask; - dti_controller_temp_as_reported_by_vcu->temp = (uint16_t)temp_raw; -} - -void receive_bms_battbox_temp_as_reported_by_vcu(const can_msg_t *message, bms_battbox_temp_as_reported_by_vcu_t *bms_battbox_temp_as_reported_by_vcu) { - - uint32_t data_bigendian; - memcpy(&data_bigendian, message->data, 4); - uint32_t data = __builtin_bswap32(data_bigendian); - uint64_t temp_mask = (1ULL << 32) - 1ULL; - uint64_t temp_bits = (data >> 0) & temp_mask; - int64_t temp_raw = (temp_bits & (1ULL << (32 - 1))) - ? (int64_t)(temp_bits | ~temp_mask) - : (int64_t)temp_bits; - bms_battbox_temp_as_reported_by_vcu->temp = (float)(temp_raw / 100); -} - -void receive_brake_state_as_reported_by_vcu(const can_msg_t *message, brake_state_as_reported_by_vcu_t *brake_state_as_reported_by_vcu) { - - uint8_t data = message->data[0]; - uint64_t brake_state_mask = (1ULL << 8) - 1ULL; - uint64_t brake_state_bits = (data >> 0) & brake_state_mask; - int64_t brake_state_raw = (brake_state_bits & (1ULL << (8 - 1))) - ? (int64_t)(brake_state_bits | ~brake_state_mask) - : (int64_t)brake_state_bits; - brake_state_as_reported_by_vcu->brake_state = (bool)(brake_state_raw / 100); -} - -void receive_rtds_state_message(const can_msg_t *message, rtds_state_message_t *rtds_state_message) { - - uint32_t data_bigendian; - memcpy(&data_bigendian, message->data, 4); - uint32_t data = __builtin_bswap32(data_bigendian); - uint64_t pin_state_mask = (1ULL << 8) - 1ULL; - uint64_t pin_state_raw = (data >> 24) & pin_state_mask; - rtds_state_message->pin_state = (bool)pin_state_raw; - uint64_t sounding_state_mask = (1ULL << 8) - 1ULL; - uint64_t sounding_state_raw = (data >> 16) & sounding_state_mask; - rtds_state_message->sounding_state = (bool)sounding_state_raw; - uint64_t reverse_state_mask = (1ULL << 8) - 1ULL; - uint64_t reverse_state_raw = (data >> 8) & reverse_state_mask; - rtds_state_message->reverse_state = (bool)reverse_state_raw; - uint64_t error_mask = (1ULL << 8) - 1ULL; - uint64_t error_raw = (data >> 0) & error_mask; - rtds_state_message->error = (bool)error_raw; -} - -void receive_lfiu_low_current_adc_readings(const can_msg_t *message, lfiu_low_current_adc_readings_t *lfiu_low_current_adc_readings) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t raw_mask = (1ULL << 16) - 1ULL; - uint64_t raw_raw = (data >> 48) & raw_mask; - lfiu_low_current_adc_readings->raw = (uint16_t)raw_raw; - uint64_t voltage_mask = (1ULL << 16) - 1ULL; - uint64_t voltage_raw = (data >> 32) & voltage_mask; - lfiu_low_current_adc_readings->voltage = (float)(voltage_raw / 1000); - uint64_t current_mask = (1ULL << 16) - 1ULL; - uint64_t current_bits = (data >> 16) & current_mask; - int64_t current_raw = (current_bits & (1ULL << (16 - 1))) - ? (int64_t)(current_bits | ~current_mask) - : (int64_t)current_bits; - lfiu_low_current_adc_readings->current = (float)(current_raw / 1000); -} - -void receive_lfiu_high_current_adc_readings(const can_msg_t *message, lfiu_high_current_adc_readings_t *lfiu_high_current_adc_readings) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t raw_mask = (1ULL << 16) - 1ULL; - uint64_t raw_raw = (data >> 48) & raw_mask; - lfiu_high_current_adc_readings->raw = (uint16_t)raw_raw; - uint64_t voltage_mask = (1ULL << 16) - 1ULL; - uint64_t voltage_raw = (data >> 32) & voltage_mask; - lfiu_high_current_adc_readings->voltage = (float)(voltage_raw / 1000); - uint64_t current_mask = (1ULL << 16) - 1ULL; - uint64_t current_bits = (data >> 16) & current_mask; - int64_t current_raw = (current_bits & (1ULL << (16 - 1))) - ? (int64_t)(current_bits | ~current_mask) - : (int64_t)current_bits; - lfiu_high_current_adc_readings->current = (float)(current_raw / 100); -} - -void receive_second_vcu_test_message(const can_msg_t *message, second_vcu_test_message_t *second_vcu_test_message) { - - uint64_t data_bigendian; - memcpy(&data_bigendian, message->data, 8); - uint64_t data = __builtin_bswap64(data_bigendian); - uint64_t one_mask = (1ULL << 14) - 1ULL; - uint64_t one_raw = (data >> 50) & one_mask; - second_vcu_test_message->one = (uint16_t)one_raw; - uint64_t two_mask = (1ULL << 2) - 1ULL; - uint64_t two_raw = (data >> 48) & two_mask; - second_vcu_test_message->two = (uint8_t)two_raw; - uint64_t three_mask = (1ULL << 2) - 1ULL; - uint64_t three_raw = (data >> 46) & three_mask; - second_vcu_test_message->three = (uint8_t)three_raw; - uint64_t four_mask = (1ULL << 1) - 1ULL; - uint64_t four_raw = (data >> 45) & four_mask; - second_vcu_test_message->four = (bool)four_raw; - uint64_t five_mask = (1ULL << 6) - 1ULL; - uint64_t five_raw = (data >> 39) & five_mask; - second_vcu_test_message->five = (uint8_t)five_raw; - uint64_t six_mask = (1ULL << 23) - 1ULL; - uint64_t six_raw = (data >> 16) & six_mask; - second_vcu_test_message->six = (uint32_t)six_raw; -} - -void receive_lv_box_fan_pwm(const can_msg_t *message, lv_box_fan_pwm_t *lv_box_fan_pwm) { - - uint8_t data = message->data[0]; - uint64_t fan_pwm_percentage_mask = (1ULL << 8) - 1ULL; - uint64_t fan_pwm_percentage_raw = (data >> 0) & fan_pwm_percentage_mask; - lv_box_fan_pwm->fan_pwm_percentage = (uint8_t)fan_pwm_percentage_raw; -} - diff --git a/code-gen/Src/can_messages_tx.c b/code-gen/Src/can_messages_tx.c deleted file mode 100644 index b43ad1a..0000000 --- a/code-gen/Src/can_messages_tx.c +++ /dev/null @@ -1,697 +0,0 @@ - -/* - * This file was autogenerated by the CGEN module of the Odyssey framework. - * DO NOT EDIT without also reporting the edit to the Odyssey-Definitions repository to be incorproated into the generator. -*/ -#include "can_messages_tx.h" -#include - -#include "u_tx_debug.h" -#include "u_queues.h" -#include "c_utils.h" -#include "fdcan.h" -#include "bitstream.h" - - -static void handle_bitstream_overflow(bitstream_t *bitstream_res, - uint32_t can_id); - -uint8_t send_front_msb_accel -(float x_force,float y_force,float z_force) -{ - can_msg_t msg; - msg.id = 0xBAB; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - int32_t x_force_i = (int32_t)(x_force); - if(x_force_i > 32767) {x_force_i = 32767; - } else if(x_force_i < -32768) {x_force_i = -32768; - } - data |= ((uint32_t)(x_force_i) & 0xFFFFULL) << 48; - - int32_t y_force_i = (int32_t)(y_force); - if(y_force_i > 32767) {y_force_i = 32767; - } else if(y_force_i < -32768) {y_force_i = -32768; - } - data |= ((uint32_t)(y_force_i) & 0xFFFFULL) << 32; - - int32_t z_force_i = (int32_t)(z_force); - if(z_force_i > 32767) {z_force_i = 32767; - } else if(z_force_i < -32768) {z_force_i = -32768; - } - data |= ((uint32_t)(z_force_i) & 0xFFFFULL) << 16; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_front_msb_gyro -(float x_deg,float y_deg,float z_deg) -{ - can_msg_t msg; - msg.id = 0xBAC; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - int32_t x_deg_i = (int32_t)(x_deg); - if(x_deg_i > 32767) {x_deg_i = 32767; - } else if(x_deg_i < -32768) {x_deg_i = -32768; - } - data |= ((uint32_t)(x_deg_i) & 0xFFFFULL) << 48; - - int32_t y_deg_i = (int32_t)(y_deg); - if(y_deg_i > 32767) {y_deg_i = 32767; - } else if(y_deg_i < -32768) {y_deg_i = -32768; - } - data |= ((uint32_t)(y_deg_i) & 0xFFFFULL) << 32; - - int32_t z_deg_i = (int32_t)(z_deg); - if(z_deg_i > 32767) {z_deg_i = 32767; - } else if(z_deg_i < -32768) {z_deg_i = -32768; - } - data |= ((uint32_t)(z_deg_i) & 0xFFFFULL) << 16; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_front_msb_mag -(float x_mag,float y_mag,float z_mag) -{ - can_msg_t msg; - msg.id = 0xBB0; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - int32_t x_mag_i = (int32_t)(x_mag); - if(x_mag_i > 32767) {x_mag_i = 32767; - } else if(x_mag_i < -32768) {x_mag_i = -32768; - } - data |= ((uint32_t)(x_mag_i) & 0xFFFFULL) << 48; - - int32_t y_mag_i = (int32_t)(y_mag); - if(y_mag_i > 32767) {y_mag_i = 32767; - } else if(y_mag_i < -32768) {y_mag_i = -32768; - } - data |= ((uint32_t)(y_mag_i) & 0xFFFFULL) << 32; - - int32_t z_mag_i = (int32_t)(z_mag); - if(z_mag_i > 32767) {z_mag_i = 32767; - } else if(z_mag_i < -32768) {z_mag_i = -32768; - } - data |= ((uint32_t)(z_mag_i) & 0xFFFFULL) << 16; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_front_msb_orientation -(float x_fdeg,float y_fdeg,float z_fdeg) -{ - can_msg_t msg; - msg.id = 0xBAE; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - int32_t x_fdeg_i = (int32_t)(x_fdeg); - if(x_fdeg_i > 32767) {x_fdeg_i = 32767; - } else if(x_fdeg_i < -32768) {x_fdeg_i = -32768; - } - data |= ((uint32_t)(x_fdeg_i) & 0xFFFFULL) << 48; - - int32_t y_fdeg_i = (int32_t)(y_fdeg); - if(y_fdeg_i > 32767) {y_fdeg_i = 32767; - } else if(y_fdeg_i < -32768) {y_fdeg_i = -32768; - } - data |= ((uint32_t)(y_fdeg_i) & 0xFFFFULL) << 32; - - int32_t z_fdeg_i = (int32_t)(z_fdeg); - if(z_fdeg_i > 32767) {z_fdeg_i = 32767; - } else if(z_fdeg_i < -32768) {z_fdeg_i = -32768; - } - data |= ((uint32_t)(z_fdeg_i) & 0xFFFFULL) << 16; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_front_msb_pressure_sensor -(float pressure,float temperature) -{ - can_msg_t msg; - msg.id = 0xBB1; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - uint32_t pressure_i = (uint32_t)(pressure); - if(pressure_i > 4294967295ULL) {pressure_i = 4294967295; - } - data |= ((pressure_i) & 0xFFFFFFFFULL) << 32; - - uint32_t temperature_i = (uint32_t)(temperature); - if(temperature_i > 4294967295ULL) {temperature_i = 4294967295; - } - data |= ((temperature_i) & 0xFFFFFFFFULL) << 0; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_front_temperature_sensor -(float temperature,float humidity) -{ - can_msg_t msg; - msg.id = 0xBAF; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - uint32_t temperature_i = (uint32_t)(temperature); - if(temperature_i > 4294967295ULL) {temperature_i = 4294967295; - } - data |= ((temperature_i) & 0xFFFFFFFFULL) << 32; - - uint32_t humidity_i = (uint32_t)(humidity); - if(humidity_i > 4294967295ULL) {humidity_i = 4294967295; - } - data |= ((humidity_i) & 0xFFFFFFFFULL) << 0; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_front_msb_strain_one_and_two -(uint32_t strain1,uint32_t strain2) -{ - can_msg_t msg; - msg.id = 0xDAA; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - uint32_t strain1_i = (uint32_t)(strain1); - if(strain1_i > 4294967295ULL) {strain1_i = 4294967295; - } - data |= ((strain1_i) & 0xFFFFFFFFULL) << 32; - - uint32_t strain2_i = (uint32_t)(strain2); - if(strain2_i > 4294967295ULL) {strain2_i = 4294967295; - } - data |= ((strain2_i) & 0xFFFFFFFFULL) << 0; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_front_msb_strain_three_and_four -(uint32_t strain3,uint32_t strain4) -{ - can_msg_t msg; - msg.id = 0xDAB; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - uint32_t strain3_i = (uint32_t)(strain3); - if(strain3_i > 4294967295ULL) {strain3_i = 4294967295; - } - data |= ((strain3_i) & 0xFFFFFFFFULL) << 32; - - uint32_t strain4_i = (uint32_t)(strain4); - if(strain4_i > 4294967295ULL) {strain4_i = 4294967295; - } - data |= ((strain4_i) & 0xFFFFFFFFULL) << 0; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_front_shockpot -(uint32_t shock1,uint32_t shock2) -{ - can_msg_t msg; - msg.id = 0xDAE; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - uint32_t shock1_i = (uint32_t)(shock1); - if(shock1_i > 4294967295ULL) {shock1_i = 4294967295; - } - data |= ((shock1_i) & 0xFFFFFFFFULL) << 32; - - uint32_t shock2_i = (uint32_t)(shock2); - if(shock2_i > 4294967295ULL) {shock2_i = 4294967295; - } - data |= ((shock2_i) & 0xFFFFFFFFULL) << 0; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_front_msb_load_cells -(uint32_t cell1,uint32_t cell2) -{ - can_msg_t msg; - msg.id = 0xDAF; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - uint32_t cell1_i = (uint32_t)(cell1); - if(cell1_i > 4294967295ULL) {cell1_i = 4294967295; - } - data |= ((cell1_i) & 0xFFFFFFFFULL) << 32; - - uint32_t cell2_i = (uint32_t)(cell2); - if(cell2_i > 4294967295ULL) {cell2_i = 4294967295; - } - data |= ((cell2_i) & 0xFFFFFFFFULL) << 0; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_front_wheel_rpm -(uint16_t Front Right,uint16_t Front Left) -{ - can_msg_t msg; - msg.id = 0xDB0; - msg.id_is_extended = true; - uint32_t data = 0; - msg.len = 4; - uint32_t Front Right_i = (uint32_t)(Front Right); - if(Front Right_i > 65535ULL) {Front Right_i = 65535; - } - data |= ((Front Right_i) & 0xFFFFULL) << 16; - - uint32_t Front Left_i = (uint32_t)(Front Left); - if(Front Left_i > 65535ULL) {Front Left_i = 65535; - } - data |= ((Front Left_i) & 0xFFFFULL) << 0; - - uint32_t data_bigendian = __builtin_bswap32(data); - memcpy(msg.data, &data_bigendian, 4); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_front_msb_wheel_angle -(uint32_t angle1) -{ - can_msg_t msg; - msg.id = 0xDAD; - msg.id_is_extended = true; - uint32_t data = 0; - msg.len = 4; - uint32_t angle1_i = (uint32_t)(angle1); - if(angle1_i > 4294967295ULL) {angle1_i = 4294967295; - } - data |= ((angle1_i) & 0xFFFFFFFFULL) << 0; - - uint32_t data_bigendian = __builtin_bswap32(data); - memcpy(msg.data, &data_bigendian, 4); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_back_msb_accel -(float x_force,float y_force,float z_force) -{ - can_msg_t msg; - msg.id = 0xBBF; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - int32_t x_force_i = (int32_t)(x_force); - if(x_force_i > 32767) {x_force_i = 32767; - } else if(x_force_i < -32768) {x_force_i = -32768; - } - data |= ((uint32_t)(x_force_i) & 0xFFFFULL) << 48; - - int32_t y_force_i = (int32_t)(y_force); - if(y_force_i > 32767) {y_force_i = 32767; - } else if(y_force_i < -32768) {y_force_i = -32768; - } - data |= ((uint32_t)(y_force_i) & 0xFFFFULL) << 32; - - int32_t z_force_i = (int32_t)(z_force); - if(z_force_i > 32767) {z_force_i = 32767; - } else if(z_force_i < -32768) {z_force_i = -32768; - } - data |= ((uint32_t)(z_force_i) & 0xFFFFULL) << 16; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_back_msb_gyro -(float x_deg,float y_deg,float z_deg) -{ - can_msg_t msg; - msg.id = 0xBC0; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - int32_t x_deg_i = (int32_t)(x_deg); - if(x_deg_i > 32767) {x_deg_i = 32767; - } else if(x_deg_i < -32768) {x_deg_i = -32768; - } - data |= ((uint32_t)(x_deg_i) & 0xFFFFULL) << 48; - - int32_t y_deg_i = (int32_t)(y_deg); - if(y_deg_i > 32767) {y_deg_i = 32767; - } else if(y_deg_i < -32768) {y_deg_i = -32768; - } - data |= ((uint32_t)(y_deg_i) & 0xFFFFULL) << 32; - - int32_t z_deg_i = (int32_t)(z_deg); - if(z_deg_i > 32767) {z_deg_i = 32767; - } else if(z_deg_i < -32768) {z_deg_i = -32768; - } - data |= ((uint32_t)(z_deg_i) & 0xFFFFULL) << 16; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_back_msb_mag -(float x_mag,float y_mag,float z_mag) -{ - can_msg_t msg; - msg.id = 0xBC4; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - int32_t x_mag_i = (int32_t)(x_mag); - if(x_mag_i > 32767) {x_mag_i = 32767; - } else if(x_mag_i < -32768) {x_mag_i = -32768; - } - data |= ((uint32_t)(x_mag_i) & 0xFFFFULL) << 48; - - int32_t y_mag_i = (int32_t)(y_mag); - if(y_mag_i > 32767) {y_mag_i = 32767; - } else if(y_mag_i < -32768) {y_mag_i = -32768; - } - data |= ((uint32_t)(y_mag_i) & 0xFFFFULL) << 32; - - int32_t z_mag_i = (int32_t)(z_mag); - if(z_mag_i > 32767) {z_mag_i = 32767; - } else if(z_mag_i < -32768) {z_mag_i = -32768; - } - data |= ((uint32_t)(z_mag_i) & 0xFFFFULL) << 16; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_back_msb_orientation -(float x_fdeg,float y_fdeg,float z_fdeg) -{ - can_msg_t msg; - msg.id = 0xBC2; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - int32_t x_fdeg_i = (int32_t)(x_fdeg); - if(x_fdeg_i > 32767) {x_fdeg_i = 32767; - } else if(x_fdeg_i < -32768) {x_fdeg_i = -32768; - } - data |= ((uint32_t)(x_fdeg_i) & 0xFFFFULL) << 48; - - int32_t y_fdeg_i = (int32_t)(y_fdeg); - if(y_fdeg_i > 32767) {y_fdeg_i = 32767; - } else if(y_fdeg_i < -32768) {y_fdeg_i = -32768; - } - data |= ((uint32_t)(y_fdeg_i) & 0xFFFFULL) << 32; - - int32_t z_fdeg_i = (int32_t)(z_fdeg); - if(z_fdeg_i > 32767) {z_fdeg_i = 32767; - } else if(z_fdeg_i < -32768) {z_fdeg_i = -32768; - } - data |= ((uint32_t)(z_fdeg_i) & 0xFFFFULL) << 16; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_back_msb_pressure_sensor -(float pressure,float temperature) -{ - can_msg_t msg; - msg.id = 0xBC5; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - uint32_t pressure_i = (uint32_t)(pressure); - if(pressure_i > 4294967295ULL) {pressure_i = 4294967295; - } - data |= ((pressure_i) & 0xFFFFFFFFULL) << 32; - - uint32_t temperature_i = (uint32_t)(temperature); - if(temperature_i > 4294967295ULL) {temperature_i = 4294967295; - } - data |= ((temperature_i) & 0xFFFFFFFFULL) << 0; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_back_temperature_sensor -(float temperature,float humidity) -{ - can_msg_t msg; - msg.id = 0xBC3; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - uint32_t temperature_i = (uint32_t)(temperature); - if(temperature_i > 4294967295ULL) {temperature_i = 4294967295; - } - data |= ((temperature_i) & 0xFFFFFFFFULL) << 32; - - uint32_t humidity_i = (uint32_t)(humidity); - if(humidity_i > 4294967295ULL) {humidity_i = 4294967295; - } - data |= ((humidity_i) & 0xFFFFFFFFULL) << 0; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_back_msb_strain_one_and_two -(uint32_t strain1,uint32_t strain2) -{ - can_msg_t msg; - msg.id = 0xDBE; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - uint32_t strain1_i = (uint32_t)(strain1); - if(strain1_i > 4294967295ULL) {strain1_i = 4294967295; - } - data |= ((strain1_i) & 0xFFFFFFFFULL) << 32; - - uint32_t strain2_i = (uint32_t)(strain2); - if(strain2_i > 4294967295ULL) {strain2_i = 4294967295; - } - data |= ((strain2_i) & 0xFFFFFFFFULL) << 0; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_back_msb_strain_three_and_four -(uint32_t strain3,uint32_t strain4) -{ - can_msg_t msg; - msg.id = 0xDBF; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - uint32_t strain3_i = (uint32_t)(strain3); - if(strain3_i > 4294967295ULL) {strain3_i = 4294967295; - } - data |= ((strain3_i) & 0xFFFFFFFFULL) << 32; - - uint32_t strain4_i = (uint32_t)(strain4); - if(strain4_i > 4294967295ULL) {strain4_i = 4294967295; - } - data |= ((strain4_i) & 0xFFFFFFFFULL) << 0; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_back_shockpot -(uint32_t shock1,uint32_t shock2) -{ - can_msg_t msg; - msg.id = 0xDC2; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - uint32_t shock1_i = (uint32_t)(shock1); - if(shock1_i > 4294967295ULL) {shock1_i = 4294967295; - } - data |= ((shock1_i) & 0xFFFFFFFFULL) << 32; - - uint32_t shock2_i = (uint32_t)(shock2); - if(shock2_i > 4294967295ULL) {shock2_i = 4294967295; - } - data |= ((shock2_i) & 0xFFFFFFFFULL) << 0; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_back_msb_load_cells -(uint32_t cell1,uint32_t cell2) -{ - can_msg_t msg; - msg.id = 0xDC3; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - uint32_t cell1_i = (uint32_t)(cell1); - if(cell1_i > 4294967295ULL) {cell1_i = 4294967295; - } - data |= ((cell1_i) & 0xFFFFFFFFULL) << 32; - - uint32_t cell2_i = (uint32_t)(cell2); - if(cell2_i > 4294967295ULL) {cell2_i = 4294967295; - } - data |= ((cell2_i) & 0xFFFFFFFFULL) << 0; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_rear_wheel_rpm -(uint16_t Rear Right,uint16_t Rear Left) -{ - can_msg_t msg; - msg.id = 0xDB1; - msg.id_is_extended = true; - uint32_t data = 0; - msg.len = 4; - uint32_t Rear Right_i = (uint32_t)(Rear Right); - if(Rear Right_i > 65535ULL) {Rear Right_i = 65535; - } - data |= ((Rear Right_i) & 0xFFFFULL) << 16; - - uint32_t Rear Left_i = (uint32_t)(Rear Left); - if(Rear Left_i > 65535ULL) {Rear Left_i = 65535; - } - data |= ((Rear Left_i) & 0xFFFFULL) << 0; - - uint32_t data_bigendian = __builtin_bswap32(data); - memcpy(msg.data, &data_bigendian, 4); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_back_msb_thermocouple -(uint32_t thermo1) -{ - can_msg_t msg; - msg.id = 0xDAC; - msg.id_is_extended = true; - uint32_t data = 0; - msg.len = 4; - uint32_t thermo1_i = (uint32_t)(thermo1); - if(thermo1_i > 4294967295ULL) {thermo1_i = 4294967295; - } - data |= ((thermo1_i) & 0xFFFFFFFFULL) << 0; - - uint32_t data_bigendian = __builtin_bswap32(data); - memcpy(msg.data, &data_bigendian, 4); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - -uint8_t send_back_msb_tof -(uint16_t quadrant1,uint16_t quadrant2,uint16_t quadrant3,uint16_t quadrant4) -{ - can_msg_t msg; - msg.id = 0xBA0; - msg.id_is_extended = true; - uint64_t data = 0; - msg.len = 8; - uint32_t quadrant1_i = (uint32_t)(quadrant1); - if(quadrant1_i > 65535ULL) {quadrant1_i = 65535; - } - data |= ((quadrant1_i) & 0xFFFFULL) << 48; - - uint32_t quadrant2_i = (uint32_t)(quadrant2); - if(quadrant2_i > 65535ULL) {quadrant2_i = 65535; - } - data |= ((quadrant2_i) & 0xFFFFULL) << 32; - - uint32_t quadrant3_i = (uint32_t)(quadrant3); - if(quadrant3_i > 65535ULL) {quadrant3_i = 65535; - } - data |= ((quadrant3_i) & 0xFFFFULL) << 16; - - uint32_t quadrant4_i = (uint32_t)(quadrant4); - if(quadrant4_i > 65535ULL) {quadrant4_i = 65535; - } - data |= ((quadrant4_i) & 0xFFFFULL) << 0; - - uint64_t data_bigendian = __builtin_bswap64(data); - memcpy(msg.data, &data_bigendian, 8); - - return queue_send(&can_outgoing, &msg, TX_NO_WAIT); -} - - - -/// @brief A helper which sends appropriate error to stdout and CAN if a bistream overflows -/// @param bitstream_res The bitstream to check for overflow -/// @param can_id The CAN ID this bistream data is intended for -/// @return 0 if success -static void handle_bitstream_overflow(bitstream_t *bitstream_res, - uint32_t can_id) -{ - if (!bitstream_res->overflow) { - return; - } - - -} \ No newline at end of file From 616c7a006414e69ca8f07742c6c9e70f94aa6886 Mon Sep 17 00:00:00 2001 From: Daniel Nakhooda Date: Thu, 9 Apr 2026 20:45:20 -0400 Subject: [PATCH 12/12] fix conflict --- can-messages/msb.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/can-messages/msb.json b/can-messages/msb.json index 5124be4..a23780c 100644 --- a/can-messages/msb.json +++ b/can-messages/msb.json @@ -892,7 +892,7 @@ "sim_freq": 500 }, { - "id": "0xBAF", + "id": "0xBA0", "desc": "Back MSB TOF", "points": [ {