From 24be6312c8ab6bd029338d76759542fe1410c496 Mon Sep 17 00:00:00 2001 From: "Jasper v. Blanckenburg" Date: Fri, 5 May 2023 14:00:00 +0200 Subject: [PATCH] Add AMS Error popup --- Core/Inc/vehicle.h | 26 ++++++ Core/Src/vehicle.c | 17 +++- TouchGFX/assets/texts/texts.xml | 11 +++ .../fonts/UnicodeListCHINN____40_4.txt | 1 + .../cache/Font_CHINN____40_4bppCpp.cache | 1 + .../fonts/src/Font_CHINN____40_4bpp_0.cpp | 35 ++++++++ .../fonts/src/Table_CHINN____40_4bpp.cpp | 37 ++++---- .../containers/ErrorPopupBase.hpp | 36 ++++++++ .../driverview_screen/DriverViewViewBase.hpp | 2 + .../src/containers/ErrorPopupBase.cpp | 39 ++++++++ .../driverview_screen/DriverViewViewBase.cpp | 5 ++ .../texts/cache/LanguageCpp_Gb.cache | 2 +- .../texts/cache/TextKeysAndLanguages.cache | 2 +- TouchGFX/generated/texts/cache/TextsCpp.cache | 2 +- .../texts/cache/TypedTextDatabaseCpp.cache | 2 +- .../include/texts/TextKeysAndLanguages.hpp | 3 + TouchGFX/generated/texts/src/LanguageGb.cpp | 89 ++++++++++--------- TouchGFX/generated/texts/src/Texts.cpp | 63 ++++++------- .../generated/texts/src/TypedTextDatabase.cpp | 3 + .../gui/include/gui/containers/ErrorPopup.hpp | 20 +++++ .../driverview_screen/DriverViewPresenter.hpp | 3 + .../gui/driverview_screen/DriverViewView.hpp | 3 + TouchGFX/gui/src/containers/ErrorPopup.cpp | 71 +++++++++++++++ .../driverview_screen/DriverViewPresenter.cpp | 35 +++++--- .../src/driverview_screen/DriverViewView.cpp | 11 +++ TouchGFX/simulator/msvs/Application.vcxproj | 4 + .../msvs/Application.vcxproj.filters | 12 +++ TouchGFX/steering-wheel.touchgfx | 66 ++++++++++++++ 28 files changed, 493 insertions(+), 108 deletions(-) create mode 100644 TouchGFX/generated/gui_generated/include/gui_generated/containers/ErrorPopupBase.hpp create mode 100644 TouchGFX/generated/gui_generated/src/containers/ErrorPopupBase.cpp create mode 100644 TouchGFX/gui/include/gui/containers/ErrorPopup.hpp create mode 100644 TouchGFX/gui/src/containers/ErrorPopup.cpp diff --git a/Core/Inc/vehicle.h b/Core/Inc/vehicle.h index 51aceae..22421bf 100644 --- a/Core/Inc/vehicle.h +++ b/Core/Inc/vehicle.h @@ -55,6 +55,23 @@ typedef enum { INICHK_ERROR = 9 } IniChkState; +typedef enum { + AMS_ERROR_NONE = 0x00, + AMS_ERROR_SLAVE_TIMEOUT = 0x01, + AMS_ERROR_SLAVE_PANIC = 0x02, + AMS_ERROR_SHUNT_TIMEOUT = 0x03, + AMS_ERROR_SHUNT_OVERCURRENT = 0x04, + AMS_ERROR_SHUNT_OVERTEMP = 0x05 +} AMSErrorKind; +typedef enum { + AMS_SLAVEPANIC_OVERTEMP = 0x00, + AMS_SLAVEPANIC_UNDERTEMP = 0x01, + AMS_SLAVEPANIC_OVERVOLTAGE = 0x02, + AMS_SLAVEPANIC_UNDERVOLTAGE = 0x03, + AMS_SLAVEPANIC_TOO_FEW_TEMP = 0x04, + AMS_SLAVEPANIC_OPENWIRE = 0x05 +} AMSSlavePanicKind; + typedef struct { float fl; float fr; @@ -89,6 +106,15 @@ typedef struct { int err_invl : 1; int err_invr : 1; } errors; + struct { + AMSErrorKind kind; + uint8_t arg; + } last_ams_error; + struct { + uint8_t id; + AMSSlavePanicKind kind; + uint32_t arg; + } last_ams_slave_panic; IniChkState ini_chk_state; unsigned lap_count; diff --git a/Core/Src/vehicle.c b/Core/Src/vehicle.c index 3247853..5c3b946 100644 --- a/Core/Src/vehicle.c +++ b/Core/Src/vehicle.c @@ -11,7 +11,9 @@ #include "stm32h7xx_hal_gpio.h" #include "tx_api.h" +#define CAN_ID_AMS_SLAVE_PANIC 0x9 #define CAN_ID_AMS_STATUS 0xA +#define CAN_ID_AMS_ERROR 0xC #define CAN_ID_MISSION_SELECTED 0x400 #define CAN_ID_STW_BUTTONS 0x401 #define CAN_ID_STW_PARAM_SET 0x402 @@ -27,7 +29,9 @@ VehicleState vehicle_state = {0}; void vehicle_thread_entry(ULONG hfdcan_addr) { ftcan_init((void *)hfdcan_addr); + ftcan_add_filter(CAN_ID_AMS_SLAVE_PANIC, 0x7FF); ftcan_add_filter(CAN_ID_AMS_STATUS, 0x7FF); + ftcan_add_filter(CAN_ID_AMS_ERROR, 0x7FF); ftcan_add_filter(CAN_ID_AS_MISSION_FB, 0x7FF); ftcan_add_filter(CAN_ID_STW_STATUS, 0x7FF); ftcan_add_filter(CAN_ID_SHUNT_CURRENT, 0x7FF); @@ -59,16 +63,27 @@ void vehicle_broadcast_buttons(GPIO_PinState *button_states) { } void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) { + const uint8_t *ptr; switch (id) { + case CAN_ID_AMS_SLAVE_PANIC: + vehicle_state.last_ams_slave_panic.id = data[0]; + vehicle_state.last_ams_slave_panic.kind = data[1]; + ptr = &data[2]; + vehicle_state.last_ams_slave_panic.arg = ftcan_unmarshal_unsigned(&ptr, 4); + break; case CAN_ID_AMS_STATUS: vehicle_state.ts_state = data[0] & 0x7F; vehicle_state.soc = data[1]; - const uint8_t *ptr = &data[2]; + ptr = &data[2]; vehicle_state.min_cell_volt = ftcan_unmarshal_unsigned(&ptr, 2) * CAN_AMS_STATUS_VOLTAGE_FACTOR; vehicle_state.max_cell_temp = ftcan_unmarshal_signed(&ptr, 2) * CAN_AMS_STATUS_TEMP_FACTOR; break; + case CAN_ID_AMS_ERROR: + vehicle_state.last_ams_error.kind = data[0]; + vehicle_state.last_ams_error.arg = data[1]; + break; case CAN_ID_AS_MISSION_FB: vehicle_state.active_mission = data[0] & 0b111; break; diff --git a/TouchGFX/assets/texts/texts.xml b/TouchGFX/assets/texts/texts.xml index 00c5ebf..844952f 100644 --- a/TouchGFX/assets/texts/texts.xml +++ b/TouchGFX/assets/texts/texts.xml @@ -4,6 +4,11 @@ + + + AMS ErrOr + + <value> @@ -137,6 +142,12 @@ + + <value> + + + + <value> diff --git a/TouchGFX/generated/fonts/UnicodeListCHINN____40_4.txt b/TouchGFX/generated/fonts/UnicodeListCHINN____40_4.txt index bec17ba..c23b994 100644 --- a/TouchGFX/generated/fonts/UnicodeListCHINN____40_4.txt +++ b/TouchGFX/generated/fonts/UnicodeListCHINN____40_4.txt @@ -6,6 +6,7 @@ 69 73 77 +79 83 84 97 diff --git a/TouchGFX/generated/fonts/cache/Font_CHINN____40_4bppCpp.cache b/TouchGFX/generated/fonts/cache/Font_CHINN____40_4bppCpp.cache index 62970b4..67e41fc 100644 --- a/TouchGFX/generated/fonts/cache/Font_CHINN____40_4bppCpp.cache +++ b/TouchGFX/generated/fonts/cache/Font_CHINN____40_4bppCpp.cache @@ -7,6 +7,7 @@ AH:0 BA:1 FC:63 EC:0 FF:0 CF:0 69 73 77 +79 83 84 97 diff --git a/TouchGFX/generated/fonts/src/Font_CHINN____40_4bpp_0.cpp b/TouchGFX/generated/fonts/src/Font_CHINN____40_4bpp_0.cpp index c20c603..f499015 100644 --- a/TouchGFX/generated/fonts/src/Font_CHINN____40_4bpp_0.cpp +++ b/TouchGFX/generated/fonts/src/Font_CHINN____40_4bpp_0.cpp @@ -197,6 +197,41 @@ KEEP extern const uint8_t unicodes_CHINN____40_4bpp_0[] FONT_GLYPH_LOCATION_FLAS 0xFF, 0x0D, 0xFE, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xAF, 0x01, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x67, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // Unicode: [0x004F, O] + 0x00, 0x00, 0x30, 0xC9, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBE, + 0x16, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x04, 0x00, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x30, 0xFE, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x00, + 0xD1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x1E, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFB, 0xFF, 0xFF, 0xCF, 0xCC, 0xCC, 0xCC, 0xCC, + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xEC, 0xFF, 0xFF, 0xCF, 0x00, 0xFD, 0xFF, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x00, + 0xFE, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, + 0xFF, 0xFF, 0xFF, 0x01, 0xFE, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x01, 0xFE, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x01, 0xFE, 0xFF, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x01, + 0xFE, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, + 0xFF, 0xFF, 0xFF, 0x01, 0xFE, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x01, 0xFE, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x01, 0xFE, 0xFF, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x01, + 0xFE, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, + 0xFF, 0xFF, 0xFF, 0x01, 0xFE, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x01, 0xFE, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x01, 0xFC, 0xFF, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x00, + 0xFA, 0xFF, 0xFF, 0xCF, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xEC, + 0xFF, 0xFF, 0xDF, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2E, 0x00, 0x50, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, + 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x50, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x71, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBE, 0x17, 0x00, 0x00, 0x00, // Unicode: [0x0053, S] 0x00, 0x00, 0x00, 0x72, 0xDB, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0xA1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, diff --git a/TouchGFX/generated/fonts/src/Table_CHINN____40_4bpp.cpp b/TouchGFX/generated/fonts/src/Table_CHINN____40_4bpp.cpp index 2857c38..8c7943a 100644 --- a/TouchGFX/generated/fonts/src/Table_CHINN____40_4bpp.cpp +++ b/TouchGFX/generated/fonts/src/Table_CHINN____40_4bpp.cpp @@ -12,23 +12,24 @@ KEEP extern const touchgfx::GlyphNode glyphs_CHINN____40_4bpp[] FONT_TABLE_LOCAT { 1720, 0x0045, 38, 27, 27, 1, 40, 0, 0, 0x00 }, // E { 2233, 0x0049, 7, 27, 27, 1, 9, 0, 0, 0x00 }, // I { 2341, 0x004D, 41, 28, 27, 1, 43, 0, 0, 0x00 }, // M - { 2929, 0x0053, 43, 27, 27, 0, 43, 0, 0, 0x00 }, // S - { 3523, 0x0054, 39, 27, 27, -1, 37, 0, 0, 0x00 }, // T - { 4063, 0x0061, 40, 27, 27, 0, 41, 0, 0, 0x00 }, // a - { 4603, 0x0063, 39, 27, 27, 1, 41, 0, 0, 0x00 }, // c - { 5143, 0x0064, 39, 27, 27, 1, 40, 0, 0, 0x00 }, // d - { 5683, 0x0065, 38, 27, 27, 1, 39, 0, 0, 0x00 }, // e - { 6196, 0x0069, 7, 27, 27, 1, 9, 0, 0, 0x00 }, // i - { 6304, 0x006B, 39, 27, 27, 1, 39, 0, 0, 0x00 }, // k - { 6844, 0x006C, 28, 27, 27, 1, 28, 0, 0, 0x00 }, // l - { 7222, 0x006E, 38, 29, 28, 1, 40, 0, 0, 0x00 }, // n - { 7773, 0x006F, 39, 27, 27, 1, 40, 0, 0, 0x00 }, // o - { 8313, 0x0070, 38, 27, 27, 1, 39, 0, 0, 0x00 }, // p - { 8826, 0x0072, 39, 27, 27, 1, 40, 0, 0, 0x00 }, // r - { 9366, 0x0073, 43, 27, 27, 0, 43, 0, 0, 0x00 }, // s - { 9960, 0x0074, 39, 27, 27, -1, 37, 0, 0, 0x00 }, // t - { 10500, 0x0075, 39, 27, 27, 1, 41, 0, 0, 0x00 }, // u - { 11040, 0x0076, 38, 28, 27, -1, 36, 0, 0, 0x00 } // v + { 2929, 0x004F, 39, 27, 27, 1, 40, 0, 0, 0x00 }, // O + { 3469, 0x0053, 43, 27, 27, 0, 43, 0, 0, 0x00 }, // S + { 4063, 0x0054, 39, 27, 27, -1, 37, 0, 0, 0x00 }, // T + { 4603, 0x0061, 40, 27, 27, 0, 41, 0, 0, 0x00 }, // a + { 5143, 0x0063, 39, 27, 27, 1, 41, 0, 0, 0x00 }, // c + { 5683, 0x0064, 39, 27, 27, 1, 40, 0, 0, 0x00 }, // d + { 6223, 0x0065, 38, 27, 27, 1, 39, 0, 0, 0x00 }, // e + { 6736, 0x0069, 7, 27, 27, 1, 9, 0, 0, 0x00 }, // i + { 6844, 0x006B, 39, 27, 27, 1, 39, 0, 0, 0x00 }, // k + { 7384, 0x006C, 28, 27, 27, 1, 28, 0, 0, 0x00 }, // l + { 7762, 0x006E, 38, 29, 28, 1, 40, 0, 0, 0x00 }, // n + { 8313, 0x006F, 39, 27, 27, 1, 40, 0, 0, 0x00 }, // o + { 8853, 0x0070, 38, 27, 27, 1, 39, 0, 0, 0x00 }, // p + { 9366, 0x0072, 39, 27, 27, 1, 40, 0, 0, 0x00 }, // r + { 9906, 0x0073, 43, 27, 27, 0, 43, 0, 0, 0x00 }, // s + { 10500, 0x0074, 39, 27, 27, -1, 37, 0, 0, 0x00 }, // t + { 11040, 0x0075, 39, 27, 27, 1, 41, 0, 0, 0x00 }, // u + { 11580, 0x0076, 38, 28, 27, -1, 36, 0, 0, 0x00 } // v }; // CHINN____40_4bpp @@ -46,6 +47,6 @@ touchgfx::GeneratedFont& getFont_CHINN____40_4bpp(); touchgfx::GeneratedFont& getFont_CHINN____40_4bpp() { - static touchgfx::GeneratedFont CHINN____40_4bpp(glyphs_CHINN____40_4bpp, 25, 41, 40, 0, 0, 4, 1, 1, 1, unicodes_CHINN____40_4bpp, kerning_CHINN____40_4bpp, 63, 0, 0, 0); + static touchgfx::GeneratedFont CHINN____40_4bpp(glyphs_CHINN____40_4bpp, 26, 41, 40, 0, 0, 4, 1, 1, 1, unicodes_CHINN____40_4bpp, kerning_CHINN____40_4bpp, 63, 0, 0, 0); return CHINN____40_4bpp; } diff --git a/TouchGFX/generated/gui_generated/include/gui_generated/containers/ErrorPopupBase.hpp b/TouchGFX/generated/gui_generated/include/gui_generated/containers/ErrorPopupBase.hpp new file mode 100644 index 0000000..9cc75ca --- /dev/null +++ b/TouchGFX/generated/gui_generated/include/gui_generated/containers/ErrorPopupBase.hpp @@ -0,0 +1,36 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#ifndef ERRORPOPUPBASE_HPP +#define ERRORPOPUPBASE_HPP + +#include +#include +#include +#include +#include + +class ErrorPopupBase : public touchgfx::Container +{ +public: + ErrorPopupBase(); + virtual ~ErrorPopupBase(); + virtual void initialize(); + +protected: + FrontendApplication& application() { + return *static_cast(touchgfx::Application::getInstance()); + } + + /* + * Member Declarations + */ + touchgfx::BoxWithBorder bg; + touchgfx::TextArea title; + touchgfx::TextAreaWithOneWildcard details; + +private: + +}; + +#endif // ERRORPOPUPBASE_HPP diff --git a/TouchGFX/generated/gui_generated/include/gui_generated/driverview_screen/DriverViewViewBase.hpp b/TouchGFX/generated/gui_generated/include/gui_generated/driverview_screen/DriverViewViewBase.hpp index e7541c7..50cdf26 100644 --- a/TouchGFX/generated/gui_generated/include/gui_generated/driverview_screen/DriverViewViewBase.hpp +++ b/TouchGFX/generated/gui_generated/include/gui_generated/driverview_screen/DriverViewViewBase.hpp @@ -18,6 +18,7 @@ #include #include #include +#include class DriverViewViewBase : public touchgfx::View { @@ -89,6 +90,7 @@ protected: touchgfx::TextArea prechargeLabel; touchgfx::TextArea r2dLabel; touchgfx::TextAreaWithOneWildcard r2dProgressLabel; + ErrorPopup errorPopup; private: diff --git a/TouchGFX/generated/gui_generated/src/containers/ErrorPopupBase.cpp b/TouchGFX/generated/gui_generated/src/containers/ErrorPopupBase.cpp new file mode 100644 index 0000000..fa06e83 --- /dev/null +++ b/TouchGFX/generated/gui_generated/src/containers/ErrorPopupBase.cpp @@ -0,0 +1,39 @@ +/*********************************************************************************/ +/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/ +/*********************************************************************************/ +#include +#include +#include + +ErrorPopupBase::ErrorPopupBase() +{ + setWidth(450); + setHeight(150); + bg.setPosition(0, 0, 450, 150); + bg.setColor(touchgfx::Color::getColorFromRGB(197, 14, 31)); + bg.setBorderColor(touchgfx::Color::getColorFromRGB(255, 255, 255)); + bg.setBorderSize(5); + add(bg); + + title.setPosition(0, 0, 450, 49); + title.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255)); + title.setLinespacing(0); + title.setTypedText(touchgfx::TypedText(T___SINGLEUSE_1NKF)); + add(title); + + details.setPosition(15, 60, 420, 75); + details.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255)); + details.setLinespacing(0); + details.setTypedText(touchgfx::TypedText(T___SINGLEUSE_9L8R)); + add(details); +} + +ErrorPopupBase::~ErrorPopupBase() +{ + +} + +void ErrorPopupBase::initialize() +{ + +} diff --git a/TouchGFX/generated/gui_generated/src/driverview_screen/DriverViewViewBase.cpp b/TouchGFX/generated/gui_generated/src/driverview_screen/DriverViewViewBase.cpp index af03ee9..c90cbeb 100644 --- a/TouchGFX/generated/gui_generated/src/driverview_screen/DriverViewViewBase.cpp +++ b/TouchGFX/generated/gui_generated/src/driverview_screen/DriverViewViewBase.cpp @@ -143,6 +143,10 @@ DriverViewViewBase::DriverViewViewBase() : r2dProgressLabel.setTypedText(touchgfx::TypedText(T___SINGLEUSE_J5UH)); r2dProgressLabel.setVisible(false); add(r2dProgressLabel); + + errorPopup.setXY(15, 122); + errorPopup.setVisible(false); + add(errorPopup); } DriverViewViewBase::~DriverViewViewBase() @@ -164,6 +168,7 @@ void DriverViewViewBase::setupScreen() { fieldTypeSelectionListItems[i].initialize(); } + errorPopup.initialize(); } void DriverViewViewBase::handleKeyEvent(uint8_t key) diff --git a/TouchGFX/generated/texts/cache/LanguageCpp_Gb.cache b/TouchGFX/generated/texts/cache/LanguageCpp_Gb.cache index ca13aaa..d19223c 100644 --- a/TouchGFX/generated/texts/cache/LanguageCpp_Gb.cache +++ b/TouchGFX/generated/texts/cache/LanguageCpp_Gb.cache @@ -1 +1 @@ -{"remap":"yes","language":"GB","language_index":0,"indices":[["157","T_DEBUGVIEWFIELD_TITLE"],["157","T_DRIVERVIEWFIELD_TITLE"],["267","T_FIELD_BBAL"],["230","T_FIELD_TSVOLTVEH"],["223","T_FIELD_TSVOLTBAT"],["243","T_FIELD_LVSOC"],["261","T_FIELD_TSSOC"],["277","T_FIELD_MAXCELLTEMP"],["282","T_FIELD_TIREFL"],["287","T_FIELD_TIREFR"],["292","T_FIELD_TIRERL"],["297","T_FIELD_TIRERR"],["272","T_FIELD_LAPCOUNT"],["167","T_FIELD_INICHKSTATE"],["237","T_FIELD_ERR"],["315","T_FIELD_SDC"],["183","T_FIELD_INVRREADY"],["175","T_FIELD_INVLREADY"],["199","T_FIELD_R2DPROGRESS"],["191","T_FIELD_ACTIVEMISSION"],["159","T_FIELD_ASSTATE"],["215","T_FIELD_TSSTATE"],["157","T_NUMBERWILDCARD"],["157","T_DEFAULTWILDCARD_CENTERED"],["157","T_DEFAULTWILDCARD_RIGHTALIGNED"],["307","T_FIELD_TSCURRENT"],["302","T_FIELD_MINCELLVOLT"],["249","T_FIELD_SPEED"],["95","T_INSPECTION_HUGE"],["148","T_EBS_HUGE"],["117","T_TRACKDRIVE_HUGE"],["128","T_AUTOX_HUGE"],["207","T_SKIDPAD_HUGE"],["82","T_ACCEL_HUGE"],["34","T_INVALID_HUGE"],["67","T_MANUAL"],["95","T_INSPECTION"],["148","T_EBS"],["117","T_TRACKDRIVE"],["128","T_AUTOX"],["207","T_SKIDPAD"],["82","T_ACCEL"],["157","T___SINGLEUSE_J5UH"],["311","T___SINGLEUSE_NGUK"],["157","T___SINGLEUSE_4E84"],["157","T___SINGLEUSE_YTAB"],["106","T___SINGLEUSE_RWCE"],["138","T___SINGLEUSE_HMH2"],["319","T___SINGLEUSE_4OBM"],["308","T___SINGLEUSE_PHFD"],["255","T___SINGLEUSE_H6UX"],["157","T___SINGLEUSE_20H3"],["17","T___SINGLEUSE_SDGP"],["51","T___SINGLEUSE_M5X7"],["0","T___SINGLEUSE_6GPV"]]} \ No newline at end of file +{"remap":"yes","language":"GB","language_index":0,"indices":[["128","T_ERROR_AMS"],["167","T_DEBUGVIEWFIELD_TITLE"],["167","T_DRIVERVIEWFIELD_TITLE"],["277","T_FIELD_BBAL"],["240","T_FIELD_TSVOLTVEH"],["233","T_FIELD_TSVOLTBAT"],["253","T_FIELD_LVSOC"],["271","T_FIELD_TSSOC"],["287","T_FIELD_MAXCELLTEMP"],["292","T_FIELD_TIREFL"],["297","T_FIELD_TIREFR"],["302","T_FIELD_TIRERL"],["307","T_FIELD_TIRERR"],["282","T_FIELD_LAPCOUNT"],["177","T_FIELD_INICHKSTATE"],["247","T_FIELD_ERR"],["325","T_FIELD_SDC"],["193","T_FIELD_INVRREADY"],["185","T_FIELD_INVLREADY"],["209","T_FIELD_R2DPROGRESS"],["201","T_FIELD_ACTIVEMISSION"],["169","T_FIELD_ASSTATE"],["225","T_FIELD_TSSTATE"],["167","T_NUMBERWILDCARD"],["167","T_DEFAULTWILDCARD_CENTERED"],["167","T_DEFAULTWILDCARD_RIGHTALIGNED"],["317","T_FIELD_TSCURRENT"],["312","T_FIELD_MINCELLVOLT"],["259","T_FIELD_SPEED"],["95","T_INSPECTION_HUGE"],["158","T_EBS_HUGE"],["117","T_TRACKDRIVE_HUGE"],["138","T_AUTOX_HUGE"],["217","T_SKIDPAD_HUGE"],["82","T_ACCEL_HUGE"],["34","T_INVALID_HUGE"],["67","T_MANUAL"],["95","T_INSPECTION"],["158","T_EBS"],["117","T_TRACKDRIVE"],["138","T_AUTOX"],["217","T_SKIDPAD"],["82","T_ACCEL"],["167","T___SINGLEUSE_9L8R"],["16","T___SINGLEUSE_1NKF"],["167","T___SINGLEUSE_J5UH"],["321","T___SINGLEUSE_NGUK"],["167","T___SINGLEUSE_4E84"],["167","T___SINGLEUSE_YTAB"],["106","T___SINGLEUSE_RWCE"],["148","T___SINGLEUSE_HMH2"],["329","T___SINGLEUSE_4OBM"],["318","T___SINGLEUSE_PHFD"],["265","T___SINGLEUSE_H6UX"],["167","T___SINGLEUSE_20H3"],["17","T___SINGLEUSE_SDGP"],["51","T___SINGLEUSE_M5X7"],["0","T___SINGLEUSE_6GPV"]]} \ No newline at end of file diff --git a/TouchGFX/generated/texts/cache/TextKeysAndLanguages.cache b/TouchGFX/generated/texts/cache/TextKeysAndLanguages.cache index 32417dd..246d5d6 100644 --- a/TouchGFX/generated/texts/cache/TextKeysAndLanguages.cache +++ b/TouchGFX/generated/texts/cache/TextKeysAndLanguages.cache @@ -1 +1 @@ -{"languages":["GB"],"textids":["T_DEBUGVIEWFIELD_TITLE","T_DRIVERVIEWFIELD_TITLE","T_FIELD_BBAL","T_FIELD_TSVOLTVEH","T_FIELD_TSVOLTBAT","T_FIELD_LVSOC","T_FIELD_TSSOC","T_FIELD_MAXCELLTEMP","T_FIELD_TIREFL","T_FIELD_TIREFR","T_FIELD_TIRERL","T_FIELD_TIRERR","T_FIELD_LAPCOUNT","T_FIELD_INICHKSTATE","T_FIELD_ERR","T_FIELD_SDC","T_FIELD_INVRREADY","T_FIELD_INVLREADY","T_FIELD_R2DPROGRESS","T_FIELD_ACTIVEMISSION","T_FIELD_ASSTATE","T_FIELD_TSSTATE","T_NUMBERWILDCARD","T_DEFAULTWILDCARD_CENTERED","T_DEFAULTWILDCARD_RIGHTALIGNED","T_FIELD_TSCURRENT","T_FIELD_MINCELLVOLT","T_FIELD_SPEED","T_INSPECTION_HUGE","T_EBS_HUGE","T_TRACKDRIVE_HUGE","T_AUTOX_HUGE","T_SKIDPAD_HUGE","T_ACCEL_HUGE","T_INVALID_HUGE","T_MANUAL","T_INSPECTION","T_EBS","T_TRACKDRIVE","T_AUTOX","T_SKIDPAD","T_ACCEL","T___SINGLEUSE_J5UH","T___SINGLEUSE_NGUK","T___SINGLEUSE_4E84","T___SINGLEUSE_YTAB","T___SINGLEUSE_RWCE","T___SINGLEUSE_HMH2","T___SINGLEUSE_4OBM","T___SINGLEUSE_PHFD","T___SINGLEUSE_H6UX","T___SINGLEUSE_20H3","T___SINGLEUSE_SDGP","T___SINGLEUSE_M5X7","T___SINGLEUSE_6GPV"]} \ No newline at end of file +{"languages":["GB"],"textids":["T_ERROR_AMS","T_DEBUGVIEWFIELD_TITLE","T_DRIVERVIEWFIELD_TITLE","T_FIELD_BBAL","T_FIELD_TSVOLTVEH","T_FIELD_TSVOLTBAT","T_FIELD_LVSOC","T_FIELD_TSSOC","T_FIELD_MAXCELLTEMP","T_FIELD_TIREFL","T_FIELD_TIREFR","T_FIELD_TIRERL","T_FIELD_TIRERR","T_FIELD_LAPCOUNT","T_FIELD_INICHKSTATE","T_FIELD_ERR","T_FIELD_SDC","T_FIELD_INVRREADY","T_FIELD_INVLREADY","T_FIELD_R2DPROGRESS","T_FIELD_ACTIVEMISSION","T_FIELD_ASSTATE","T_FIELD_TSSTATE","T_NUMBERWILDCARD","T_DEFAULTWILDCARD_CENTERED","T_DEFAULTWILDCARD_RIGHTALIGNED","T_FIELD_TSCURRENT","T_FIELD_MINCELLVOLT","T_FIELD_SPEED","T_INSPECTION_HUGE","T_EBS_HUGE","T_TRACKDRIVE_HUGE","T_AUTOX_HUGE","T_SKIDPAD_HUGE","T_ACCEL_HUGE","T_INVALID_HUGE","T_MANUAL","T_INSPECTION","T_EBS","T_TRACKDRIVE","T_AUTOX","T_SKIDPAD","T_ACCEL","T___SINGLEUSE_9L8R","T___SINGLEUSE_1NKF","T___SINGLEUSE_J5UH","T___SINGLEUSE_NGUK","T___SINGLEUSE_4E84","T___SINGLEUSE_YTAB","T___SINGLEUSE_RWCE","T___SINGLEUSE_HMH2","T___SINGLEUSE_4OBM","T___SINGLEUSE_PHFD","T___SINGLEUSE_H6UX","T___SINGLEUSE_20H3","T___SINGLEUSE_SDGP","T___SINGLEUSE_M5X7","T___SINGLEUSE_6GPV"]} \ No newline at end of file diff --git a/TouchGFX/generated/texts/cache/TextsCpp.cache b/TouchGFX/generated/texts/cache/TextsCpp.cache index da30540..a6f3d78 100644 --- a/TouchGFX/generated/texts/cache/TextsCpp.cache +++ b/TouchGFX/generated/texts/cache/TextsCpp.cache @@ -1 +1 @@ -{"remap":"yes","languages":["Gb"],"characters":[67,104,111,111,115,101,32,97,32,109,105,115,115,105,111,110,0,67,117,114,114,101,110,116,32,77,105,115,115,105,111,110,58,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,33,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,0,77,97,110,117,97,108,32,68,114,105,118,105,110,103,0,65,99,99,101,108,101,114,97,116,105,111,110,0,73,110,115,112,101,99,116,105,111,110,0,80,65,82,65,77,69,84,69,82,83,0,84,114,97,99,107,100,114,105,118,101,0,65,117,116,111,99,114,111,115,115,0,80,82,69,67,72,65,82,71,69,0,69,66,83,32,84,101,115,116,0,2,0,65,83,83,84,65,84,69,0,73,67,83,84,65,84,69,0,73,78,86,76,82,68,89,0,73,78,86,82,82,68,89,0,77,73,83,83,73,79,78,0,82,50,68,80,82,79,71,0,83,107,105,100,112,97,100,0,84,83,83,84,65,84,69,0,84,83,86,66,65,84,0,84,83,86,86,69,72,0,69,82,82,79,82,0,76,86,83,79,67,0,83,80,69,69,68,0,84,73,82,69,83,0,84,83,83,79,67,0,66,66,65,76,0,76,65,80,83,0,84,77,65,88,0,84,84,70,76,0,84,84,70,82,0,84,84,82,76,0,84,84,82,82,0,86,77,73,78,0,73,84,83,0,82,50,68,0,83,68,67,0,76,86,0]} \ No newline at end of file +{"remap":"yes","languages":["Gb"],"characters":[67,104,111,111,115,101,32,97,32,109,105,115,115,105,111,110,0,67,117,114,114,101,110,116,32,77,105,115,115,105,111,110,58,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,33,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,0,77,97,110,117,97,108,32,68,114,105,118,105,110,103,0,65,99,99,101,108,101,114,97,116,105,111,110,0,73,110,115,112,101,99,116,105,111,110,0,80,65,82,65,77,69,84,69,82,83,0,84,114,97,99,107,100,114,105,118,101,0,65,77,83,32,69,114,114,79,114,0,65,117,116,111,99,114,111,115,115,0,80,82,69,67,72,65,82,71,69,0,69,66,83,32,84,101,115,116,0,2,0,65,83,83,84,65,84,69,0,73,67,83,84,65,84,69,0,73,78,86,76,82,68,89,0,73,78,86,82,82,68,89,0,77,73,83,83,73,79,78,0,82,50,68,80,82,79,71,0,83,107,105,100,112,97,100,0,84,83,83,84,65,84,69,0,84,83,86,66,65,84,0,84,83,86,86,69,72,0,69,82,82,79,82,0,76,86,83,79,67,0,83,80,69,69,68,0,84,73,82,69,83,0,84,83,83,79,67,0,66,66,65,76,0,76,65,80,83,0,84,77,65,88,0,84,84,70,76,0,84,84,70,82,0,84,84,82,76,0,84,84,82,82,0,86,77,73,78,0,73,84,83,0,82,50,68,0,83,68,67,0,76,86,0]} \ No newline at end of file diff --git a/TouchGFX/generated/texts/cache/TypedTextDatabaseCpp.cache b/TouchGFX/generated/texts/cache/TypedTextDatabaseCpp.cache index c593b1c..95aad2a 100644 --- a/TouchGFX/generated/texts/cache/TypedTextDatabaseCpp.cache +++ b/TouchGFX/generated/texts/cache/TypedTextDatabaseCpp.cache @@ -1 +1 @@ -{"databases":{"DEFAULT":[[5,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[0,"CENTER","LTR"],[0,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[1,"RIGHT","LTR"],[1,"LEFT","LTR"],[4,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"CENTER","LTR"],[1,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[1,"LEFT","LTR"],[2,"CENTER","LTR"],[1,"LEFT","LTR"]]},"database_list":["DEFAULT"],"fonts":{"getFont_verdana_20_4bpp":0,"getFont_CHINN____30_4bpp":1,"getFont_CHINN____20_4bpp":2,"getFont_CHINN____40_4bpp":3,"getFont_lucon_TTF_50_4bpp":4,"getFont_verdanab_20_4bpp":5},"generate_font_format":"0"} \ No newline at end of file +{"databases":{"DEFAULT":[[3,"CENTER","LTR"],[5,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[0,"CENTER","LTR"],[0,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[0,"LEFT","LTR"],[3,"CENTER","LTR"],[1,"RIGHT","LTR"],[1,"LEFT","LTR"],[4,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"CENTER","LTR"],[1,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[1,"LEFT","LTR"],[2,"CENTER","LTR"],[1,"LEFT","LTR"]]},"database_list":["DEFAULT"],"fonts":{"getFont_verdana_20_4bpp":0,"getFont_CHINN____30_4bpp":1,"getFont_CHINN____20_4bpp":2,"getFont_CHINN____40_4bpp":3,"getFont_lucon_TTF_50_4bpp":4,"getFont_verdanab_20_4bpp":5},"generate_font_format":"0"} \ No newline at end of file diff --git a/TouchGFX/generated/texts/include/texts/TextKeysAndLanguages.hpp b/TouchGFX/generated/texts/include/texts/TextKeysAndLanguages.hpp index aa3141f..42f8238 100644 --- a/TouchGFX/generated/texts/include/texts/TextKeysAndLanguages.hpp +++ b/TouchGFX/generated/texts/include/texts/TextKeysAndLanguages.hpp @@ -12,6 +12,7 @@ enum LANGUAGES enum TEXTS { + T_ERROR_AMS, T_DEBUGVIEWFIELD_TITLE, T_DRIVERVIEWFIELD_TITLE, T_FIELD_BBAL, @@ -54,6 +55,8 @@ enum TEXTS T_AUTOX, T_SKIDPAD, T_ACCEL, + T___SINGLEUSE_9L8R, + T___SINGLEUSE_1NKF, T___SINGLEUSE_J5UH, T___SINGLEUSE_NGUK, T___SINGLEUSE_4E84, diff --git a/TouchGFX/generated/texts/src/LanguageGb.cpp b/TouchGFX/generated/texts/src/LanguageGb.cpp index 063e6e8..221c633 100644 --- a/TouchGFX/generated/texts/src/LanguageGb.cpp +++ b/TouchGFX/generated/texts/src/LanguageGb.cpp @@ -10,58 +10,61 @@ KEEP extern const uint32_t indicesGb[] TEXT_LOCATION_FLASH_ATTRIBUTE; // Remap all strings TEXT_LOCATION_FLASH_PRAGMA KEEP extern const uint32_t indicesGb[] TEXT_LOCATION_FLASH_ATTRIBUTE = { - 157, // T_DEBUGVIEWFIELD_TITLE: "<>" - 157, // T_DRIVERVIEWFIELD_TITLE: "<>" - 267, // T_FIELD_BBAL: "BBAL" - 230, // T_FIELD_TSVOLTVEH: "TSVVEH" - 223, // T_FIELD_TSVOLTBAT: "TSVBAT" - 243, // T_FIELD_LVSOC: "LVSOC" - 261, // T_FIELD_TSSOC: "TSSOC" - 277, // T_FIELD_MAXCELLTEMP: "TMAX" - 282, // T_FIELD_TIREFL: "TTFL" - 287, // T_FIELD_TIREFR: "TTFR" - 292, // T_FIELD_TIRERL: "TTRL" - 297, // T_FIELD_TIRERR: "TTRR" - 272, // T_FIELD_LAPCOUNT: "LAPS" - 167, // T_FIELD_INICHKSTATE: "ICSTATE" - 237, // T_FIELD_ERR: "ERROR" - 315, // T_FIELD_SDC: "SDC" - 183, // T_FIELD_INVRREADY: "INVRRDY" - 175, // T_FIELD_INVLREADY: "INVLRDY" - 199, // T_FIELD_R2DPROGRESS: "R2DPROG" - 191, // T_FIELD_ACTIVEMISSION: "MISSION" - 159, // T_FIELD_ASSTATE: "ASSTATE" - 215, // T_FIELD_TSSTATE: "TSSTATE" - 157, // T_NUMBERWILDCARD: "<>" - 157, // T_DEFAULTWILDCARD_CENTERED: "<>" - 157, // T_DEFAULTWILDCARD_RIGHTALIGNED: "<>" - 307, // T_FIELD_TSCURRENT: "ITS" - 302, // T_FIELD_MINCELLVOLT: "VMIN" - 249, // T_FIELD_SPEED: "SPEED" + 128, // T_ERROR_AMS: "AMS ErrOr" + 167, // T_DEBUGVIEWFIELD_TITLE: "<>" + 167, // T_DRIVERVIEWFIELD_TITLE: "<>" + 277, // T_FIELD_BBAL: "BBAL" + 240, // T_FIELD_TSVOLTVEH: "TSVVEH" + 233, // T_FIELD_TSVOLTBAT: "TSVBAT" + 253, // T_FIELD_LVSOC: "LVSOC" + 271, // T_FIELD_TSSOC: "TSSOC" + 287, // T_FIELD_MAXCELLTEMP: "TMAX" + 292, // T_FIELD_TIREFL: "TTFL" + 297, // T_FIELD_TIREFR: "TTFR" + 302, // T_FIELD_TIRERL: "TTRL" + 307, // T_FIELD_TIRERR: "TTRR" + 282, // T_FIELD_LAPCOUNT: "LAPS" + 177, // T_FIELD_INICHKSTATE: "ICSTATE" + 247, // T_FIELD_ERR: "ERROR" + 325, // T_FIELD_SDC: "SDC" + 193, // T_FIELD_INVRREADY: "INVRRDY" + 185, // T_FIELD_INVLREADY: "INVLRDY" + 209, // T_FIELD_R2DPROGRESS: "R2DPROG" + 201, // T_FIELD_ACTIVEMISSION: "MISSION" + 169, // T_FIELD_ASSTATE: "ASSTATE" + 225, // T_FIELD_TSSTATE: "TSSTATE" + 167, // T_NUMBERWILDCARD: "<>" + 167, // T_DEFAULTWILDCARD_CENTERED: "<>" + 167, // T_DEFAULTWILDCARD_RIGHTALIGNED: "<>" + 317, // T_FIELD_TSCURRENT: "ITS" + 312, // T_FIELD_MINCELLVOLT: "VMIN" + 259, // T_FIELD_SPEED: "SPEED" 95, // T_INSPECTION_HUGE: "Inspection" - 148, // T_EBS_HUGE: "EBS Test" + 158, // T_EBS_HUGE: "EBS Test" 117, // T_TRACKDRIVE_HUGE: "Trackdrive" - 128, // T_AUTOX_HUGE: "Autocross" - 207, // T_SKIDPAD_HUGE: "Skidpad" + 138, // T_AUTOX_HUGE: "Autocross" + 217, // T_SKIDPAD_HUGE: "Skidpad" 82, // T_ACCEL_HUGE: "Acceleration" 34, // T_INVALID_HUGE: "Invalid Mission!" 67, // T_MANUAL: "Manual Driving" 95, // T_INSPECTION: "Inspection" - 148, // T_EBS: "EBS Test" + 158, // T_EBS: "EBS Test" 117, // T_TRACKDRIVE: "Trackdrive" - 128, // T_AUTOX: "Autocross" - 207, // T_SKIDPAD: "Skidpad" + 138, // T_AUTOX: "Autocross" + 217, // T_SKIDPAD: "Skidpad" 82, // T_ACCEL: "Acceleration" - 157, // T___SINGLEUSE_J5UH: "<>" - 311, // T___SINGLEUSE_NGUK: "R2D" - 157, // T___SINGLEUSE_4E84: "<>" - 157, // T___SINGLEUSE_YTAB: "<>" + 167, // T___SINGLEUSE_9L8R: "<>" + 16, // T___SINGLEUSE_1NKF: "" + 167, // T___SINGLEUSE_J5UH: "<>" + 321, // T___SINGLEUSE_NGUK: "R2D" + 167, // T___SINGLEUSE_4E84: "<>" + 167, // T___SINGLEUSE_YTAB: "<>" 106, // T___SINGLEUSE_RWCE: "PARAMETERS" - 138, // T___SINGLEUSE_HMH2: "PRECHARGE" - 319, // T___SINGLEUSE_4OBM: "LV" - 308, // T___SINGLEUSE_PHFD: "TS" - 255, // T___SINGLEUSE_H6UX: "TIRES" - 157, // T___SINGLEUSE_20H3: "<>" + 148, // T___SINGLEUSE_HMH2: "PRECHARGE" + 329, // T___SINGLEUSE_4OBM: "LV" + 318, // T___SINGLEUSE_PHFD: "TS" + 265, // T___SINGLEUSE_H6UX: "TIRES" + 167, // T___SINGLEUSE_20H3: "<>" 17, // T___SINGLEUSE_SDGP: "Current Mission:" 51, // T___SINGLEUSE_M5X7: "Invalid Mission" 0 // T___SINGLEUSE_6GPV: "Choose a mission" diff --git a/TouchGFX/generated/texts/src/Texts.cpp b/TouchGFX/generated/texts/src/Texts.cpp index 8e2a00c..65e230b 100644 --- a/TouchGFX/generated/texts/src/Texts.cpp +++ b/TouchGFX/generated/texts/src/Texts.cpp @@ -69,37 +69,38 @@ KEEP extern const touchgfx::Unicode::UnicodeChar texts_all_languages[] TEXT_LOCA 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0, // @95 "Inspection" 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x53, 0x0, // @106 "PARAMETERS" 0x54, 0x72, 0x61, 0x63, 0x6b, 0x64, 0x72, 0x69, 0x76, 0x65, 0x0, // @117 "Trackdrive" - 0x41, 0x75, 0x74, 0x6f, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x0, // @128 "Autocross" - 0x50, 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x0, // @138 "PRECHARGE" - 0x45, 0x42, 0x53, 0x20, 0x54, 0x65, 0x73, 0x74, 0x0, // @148 "EBS Test" - 0x2, 0x0, // @157 "<>" - 0x41, 0x53, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @159 "ASSTATE" - 0x49, 0x43, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @167 "ICSTATE" - 0x49, 0x4e, 0x56, 0x4c, 0x52, 0x44, 0x59, 0x0, // @175 "INVLRDY" - 0x49, 0x4e, 0x56, 0x52, 0x52, 0x44, 0x59, 0x0, // @183 "INVRRDY" - 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x0, // @191 "MISSION" - 0x52, 0x32, 0x44, 0x50, 0x52, 0x4f, 0x47, 0x0, // @199 "R2DPROG" - 0x53, 0x6b, 0x69, 0x64, 0x70, 0x61, 0x64, 0x0, // @207 "Skidpad" - 0x54, 0x53, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @215 "TSSTATE" - 0x54, 0x53, 0x56, 0x42, 0x41, 0x54, 0x0, // @223 "TSVBAT" - 0x54, 0x53, 0x56, 0x56, 0x45, 0x48, 0x0, // @230 "TSVVEH" - 0x45, 0x52, 0x52, 0x4f, 0x52, 0x0, // @237 "ERROR" - 0x4c, 0x56, 0x53, 0x4f, 0x43, 0x0, // @243 "LVSOC" - 0x53, 0x50, 0x45, 0x45, 0x44, 0x0, // @249 "SPEED" - 0x54, 0x49, 0x52, 0x45, 0x53, 0x0, // @255 "TIRES" - 0x54, 0x53, 0x53, 0x4f, 0x43, 0x0, // @261 "TSSOC" - 0x42, 0x42, 0x41, 0x4c, 0x0, // @267 "BBAL" - 0x4c, 0x41, 0x50, 0x53, 0x0, // @272 "LAPS" - 0x54, 0x4d, 0x41, 0x58, 0x0, // @277 "TMAX" - 0x54, 0x54, 0x46, 0x4c, 0x0, // @282 "TTFL" - 0x54, 0x54, 0x46, 0x52, 0x0, // @287 "TTFR" - 0x54, 0x54, 0x52, 0x4c, 0x0, // @292 "TTRL" - 0x54, 0x54, 0x52, 0x52, 0x0, // @297 "TTRR" - 0x56, 0x4d, 0x49, 0x4e, 0x0, // @302 "VMIN" - 0x49, 0x54, 0x53, 0x0, // @307 "ITS" - 0x52, 0x32, 0x44, 0x0, // @311 "R2D" - 0x53, 0x44, 0x43, 0x0, // @315 "SDC" - 0x4c, 0x56, 0x0 // @319 "LV" + 0x41, 0x4d, 0x53, 0x20, 0x45, 0x72, 0x72, 0x4f, 0x72, 0x0, // @128 "AMS ErrOr" + 0x41, 0x75, 0x74, 0x6f, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x0, // @138 "Autocross" + 0x50, 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x0, // @148 "PRECHARGE" + 0x45, 0x42, 0x53, 0x20, 0x54, 0x65, 0x73, 0x74, 0x0, // @158 "EBS Test" + 0x2, 0x0, // @167 "<>" + 0x41, 0x53, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @169 "ASSTATE" + 0x49, 0x43, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @177 "ICSTATE" + 0x49, 0x4e, 0x56, 0x4c, 0x52, 0x44, 0x59, 0x0, // @185 "INVLRDY" + 0x49, 0x4e, 0x56, 0x52, 0x52, 0x44, 0x59, 0x0, // @193 "INVRRDY" + 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x0, // @201 "MISSION" + 0x52, 0x32, 0x44, 0x50, 0x52, 0x4f, 0x47, 0x0, // @209 "R2DPROG" + 0x53, 0x6b, 0x69, 0x64, 0x70, 0x61, 0x64, 0x0, // @217 "Skidpad" + 0x54, 0x53, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @225 "TSSTATE" + 0x54, 0x53, 0x56, 0x42, 0x41, 0x54, 0x0, // @233 "TSVBAT" + 0x54, 0x53, 0x56, 0x56, 0x45, 0x48, 0x0, // @240 "TSVVEH" + 0x45, 0x52, 0x52, 0x4f, 0x52, 0x0, // @247 "ERROR" + 0x4c, 0x56, 0x53, 0x4f, 0x43, 0x0, // @253 "LVSOC" + 0x53, 0x50, 0x45, 0x45, 0x44, 0x0, // @259 "SPEED" + 0x54, 0x49, 0x52, 0x45, 0x53, 0x0, // @265 "TIRES" + 0x54, 0x53, 0x53, 0x4f, 0x43, 0x0, // @271 "TSSOC" + 0x42, 0x42, 0x41, 0x4c, 0x0, // @277 "BBAL" + 0x4c, 0x41, 0x50, 0x53, 0x0, // @282 "LAPS" + 0x54, 0x4d, 0x41, 0x58, 0x0, // @287 "TMAX" + 0x54, 0x54, 0x46, 0x4c, 0x0, // @292 "TTFL" + 0x54, 0x54, 0x46, 0x52, 0x0, // @297 "TTFR" + 0x54, 0x54, 0x52, 0x4c, 0x0, // @302 "TTRL" + 0x54, 0x54, 0x52, 0x52, 0x0, // @307 "TTRR" + 0x56, 0x4d, 0x49, 0x4e, 0x0, // @312 "VMIN" + 0x49, 0x54, 0x53, 0x0, // @317 "ITS" + 0x52, 0x32, 0x44, 0x0, // @321 "R2D" + 0x53, 0x44, 0x43, 0x0, // @325 "SDC" + 0x4c, 0x56, 0x0 // @329 "LV" }; TEXT_LOCATION_FLASH_PRAGMA diff --git a/TouchGFX/generated/texts/src/TypedTextDatabase.cpp b/TouchGFX/generated/texts/src/TypedTextDatabase.cpp index d9be9ae..9635b5d 100644 --- a/TouchGFX/generated/texts/src/TypedTextDatabase.cpp +++ b/TouchGFX/generated/texts/src/TypedTextDatabase.cpp @@ -26,6 +26,7 @@ extern const touchgfx::TypedText::TypedTextData* const typedTextDatabaseArray[]; TEXT_LOCATION_FLASH_PRAGMA const touchgfx::TypedText::TypedTextData typedText_database_DEFAULT[] TEXT_LOCATION_FLASH_ATTRIBUTE = { + { 3, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 5, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, @@ -68,6 +69,8 @@ const touchgfx::TypedText::TypedTextData typedText_database_DEFAULT[] TEXT_LOCAT { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, + { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, + { 3, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 1, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, { 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, { 4, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, diff --git a/TouchGFX/gui/include/gui/containers/ErrorPopup.hpp b/TouchGFX/gui/include/gui/containers/ErrorPopup.hpp new file mode 100644 index 0000000..4eeab04 --- /dev/null +++ b/TouchGFX/gui/include/gui/containers/ErrorPopup.hpp @@ -0,0 +1,20 @@ +#ifndef ERRORPOPUP_HPP +#define ERRORPOPUP_HPP + +#include "touchgfx/Unicode.hpp" +#include + +class ErrorPopup : public ErrorPopupBase { +public: + ErrorPopup(); + virtual ~ErrorPopup() {} + + virtual void initialize(); + + void showAMSError(); + +protected: + touchgfx::Unicode::UnicodeChar detailsBuffer[128]; +}; + +#endif // ERRORPOPUP_HPP diff --git a/TouchGFX/gui/include/gui/driverview_screen/DriverViewPresenter.hpp b/TouchGFX/gui/include/gui/driverview_screen/DriverViewPresenter.hpp index aa3eadc..219d6e7 100644 --- a/TouchGFX/gui/include/gui/driverview_screen/DriverViewPresenter.hpp +++ b/TouchGFX/gui/include/gui/driverview_screen/DriverViewPresenter.hpp @@ -37,6 +37,9 @@ public: private: DriverViewPresenter(); + void updateProgress(); + void updateErrorPopup(); + DriverViewView &view; DataFieldType fields[3]; diff --git a/TouchGFX/gui/include/gui/driverview_screen/DriverViewView.hpp b/TouchGFX/gui/include/gui/driverview_screen/DriverViewView.hpp index 3391b20..d9c0606 100644 --- a/TouchGFX/gui/include/gui/driverview_screen/DriverViewView.hpp +++ b/TouchGFX/gui/include/gui/driverview_screen/DriverViewView.hpp @@ -28,6 +28,9 @@ public: void setTSSoC(uint8_t soc); void setProgress(bool active, DriverViewProgressType type, float progress); + void showAMSError(); + void clearErrorPopup(); + void selectPrevField() override; void selectNextField() override; void selectPrevFieldType() override; diff --git a/TouchGFX/gui/src/containers/ErrorPopup.cpp b/TouchGFX/gui/src/containers/ErrorPopup.cpp new file mode 100644 index 0000000..a281a98 --- /dev/null +++ b/TouchGFX/gui/src/containers/ErrorPopup.cpp @@ -0,0 +1,71 @@ +#include + +#include "texts/TextKeysAndLanguages.hpp" +#include "touchgfx/Unicode.hpp" +#include "vehicle.h" + +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_NONE: + touchgfx::Unicode::strncpy(detailsBuffer, "UNKNOWN ERROR", + sizeof(detailsBuffer) / sizeof(*detailsBuffer)); + break; + 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; + } + touchgfx::Unicode::UnicodeChar panicKindBuf[32]; + touchgfx::Unicode::strncpy(panicKindBuf, panicKindStr, + sizeof(panicKindBuf) / sizeof(*panicKindBuf)); + touchgfx::Unicode::snprintf( + detailsBuffer, sizeof(detailsBuffer) / sizeof(*detailsBuffer), + "Slave panic: Slave %d\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; + } + details.setWildcard(detailsBuffer); + details.invalidate(); +} diff --git a/TouchGFX/gui/src/driverview_screen/DriverViewPresenter.cpp b/TouchGFX/gui/src/driverview_screen/DriverViewPresenter.cpp index 1679a3c..0a1d6d0 100644 --- a/TouchGFX/gui/src/driverview_screen/DriverViewPresenter.cpp +++ b/TouchGFX/gui/src/driverview_screen/DriverViewPresenter.cpp @@ -5,7 +5,7 @@ #include "vehicle.h" DriverViewPresenter::DriverViewPresenter(DriverViewView &v) - : view(v), fields{DF_MinCellVolt, DF_Speed, DF_TSCurrent} {} + : view(v), fields{DF_MinCellVolt, DF_TSVoltageVeh, DF_TSCurrent} {} void DriverViewPresenter::activate() { for (size_t i = 0; i < 3; i++) { @@ -18,6 +18,23 @@ void DriverViewPresenter::deactivate() {} void DriverViewPresenter::vehicleStateUpdated() { view.setTireTemps(vehicle_state.tire_temps); view.setTSSoC(vehicle_state.soc); + updateProgress(); + updateErrorPopup(); + + view.updateFieldValues(); +} + +void DriverViewPresenter::nextScreen() { + static_cast(Application::getInstance()) + ->gotoVehicleConfigScreenNoTransition(); +} + +void DriverViewPresenter::setFieldType(size_t i, DataFieldType type) { + fields[i] = type; + view.setFieldType(i, type); +} + +void DriverViewPresenter::updateProgress() { if (vehicle_state.ts_state == TS_PRECHARGE) { float progress = 0; if (vehicle_state.ts_voltage_bat != 0) { @@ -32,16 +49,12 @@ void DriverViewPresenter::vehicleStateUpdated() { } else { view.setProgress(false, DriverViewProgressType::PRECHARGE, 0); } - - view.updateFieldValues(); } -void DriverViewPresenter::nextScreen() { - static_cast(Application::getInstance()) - ->gotoVehicleConfigScreenNoTransition(); -} - -void DriverViewPresenter::setFieldType(size_t i, DataFieldType type) { - fields[i] = type; - view.setFieldType(i, type); +void DriverViewPresenter::updateErrorPopup() { + if (vehicle_state.ts_state == TS_ERROR) { + view.showAMSError(); + } else { + view.clearErrorPopup(); + } } diff --git a/TouchGFX/gui/src/driverview_screen/DriverViewView.cpp b/TouchGFX/gui/src/driverview_screen/DriverViewView.cpp index 7d1004c..01c00c1 100644 --- a/TouchGFX/gui/src/driverview_screen/DriverViewView.cpp +++ b/TouchGFX/gui/src/driverview_screen/DriverViewView.cpp @@ -89,6 +89,17 @@ void DriverViewView::setProgress(bool active, DriverViewProgressType type, } } +void DriverViewView::showAMSError() { + errorPopup.setVisible(true); + errorPopup.showAMSError(); + errorPopup.invalidate(); +} + +void DriverViewView::clearErrorPopup() { + errorPopup.setVisible(false); + errorPopup.invalidate(); +} + void DriverViewView::selectNextField() { if (!fieldTypeSelection.isVisible()) { fieldTypeSelection.setVisible(true); diff --git a/TouchGFX/simulator/msvs/Application.vcxproj b/TouchGFX/simulator/msvs/Application.vcxproj index 2399ab7..7082d4f 100644 --- a/TouchGFX/simulator/msvs/Application.vcxproj +++ b/TouchGFX/simulator/msvs/Application.vcxproj @@ -51,6 +51,8 @@ + + @@ -231,6 +233,8 @@ + + diff --git a/TouchGFX/simulator/msvs/Application.vcxproj.filters b/TouchGFX/simulator/msvs/Application.vcxproj.filters index 7ad88f2..893ec10 100644 --- a/TouchGFX/simulator/msvs/Application.vcxproj.filters +++ b/TouchGFX/simulator/msvs/Application.vcxproj.filters @@ -366,6 +366,12 @@ Source Files\generated\gui_generated\vehicleconfig_screen + + Source Files\gui\containers + + + Source Files\generated\gui_generated\containers + @@ -898,6 +904,12 @@ Header Files\generated\gui_generated\vehicleconfig_screen + + Header Files\gui\containers + + + Header Files\generated\gui_generated\containers + diff --git a/TouchGFX/steering-wheel.touchgfx b/TouchGFX/steering-wheel.touchgfx index cf0d1dc..31a3a7e 100644 --- a/TouchGFX/steering-wheel.touchgfx +++ b/TouchGFX/steering-wheel.touchgfx @@ -508,6 +508,16 @@ "Blue": 255 }, "Wildcard1": {} + }, + { + "Type": "CustomContainerInstance", + "Name": "errorPopup", + "X": 15, + "Y": 122, + "Width": 450, + "Height": 150, + "Visible": false, + "CustomContainerDefinitionName": "ErrorPopup" } ], "Interactions": [ @@ -1134,6 +1144,62 @@ } ], "Interactions": [] + }, + { + "Name": "ErrorPopup", + "X": -80, + "Y": 165, + "Width": 450, + "Height": 150, + "Components": [ + { + "Type": "BoxWithBorder", + "Name": "bg", + "Width": 450, + "Height": 150, + "Color": { + "Red": 197, + "Green": 14, + "Blue": 31 + }, + "BorderColor": { + "Red": 255, + "Green": 255, + "Blue": 255 + }, + "BorderSize": 5 + }, + { + "Type": "TextArea", + "Name": "title", + "Width": 450, + "Height": 49, + "TextId": "__SingleUse_1NKF", + "TextRotation": "0", + "Color": { + "Red": 255, + "Green": 255, + "Blue": 255 + } + }, + { + "Type": "TextArea", + "Name": "details", + "X": 15, + "Y": 60, + "Width": 420, + "Height": 75, + "TextId": "__SingleUse_9L8R", + "TextRotation": "0", + "Color": { + "Red": 255, + "Green": 255, + "Blue": 255 + }, + "Wildcard1": {} + } + ], + "Interactions": [] } ], "Name": "MyApplication",