#include #include "texts/TextKeysAndLanguages.hpp" #include "touchgfx/Unicode.hpp" #include "vehicle.h" #include ErrorPopup::ErrorPopup() {} void ErrorPopup::initialize() { ErrorPopupBase::initialize(); } void ErrorPopup::showAMSError() { title.setTypedText(T_ERROR_AMS); title.invalidate(); switch (vehicle_state.last_ams_error.kind) { case AMS_ERROR_SLAVE_TIMEOUT: touchgfx::Unicode::snprintf( detailsBuffer, sizeof(detailsBuffer) / sizeof(*detailsBuffer), "Slave timeout: Slave %d", vehicle_state.last_ams_error.arg); break; case AMS_ERROR_SLAVE_PANIC: { const char *panicKindStr = "UNKNOWN"; switch (vehicle_state.last_ams_slave_panic.kind) { case AMS_SLAVEPANIC_OVERTEMP: panicKindStr = "OVERTEMPERATURE"; break; case AMS_SLAVEPANIC_UNDERTEMP: panicKindStr = "UNDERTEMPERATURE"; break; case AMS_SLAVEPANIC_OVERVOLTAGE: panicKindStr = "OVERVOLTAGE"; break; case AMS_SLAVEPANIC_UNDERVOLTAGE: panicKindStr = "UNDERVOLTAGE"; break; case AMS_SLAVEPANIC_TOO_FEW_TEMP: panicKindStr = "TOO FEW TEMP SENSORS"; break; case AMS_SLAVEPANIC_OPENWIRE: panicKindStr = "OPEN WIRE"; break; default: static char unknownPanicBuf[32]; snprintf(unknownPanicBuf, sizeof(unknownPanicBuf), "UNKNOWN (%02x)", vehicle_state.last_ams_slave_panic.kind); panicKindStr = unknownPanicBuf; } touchgfx::Unicode::UnicodeChar panicKindBuf[32]; touchgfx::Unicode::strncpy(panicKindBuf, panicKindStr, sizeof(panicKindBuf) / sizeof(*panicKindBuf)); touchgfx::Unicode::snprintf( detailsBuffer, sizeof(detailsBuffer) / sizeof(*detailsBuffer), "Slave panic:\n[ID: %d, Kind: %s, Arg: %08x]", vehicle_state.last_ams_slave_panic.id, panicKindBuf, vehicle_state.last_ams_slave_panic.arg); break; } case AMS_ERROR_SHUNT_TIMEOUT: touchgfx::Unicode::strncpy(detailsBuffer, "Shunt timeout", sizeof(detailsBuffer) / sizeof(*detailsBuffer)); break; case AMS_ERROR_SHUNT_OVERCURRENT: touchgfx::Unicode::strncpy(detailsBuffer, "Shunt overcurrent", sizeof(detailsBuffer) / sizeof(*detailsBuffer)); break; case AMS_ERROR_SHUNT_OVERTEMP: touchgfx::Unicode::strncpy(detailsBuffer, "Shunt overtemperature", sizeof(detailsBuffer) / sizeof(*detailsBuffer)); break; case AMS_ERROR_NONE: default: touchgfx::Unicode::snprintf( detailsBuffer, sizeof(detailsBuffer) / sizeof(*detailsBuffer), "UNKNOWN ERROR (%02x)", vehicle_state.last_ams_error.kind); break; } details.setWildcard(detailsBuffer); details.invalidate(); }