81 lines
2.8 KiB
C++

#include <gui/containers/ErrorPopup.hpp>
#include "texts/TextKeysAndLanguages.hpp"
#include "touchgfx/Unicode.hpp"
#include "vehicle.h"
#include <cstdio>
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();
}