diff --git a/.github/workflows/Autogen.yml b/.github/workflows/Autogen.yml new file mode 100644 index 000000000..248eaedd9 --- /dev/null +++ b/.github/workflows/Autogen.yml @@ -0,0 +1,61 @@ +name: Autogen +run-name: Autogen - ${{ github.ref_name }} + +on: + pull_request: + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + canfigurator: + name: CANfigurator + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Checkout Pull Request + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + fetch-depth: 1 + ref: ${{ github.event.pull_request.head.ref }} + token: ${{ secrets.AUTOFORMAT_COMMIT_TOKEN }} + + - name: Setup Perl + uses: shogo82148/actions-setup-perl@b6cfc127f1b0a63ac98797800f641494d80f42f8 # v1.37.1 + with: + install-modules: 'YAML::XS' + + - name: Run CAN Parser + run: | + set -o pipefail + echo "
CAN Parser Output" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + make -C Autogen/CAN all 2>&1 | tee -a $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "
" >> $GITHUB_STEP_SUMMARY + + - name: Auto Format Header Files + run: | + set -o pipefail + echo "
Clang-Format Output" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + clang-format -i --verbose Autogen/CAN/Inc/*.h 2>&1 | tee -a $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "
" >> $GITHUB_STEP_SUMMARY + + - name: Save Changes + uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9.1.4 + if: github.ref_type != 'tag' + env: + HOME: ${{ github.workspace }} + with: + default_author: github_actions + message: 'Automatic CANfigurator: Updated CAN files automatically' + fetch: 'false' + add: 'Autogen/CAN/Inc/*.h --force' diff --git a/Autogen/CAN/.gitignore b/Autogen/CAN/.gitignore new file mode 100644 index 000000000..446fc01fc --- /dev/null +++ b/Autogen/CAN/.gitignore @@ -0,0 +1,6 @@ +inc/ +!inc/output.dbc + +# CANfigurator +Inc/*.h +Doc/*.dbc diff --git a/Autogen/CAN/CANfigurator.cmake b/Autogen/CAN/CANfigurator.cmake new file mode 100644 index 000000000..a538eafca --- /dev/null +++ b/Autogen/CAN/CANfigurator.cmake @@ -0,0 +1,2 @@ +add_library(CANfigurator INTERFACE) +target_include_directories(CANfigurator INTERFACE ${CMAKE_CURRENT_LIST_DIR}/Inc) diff --git a/Autogen/CAN/Doc/format.CANdo b/Autogen/CAN/Doc/format.CANdo new file mode 100644 index 000000000..d9af89e89 --- /dev/null +++ b/Autogen/CAN/Doc/format.CANdo @@ -0,0 +1,5004 @@ +routing: + messages: + ACU: + CAN1: + Debugger: + - msg: Debug 2.0 + - msg: Ping + ECU: + - msg: Ping + - msg: ACU Status 1 + - msg: ACU Status 2 + - msg: ACU Status 3 + - msg: DC-DC Status + CAN2: + Debugger: + - msg: Debug FD + - msg: Ping + ECU: + - msg: Ping + - msg: ACU Cell Data 1 + - msg: ACU Cell Data 2 + - msg: ACU Cell Data 3 + - msg: ACU Cell Data 4 + - msg: ACU Cell Data 5 + CAN3: + Charger: + - msg: Charger Control + can_id_override: 0x1806E5F4 + Charger: + CAN3: + ACU: + - msg: Charger Data + can_id_override: 0x18FF50E5 + Dash Panel: + CAN1: + Debugger: + - msg: Debug 2.0 + - msg: Ping + ECU: + - msg: Ping + - msg: Dash Status + Debugger: + CAN1: + ECU: + - msg: Debug 2.0 + - msg: Ping + - msg: ECU config + ACU: + - msg: Debug 2.0 + - msg: Ping + TCM: + - msg: Debug 2.0 + - msg: Ping + Dash Panel: + - msg: Debug 2.0 + - msg: Ping + GR Inverter 1: + - msg: Debug 2.0 + - msg: Ping + GR Inverter 2: + - msg: Debug 2.0 + - msg: Ping + GR Inverter 3: + - msg: Debug 2.0 + - msg: Ping + GR Inverter 4: + - msg: Debug 2.0 + - msg: Ping + Fan Controller 1: + - msg: Debug 2.0 + - msg: Ping + Fan Controller 2: + - msg: Debug 2.0 + - msg: Ping + Fan Controller 3: + - msg: Debug 2.0 + - msg: Ping + Fan Controller 4: + - msg: Debug 2.0 + - msg: Ping + Fan Controller 5: + - msg: Debug 2.0 + - msg: Ping + Fan Controller 6: + - msg: Debug 2.0 + - msg: Ping + Fan Controller 7: + - msg: Debug 2.0 + - msg: Ping + Fan Controller 8: + - msg: Debug 2.0 + - msg: Ping + LV DC-DC: + - msg: Debug 2.0 + - msg: Ping + - msg: Ping + CAN2: + ECU: + - msg: Debug FD + - msg: Ping + ACU: + - msg: Debug FD + - msg: Ping + TCM: + - msg: Debug FD + - msg: Ping + Steering Wheel: + - msg: Debug FD + - msg: Ping + SAM1: + - msg: Debug FD + - msg: Ping + SAM2: + - msg: Debug FD + - msg: Ping + SAM3: + - msg: Debug FD + - msg: Ping + SAM4: + - msg: Debug FD + - msg: Ping + SAM5: + - msg: Debug FD + - msg: Ping + SAM6: + - msg: Debug FD + - msg: Ping + SAM7: + - msg: Debug FD + - msg: Ping + SAM8: + - msg: Debug FD + - msg: Ping + SAM9: + - msg: Debug FD + - msg: Ping + SAM10: + - msg: Debug FD + - msg: Ping + SAM11: + - msg: Debug FD + - msg: Ping + SAM12: + - msg: Debug FD + - msg: Ping + SAM13: + - msg: Debug FD + - msg: Ping + SAM14: + - msg: Debug FD + - msg: Ping + SAM15: + - msg: Debug FD + - msg: Ping + SAM16: + - msg: Debug FD + - msg: Ping + SAM17: + - msg: Debug FD + - msg: Ping + SAM18: + - msg: Debug FD + - msg: Ping + SAM19: + - msg: Debug FD + - msg: Ping + SAM20: + - msg: Debug FD + - msg: Ping + CAN3: + Charging SDC: + - msg: Ping + DTI Inverter: + CAN1: + ECU: + - msg: DTI Data 1 + can_id_override: 0x2016 + - msg: DTI Data 2 + can_id_override: 0x2116 + - msg: DTI Data 3 + can_id_override: 0x2216 + - msg: DTI Data 4 + can_id_override: 0x2316 + - msg: DTI Data 5 + can_id_override: 0x2416 + ECU: + CAN1: + DTI Inverter: + - msg: DTI Control 1 + can_id_override: 0x116 + - msg: DTI Control 2 + can_id_override: 0x216 + - msg: DTI Control 3 + can_id_override: 0x316 + - msg: DTI Control 4 + can_id_override: 0x416 + - msg: DTI Control 5 + can_id_override: 0x516 + - msg: DTI Control 6 + can_id_override: 0x616 + - msg: DTI Control 7 + can_id_override: 0x716 + - msg: DTI Control 8 + can_id_override: 0x816 + - msg: DTI Control 9 + can_id_override: 0x916 + - msg: DTI Control 10 + can_id_override: 0xA16 + - msg: DTI Control 11 + can_id_override: 0xB16 + - msg: DTI Control 12 + can_id_override: 0xC16 + Debugger: + - msg: Debug 2.0 + - msg: Ping + ECU: + - msg: Ping + - msg: ECU Status 1 + - msg: ECU Status 2 + - msg: ECU Status 3 + ACU: + - msg: ACU Precharge + - msg: ACU Config Charge Parameters + - msg: ACU Config Operational Parameters + GR Inverter 1: + - msg: Inverter Config + - msg: Inverter Command + GR Inverter 2: + - msg: Inverter Config + - msg: Inverter Command + GR Inverter 3: + - msg: Inverter Config + - msg: Inverter Command + GR Inverter 4: + - msg: Inverter Config + - msg: Inverter Command + Fan Controller 1: + - msg: Fan Command + Fan Controller 2: + - msg: Fan Command + Fan Controller 3: + - msg: Fan Command + Fan Controller 4: + - msg: Fan Command + Fan Controller 5: + - msg: Fan Command + Fan Controller 6: + - msg: Fan Command + Fan Controller 7: + - msg: Fan Command + Fan Controller 8: + - msg: Fan Command + Dash Panel: + - msg: Dash Config + - msg: Dash Warning Flags + - msg: Specific Brake IR + CAN2: + Debugger: + - msg: Debug FD + - msg: Ping + ECU: + - msg: Ping + Steering Wheel: + - msg: Steering Config + - msg: ECU Ping Information + TCM: + - msg: ECU Pedals Data + can_id_override: 0x2020000 + Energy Meter: + CAN3: + ACU: + - msg: EM Measurement + can_id_override: 0x10d + - msg: EM Team Data 1 + can_id_override: 0x30d + - msg: EM Team Data 2 + can_id_override: 0x30e + - msg: EM Status + can_id_override: 0x40d + - msg: EM Temperature + can_id_override: 0x60d + + Fan Controller 1: + CAN1: + Debugger: + - msg: Debug 2.0 + - msg: Ping + ECU: + - msg: Ping + - msg: Fan Status + Fan Controller 2: + CAN1: + Debugger: + - msg: Debug 2.0 + - msg: Ping + ECU: + - msg: Ping + - msg: Fan Status + Fan Controller 3: + CAN1: + Debugger: + - msg: Debug 2.0 + - msg: Ping + ECU: + - msg: Ping + - msg: Fan Status + Fan Controller 4: + CAN1: + Debugger: + - msg: Debug 2.0 + - msg: Ping + ECU: + - msg: Ping + - msg: Fan Status + Fan Controller 5: + CAN1: + Debugger: + - msg: Debug 2.0 + - msg: Ping + ECU: + - msg: Ping + - msg: Fan Status + Fan Controller 6: + CAN1: + Debugger: + - msg: Debug 2.0 + - msg: Ping + ECU: + - msg: Ping + - msg: Fan Status + Fan Controller 7: + CAN1: + Debugger: + - msg: Debug 2.0 + - msg: Ping + ECU: + - msg: Ping + - msg: Fan Status + Fan Controller 8: + CAN1: + Debugger: + - msg: Debug 2.0 + - msg: Ping + ECU: + - msg: Ping + - msg: Fan Status + GR Inverter 1: + CAN1: + Debugger: + - msg: Debug 2.0 + - msg: Ping + ECU: + - msg: Ping + - msg: Inverter Status 1 + - msg: Inverter Status 2 + - msg: Inverter Status 3 + GR Inverter 2: + CAN1: + Debugger: + - msg: Debug 2.0 + - msg: Ping + ECU: + - msg: Ping + - msg: Inverter Status 1 + - msg: Inverter Status 2 + - msg: Inverter Status 3 + GR Inverter 3: + CAN1: + Debugger: + - msg: Debug 2.0 + - msg: Ping + ECU: + - msg: Ping + - msg: Inverter Status 1 + - msg: Inverter Status 2 + - msg: Inverter Status 3 + GR Inverter 4: + CAN1: + Debugger: + - msg: Debug 2.0 + - msg: Ping + ECU: + - msg: Ping + - msg: Inverter Status 1 + - msg: Inverter Status 2 + - msg: Inverter Status 3 + IMD: + CAN3: + ACU: + - msg: IMD response + can_id_override: 0x23 + - msg: IMD isolation info + can_id_override: 0x18EFF4FE + - msg: IMD voltage + can_id_override: 0x18EFF4FE + - msg: IMD IT-system + can_id_override: 0x18EFF4FE + - msg: IMD request + can_id_override: 0x18EFF4FE + - msg: IMD request + can_id_override: 0x18EFF4FE + - msg: IMD general + can_id_override: 0x18FF01F4 + LV DC-DC: + CAN1: + Debugger: + - msg: Ping + ECU: + - msg: Ping + - msg: DC-DC Status + SAM1: + CAN2: + Debugger: + - msg: Ping + ECU: + - msg: SAM Brake IR + SAM2: + CAN2: + Debugger: + - msg: Ping + ECU: + - msg: SAM Brake IR + SAM3: + CAN2: + Debugger: + - msg: Ping + ECU: + - msg: SAM Brake IR + SAM4: + CAN2: + Debugger: + - msg: Ping + ECU: + - msg: SAM Brake IR + SAM5: + CAN2: + Debugger: + - msg: Ping + ECU: + - msg: SAM IMU + - msg: SAM TOF + SAM6: + CAN2: + Debugger: + - msg: Ping + SAM7: + CAN2: + Debugger: + - msg: Ping + SAM8: + CAN2: + Debugger: + - msg: Ping + SAM9: + CAN2: + Debugger: + - msg: Ping + SAM10: + CAN2: + Debugger: + - msg: Ping + SAM11: + CAN2: + Debugger: + - msg: Ping + SAM12: + CAN2: + Debugger: + - msg: Ping + SAM13: + CAN2: + Debugger: + - msg: Ping + SAM14: + CAN2: + Debugger: + - msg: Ping + SAM15: + CAN2: + Debugger: + - msg: Ping + SAM16: + CAN2: + Debugger: + - msg: Ping + SAM17: + CAN2: + Debugger: + - msg: Ping + SAM18: + CAN2: + Debugger: + - msg: Ping + SAM19: + CAN2: + Debugger: + - msg: Ping + SAM20: + CAN2: + Debugger: + - msg: Ping + Steering Wheel: + CAN2: + Debugger: + - msg: Debug FD + - msg: Ping + ECU: + - msg: Ping + - msg: Steering Status + TCM: + CAN1: + Debugger: + - msg: Ping + CAN2: + Debugger: + - msg: Ping + Steering Wheel: + - msg: TCM Status + - msg: TCM Resource Utilization + DGPS: + CAN2: + ECU: + - msg: UVW DGPS + - msg: GPS LAT + - msg: GPS LON + - msg: GPS ALT + - msg: GPS PX + - msg: GPS QY + - msg: GPS RZ + +byte order: little_endian + +Message ID: + Debug 2.0: + MSG ID: 0x000 + MSG LENGTH: 8 + Debug: + bit_start: 0 + # Essentially a print statement up to 8 bytes long that whichever targeted can parse + data type: s + Debug FD: + MSG ID: 0x001 + MSG LENGTH: 64 + Debug: + bit_start: 0 + # Essentially a print statement up to 64 bytes long that whichever targeted can parse + data type: s + Ping: + MSG ID: 0x002 + MSG LENGTH: 4 + Timestamp: + bit_start: 0 + # Time in millis + data type: u32 + units: ms + scaled min: 0 + scaled max: 4,294,967,296 + map equation: "1x" + ECU Status 1: + MSG ID: 0x003 + MSG LENGTH: 8 + ECU State: + bit_start: 0 + # See diagram + data type: u8 + units: Enum + ACU Node Status: + bit_start: 8 + # 1: OK, 0: Timeout + data type: b + units: Bool + GR Inv 1 Status: + bit_start: 9 + # 1: OK, 0: Timeout + data type: b + units: Bool + GR Inv 2 Status: + bit_start: 10 + # 1: OK, 0: Timeout + data type: b + units: Bool + GR Inv 3 Status: + bit_start: 11 + # 1: OK, 0: Timeout + data type: b + units: Bool + GR Inv 4 Status: + bit_start: 12 + # 1: OK, 0: Timeout + data type: b + units: Bool + Fan Controller 1: + bit_start: 13 + # 1: OK, 0: Timeout + data type: b + units: Bool + Fan Controller 2: + bit_start: 14 + # 1: OK, 0: Timeout + data type: b + units: Bool + Fan Controller 3: + bit_start: 15 + # 1: OK, 0: Timeout + data type: b + units: Bool + Fan Controller 4: + bit_start: 16 + # 1: OK, 0: Timeout + data type: b + units: Bool + Fan Controller 5: + bit_start: 17 + # 1: OK, 0: Timeout + data type: b + units: Bool + Fan Controller 6: + bit_start: 18 + # 1: OK, 0: Timeout + data type: b + units: Bool + Fan Controller 7: + bit_start: 19 + # 1: OK, 0: Timeout + data type: b + units: Bool + Fan Controller 8: + bit_start: 20 + # 1: OK, 0: Timeout + data type: b + units: Bool + Dash: + bit_start: 21 + # 1: OK, 0: Timeout + data type: b + units: Bool + Steering: + bit_start: 22 + # 1: OK, 0: Timeout + data type: b + units: Bool + Reserved: + bit_start: 23-31 + Power Level: + bit_start: 32 + # Controls the AC current limits to each of the inverters + # Discrete Mapping, actual values TBD (16 possible values) + data type: u4 + Torque Map: + bit_start: 36 + # The torque map selected; torque map is the mapping of the throttle to the torque sent to each motor + data type: u4 + Max Cell Temp: + bit_start: 40 + # the temperature of the hottest cell of the accumulator + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Accumulator State of Charge: + bit_start: 48 + # % charged of the Accumulator + data type: u8 + units: '%' + scaled min: 0 + scaled max: 100 + map equation: "20x/51" + GLV State of Charge: + bit_start: 56 + # % charged of the Low Voltage Bat + data type: u8 + units: '%' + scaled min: 0 + scaled max: 100 + map equation: "20x/51" + ECU Status 2: + MSG ID: 0x004 + MSG LENGTH: 8 + Tractive System Voltage: + bit_start: 0 + # Output terminal voltage of accumulator + data type: u16 + units: Volts + scaled min: 0 + scaled max: 655.35 + map equation: "0.01x" + Vehicle Speed: + bit_start: 16 + # Absolute value of speed + data type: u16 + units: MPH + scaled min: 0 + scaled max: 655.35 + map equation: "0.01x" + FR Wheel RPM: + bit_start: 32 + # Wheel RPM + data type: u16 + units: RPM + scaled min: -3276.8 + scaled max: 3276.7 + map equation: "0.1x-3276.8" + FL Wheel RPM: + bit_start: 48 + # Wheel RPM + data type: u16 + units: RPM + scaled min: -3276.8 + scaled max: 3276.7 + map equation: "0.1x-3276.8" + ECU Status 3: + MSG ID: 0x005 + MSG LENGTH: 4 + RR Wheel RPM: + bit_start: 0 + # Wheel RPM + data type: u16 + units: RPM + scaled min: -3276.8 + scaled max: 3276.7 + map equation: "0.1x-3276.8" + RL Wheel RPM: + bit_start: 16 + # Wheel RPM + data type: u16 + units: RPM + scaled min: -3276.8 + scaled max: 3276.7 + map equation: "0.1x-3276.8" + ECU config: + MSG ID: 0x006 + MSG LENGTH: 0 + Reserved: + bit_start: 0 + ACU Status 1: + MSG ID: 0x007 + MSG LENGTH: 8 + Accumulator Voltage: + bit_start: 0 + # All cell voltages added up + data type: u16 + units: Volts + scaled min: 0 + scaled max: 655.35 + map equation: "0.01x" + TS Voltage: + bit_start: 16 + # Output terminal voltage of accumulator + data type: u16 + units: Volts + scaled min: 0 + scaled max: 655.35 + map equation: "0.01x" + Accumulator Current: + bit_start: 32 + # Current output of accumulator + data type: i16 + units: Amps + scaled min: -327.68 + scaled max: 327.67 + map equation: "0.01x" + Accumulator SOC: + bit_start: 48 + # Accumulator state of charge (Based on lowest cell) + data type: u8 + units: '%' + scaled min: 0 + scaled max: 100 + map equation: "20x/51" + GLV SOC: + bit_start: 56 + # GLV state of charge + data type: u8 + units: '%' + scaled min: 0 + scaled max: 100 + map equation: "20x/51" + ACU Status 2: + MSG ID: 0x008 + MSG LENGTH: 7 + 20v Voltage: + bit_start: 0 + # 20v GLV voltage + data type: u8 + units: Volts + scaled min: 0 + scaled max: 25.5 + map equation: "0.1x" + 12v Voltage: + bit_start: 8 + # 12v supply voltage + data type: u8 + units: Volts + scaled min: 0 + scaled max: 25.5 + map equation: "0.1x" + SDC Voltage: + bit_start: 16 + # Voltage before ACU Latch + data type: u8 + units: Volts + scaled min: 0 + scaled max: 25.5 + map equation: "0.1x" + Min Cell Voltage: + bit_start: 24 + # Lowest cell voltage in accumulator + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Max Cell Temp: + bit_start: 32 + # Hottest cell in accumulator + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Over Temp Error: + bit_start: 40 + # Over temp (>60c) + data type: b + units: Bool + Over Voltage Error: + bit_start: 41 + # Over voltage (>4.2v per cell) + data type: b + units: Bool + Under Voltage Error: + bit_start: 42 + # Under voltage (<2.5v per cell) + data type: b + units: Bool + Over Current Error: + bit_start: 43 + # Over current (discharge) + data type: b + units: Bool + Under Current Error: + bit_start: 44 + # Over current (charging) + data type: b + units: Bool + Under Voltage 20v Warning: + bit_start: 45 + # 20v GLV too low (<15?) + data type: b + units: Bool + Under Voltage 12v Warning: + bit_start: 46 + # 12v supply too low (<10?) + data type: b + units: Bool + Under Voltage SDC Warning: + bit_start: 47 + # SDC too low (<9?) + data type: b + units: Bool + Precharge Error: + bit_start: 48 + # Precharge timed out + data type: b + units: Bool + IR- / Precharge State: + bit_start: 49 + # 0: Open 1: Closed + data type: b + units: Bool + IR+ State: + bit_start: 50 + # 0: Open 1: Closed + data type: b + units: Bool + Software Latch: + bit_start: 51 + # 0: Open 1: Closed + data type: b + units: Bool + Reserved: + bit_start: 52-55 + ACU Status 3: + MSG ID: 0x009 + MSG LENGTH: 8 + HV Input Voltage: + bit_start: 0 + # 600v input voltage + data type: u16 + units: Volts + scaled min: 0 + scaled max: 655.35 + map equation: "0.01x" + HV Output Voltage: + bit_start: 16 + # 20v output voltage + data type: u16 + units: Volts + scaled min: 0 + scaled max: 655.35 + map equation: "0.01x" + HV Input Current: + bit_start: 32 + # 600v input current + data type: u16 + units: Amps + scaled min: 0 + scaled max: 65.535 + map equation: "0.001x" + HV Output Current: + bit_start: 48 + # 20v output current + data type: u16 + units: Amps + scaled min: 0 + scaled max: 65.535 + map equation: "0.001x" + ACU Precharge: + MSG ID: 0x00A + MSG LENGTH: 1 + Set TS Active: + bit_start: 0 + # 0: shutdown, 1: go TS Active/Precharge + data type: b + units: Bool + ACU Config Charge Parameters: + MSG ID: 0x00B + MSG LENGTH: 4 + Charge Voltage: + bit_start: 0 + # Sets the Target Charging voltage + data type: u16 + units: Volts + scaled min: 0 + scaled max: 6553.5 + map equation: "0.1x" + Charge Current: + bit_start: 16 + # Sets the Target Charging Current + data type: u16 + units: Amps + scaled min: 0 + scaled max: 6553.5 + map equation: "0.1x" + ACU Config Operational Parameters: + MSG ID: 0x00C + MSG LENGTH: 2 + Minimium Cell Voltage: + bit_start: 0 + # Sets the threshold for Minimum Cell Voltage before Shutdown + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Max Cell Temperature: + bit_start: 8 + # Sets the threshold for Max Cell Temperature before Shutdown + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + ACU Cell Data 1: + MSG ID: 0x00D + MSG LENGTH: 64 + Cell 0 Voltage: + bit_start: 0 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 0 Temp: + bit_start: 8 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 1 Voltage: + bit_start: 16 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 1 Temp: + bit_start: 24 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 2 Voltage: + bit_start: 32 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 2 Temp: + bit_start: 40 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 3 Voltage: + bit_start: 48 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 3 Temp: + bit_start: 56 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 4 Voltage: + bit_start: 64 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 4 Temp: + bit_start: 72 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 5 Voltage: + bit_start: 80 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 5 Temp: + bit_start: 88 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 6 Voltage: + bit_start: 96 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 6 Temp: + bit_start: 104 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 7 Voltage: + bit_start: 112 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 7 Temp: + bit_start: 120 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 8 Voltage: + bit_start: 128 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 8 Temp: + bit_start: 136 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 9 Voltage: + bit_start: 144 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 9 Temp: + bit_start: 152 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 10 Voltage: + bit_start: 160 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 10 Temp: + bit_start: 168 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 11 Voltage: + bit_start: 176 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 11 Temp: + bit_start: 184 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 12 Voltage: + bit_start: 192 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 12 Temp: + bit_start: 200 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 13 Voltage: + bit_start: 208 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 13 Temp: + bit_start: 216 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 14 Voltage: + bit_start: 224 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 14 Temp: + bit_start: 232 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 15 Voltage: + bit_start: 240 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 15 Temp: + bit_start: 248 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 16 Voltage: + bit_start: 256 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 16 Temp: + bit_start: 264 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 17 Voltage: + bit_start: 272 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 17 Temp: + bit_start: 280 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 18 Voltage: + bit_start: 288 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 18 Temp: + bit_start: 296 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 19 Voltage: + bit_start: 304 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 19 Temp: + bit_start: 312 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 20 Voltage: + bit_start: 320 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 20 Temp: + bit_start: 328 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 21 Voltage: + bit_start: 336 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 21 Temp: + bit_start: 344 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 22 Voltage: + bit_start: 352 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 22 Temp: + bit_start: 360 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 23 Voltage: + bit_start: 368 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 23 Temp: + bit_start: 376 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 24 Voltage: + bit_start: 384 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 24 Temp: + bit_start: 392 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 25 Voltage: + bit_start: 400 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 25 Temp: + bit_start: 408 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 26 Voltage: + bit_start: 416 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 26 Temp: + bit_start: 424 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 27 Voltage: + bit_start: 432 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 27 Temp: + bit_start: 440 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 28 Voltage: + bit_start: 448 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 28 Temp: + bit_start: 456 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 29 Voltage: + bit_start: 464 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 29 Temp: + bit_start: 472 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 30 Voltage: + bit_start: 480 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 30 Temp: + bit_start: 488 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 31 Voltage: + bit_start: 496 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 31 Temp: + bit_start: 504 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + ACU Cell Data 2: + MSG ID: 0x00E + MSG LENGTH: 64 + Cell 32 Voltage: + bit_start: 0 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 32 Temp: + bit_start: 8 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 33 Voltage: + bit_start: 16 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 33 Temp: + bit_start: 24 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 34 Voltage: + bit_start: 32 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 34 Temp: + bit_start: 40 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 35 Voltage: + bit_start: 48 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 35 Temp: + bit_start: 56 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 36 Voltage: + bit_start: 64 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 36 Temp: + bit_start: 72 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 37 Voltage: + bit_start: 80 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 37 Temp: + bit_start: 88 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 38 Voltage: + bit_start: 96 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 38 Temp: + bit_start: 104 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 39 Voltage: + bit_start: 112 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 39 Temp: + bit_start: 120 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 40 Voltage: + bit_start: 128 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 40 Temp: + bit_start: 136 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 41 Voltage: + bit_start: 144 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 41 Temp: + bit_start: 152 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 42 Voltage: + bit_start: 160 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 42 Temp: + bit_start: 168 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 43 Voltage: + bit_start: 176 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 43 Temp: + bit_start: 184 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 44 Voltage: + bit_start: 192 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 44 Temp: + bit_start: 200 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 45 Voltage: + bit_start: 208 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 45 Temp: + bit_start: 216 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 46 Voltage: + bit_start: 224 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 46 Temp: + bit_start: 232 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 47 Voltage: + bit_start: 240 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 47 Temp: + bit_start: 248 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 48 Voltage: + bit_start: 256 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 48 Temp: + bit_start: 264 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 49 Voltage: + bit_start: 272 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 49 Temp: + bit_start: 280 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 50 Voltage: + bit_start: 288 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 50 Temp: + bit_start: 296 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 51 Voltage: + bit_start: 304 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 51 Temp: + bit_start: 312 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 52 Voltage: + bit_start: 320 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 52 Temp: + bit_start: 328 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 53 Voltage: + bit_start: 336 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 53 Temp: + bit_start: 344 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 54 Voltage: + bit_start: 352 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 54 Temp: + bit_start: 360 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 55 Voltage: + bit_start: 368 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 55 Temp: + bit_start: 376 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 56 Voltage: + bit_start: 384 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 56 Temp: + bit_start: 392 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 57 Voltage: + bit_start: 400 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 57 Temp: + bit_start: 408 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 58 Voltage: + bit_start: 416 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 58 Temp: + bit_start: 424 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 59 Voltage: + bit_start: 432 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 59 Temp: + bit_start: 440 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 60 Voltage: + bit_start: 448 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 60 Temp: + bit_start: 456 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 61 Voltage: + bit_start: 464 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 61 Temp: + bit_start: 472 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 62 Voltage: + bit_start: 480 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 62 Temp: + bit_start: 488 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 63 Voltage: + bit_start: 496 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 63 Temp: + bit_start: 504 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + ACU Cell Data 3: + MSG ID: 0x00F + MSG LENGTH: 64 + Cell 64 Voltage: + bit_start: 0 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 64 Temp: + bit_start: 8 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 65 Voltage: + bit_start: 16 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 65 Temp: + bit_start: 24 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 66 Voltage: + bit_start: 32 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 66 Temp: + bit_start: 40 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 67 Voltage: + bit_start: 48 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 67 Temp: + bit_start: 56 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 68 Voltage: + bit_start: 64 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 68 Temp: + bit_start: 72 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 69 Voltage: + bit_start: 80 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 69 Temp: + bit_start: 88 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 70 Voltage: + bit_start: 96 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 70 Temp: + bit_start: 104 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 71 Voltage: + bit_start: 112 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 71 Temp: + bit_start: 120 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 72 Voltage: + bit_start: 128 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 72 Temp: + bit_start: 136 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 73 Voltage: + bit_start: 144 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 73 Temp: + bit_start: 152 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 74 Voltage: + bit_start: 160 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 74 Temp: + bit_start: 168 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 75 Voltage: + bit_start: 176 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 75 Temp: + bit_start: 184 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 76 Voltage: + bit_start: 192 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 76 Temp: + bit_start: 200 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 77 Voltage: + bit_start: 208 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 77 Temp: + bit_start: 216 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 78 Voltage: + bit_start: 224 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 78 Temp: + bit_start: 232 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 79 Voltage: + bit_start: 240 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 79 Temp: + bit_start: 248 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 80 Voltage: + bit_start: 256 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 80 Temp: + bit_start: 264 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 81 Voltage: + bit_start: 272 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 81 Temp: + bit_start: 280 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 82 Voltage: + bit_start: 288 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 82 Temp: + bit_start: 296 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 83 Voltage: + bit_start: 304 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 83 Temp: + bit_start: 312 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 84 Voltage: + bit_start: 320 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 84 Temp: + bit_start: 328 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 85 Voltage: + bit_start: 336 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 85 Temp: + bit_start: 344 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 86 Voltage: + bit_start: 352 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 86 Temp: + bit_start: 360 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 87 Voltage: + bit_start: 368 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 87 Temp: + bit_start: 376 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 88 Voltage: + bit_start: 384 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 88 Temp: + bit_start: 392 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 89 Voltage: + bit_start: 400 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 89 Temp: + bit_start: 408 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 90 Voltage: + bit_start: 416 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 90 Temp: + bit_start: 424 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 91 Voltage: + bit_start: 432 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 91 Temp: + bit_start: 440 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 92 Voltage: + bit_start: 448 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 92 Temp: + bit_start: 456 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 93 Voltage: + bit_start: 464 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 93 Temp: + bit_start: 472 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 94 Voltage: + bit_start: 480 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 94 Temp: + bit_start: 488 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 95 Voltage: + bit_start: 496 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 95 Temp: + bit_start: 504 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + ACU Cell Data 4: + MSG ID: 0x010 + MSG LENGTH: 64 + Cell 96 Voltage: + bit_start: 0 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 96 Temp: + bit_start: 8 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 97 Voltage: + bit_start: 16 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 97 Temp: + bit_start: 24 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 98 Voltage: + bit_start: 32 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 98 Temp: + bit_start: 40 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 99 Voltage: + bit_start: 48 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 99 Temp: + bit_start: 56 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 100 Voltage: + bit_start: 64 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 100 Temp: + bit_start: 72 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 101 Voltage: + bit_start: 80 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 101 Temp: + bit_start: 88 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 102 Voltage: + bit_start: 96 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 102 Temp: + bit_start: 104 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 103 Voltage: + bit_start: 112 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 103 Temp: + bit_start: 120 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 104 Voltage: + bit_start: 128 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 104 Temp: + bit_start: 136 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 105 Voltage: + bit_start: 144 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 105 Temp: + bit_start: 152 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 106 Voltage: + bit_start: 160 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 106 Temp: + bit_start: 168 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 107 Voltage: + bit_start: 176 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 107 Temp: + bit_start: 184 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 108 Voltage: + bit_start: 192 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 108 Temp: + bit_start: 200 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 109 Voltage: + bit_start: 208 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 109 Temp: + bit_start: 216 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 110 Voltage: + bit_start: 224 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 110 Temp: + bit_start: 232 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 111 Voltage: + bit_start: 240 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 111 Temp: + bit_start: 248 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 112 Voltage: + bit_start: 256 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 112 Temp: + bit_start: 264 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 113 Voltage: + bit_start: 272 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 113 Temp: + bit_start: 280 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 114 Voltage: + bit_start: 288 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 114 Temp: + bit_start: 296 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 115 Voltage: + bit_start: 304 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 115 Temp: + bit_start: 312 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 116 Voltage: + bit_start: 320 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 116 Temp: + bit_start: 328 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 117 Voltage: + bit_start: 336 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 117 Temp: + bit_start: 344 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 118 Voltage: + bit_start: 352 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 118 Temp: + bit_start: 360 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 119 Voltage: + bit_start: 368 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 119 Temp: + bit_start: 376 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 120 Voltage: + bit_start: 384 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 120 Temp: + bit_start: 392 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 121 Voltage: + bit_start: 400 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 121 Temp: + bit_start: 408 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 122 Voltage: + bit_start: 416 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 122 Temp: + bit_start: 424 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 123 Voltage: + bit_start: 432 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 123 Temp: + bit_start: 440 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 124 Voltage: + bit_start: 448 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 124 Temp: + bit_start: 456 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 125 Voltage: + bit_start: 464 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 125 Temp: + bit_start: 472 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 126 Voltage: + bit_start: 480 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 126 Temp: + bit_start: 488 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 127 Voltage: + bit_start: 496 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 127 Temp: + bit_start: 504 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + ACU Cell Data 5: + MSG ID: 0x011 + MSG LENGTH: 64 + Cell 128 Voltage: + bit_start: 0 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 128 Temp: + bit_start: 8 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 129 Voltage: + bit_start: 16 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 129 Temp: + bit_start: 24 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 130 Voltage: + bit_start: 32 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 130 Temp: + bit_start: 40 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 131 Voltage: + bit_start: 48 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 131 Temp: + bit_start: 56 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 132 Voltage: + bit_start: 64 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 132 Temp: + bit_start: 72 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 133 Voltage: + bit_start: 80 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 133 Temp: + bit_start: 88 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 134 Voltage: + bit_start: 96 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 134 Temp: + bit_start: 104 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 135 Voltage: + bit_start: 112 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 135 Temp: + bit_start: 120 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 136 Voltage: + bit_start: 128 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 136 Temp: + bit_start: 136 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 137 Voltage: + bit_start: 144 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 137 Temp: + bit_start: 152 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 138 Voltage: + bit_start: 160 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 138 Temp: + bit_start: 168 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 139 Voltage: + bit_start: 176 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 139 Temp: + bit_start: 184 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 140 Voltage: + bit_start: 192 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 140 Temp: + bit_start: 200 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 141 Voltage: + bit_start: 208 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 141 Temp: + bit_start: 216 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 142 Voltage: + bit_start: 224 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 142 Temp: + bit_start: 232 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 143 Voltage: + bit_start: 240 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 143 Temp: + bit_start: 248 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 144 Voltage: + bit_start: 256 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 144 Temp: + bit_start: 264 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 145 Voltage: + bit_start: 272 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 145 Temp: + bit_start: 280 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 146 Voltage: + bit_start: 288 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 146 Temp: + bit_start: 296 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 147 Voltage: + bit_start: 304 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 147 Temp: + bit_start: 312 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 148 Voltage: + bit_start: 320 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 148 Temp: + bit_start: 328 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 149 Voltage: + bit_start: 336 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 149 Temp: + bit_start: 344 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 150 Voltage: + bit_start: 352 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 150 Temp: + bit_start: 360 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 151 Voltage: + bit_start: 368 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 151 Temp: + bit_start: 376 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 152 Voltage: + bit_start: 384 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 152 Temp: + bit_start: 392 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 153 Voltage: + bit_start: 400 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 153 Temp: + bit_start: 408 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 154 Voltage: + bit_start: 416 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 154 Temp: + bit_start: 424 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 155 Voltage: + bit_start: 432 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 155 Temp: + bit_start: 440 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 156 Voltage: + bit_start: 448 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 156 Temp: + bit_start: 456 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 157 Voltage: + bit_start: 464 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 157 Temp: + bit_start: 472 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 158 Voltage: + bit_start: 480 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 158 Temp: + bit_start: 488 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + Cell 159 Voltage: + bit_start: 496 + # Cell n voltage + data type: u8 + units: Volts + scaled min: 2 + scaled max: 4.55 + map equation: "0.01x+2" + Cell 159 Temp: + bit_start: 504 + # Cell n temperature + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 63.75 + map equation: "0.25x" + DC-DC Status: + MSG ID: 0x012 + MSG LENGTH: 7 + Input Voltage: + bit_start: 0 + # ~20v for LV (LV only. Send 0 for HV) + data type: u16 + units: Volts + scaled min: 0 + scaled max: 65.535 + map equation: "x/1000" + Output Voltage: + bit_start: 16 + # ~12v for LV and ~20v for HV + data type: u16 + units: Volts + scaled min: 0 + scaled max: 65.535 + map equation: "x/1000" + Input Current: + bit_start: 32 + # Input current (LV only. Send 0 for HV) + data type: u8 + units: Amps + scaled min: 0 + scaled max: 25.5 + map equation: "0.1x" + Output Current: + bit_start: 40 + # Output current + data type: u8 + units: Amps + scaled min: 0 + scaled max: 25.5 + map equation: "0.1x" + DC-DC Temp: + bit_start: 48 + # Temp of DC-DC converter + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 255 + map equation: "1x" + Inverter Status 1: + MSG ID: 0x013 + MSG LENGTH: 6 + AC current: + bit_start: 0 + # 0.01 * current, int16_t + data type: u16 + units: Amps + scaled min: -327.68 + scaled max: 327.67 + map equation: "0.01x-327.68" + DC current: + bit_start: 16 + # 0.01 * current, int16_t + data type: u16 + units: Amps + scaled min: 0 + scaled max: 655.35 + map equation: "0.01x" + Motor RPM: + bit_start: 32 + # RPM, int16_t + data type: u16 + units: RPM + scaled min: -32768 + scaled max: 32767 + map equation: "x-32768" + Inverter Status 2: + MSG ID: 0x014 + MSG LENGTH: 6 + U MOSFET temperature: + bit_start: 0 + # Celsius + 40, uint8_t + data type: u8 + units: Celsius + scaled min: -40 + scaled max: 215 + map equation: "x-40" + V MOSFET temperature: + bit_start: 16 + # Celsius + 40, uint8_t + data type: u8 + units: Celsius + scaled min: -40 + scaled max: 215 + map equation: "x-40" + W MOSFET temperature: + bit_start: 32 + # Celsius + 40, uint8_t + data type: u8 + units: Celsius + scaled min: -40 + scaled max: 215 + map equation: "x-40" + Inverter Status 3: + MSG ID: 0x015 + MSG LENGTH: 2 + Motor temperature: + bit_start: 0 + # Celsius + 40, uint8_t + data type: u8 + units: Celsius + scaled min: -40 + scaled max: 215 + map equation: "x-40" + Over voltage faults: + bit_start: 16 + # TS above set max voltage + data type: b + units: Bool + Under voltage fault: + bit_start: 17 + # TS below set min voltage + data type: b + units: Bool + Inv. overtemp fault: + bit_start: 18 + # Inverter over set max temp + data type: b + units: Bool + Motor overtemp fault: + bit_start: 19 + # Motor over set max temp + data type: b + units: Bool + Transistor fault: + bit_start: 20 + # Mosfet or mosfet drive error + data type: b + units: Bool + Encoder fault: + bit_start: 21 + # Encoder communication or calc error + data type: b + units: Bool + CAN fault: + bit_start: 22 + # CAN message error or timeout + data type: b + units: Bool + Future use: + bit_start: 23 + data type: b + units: Bool + Inverter Config: + MSG ID: 0x016 + MSG LENGTH: 7 + Max AC Current: + bit_start: 0 + # Max AC Current + data type: u16 + units: Amps + scaled min: -327.68 + scaled max: 327.67 + map equation: "0.01x-327.68" + Max DC Current: + bit_start: 16 + # Max DC Current + data type: u16 + units: Amps + scaled min: -327.68 + scaled max: 327.67 + map equation: "0.01x-327.68" + Absolute Max RPM Limit: + bit_start: 32 + # 0: No limit n :limited at n RPM + data type: u16 + units: RPM + scaled min: -32768 + scaled max: 32767 + map equation: "x-32768" + Motor direction: + bit_start: 48 + # Write 1 inverts direction + data type: b + units: Enable + scaled min: "-" + scaled max: "-" + map equation: "-" + Inverter Command: + MSG ID: 0x017 + MSG LENGTH: 8 + Set AC Current: + bit_start: 0 + # Commanded AC Current + data type: u16 + units: Amps + scaled min: -327.68 + scaled max: 327.67 + map equation: "0.01x-327.68" + Set DC Current: + bit_start: 16 + # Commanded DC Current + data type: u16 + units: Amps + scaled min: -327.68 + scaled max: 327.67 + map equation: "0.01x-327.68" + RPM Limit: + bit_start: 32 + # 0: No limit n :limited at n RPM + data type: u16 + units: RPM + scaled min: -32768 + scaled max: 32767 + map equation: "x-32768" + Field weakening: + bit_start: 48 + # Field weakening strength + data type: u8 + units: Amps + scaled min: 0 + scaled max: 25.5 + map equation: "0.1x" + Drive enable: + bit_start: 56 + # Write this to 1 every 100ms to enable inverter + data type: b + units: Enable + scaled min: "-" + scaled max: "-" + map equation: "-" + Fan Status: + MSG ID: 0x018 + MSG LENGTH: 4 + Fan Speed: + bit_start: 0 + # Fan RPM + data type: u16 + units: RPM + scaled min: 0 + scaled max: 65535 + map equation: "1x" + Input Voltage: + bit_start: 16 + # 0-22 + data type: u8 + units: Volts + scaled min: 0 + scaled max: 25.5 + map equation: "0.1x" + Input Current: + bit_start: 24 + # 0-10 + data type: u8 + units: Amps + scaled min: 0 + scaled max: 25.5 + map equation: "0.1x" + Fan Command: + MSG ID: 0x019 + MSG LENGTH: 1 + Fan Command: + bit_start: 0 + # 0-100 Percent + data type: u8 + units: '%' + scaled min: 0 + scaled max: 255 + map equation: "1x" + Dash Status: + MSG ID: 0x01A + MSG LENGTH: 3 + BMS LED: + bit_start: 0 + # State of BMS LED + data type: b + units: Bool + IMD LED: + bit_start: 1 + # State of IMD LED + data type: b + units: Bool + BSPD LED: + bit_start: 2 + # State of BSPD LED + data type: b + units: Bool + TS Button Data: + bit_start: 8 + # MSB is state (1: pressed) + # Other 7 bits represent the time in 0.1s that it has been in that state + data type: s8 + units: Seconds + scaled min: 0 + scaled max: 12.7 + map equation: "abs(x)/10" + RTD Button Data: + bit_start: 16 + # MSB is state (1: pressed) + # Other 7 bits represent the time in 0.1s that it has been in that state + data type: s8 + units: Seconds + scaled min: 0 + scaled max: 12.7 + map equation: "abs(x)/10" + Dash Config: + MSG ID: 0x01B + MSG LENGTH: 7 + BMS LED: + bit_start: 0 + # LED command (0: off, 1: on) + data type: b + units: Bool + IMD LED: + bit_start: 1 + # LED command (0: off, 1: on) + data type: b + units: Bool + BSPD LED: + bit_start: 2 + # LED command (0: off, 1: on) + data type: b + units: Bool + Button LED 1 R: + bit_start: 8 + # Discarded input but still send it, set by ECU State + data type: u8 + units: RGB + scaled min: 0 + scaled max: 255 + map equation: "1x" + Button LED 1 G: + bit_start: 16 + # Discarded input but still send it, set by ECU State + data type: u8 + units: RGB + scaled min: 0 + scaled max: 255 + map equation: "1x" + Button LED 1 B: + bit_start: 24 + # Discarded input but still send it, set by ECU State + data type: u8 + units: RGB + scaled min: 0 + scaled max: 255 + map equation: "1x" + Button LED 2 R: + bit_start: 32 + # Discarded input but still send it, set by ECU State + data type: u8 + units: RGB + scaled min: 0 + scaled max: 255 + map equation: "1x" + Button LED 2 G: + bit_start: 40 + # Discarded input but still send it, set by ECU State + data type: u8 + units: RGB + scaled min: 0 + scaled max: 255 + map equation: "1x" + Button LED 2 B: + bit_start: 48 + # Discarded input but still send it, set by ECU State + data type: u8 + units: RGB + scaled min: 0 + scaled max: 255 + map equation: "1x" + Steering Status: + MSG ID: 0x01C + MSG LENGTH: 2 + Current Encoder: + bit_start: 0 + # Position of knob (1-16) + data type: u4 + units: Position + scaled min: 1 + scaled max: 16 + map equation: "1x" + Torque Map Encoder: + bit_start: 4 + # Position of knob (1-16) + data type: u4 + units: Position + scaled min: 1 + scaled max: 16 + map equation: "1x" + Regen: + bit_start: 8 + # Position of knob (1-16) + data type: u4 + units: Position + scaled min: 1 + scaled max: 16 + map equation: "1x" + Button 1: + bit_start: 12 + # Button State + data type: b + units: Bool + Button 2: + bit_start: 13 + # Button State + data type: b + units: Bool + Button 3: + bit_start: 14 + # Button State + data type: b + units: Bool + Button 4: + bit_start: 15 + # Button State + data type: b + units: Bool + Steering Config: + MSG ID: 0x01D + MSG LENGTH: 0 + Reserved: + bit_start: 0 + SAM Brake IR: + MSG ID: 0x01E + MSG LENGTH: 1 + Temp: + bit_start: 0 + # IR Temp of Brakes + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 255 + map equation: "1x" + SAM Tire Temp: + MSG ID: 0x01F + MSG LENGTH: 4 + Outside Temp: + bit_start: 0 + # Furthest from chassis + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 255 + map equation: "1x" + Outside Middle Temp: + bit_start: 8 + # Middle of tire + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 255 + map equation: "1x" + Inside Middle Temp: + bit_start: 16 + # Middle of tire + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 255 + map equation: "1x" + Inside Temp: + bit_start: 24 + # Closest to chassis + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 255 + map equation: "1x" + SAM IMU: + MSG ID: 0x020 + MSG LENGTH: 12 + Accel X: + bit_start: 0 + # Acceleration in X-axis + data type: u16 + units: Meters/s^2 + scaled min: -327.68 + scaled max: 327.67 + map equation: "0.01x-327.68" + Accel Y: + bit_start: 16 + # Acceleration in Y-axis + data type: u16 + units: Meters/s^2 + scaled min: -327.68 + scaled max: 327.67 + map equation: "0.01x-327.68" + Accel Z: + bit_start: 32 + # Acceleration in Z-axis + data type: u16 + units: Meters/s^2 + scaled min: -327.68 + scaled max: 327.67 + map equation: "0.01x-327.68" + Gyro X: + bit_start: 48 + # Angular velocity in X-axis + data type: u16 + units: Meters/s^2 + scaled min: -32.768 + scaled max: 32.767 + map equation: "0.001x-32.768" + Gyro Y: + bit_start: 64 + # Angular velocity in Y-axis + data type: u16 + units: Meters/s^2 + scaled min: -32.768 + scaled max: 32.767 + map equation: "0.001x-32.768" + Gyro Z: + bit_start: 80 + # Angular velocity in Z-axis + data type: u16 + units: Meters/s^2 + scaled min: -32.768 + scaled max: 32.767 + map equation: "0.001x-32.768" + SAM GPS 1: + MSG ID: 0x021 + MSG LENGTH: 8 + Latitude: + bit_start: 0 + # Latitude in decimal degrees + data type: u32 + units: Degrees + Longitude: + bit_start: 32 + # Longitude in decimal degrees + data type: u32 + units: Degrees + SAM GPS 2: + MSG ID: 0x022 + MSG LENGTH: 8 + Accuracy: + bit_start: 0 + # GPS position accuracy + data type: u32 + Attitude: + bit_start: 32 + # Vehicle attitude + data type: u32 + SAM GPS Time: + MSG ID: 0x023 + MSG LENGTH: 8 + Time: + bit_start: 0 + # Time in seconds since GPS Epoch + data type: u32 + Time of Week Ms: + bit_start: 32 + # Time of week in milliseconds + data type: u32 + SAM GPS Heading: + MSG ID: 0x024 + MSG LENGTH: 4 + Heading from North: + bit_start: 0 + # Heading angle relative to true North + data type: u32 + SAM Sus Pots: + MSG ID: 0x025 + MSG LENGTH: 1 + Suspension Angle: + bit_start: 0 + # Pot Pos + data type: u8 + units: degrees + scaled min: 0 + scaled max: 255 + map equation: "1x" + SAM TOF: + MSG ID: 0x026 + MSG LENGTH: 2 + Height: + bit_start: 0 + # Ride Height + data type: u16 + units: mm + scaled min: 0 + scaled max: 255 + map equation: "x/256" + SAM Rear Wheelspeed: + MSG ID: 0x027 + MSG LENGTH: 2 + Speed: + bit_start: 0 + # Wheel RPM + data type: u16 + units: RPM + scaled min: -3276.8 + scaled max: 3276.7 + map equation: "0.1x--3276.8" + SAM Pushrod Force: + MSG ID: 0x028 + MSG LENGTH: 2 + Load Force: + bit_start: 0 + # Pushrod Force + data type: u16 + units: N + scaled min: -3276.8 + scaled max: 3276.7 + map equation: "0.1x--3276.8" + TCM Status: + MSG ID: 0x029 + MSG LENGTH: 8 + Connection Status: + bit_start: 0 + # 1: OK, 0: Timeout + data type: b + units: Bool + MQTT Status: + bit_start: 1 + # 1: OK, 0: Timeout + data type: b + units: Bool + Epic Shelter Status: + bit_start: 2 + # 1: In Progress, 0: Idle + data type: b + units: Bool + Camera Status: + bit_start: 3 + # 1: Recording, 0: Idle + data type: b + units: Bool + Reserved: + bit_start: 4-7 + Ping: + bit_start: 8 + # Mapache ping (upload) + data type: u16 + units: ms + Cache Size: + bit_start: 24 + # # of messages on cache (non-synced) + data type: u32 + units: # + Reserved: + bit_start: 56 + TCM Resource Utilization: + MSG ID: 0x02A + MSG LENGTH: 44 + CPU 0 Freq: + bit_start: 0 + # core 0 frequency in MHz + data type: u16 + units: '%' + CPU 0 Util: + bit_start: 16 + # core 0 utilization in % + data type: u8 + units: '%' + CPU 1 Freq: + bit_start: 24 + # core 1 frequency in MHz + data type: u16 + units: '%' + CPU 1 Util: + bit_start: 40 + # core 1 utilization in % + data type: u8 + CPU 2 Freq: + bit_start: 48 + # core 2 frequency in MHz + data type: u16 + units: '%' + CPU 2 Util: + bit_start: 64 + # core 2 utilization in % + data type: u8 + CPU 3 Freq: + bit_start: 72 + # core 3 frequency in MHz + data type: u16 + CPU 3 Util: + bit_start: 88 + # core 3 utilization in % + data type: u8 + CPU 4 Freq: + bit_start: 96 + # core 4 frequency in MHz + data type: u16 + CPU 4 Util: + bit_start: 112 + # core 4 utilization in % + data type: u8 + CPU 5 Freq: + bit_start: 120 + # core 5 frequency in MHz + data type: u16 + CPU 5 Util: + bit_start: 136 + # core 5 utilization in % + data type: u8 + units: Watts + CPU Total Util: + bit_start: 144 + # total cpu utilization in % + data type: u8 + RAM Total: + bit_start: 152 + # total memory in MB + data type: u16 + RAM Used: + bit_start: 168 + # used memory in MB + data type: u16 + RAM Util: + bit_start: 184 + # memory utilization in % + data type: u8 + GPU Util: + bit_start: 192 + # gpu utilization in % + data type: u8 + GPU Freq: + bit_start: 200 + # gpu frequency in MHz + data type: u16 + Disk Total: + bit_start: 216 + # total disk space in MB + data type: u32 + Disk Used: + bit_start: 248 + # used disk space in MB + data type: u32 + Disk Util: + bit_start: 280 + # disk utilization in % + data type: u8 + units: Celsius + CPU Temp: + bit_start: 288 + # cpu temp in ˚C + data type: u8 + GPU Temp: + bit_start: 296 + # gpu temp in ˚C + data type: u8 + Voltage Draw: + bit_start: 304 + # voltage draw in mV + data type: u16 + Current Draw: + bit_start: 320 + # current draw in mA + data type: u16 + Power Draw: + bit_start: 336 + # power draw in mW + data type: u16 + units: Celsius + Dash Warning Flags: + MSG ID: 0x02B + MSG LENGTH: 1 + BSE APPS Violation: + bit_start: 0 + # 1: Violation, 0: OK + data type: b + units: Bool + Reserved: + bit_start: 1 + Reserved: + bit_start: 2 + Reserved: + bit_start: 3 + Reserved: + bit_start: 4 + Reserved: + bit_start: 5 + Reserved: + bit_start: 6 + Reserved: + bit_start: 7 + Specific Brake IR: + MSG ID: 0x02C + MSG LENGTH: 2 + Wheel identifier: + bit_start: 0 + # Wheel identifier according to the wiki + data type: u8 + Temp: + bit_start: 8 + # IR Temp of Brakes + data type: u8 + units: Celsius + scaled min: 0 + scaled max: 255 + map equation: "1x" + ECU Ping Information: + MSG ID: 0x02D + MSG LENGTH: 3 + Online pings: + bit_start: 0 + # Literal copy of ECU Status's status bit map + data type: b[24] + units: Bool map + ECU Pedals Data: + MSG ID: 0x02E + MSG LENGTH: 10 + APPS1_SIGNAL: + bit_start: 0 + # APPS 1 Signal + data type: u16 + units: '%' + scaled min: 0 + scaled max: 100 + map equation: "x/655.35" + APPS2_SIGNAL: + bit_start: 16 + # APPS 2 Signal + data type: u16 + units: '%' + scaled min: 0 + scaled max: 100 + map equation: "x/655.35" + BSE_SIGNAL: + bit_start: 32 + # Brake Force Signal + data type: u16 + units: '%' + scaled min: 0 + scaled max: 100 + map equation: "x/655.35" + BRAKE_F_SIGNAL: + bit_start: 48 + # Brake Pressure Signal + data type: u16 + units: '%' + scaled min: 0 + scaled max: 100 + map equation: "x/655.35" + BRAKE_R_SIGNAL: + bit_start: 48 + # Brake Pressure Signal + data type: u16 + units: '%' + scaled min: 0 + scaled max: 100 + map equation: "x/655.35" + GPS LAT: + MSG ID: 0x031 + MSG LENGTH: 8 + LAT: + bit_start: 0 + # lattitude + data type: double + GPS LON: + MSG ID: 0x032 + MSG LENGTH: 8 + LON: + bit_start: 0 + # longitude + data type: double + GPS ALT: + MSG ID: 0x033 + MSG LENGTH: 8 + ALT: + bit_start: 0 + # altitude + data type: double + GPS PX: + MSG ID: 0x034 + MSG LENGTH: 8 + Theta: + bit_start: 0 + data type: i16 + map equation: "x/1000" + Acc: + bit_start: 16 + data type: i16 + map equation: "x/100" + status: + bit_start: 32 + data type: u32 + GPS QY: + MSG ID: 0x035 + MSG LENGTH: 8 + Theta: + bit_start: 0 + data type: i16 + map equation: "x/1000" + Acc: + bit_start: 16 + data type: i16 + map equation: "x/100" + status: + bit_start: 32 + data type: u32 + GPS RZ: + MSG ID: 0x036 + MSG LENGTH: 8 + Theta: + bit_start: 0 + data type: i16 + map equation: "x/1000" + Acc: + bit_start: 16 + data type: i16 + map equation: "x/100" + status: + bit_start: 32 + data type: u32 + UVW DGPS: + MSG ID: 0x030 + MSG LENGTH: 6 + DGPS_U: + bit_start: 0 + # U + data type: i16 + map equation: "x/100" + DGPS_V: + bit_start: 16 + # V + data type: i16 + map equation: "x/100" + DGPS_W: + bit_start: 32 + # W + data type: i16 + map equation: "x/100" + +Custom CAN ID: + DTI Control 1: + CAN ID: 116 + Length: 2 + signals: + - name: "Target AC Current" + bit_start: 0 + # This command sets the target motor AC current (peak, not + # RMS). When the controller receives this message, it + # automatically switches to current control mode. + # This value must not be above the limits of the inverter and must + # be multiplied by 10 before sending. This is a signed parameter, + # and the sign represents the direction of the torque which + # correlates with the motor AC current. (For the correlation, please + # refer to the motor parameters) + + DTI Control 2: + CAN ID: 216 + Length: 2 + signals: + - name: "Target Brake Current" + bit_start: 0 + # Targets the brake current of the motor. It will result negative + # torque relatively to the forward direction of the motor. + # This value must be multiplied by 10 before sending, only + # positive currents are accepted. + + DTI Control 3: + CAN ID: 316 + Length: 4 + signals: + - name: "Target ERPM" + bit_start: 0 + # This command enables the speed control of the motor with a + # target ERPM. This is a signed parameter, and the sign + # represents the direction of the spinning. For better operation you + # need to tune the PID of speed control. + # Equation: ERPM = Motor RPM * number of the motor pole pairs + + DTI Control 4: + CAN ID: 416 + Length: 2 + signals: + - name: "Target Position" + bit_start: 0 + # This value targets the desired position of the motor in degrees. + # This command is used to hold a position of the motor. + # This feature is enabled only if encoder is used as position + # sensor. The value has to be multiplied by 10 before sending. + + DTI Control 5: + CAN ID: 516 + Length: 2 + signals: + - name: "R-AC Current" + bit_start: 0 + # This command sets a relative AC current to the minimum and + # maximum limits set by configuration. This achieves the same + # function as the “Set AC current” command. Gives you a freedom + # to send values between -100,0% and 100,0%. You do not need + # to know the motor limit parameters. + # This value must be between -100 and 100 and must be + # multiplied by 10 before sending. + + DTI Control 6: + CAN ID: 616 + Length: 2 + signals: + - name: "R-AC Brake Current" + bit_start: 0 + # Targets the relative brake current of the motor. It will result + # negative torque relatively to the forward direction of the motor. + # This value must be between 0 and 100 and must be multiplied + # by 10 before sending Gives you a freedom to send values + # between 0% and 100,0%. You do not need to know the motor + # limit parameters. + # This value must be between 0 and 100 and has to be multiplied + # by 10 before sending + + DTI Control 7: + CAN ID: 716 + Length: 1 + signals: + - name: "Digital Output 1" + bit_start: 0 + # Sets the digital output 1 to HIGH (1) or LOW (0) state + - name: "Digital Output 2" + bit_start: 1 + # Sets the digital output 1 to HIGH (1) or LOW (0) state + - name: "Digital Output 3" + bit_start: 2 + # Sets the digital output 1 to HIGH (1) or LOW (0) state + - name: "Digital Output 4" + bit_start: 3 + # Sets the digital output 1 to HIGH (1) or LOW (0) state + + DTI Control 8: + CAN ID: 816 + Length: 2 + signals: + - name: "Max AC Current" + bit_start: 0 + # This value determines the maximum allowable drive current on + # the AC side. With this function you are able maximize the + # maximum torque on the motor. + # The value must be multiplied by 10 before sending. + + DTI Control 9: + CAN ID: 916 + Length: 2 + signals: + - name: "Max Brake AC Current" + bit_start: 0 + # This value sets the maximum allowable brake current on the AC + # side. + # This value must be multiplied by 10 before sending, only + # negative currents are accepted. + + DTI Control 10: + CAN ID: A16 + Length: 2 + signals: + - name: "Max DC Current" + bit_start: 0 + # This value determines the maximum allowable drive current on + # the DC side. With this command the BMS can limit the + # maximum allowable battery discharge current. + # The value has to be multiplied by 10 before sending. + + DTI Control 11: + CAN ID: B16 + Length: 2 + signals: + - name: "Max Brake DC Current" + bit_start: 0 + # This value determines the maximum allowable brake current + # on the DC side. With this command the BMS can limit the + # maximum allowable battery charge current. + # The value has to be multiplied by 10 before sending. Only + # negative currents are accepted. + + DTI Control 12: + CAN ID: C16 + Length: 1 + signals: + - name: "Drive Enable" + bit_start: 0 + # 0: Drive not allowed + # 1: Drive allowed + # Only 0 and 1 values are accepted. Must be sent periodically to + # be enabled. + + DTI Data 1: + CAN ID: 2016 + Length: 8 + signals: + - name: "ERPM" + bit_start: 0 + # Electrical RPM + # Equation: ERPM = Motor RPM * number of the motor pole pairs. + - name: "Duty Cycle" + bit_start: 32 + # The controller duty cycle. The sign of this value will represent + # whether the motor is running(positive) current or regenerating + # (negative) current. + - name: "Input Voltage" + bit_start: 48 + # Input voltage is the DC voltage. + + DTI Data 2: + CAN ID: 2116 + Length: 8 + signals: + - name: "AC Current" + bit_start: 0 + # The motor current. The sign of this value represents whether the + # motor is running(positive) current or regenerating (negative) + # current. + - name: "DC Current" + bit_start: 16 + # DC Current: Current on DC side. The sign of this value + # represents whether the motor is running(positive) current or + # regenerating (negative) current. + - name: "RESERVED" + bit_start: 32 + # Filled with FF’s. For future use. + + DTI Data 3: + CAN ID: 2216 + Length: 8 + signals: + - name: "Controller Temp" + bit_start: 0 + # Temperature of the inverter semiconductors. + - name: "Motor Temp" + bit_start: 16 + # Temperature of the motor measured by the inverter + - name: "Fault Codes" + bit_start: 32 + # 0x00 : NO FAULTS + # 0x01 : Overvoltage - The input voltage is higher than the set + # maximum. + # 0x02 : Undervoltage - The input voltage is lower than the set + # minimum. + # 0x03 : DRV - Transistor or transistor drive error + # 0x04 : ABS. Overcurrent - The AC current is higher than the + # set absolute maximum current. + # 0x05 : CTLR Overtemp. - The controller temperature is higher + # than the set maximum. + # 0x06 : Motor Overtemp. - The motor temperature is higher than + # the set maximum. + # 0x07 : Sensor wire fault - Something went wrong with the + # sensor differential signals. + # 0x08 : Sensor general fault - An error occurred while + # processing the sensor signals + # 0x09 : CAN Command error - CAN message received contains + # parameter out of boundaries + # 0x0A : Analog input error – Redundant output out of range + - name: "RESERVED" + bit_start: 40 + # Filled with FF’s. For future use. + + DTI Data 4: + CAN ID: 2316 + Length: 8 + signals: + - name: "FOC Id" + bit_start: 0 + # FOC algorithm component Id. + - name: "FOC Iq" + bit_start: 32 + # FOC algorithm component Id\q. + + DTI Data 5: + CAN ID: 2416 + Length: 8 + signals: + - name: "Throttle" + bit_start: 0 + # Throttle signal derived from analog inputs or CAN2 + - name: "Brake" + bit_start: 8 + # Brake signal derived from analog inputs or CAN2 + - name: "Digital input 1" + bit_start: 16 + # 1: Digital input is active + # 0: Digital input is inactive + - name: "Digital input 2" + bit_start: 17 + - name: "Digital input 3" + bit_start: 18 + - name: "Digital input 4" + bit_start: 19 + - name: "Digital output 1" + bit_start: 20 + # 1: Digital output is active + # 0: Digital output is inactive + - name: "Digital output 2" + bit_start: 21 + - name: "Digital output 3" + bit_start: 22 + - name: "Digital output 4" + bit_start: 23 + - name: "Drive Enable" + bit_start: 24 + # 1: Drive enabled + # 0: Drive disabled + # Drive can be enabled/disbled by the digital input or/and via + # CAN2 interface + - name: "Capacitor temp limit" + bit_start: 32 + # 1: Capacitor temperature limit active + # 0: Capacitor temperature limit inactive + # The inverter can limit the output power to not to overheat the + # internal capacitors. (only valid HW version 3.6 or newer) + - name: "DC current limit" + bit_start: 33 + # 1: DC current limit active + # 0: DC current limit inactive + - name: "Drive enable limit" + bit_start: 34 + # 1: Drive enable limit active + # 0: Drive enable limit inactive + # Indicates whether the drive enable limitation is active or inactive. + # Used for software development purposes. For true indication + # of the drive state please use byte 3, bit 24 of this message. + - name: "IGBT acceleration temperature limit" + bit_start: 35 + # 1: IGBT acceleration limit active + # 0: IGBT acceleration limit inactive + - name: "IGBT temperature limit" + bit_start: 36 + # 1: IGBT temperature limit active + # 0: IGBT temperature limit inactive + - name: "Input voltage limit" + bit_start: 37 + # 1: Input voltage limit active + # 0: Input voltage limit inactive + - name: "Motor acceleration temperature limit" + bit_start: 38 + # 1: Motor acceleration temperature limit active + # 0: Motor acceleration temperature limit inactive + - name: "Motor temperature limit" + bit_start: 39 + # 1: Motor temperature limit active + # 0: Motor temperature limit inactive + - name: "RPM min limit" + bit_start: 40 + # 1: RPM min limit active + # 0: RPM min limit inactive + - name: "RPM max limit" + bit_start: 41 + # 1: RPM max limit active + # 0: RPM max limit inactive + - name: "Power limit" + bit_start: 42 + # 1: Power limit by configuration active + # 0: Power limit by configuration inactive + - name: "RESERVED" + bit_start: 43 + # Set to 0. + - name: "RESERVED" + bit_start: 48 + # Filled with FF’s. For future use. + - name: "CAN Version" + bit_start: 56 + # Indicates the CAN map version. For ex: 23 -> 2,3 (V2,3) + + IMD general: + CAN ID: 18FF01F4 + Length: 8 + signals: + - name: "R_Iso_Corrected" + bit_start: 0 + - name: "R_Iso_Status" + bit_start: 16 + - name: "Iso_Meas_Count" + bit_start: 24 + - name: "Status" + bit_start: 32 + # Bit 0: true = Device error active + # Bit 1: true = HV_pos connection failure + # Bit 2: true = HV_neg connection failure + # Bit 3: true = Earth connection failure + # Bit 4: true = Iso Alarm (iso value below threshold error) + # Bit 5: true = Iso Warning (iso value below threshold warning) + # Bit 6: true = Iso Outdated (value „Time elapsed since lst measurement“ > = „measurement timeout“) + # Bit 7: true = Unbalance Alarm (unbalance value below threshold) + # Bit 8: true = Undervoltage Alarm + # Bit 9: true = Unsafe to Start + # Bit 10: true = Earthlift open + - name: "Activity" + bit_start: 48 + - name: "RESERVED" + bit_start: 56 + # Filled with FF’s + + IMD isolation info: + CAN ID: 18EFF4FE + Length: 0 + signals: [] + + IMD voltage: + CAN ID: 18EFF4FE + Length: 0 + signals: [] + + IMD IT-system: + CAN ID: 18EFF4FE + Length: 0 + signals: [] + + IMD request: + CAN ID: 18EFF4FE + Length: 0 + signals: [] + + IMD response: + CAN ID: 23 + Length: 0 + signals: [] + + Charger Data: + CAN ID: 18FF50E5 + Length: 8 + signals: + - name: "Output Voltage" + bit_start: 0 + - name: "Output Current" + bit_start: 16 + - name: "Hardware Failure" + bit_start: 17 + # Bit 0: Hardware Failure: 0-Normal, 1-Error + - name: "OverTemp" + bit_start: 18 + # Bit 1: OverTemp: 0-Normal, 1-Error + - name: "Input Voltage Error" + bit_start: 19 + # Bit 2: Input Voltage: 0-Normal, 1-Wrong input voltage + - name: "Connection Error" + bit_start: 20 + # Bit 3: Starting State: 0-Correct, 1-Wrong polarity or NC + - name: "Communication State" + bit_start: 21 + # Bit 4: Communication State: 0-Normal, 1-Timeout + - name: "RESERVED" + bit_start: 24 + + Charger Control: + CAN ID: 1806E5F4 + Length: 5 + signals: + - name: "Set Voltage" + bit_start: 0 + - name: "Set Current" + bit_start: 16 + - name: "Charge Enable" + bit_start: 17 + # 1: Start Charging + # 0: Stop Charging + + EM Measurement: + CAN ID: 10d + Length: 8 + signals: + - name: "Current" + bit_start: 0 + # TS Current + - name: "Voltage" + bit_start: 32 + # TS Voltage + + EM Status: + CAN ID: 40d + Length: 8 + signals: + - name: "Violation" + bit_start: 0 + # Violation occured? + - name: "Logging" + bit_start: 1 + # Logging enabled? + - name: "Energy" + bit_start: 8 + # Energy used in Wh + + EM Temperature: + CAN ID: 60d + Length: 8 + signals: + - name: "Mux Signal" + bit_start: 0-2 + # n = [0-6] + - name: "Num Sensors" + bit_start: 3-7 + # Number of sensors up to 32 + - name: "Min Temp" + bit_start: 8 + # Min temp of all sensors + - name: "Max Temp" + bit_start: 16 + # Max temp of all sensors + - name: "Temp 5n" + bit_start: 24 + # [0,5,10,15,20,25,30] based on n above + - name: "Temp 5n+1" + bit_start: 32 + - name: "Temp 5n+2" + bit_start: 40 + - name: "Temp 5n+3" + bit_start: 48 + - name: "Temp 5n+4" + bit_start: 56 + + EM Team Data 1: + CAN ID: 30d + Length: 8 + signals: + - name: "Team Signal 1" + bit_start: 0 + # Fuck if I know + - name: "Team Signal 2" + bit_start: 32 + # Fuck if I know + + EM Team Data 2: + CAN ID: 30e + Length: 8 + signals: + - name: "Team Signal 3" + bit_start: 0 + # Fuck if I know + - name: "Team Signal 4" + bit_start: 32 + # Fuck if I know + +GR ID: + CCU : "0x2A" + DTI Inverter: "0x00" + Energy Meter: "0x00" + Charger: "0x00" + IMD: "0x00" + Debugger: "0x01" + ECU: "0x02" + ACU: "0x03" + TCM: "0x04" + Dash Panel: "0x05" + Steering Wheel: "0x06" + GR Inverter 1: "0x08" + GR Inverter 2: "0x09" + GR Inverter 3: "0x0A" + GR Inverter 4: "0x0B" + Charging SDC: "0x0C" + Fan Controller 1: "0x0D" + Fan Controller 2: "0x0E" + Fan Controller 3: "0x0F" + Fan Controller 4: "0x10" + Fan Controller 5: "0x11" + Fan Controller 6: "0x12" + Fan Controller 7: "0x13" + Fan Controller 8: "0x14" + SAM1: "0x15" + SAM2: "0x16" + SAM3: "0x17" + SAM4: "0x18" + SAM5: "0x19" + SAM6: "0x1A" + SAM7: "0x1B" + SAM8: "0x1C" + SAM9: "0x1D" + SAM10: "0x1E" + SAM11: "0x1F" + SAM12: "0x20" + SAM13: "0x21" + SAM14: "0x22" + SAM15: "0x23" + SAM16: "0x24" + SAM17: "0x25" + SAM18: "0x26" + SAM19: "0x27" + SAM20: "0x28" + LV DC-DC: "0x29" + DGPS: "0x30" + ALL: "0xFF" diff --git a/Autogen/CAN/Doc/output.dbc b/Autogen/CAN/Doc/output.dbc new file mode 100644 index 000000000..8ee9813c6 --- /dev/null +++ b/Autogen/CAN/Doc/output.dbc @@ -0,0 +1,1312 @@ +VERSION "" + +NS_ : + +BS_: + +BU_: ACU Charger Charging_SDC DGPS DTI_Inverter Dash_Panel Debugger ECU Energy_Meter Fan_Controller_1 Fan_Controller_2 Fan_Controller_3 Fan_Controller_4 Fan_Controller_5 Fan_Controller_6 Fan_Controller_7 Fan_Controller_8 GR_Inverter_1 GR_Inverter_2 GR_Inverter_3 GR_Inverter_4 IMD LV_DC_DC SAM1 SAM10 SAM11 SAM12 SAM13 SAM14 SAM15 SAM16 SAM17 SAM18 SAM19 SAM2 SAM20 SAM3 SAM4 SAM5 SAM6 SAM7 SAM8 SAM9 Steering_Wheel TCM ALL + +BO_ 2147680257 ACU_Debug_2_0_to_Debugger: 8 ACU + SG_ Debug : 0|64@1- (1,0) [0|0] "" Debugger + +BO_ 2147680769 ACU_Ping_to_Debugger: 4 ACU + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2147680770 ACU_Ping_to_ECU: 4 ACU + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2147682050 ACU_ACU_Status_1_to_ECU: 8 ACU + SG_ Accumulator_Voltage : 0|16@1+ (0.01,0) [0|655.35] "Volts" ECU + SG_ TS_Voltage : 16|16@1+ (0.01,0) [0|655.35] "Volts" ECU + SG_ Accumulator_Current : 32|16@1- (0.01,0) [-327.68|327.67] "Amps" ECU + SG_ Accumulator_SOC : 48|8@1+ (0.392157,0) [0|100] "%" ECU + SG_ GLV_SOC : 56|8@1+ (0.392157,0) [0|100] "%" ECU + +BO_ 2147682306 ACU_ACU_Status_2_to_ECU: 7 ACU + SG_ 20v_Voltage : 0|8@1+ (0.1,0) [0|25.5] "Volts" ECU + SG_ 12v_Voltage : 8|8@1+ (0.1,0) [0|25.5] "Volts" ECU + SG_ SDC_Voltage : 16|8@1+ (0.1,0) [0|25.5] "Volts" ECU + SG_ Min_Cell_Voltage : 24|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Max_Cell_Temp : 32|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Over_Temp_Error : 40|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Over_Voltage_Error : 41|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Under_Voltage_Error : 42|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Over_Current_Error : 43|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Under_Current_Error : 44|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Under_Voltage_20v_Warning : 45|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Under_Voltage_12v_Warning : 46|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Under_Voltage_SDC_Warning : 47|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Precharge_Error : 48|1@1+ (1,0) [0|0] "Bool" ECU + SG_ IR__Precharge_State : 49|1@1+ (1,0) [0|0] "Bool" ECU + SG_ IR_State : 50|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Software_Latch : 51|1@1+ (1,0) [0|0] "Bool" ECU + +BO_ 2147682562 ACU_ACU_Status_3_to_ECU: 8 ACU + SG_ HV_Input_Voltage : 0|16@1+ (0.01,0) [0|655.35] "Volts" ECU + SG_ HV_Output_Voltage : 16|16@1+ (0.01,0) [0|655.35] "Volts" ECU + SG_ HV_Input_Current : 32|16@1+ (0.001,0) [0|65.535] "Amps" ECU + SG_ HV_Output_Current : 48|16@1+ (0.001,0) [0|65.535] "Amps" ECU + +BO_ 2147684866 ACU_DC_DC_Status_to_ECU: 7 ACU + SG_ Input_Voltage : 0|16@1+ (0.001,0) [0|65.535] "Volts" ECU + SG_ Output_Voltage : 16|16@1+ (0.001,0) [0|65.535] "Volts" ECU + SG_ Input_Current : 32|8@1+ (0.1,0) [0|25.5] "Amps" ECU + SG_ Output_Current : 40|8@1+ (0.1,0) [0|25.5] "Amps" ECU + SG_ DC_DC_Temp : 48|8@1+ (1,0) [0|255] "Celsius" ECU + +BO_ 2147680513 ACU_Debug_FD_to_Debugger: 64 ACU + SG_ Debug : 0|64@1- (1,0) [0|0] "" Debugger + +BO_ 2147680769 ACU_Ping_to_Debugger: 4 ACU + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2147680770 ACU_Ping_to_ECU: 4 ACU + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2147683586 ACU_ACU_Cell_Data_1_to_ECU: 64 ACU + SG_ Cell_0_Voltage : 0|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_0_Temp : 8|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_1_Voltage : 16|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_1_Temp : 24|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_2_Voltage : 32|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_2_Temp : 40|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_3_Voltage : 48|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_3_Temp : 56|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_4_Voltage : 64|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_4_Temp : 72|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_5_Voltage : 80|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_5_Temp : 88|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_6_Voltage : 96|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_6_Temp : 104|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_7_Voltage : 112|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_7_Temp : 120|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_8_Voltage : 128|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_8_Temp : 136|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_9_Voltage : 144|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_9_Temp : 152|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_10_Voltage : 160|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_10_Temp : 168|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_11_Voltage : 176|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_11_Temp : 184|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_12_Voltage : 192|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_12_Temp : 200|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_13_Voltage : 208|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_13_Temp : 216|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_14_Voltage : 224|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_14_Temp : 232|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_15_Voltage : 240|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_15_Temp : 248|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_16_Voltage : 256|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_16_Temp : 264|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_17_Voltage : 272|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_17_Temp : 280|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_18_Voltage : 288|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_18_Temp : 296|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_19_Voltage : 304|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_19_Temp : 312|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_20_Voltage : 320|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_20_Temp : 328|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_21_Voltage : 336|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_21_Temp : 344|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_22_Voltage : 352|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_22_Temp : 360|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_23_Voltage : 368|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_23_Temp : 376|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_24_Voltage : 384|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_24_Temp : 392|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_25_Voltage : 400|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_25_Temp : 408|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_26_Voltage : 416|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_26_Temp : 424|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_27_Voltage : 432|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_27_Temp : 440|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_28_Voltage : 448|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_28_Temp : 456|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_29_Voltage : 464|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_29_Temp : 472|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_30_Voltage : 480|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_30_Temp : 488|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_31_Voltage : 496|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_31_Temp : 504|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + +BO_ 2147683842 ACU_ACU_Cell_Data_2_to_ECU: 64 ACU + SG_ Cell_32_Voltage : 0|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_32_Temp : 8|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_33_Voltage : 16|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_33_Temp : 24|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_34_Voltage : 32|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_34_Temp : 40|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_35_Voltage : 48|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_35_Temp : 56|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_36_Voltage : 64|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_36_Temp : 72|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_37_Voltage : 80|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_37_Temp : 88|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_38_Voltage : 96|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_38_Temp : 104|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_39_Voltage : 112|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_39_Temp : 120|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_40_Voltage : 128|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_40_Temp : 136|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_41_Voltage : 144|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_41_Temp : 152|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_42_Voltage : 160|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_42_Temp : 168|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_43_Voltage : 176|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_43_Temp : 184|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_44_Voltage : 192|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_44_Temp : 200|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_45_Voltage : 208|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_45_Temp : 216|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_46_Voltage : 224|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_46_Temp : 232|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_47_Voltage : 240|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_47_Temp : 248|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_48_Voltage : 256|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_48_Temp : 264|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_49_Voltage : 272|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_49_Temp : 280|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_50_Voltage : 288|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_50_Temp : 296|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_51_Voltage : 304|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_51_Temp : 312|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_52_Voltage : 320|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_52_Temp : 328|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_53_Voltage : 336|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_53_Temp : 344|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_54_Voltage : 352|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_54_Temp : 360|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_55_Voltage : 368|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_55_Temp : 376|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_56_Voltage : 384|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_56_Temp : 392|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_57_Voltage : 400|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_57_Temp : 408|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_58_Voltage : 416|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_58_Temp : 424|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_59_Voltage : 432|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_59_Temp : 440|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_60_Voltage : 448|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_60_Temp : 456|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_61_Voltage : 464|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_61_Temp : 472|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_62_Voltage : 480|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_62_Temp : 488|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_63_Voltage : 496|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_63_Temp : 504|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + +BO_ 2147684098 ACU_ACU_Cell_Data_3_to_ECU: 64 ACU + SG_ Cell_64_Voltage : 0|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_64_Temp : 8|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_65_Voltage : 16|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_65_Temp : 24|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_66_Voltage : 32|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_66_Temp : 40|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_67_Voltage : 48|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_67_Temp : 56|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_68_Voltage : 64|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_68_Temp : 72|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_69_Voltage : 80|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_69_Temp : 88|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_70_Voltage : 96|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_70_Temp : 104|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_71_Voltage : 112|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_71_Temp : 120|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_72_Voltage : 128|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_72_Temp : 136|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_73_Voltage : 144|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_73_Temp : 152|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_74_Voltage : 160|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_74_Temp : 168|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_75_Voltage : 176|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_75_Temp : 184|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_76_Voltage : 192|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_76_Temp : 200|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_77_Voltage : 208|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_77_Temp : 216|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_78_Voltage : 224|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_78_Temp : 232|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_79_Voltage : 240|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_79_Temp : 248|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_80_Voltage : 256|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_80_Temp : 264|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_81_Voltage : 272|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_81_Temp : 280|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_82_Voltage : 288|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_82_Temp : 296|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_83_Voltage : 304|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_83_Temp : 312|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_84_Voltage : 320|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_84_Temp : 328|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_85_Voltage : 336|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_85_Temp : 344|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_86_Voltage : 352|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_86_Temp : 360|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_87_Voltage : 368|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_87_Temp : 376|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_88_Voltage : 384|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_88_Temp : 392|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_89_Voltage : 400|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_89_Temp : 408|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_90_Voltage : 416|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_90_Temp : 424|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_91_Voltage : 432|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_91_Temp : 440|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_92_Voltage : 448|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_92_Temp : 456|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_93_Voltage : 464|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_93_Temp : 472|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_94_Voltage : 480|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_94_Temp : 488|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_95_Voltage : 496|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_95_Temp : 504|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + +BO_ 2147684354 ACU_ACU_Cell_Data_4_to_ECU: 64 ACU + SG_ Cell_96_Voltage : 0|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_96_Temp : 8|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_97_Voltage : 16|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_97_Temp : 24|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_98_Voltage : 32|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_98_Temp : 40|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_99_Voltage : 48|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_99_Temp : 56|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_100_Voltage : 64|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_100_Temp : 72|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_101_Voltage : 80|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_101_Temp : 88|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_102_Voltage : 96|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_102_Temp : 104|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_103_Voltage : 112|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_103_Temp : 120|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_104_Voltage : 128|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_104_Temp : 136|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_105_Voltage : 144|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_105_Temp : 152|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_106_Voltage : 160|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_106_Temp : 168|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_107_Voltage : 176|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_107_Temp : 184|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_108_Voltage : 192|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_108_Temp : 200|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_109_Voltage : 208|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_109_Temp : 216|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_110_Voltage : 224|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_110_Temp : 232|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_111_Voltage : 240|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_111_Temp : 248|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_112_Voltage : 256|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_112_Temp : 264|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_113_Voltage : 272|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_113_Temp : 280|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_114_Voltage : 288|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_114_Temp : 296|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_115_Voltage : 304|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_115_Temp : 312|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_116_Voltage : 320|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_116_Temp : 328|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_117_Voltage : 336|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_117_Temp : 344|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_118_Voltage : 352|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_118_Temp : 360|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_119_Voltage : 368|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_119_Temp : 376|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_120_Voltage : 384|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_120_Temp : 392|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_121_Voltage : 400|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_121_Temp : 408|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_122_Voltage : 416|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_122_Temp : 424|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_123_Voltage : 432|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_123_Temp : 440|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_124_Voltage : 448|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_124_Temp : 456|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_125_Voltage : 464|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_125_Temp : 472|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_126_Voltage : 480|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_126_Temp : 488|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_127_Voltage : 496|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_127_Temp : 504|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + +BO_ 2147684610 ACU_ACU_Cell_Data_5_to_ECU: 64 ACU + SG_ Cell_128_Voltage : 0|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_128_Temp : 8|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_129_Voltage : 16|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_129_Temp : 24|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_130_Voltage : 32|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_130_Temp : 40|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_131_Voltage : 48|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_131_Temp : 56|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_132_Voltage : 64|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_132_Temp : 72|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_133_Voltage : 80|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_133_Temp : 88|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_134_Voltage : 96|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_134_Temp : 104|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_135_Voltage : 112|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_135_Temp : 120|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_136_Voltage : 128|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_136_Temp : 136|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_137_Voltage : 144|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_137_Temp : 152|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_138_Voltage : 160|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_138_Temp : 168|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_139_Voltage : 176|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_139_Temp : 184|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_140_Voltage : 192|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_140_Temp : 200|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_141_Voltage : 208|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_141_Temp : 216|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_142_Voltage : 224|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_142_Temp : 232|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_143_Voltage : 240|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_143_Temp : 248|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_144_Voltage : 256|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_144_Temp : 264|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_145_Voltage : 272|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_145_Temp : 280|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_146_Voltage : 288|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_146_Temp : 296|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_147_Voltage : 304|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_147_Temp : 312|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_148_Voltage : 320|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_148_Temp : 328|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_149_Voltage : 336|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_149_Temp : 344|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_150_Voltage : 352|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_150_Temp : 360|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_151_Voltage : 368|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_151_Temp : 376|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_152_Voltage : 384|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_152_Temp : 392|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_153_Voltage : 400|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_153_Temp : 408|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_154_Voltage : 416|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_154_Temp : 424|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_155_Voltage : 432|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_155_Temp : 440|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_156_Voltage : 448|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_156_Temp : 456|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_157_Voltage : 464|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_157_Temp : 472|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_158_Voltage : 480|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_158_Temp : 488|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Cell_159_Voltage : 496|8@1+ (0.01,2) [2|4.55] "Volts" ECU + SG_ Cell_159_Temp : 504|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + +BO_ 2550588916 ACU_Charger_Control_to_Charger: 5 ACU + +BO_ 2566869221 Charger_Charger_Data_to_ACU: 8 Charger + +BO_ 2147811329 Dash_Panel_Debug_2_0_to_Debugger: 8 Dash_Panel + SG_ Debug : 0|64@1- (1,0) [0|0] "" Debugger + +BO_ 2147811841 Dash_Panel_Ping_to_Debugger: 4 Dash_Panel + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2147811842 Dash_Panel_Ping_to_ECU: 4 Dash_Panel + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2147817986 Dash_Panel_Dash_Status_to_ECU: 3 Dash_Panel + SG_ BMS_LED : 0|1@1+ (1,0) [0|0] "Bool" ECU + SG_ IMD_LED : 1|1@1+ (1,0) [0|0] "Bool" ECU + SG_ BSPD_LED : 2|1@1+ (1,0) [0|0] "Bool" ECU + SG_ TS_Button_Data : 8|8@1- (0.1,0) [0|12.7] "Seconds" ECU + SG_ RTD_Button_Data : 16|8@1- (0.1,0) [0|12.7] "Seconds" ECU + +BO_ 2147549186 Debugger_Debug_2_0_to_ECU: 8 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" ECU + +BO_ 2147549698 Debugger_Ping_to_ECU: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2147550722 Debugger_ECU_config_to_ECU: 0 Debugger + +BO_ 2147549187 Debugger_Debug_2_0_to_ACU: 8 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" ACU + +BO_ 2147549699 Debugger_Ping_to_ACU: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ACU + +BO_ 2147549188 Debugger_Debug_2_0_to_TCM: 8 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" TCM + +BO_ 2147549700 Debugger_Ping_to_TCM: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" TCM + +BO_ 2147549189 Debugger_Debug_2_0_to_Dash_Panel: 8 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" Dash_Panel + +BO_ 2147549701 Debugger_Ping_to_Dash_Panel: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Dash_Panel + +BO_ 2147549192 Debugger_Debug_2_0_to_GR_Inverter_1: 8 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" GR_Inverter_1 + +BO_ 2147549704 Debugger_Ping_to_GR_Inverter_1: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" GR_Inverter_1 + +BO_ 2147549193 Debugger_Debug_2_0_to_GR_Inverter_2: 8 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" GR_Inverter_2 + +BO_ 2147549705 Debugger_Ping_to_GR_Inverter_2: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" GR_Inverter_2 + +BO_ 2147549194 Debugger_Debug_2_0_to_GR_Inverter_3: 8 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" GR_Inverter_3 + +BO_ 2147549706 Debugger_Ping_to_GR_Inverter_3: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" GR_Inverter_3 + +BO_ 2147549195 Debugger_Debug_2_0_to_GR_Inverter_4: 8 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" GR_Inverter_4 + +BO_ 2147549707 Debugger_Ping_to_GR_Inverter_4: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" GR_Inverter_4 + +BO_ 2147549197 Debugger_Debug_2_0_to_Fan_Controller_1: 8 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" Fan_Controller_1 + +BO_ 2147549709 Debugger_Ping_to_Fan_Controller_1: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Fan_Controller_1 + +BO_ 2147549198 Debugger_Debug_2_0_to_Fan_Controller_2: 8 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" Fan_Controller_2 + +BO_ 2147549710 Debugger_Ping_to_Fan_Controller_2: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Fan_Controller_2 + +BO_ 2147549199 Debugger_Debug_2_0_to_Fan_Controller_3: 8 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" Fan_Controller_3 + +BO_ 2147549711 Debugger_Ping_to_Fan_Controller_3: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Fan_Controller_3 + +BO_ 2147549200 Debugger_Debug_2_0_to_Fan_Controller_4: 8 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" Fan_Controller_4 + +BO_ 2147549712 Debugger_Ping_to_Fan_Controller_4: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Fan_Controller_4 + +BO_ 2147549201 Debugger_Debug_2_0_to_Fan_Controller_5: 8 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" Fan_Controller_5 + +BO_ 2147549713 Debugger_Ping_to_Fan_Controller_5: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Fan_Controller_5 + +BO_ 2147549202 Debugger_Debug_2_0_to_Fan_Controller_6: 8 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" Fan_Controller_6 + +BO_ 2147549714 Debugger_Ping_to_Fan_Controller_6: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Fan_Controller_6 + +BO_ 2147549203 Debugger_Debug_2_0_to_Fan_Controller_7: 8 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" Fan_Controller_7 + +BO_ 2147549715 Debugger_Ping_to_Fan_Controller_7: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Fan_Controller_7 + +BO_ 2147549204 Debugger_Debug_2_0_to_Fan_Controller_8: 8 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" Fan_Controller_8 + +BO_ 2147549716 Debugger_Ping_to_Fan_Controller_8: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Fan_Controller_8 + +BO_ 2147549225 Debugger_Debug_2_0_to_LV_DC_DC: 8 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" LV_DC_DC + +BO_ 2147549737 Debugger_Ping_to_LV_DC_DC: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" LV_DC_DC + +BO_ 2147549737 Debugger_Ping_to_LV_DC_DC: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" LV_DC_DC + +BO_ 2147549442 Debugger_Debug_FD_to_ECU: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" ECU + +BO_ 2147549698 Debugger_Ping_to_ECU: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2147549443 Debugger_Debug_FD_to_ACU: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" ACU + +BO_ 2147549699 Debugger_Ping_to_ACU: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ACU + +BO_ 2147549444 Debugger_Debug_FD_to_TCM: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" TCM + +BO_ 2147549700 Debugger_Ping_to_TCM: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" TCM + +BO_ 2147549446 Debugger_Debug_FD_to_Steering_Wheel: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" Steering_Wheel + +BO_ 2147549702 Debugger_Ping_to_Steering_Wheel: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Steering_Wheel + +BO_ 2147549461 Debugger_Debug_FD_to_SAM1: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM1 + +BO_ 2147549717 Debugger_Ping_to_SAM1: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM1 + +BO_ 2147549462 Debugger_Debug_FD_to_SAM2: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM2 + +BO_ 2147549718 Debugger_Ping_to_SAM2: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM2 + +BO_ 2147549463 Debugger_Debug_FD_to_SAM3: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM3 + +BO_ 2147549719 Debugger_Ping_to_SAM3: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM3 + +BO_ 2147549464 Debugger_Debug_FD_to_SAM4: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM4 + +BO_ 2147549720 Debugger_Ping_to_SAM4: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM4 + +BO_ 2147549465 Debugger_Debug_FD_to_SAM5: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM5 + +BO_ 2147549721 Debugger_Ping_to_SAM5: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM5 + +BO_ 2147549466 Debugger_Debug_FD_to_SAM6: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM6 + +BO_ 2147549722 Debugger_Ping_to_SAM6: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM6 + +BO_ 2147549467 Debugger_Debug_FD_to_SAM7: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM7 + +BO_ 2147549723 Debugger_Ping_to_SAM7: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM7 + +BO_ 2147549468 Debugger_Debug_FD_to_SAM8: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM8 + +BO_ 2147549724 Debugger_Ping_to_SAM8: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM8 + +BO_ 2147549469 Debugger_Debug_FD_to_SAM9: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM9 + +BO_ 2147549725 Debugger_Ping_to_SAM9: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM9 + +BO_ 2147549470 Debugger_Debug_FD_to_SAM10: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM10 + +BO_ 2147549726 Debugger_Ping_to_SAM10: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM10 + +BO_ 2147549471 Debugger_Debug_FD_to_SAM11: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM11 + +BO_ 2147549727 Debugger_Ping_to_SAM11: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM11 + +BO_ 2147549472 Debugger_Debug_FD_to_SAM12: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM12 + +BO_ 2147549728 Debugger_Ping_to_SAM12: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM12 + +BO_ 2147549473 Debugger_Debug_FD_to_SAM13: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM13 + +BO_ 2147549729 Debugger_Ping_to_SAM13: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM13 + +BO_ 2147549474 Debugger_Debug_FD_to_SAM14: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM14 + +BO_ 2147549730 Debugger_Ping_to_SAM14: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM14 + +BO_ 2147549475 Debugger_Debug_FD_to_SAM15: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM15 + +BO_ 2147549731 Debugger_Ping_to_SAM15: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM15 + +BO_ 2147549476 Debugger_Debug_FD_to_SAM16: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM16 + +BO_ 2147549732 Debugger_Ping_to_SAM16: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM16 + +BO_ 2147549477 Debugger_Debug_FD_to_SAM17: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM17 + +BO_ 2147549733 Debugger_Ping_to_SAM17: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM17 + +BO_ 2147549478 Debugger_Debug_FD_to_SAM18: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM18 + +BO_ 2147549734 Debugger_Ping_to_SAM18: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM18 + +BO_ 2147549479 Debugger_Debug_FD_to_SAM19: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM19 + +BO_ 2147549735 Debugger_Ping_to_SAM19: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM19 + +BO_ 2147549480 Debugger_Debug_FD_to_SAM20: 64 Debugger + SG_ Debug : 0|64@1- (1,0) [0|0] "" SAM20 + +BO_ 2147549736 Debugger_Ping_to_SAM20: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" SAM20 + +BO_ 2147549708 Debugger_Ping_to_Charging_SDC: 4 Debugger + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Charging_SDC + +BO_ 2147491862 DTI_Inverter_DTI_Data_1_to_ECU: 8 DTI_Inverter + +BO_ 2147492118 DTI_Inverter_DTI_Data_2_to_ECU: 8 DTI_Inverter + +BO_ 2147492374 DTI_Inverter_DTI_Data_3_to_ECU: 8 DTI_Inverter + +BO_ 2147492630 DTI_Inverter_DTI_Data_4_to_ECU: 8 DTI_Inverter + +BO_ 2147492886 DTI_Inverter_DTI_Data_5_to_ECU: 8 DTI_Inverter + +BO_ 278 ECU_DTI_Control_1_to_DTI_Inverter: 2 ECU + +BO_ 534 ECU_DTI_Control_2_to_DTI_Inverter: 2 ECU + +BO_ 790 ECU_DTI_Control_3_to_DTI_Inverter: 4 ECU + +BO_ 1046 ECU_DTI_Control_4_to_DTI_Inverter: 2 ECU + +BO_ 1302 ECU_DTI_Control_5_to_DTI_Inverter: 2 ECU + +BO_ 1558 ECU_DTI_Control_6_to_DTI_Inverter: 2 ECU + +BO_ 1814 ECU_DTI_Control_7_to_DTI_Inverter: 1 ECU + +BO_ 2147485718 ECU_DTI_Control_8_to_DTI_Inverter: 2 ECU + +BO_ 2147485974 ECU_DTI_Control_9_to_DTI_Inverter: 2 ECU + +BO_ 2147486230 ECU_DTI_Control_10_to_DTI_Inverter: 2 ECU + +BO_ 2147486486 ECU_DTI_Control_11_to_DTI_Inverter: 2 ECU + +BO_ 2147486742 ECU_DTI_Control_12_to_DTI_Inverter: 1 ECU + +BO_ 2147614721 ECU_Debug_2_0_to_Debugger: 8 ECU + SG_ Debug : 0|64@1- (1,0) [0|0] "" Debugger + +BO_ 2147615233 ECU_Ping_to_Debugger: 4 ECU + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2147615234 ECU_Ping_to_ECU: 4 ECU + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2147615490 ECU_ECU_Status_1_to_ECU: 8 ECU + SG_ ECU_State : 0|8@1+ (1,0) [0|0] "" ECU + SG_ ACU_Node_Status : 8|1@1+ (1,0) [0|0] "Bool" ECU + SG_ GR_Inv_1_Status : 9|1@1+ (1,0) [0|0] "Bool" ECU + SG_ GR_Inv_2_Status : 10|1@1+ (1,0) [0|0] "Bool" ECU + SG_ GR_Inv_3_Status : 11|1@1+ (1,0) [0|0] "Bool" ECU + SG_ GR_Inv_4_Status : 12|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Fan_Controller_1 : 13|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Fan_Controller_2 : 14|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Fan_Controller_3 : 15|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Fan_Controller_4 : 16|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Fan_Controller_5 : 17|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Fan_Controller_6 : 18|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Fan_Controller_7 : 19|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Fan_Controller_8 : 20|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Dash : 21|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Steering : 22|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Power_Level : 32|4@1+ (1,0) [0|0] "" ECU + SG_ Torque_Map : 36|4@1+ (1,0) [0|0] "" ECU + SG_ Max_Cell_Temp : 40|8@1+ (0.25,0) [0|63.75] "Celsius" ECU + SG_ Accumulator_State_of_Charge : 48|8@1+ (0.392157,0) [0|100] "%" ECU + SG_ GLV_State_of_Charge : 56|8@1+ (0.392157,0) [0|100] "%" ECU + +BO_ 2147615746 ECU_ECU_Status_2_to_ECU: 8 ECU + SG_ Tractive_System_Voltage : 0|16@1+ (0.01,0) [0|655.35] "Volts" ECU + SG_ Vehicle_Speed : 16|16@1+ (0.01,0) [0|655.35] "MPH" ECU + SG_ FR_Wheel_RPM : 32|16@1+ (0.1,-3276.8) [-3276.8|3276.7] "RPM" ECU + SG_ FL_Wheel_RPM : 48|16@1+ (0.1,-3276.8) [-3276.8|3276.7] "RPM" ECU + +BO_ 2147616002 ECU_ECU_Status_3_to_ECU: 4 ECU + SG_ RR_Wheel_RPM : 0|16@1+ (0.1,-3276.8) [-3276.8|3276.7] "RPM" ECU + SG_ RL_Wheel_RPM : 16|16@1+ (0.1,-3276.8) [-3276.8|3276.7] "RPM" ECU + +BO_ 2147617283 ECU_ACU_Precharge_to_ACU: 1 ECU + SG_ Set_TS_Active : 0|1@1+ (1,0) [0|0] "Bool" ACU + +BO_ 2147617539 ECU_ACU_Config_Charge_Parameters_to_ACU: 4 ECU + SG_ Charge_Voltage : 0|16@1+ (0.1,0) [0|6553.5] "Volts" ACU + SG_ Charge_Current : 16|16@1+ (0.1,0) [0|6553.5] "Amps" ACU + +BO_ 2147617795 ECU_ACU_Config_Operational_Parameters_to_ACU: 2 ECU + SG_ Minimium_Cell_Voltage : 0|8@1+ (0.01,2) [2|4.55] "Volts" ACU + SG_ Max_Cell_Temperature : 8|8@1+ (0.25,0) [0|63.75] "Celsius" ACU + +BO_ 2147620360 ECU_Inverter_Config_to_GR_Inverter_1: 7 ECU + SG_ Max_AC_Current : 0|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" GR_Inverter_1 + SG_ Max_DC_Current : 16|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" GR_Inverter_1 + SG_ Absolute_Max_RPM_Limit : 32|16@1+ (1,-32768) [-32768|32767] "RPM" GR_Inverter_1 + SG_ Motor_direction : 48|1@1+ (1,0) ["-"|"-"] "Enable" GR_Inverter_1 + +BO_ 2147620616 ECU_Inverter_Command_to_GR_Inverter_1: 8 ECU + SG_ Set_AC_Current : 0|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" GR_Inverter_1 + SG_ Set_DC_Current : 16|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" GR_Inverter_1 + SG_ RPM_Limit : 32|16@1+ (1,-32768) [-32768|32767] "RPM" GR_Inverter_1 + SG_ Field_weakening : 48|8@1+ (0.1,0) [0|25.5] "Amps" GR_Inverter_1 + SG_ Drive_enable : 56|1@1+ (1,0) ["-"|"-"] "Enable" GR_Inverter_1 + +BO_ 2147620361 ECU_Inverter_Config_to_GR_Inverter_2: 7 ECU + SG_ Max_AC_Current : 0|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" GR_Inverter_2 + SG_ Max_DC_Current : 16|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" GR_Inverter_2 + SG_ Absolute_Max_RPM_Limit : 32|16@1+ (1,-32768) [-32768|32767] "RPM" GR_Inverter_2 + SG_ Motor_direction : 48|1@1+ (1,0) ["-"|"-"] "Enable" GR_Inverter_2 + +BO_ 2147620617 ECU_Inverter_Command_to_GR_Inverter_2: 8 ECU + SG_ Set_AC_Current : 0|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" GR_Inverter_2 + SG_ Set_DC_Current : 16|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" GR_Inverter_2 + SG_ RPM_Limit : 32|16@1+ (1,-32768) [-32768|32767] "RPM" GR_Inverter_2 + SG_ Field_weakening : 48|8@1+ (0.1,0) [0|25.5] "Amps" GR_Inverter_2 + SG_ Drive_enable : 56|1@1+ (1,0) ["-"|"-"] "Enable" GR_Inverter_2 + +BO_ 2147620362 ECU_Inverter_Config_to_GR_Inverter_3: 7 ECU + SG_ Max_AC_Current : 0|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" GR_Inverter_3 + SG_ Max_DC_Current : 16|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" GR_Inverter_3 + SG_ Absolute_Max_RPM_Limit : 32|16@1+ (1,-32768) [-32768|32767] "RPM" GR_Inverter_3 + SG_ Motor_direction : 48|1@1+ (1,0) ["-"|"-"] "Enable" GR_Inverter_3 + +BO_ 2147620618 ECU_Inverter_Command_to_GR_Inverter_3: 8 ECU + SG_ Set_AC_Current : 0|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" GR_Inverter_3 + SG_ Set_DC_Current : 16|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" GR_Inverter_3 + SG_ RPM_Limit : 32|16@1+ (1,-32768) [-32768|32767] "RPM" GR_Inverter_3 + SG_ Field_weakening : 48|8@1+ (0.1,0) [0|25.5] "Amps" GR_Inverter_3 + SG_ Drive_enable : 56|1@1+ (1,0) ["-"|"-"] "Enable" GR_Inverter_3 + +BO_ 2147620363 ECU_Inverter_Config_to_GR_Inverter_4: 7 ECU + SG_ Max_AC_Current : 0|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" GR_Inverter_4 + SG_ Max_DC_Current : 16|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" GR_Inverter_4 + SG_ Absolute_Max_RPM_Limit : 32|16@1+ (1,-32768) [-32768|32767] "RPM" GR_Inverter_4 + SG_ Motor_direction : 48|1@1+ (1,0) ["-"|"-"] "Enable" GR_Inverter_4 + +BO_ 2147620619 ECU_Inverter_Command_to_GR_Inverter_4: 8 ECU + SG_ Set_AC_Current : 0|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" GR_Inverter_4 + SG_ Set_DC_Current : 16|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" GR_Inverter_4 + SG_ RPM_Limit : 32|16@1+ (1,-32768) [-32768|32767] "RPM" GR_Inverter_4 + SG_ Field_weakening : 48|8@1+ (0.1,0) [0|25.5] "Amps" GR_Inverter_4 + SG_ Drive_enable : 56|1@1+ (1,0) ["-"|"-"] "Enable" GR_Inverter_4 + +BO_ 2147621133 ECU_Fan_Command_to_Fan_Controller_1: 1 ECU + SG_ Fan_Command : 0|8@1+ (1,0) [0|255] "%" Fan_Controller_1 + +BO_ 2147621134 ECU_Fan_Command_to_Fan_Controller_2: 1 ECU + SG_ Fan_Command : 0|8@1+ (1,0) [0|255] "%" Fan_Controller_2 + +BO_ 2147621135 ECU_Fan_Command_to_Fan_Controller_3: 1 ECU + SG_ Fan_Command : 0|8@1+ (1,0) [0|255] "%" Fan_Controller_3 + +BO_ 2147621136 ECU_Fan_Command_to_Fan_Controller_4: 1 ECU + SG_ Fan_Command : 0|8@1+ (1,0) [0|255] "%" Fan_Controller_4 + +BO_ 2147621137 ECU_Fan_Command_to_Fan_Controller_5: 1 ECU + SG_ Fan_Command : 0|8@1+ (1,0) [0|255] "%" Fan_Controller_5 + +BO_ 2147621138 ECU_Fan_Command_to_Fan_Controller_6: 1 ECU + SG_ Fan_Command : 0|8@1+ (1,0) [0|255] "%" Fan_Controller_6 + +BO_ 2147621139 ECU_Fan_Command_to_Fan_Controller_7: 1 ECU + SG_ Fan_Command : 0|8@1+ (1,0) [0|255] "%" Fan_Controller_7 + +BO_ 2147621140 ECU_Fan_Command_to_Fan_Controller_8: 1 ECU + SG_ Fan_Command : 0|8@1+ (1,0) [0|255] "%" Fan_Controller_8 + +BO_ 2147621637 ECU_Dash_Config_to_Dash_Panel: 7 ECU + SG_ BMS_LED : 0|1@1+ (1,0) [0|0] "Bool" Dash_Panel + SG_ IMD_LED : 1|1@1+ (1,0) [0|0] "Bool" Dash_Panel + SG_ BSPD_LED : 2|1@1+ (1,0) [0|0] "Bool" Dash_Panel + SG_ Button_LED_1_R : 8|8@1+ (1,0) [0|255] "RGB" Dash_Panel + SG_ Button_LED_1_G : 16|8@1+ (1,0) [0|255] "RGB" Dash_Panel + SG_ Button_LED_1_B : 24|8@1+ (1,0) [0|255] "RGB" Dash_Panel + SG_ Button_LED_2_R : 32|8@1+ (1,0) [0|255] "RGB" Dash_Panel + SG_ Button_LED_2_G : 40|8@1+ (1,0) [0|255] "RGB" Dash_Panel + SG_ Button_LED_2_B : 48|8@1+ (1,0) [0|255] "RGB" Dash_Panel + +BO_ 2147625733 ECU_Dash_Warning_Flags_to_Dash_Panel: 1 ECU + SG_ BSE_APPS_Violation : 0|1@1+ (1,0) [0|0] "Bool" Dash_Panel + +BO_ 2147625989 ECU_Specific_Brake_IR_to_Dash_Panel: 2 ECU + SG_ Wheel_identifier : 0|8@1+ (1,0) [0|0] "" Dash_Panel + SG_ Temp : 8|8@1+ (1,0) [0|255] "Celsius" Dash_Panel + +BO_ 2147614977 ECU_Debug_FD_to_Debugger: 64 ECU + SG_ Debug : 0|64@1- (1,0) [0|0] "" Debugger + +BO_ 2147615233 ECU_Ping_to_Debugger: 4 ECU + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2147615234 ECU_Ping_to_ECU: 4 ECU + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2147622150 ECU_Steering_Config_to_Steering_Wheel: 0 ECU + +BO_ 2147626246 ECU_ECU_Ping_Information_to_Steering_Wheel: 3 ECU + SG_ Online_pings : 0|24@1+ (1,0) [0|0] "Bool map" Steering_Wheel + +BO_ 2181169152 ECU_ECU_Pedals_Data_to_TCM: 10 ECU + SG_ APPS1_SIGNAL : 0|16@1+ (0.0015259,0) [0|100] "%" TCM + SG_ APPS2_SIGNAL : 16|16@1+ (0.0015259,0) [0|100] "%" TCM + SG_ BSE_SIGNAL : 32|16@1+ (0.0015259,0) [0|100] "%" TCM + SG_ BRAKE_R_SIGNAL : 48|16@1+ (0.0015259,0) [0|100] "%" TCM + SG_ BRAKE_F_SIGNAL : 48|16@1+ (0.0015259,0) [0|100] "%" TCM + +BO_ 269 Energy_Meter_EM_Measurement_to_ACU: 8 Energy_Meter + +BO_ 781 Energy_Meter_EM_Team_Data_1_to_ACU: 8 Energy_Meter + +BO_ 782 Energy_Meter_EM_Team_Data_2_to_ACU: 8 Energy_Meter + +BO_ 1037 Energy_Meter_EM_Status_to_ACU: 8 Energy_Meter + +BO_ 1549 Energy_Meter_EM_Temperature_to_ACU: 8 Energy_Meter + +BO_ 2148335617 Fan_Controller_1_Debug_2_0_to_Debugger: 8 Fan_Controller_1 + SG_ Debug : 0|64@1- (1,0) [0|0] "" Debugger + +BO_ 2148336129 Fan_Controller_1_Ping_to_Debugger: 4 Fan_Controller_1 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2148336130 Fan_Controller_1_Ping_to_ECU: 4 Fan_Controller_1 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2148341762 Fan_Controller_1_Fan_Status_to_ECU: 4 Fan_Controller_1 + SG_ Fan_Speed : 0|16@1+ (1,0) [0|65535] "RPM" ECU + SG_ Input_Voltage : 16|8@1+ (0.1,0) [0|25.5] "Volts" ECU + SG_ Input_Current : 24|8@1+ (0.1,0) [0|25.5] "Amps" ECU + +BO_ 2148401153 Fan_Controller_2_Debug_2_0_to_Debugger: 8 Fan_Controller_2 + SG_ Debug : 0|64@1- (1,0) [0|0] "" Debugger + +BO_ 2148401665 Fan_Controller_2_Ping_to_Debugger: 4 Fan_Controller_2 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2148401666 Fan_Controller_2_Ping_to_ECU: 4 Fan_Controller_2 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2148407298 Fan_Controller_2_Fan_Status_to_ECU: 4 Fan_Controller_2 + SG_ Fan_Speed : 0|16@1+ (1,0) [0|65535] "RPM" ECU + SG_ Input_Voltage : 16|8@1+ (0.1,0) [0|25.5] "Volts" ECU + SG_ Input_Current : 24|8@1+ (0.1,0) [0|25.5] "Amps" ECU + +BO_ 2148466689 Fan_Controller_3_Debug_2_0_to_Debugger: 8 Fan_Controller_3 + SG_ Debug : 0|64@1- (1,0) [0|0] "" Debugger + +BO_ 2148467201 Fan_Controller_3_Ping_to_Debugger: 4 Fan_Controller_3 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2148467202 Fan_Controller_3_Ping_to_ECU: 4 Fan_Controller_3 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2148472834 Fan_Controller_3_Fan_Status_to_ECU: 4 Fan_Controller_3 + SG_ Fan_Speed : 0|16@1+ (1,0) [0|65535] "RPM" ECU + SG_ Input_Voltage : 16|8@1+ (0.1,0) [0|25.5] "Volts" ECU + SG_ Input_Current : 24|8@1+ (0.1,0) [0|25.5] "Amps" ECU + +BO_ 2148532225 Fan_Controller_4_Debug_2_0_to_Debugger: 8 Fan_Controller_4 + SG_ Debug : 0|64@1- (1,0) [0|0] "" Debugger + +BO_ 2148532737 Fan_Controller_4_Ping_to_Debugger: 4 Fan_Controller_4 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2148532738 Fan_Controller_4_Ping_to_ECU: 4 Fan_Controller_4 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2148538370 Fan_Controller_4_Fan_Status_to_ECU: 4 Fan_Controller_4 + SG_ Fan_Speed : 0|16@1+ (1,0) [0|65535] "RPM" ECU + SG_ Input_Voltage : 16|8@1+ (0.1,0) [0|25.5] "Volts" ECU + SG_ Input_Current : 24|8@1+ (0.1,0) [0|25.5] "Amps" ECU + +BO_ 2148597761 Fan_Controller_5_Debug_2_0_to_Debugger: 8 Fan_Controller_5 + SG_ Debug : 0|64@1- (1,0) [0|0] "" Debugger + +BO_ 2148598273 Fan_Controller_5_Ping_to_Debugger: 4 Fan_Controller_5 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2148598274 Fan_Controller_5_Ping_to_ECU: 4 Fan_Controller_5 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2148603906 Fan_Controller_5_Fan_Status_to_ECU: 4 Fan_Controller_5 + SG_ Fan_Speed : 0|16@1+ (1,0) [0|65535] "RPM" ECU + SG_ Input_Voltage : 16|8@1+ (0.1,0) [0|25.5] "Volts" ECU + SG_ Input_Current : 24|8@1+ (0.1,0) [0|25.5] "Amps" ECU + +BO_ 2148663297 Fan_Controller_6_Debug_2_0_to_Debugger: 8 Fan_Controller_6 + SG_ Debug : 0|64@1- (1,0) [0|0] "" Debugger + +BO_ 2148663809 Fan_Controller_6_Ping_to_Debugger: 4 Fan_Controller_6 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2148663810 Fan_Controller_6_Ping_to_ECU: 4 Fan_Controller_6 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2148669442 Fan_Controller_6_Fan_Status_to_ECU: 4 Fan_Controller_6 + SG_ Fan_Speed : 0|16@1+ (1,0) [0|65535] "RPM" ECU + SG_ Input_Voltage : 16|8@1+ (0.1,0) [0|25.5] "Volts" ECU + SG_ Input_Current : 24|8@1+ (0.1,0) [0|25.5] "Amps" ECU + +BO_ 2148728833 Fan_Controller_7_Debug_2_0_to_Debugger: 8 Fan_Controller_7 + SG_ Debug : 0|64@1- (1,0) [0|0] "" Debugger + +BO_ 2148729345 Fan_Controller_7_Ping_to_Debugger: 4 Fan_Controller_7 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2148729346 Fan_Controller_7_Ping_to_ECU: 4 Fan_Controller_7 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2148734978 Fan_Controller_7_Fan_Status_to_ECU: 4 Fan_Controller_7 + SG_ Fan_Speed : 0|16@1+ (1,0) [0|65535] "RPM" ECU + SG_ Input_Voltage : 16|8@1+ (0.1,0) [0|25.5] "Volts" ECU + SG_ Input_Current : 24|8@1+ (0.1,0) [0|25.5] "Amps" ECU + +BO_ 2148794369 Fan_Controller_8_Debug_2_0_to_Debugger: 8 Fan_Controller_8 + SG_ Debug : 0|64@1- (1,0) [0|0] "" Debugger + +BO_ 2148794881 Fan_Controller_8_Ping_to_Debugger: 4 Fan_Controller_8 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2148794882 Fan_Controller_8_Ping_to_ECU: 4 Fan_Controller_8 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2148800514 Fan_Controller_8_Fan_Status_to_ECU: 4 Fan_Controller_8 + SG_ Fan_Speed : 0|16@1+ (1,0) [0|65535] "RPM" ECU + SG_ Input_Voltage : 16|8@1+ (0.1,0) [0|25.5] "Volts" ECU + SG_ Input_Current : 24|8@1+ (0.1,0) [0|25.5] "Amps" ECU + +BO_ 2148007937 GR_Inverter_1_Debug_2_0_to_Debugger: 8 GR_Inverter_1 + SG_ Debug : 0|64@1- (1,0) [0|0] "" Debugger + +BO_ 2148008449 GR_Inverter_1_Ping_to_Debugger: 4 GR_Inverter_1 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2148008450 GR_Inverter_1_Ping_to_ECU: 4 GR_Inverter_1 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2148012802 GR_Inverter_1_Inverter_Status_1_to_ECU: 6 GR_Inverter_1 + SG_ AC_current : 0|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" ECU + SG_ DC_current : 16|16@1+ (0.01,0) [0|655.35] "Amps" ECU + SG_ Motor_RPM : 32|16@1+ (1,-32768) [-32768|32767] "RPM" ECU + +BO_ 2148013058 GR_Inverter_1_Inverter_Status_2_to_ECU: 6 GR_Inverter_1 + SG_ U_MOSFET_temperature : 0|8@1+ (1,-40) [-40|215] "Celsius" ECU + SG_ V_MOSFET_temperature : 16|8@1+ (1,-40) [-40|215] "Celsius" ECU + SG_ W_MOSFET_temperature : 32|8@1+ (1,-40) [-40|215] "Celsius" ECU + +BO_ 2148013314 GR_Inverter_1_Inverter_Status_3_to_ECU: 2 GR_Inverter_1 + SG_ Motor_temperature : 0|8@1+ (1,-40) [-40|215] "Celsius" ECU + SG_ Over_voltage_faults : 16|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Under_voltage_fault : 17|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Inv_overtemp_fault : 18|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Motor_overtemp_fault : 19|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Transistor_fault : 20|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Encoder_fault : 21|1@1+ (1,0) [0|0] "Bool" ECU + SG_ CAN_fault : 22|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Future_use : 23|1@1+ (1,0) [0|0] "Bool" ECU + +BO_ 2148073473 GR_Inverter_2_Debug_2_0_to_Debugger: 8 GR_Inverter_2 + SG_ Debug : 0|64@1- (1,0) [0|0] "" Debugger + +BO_ 2148073985 GR_Inverter_2_Ping_to_Debugger: 4 GR_Inverter_2 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2148073986 GR_Inverter_2_Ping_to_ECU: 4 GR_Inverter_2 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2148078338 GR_Inverter_2_Inverter_Status_1_to_ECU: 6 GR_Inverter_2 + SG_ AC_current : 0|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" ECU + SG_ DC_current : 16|16@1+ (0.01,0) [0|655.35] "Amps" ECU + SG_ Motor_RPM : 32|16@1+ (1,-32768) [-32768|32767] "RPM" ECU + +BO_ 2148078594 GR_Inverter_2_Inverter_Status_2_to_ECU: 6 GR_Inverter_2 + SG_ U_MOSFET_temperature : 0|8@1+ (1,-40) [-40|215] "Celsius" ECU + SG_ V_MOSFET_temperature : 16|8@1+ (1,-40) [-40|215] "Celsius" ECU + SG_ W_MOSFET_temperature : 32|8@1+ (1,-40) [-40|215] "Celsius" ECU + +BO_ 2148078850 GR_Inverter_2_Inverter_Status_3_to_ECU: 2 GR_Inverter_2 + SG_ Motor_temperature : 0|8@1+ (1,-40) [-40|215] "Celsius" ECU + SG_ Over_voltage_faults : 16|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Under_voltage_fault : 17|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Inv_overtemp_fault : 18|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Motor_overtemp_fault : 19|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Transistor_fault : 20|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Encoder_fault : 21|1@1+ (1,0) [0|0] "Bool" ECU + SG_ CAN_fault : 22|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Future_use : 23|1@1+ (1,0) [0|0] "Bool" ECU + +BO_ 2148139009 GR_Inverter_3_Debug_2_0_to_Debugger: 8 GR_Inverter_3 + SG_ Debug : 0|64@1- (1,0) [0|0] "" Debugger + +BO_ 2148139521 GR_Inverter_3_Ping_to_Debugger: 4 GR_Inverter_3 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2148139522 GR_Inverter_3_Ping_to_ECU: 4 GR_Inverter_3 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2148143874 GR_Inverter_3_Inverter_Status_1_to_ECU: 6 GR_Inverter_3 + SG_ AC_current : 0|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" ECU + SG_ DC_current : 16|16@1+ (0.01,0) [0|655.35] "Amps" ECU + SG_ Motor_RPM : 32|16@1+ (1,-32768) [-32768|32767] "RPM" ECU + +BO_ 2148144130 GR_Inverter_3_Inverter_Status_2_to_ECU: 6 GR_Inverter_3 + SG_ U_MOSFET_temperature : 0|8@1+ (1,-40) [-40|215] "Celsius" ECU + SG_ V_MOSFET_temperature : 16|8@1+ (1,-40) [-40|215] "Celsius" ECU + SG_ W_MOSFET_temperature : 32|8@1+ (1,-40) [-40|215] "Celsius" ECU + +BO_ 2148144386 GR_Inverter_3_Inverter_Status_3_to_ECU: 2 GR_Inverter_3 + SG_ Motor_temperature : 0|8@1+ (1,-40) [-40|215] "Celsius" ECU + SG_ Over_voltage_faults : 16|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Under_voltage_fault : 17|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Inv_overtemp_fault : 18|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Motor_overtemp_fault : 19|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Transistor_fault : 20|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Encoder_fault : 21|1@1+ (1,0) [0|0] "Bool" ECU + SG_ CAN_fault : 22|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Future_use : 23|1@1+ (1,0) [0|0] "Bool" ECU + +BO_ 2148204545 GR_Inverter_4_Debug_2_0_to_Debugger: 8 GR_Inverter_4 + SG_ Debug : 0|64@1- (1,0) [0|0] "" Debugger + +BO_ 2148205057 GR_Inverter_4_Ping_to_Debugger: 4 GR_Inverter_4 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2148205058 GR_Inverter_4_Ping_to_ECU: 4 GR_Inverter_4 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2148209410 GR_Inverter_4_Inverter_Status_1_to_ECU: 6 GR_Inverter_4 + SG_ AC_current : 0|16@1+ (0.01,-327.68) [-327.68|327.67] "Amps" ECU + SG_ DC_current : 16|16@1+ (0.01,0) [0|655.35] "Amps" ECU + SG_ Motor_RPM : 32|16@1+ (1,-32768) [-32768|32767] "RPM" ECU + +BO_ 2148209666 GR_Inverter_4_Inverter_Status_2_to_ECU: 6 GR_Inverter_4 + SG_ U_MOSFET_temperature : 0|8@1+ (1,-40) [-40|215] "Celsius" ECU + SG_ V_MOSFET_temperature : 16|8@1+ (1,-40) [-40|215] "Celsius" ECU + SG_ W_MOSFET_temperature : 32|8@1+ (1,-40) [-40|215] "Celsius" ECU + +BO_ 2148209922 GR_Inverter_4_Inverter_Status_3_to_ECU: 2 GR_Inverter_4 + SG_ Motor_temperature : 0|8@1+ (1,-40) [-40|215] "Celsius" ECU + SG_ Over_voltage_faults : 16|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Under_voltage_fault : 17|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Inv_overtemp_fault : 18|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Motor_overtemp_fault : 19|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Transistor_fault : 20|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Encoder_fault : 21|1@1+ (1,0) [0|0] "Bool" ECU + SG_ CAN_fault : 22|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Future_use : 23|1@1+ (1,0) [0|0] "Bool" ECU + +BO_ 35 IMD_IMD_response_to_ACU: 0 IMD + +BO_ 2565862654 IMD_IMD_isolation_info_to_ACU: 0 IMD + +BO_ 2565862654 IMD_IMD_voltage_to_ACU: 0 IMD + +BO_ 2565862654 IMD_IMD_IT_system_to_ACU: 0 IMD + +BO_ 2565862654 IMD_IMD_request_to_ACU: 0 IMD + +BO_ 2565862654 IMD_IMD_request_to_ACU: 0 IMD + +BO_ 2566849012 IMD_IMD_general_to_ACU: 8 IMD + +BO_ 2150171137 LV_DC_DC_Ping_to_Debugger: 4 LV_DC_DC + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2150171138 LV_DC_DC_Ping_to_ECU: 4 LV_DC_DC + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2150175234 LV_DC_DC_DC_DC_Status_to_ECU: 7 LV_DC_DC + SG_ Input_Voltage : 0|16@1+ (0.001,0) [0|65.535] "Volts" ECU + SG_ Output_Voltage : 16|16@1+ (0.001,0) [0|65.535] "Volts" ECU + SG_ Input_Current : 32|8@1+ (0.1,0) [0|25.5] "Amps" ECU + SG_ Output_Current : 40|8@1+ (0.1,0) [0|25.5] "Amps" ECU + SG_ DC_DC_Temp : 48|8@1+ (1,0) [0|255] "Celsius" ECU + +BO_ 2148860417 SAM1_Ping_to_Debugger: 4 SAM1 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2148867586 SAM1_SAM_Brake_IR_to_ECU: 1 SAM1 + SG_ Temp : 0|8@1+ (1,0) [0|255] "Celsius" ECU + +BO_ 2148925953 SAM2_Ping_to_Debugger: 4 SAM2 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2148933122 SAM2_SAM_Brake_IR_to_ECU: 1 SAM2 + SG_ Temp : 0|8@1+ (1,0) [0|255] "Celsius" ECU + +BO_ 2148991489 SAM3_Ping_to_Debugger: 4 SAM3 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2148998658 SAM3_SAM_Brake_IR_to_ECU: 1 SAM3 + SG_ Temp : 0|8@1+ (1,0) [0|255] "Celsius" ECU + +BO_ 2149057025 SAM4_Ping_to_Debugger: 4 SAM4 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2149064194 SAM4_SAM_Brake_IR_to_ECU: 1 SAM4 + SG_ Temp : 0|8@1+ (1,0) [0|255] "Celsius" ECU + +BO_ 2149122561 SAM5_Ping_to_Debugger: 4 SAM5 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2149130242 SAM5_SAM_IMU_to_ECU: 12 SAM5 + SG_ Accel_X : 0|16@1+ (0.01,-327.68) [-327.68|327.67] "Meters/s^2" ECU + SG_ Accel_Y : 16|16@1+ (0.01,-327.68) [-327.68|327.67] "Meters/s^2" ECU + SG_ Accel_Z : 32|16@1+ (0.01,-327.68) [-327.68|327.67] "Meters/s^2" ECU + SG_ Gyro_X : 48|16@1+ (0.001,-32.768) [-32.768|32.767] "Meters/s^2" ECU + SG_ Gyro_Y : 64|16@1+ (0.001,-32.768) [-32.768|32.767] "Meters/s^2" ECU + SG_ Gyro_Z : 80|16@1+ (0.001,-32.768) [-32.768|32.767] "Meters/s^2" ECU + +BO_ 2149131778 SAM5_SAM_TOF_to_ECU: 2 SAM5 + SG_ Height : 0|16@1+ (0.00390625,0) [0|255] "mm" ECU + +BO_ 2149188097 SAM6_Ping_to_Debugger: 4 SAM6 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2149253633 SAM7_Ping_to_Debugger: 4 SAM7 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2149319169 SAM8_Ping_to_Debugger: 4 SAM8 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2149384705 SAM9_Ping_to_Debugger: 4 SAM9 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2149450241 SAM10_Ping_to_Debugger: 4 SAM10 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2149515777 SAM11_Ping_to_Debugger: 4 SAM11 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2149581313 SAM12_Ping_to_Debugger: 4 SAM12 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2149646849 SAM13_Ping_to_Debugger: 4 SAM13 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2149712385 SAM14_Ping_to_Debugger: 4 SAM14 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2149777921 SAM15_Ping_to_Debugger: 4 SAM15 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2149843457 SAM16_Ping_to_Debugger: 4 SAM16 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2149908993 SAM17_Ping_to_Debugger: 4 SAM17 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2149974529 SAM18_Ping_to_Debugger: 4 SAM18 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2150040065 SAM19_Ping_to_Debugger: 4 SAM19 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2150105601 SAM20_Ping_to_Debugger: 4 SAM20 + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2147877121 Steering_Wheel_Debug_FD_to_Debugger: 64 Steering_Wheel + SG_ Debug : 0|64@1- (1,0) [0|0] "" Debugger + +BO_ 2147877377 Steering_Wheel_Ping_to_Debugger: 4 Steering_Wheel + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2147877378 Steering_Wheel_Ping_to_ECU: 4 Steering_Wheel + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" ECU + +BO_ 2147884034 Steering_Wheel_Steering_Status_to_ECU: 2 Steering_Wheel + SG_ Current_Encoder : 0|4@1+ (1,0) [1|16] "Position" ECU + SG_ Torque_Map_Encoder : 4|4@1+ (1,0) [1|16] "Position" ECU + SG_ Regen : 8|4@1+ (1,0) [1|16] "Position" ECU + SG_ Button_1 : 12|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Button_2 : 13|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Button_3 : 14|1@1+ (1,0) [0|0] "Bool" ECU + SG_ Button_4 : 15|1@1+ (1,0) [0|0] "Bool" ECU + +BO_ 2147746305 TCM_Ping_to_Debugger: 4 TCM + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2147746305 TCM_Ping_to_Debugger: 4 TCM + SG_ Timestamp : 0|32@1+ (1,0) [0|4,294,967,296] "ms" Debugger + +BO_ 2147756294 TCM_TCM_Status_to_Steering_Wheel: 8 TCM + SG_ Connection_Status : 0|1@1+ (1,0) [0|0] "Bool" Steering_Wheel + SG_ MQTT_Status : 1|1@1+ (1,0) [0|0] "Bool" Steering_Wheel + SG_ Epic_Shelter_Status : 2|1@1+ (1,0) [0|0] "Bool" Steering_Wheel + SG_ Camera_Status : 3|1@1+ (1,0) [0|0] "Bool" Steering_Wheel + SG_ Ping : 8|16@1+ (1,0) [0|0] "ms" Steering_Wheel + SG_ Cache_Size : 24|32@1+ (1,0) [0|0] "#" Steering_Wheel + +BO_ 2147756550 TCM_TCM_Resource_Utilization_to_Steering_Wheel: 44 TCM + SG_ CPU_0_Freq : 0|16@1+ (1,0) [0|0] "%" Steering_Wheel + SG_ CPU_0_Util : 16|8@1+ (1,0) [0|0] "%" Steering_Wheel + SG_ CPU_1_Freq : 24|16@1+ (1,0) [0|0] "%" Steering_Wheel + SG_ CPU_1_Util : 40|8@1+ (1,0) [0|0] "" Steering_Wheel + SG_ CPU_2_Freq : 48|16@1+ (1,0) [0|0] "%" Steering_Wheel + SG_ CPU_2_Util : 64|8@1+ (1,0) [0|0] "" Steering_Wheel + SG_ CPU_3_Freq : 72|16@1+ (1,0) [0|0] "" Steering_Wheel + SG_ CPU_3_Util : 88|8@1+ (1,0) [0|0] "" Steering_Wheel + SG_ CPU_4_Freq : 96|16@1+ (1,0) [0|0] "" Steering_Wheel + SG_ CPU_4_Util : 112|8@1+ (1,0) [0|0] "" Steering_Wheel + SG_ CPU_5_Freq : 120|16@1+ (1,0) [0|0] "" Steering_Wheel + SG_ CPU_5_Util : 136|8@1+ (1,0) [0|0] "Watts" Steering_Wheel + SG_ CPU_Total_Util : 144|8@1+ (1,0) [0|0] "" Steering_Wheel + SG_ RAM_Total : 152|16@1+ (1,0) [0|0] "" Steering_Wheel + SG_ RAM_Used : 168|16@1+ (1,0) [0|0] "" Steering_Wheel + SG_ RAM_Util : 184|8@1+ (1,0) [0|0] "" Steering_Wheel + SG_ GPU_Util : 192|8@1+ (1,0) [0|0] "" Steering_Wheel + SG_ GPU_Freq : 200|16@1+ (1,0) [0|0] "" Steering_Wheel + SG_ Disk_Total : 216|32@1+ (1,0) [0|0] "" Steering_Wheel + SG_ Disk_Used : 248|32@1+ (1,0) [0|0] "" Steering_Wheel + SG_ Disk_Util : 280|8@1+ (1,0) [0|0] "Celsius" Steering_Wheel + SG_ CPU_Temp : 288|8@1+ (1,0) [0|0] "" Steering_Wheel + SG_ GPU_Temp : 296|8@1+ (1,0) [0|0] "" Steering_Wheel + SG_ Voltage_Draw : 304|16@1+ (1,0) [0|0] "" Steering_Wheel + SG_ Current_Draw : 320|16@1+ (1,0) [0|0] "" Steering_Wheel + SG_ Power_Draw : 336|16@1+ (1,0) [0|0] "Celsius" Steering_Wheel + +BO_ 2150641666 DGPS_UVW_DGPS_to_ECU: 6 DGPS + SG_ DGPS_U : 0|16@1- (0.01,0) [0|0] "" ECU + SG_ DGPS_V : 16|16@1- (0.01,0) [0|0] "" ECU + SG_ DGPS_W : 32|16@1- (0.01,0) [0|0] "" ECU + +BO_ 2150641922 DGPS_GPS_LAT_to_ECU: 8 DGPS + SG_ LAT : 0|64@1+ (1,0) [0|0] "" ECU + +BO_ 2150642178 DGPS_GPS_LON_to_ECU: 8 DGPS + SG_ LON : 0|64@1+ (1,0) [0|0] "" ECU + +BO_ 2150642434 DGPS_GPS_ALT_to_ECU: 8 DGPS + SG_ ALT : 0|64@1+ (1,0) [0|0] "" ECU + +BO_ 2150642690 DGPS_GPS_PX_to_ECU: 8 DGPS + SG_ Theta : 0|16@1- (0.001,0) [0|0] "" ECU + SG_ Acc : 16|16@1- (0.01,0) [0|0] "" ECU + SG_ status : 32|32@1+ (1,0) [0|0] "" ECU + +BO_ 2150642946 DGPS_GPS_QY_to_ECU: 8 DGPS + SG_ Theta : 0|16@1- (0.001,0) [0|0] "" ECU + SG_ Acc : 16|16@1- (0.01,0) [0|0] "" ECU + SG_ status : 32|32@1+ (1,0) [0|0] "" ECU + +BO_ 2150643202 DGPS_GPS_RZ_to_ECU: 8 DGPS + SG_ Theta : 0|16@1- (0.001,0) [0|0] "" ECU + SG_ Acc : 16|16@1- (0.01,0) [0|0] "" ECU + SG_ status : 32|32@1+ (1,0) [0|0] "" ECU + diff --git a/Autogen/CAN/Inc/CAN_msg_ID.h b/Autogen/CAN/Inc/CAN_msg_ID.h new file mode 100644 index 000000000..ea8f7ac59 --- /dev/null +++ b/Autogen/CAN/Inc/CAN_msg_ID.h @@ -0,0 +1,61 @@ +// Auto-generated CAN Message IDs +#ifndef CAN_MSG_IDS_H +#define CAN_MSG_IDS_H + +typedef enum { + MSG_DEBUG_2_0 = 0x000, + MSG_DEBUG_FD = 0x001, + MSG_PING = 0x002, + MSG_ECU_STATUS_1 = 0x003, + MSG_ECU_STATUS_2 = 0x004, + MSG_ECU_STATUS_3 = 0x005, + MSG_ECU_CONFIG = 0x006, + MSG_ACU_STATUS_1 = 0x007, + MSG_ACU_STATUS_2 = 0x008, + MSG_ACU_STATUS_3 = 0x009, + MSG_ACU_PRECHARGE = 0x00A, + MSG_ACU_CONFIG_CHARGE_PARAMETERS = 0x00B, + MSG_ACU_CONFIG_OPERATIONAL_PARAMETERS = 0x00C, + MSG_ACU_CELL_DATA_1 = 0x00D, + MSG_ACU_CELL_DATA_2 = 0x00E, + MSG_ACU_CELL_DATA_3 = 0x00F, + MSG_ACU_CELL_DATA_4 = 0x010, + MSG_ACU_CELL_DATA_5 = 0x011, + MSG_INVERTER_STATUS_1 = 0x013, + MSG_INVERTER_STATUS_2 = 0x014, + MSG_INVERTER_STATUS_3 = 0x015, + MSG_INVERTER_CONFIG = 0x016, + MSG_INVERTER_COMMAND = 0x017, + MSG_FAN_STATUS = 0x018, + MSG_FAN_COMMAND = 0x019, + MSG_DASH_STATUS = 0x01A, + MSG_DASH_CONFIG = 0x01B, + MSG_STEERING_STATUS = 0x01C, + MSG_STEERING_CONFIG = 0x01D, + MSG_SAM_BRAKE_IR = 0x01E, + MSG_SAM_TIRE_TEMP = 0x01F, + MSG_SAM_IMU = 0x020, + MSG_SAM_GPS_1 = 0x021, + MSG_SAM_GPS_2 = 0x022, + MSG_SAM_GPS_TIME = 0x023, + MSG_SAM_GPS_HEADING = 0x024, + MSG_SAM_SUS_POTS = 0x025, + MSG_SAM_TOF = 0x026, + MSG_SAM_REAR_WHEELSPEED = 0x027, + MSG_SAM_PUSHROD_FORCE = 0x028, + MSG_TCM_STATUS = 0x029, + MSG_TCM_RESOURCE_UTILIZATION = 0x02A, + MSG_DASH_WARNING_FLAGS = 0x02B, + MSG_SPECIFIC_BRAKE_IR = 0x02C, + MSG_ECU_PING_INFORMATION = 0x02D, + MSG_ECU_PEDALS_DATA = 0x02E, + MSG_GPS_LAT = 0x031, + MSG_GPS_LON = 0x032, + MSG_GPS_ALT = 0x033, + MSG_GPS_PX = 0x034, + MSG_GPS_QY = 0x035, + MSG_GPS_RZ = 0x036, + MSG_UVW_DGPS = 0x030, +} can_msg_id_t; + +#endif // CAN_MSG_IDS_H diff --git a/Autogen/CAN/Inc/Custom_CAN_ID.h b/Autogen/CAN/Inc/Custom_CAN_ID.h new file mode 100644 index 000000000..63a4f1580 --- /dev/null +++ b/Autogen/CAN/Inc/Custom_CAN_ID.h @@ -0,0 +1,38 @@ +// Auto-generated Custom CAN ID header +#ifndef CUSTOM_CAN_ID_H +#define CUSTOM_CAN_ID_H + +typedef enum { + CHARGER_CONTROL_CAN_ID = 0x1806e5f4, + CHARGER_DATA_CAN_ID = 0x18ff50e5, + DTI_CONTROL_1_CAN_ID = 116, + DTI_CONTROL_10_CAN_ID = 0xa16, + DTI_CONTROL_11_CAN_ID = 0xb16, + DTI_CONTROL_12_CAN_ID = 0xc16, + DTI_CONTROL_2_CAN_ID = 216, + DTI_CONTROL_3_CAN_ID = 316, + DTI_CONTROL_4_CAN_ID = 416, + DTI_CONTROL_5_CAN_ID = 516, + DTI_CONTROL_6_CAN_ID = 616, + DTI_CONTROL_7_CAN_ID = 716, + DTI_CONTROL_8_CAN_ID = 816, + DTI_CONTROL_9_CAN_ID = 916, + DTI_DATA_1_CAN_ID = 2016, + DTI_DATA_2_CAN_ID = 2116, + DTI_DATA_3_CAN_ID = 2216, + DTI_DATA_4_CAN_ID = 2316, + DTI_DATA_5_CAN_ID = 2416, + EM_MEASUREMENT_CAN_ID = 0x10d, + EM_STATUS_CAN_ID = 0x40d, + EM_TEAM_DATA_1_CAN_ID = 0x30d, + EM_TEAM_DATA_2_CAN_ID = 0x30e, + EM_TEMPERATURE_CAN_ID = 0x60d, + IMD_IT_SYSTEM_CAN_ID = 0x18eff4fe, + IMD_GENERAL_CAN_ID = 0x18ff01f4, + IMD_ISOLATION_INFO_CAN_ID = 0x18eff4fe, + IMD_REQUEST_CAN_ID = 0x18eff4fe, + IMD_RESPONSE_CAN_ID = 23, + IMD_VOLTAGE_CAN_ID = 0x18eff4fe, +} Custom_CAN_ID_t; + +#endif // CUSTOM_CAN_ID_H diff --git a/Autogen/CAN/Inc/GR_IDS.h b/Autogen/CAN/Inc/GR_IDS.h new file mode 100644 index 000000000..a258328f7 --- /dev/null +++ b/Autogen/CAN/Inc/GR_IDS.h @@ -0,0 +1,55 @@ +// Auto-generated GR ID enum header +#ifndef GR_IDS_H +#define GR_IDS_H + +typedef enum { + ACU = 0x03, + ALL = 0xFF, + CCU = 0x2A, + Charger = 0x00, + Charging_SDC = 0x0C, + DGPS = 0x30, + DTI_Inverter = 0x00, + Dash_Panel = 0x05, + Debugger = 0x01, + ECU = 0x02, + Energy_Meter = 0x00, + Fan_Controller_1 = 0x0D, + Fan_Controller_2 = 0x0E, + Fan_Controller_3 = 0x0F, + Fan_Controller_4 = 0x10, + Fan_Controller_5 = 0x11, + Fan_Controller_6 = 0x12, + Fan_Controller_7 = 0x13, + Fan_Controller_8 = 0x14, + GR_Inverter_1 = 0x08, + GR_Inverter_2 = 0x09, + GR_Inverter_3 = 0x0A, + GR_Inverter_4 = 0x0B, + IMD = 0x00, + LV_DC_DC = 0x29, + SAM1 = 0x15, + SAM10 = 0x1E, + SAM11 = 0x1F, + SAM12 = 0x20, + SAM13 = 0x21, + SAM14 = 0x22, + SAM15 = 0x23, + SAM16 = 0x24, + SAM17 = 0x25, + SAM18 = 0x26, + SAM19 = 0x27, + SAM2 = 0x16, + SAM20 = 0x28, + SAM3 = 0x17, + SAM4 = 0x18, + SAM5 = 0x19, + SAM6 = 0x1A, + SAM7 = 0x1B, + SAM8 = 0x1C, + SAM9 = 0x1D, + Steering_Wheel = 0x06, + TCM = 0x04, +} GR_ID_t; + +#endif // GR_IDS_H diff --git a/Autogen/CAN/Inc/Struct_ID.h b/Autogen/CAN/Inc/Struct_ID.h new file mode 100644 index 000000000..f07a0e1b0 --- /dev/null +++ b/Autogen/CAN/Inc/Struct_ID.h @@ -0,0 +1,536 @@ +/* Auto-generated header file */ +#ifndef GR_OLD_MESSAGES_H +#define GR_OLD_MESSAGES_H + +#include + +/** Debug 2.0 */ +typedef struct { + /** Essentially a print statement up to 64 bytes long that whichever targeted can parse (Byte 0) */ + uint8_t debug; +} GR_OLD_DEBUG_2_0_MSG; + +/** Debug FD */ +typedef struct { + /** Essentially a print statement up to 64 bytes long that whichever targeted can parse (Byte 0) */ + uint8_t debug; +} GR_OLD_DEBUG_FD_MSG; + +/** Ping */ +typedef struct { + /** Time in millis (Byte 0) */ + uint32_t timestamp; +} GR_OLD_PING_MSG; + +/** ECU Status 1 */ +typedef struct { + /** See diagram (Byte 0) */ + uint8_t ecu_state; + uint8_t ping_block[3]; + /** Controls the AC current limits to each of the inverters Discrete Mapping, actual values TBD (16 possible values) The torque map selected; torque map is the mapping of the throttle to the + * torque sent to each motor (Byte 4) */ + uint8_t power_level_torque_map; + /** Hottest cell in accumulator (Byte 5) */ + uint8_t max_cell_temp; + /** % charged of the Accumulator (Byte 6) */ + uint8_t accumulator_state_of_charge; + /** % charged of the Low Voltage Bat (Byte 7) */ + uint8_t glv_state_of_charge; +} GR_OLD_ECU_STATUS_1_MSG; + +/** ECU Status 2 */ +typedef struct { + /** Output terminal voltage of accumulator (Byte 0) */ + uint16_t tractive_system_voltage; + /** Absolute value of speed (Byte 2) */ + uint16_t vehicle_speed; + /** Wheel RPM (Byte 4) */ + uint16_t fr_wheel_rpm; + /** Wheel RPM (Byte 6) */ + uint16_t fl_wheel_rpm; +} GR_OLD_ECU_STATUS_2_MSG; + +/** ECU Status 3 */ +typedef struct { + /** Wheel RPM (Byte 0) */ + uint16_t rr_wheel_rpm; + /** Wheel RPM (Byte 2) */ + uint16_t rl_wheel_rpm; +} GR_OLD_ECU_STATUS_3_MSG; + +/** ECU config */ +typedef struct { + /** Byte 0 */ + uint8_t reserved; +} GR_OLD_ECU_CONFIG_MSG; + +/** ACU Status 1 */ +typedef struct { + /** All cell voltages added up (Byte 0) */ + uint16_t accumulator_voltage; + /** Output terminal voltage of accumulator (Byte 2) */ + uint16_t ts_voltage; + /** Current output of accumulator (Byte 4) */ + uint16_t accumulator_current; + /** Accumulator state of charge (Based on lowest cell) (Byte 6) */ + uint8_t accumulator_soc; + /** GLV state of charge (Byte 7) */ + uint8_t glv_soc; +} GR_OLD_ACU_STATUS_1_MSG; + +/** ACU Status 2 */ +typedef struct { + /** 20v GLV voltage (Byte 0) */ + uint8_t _20v_voltage; + /** 12v supply voltage (Byte 1) */ + uint8_t _12v_voltage; + /** Voltage before ACU Latch (Byte 2) */ + uint8_t sdc_voltage; + /** Lowest cell voltage in accumulator (Byte 3) */ + uint8_t min_cell_voltage; + /** Hottest cell in accumulator (Byte 4) */ + uint8_t max_cell_temp; + uint8_t error_fault_violation_bits[2]; +} GR_OLD_ACU_STATUS_2_MSG; + +/** ACU Status 3 */ +typedef struct { + /** 600v input voltage (Byte 0) */ + uint16_t hv_input_voltage; + /** 20v output voltage (Byte 2) */ + uint16_t hv_output_voltage; + /** 600v input current (Byte 4) */ + uint16_t hv_input_current; + /** 20v output current (Byte 6) */ + uint16_t hv_output_current; +} GR_OLD_ACU_STATUS_3_MSG; + +/** ACU Precharge */ +typedef struct { + /** 0: shutdown, 1: go TS Active/Precharge (Byte 0) */ + uint8_t set_ts_active; +} GR_OLD_ACU_PRECHARGE_MSG; + +/** ACU Config Charge Parameters */ +typedef struct { + /** Sets the Target Charging voltage (Byte 0) */ + uint16_t charge_voltage; + /** Sets the Target Charging Current (Byte 2) */ + uint16_t charge_current; +} GR_OLD_ACU_CONFIG_CHARGE_PARAMETERS_MSG; + +/** ACU Config Operational Parameters */ +typedef struct { + /** Sets the threshold for Minimum Cell Voltage before Shutdown (Byte 0) */ + uint8_t minimium_cell_voltage; + /** Sets the threshold for Max Cell Temperature before Shutdown (Byte 1) */ + uint8_t max_cell_temperature; +} GR_OLD_ACU_CONFIG_OPERATIONAL_PARAMETERS_MSG; + +/** ACU Cell Data 1 */ +typedef struct { + struct { + uint8_t voltage; + uint8_t temperature; + } cells[32]; +} GR_OLD_ACU_CELL_DATA_1_MSG; + +/** ACU Cell Data 2 */ +typedef struct { + struct { + uint8_t voltage; + uint8_t temperature; + } cells[32]; +} GR_OLD_ACU_CELL_DATA_2_MSG; + +/** ACU Cell Data 3 */ +typedef struct { + struct { + uint8_t voltage; + uint8_t temperature; + } cells[32]; +} GR_OLD_ACU_CELL_DATA_3_MSG; + +/** ACU Cell Data 4 */ +typedef struct { + struct { + uint8_t voltage; + uint8_t temperature; + } cells[32]; +} GR_OLD_ACU_CELL_DATA_4_MSG; + +/** ACU Cell Data 5 */ +typedef struct { + struct { + uint8_t voltage; + uint8_t temperature; + } cells[32]; +} GR_OLD_ACU_CELL_DATA_5_MSG; + +/** DC-DC Status */ +typedef struct { + /** 0-22 (Byte 0) */ + uint16_t input_voltage; + /** ~12v for LV and ~20v for HV (Byte 2) */ + uint16_t output_voltage; + /** 0-10 (Byte 4) */ + uint8_t input_current; + /** Output current (Byte 5) */ + uint8_t output_current; + /** Temp of DC-DC converter (Byte 6) */ + uint8_t dc_dc_temp; +} GR_OLD_DC_DC_STATUS_MSG; + +/** Inverter Status 1 */ +typedef struct { + /** 0.01 * current, int16_t (Byte 0) */ + uint16_t ac_current; + /** 0.01 * current, int16_t (Byte 2) */ + uint16_t dc_current; + /** RPM, int16_t (Byte 4) */ + uint16_t motor_rpm; +} GR_OLD_INVERTER_STATUS_1_MSG; + +/** Inverter Status 2 */ +typedef struct { + /** Celsius + 40, uint8_t (Byte 0) */ + uint8_t u_mosfet_temperature; + /** Celsius + 40, uint8_t (Byte 2) */ + uint8_t v_mosfet_temperature; + /** Celsius + 40, uint8_t (Byte 4) */ + uint8_t w_mosfet_temperature; +} GR_OLD_INVERTER_STATUS_2_MSG; + +/** Inverter Status 3 */ +typedef struct { + /** Celsius + 40, uint8_t (Byte 0) */ + uint8_t motor_temperature; + uint8_t error_fault_violation_bits; +} GR_OLD_INVERTER_STATUS_3_MSG; + +/** Inverter Config */ +typedef struct { + /** Max AC Current (Byte 0) */ + uint16_t max_ac_current; + /** Max DC Current (Byte 2) */ + uint16_t max_dc_current; + /** 0: No limit n :limited at n RPM (Byte 4) */ + uint16_t absolute_max_rpm_limit; + /** Write 1 inverts direction (Byte 6) */ + uint8_t motor_direction; +} GR_OLD_INVERTER_CONFIG_MSG; + +/** Inverter Command */ +typedef struct { + /** Commanded AC Current (Byte 0) */ + uint16_t set_ac_current; + /** Commanded DC Current (Byte 2) */ + uint16_t set_dc_current; + /** 0: No limit n :limited at n RPM (Byte 4) */ + uint16_t rpm_limit; + /** Field weakening strength (Byte 6) */ + uint8_t field_weakening; + /** Write this to 1 every 100ms to enable inverter (Byte 7) */ + uint8_t drive_enable; +} GR_OLD_INVERTER_COMMAND_MSG; + +/** Fan Status */ +typedef struct { + /** Fan RPM (Byte 0) */ + uint16_t fan_speed; + /** 0-22 (Byte 2) */ + uint8_t input_voltage; + /** 0-10 (Byte 3) */ + uint8_t input_current; +} GR_OLD_FAN_STATUS_MSG; + +/** Fan Command */ +typedef struct { + /** 0-100 Percent (Byte 0) */ + uint8_t fan_command; +} GR_OLD_FAN_COMMAND_MSG; + +/** Dash Status */ +typedef struct { + uint8_t ping_block; + /** MSB is state (1: pressed) Other 7 bits represent the time in 0.1s that it has been in that state (Byte 1) */ + uint8_t ts_button_data; + /** MSB is state (1: pressed) Other 7 bits represent the time in 0.1s that it has been in that state (Byte 2) */ + uint8_t rtd_button_data; +} GR_OLD_DASH_STATUS_MSG; + +/** Dash Config */ +typedef struct { + uint8_t ping_block; + /** Discarded input but still send it, set by ECU State (Byte 1) */ + uint8_t button_led_1_r; + /** Discarded input but still send it, set by ECU State (Byte 2) */ + uint8_t button_led_1_g; + /** Discarded input but still send it, set by ECU State (Byte 3) */ + uint8_t button_led_1_b; + /** Discarded input but still send it, set by ECU State (Byte 4) */ + uint8_t button_led_2_r; + /** Discarded input but still send it, set by ECU State (Byte 5) */ + uint8_t button_led_2_g; + /** Discarded input but still send it, set by ECU State (Byte 6) */ + uint8_t button_led_2_b; +} GR_OLD_DASH_CONFIG_MSG; + +/** Steering Status */ +typedef struct { + /** Position of knob (1-16) Position of knob (1-16) (Byte 0) */ + uint8_t current_encoder_torque_map_encoder; + uint8_t ping_block; +} GR_OLD_STEERING_STATUS_MSG; + +/** Steering Config */ +typedef struct { + /** Byte 0 */ + uint8_t reserved; +} GR_OLD_STEERING_CONFIG_MSG; + +/** SAM Brake IR */ +typedef struct { + /** IR Temp of Brakes (Byte 0) */ + uint8_t temp; +} GR_OLD_SAM_BRAKE_IR_MSG; + +/** SAM Tire Temp */ +typedef struct { + /** Furthest from chassis (Byte 0) */ + uint8_t outside_temp; + /** Middle of tire (Byte 1) */ + uint8_t outside_middle_temp; + /** Middle of tire (Byte 2) */ + uint8_t inside_middle_temp; + /** Closest to chassis (Byte 3) */ + uint8_t inside_temp; +} GR_OLD_SAM_TIRE_TEMP_MSG; + +/** SAM IMU */ +typedef struct { + /** Acceleration in X-axis (Byte 0) */ + uint16_t accel_x; + /** Acceleration in Y-axis (Byte 2) */ + uint16_t accel_y; + /** Acceleration in Z-axis (Byte 4) */ + uint16_t accel_z; + /** Angular velocity in X-axis (Byte 6) */ + uint16_t gyro_x; + /** Angular velocity in Y-axis (Byte 8) */ + uint16_t gyro_y; + /** Angular velocity in Z-axis (Byte 10) */ + uint16_t gyro_z; +} GR_OLD_SAM_IMU_MSG; + +/** SAM GPS 1 */ +typedef struct { + /** Latitude in decimal degrees (Byte 0) */ + uint32_t latitude; + /** Longitude in decimal degrees (Byte 4) */ + uint32_t longitude; +} GR_OLD_SAM_GPS_1_MSG; + +/** SAM GPS 2 */ +typedef struct { + /** GPS position accuracy (Byte 0) */ + uint32_t accuracy; + /** Vehicle attitude (Byte 4) */ + uint32_t attitude; +} GR_OLD_SAM_GPS_2_MSG; + +/** SAM GPS Time */ +typedef struct { + /** Time in seconds since GPS Epoch (Byte 0) */ + uint32_t time; + /** Time of week in milliseconds (Byte 4) */ + uint32_t time_of_week_ms; +} GR_OLD_SAM_GPS_TIME_MSG; + +/** SAM GPS Heading */ +typedef struct { + /** Heading angle relative to true North (Byte 0) */ + uint32_t heading_from_north; +} GR_OLD_SAM_GPS_HEADING_MSG; + +/** SAM Sus Pots */ +typedef struct { + /** Pot Pos (Byte 0) */ + uint8_t suspension_angle; +} GR_OLD_SAM_SUS_POTS_MSG; + +/** SAM TOF */ +typedef struct { + /** Ride Height (Byte 0) */ + uint16_t height; +} GR_OLD_SAM_TOF_MSG; + +/** SAM Rear Wheelspeed */ +typedef struct { + /** Wheel RPM (Byte 0) */ + uint16_t speed; +} GR_OLD_SAM_REAR_WHEELSPEED_MSG; + +/** SAM Pushrod Force */ +typedef struct { + /** Pushrod Force (Byte 0) */ + uint16_t load_force; +} GR_OLD_SAM_PUSHROD_FORCE_MSG; + +/** TCM Status */ +typedef struct { + uint8_t ping_block; + /** Mapache ping (upload) (Byte 1) */ + uint16_t ping; + /** # of messages on cache (non-synced) (Byte 3) */ + uint32_t cache_size; + /** Byte 7 */ + uint8_t reserved; +} GR_OLD_TCM_STATUS_MSG; + +/** TCM Resource Utilization */ +typedef struct { + /** core 0 frequency in MHz (Byte 0) */ + uint16_t cpu_0_freq; + /** core 0 utilization in % (Byte 2) */ + uint8_t cpu_0_util; + /** core 1 frequency in MHz (Byte 3) */ + uint16_t cpu_1_freq; + /** core 1 utilization in % (Byte 5) */ + uint8_t cpu_1_util; + /** core 2 frequency in MHz (Byte 6) */ + uint16_t cpu_2_freq; + /** core 2 utilization in % (Byte 8) */ + uint8_t cpu_2_util; + /** core 3 frequency in MHz (Byte 9) */ + uint16_t cpu_3_freq; + /** core 3 utilization in % (Byte 11) */ + uint8_t cpu_3_util; + /** core 4 frequency in MHz (Byte 12) */ + uint16_t cpu_4_freq; + /** core 4 utilization in % (Byte 14) */ + uint8_t cpu_4_util; + /** core 5 frequency in MHz (Byte 15) */ + uint16_t cpu_5_freq; + /** core 5 utilization in % (Byte 17) */ + uint8_t cpu_5_util; + /** total cpu utilization in % (Byte 18) */ + uint8_t cpu_total_util; + /** total memory in MB (Byte 19) */ + uint16_t ram_total; + /** used memory in MB (Byte 21) */ + uint16_t ram_used; + /** memory utilization in % (Byte 23) */ + uint8_t ram_util; + /** gpu utilization in % (Byte 24) */ + uint8_t gpu_util; + /** gpu frequency in MHz (Byte 25) */ + uint16_t gpu_freq; + /** total disk space in MB (Byte 27) */ + uint32_t disk_total; + /** used disk space in MB (Byte 31) */ + uint32_t disk_used; + /** disk utilization in % (Byte 35) */ + uint8_t disk_util; + /** cpu temp in ˚C (Byte 36) */ + uint8_t cpu_temp; + /** gpu temp in ˚C (Byte 37) */ + uint8_t gpu_temp; + /** voltage draw in mV (Byte 38) */ + uint16_t voltage_draw; + /** current draw in mA (Byte 40) */ + uint16_t current_draw; + /** power draw in mW (Byte 42) */ + uint16_t power_draw; +} GR_OLD_TCM_RESOURCE_UTILIZATION_MSG; + +/** Dash Warning Flags */ +typedef struct { + uint8_t error_fault_violation_bits; +} GR_OLD_DASH_WARNING_FLAGS_MSG; + +/** Specific Brake IR */ +typedef struct { + /** Wheel identifier according to the wiki (Byte 0) */ + uint8_t wheel_identifier; + /** IR Temp of Brakes (Byte 1) */ + uint8_t temp; +} GR_OLD_SPECIFIC_BRAKE_IR_MSG; + +/** ECU Ping Information */ +typedef struct { + /** Literal copy of ECU Status's status bit map (Byte 0) */ + uint8_t online_pings; +} GR_OLD_ECU_PING_INFORMATION_MSG; + +/** ECU Pedals Data */ +typedef struct { + /** APPS 1 Signal (Byte 0) */ + uint16_t apps1_signal; + /** APPS 2 Signal (Byte 2) */ + uint16_t apps2_signal; + /** Brake Force Signal (Byte 4) */ + uint16_t bse_signal; + /** Brake Pressure Signal Brake Pressure Signal (Byte 6) */ + uint16_t brake_f_signal_brake_r_signal; +} GR_OLD_ECU_PEDALS_DATA_MSG; + +/** GPS LAT */ +typedef struct { + /** lattitude (Byte 0) */ + uint8_t lat; +} GR_OLD_GPS_LAT_MSG; + +/** GPS LON */ +typedef struct { + /** longitude (Byte 0) */ + uint8_t lon; +} GR_OLD_GPS_LON_MSG; + +/** GPS ALT */ +typedef struct { + /** altitude (Byte 0) */ + uint8_t alt; +} GR_OLD_GPS_ALT_MSG; + +/** GPS PX */ +typedef struct { + /** Byte 0 */ + uint16_t theta; + /** Byte 2 */ + uint16_t acc; + /** Byte 4 */ + uint32_t status; +} GR_OLD_GPS_PX_MSG; + +/** GPS QY */ +typedef struct { + /** Byte 0 */ + uint16_t theta; + /** Byte 2 */ + uint16_t acc; + /** Byte 4 */ + uint32_t status; +} GR_OLD_GPS_QY_MSG; + +/** GPS RZ */ +typedef struct { + /** Byte 0 */ + uint16_t theta; + /** Byte 2 */ + uint16_t acc; + /** Byte 4 */ + uint32_t status; +} GR_OLD_GPS_RZ_MSG; + +/** UVW DGPS */ +typedef struct { + /** U (Byte 0) */ + uint16_t dgps_u; + /** V (Byte 2) */ + uint16_t dgps_v; + /** W (Byte 4) */ + uint16_t dgps_w; +} GR_OLD_UVW_DGPS_MSG; + +#endif diff --git a/Autogen/CAN/Makefile b/Autogen/CAN/Makefile new file mode 100644 index 000000000..e876556c7 --- /dev/null +++ b/Autogen/CAN/Makefile @@ -0,0 +1,45 @@ +# Commands +PERL = perl + +# Directories +INC_DIR = Inc +SRC_DIR = Src +DOC_DIR = Doc + +# Files +CANDO = $(DOC_DIR)/format.CANdo +STRUCT_ID = $(INC_DIR)/Struct_ID.h +GR_ID = $(INC_DIR)/GR_IDS.h +MSG_ID = $(INC_DIR)/CAN_msg_ID.h +CAN_ID = $(INC_DIR)/Custom_CAN_ID.h +DBC = $(DOC_DIR)/output.dbc + +.PHONY: all clean STRUCTparser CANparser DBCparser GRparser MSGparser + +all: STRUCTparser CANparser DBCparser GRparser MSGparser + for file in $(STRUCT_ID) $(CAN_ID) $(DBC) $(GR_ID) $(MSG_ID); do \ + if [ -f "$$file" ]; then \ + echo "Successfully generated $$file"; \ + else \ + echo "Error: $$file was not generated."; \ + exit 1; \ + fi; \ + done + +clean: + rm -f $(STRUCT_ID) $(CAN_ID) $(DBC) $(GR_ID) $(MSG_ID) + +STRUCTparser: + $(PERL) $(SRC_DIR)/$(@).pl $(CANDO) $(STRUCT_ID) + +CANparser: + $(PERL) $(SRC_DIR)/$(@).pl $(CANDO) $(CAN_ID) + +DBCparser: + $(PERL) $(SRC_DIR)/$(@).pl $(CANDO) $(DBC) + +GRparser: + $(PERL) $(SRC_DIR)/$(@).pl $(CANDO) $(GR_ID) + +MSGparser: + $(PERL) $(SRC_DIR)/$(@).pl $(CANDO) $(MSG_ID) diff --git a/Autogen/CAN/README.md b/Autogen/CAN/README.md new file mode 100644 index 000000000..7593c7b3a --- /dev/null +++ b/Autogen/CAN/README.md @@ -0,0 +1,192 @@ +# CANfigurator +#### By Aarnav, Caroline, Kartik, Nandini + +## Workflow: How to Apply Changes + +**Do not run the parsers locally.** The generated headers are produced by a GitHub Actions workflow. + +1. Edit `Doc/format.CANdo` with your changes. +2. Commit and push to GitHub. +3. The CI workflow runs all four parsers and commits the regenerated headers automatically. +4. Pull the latest changes to get the updated headers locally. + +--- + +## The Parsers + +All parsers live in `Src/` and read `Doc/format.CANdo` as input. You should never need to run them manually. + +- **`CANparser.pl`** — Reads the `Custom CAN ID` section. Produces `Custom_CAN_ID.h`, a single enum mapping each third-party message name to its CAN ID. +- **`GRparser.pl`** — Reads the `GR ID` section. Produces `GR_IDS.h`, a single enum of device/node network addresses. +- **`MSGparser.pl`** — Reads the `Message ID` section. Produces `can_msg_ids.h`, a single enum of every team-defined message name to its MSG ID. +- **`STRUCTparser.pl`** — Reads the `Message ID` section. Produces `CANDler.h`, packed C structs for each message with typed fields, byte-level layout, and description comments. + +| Parser | Section(s) Read | Key Fields Consumed | Output | +|---|---|---|---| +| `CANparser.pl` | `Custom CAN ID` | Message name, `CAN ID` | `Custom_CAN_ID.h` | +| `GRparser.pl` | `GR ID` | Device name, hex ID value | `GR_IDS.h` | +| `MSGparser.pl` | `Message ID` | Message name, `MSG ID` | `can_msg_ids.h` | +| `STRUCTparser.pl` | `Message ID` | Message name, fields, `bit_start`, `data type`, `#` comments | `CANDler.h` | + +--- + +## Modifying `format.CANdo` + +`Doc/format.CANdo` is the single source of truth for the CAN bus configuration. It is a YAML file with five top-level sections, each consumed by one or more Perl parsers during the build. Changes here propagate into auto-generated C headers. + +### Top-Level Sections + +| Section | Consumed By | Generated Output | +|---|---|---| +| `routing` | *(build system / routing logic)* | Message routing tables | +| `byte order` | *(shared config)* | Endianness setting | +| `Message ID` | `MSGparser.pl` -> `can_msg_ids.h`, `STRUCTparser.pl` -> `CANDler.h` | MSG ID enum, packed C structs | +| `Custom CAN ID` | `CANparser.pl` -> `Custom_CAN_ID.h` | Custom CAN ID enum | +| `GR ID` | `GRparser.pl` -> `GR_IDS.h` | Device/node ID enum | + +--- + +### 1. `routing` Section + +Defines which messages each device sends on each CAN bus, and to which receiver. Use `can_id_override` for messages that use a non-standard (externally defined) CAN ID. + +```yaml +routing: + messages: + : + : # CAN1, CAN2, CAN3 + : + - msg: + - msg: + can_id_override: 0x1806E5F4 # optional, for external protocols +``` + +**To add a new route:** nest a `- msg:` entry under the appropriate Device -> Bus -> Receiver path. The message name must match an entry in `Message ID` or `Custom CAN ID`. + +--- + +### 2. `byte order` Section + +A single value that sets the byte order for the entire bus. Currently `little_endian`. + +```yaml +byte order: little_endian +``` + +--- + +### 3. `Message ID` Section (parsed by `MSGparser.pl` and `STRUCTparser.pl`) + +Defines every CAN message the team controls: its ID, length, and fields. This is the largest and most commonly edited section. + +#### Message Structure + +```yaml +Message ID: + : + MSG ID: # e.g. 0x003 + MSG LENGTH: # total message length in bytes + : + bit_start: + # + data type: + units: # optional + scaled min: # optional + scaled max: # optional + map equation: "" # optional +``` + +#### Data Types + +| Type | Meaning | C Equivalent | +|---|---|---| +| `b` | Boolean (1 bit) | bit field | +| `u4` | Unsigned 4-bit | nibble | +| `u8` | Unsigned 8-bit | `uint8_t` | +| `u16` | Unsigned 16-bit | `uint16_t` | +| `u32` | Unsigned 32-bit | `uint32_t` | +| `i16` | Signed 16-bit | `int16_t` | +| `s8` | Signed 8-bit | `int8_t` | +| `s` | String (variable length, up to MSG LENGTH) | `char[]` | + +#### Field Attributes + +- **`bit_start`** (REQUIRED REQUIRED REQUIRED REQUIRED) — the bit offset of the field within the message. Must be the first sub-key under each field name. Parsers calculate message size based on bit starts — nothing will work without it. +- **`data type`** (required) — one of the types listed above. +- **`units`** (optional) — human-readable unit (e.g. `Volts`, `RPM`, `'%'`, `Celsius`, `Bool`, `Enum`, `ms`). +- **`scaled min` / `scaled max`** (optional) — the real-world range after the map equation is applied. +- **`map equation`** (optional) — the formula to convert the raw value to engineering units (e.g. `"0.01x"`, `"0.1x-3276.8"`). +- **`# `** (optional) — description lines below the field name, prefixed with `#`. `STRUCTparser.pl` extracts these as doxygen-style comments in the generated struct. + +#### Reserved Fields + +Mark unused bit ranges as `Reserved`: +```yaml + Reserved: + bit_start: 23-31 +``` +No sub-properties are needed. The parsers will skip or collapse reserved ranges. + +#### Adding a New Message + +1. Choose an unused `MSG ID` (hex). +2. Add an entry under `Message ID` following the structure above. +3. Add a corresponding route in the `routing` section. +4. Rebuild — the parsers auto-generate the updated headers. + +#### Adding a Field to an Existing Message + +1. Pick the next available bit offset (must not overlap with existing fields). +2. Add the field with `bit_start: ` and its sub-properties. +3. Update `MSG LENGTH` if the message now occupies more bytes. + +--- + +### 4. `Custom CAN ID` Section (parsed by `CANparser.pl`) + +Defines CAN messages that use externally defined IDs (e.g. third-party motor controllers, chargers). These IDs are **not** auto-assigned by the team. + +```yaml +Custom CAN ID: + : + CAN ID: # e.g. 116, A16 + Length: + signals: + - name: "" + bit_start: + # + - name: "" + bit_start: +``` + +**Key differences from `Message ID`:** +- Uses `CAN ID` (not `MSG ID`) and the value can be decimal or bare hex (e.g. `A16`). +- Uses `Length` (not `MSG LENGTH`). +- Fields are listed under a `signals:` array with `name:` and `bit_start:` keys, rather than direct field names with `bit_start:` as a sub-key. + +**Parser behavior:** `CANparser.pl` reads each entry's `CAN ID`, sanitizes the message name into a C identifier, and emits it as an enum value in `Custom_CAN_ID.h`. + +#### Adding a Custom CAN ID Entry + +1. Add a new block under `Custom CAN ID` with `CAN ID`, `Length`, and `signals`. +2. The `CAN ID` value will be formatted as hex (`0x...`) in the generated enum if it contains non-decimal characters, or kept as decimal otherwise. + +--- + +### 5. `GR ID` Section (parsed by `GRparser.pl`) + +A flat mapping of device/node names to their unique network identifiers. Used for addressing in the GR protocol layer. + +```yaml +GR ID: + : "" # e.g. "0x02" +``` + +**Parser behavior:** `GRparser.pl` reads each key-value pair and emits a C enum in `GR_IDS.h`. The name is sanitized (non-alphanumeric characters become underscores). + +#### Adding a New Device + +Add a single line with the device name and a unique hex ID string: +```yaml + My New Board: "0x2A" +``` diff --git a/Autogen/CAN/Src/CANparser.pl b/Autogen/CAN/Src/CANparser.pl new file mode 100755 index 000000000..e429740ac --- /dev/null +++ b/Autogen/CAN/Src/CANparser.pl @@ -0,0 +1,117 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use YAML::XS 'LoadFile'; +use File::Basename; + +# --- Configuration --- +my $yaml_path = $ARGV[0] // 'format.CANdo'; +my $output_path = $ARGV[1] // 'Custom_CAN_ID.h'; + +# 1. Load the data +if ( !-e $yaml_path ) { die "Error: $yaml_path not found.\n"; } +my $yaml = LoadFile($yaml_path); +my $can_defs = $yaml->{'Custom CAN ID'}; + +# 2. Open the file in WRITE mode ('>') +# This updates the existing file by overwriting it with fresh data. +open my $fh, '>', $output_path or die "Error: Cannot open $output_path: $!"; + +print {$fh} "// Auto-generated Custom CAN ID header\n"; +print {$fh} "#ifndef CUSTOM_CAN_ID_H\n"; +print {$fh} "#define CUSTOM_CAN_ID_H\n\n"; + +print {$fh} "typedef enum {\n"; + +# Sort to keep the header organized +for my $msg_name ( sort keys %$can_defs ) { + my $entry = $can_defs->{$msg_name}; + next unless ref($entry) eq 'HASH'; + + my $can_id = $entry->{'CAN ID'}; + next unless defined $can_id; + + # Clean the name: spaces to underscores, uppercase + my $enum_name = uc($msg_name); + $enum_name =~ s/[^A-Z0-9]/_/g; + $enum_name =~ s/_+/_/g; + $enum_name =~ s/^_|_$//g; + + # Format the ID (Decimal stays decimal, Hex gets 0x) + my $val = $can_id; + if ( $val =~ /^[0-9A-Fa-f]+$/ && $val !~ /^\d+$/ ) { + $val = "0x" . lc($val); # Handles 'A16' + } + elsif ( $val =~ /^([0-9A-Fa-f]+)d$/ ) { + $val = "0x" . lc($1); # Handles '10d' + } + + print {$fh} " ${enum_name}_CAN_ID = $val,\n"; +} + +print {$fh} "} Custom_CAN_ID_t;\n\n"; +print {$fh} "#endif // CUSTOM_CAN_ID_H\n"; +close $fh; + +print "Successfully updated $output_path\n"; + +# #!/usr/bin/env perl +# use strict; +# use warnings; +# use YAML::XS 'LoadFile'; +# use File::Basename; +# use File::Path qw(make_path); +# my $yaml_path = $ARGV[0] // 'format.CANdo'; +# my $output_path = $ARGV[1] // 'Custom_CAN_ID.h'; +# my $dir = dirname($output_path); +# make_path($dir) if $dir && $dir ne '.' && !-d $dir; + +# # Check if YAML exists to avoid confusing Perl errors +# if ( !-e $yaml_path ) { +# die "CANfigurator Error: Could not find YAML file at: $yaml_path\n"; +# } + +# # Load YAML +# my $yaml = LoadFile($yaml_path); +# my $can_defs = $yaml->{'Custom CAN ID'}; + +# # Open header file using the dynamic output path +# open my $fh, '>', $output_path +# or die "CANfigurator Error: Cannot open $output_path: $!"; + +# print $fh "// Auto-generated Custom CAN ID header\n"; +# print $fh "#ifndef CUSTOM_CAN_ID_H\n"; +# print $fh "#define CUSTOM_CAN_ID_H\n\n"; + +# # Generate CAN message ID enum +# print $fh "typedef enum {\n"; + +# for my $msg_name ( sort keys %$can_defs ) { +# my $entry = $can_defs->{$msg_name}; + +# # SAFETY: Only process if this is a block of data (a Hash) +# next unless ref($entry) eq 'HASH'; + +# # Grab the CAN ID +# my $can_id = $entry->{'CAN ID'}; + +# # SAFETY: Skip if 'CAN ID' is missing +# if ( !defined $can_id ) { +# warn "Warning: No CAN ID found for message '$msg_name'. Skipping.\n"; +# next; +# } + +# # Format the name for C +# my $enum_name = uc($msg_name); +# $enum_name =~ s/[^A-Z0-9]/_/g; + +# # Write to file: NAME_CAN_ID = 0x123, +# print $fh " ${enum_name}_CAN_ID = $can_id,\n"; +# } + +# print $fh "} Custom_CAN_ID_t;\n\n"; + +# print $fh "#endif // CUSTOM_CAN_ID_H\n"; +# close $fh; + +# print "CANfigurator: Successfully generated $output_path\n"; diff --git a/Autogen/CAN/Src/DBCparser.pl b/Autogen/CAN/Src/DBCparser.pl new file mode 100644 index 000000000..0ae06b513 --- /dev/null +++ b/Autogen/CAN/Src/DBCparser.pl @@ -0,0 +1,199 @@ +#!/usr/bin/env perl +use strict; +use warnings; + +# Bit size mapping +my %TYPE_BITS = ( + 'b' => 1, + 'u4' => 4, + 's4' => 4, + 'u8' => 8, + 's8' => 8, + 'i8' => 8, + 'u16' => 16, + 's16' => 16, + 'i16' => 16, + 'u32' => 32, + 's32' => 32, + 'i32' => 32, + 'u64' => 64, + 's64' => 64, + 'i64' => 64, + 'double' => 64, + 's' => 64 +); + +sub normalize { + my ($val) = @_; + return "Unknown" unless defined $val && $val ne q{}; + $val =~ s/^\s+|\s+$//g; + $val =~ s/[\s.\-]+/_/g; + $val =~ s/[^a-zA-Z0-9_]//g; + return $val; +} + +sub parse_eq { + my ($eq) = @_; + return ( 1, 0 ) unless defined $eq && $eq ne '-'; + $eq =~ s/["']//g; + + # Matches 20x/51 + if ( $eq =~ /^(\d+)x\/(\d+)$/ ) { return ( $1 / $2, 0 ); } + + # Matches x/655.35 or x/256 + if ( $eq =~ /^x\/([\d.]+)$/ ) { return ( 1 / $1, 0 ); } + + # Matches abs(x)/10 + if ( $eq =~ /^abs\(x\)\/([\d.]+)$/ ) { return ( 1 / $1, 0 ); } + + # Matches 0.25x + if ( $eq =~ /^([\d.]+)x$/ ) { return ( $1 + 0, 0 ); } + + # Matches 0.01x+2 or 0.1x-3276.8 + if ( $eq =~ /^([\d.]+)x\+([\d.]+)$/ ) { return ( $1 + 0, $2 + 0 ); } + if ( $eq =~ /^([\d.]+)x-([\d.]+)$/ ) { return ( $1 + 0, -( $2 + 0 ) ); } + if ( $eq =~ /^x-([\d.]+)$/ ) { return ( 1, -( $1 + 0 ) ); } + return ( 1, 0 ); +} + +sub parse_input { + my ($file) = @_; + my %data = ( routing => [], messages => {}, custom => {}, grid => {} ); + open my $fh, '<', $file or die "Cannot open $file: $!"; + + my ( $sec, $cur_msg, $cur_sig, $sender, $bus, $target ) = ( q{}, q{}, q{}, q{}, q{}, q{} ); + + while (<$fh>) { + chomp; + next if /^\s*$/ || /^\s*#/; + my ($indent) = /^(\s*)/; + my $ind = length($indent); + my $line = $_; + $line =~ s/^\s+//; + + if ( $ind == 0 && $line =~ /^([^:]+):/ ) { + $sec = $1; + next; + } + + if ( $sec eq 'routing' ) { + next if $line =~ /^messages:/; + if ( $ind == 4 && $line =~ /^([^:]+):/ ) { $sender = $1; } + elsif ( $ind == 6 && $line =~ /^([^:]+):/ ) { $bus = $1; } + elsif ( $ind == 8 && $line =~ /^([^:]+):/ ) { + $target = $1; + + # Handle inline lists like SAM1: [ { msg: Debug FD }, ... ] + if ( $line =~ /\[\s*\{\s*msg:\s*([^}]+)\s*\}\s*\]/ ) { + push @{ $data{routing} }, { sender => $sender, bus => $bus, target => $target, msg => $1 }; + } + } + elsif ( $line =~ /^- msg:\s*(.+)/ ) { + push @{ $data{routing} }, { sender => $sender, bus => $bus, target => $target, msg => $1 }; + } + elsif ( $line =~ /^can_id_override:\s*(.+)/ ) { + $data{routing}->[-1]->{override} = $1 if @{ $data{routing} }; + } + } + elsif ( $sec eq 'Message ID' ) { + if ( $ind == 2 && $line =~ /^([^:]+):/ ) { + $cur_msg = $1; + $data{messages}{$cur_msg} = { sigs => {} }; + } + elsif ( $line =~ /^MSG ID:\s*(.+)/ ) { $data{messages}{$cur_msg}{id} = $1; } + elsif ( $line =~ /^MSG LENGTH:\s*(.+)/ ) { $data{messages}{$cur_msg}{len} = $1; } + elsif ( $line =~ /^([^:]+):\s*#\s*bit start\s*([\d\-]+)/ ) { + $cur_sig = $1; + my $bs = $2; + $bs =~ s/-.*//; + $data{messages}{$cur_msg}{sigs}{$cur_sig} = { start => $bs }; + } + elsif ( $ind == 6 && $line =~ /^([^:]+):\s*(.+)/ ) { + $data{messages}{$cur_msg}{sigs}{$cur_sig}{$1} = $2; + } + } + elsif ( $sec eq 'Custom CAN ID' ) { + if ( $ind == 2 && $line =~ /^["']?([^"':]+)["']?:/ ) { $cur_msg = $1; $data{custom}{$cur_msg} = { sigs => [] }; } + elsif ( $line =~ /^CAN ID:\s*(.+)/ ) { $data{custom}{$cur_msg}{id} = $1; } + elsif ( $line =~ /^Length:\s*(.+)/ ) { $data{custom}{$cur_msg}{len} = $1; } + elsif ( $line =~ /^name:\s*["']?([^"']+)["']?/ ) { push @{ $data{custom}{$cur_msg}{sigs} }, { name => $1 }; } + elsif ( $line =~ /^bit_start:\s*([\d\-]+)/ ) { + my $bs = $1; + $bs =~ s/-.*//; + $data{custom}{$cur_msg}{sigs}->[-1]->{start} = $bs if @{ $data{custom}{$cur_msg}{sigs} }; + } + } + elsif ( $sec eq 'GR ID' ) { + if ( $line =~ /^([^:]+):\s*["']?([^"']+)["']?/ ) { + my ( $k, $v ) = ( $1, $2 ); + $k =~ s/\s+$//; + $data{grid}{$k} = $v; + } + } + } + return \%data; +} + +# --- Main execution --- +my $input_file = $ARGV[0] or die "Usage: perl script.pl [output.dbc]\n"; +my $output_file = $ARGV[1] // "output.dbc"; +my $d = parse_input($input_file); + +open my $out, '>', $output_file or die $!; +print {$out} "VERSION \"\"\n\nNS_ :\n\nBS_:\n\nBU_: " . join( ' ', sort grep { $_ ne 'ALL' } map { normalize($_) } keys %{ $d->{grid} } ) . " ALL\n\n"; + +foreach my $r ( @{ $d->{routing} } ) { + my $m_name = $r->{msg}; + + # Prioritize Custom ID definitions if they exist for specific logic + my $is_custom = exists $d->{custom}{$m_name}; + my $m_def = $is_custom ? $d->{custom}{$m_name} : $d->{messages}{$m_name}; + next unless $m_def; + + my $can_id; + if ( $r->{override} ) { + $can_id = ( $r->{override} =~ /0x/i ) ? hex( $r->{override} ) : int( $r->{override} ); + } + elsif ($is_custom) { + $can_id = ( $m_def->{id} =~ /0x/i ) ? hex( $m_def->{id} ) : int( $m_def->{id} ); + } + else { + my $s_val = $d->{grid}{ $r->{sender} } // "0x00"; + my $t_val = $d->{grid}{ $r->{target} } // "0x00"; + my $m_val = $m_def->{id} // "0x00"; + + # Standard ID assembly logic: [Sender(8bit)][Msg(8bit)][Target(8bit)] + $can_id = ( hex($s_val) << 16 ) | ( hex($m_val) << 8 ) | hex($t_val); + } + + # Set Extended Bit if ID is > 11-bit range + $can_id |= 0x80000000 if $can_id > 0x7FF; + + my $dbc_msg_name = normalize( $r->{sender} ) . "_" . normalize($m_name) . "_to_" . normalize( $r->{target} ); + printf $out "BO_ %u %s: %d %s\n", $can_id, $dbc_msg_name, ( $m_def->{len} // 8 ), normalize( $r->{sender} ); + + my @sigs = $is_custom ? @{ $m_def->{sigs} } : map { { name => $_, %{ $m_def->{sigs}{$_} } } } keys %{ $m_def->{sigs} }; + foreach my $s ( sort { ( $a->{start} // 0 ) <=> ( $b->{start} // 0 ) } @sigs ) { + next if $s->{name} =~ /Reserved/i; + + my ( $f, $o ) = parse_eq( $s->{'map equation'} ); + my $raw_type = $s->{'data type'} // 'u8'; + my $bits = 8; + if ( $raw_type =~ /^(\w+)\[(\d+)\]$/ ) { $bits = ( $TYPE_BITS{$1} // 8 ) * $2; } + else { $bits = $TYPE_BITS{$raw_type} // 8; } + + my $unit = ( $s->{units} && $s->{units} ne '-' && $s->{units} ne 'Enum' ) ? $s->{units} : ""; + $unit =~ s/'//g; + + printf $out " SG_ %s : %d|%d\@1%s (%g,%g) [%s|%s] \"%s\" %s\n", + normalize( $s->{name} ), $s->{start}, + $bits, + ( $raw_type =~ /^[is]/ ? '-' : '+' ), $f, $o, + ( $s->{'scaled min'} // 0 ), + ( $s->{'scaled max'} // 0 ), + $unit, + normalize( $r->{target} ); + } + print {$out} "\n"; +} +close $out; diff --git a/Autogen/CAN/Src/GRparser.pl b/Autogen/CAN/Src/GRparser.pl new file mode 100644 index 000000000..5a46a2186 --- /dev/null +++ b/Autogen/CAN/Src/GRparser.pl @@ -0,0 +1,45 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use YAML::XS 'LoadFile'; +use File::Basename; +use File::Path qw(make_path); +my $yaml_path = $ARGV[0] // 'format.CANdo'; +my $output_path = $ARGV[1] // 'GR_IDS.h'; +my $dir = dirname($output_path); +make_path($dir) if $dir && $dir ne '.' && !-d $dir; + +# Safety check for input file +if ( !-e $yaml_path ) { + die "CANfigurator Error: Could not find YAML file at: $yaml_path\n"; +} + +# Load YAML +my $yaml = LoadFile($yaml_path); +my $gr_ids = $yaml->{"GR ID"}; + +# Open header file for writing using the dynamic output path +open my $fh, '>', $output_path or die "CANfigurator Error: Cannot open $output_path: $!"; + +print {$fh} "// Auto-generated GR ID enum header\n"; +print {$fh} "#ifndef GR_IDS_H\n#define GR_IDS_H\n\n"; +print {$fh} "typedef enum {\n"; + +# Loop through each device and write enum entries +for my $name ( sort keys %$gr_ids ) { + my $const_name = $name; + $const_name =~ s/[^A-Za-z0-9]/_/g; # sanitize for C identifiers + my $id = $gr_ids->{$name}; + + # Check if ID exists to prevent empty enum values + if ( defined $id ) { + print {$fh} " $const_name = $id,\n"; + } +} + +print {$fh} "} GR_ID_t;\n\n"; +print {$fh} "#endif // GR_IDS_H\n"; + +close $fh; + +print "CANfigurator: Successfully generated $output_path\n"; diff --git a/Autogen/CAN/Src/MSGparser.pl b/Autogen/CAN/Src/MSGparser.pl new file mode 100644 index 000000000..b2afa0bef --- /dev/null +++ b/Autogen/CAN/Src/MSGparser.pl @@ -0,0 +1,147 @@ +#!/usr/bin/perl +use strict; +use warnings; +use File::Basename; +use File::Path qw(make_path); + +my $yaml_file = $ARGV[0] // 'format.CANdo'; +my $output_file = $ARGV[1] // 'can_msg_ids.h'; +my $dir = dirname($output_file); +make_path($dir) if $dir && $dir ne '.' && !-d $dir; + +# Safety check: Verify the YAML source exists +if ( !-e $yaml_file ) { + die "CANfigurator Error: Input YAML not found at '$yaml_file'.\n"; +} + +open my $fh, '<', $yaml_file or die "CANfigurator Error: Can't open $yaml_file: $!"; + +my @msg_ids; + +# --- Parsing Logic --- +while ( my $line = <$fh> ) { + + # Stop parsing if we hit other sections + last if $line =~ /^(Custom CAN ID|GR ID):/; + + # Identify a Message Name (indented by 2 spaces) + if ( $line =~ /^\s{2}(\w[\w\s\d\.]+):\s*$/ ) { + my $msg_name = $1; + my $found_id = 0; + + # Inner loop: Scan this message block for its MSG ID + while ( my $next_line = <$fh> ) { + + # Catch the MSG ID field (indented by 4 spaces) + if ( $next_line =~ /^\s{4}MSG ID:\s*(0x[0-9A-Fa-f]+)/ ) { + my $id = $1; + my $enum_name = "MSG_" . uc($msg_name); + $enum_name =~ s/[^A-Z0-9]+/_/g; # Clean up spaces/dots for C enum compatibility + $enum_name =~ s/_+/_/g; + $enum_name =~ s/^_|_$//g; + + push @msg_ids, { name => $enum_name, id => $id }; + $found_id = 1; + last; + } + + # Safety break: If we hit a new message block or section before finding an ID, + # return to outer loop to process the new line. + if ( $next_line =~ /^\s{2}\w/ || $next_line =~ /^\w/ ) { + + # Reposition the file pointer so the outer loop can read this header + seek( $fh, -length($next_line), 1 ); + last; + } + + # All other fields (bit_start, data type, map equation, etc.) are + # naturally ignored as the loop continues until it hits MSG ID. + } + } +} +close($fh); + +# --- Writing Logic --- +open my $out, '>', $output_file or die "CANfigurator Error: Can't create $output_file: $!"; + +print {$out} "// Auto-generated CAN Message IDs\n"; +print {$out} "#ifndef CAN_MSG_IDS_H\n"; +print {$out} "#define CAN_MSG_IDS_H\n\n"; +print {$out} "typedef enum {\n"; + +foreach my $msg (@msg_ids) { + printf $out " %-40s = %s,\n", $msg->{name}, $msg->{id}; +} + +print {$out} "} can_msg_id_t;\n\n"; +print {$out} "#endif // CAN_MSG_IDS_H\n"; + +close($out); + +print "CANfigurator: Generated $output_file with " . scalar(@msg_ids) . " message IDs\n"; + +# #!/usr/bin/perl +# use strict; +# use warnings; +# use File::Basename; +# use File::Path qw(make_path); +# my $yaml_file = $ARGV[0] // 'format.CANdo'; +# my $output_file = $ARGV[1] // 'can_msg_ids.h'; +# my $dir = dirname($output_file); +# make_path($dir) if $dir && $dir ne '.' && !-d $dir; + +# # Safety check: Verify the YAML source exists before parsing +# if ( !-e $yaml_file ) { +# die "CANfigurator Error: Input YAML not found at '$yaml_file'.\n" . "Check your CMake source paths or provide the file as the first argument.\n"; +# } + +# # Open the YAML for reading +# open( my $fh, '<', $yaml_file ) or die "CANfigurator Error: Can't open $yaml_file: $!"; + +# my @msg_ids; + +# # --- Parsing Logic --- +# while ( my $line = <$fh> ) { + +# # Stop parsing if we hit other sections +# last if $line =~ /^(Custom CAN ID|GR ID):/; + +# if ( $line =~ /^\s{2}(\w[\w\s]+\w):\s*$/ ) { +# my $msg_name = $1; + +# while ( my $next_line = <$fh> ) { +# last if $next_line =~ /^(Custom CAN ID|GR ID):/; + +# if ( $next_line =~ /^\s{4}MSG ID:\s*(0x[0-9A-Fa-f]+)/ ) { +# my $id = $1; +# my $enum_name = "MSG_" . uc($msg_name); +# $enum_name =~ s/\s+/_/g; + +# push @msg_ids, { name => $enum_name, id => $id }; +# last; +# } +# last if $next_line =~ /^\s{2}\w[\w\s]+:/; +# } +# } +# } +# close($fh); + +# # --- Writing Logic --- +# # Open the header file for writing using the dynamic output path +# open( my $out, '>', $output_file ) or die "CANfigurator Error: Can't create $output_file: $!"; + +# print $out "// Auto-generated CAN Message IDs\n"; +# print $out "#ifndef CAN_MSG_IDS_H\n"; +# print $out "#define CAN_MSG_IDS_H\n\n"; +# print $out "typedef enum {\n"; + +# foreach my $msg (@msg_ids) { +# print $out " $msg->{name} = $msg->{id},\n"; +# } + +# print $out "} can_msg_id_t;\n\n"; +# print $out "#endif // CAN_MSG_IDS_H\n"; + +# close($out); + +# print "CANfigurator: Generated $output_file with " . scalar(@msg_ids) . " message IDs\n"; diff --git a/Autogen/CAN/Src/STRUCTparser.pl b/Autogen/CAN/Src/STRUCTparser.pl new file mode 100644 index 000000000..f8236fa31 --- /dev/null +++ b/Autogen/CAN/Src/STRUCTparser.pl @@ -0,0 +1,172 @@ +#!/usr/bin/perl +use strict; +use warnings; +use File::Basename; +use File::Path qw(make_path); + +# --- Configuration --- +my $yaml_path = $ARGV[0] // 'format.CANdo'; +my $output_path = $ARGV[1] // 'CANDler.h'; +my $prefix = "GR_OLD"; + +my $dir = dirname($output_path); +make_path($dir) if $dir && $dir ne '.' && !-d $dir; + +open( my $in, '<', $yaml_path ) or die "Can't open YAML: $!"; +open( my $out, '>', $output_path ) or die "Can't open Output: $!"; + +my $in_msg_section = 0; +my %desc_map; + +# --- Step 1: Pre-parse for descriptions --- +while ( my $line = <$in> ) { + chomp($line); + if ( $line =~ /^Message ID:/ ) { $in_msg_section = 1; next; } + elsif ( $line =~ /^\S/ && $line !~ /^Message ID:/ ) { $in_msg_section = 0; } + next unless $in_msg_section; + + # Match " Field Name:" + if ( $line =~ /^\s{2,4}([^:#\s][^:]+):/ ) { + my $raw_name = $1; + my $f_name = lc($raw_name); + $f_name =~ s/[^a-z0-9]/_/g; + $f_name =~ s/_+/_/g; + $f_name =~ s/^_|_$//g; + + my $description = ""; + my $pos = tell($in); + while ( my $sub = <$in> ) { + if ( $sub =~ /^\s+#\s*(.*)/ ) { + $description .= " " . $1; + } + + # Stop if we hit a new field or a new message + last if $sub =~ /^\s{2,4}[^#\s]/ || $sub =~ /^\S/; + } + seek( $in, $pos, 0 ); + $description =~ s/^\s+//; + $desc_map{$f_name} = $description if $description; + } +} + +# --- Step 2: Generate the Header --- +seek( $in, 0, 0 ); +$in_msg_section = 0; +my $current_msg = ""; +my @fields = (); + +print {$out} "/* Auto-generated header file */\n"; +print {$out} "#ifndef ${prefix}_MESSAGES_H\n"; +print {$out} "#define ${prefix}_MESSAGES_H\n\n"; +print {$out} "#include \n\n"; + +while ( my $line = <$in> ) { + chomp($line); + if ( $line =~ /^Message ID:/ ) { $in_msg_section = 1; next; } + elsif ( $line =~ /^\S/ && $line !~ /^Message ID:/ ) { $in_msg_section = 0; } + next unless $in_msg_section; + + # Match " Message Name:" (2 spaces) + if ( $line =~ /^ ([^:#\s][^:]+):$/ ) { + process_bytes_exact( $out, $current_msg, \@fields, \%desc_map ) if $current_msg; + $current_msg = $1; + @fields = (); + } + + # Match " Field Name:" (4 spaces) + elsif ( $line =~ /^\s{4}([^:#\s][^:]+):/ ) { + my $f_name = $1; + my $start = undef; + my $data_type = "u8"; + + my $pos = tell($in); + while ( my $sub = <$in> ) { + if ( $sub =~ /bit_start:\s*(\d+)/ ) { + $start = $1; + } + if ( $sub =~ /data type:\s*(\w+)/ ) { + $data_type = $1; + } + + # Break if we hit a new field or message + last if $sub =~ /^\s{4}[^#\s]/ || $sub =~ /^\s{0,2}\S/; + } + seek( $in, $pos, 0 ); + + if ( defined $start ) { + push @fields, { name => $f_name, start => $start, type => $data_type }; + } + } +} + +# Final call for the last message +process_bytes_exact( $out, $current_msg, \@fields, \%desc_map ) if $current_msg; +print {$out} "#endif\n"; + +sub process_bytes_exact { + my ( $fh, $name, $f_ref, $d_map ) = @_; + return if !$name || $name =~ /Message ID/; + + my $struct_tag = uc( $name =~ s/[^A-Za-z0-9]/_/gr =~ s/_+/_/gr =~ s/^_|_$//gr ); + + if ( $name =~ /Cell Data/i ) { + print {$fh} "/** $name */\ntypedef struct {\n"; + print {$fh} "\tstruct {\n\t\tuint8_t voltage;\n\t\tuint8_t temperature;\n\t} cells[32];\n"; + print {$fh} "} ${prefix}_${struct_tag}_MSG;\n\n"; + return; + } + + my %byte_map; + foreach my $f (@$f_ref) { + my $byte_num = int( $f->{start} / 8 ); + push @{ $byte_map{$byte_num} }, $f; + } + + print {$fh} "/** $name */\ntypedef struct {\n"; + my @sorted_bytes = sort { $a <=> $b } keys %byte_map; + + for ( my $i = 0 ; $i < @sorted_bytes ; $i++ ) { + my $b_idx = $sorted_bytes[$i]; + my @fields = @{ $byte_map{$b_idx} }; + + if ( scalar @fields > 2 ) { + my $start_byte = $b_idx; + my $next_real_data_byte = $b_idx + 1; + my $has_error = grep { $_->{name} =~ /error|fault|violation/i } @fields; + for ( my $j = $i + 1 ; $j < @sorted_bytes ; $j++ ) { + my $look_idx = $sorted_bytes[$j]; + my @look_f = @{ $byte_map{$look_idx} }; + if ( scalar @look_f > 2 || ( scalar @look_f == 1 && $look_f[0]->{name} =~ /reserved/i ) ) { + $next_real_data_byte = $look_idx + 1; + $i++; + } + else { $next_real_data_byte = $look_idx; last; } + } + my $len = $next_real_data_byte - $start_byte; + my $v_name = $has_error ? "error_fault_violation_bits" : "ping_block"; + printf( $fh "\tuint8_t %s%s;\n", $v_name, ( $len > 1 ? "[$len]" : "" ) ); + next; + } + + my $f_var = ( scalar @fields == 1 ) ? lc( $fields[0]->{name} ) : join( '_', map { lc( $_->{name} ) } @fields ); + $f_var =~ s/[^a-z0-9]/_/g; + $f_var =~ s/_+/_/g; + $f_var =~ s/^_|_$//g; + $f_var = "_" . $f_var if $f_var =~ /^\d/; + + my $type = "uint8_t"; + my $final_desc = ""; + foreach my $f (@fields) { + $type = "uint16_t" if $f->{type} =~ /16/; + $type = "uint32_t" if $f->{type} =~ /32/; + my $clean_name = lc( $f->{name} ) =~ s/[^a-z0-9]/_/gr =~ s/_+/_/gr =~ s/^_|_$//gr; + $final_desc .= " " . $d_map->{$clean_name} if $d_map->{$clean_name}; + } + $final_desc =~ s/^\s+//; + + if ($final_desc) { print {$fh} "\t/** $final_desc (Byte $b_idx) */\n"; } + else { print {$fh} "\t/** Byte $b_idx */\n"; } + printf( $fh "\t%-10s %-30s\n", $type, $f_var . ";" ); + } + print {$fh} "} ${prefix}_${struct_tag}_MSG;\n\n"; +} diff --git a/Autogen/CAN/empty.txt b/Autogen/CAN/empty.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/CMakeLists.txt b/CMakeLists.txt index ef62927ea..b0a7213de 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,6 +43,9 @@ include("${lib_path}/Utils/CircularBuffer/circular-buffer-lib.cmake") include("${lib_path}/cmake/gr-lib.cmake") include("${lib_path}/Utils/BitManipulations/bit-utils.cmake") +# Autogen +include("Autogen/CAN/CANfigurator.cmake") + # Peripherals include("${lib_path}/Peripherals/USART/common.cmake") include("${lib_path}/Peripherals/CAN/common.cmake")