#include #include "texts/TextKeysAndLanguages.hpp" #include "vehicle_state.h" DriverViewStatusItem::DriverViewStatusItem() {} void DriverViewStatusItem::initialize() { DriverViewStatusItemBase::initialize(); } void DriverViewStatusItem::setType(DriverViewStatusType type) { this->type = type; } void DriverViewStatusItem::update() { switch (type) { case DriverViewStatusType::TS_R2D: if (vehicle_state.ts_state == TS_ERROR) { text.setTypedText(T_TS); bg.setColor(COLOR_ERROR); } else if (vehicle_state.ts_state == TS_INACTIVE) { text.setTypedText(T_TS); bg.setColor(COLOR_OFF); } else if (vehicle_state.r2d_progress == R2D_INIT_SUCCESS) { text.setTypedText(T_R2D); bg.setColor(COLOR_OK); } else { text.setTypedText(T_TS); bg.setColor(COLOR_TS); } break; case DriverViewStatusType::AMS: text.setTypedText(T_AMS); bg.setColor(vehicle_state.ts_state == TS_ERROR ? COLOR_ERROR : COLOR_OK); break; case DriverViewStatusType::SDC: text.setTypedText(T_SDC); bg.setColor(vehicle_state.sdc_closed ? COLOR_OK : COLOR_WARNING); break; case DriverViewStatusType::SCS: text.setTypedText(T_SCS); bg.setColor(vehicle_state.errors.err_scs ? COLOR_ERROR : COLOR_OK); break; case DriverViewStatusType::PDU: text.setTypedText(T_PDU); bg.setColor(vehicle_state.errors.err_pdu ? COLOR_ERROR : COLOR_OK); break; case DriverViewStatusType::INV: text.setTypedText(T_INV); if (vehicle_state.errors.err_invl || vehicle_state.errors.err_invr) { bg.setColor(COLOR_ERROR); } else if (vehicle_state.errors.invl_ready && vehicle_state.errors.invr_ready) { bg.setColor(COLOR_OK); } else { bg.setColor(COLOR_OFF); } break; case DriverViewStatusType::LV: text.setTypedText(T_LV); // TODO: Set color based on LV SoC bg.setColor(COLOR_OFF); break; } text.invalidate(); bg.invalidate(); }