#define DISABLE_DPF_REGEN_NOTIFICATIION
#define DASHBOARD_ITEMS \
X(FIRMWARE_ITEM, "GiUCAN " GIUCAN_VERSION) \
X(UPTIME_ITEM, "Uptime: %.0fmin/%.0fmin") \
X(HP_NM_ITEM, "Power: %.1fhp/%.0fnm") \
X(BATTERY_V_A_ITEM, "Battery: %.1fV/%.2fA") \
X(BATTERY_P_ITEM, "Battery charge: %.0f%%") \
X(OIL_TEMP_ITEM, "Oil temp.: %.0f" \
"\xB0" \
"C") \
X(COOLANT_TEMP_ITEM, "Coolant temp.: %.0f" \
"\xB0" \
"C") \
X(AIR_IN_ITEM, "Air in temp.: %.0f" \
"\xB0" \
"C") \
X(GEAR_ITEM, "Current gear: %c") \
X(GEARBOX_TEMP_ITEM, "Gearbox temp.: %.0f" \
"\xB0" \
"C") \
X(STEERING_ITEM, "Steering angle: %.1f" \
"\xB0")
#define CONVERTERS \
X(GEAR_ITEM, char, ((unsigned char)value), bool, false)
#define EXTRACTION_FUNCTIONS \
X(extractTempCommon, ((float)(((A(r) * 256) + B(r))) * 0.02f) - 40.0f) \
X(extractCarUptime, ((float)((A(r) * 256) + B(r)) / 4.0f)) \
X(extractBoardUptime, (((float)s->board.now) / 60000.0f)) \
X(extractHP, ((float)s->car.torque - 500) * (float)s->car.rpm * 0.000142378f) \
X(extractNM, (float)s->car.torque - 500) \
X(extractBatteryVolt, (float)((A(r) * 256) + B(r)) * 0.0005f) \
X(extractBatteryPerc, (float)s->car.battery.chargePercent) \
X(extractBatteryAmpere, (float)s->car.battery.current) \
X(extractOilTemp, (float)s->car.oil.temperature) \
X(extractGearboxTemp, (float)A(r) - 40.0f) \
X(extractGear, (float)s->car.gear) \
X(extractSteeringAngle, ((float)((((int8_t)A(r)) * 256) + B(r))) / 16.0f)
#define EXTRACTORS \
X(UPTIME_ITEM, true, true, 0x18DA10F1, 0x03221009, extractCarUptime, true, false, 0, 0, extractBoardUptime) \
X(HP_NM_ITEM, true, false, 0, 0, extractHP, true, false, 0, 0, extractNM) \
X(BATTERY_V_A_ITEM, true, true, 0x18DA10F1, 0x03221955, extractBatteryVolt, true, false, 0, 0, extractBatteryAmpere) \
X(BATTERY_P_ITEM, true, false, 0, 0, extractBatteryPerc, false, false, 0, 0, noop_extract) \
X(OIL_TEMP_ITEM, true, false, 0, 0, extractOilTemp, false, false, 0, 0, noop_extract) \
X(COOLANT_TEMP_ITEM, true, true, 0x18DA10F1, 0x03221003, extractTempCommon, false, false, 0, 0, noop_extract) \
X(AIR_IN_ITEM, true, true, 0x18DA10F1, 0x03221935, extractTempCommon, false, false, 0, 0, noop_extract) \
X(GEAR_ITEM, true, false, 0, 0, extractGear, false, false, 0, 0, noop_extract) \
X(GEARBOX_TEMP_ITEM, true, true, 0x18DA18F1, 0x032204FE, extractGearboxTemp, false, false, 0, 0, noop_extract) \
X(STEERING_ITEM, true, true, 0x18DA2AF1, 0x0322083C, extractSteeringAngle, false, false, 0, 0, noop_extract)
#define VALUES_REFRESH_MS \
X(FIRMWARE_ITEM, 60000) \
X(UPTIME_ITEM, 1000) \
X(BATTERY_V_A_ITEM, 1000) \
X(BATTERY_P_ITEM, 10000) \
X(GEARBOX_TEMP_ITEM, 10000)