81 lines
2.8 KiB
C++
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();
|
|
}
|