diff --git a/bms.c b/bms.c index 8466de7c3..455c572c3 100644 --- a/bms.c +++ b/bms.c @@ -268,6 +268,30 @@ bool bms_process_can_frame(uint32_t can_id, uint8_t *data8, int len, bool is_ext } } break; + case CAN_PACKET_BMS_AH_WH_CHG_TOTAL: { + used_data = true; + + if (id == m_values.can_id || UTILS_AGE_S(m_values.update_time) > MAX_CAN_AGE_SEC) { + int32_t ind = 0; + m_values.can_id = id; + m_values.update_time = chVTGetSystemTimeX(); + m_values.ah_cnt_chg_total = buffer_get_float32_auto(data8, &ind); + m_values.wh_cnt_chg_total = buffer_get_float32_auto(data8, &ind); + } + } break; + + case CAN_PACKET_BMS_AH_WH_DIS_TOTAL: { + used_data = true; + + if (id == m_values.can_id || UTILS_AGE_S(m_values.update_time) > MAX_CAN_AGE_SEC) { + int32_t ind = 0; + m_values.can_id = id; + m_values.update_time = chVTGetSystemTimeX(); + m_values.ah_cnt_dis_total = buffer_get_float32_auto(data8, &ind); + m_values.wh_cnt_dis_total = buffer_get_float32_auto(data8, &ind); + } + } break; + default: break; } @@ -390,6 +414,12 @@ void bms_process_cmd(unsigned char *data, unsigned int len, // CAN ID send_buffer[ind++] = m_values.can_id; + // Total charge and discharge counters + buffer_append_float32_auto(send_buffer, m_values.ah_cnt_chg_total, &ind); + buffer_append_float32_auto(send_buffer, m_values.wh_cnt_chg_total, &ind); + buffer_append_float32_auto(send_buffer, m_values.ah_cnt_dis_total, &ind); + buffer_append_float32_auto(send_buffer, m_values.wh_cnt_dis_total, &ind); + reply_func(send_buffer, ind); } break; diff --git a/conf_general.h b/conf_general.h index 1d91992e2..92b893873 100644 --- a/conf_general.h +++ b/conf_general.h @@ -24,7 +24,7 @@ #define FW_VERSION_MAJOR 5 #define FW_VERSION_MINOR 03 // Set to 0 for building a release and iterate during beta test builds -#define FW_TEST_VERSION_NUMBER 17 +#define FW_TEST_VERSION_NUMBER 18 #include "datatypes.h" diff --git a/datatypes.h b/datatypes.h index 164c3285c..aed6973ba 100644 --- a/datatypes.h +++ b/datatypes.h @@ -264,6 +264,10 @@ typedef struct { float soc; float soh; int can_id; + float ah_cnt_chg_total; + float wh_cnt_chg_total; + float ah_cnt_dis_total; + float wh_cnt_dis_total; systime_t update_time; } bms_values; @@ -1014,6 +1018,8 @@ typedef enum { CAN_PACKET_BMS_HW_DATA_3, CAN_PACKET_BMS_HW_DATA_4, CAN_PACKET_BMS_HW_DATA_5, + CAN_PACKET_BMS_AH_WH_CHG_TOTAL, + CAN_PACKET_BMS_AH_WH_DIS_TOTAL, } CAN_PACKET_ID; // Logged fault data