APPS calibration screen
This commit is contained in:
@ -3,6 +3,75 @@
|
||||
#include "vehicle.h"
|
||||
|
||||
Params params = {0};
|
||||
static const float param_limits[] = {
|
||||
[PF_BBAL] = 100.0f,
|
||||
[PF_PLIM] = 120.0f,
|
||||
[PF_TORQUE] = 1500.0f,
|
||||
[PF_SLIM] = 150.0f,
|
||||
[PF_APPS0_MIN] = 5.0f,
|
||||
[PF_APPS0_MAX] = 5.0f,
|
||||
[PF_APPS1_MIN] = 5.0f,
|
||||
[PF_APPS1_MAX] = 5.0f,
|
||||
[PF_TV] = 1,
|
||||
[PF_TC] = 1,
|
||||
[PF_TC_SLIPREF] = 1.0f,
|
||||
[PF_TC_MUMAX] = 5.0f,
|
||||
[PF_TC_P] = 20.0f,
|
||||
[PF_TC_I] = 20.0f,
|
||||
[PF_DRS_CLOSED] = 1.0f,
|
||||
[PF_DRS_OPEN] = 1.0f,
|
||||
// TODO: counted enum for map?
|
||||
[PF_MAP] = 7,
|
||||
};
|
||||
float param_steps[] = {
|
||||
[PF_BBAL] = 1,
|
||||
[PF_PLIM] = 1,
|
||||
[PF_TORQUE] = 10,
|
||||
[PF_SLIM] = 1,
|
||||
[PF_APPS0_MIN] = 0.001f,
|
||||
[PF_APPS0_MAX] = 0.001f,
|
||||
[PF_APPS1_MIN] = 0.001f,
|
||||
[PF_APPS1_MAX] = 0.001f,
|
||||
[PF_TV] = 1,
|
||||
[PF_TC] = 1,
|
||||
[PF_TC_SLIPREF] = 0.01f,
|
||||
[PF_TC_MUMAX] = 0.1f,
|
||||
[PF_TC_P] = 0.1f,
|
||||
[PF_TC_I] = 0.1f,
|
||||
[PF_DRS_CLOSED] = 0.001f,
|
||||
[PF_DRS_OPEN] = 0.001f,
|
||||
[PF_MAP] = 1,
|
||||
};
|
||||
static const float param_broadcast_factors[] = {
|
||||
[PF_BBAL] = 1,
|
||||
[PF_PLIM] = 1,
|
||||
[PF_TORQUE] = 1,
|
||||
[PF_SLIM] = 1,
|
||||
[PF_APPS0_MIN] = 0.001f,
|
||||
[PF_APPS0_MAX] = 0.001f,
|
||||
[PF_APPS1_MIN] = 0.001f,
|
||||
[PF_APPS1_MAX] = 0.001f,
|
||||
[PF_TV] = 1,
|
||||
[PF_TC] = 1,
|
||||
[PF_TC_SLIPREF] = 0.001f,
|
||||
[PF_TC_MUMAX] = 0.001f,
|
||||
[PF_TC_P] = 0.001f,
|
||||
[PF_TC_I] = 0.001f,
|
||||
[PF_DRS_CLOSED] = 0.001f,
|
||||
[PF_DRS_OPEN] = 0.001f,
|
||||
[PF_MAP] = 1,
|
||||
};
|
||||
#ifdef __cplusplus
|
||||
_Static_assert(sizeof(param_limits) / sizeof(param_limits[0]) ==
|
||||
ParamType_COUNT,
|
||||
"Incorrect number of param limits");
|
||||
_Static_assert(sizeof(param_steps) / sizeof(param_steps[0]) == ParamType_COUNT,
|
||||
"Incorrect number of param steps");
|
||||
_Static_assert(sizeof(param_broadcast_factors) /
|
||||
sizeof(param_broadcast_factors[0]) ==
|
||||
ParamType_COUNT,
|
||||
"Incorrect number of param broadcast factors");
|
||||
#endif
|
||||
|
||||
void params_init() {
|
||||
params.bbal = 50;
|
||||
@ -11,96 +80,50 @@ void params_init() {
|
||||
|
||||
void params_inc(ParamType param) {
|
||||
switch (param) {
|
||||
case PF_BBAL:
|
||||
params.bbal += 0.5f;
|
||||
if (params.bbal > 100.0f) {
|
||||
params.bbal = 100.0f;
|
||||
case PF_TV:
|
||||
case PF_TC:
|
||||
case PF_MAP:
|
||||
params.valuesInt[param] += param_steps[param];
|
||||
if (params.valuesInt[param] > param_limits[param]) {
|
||||
params.valuesInt[param] = param_limits[param];
|
||||
}
|
||||
break;
|
||||
case PF_SLIPREF:
|
||||
params.slipref += 0.01f;
|
||||
break;
|
||||
case PF_MUMAX:
|
||||
params.mumax += 0.1f;
|
||||
break;
|
||||
case PF_ASRP:
|
||||
params.asrp++;
|
||||
break;
|
||||
case PF_ASRI:
|
||||
params.asri++;
|
||||
break;
|
||||
case PF_ASRON:
|
||||
params.asron = 1;
|
||||
break;
|
||||
case PF_PLIM:
|
||||
params.plim = (params.plim < 80) ? params.plim + 1 : 80;
|
||||
break;
|
||||
default:
|
||||
params.valuesFloat[param] += param_steps[param];
|
||||
if (params.valuesFloat[param] > param_limits[param]) {
|
||||
params.valuesFloat[param] = param_limits[param];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void params_dec(ParamType param) {
|
||||
switch (param) {
|
||||
case PF_BBAL:
|
||||
params.bbal -= 0.5f;
|
||||
if (params.bbal < 0.0f) {
|
||||
params.bbal = 0.0f;
|
||||
case PF_TV:
|
||||
case PF_TC:
|
||||
case PF_MAP:
|
||||
params.valuesInt[param] -= param_steps[param];
|
||||
if (params.valuesInt[param] < 0) {
|
||||
params.valuesInt[param] = 0;
|
||||
}
|
||||
break;
|
||||
case PF_SLIPREF:
|
||||
if (params.slipref > 0) {
|
||||
params.slipref -= 0.01f;
|
||||
default:
|
||||
params.valuesFloat[param] -= param_steps[param];
|
||||
if (params.valuesFloat[param] < 0) {
|
||||
params.valuesFloat[param] = 0;
|
||||
}
|
||||
break;
|
||||
case PF_MUMAX:
|
||||
if (params.mumax > 0) {
|
||||
params.mumax -= 0.1f;
|
||||
}
|
||||
break;
|
||||
case PF_ASRP:
|
||||
if (params.asrp > 0) {
|
||||
params.asrp--;
|
||||
}
|
||||
break;
|
||||
case PF_ASRI:
|
||||
if (params.asri > 0) {
|
||||
params.asri--;
|
||||
}
|
||||
break;
|
||||
case PF_ASRON:
|
||||
params.asron = 0;
|
||||
break;
|
||||
case PF_PLIM:
|
||||
params.plim = (params.plim > 2) ? params.plim - 1 : 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void params_broadcast(ParamType param) {
|
||||
int32_t value;
|
||||
switch (param) {
|
||||
case PF_BBAL:
|
||||
value = params.bbal * 10;
|
||||
break;
|
||||
case PF_SLIPREF:
|
||||
value = params.slipref * 100;
|
||||
break;
|
||||
case PF_MUMAX:
|
||||
value = params.mumax * 10;
|
||||
break;
|
||||
case PF_ASRP:
|
||||
value = params.asrp;
|
||||
break;
|
||||
case PF_ASRI:
|
||||
value = params.asri;
|
||||
break;
|
||||
case PF_ASRON:
|
||||
value = params.asron;
|
||||
break;
|
||||
case PF_PLIM:
|
||||
value = params.plim;
|
||||
case PF_TV:
|
||||
case PF_TC:
|
||||
case PF_MAP:
|
||||
value = params.valuesInt[param] / param_broadcast_factors[param];
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
value = params.valuesFloat[param] / param_broadcast_factors[param];
|
||||
}
|
||||
vehicle_broadcast_param(param, value);
|
||||
}
|
||||
|
||||
@ -25,6 +25,8 @@
|
||||
#define CAN_ID_ABX_MISC 0x109
|
||||
#define CAN_ID_ABX_HYDRAULICS 0x110
|
||||
#define CAN_ID_ABX_ENDURANCE 0x113
|
||||
#define CAN_ID_ABX_APPS 0x114
|
||||
#define CAN_ID_ABX_APPS_LIMITS 0x115
|
||||
#define CAN_ID_EPSC_OUT 0x321
|
||||
#define CAN_ID_MISSION_SELECTED 0x400
|
||||
#define CAN_ID_STW_BUTTONS 0x401
|
||||
@ -73,6 +75,8 @@ void vehicle_thread_entry(ULONG hfdcan_addr) {
|
||||
ftcan_add_filter(CAN_ID_ABX_MISC, 0x7FF);
|
||||
ftcan_add_filter(CAN_ID_ABX_ENDURANCE, 0x7FF);
|
||||
ftcan_add_filter(CAN_ID_ABX_HYDRAULICS, 0x7FF);
|
||||
ftcan_add_filter(CAN_ID_ABX_APPS, 0x7FF);
|
||||
ftcan_add_filter(CAN_ID_ABX_APPS_LIMITS, 0x7FF);
|
||||
ftcan_add_filter(CAN_ID_EPSC_OUT, 0x7FF);
|
||||
ftcan_add_filter(CAN_ID_AS_MISSION_FB, 0x7FF);
|
||||
ftcan_add_filter(CAN_ID_STW_STATUS, 0x7FF);
|
||||
@ -204,6 +208,18 @@ void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) {
|
||||
vehicle_state.temps.brake_rl = (data[4] | (data[5] << 8)) * 0.01f;
|
||||
vehicle_state.temps.brake_rr = (data[6] | (data[7] << 8)) * 0.01f;
|
||||
break;
|
||||
case CAN_ID_ABX_APPS:
|
||||
vehicle_state.apps0_volt = (data[0] | (data[1] << 8)) * 0.001f;
|
||||
vehicle_state.apps1_volt = (data[2] | (data[3] << 8)) * 0.001f;
|
||||
vehicle_state.apps0_out = (int16_t)((data[4] | (data[5] << 8))) * 0.001f;
|
||||
vehicle_state.apps1_out = (int16_t)((data[6] | (data[7] << 8))) * 0.001f;
|
||||
break;
|
||||
case CAN_ID_ABX_APPS_LIMITS:
|
||||
vehicle_state.apps0_min = (data[0] | (data[1] << 8)) * 0.001f;
|
||||
vehicle_state.apps0_max = (data[2] | (data[3] << 8)) * 0.001f;
|
||||
vehicle_state.apps1_min = (data[4] | (data[5] << 8)) * 0.001f;
|
||||
vehicle_state.apps1_max = (data[6] | (data[7] << 8)) * 0.001f;
|
||||
break;
|
||||
case CAN_ID_CS_INTERNAL:
|
||||
vehicle_state.temps.inv_l =
|
||||
(data[0] | (data[1] << 8)) * CAN_CS_INTERNAL_TEMP_FACTOR;
|
||||
|
||||
Reference in New Issue
Block a user