@@ -26,7 +26,7 @@ uint8_t RivianBattery::calculateCRC(CAN_frame rx_frame, uint8_t length, uint8_t
2626
2727void RivianBattery::update_values () {
2828
29- datalayer.battery .status .real_soc = battery_SOC ;
29+ datalayer.battery .status .real_soc = battery_SOC_average ;
3030
3131 // datalayer.battery.status.soh_pptt; //TODO: Find usable SOH
3232
@@ -70,27 +70,36 @@ void RivianBattery::update_values() {
7070 datalayer_extended.rivian .main_contactor_voltage = main_contactor_voltage;
7171 datalayer_extended.rivian .voltage_reference = voltage_reference;
7272 datalayer_extended.rivian .DCFC_contactor_voltage = DCFC_contactor_voltage;
73+ datalayer_extended.rivian .slewrate_potential_violation = slewrate_potential_violation;
74+ datalayer_extended.rivian .minimum_power_potential_violation = minimum_power_potential_violation;
75+ datalayer_extended.rivian .operation_limit_violation_warning = operation_limit_violation_warning;
7376}
7477
7578void RivianBattery::handle_incoming_can_frame (CAN_frame rx_frame) {
7679 switch (rx_frame.ID ) {
80+ case 0x00A : // DCDC status [Platform CAN]+ 20ms
81+ datalayer.battery .status .CAN_battery_still_alive = CAN_STILL_ALIVE;
82+ break ;
7783 case 0x0A0 : // Cellvoltage min/max (Not available on all packs)
7884 datalayer.battery .status .CAN_battery_still_alive = CAN_STILL_ALIVE;
7985 cell_min_voltage_mV = (((rx_frame.data .u8 [5 ] & 0x0F ) << 8 ) | rx_frame.data .u8 [4 ]);
8086 cell_max_voltage_mV = ((rx_frame.data .u8 [6 ] << 4 ) | (rx_frame.data .u8 [5 ] >> 4 ));
8187 break ;
82- case 0x06E : // Status flags [Platform CAN]+
88+ case 0x06E : // Status flags [Platform CAN]+ 10ms
8389 datalayer.battery .status .CAN_battery_still_alive = CAN_STILL_ALIVE;
8490 error_flags_from_BMS = rx_frame.data .u8 [5 ];
8591 error_relay_open = (rx_frame.data .u8 [6 ] & 0x01 );
8692 IsolationMeasurementOngoing = (rx_frame.data .u8 [6 ] & 0x02 ) >> 1 ;
8793 contactor_state = (((rx_frame.data .u8 [7 ] & 0x01 ) << 3 ) | (rx_frame.data .u8 [6 ] >> 5 ));
8894 break ;
89- case 0x100 : // Discharge/Charge speed
95+ case 0x100 : // Discharge/Charge speed [Platform CAN]+ 10ms
9096 battery_charge_limit_amp =
9197 (((rx_frame.data .u8 [3 ] & 0x0F ) << 8 ) | (rx_frame.data .u8 [2 ] << 4 ) | (rx_frame.data .u8 [1 ] >> 4 )) / 20 ;
9298 battery_discharge_limit_amp =
9399 (((rx_frame.data .u8 [5 ] & 0x0F ) << 8 ) | (rx_frame.data .u8 [4 ] << 4 ) | (rx_frame.data .u8 [3 ] >> 4 )) / 20 ;
100+ slewrate_potential_violation = (rx_frame.data .u8 [5 ] & 0x10 ) >> 4 ;
101+ minimum_power_potential_violation = (rx_frame.data .u8 [5 ] & 0x20 ) >> 5 ;
102+ operation_limit_violation_warning = (rx_frame.data .u8 [5 ] & 0x40 ) >> 6 ;
94103 break ;
95104 case 0x1E3 : // HMI [Platform CAN]+
96105 datalayer.battery .status .CAN_battery_still_alive = CAN_STILL_ALIVE;
@@ -164,9 +173,9 @@ void RivianBattery::handle_incoming_can_frame(CAN_frame rx_frame) {
164173 datalayer.battery .status .CAN_battery_still_alive = CAN_STILL_ALIVE;
165174 BMS_state = (rx_frame.data .u8 [0 ] & 0x03 );
166175 break ;
167- case 0x55B : // Temperatures
176+ case 0x55B : // SOC [Platform CAN]+
168177 datalayer.battery .status .CAN_battery_still_alive = CAN_STILL_ALIVE;
169- battery_SOC = (rx_frame.data .u8 [4 ] << 8 ) | rx_frame.data .u8 [5 ];
178+ battery_SOC_average = (rx_frame.data .u8 [4 ] << 8 ) | rx_frame.data .u8 [5 ];
170179 break ;
171180 default :
172181 break ;
0 commit comments