Compare commits

...

3 Commits

Author SHA1 Message Date
Jasper Blanckenburg 6d70d12148 LV battery voltage 2023-07-27 19:04:44 +02:00
Jasper Blanckenburg 638394ac0a Laptimes 2023-07-27 01:46:24 +02:00
Jasper Blanckenburg 6da02adae9 Don't use L8 compression by default 2023-07-25 19:01:45 +02:00
8 changed files with 24 additions and 4 deletions

View File

@ -129,11 +129,16 @@ typedef struct {
IniChkState ini_chk_state;
unsigned lap_count;
float lap_last;
float lap_best;
Temperatures temps;
float min_cell_volt;
float max_cell_temp;
int soc_ts;
float lv_bat_voltage;
int soc_lv;
float ts_current;

View File

@ -16,6 +16,7 @@
#define CAN_ID_AMS_STATUS 0xA
#define CAN_ID_AMS_ERROR 0xC
#define CAN_ID_ABX_DRIVER 0x101
#define CAN_ID_ABX_TIMINGS 0x102
#define CAN_ID_ABX_BRAKE_T 0x105
#define CAN_ID_CS_INTERNAL 0x108
#define CAN_ID_ABX_MISC 0x109
@ -32,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));
@ -40,6 +42,7 @@ void vehicle_thread_entry(ULONG hfdcan_addr) {
ftcan_add_filter(CAN_ID_AMS_STATUS, 0x7FF);
ftcan_add_filter(CAN_ID_AMS_ERROR, 0x7FF);
ftcan_add_filter(CAN_ID_ABX_DRIVER, 0x7FF);
ftcan_add_filter(CAN_ID_ABX_TIMINGS, 0x7FF);
ftcan_add_filter(CAN_ID_ABX_BRAKE_T, 0x7FF);
ftcan_add_filter(CAN_ID_CS_INTERNAL, 0x7FF);
ftcan_add_filter(CAN_ID_ABX_MISC, 0x7FF);
@ -104,6 +107,10 @@ void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) {
vehicle_state.brake_press_r = ((data[2] >> 4) | (data[3] << 4)) * 0.1;
vehicle_state.speed = data[5] * CAN_ABX_DRIVER_SPEED_FACTOR;
break;
case CAN_ID_ABX_TIMINGS:
vehicle_state.lap_best = (data[0] | (data[1] << 8)) * 0.01f;
vehicle_state.lap_last = (data[2] | (data[3] << 8)) * 0.01f;
break;
case CAN_ID_ABX_BRAKE_T:
vehicle_state.temps.brake_fl = (data[0] | (data[1] << 8)) * 0.01f;
vehicle_state.temps.brake_fr = (data[2] | (data[3] << 8)) * 0.01f;
@ -124,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;

View File

@ -18,7 +18,7 @@
"layout_rotation": "90"
}
},
"l8_compression": "LZW9"
"l8_compression": "no"
},
"text_configuration": {
"remap": "yes",

View File

@ -16,7 +16,8 @@ CountedEnum(DataFieldType, size_t, DF_TSState, DF_ASState, DF_ActiveMission,
DF_TSSoC, DF_LVSoC, DF_TSCurrent, DF_TSVoltageBat, DF_TSVoltageVeh,
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_TempBrakeFR, DF_TempBrakeRL, DF_TempBrakeRR, DF_LapBest,
DF_LapLast, DF_LVBatVoltage);
enum class NamedFieldKind { Float, Bool, Text, Int };

View File

@ -294,6 +294,12 @@ NamedFieldDescription dataFieldDescs[] = {
VEH_FIELD(temps.brake_rl)},
[DF_TempBrakeRR] = {NamedFieldKind::Float, "TBRR", 3, 0,
VEH_FIELD(temps.brake_rr)},
[DF_LapBest] = {NamedFieldKind::Float, "LAPBEST", 3, 1,
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]) ==

View File

@ -11,7 +11,7 @@ constexpr int32_t SHOW_ERRORS_FOR = 10000; // ms
#include "vehicle_state.h"
DriverViewPresenter::DriverViewPresenter(DriverViewView &v)
: view(v), fields{DF_MinCellVolt, DF_Speed, DF_MaxCellTemp} {}
: view(v), fields{DF_LapLast, DF_Speed, DF_MaxCellTemp} {}
void DriverViewPresenter::activate() {
for (size_t i = 0; i < 3; i++) {

View File

@ -14,7 +14,7 @@
#include "vehicle_state.h"
DriverViewView::DriverViewView()
: fieldTypes{DF_MinCellVolt, DF_Speed, DF_TSCurrent} {}
: fieldTypes{DF_LapLast, DF_Speed, DF_MaxCellTemp} {}
void DriverViewView::setupScreen() {
DriverViewViewBase::setupScreen();