diff --git a/Core/Inc/vehicle_state.h b/Core/Inc/vehicle_state.h index afe5d03..dac48d1 100644 --- a/Core/Inc/vehicle_state.h +++ b/Core/Inc/vehicle_state.h @@ -137,6 +137,8 @@ typedef struct { float min_cell_volt; float max_cell_temp; int soc_ts; + + float lv_bat_voltage; int soc_lv; float ts_current; diff --git a/Core/Src/vehicle.c b/Core/Src/vehicle.c index 60892d4..c87e8e7 100644 --- a/Core/Src/vehicle.c +++ b/Core/Src/vehicle.c @@ -33,6 +33,7 @@ #define CAN_ABX_DRIVER_SPEED_FACTOR (0.2 * 3.6) #define CAN_CS_INTERNAL_TEMP_FACTOR 0.01 #define CAN_ABX_MISC_DISTANCE_TOTAL_FACTOR 0.01 +#define CAN_ABX_MISC_LV_BAT_VOLTAGE_FACTOR (15.0f / 255) void vehicle_thread_entry(ULONG hfdcan_addr) { memset(&vehicle_state, 0, sizeof(vehicle_state)); @@ -130,6 +131,7 @@ void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) { vehicle_state.distance_total = (data[3] | (data[4] << 8)) * CAN_ABX_MISC_DISTANCE_TOTAL_FACTOR; vehicle_state.soc_lv = data[5]; + vehicle_state.lv_bat_voltage = data[6] * CAN_ABX_MISC_LV_BAT_VOLTAGE_FACTOR; break; case CAN_ID_AS_MISSION_FB: vehicle_state.active_mission = data[0] & 0b111; diff --git a/TouchGFX/gui/include/gui/common/NamedField.hpp b/TouchGFX/gui/include/gui/common/NamedField.hpp index 2e71e59..6edb9d4 100644 --- a/TouchGFX/gui/include/gui/common/NamedField.hpp +++ b/TouchGFX/gui/include/gui/common/NamedField.hpp @@ -17,7 +17,7 @@ CountedEnum(DataFieldType, size_t, DF_TSState, DF_ASState, DF_ActiveMission, DF_Speed, DF_BBal, DF_BPF, DF_BPR, DF_DistanceTotal, DF_TempMotL, DF_TempMotR, DF_TempInvL, DF_TempInvR, DF_TempBrakeFL, DF_TempBrakeFR, DF_TempBrakeRL, DF_TempBrakeRR, DF_LapBest, - DF_LapLast); + DF_LapLast, DF_LVBatVoltage); enum class NamedFieldKind { Float, Bool, Text, Int }; diff --git a/TouchGFX/gui/src/common/NamedField.cpp b/TouchGFX/gui/src/common/NamedField.cpp index 6492697..9e92f5c 100644 --- a/TouchGFX/gui/src/common/NamedField.cpp +++ b/TouchGFX/gui/src/common/NamedField.cpp @@ -298,6 +298,8 @@ NamedFieldDescription dataFieldDescs[] = { VEH_FIELD(lap_best)}, [DF_LapLast] = {NamedFieldKind::Float, "LAPLAST", 3, 1, VEH_FIELD(lap_last)}, + [DF_LVBatVoltage] = {NamedFieldKind::Float, "LVVBAT", 2, 2, + VEH_FIELD(lv_bat_voltage)}, }; static_assert(sizeof(dataFieldDescs) / sizeof(dataFieldDescs[0]) ==