/* PacoMouseCYD throttle -- F. CaƱada 2025-2026 -- https://usuaris.tinet.cat/fmco/ Very basic Graphical User Interface (GUI) for PacoMouseCYD All data in absolute coordinates Alternate TFT display 320x480 (Only for testing purposes of CYD_USER_DEFINED types) */ //////////////////////////////////////////////////////////// // ***** WINDOW ***** //////////////////////////////////////////////////////////// enum winObj {WIN_DEFAULT, WIN_LOGO, WIN_CALIBRATE, WIN_THROTTLE, WIN_SSID, WIN_WIFI, WIN_WIFI_PWD, WIN_PROTOCOL, WIN_ALERT, WIN_CONFIG, WIN_SET_CLOCK, WIN_LOK_EDIT, WIN_EDIT_NAME, WIN_FUNC, WIN_CHG_FUNC, WIN_VMAX, WIN_SEL_LOCO, WIN_ENTER_ADDR, WIN_SEL_IMAGE, WIN_MENU, WIN_SCREEN, WIN_SPEED, WIN_ABOUT, WIN_LOCK, WIN_OPTIONS, WIN_SPEEDO, WIN_SPEEDO_LNG, WIN_SPEEDO_SCALE, WIN_READ_CV, WIN_PROG_CV, WIN_PROG_ADDR, WIN_PROG_LNCV, WIN_STEAM, WIN_UTIL, WIN_ACCESSORY, WIN_PANELS, WIN_PANEL_NAME, WIN_ACC_CTRL, WIN_ACC_ASPECT, WIN_ACC_TYPE, WIN_ACC_EDIT, WIN_ACC_NAME, WIN_ACC_ADDR1, WIN_ACC_ADDR2, WIN_WIFI_SCAN, WIN_STA_RUN, WIN_STA_PLAY, WIN_STA_STARS, WIN_STA_EDIT, WIN_STA_KEYB, MAX_WIN_OBJ }; typedef struct { // Window data uint16_t x; uint16_t y; uint16_t w; uint16_t h; bool modal; uint16_t color; uint16_t backgnd; } wWinObj; //bool modalWindow; wWinObj winData[MAX_WIN_OBJ] = { { 0, 0, 320, 480, true, COLOR_NAVY, COLOR_BACKGROUND}, // WIN_DEFAULT { 0, 0, 320, 480, true, COLOR_NAVY, COLOR_WHITE}, // WIN_LOGO { 0, 0, 320, 480, true, COLOR_BLACK, COLOR_BLACK}, // WIN_CALIBRATE { 0, 0, 320, 480, true, COLOR_BLACK, COLOR_BACKGROUND}, // WIN_THROTTLE { 40, 80, 240, 320, true, COLOR_WHITE, COLOR_DARKGREY}, // WIN_SSID { 0, 0, 240, 320, true, COLOR_WHITE, COLOR_BACKGROUND}, // WIN_WIFI { 0, 125, 240, 195, true, COLOR_WHITE, COLOR_BACKGROUND}, // WIN_WIFI_PWD { 0, 0, 240, 320, true, COLOR_BLACK, COLOR_WHITE}, // WIN_PROTOCOL { 15, 120, 210, 80, true, COLOR_BLACK, COLOR_WHITE}, // WIN_ALERT { 0, 0, 320, 480, true, COLOR_BLACK, COLOR_WHITE}, // WIN_CONFIG { 15, 120, 210, 140, true, COLOR_BLACK, COLOR_BACKGROUND}, // WIN_SET_CLOCK { 0, 0, 240, 320, true, COLOR_BLACK, COLOR_BACKGROUND}, // WIN_LOK_EDIT { 0, 125, 240, 195, true, COLOR_WHITE, COLOR_BACKGROUND}, // WIN_EDIT_NAME { 0, 0, 240, 320, true, COLOR_WHITE, COLOR_BACKGROUND}, // WIN_FUNC { 60, 100, 120, 100, true, COLOR_WHITE, COLOR_BACKGROUND}, // WIN_CHG_FUNC { 36, 30, 155, 245, true, COLOR_WHITE, COLOR_BACKGROUND}, // WIN_VMAX { 0, 0, 240, 320, true, COLOR_NAVY, COLOR_WHITE}, // WIN_SEL_LOCO { 36, 30, 155, 245, true, COLOR_WHITE, COLOR_BACKGROUND}, // WIN_ENTER_ADDR { 40, 80, 240, 320, true, COLOR_NAVY, COLOR_BACKGROUND}, // WIN_SEL_IMAGE { 0, 0, 320, 480, true, COLOR_AQUA, COLOR_CHARCOAL}, // WIN_MENU { 15, 80, 210, 140, true, COLOR_BLACK, COLOR_WHITE}, // WIN_SCREEN { 15, 120, 210, 160, true, COLOR_BLACK, COLOR_WHITE}, // WIN_SPEED { 45, 15, 230, 220, true, COLOR_NAVY, COLOR_WHITE}, // WIN_ABOUT { 15, 120, 210, 160, true, COLOR_BLACK, COLOR_WHITE}, // WIN_LOCK { 5, 75, 230, 205, true, COLOR_BLACK, COLOR_WHITE}, // WIN_OPTIONS { 0, 0, 240, 320, true, COLOR_BLACK, COLOR_BACKGROUND}, // WIN_SPEEDO { 36, 30, 155, 245, true, COLOR_WHITE, COLOR_BACKGROUND}, // WIN_SPEEDO_LNG { 0, 0, 240, 320, true, COLOR_BLACK, COLOR_BACKGROUND}, // WIN_SPEEDO_SCALE { 0, 0, 320, 480, true, COLOR_AQUA, COLOR_WHITE}, // WIN_READ_CV { 0, 0, 240, 320, true, COLOR_BLACK, COLOR_BACKGROUND}, // WIN_PROG_CV { 0, 0, 240, 320, true, COLOR_WHITE, COLOR_BACKGROUND}, // WIN_PROG_ADDR { 0, 0, 240, 320, true, COLOR_WHITE, COLOR_BACKGROUND}, // WIN_PROG_LNCV { 0, 0, 320, 480, true, COLOR_BLACK, COLOR_BLACK}, // WIN_STEAM { 0, 0, 320, 480, true, COLOR_BLACK, COLOR_WHITE}, // WIN_UTIL { 0, 0, 320, 480, true, COLOR_BLACK, COLOR_WHITE}, // WIN_ACCESSORY { 0, 0, 240, 320, true, COLOR_BLACK, COLOR_WHITE}, // WIN_PANELS { 0, 125, 240, 195, true, COLOR_WHITE, COLOR_BACKGROUND}, // WIN_PANEL_NAME { 10, 25, 210, 255, true, COLOR_WHITE, COLOR_BACKGROUND}, // WIN_ACC_CTRL { 5, 95, 230, 80, true, COLOR_AQUA, COLOR_YELLOW}, // WIN_ACC_ASPECT { 40, 100, 160, 100, true, COLOR_WHITE, COLOR_LIGHTGREY}, // WIN_ACC_TYPE { 0, 0, 240, 240, true, COLOR_WHITE, COLOR_LIGHTGREY}, // WIN_ACC_EDIT { 0, 125, 240, 195, true, COLOR_WHITE, COLOR_BACKGROUND}, // WIN_ACC_NAME { 36, 30, 155, 245, true, COLOR_WHITE, COLOR_BACKGROUND}, // WIN_ACC_ADDR1 { 36, 30, 155, 245, true, COLOR_WHITE, COLOR_BACKGROUND}, // WIN_ACC_ADDR2 { 0, 0, 320, 480, true, COLOR_BLACK, COLOR_BLACK}, // WIN_WIFI_SCAN { 0, 0, 320, 480, true, COLOR_WHITE, COLOR_BLUE}, // WIN_STA_RUN { 0, 0, 320, 480, true, COLOR_WHITE, COLOR_BLUE}, // WIN_STA_PLAY { 10, 120, 220, 80, true, COLOR_BLACK, COLOR_WHITE}, // WIN_STA_STARS { 0, 0, 240, 320, true, COLOR_WHITE, COLOR_BLUE}, // WIN_STA_EDIT { 85, 75, 150, 200, true, COLOR_WHITE, COLOR_BACKGROUND}, // WIN_STA_KEYB }; //////////////////////////////////////////////////////////// // ***** LABEL ***** //////////////////////////////////////////////////////////// uint8_t currLanguage; enum labelObj {LBL_PACO_TXT, LBL_INIT, LBL_CONNECT, LBL_PRESS, LBL_CAL, LBL_CAL_DONE, LBL_SCAN, LBL_SSID_SCAN, LBL_SSID, LBL_IP, LBL_PWD_HIDE, LBL_PORT, LBL_PROTOCOL, LBL_SEL_PROT, LBL_SEL_Z21, LBL_SEL_XNET, LBL_SEL_ECOS, LBL_SEL_LNET, LBL_SEL_LBSERVER, LBL_SEL_BINARY, LBL_OPTIONS, LBL_NAME, LBL_ADDR, LBL_IMAGE, LBL_VMAX, LBL_FUNC, LBL_SERVICE, LBL_KMH, LBL_SHUNTING, LBL_RATE, LBL_CHG_WIFI, LBL_EDIT_FUNC, LBL_STACK_FULL, LBL_STOP_0, LBL_STOP_E, LBL_SEL_IMAGE, LBL_MENU_DRIVE, LBL_MENU_ACC, LBL_MENU_CV, LBL_MENU_CFG, LBL_MENU_UTILS, LBL_CFG_LANG, LBL_CFG_SCR, LBL_CFG_SPD, LBL_CFG_WIFI, LBL_CFG_FCLK, LBL_CFG_LOCK, LBL_CFG_ABOUT, LBL_SCR_ROTATE, LBL_PACO_WEB, LBL_LOCK_LOK, LBL_LOCK_ACC, LBL_LOCK_PRG, LBL_OPT_ADR, LBL_OPT_IB2, LBL_OPT_UHLI, LBL_OPT_DIG, LBL_ESTOP, LBL_SCALE, LBL_MM, LBL_SCALE_H0, LBL_SCALE_N, LBL_SCALE_TT, LBL_SCALE_Z, LBL_SCALE_0, LBL_MEASURE, LBL_CV_ADDR, LBL_CV_SPD_L, LBL_CV_SPD_M, LBL_CV_SPD_H, LBL_CV_ACC, LBL_CV_DEC, LBL_CV_CFG, LBL_CV_MAN, LBL_CV, LBL_LNCV, LBL_POM, LBL_BITS, LBL_CV_ERROR, LBL_UTIL_SPEED, LBL_UTIL_STEAM, LBL_UTIL_SCAN, LBL_UTIL_STA, LBL_ASK_SURE, LBL_OPT_DISCOVER, LBL_LNCV_ART, LBL_LNCV_MOD, LBL_LNCV_NUM, LBL_ACC_TYPE, LBL_ACC_NAME, LBL_ACC_ADDR, LBL_STA_RUN, LBL_STA_LEVEL, LBL_STA_START, LBL_STA_INSTR, LBL_STA_EXCEL, LBL_STA_GREAT, LBL_STA_TIMEOUT, LBL_STA_STATIONS, LBL_STA_TURNOUTS, LBL_STA_TIME, LBL_STA_DESC, MAX_LABEL_OBJ }; typedef struct { // Label data uint16_t x; uint16_t y; const GFXfont *font; uint16_t color; byte align; } wLabelObj; /* Normally strings are printed relative to the top left corner but this can be changed with the setTextDatum() function. The library has #defines for: TL_DATUM = Top left TC_DATUM = Top centre TR_DATUM = Top right ML_DATUM = Middle left MC_DATUM = Middle centre MR_DATUM = Middle right BL_DATUM = Bottom left BC_DATUM = Bottom centre BR_DATUM = Bottom right */ wLabelObj labelData[MAX_LABEL_OBJ] = { { 160, 35, FSSB12, COLOR_BLACK, MC_DATUM}, // LBL_PACO_TXT { 20, 120, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_INIT { 20, 120, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_CONNECT { 160, 240, FSSB12, COLOR_YELLOW, MC_DATUM}, // LBL_PRESS { 160, 0, FSS9, COLOR_WHITE, TC_DATUM}, // LBL_CAL { 160, 0, FSS9, COLOR_GREEN, TC_DATUM}, // LBL_CAL_DONE { 160, 120, FSSB12, COLOR_YELLOW, MC_DATUM}, // LBL_SCAN { 160, 105, FSSB12, COLOR_YELLOW, MC_DATUM}, // LBL_SSID_SCAN { 10, 24, FSSB9, COLOR_BLACK, TL_DATUM}, // LBL_SSID { 10, 134, FSSB9, COLOR_BLACK, TL_DATUM}, // LBL_IP { 10, 94, FSSB9, COLOR_BLACK, TL_DATUM}, // LBL_PWD_HIDE { 10, 174, FSSB9, COLOR_BLACK, TL_DATUM}, // LBL_PORT { 10, 214, FSSB9, COLOR_BLACK, TL_DATUM}, // LBL_PROTOCOL { 10, 10, FSSB9, COLOR_BLACK, TL_DATUM}, // LBL_SEL_PROT { 50, 50, FSS9, COLOR_BLACK, TL_DATUM}, // LBL_SEL_Z21 { 50, 85, FSS9, COLOR_BLACK, TL_DATUM}, // LBL_SEL_XNET { 50, 120, FSS9, COLOR_BLACK, TL_DATUM}, // LBL_SEL_ECOS { 50, 155, FSS9, COLOR_BLACK, TL_DATUM}, // LBL_SEL_LNET { 90, 190, FSS9, COLOR_BLACK, TL_DATUM}, // LBL_SEL_LBSERVER { 90, 225, FSS9, COLOR_BLACK, TL_DATUM}, // LBL_SEL_BINARY { 70, 280, FSSB9, COLOR_BLACK, MC_DATUM}, // LBL_OPTIONS { 5, 144, FSSB9, COLOR_BLACK, TL_DATUM}, // LBL_NAME Loco Data & .csv { 5, 15, FSSB9, COLOR_BLACK, TL_DATUM}, // LBL_ADDR { 5, 55, FSSB9, COLOR_BLACK, TL_DATUM}, // LBL_IMAGE { 5, 184, FSSB9, COLOR_BLACK, TL_DATUM}, // LBL_VMAX { 120, 232, FSSB9, COLOR_BLACK, MC_DATUM}, // LBL_FUNC { 65, 160, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_SERVICE { 159, 320, FSSB9, COLOR_BLACK, MC_DATUM}, // LBL_KMH { 85, 133, FSSB9, COLOR_BLACK, TL_DATUM}, // LBL_SHUNTING { 25, 174, FSSB9, COLOR_BLACK, TL_DATUM}, // LBL_RATE { 65, 140, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_CHG_WIFI { 120, 55, FSSB9, COLOR_BLACK, MC_DATUM}, // LBL_EDIT_FUNC { 65, 140, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_STACK_FULL { 85, 174, FSSB9, COLOR_BLACK, TL_DATUM}, // LBL_STOP_0 { 85, 205, FSSB9, COLOR_BLACK, TL_DATUM}, // LBL_STOP_E { 140, 100, FSSB12, COLOR_YELLOW, MC_DATUM}, // LBL_SEL_IMAGE { 85, 120, FSSB9, COLOR_WHITE, ML_DATUM}, // LBL_MENU_DRIVE { 85, 180, FSSB9, COLOR_WHITE, ML_DATUM}, // LBL_MENU_ACC { 85, 240, FSSB9, COLOR_WHITE, ML_DATUM}, // LBL_MENU_CV { 85, 300, FSSB9, COLOR_WHITE, ML_DATUM}, // LBL_MENU_CFG { 85, 360, FSSB9, COLOR_WHITE, ML_DATUM}, // LBL_MENU_UTILS { 85, 30, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_CFG_LANG { 85, 90, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_CFG_SCR { 85, 150, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_CFG_SPD { 85, 210, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_CFG_WIFI { 85, 270, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_CFG_FCLK { 85, 330, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_CFG_LOCK { 85, 390, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_CFG_ABOUT { 75, 138, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_SCR_ROTATE { 160, 150, FSS9, COLOR_NAVY, MC_DATUM}, // LBL_PACO_WEB { 75, 133, FSSB9, COLOR_BLACK, TL_DATUM}, // LBL_LOCK_LOK { 75, 168, FSSB9, COLOR_BLACK, TL_DATUM}, // LBL_LOCK_ACC { 75, 203, FSSB9, COLOR_BLACK, TL_DATUM}, // LBL_LOCK_PRG { 60, 155, FSS9, COLOR_BLACK, TL_DATUM}, // LBL_OPT_ADR { 60, 120, FSS9, COLOR_BLACK, TL_DATUM}, // LBL_OPT_IB2 { 60, 155, FSS9, COLOR_BLACK, TL_DATUM}, // LBL_OPT_UHLI { 60, 190, FSS9, COLOR_BLACK, TL_DATUM}, // LBL_OPT_DIG { 65, 160, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_ESTOP { 100, 74, FSSB9, COLOR_BLACK, TR_DATUM}, // LBL_SCALE { 165, 148, FSSB9, COLOR_BLACK, TL_DATUM}, // LBL_MM { 40, 95, FSSB12, COLOR_BLACK, MC_DATUM}, // LBL_SCALE_H0 { 40, 135, FSSB12, COLOR_BLACK, MC_DATUM}, // LBL_SCALE_N { 40, 175, FSSB12, COLOR_BLACK, MC_DATUM}, // LBL_SCALE_TT { 40, 215, FSSB12, COLOR_BLACK, MC_DATUM}, // LBL_SCALE_Z { 40, 255, FSSB12, COLOR_BLACK, MC_DATUM}, // LBL_SCALE_0 { 0, 0, FSSB12, COLOR_BLACK, MC_DATUM}, // LBL_MEASURE { 85, 30, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_CV_ADDR { 85, 90, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_CV_SPD_L { 85, 150, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_CV_SPD_M { 85, 210, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_CV_SPD_H { 85, 270, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_CV_ACC { 85, 330, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_CV_DEC { 85, 390, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_CV_CFG { 85, 450, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_CV_MAN { 10, 50, FSSB12, COLOR_BLACK, TL_DATUM}, // LBL_CV { 45, 246, FSSB9, COLOR_BLACK, MC_DATUM}, // LBL_LNCV { 35, 147, FSSB9, COLOR_BLACK, TC_DATUM}, // LBL_POM { 15, 98, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_BITS { 0, 0, FSSB12, COLOR_BLACK, MC_DATUM}, // LBL_CV_ERROR { 85, 30, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_UTIL_SPEED { 85, 90, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_UTIL_STEAM { 85, 150, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_UTIL_SCAN { 85, 210, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_UTIL_STA { 65, 140, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_ASK_SURE { 60, 85, FSS9, COLOR_BLACK, TL_DATUM}, // LBL_OPT_DISCOVER { 10, 20, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_LNCV_ART { 10, 60, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_LNCV_MOD { 10, 100, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_LNCV_NUM { 120, 115, FSSB9, COLOR_NAVY, MC_DATUM}, // LBL_ACC_TYPE { 37, 20, FSSB9, COLOR_NAVY, MC_DATUM}, // LBL_ACC_NAME { 37, 60, FSSB9, COLOR_NAVY, MC_DATUM}, // LBL_ACC_ADDR { 160, 40, FSSB12, COLOR_WHITE, MC_DATUM}, // LBL_STA_RUN { 10, 100, FSS9, COLOR_WHITE, TL_DATUM}, // LBL_STA_LEVEL { 160, 229, FSSB9, COLOR_WHITE, MC_DATUM}, // LBL_STA_START { 160, 300, FSS9, COLOR_WHITE, TC_DATUM}, // LBL_STA_INSTR { 75, 160, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_STA_EXCEL { 75, 160, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_STA_GREAT { 60, 150, FSSB9, COLOR_BLACK, ML_DATUM}, // LBL_STA_TIMEOUT { 10, 50, FSSB9, COLOR_WHITE, TL_DATUM}, // LBL_STA_STATIONS { 10, 90, FSSB9, COLOR_WHITE, TL_DATUM}, // LBL_STA_TURNOUTS { 10, 10, FSSB9, COLOR_WHITE, TL_DATUM}, // LBL_STA_TIME { 10, 130, FSS9, COLOR_YELLOW, TL_DATUM}, // LBL_STA_DESC }; //////////////////////////////////////////////////////////// // ***** DRAW STRING ***** //////////////////////////////////////////////////////////// /* Kn Color n. From colorDraw[] kn Sprite color depth Xn Cursor X xn Increment x position Yn Cursor Y yn Increment y position Rw,h Fill rectangle width,height rw,h Draw rectangle width,height Cr Fill circle radius r cr Draw circle radius r Lx,y Draw Line to x,y lx,y Draw polyline to x,y (X,Y set to end position: x,y) px,y second point (for triangles) -> XxYypx,yTx,y Tx,y fill triangle (X,Y),(px,y),(Tx,y) tx,y draw triangle (X,Y),(px,y),(tx,y) Sw,h create sprite and draw string into it. x & y set to 0, background color defined with Kn -> KnkdSw,h sn draw sprite with transparent color n Dw,h Degrade rectangle dn Band height for degrade */ const char drwStrInit[] = {"K6R320,50K1Y50R320,6X0Y200R320,280"}; const char drwStrIniStatus[] = {"K7X1Y105R180,35"}; const char drwStrSpanish[] = {"K2S32,24K6y6R32,12s9"}; const char drwStrCatalan[] = {"K6S32,24K2y3R32,3y5R32,3y5R32,3y5R32,3s9"}; // quatre barres const char drwStrEnglish[] = {"K1S32,24" // blue background "K7x13R6,24X0y9R32,6" // white cross "X0Y1L11,8y21L11,15X1Y0L12,7y23L12,16" // left white lines "X19Y7L30,0y9L30,23X20Y8L31,1y7L31,22" // right white lines "K2X0Y10R32,4x14Y0R4,24" // red cross "X0Y0L12,8y23L12,15X19Y8L31,0X19Y15L31,23" // red lines "s9" }; const char drwStrGerman[] = {"K0S32,24K2y8R32,8K6y8R32,8s9"}; const char drwStrClock[] = {"K7C12"}; //{"K7C12K0X97Y138L97,140y6L97,146"}; const char drwStrSelLok[] = {"K0C21"}; // K10X133Y11R34,26"}; const char drwStrMenu[] = {""}; // X0Y0K14d16D320,480"}; // K11L319,90y60L319,150y60L319,210y60L319,270y60L319,330"}; const char drwStrCfgMenu[] = {"X1Y0K7d15D318,480"}; // K11L239,40y40L239,80y40L239,120y40L239,160y40L239,200y40L239,240y40L239,280"}; const char drwStrUtlMenu[] = {""}; // X1Y0K7d15D318,480"}; const char drwStrAbout[] = {"K6R228,50K1y50R228,6y98R228,70"}; const char drwStrSpdTrk[] = {"K0L199,125K2X81Y133p87,127T93,133X145Y133p151,127T157,133"}; const char drwStrSpdDel[] = {"K8k16S32,18s9"}; const char drwStrSteam[] = {"K14p90,0T0,90X32Y0R270,50X230Y0p319,0T319,90X35Y125C25X285Y125C25" // Sky "K13X143Y32R34,18X141R38,2" // Chimney "K7X160Y270c125Y340c40X139Y105C31X250Y305L255,305K8X5Y400R310,4" // Cabin "K15X47Y172R23,66K2X63Y179p67,175T67,183X63Y229p67,225T67,233" // Water level }; const char drwStrWifiScan[] = {"K0R320,257K10X40'yY302L279,302X160Y370C27"}; const char drwStrStaPlay[] = {"K1d15D318,330K7X30Y150L210,150"}; enum drwStrObj {DSTR_INIT, DSTR_INIT_STAT, DSTR_ENGLISH, DSTR_SPANISH, DSTR_CATALAN, DSTR_GERMAN, DSTR_CLOCK, DSTR_SELLOK, DSTR_MENU, DSTR_CFG_MENU, DSTR_UTL_MENU, DSTR_ABOUT, DSTR_SPEEDO_TRK, DSTR_SPEEDO_BLANK, DSTR_STEAM, DSTR_WIFI_SCAN, DSTR_STATION_PLAY, MAX_DRAWSTR_OBJ }; typedef struct { // drawStr data uint16_t x; uint16_t y; const char *str; } wDrawStr; wDrawStr drawStrData[MAX_DRAWSTR_OBJ] = { { 0, 0, drwStrInit}, // DSTR_INIT { 0, 0, drwStrIniStatus}, // DSTR_INIT_STAT { 44, 18, drwStrEnglish}, // DSTR_ENGLISH { 44, 18, drwStrSpanish}, // DSTR_SPANISH { 44, 18, drwStrCatalan}, // DSTR_CATALAN { 44, 18, drwStrGerman}, // DSTR_GERMAN { 36, 141, drwStrClock}, // DSTR_CLOCK { 58, 24, drwStrSelLok}, // DSTR_SELLOK { 1, 90, drwStrMenu}, // DSTR_MENU { 1, 40, drwStrCfgMenu}, // DSTR_CFG_MENU { 1, 40, drwStrUtlMenu}, // DSTR_UTL_MENU { 46, 16, drwStrAbout}, // DSTR_ABOUT { 40, 125, drwStrSpdTrk}, // DSTR_SPEEDO_TRK { 40, 107, drwStrSpdDel}, // DSTR_SPEEDO_BLANK { 0, 0, drwStrSteam}, // DSTR_STEAM { 0, 80, drwStrWifiScan}, // DSTR_WIFI_SCAN { 1, 0, drwStrStaPlay}, // DSTR_STATION_PLAY }; //////////////////////////////////////////////////////////// // ***** CHAR ***** //////////////////////////////////////////////////////////// enum charObj {CHAR_CLK_COLON, CHAR_CV_EQUAL, CHAR_CV_0, CHAR_CV_1, CHAR_CV_2, CHAR_CV_3, CHAR_CV_4, CHAR_CV_5, CHAR_CV_6, CHAR_CV_7, CHAR_LNCV_EQUAL, CHAR_STA_STAM, CHAR_STA_STAP, CHAR_STA_TURNM, CHAR_STA_TURNP, MAX_CHAR_OBJ }; typedef struct { // Char data uint16_t x; uint16_t y; char chr; const GFXfont *font; uint16_t color; } wCharObj; wCharObj charData[MAX_CHAR_OBJ] = { { 95, 146, ':', FSSB9, COLOR_BLACK}, // CHAR_CLK_COLON {135, 65, '=', FSSB12, COLOR_BLACK}, // CHAR_CV_EQUAL {206, 105, '0', FSSB9, COLOR_BLACK}, // CHAR_CV_0 {186, 105, '1', FSSB9, COLOR_BLACK}, // CHAR_CV_1 {166, 105, '2', FSSB9, COLOR_BLACK}, // CHAR_CV_2 {146, 105, '3', FSSB9, COLOR_BLACK}, // CHAR_CV_3 {126, 105, '4', FSSB9, COLOR_BLACK}, // CHAR_CV_4 {106, 105, '5', FSSB9, COLOR_BLACK}, // CHAR_CV_5 { 86, 105, '6', FSSB9, COLOR_BLACK}, // CHAR_CV_6 { 66, 105, '7', FSSB9, COLOR_BLACK}, // CHAR_CV_7 {145, 107, '=', FSSB12, COLOR_BLACK}, // CHAR_LNCV_EQUAL {132, 70, '-', FSSB12, COLOR_WHITE}, // CHAR_STA_STAM {210, 70, '+', FSSB12, COLOR_WHITE}, // CHAR_STA_STAP {132, 110, '-', FSSB12, COLOR_WHITE}, // CHAR_STA_TURNM {210, 110, '+', FSSB12, COLOR_WHITE}, // CHAR_STA_TURNP }; //////////////////////////////////////////////////////////// // ***** FUNCTIONS ***** //////////////////////////////////////////////////////////// #define FNC_WIDTH 32 #define FNC_HEIGHT 32 #define FNC_MAX 28 #define FNC_ICON_MAX 40 enum funcIconObj { FNC_BLANK_OFF, FNC_BLANK_ON, FNC_NO_ICON_OFF, FNC_NO_ICON_ON, FNC_FUNC_OFF, FNC_FUNC_ON, FNC_LIGHT_OFF, FNC_LIGHT_ON, FNC_INT_LIGHT_OFF, FNC_INT_LIGHT_ON, FNC_UNI_LIGHT_OFF, FNC_UNI_LIGHT_ON, FNC_SOUND_OFF, FNC_SOUND_ON, FNC_GEN_SOUND_OFF, FNC_GEN_SOUND_ON, FNC_ANNOUN_OFF, FNC_ANNOUN_ON, FNC_SLOW_OFF, FNC_SLOW_ON, FNC_ABV_OFF, FNC_ABV_ON, FNC_COUPLER_OFF, FNC_COUPLER_ON, FNC_SMOKE_OFF, FNC_SMOKE_ON, FNC_PANTO_OFF, FNC_PANTO_ON, FNC_BEAM_OFF, FNC_BEAM_ON, FNC_BELL_OFF, FNC_BELL_ON, FNC_HORN_OFF, FNC_HORN_ON, FNC_WHISTLE_OFF, FNC_WHISTLE_ON, FNC_DOOR_OFF, FNC_DOOR_ON, FNC_FAN_OFF, FNC_FAN_ON, FNC_KOHLE_OFF, FNC_KOHLE_ON, FNC_SHIFT_OFF, FNC_SHIFT_ON, FNC_PLATE_OFF, FNC_PLATE_ON, FNC_BRAKE_OFF, FNC_BRAKE_ON, FNC_WHEEL_OFF, FNC_WHEEL_ON, FNC_RADIO_OFF, FNC_RADIO_ON, FNC_COUPLERSND_OFF, FNC_COUPLERSND_ON, FNC_TRACK_OFF, FNC_TRACK_ON, FNC_NOTCHP_OFF, FNC_NOTCHP_ON, FNC_NOTCHM_OFF, FNC_NOTCHM_ON, FNC_PFIFF_OFF, FNC_PFIFF_ON, FNC_UNI_LIGHT2_OFF, FNC_UNI_LIGHT2_ON, FNC_CURVE_OFF, FNC_CURVE_ON, FNC_COMPR_OFF, FNC_COMPR_ON, FNC_AIRBLOW_OFF, FNC_AIRBLOW_ON, FNC_FIRBOX_OFF, FNC_FIREBOX_ON, FNC_SAND_OFF, FNC_SAND_ON, FNC_TABLE_OFF, FNC_TABLE_ON, FNC_CABIN_OFF, FNC_CABIN_ON, FNC_MUTE_OFF, FNC_MUTE_ON, FNC_DIESEL_OFF, FNC_DIESEL_ON, FNC_NEXT_OFF, FNC_NEXT_ON, FNC_PREV_OFF, FNC_PREV_ON, FNC_CV_OFF, FNC_CV_ON, FNC_VALVE_OFF, FNC_VALVE_ON, FNC_FIRE_CL_OFF, FNC_FIRE_CL_ON, FNC_FIRE_OP_OFF, FNC_FIRE_OP_ON, FNC_ST_SMOKE_OFF, FNC_ST_SMOKE_ON, FNC_TURNLD_OFF, FNC_TURNLD_ON, FNC_TURNLS_OFF, FNC_TURNLS_ON, FNC_TURNRD_OFF, FNC_TURNRD_ON, FNC_TURNRS_OFF, FNC_TURNRS_ON, FNC_TURN3L_OFF, FNC_TURN3L_ON, FNC_TURN3R_OFF, FNC_TURN3R_ON, FNC_TURN3S_OFF, FNC_TURN3S_ON, FNC_CROSD_OFF, FNC_CROSD_ON, FNC_CROSS_OFF, FNC_CROSS_ON, FNC_SIGRY_OFF, FNC_SIGRY_ON, FNC_SIGGW_OFF, FNC_SIGGW_ON, FNC_SEMR_OFF, FNC_SEMR_ON, FNC_SEMG_OFF, FNC_SEMG_ON, FNC_SEMY_OFF, FNC_SEMY_ON, FNC_PANR_OFF, FNC_PANR_ON, FNC_PANG_OFF, FNC_PANG_ON, FNC_TTL_OFF, FNC_TTL_ON, FNC_TTR_OFF, FNC_TTR_ON, FNC_TTROT_OFF, FNC_TTROT_ON, FNC_TTTRK_OFF, FNC_TTTRK_ON, FNC_POWER_OFF, FNC_POWER_ON, FNC_KEYPAD_OFF, FNC_KEYPAD_ON, FNC_DCROSSS1_OFF, FNC_DCROSSS1_ON, FNC_DCROSSS2_OFF, FNC_DCROSSS2_ON, FNC_DCROSSD1_OFF, FNC_DCROSSD1_ON, FNC_DCROSSD2_OFF, FNC_DCROSSD2_ON, FNC_BRETELLED_OFF, FNC_BRETELLED_ON, FNC_BRETELLE_OFF, FNC_BRETELLE_ON, FNC_ACC_OFF, FNC_ACC_ON, FNC_STAR_OFF, FNC_STAR_ON, FNC_RAYO_OFF, FNC_RAYO_ON, }; const unsigned char* funcIcon[] = { blank32, blank32, blank32, full32, func_off, func_on, light_off, light_on, intlight_off, intlight_on, unilight_off, unilight_on, snd_off, snd_on, gensnd_off, gensnd_on, announce_off, announce_on, maniobra_off, maniobra_on, abv_off, abv_on, uncoupler_off, uncoupler_on, smoke_off, smoke_on, panto_off, panto_on, beam_off, beam_on, bell_off, bell_on, horn_off, horn_on, whistle_off, whistle_on, door_off, door_on, fan_off, fan_on, kohle_off, kohle_on, shift_off, shift_on, plate_off, plate_on, brake_off, brake_on, wheel_off, wheel_on, radio_off, radio_on, couplersnd_off, couplersnd_on, track_off, track_on, notchp_off, notchp_on, notchm_off, notchm_on, pfiff_off, pfiff_on, unilight2_off, unilight2_on, curve_off, curve_on, compr_off, compr_on, airblow_off, airblow_on, firebox_off, firebox_on, sand_off, sand_on, table_off, table_on, cabin_off, cabin_on, mute_off, mute_on, diesel_off, diesel_on, nextP, nextP_on, prevP, prevP_on, readCV_off, readCV_on, valve_off, valve_on, fire_close_off, fire_close_on, fire_open_off, fire_open_on, steam_smoke_off, steam_smoke_on, turnL_off, tripleL_on, turnLS_off, tripleS_on, turnR_off, tripleR_on, turnRS_off, tripleS_on, tripleL_off, tripleL_on, tripleR_off, tripleR_on, tripleS_off, tripleS_on, crossS2_off, crossS2_on, crossS1_off, crossS1_on, sig_off, sigRY_on, sig_off, sigG_on, semR_off, semR_on, semG_off, semG_on, semY_off, semY_on, panR_off, panR_on, panG_off, panG_on, movG_off, movG_on, movR_off, movR_on, rotTT_off, rotTT_on, outTT_off, blank32, power, blank32, keypad_off, keypad_on, dcrossS1_off, dcrossS1_on, // dcrossS2_off, dcrossS2_on, // dcrossD1_off, dcrossD1_on, // dcrossD2_off, dcrossD2_on, // bretelleR_off, bretelleR_on, bretelleG_off, bretelleG_on, accPanel_off, accPanel_on, star_off, star_on, rayo_off, rayo_on, }; enum funcObj {FNC_FX0, FNC_FX1, FNC_FX2, FNC_FX3, FNC_FX4, FNC_FX5, FNC_FX6, FNC_FX7, FNC_FX8, FNC_FX9, FNC_F0, FNC_F1, FNC_F2, FNC_F3, FNC_F4, FNC_F5, FNC_F6, FNC_F7, FNC_F8, FNC_F9, FNC_F10, FNC_F11, FNC_F12, FNC_F13, FNC_F14, FNC_F15, FNC_F16, FNC_F17, FNC_F18, FNC_F19, FNC_F20, FNC_F21, FNC_F22, FNC_F23, FNC_F24, FNC_F25, FNC_F26, FNC_F27, FNC_F28, FNC_CHG, FNC_SPEEDO_DIR, FNC_CV_READ, FNC_ST_WATER, FNC_ST_WHISTLE, FNC_ST_TENDER, FNC_ST_FIRE, FNC_ST_SMOKE, FNC_UTL_STEAM, FNC_ACC0, FNC_ACC1, FNC_ACC2, FNC_ACC3, FNC_ACC4, FNC_ACC5, FNC_ACC6, FNC_ACC7, FNC_ACC8, FNC_ACC9, FNC_ACC10, FNC_ACC11, FNC_ACC12, FNC_ACC13, FNC_ACC14, FNC_ACC15, FNC_ASPECT0, FNC_ASPECT1, FNC_ASPECT2, FNC_ASPECT3, FNC_ACC_TYPE, FNC_EDIT_ASPECT0, FNC_EDIT_ASPECT1, FNC_EDIT_ASPECT2, FNC_EDIT_ASPECT3, FNC_ACC_PANEL, FNC_SEL_KEYPAD, FNC_SCAN_RESET, FNC_STA_STARS, FNC_STA_DIR, FNC_STA_ACC0, FNC_STA_ACC1, FNC_STA_ACC2, FNC_STA_ACC3, FNC_STA_STARC, FNC_STA_STAR1, FNC_STA_STAR2, FNC_STA_RAYO, MAX_FNC_OBJ }; typedef struct { // Function data uint16_t x; uint16_t y; uint8_t num; bool state; uint16_t idIcon; uint16_t color; uint16_t colorOn; uint16_t backgnd; } wFncObj; wFncObj fncData[MAX_FNC_OBJ] = { { 16, 150, 0, false, FNC_LIGHT_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_FX0 { 16, 210, 1, false, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_FX1 { 16, 270, 2, false, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_FX2 { 16, 330, 3, false, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_FX3 { 16, 390, 4, false, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_FX4 {272, 150, 5, false, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_FX5 {272, 210, 6, false, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_FX6 {272, 270, 7, false, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_FX7 {272, 330, 8, false, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_FX8 {272, 390, 9, false, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_FX9 { 4, 80, 0, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F0 { 44, 80, 1, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F1 { 84, 80, 2, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F2 {124, 80, 3, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F3 {164, 80, 4, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F4 {204, 80, 5, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F5 { 4, 120, 6, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F6 { 44, 120, 7, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F7 { 84, 120, 8, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F8 {124, 120, 9, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F9 {164, 120, 10, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F10 {204, 120, 11, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F11 { 4, 160, 12, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F12 { 44, 160, 13, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F13 { 84, 160, 14, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F14 {124, 160, 15, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F15 {164, 160, 16, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F16 {204, 160, 17, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F17 { 4, 200, 18, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F18 { 44, 200, 19, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F19 { 84, 200, 20, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F20 {124, 200, 21, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F21 {164, 200, 22, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F22 {204, 200, 23, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F23 { 4, 240, 24, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F24 { 44, 240, 25, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F25 { 84, 240, 26, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F26 {124, 240, 27, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F27 {164, 240, 28, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_F28 {104, 150, 99, true, FNC_FUNC_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_CHG {104, 204, 99, true, FNC_NEXT_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_BACKGROUND}, // FNC_SPEEDO_DIR { 29, 179, 99, true, FNC_CV_OFF, COLOR_BLACK, COLOR_ORANGE, COLOR_CREAM}, // FNC_CV_READ { 45, 250, 99, true, FNC_VALVE_OFF, COLOR_WHITE, COLOR_RED, COLOR_BLACK}, // FNC_ST_WATER {210, 65, 99, false, FNC_WHISTLE_OFF, COLOR_ORANGE, COLOR_YELLOW, COLOR_BLACK}, // FNC_ST_WHISTLE { 58, 310, 99, true, FNC_VALVE_OFF, COLOR_WHITE, COLOR_RED, COLOR_BLACK}, // FNC_ST_TENDER {144, 324, 99, true, FNC_FIRE_CL_OFF, COLOR_SILVER, COLOR_RED, COLOR_BLACK}, // FNC_ST_FIRE {144, 0, 99, false, FNC_ST_SMOKE_OFF, COLOR_DARKGREY, COLOR_GHOST_WHITE, COLOR_SKYBLUE}, // FNC_ST_SMOKE { 44, 74, 99, true, FNC_SMOKE_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_WHITE}, // FNC_UTL_STEAM { 33, 39, 99, true, FNC_TURNLD_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_ACC0 {107, 39, 99, true, FNC_TURNLS_OFF, COLOR_BLACK, COLOR_GREEN, COLOR_LIGHTGREY}, // FNC_ACC1 {181, 39, 99, true, FNC_TURNRD_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_ACC2 {255, 39, 99, true, FNC_TURNRS_OFF, COLOR_BLACK, COLOR_GREEN, COLOR_LIGHTGREY}, // FNC_ACC3 { 33, 129, 99, true, FNC_TURN3L_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_ACC4 {107, 129, 99, true, FNC_TURN3R_OFF, COLOR_BLACK, COLOR_GREEN, COLOR_LIGHTGREY}, // FNC_ACC5 {181, 129, 99, true, FNC_TURN3S_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_ACC6 {255, 129, 99, true, FNC_CROSD_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_ACC7 { 33, 219, 99, true, FNC_CROSS_OFF, COLOR_BLACK, COLOR_GREEN, COLOR_LIGHTGREY}, // FNC_ACC8 {107, 219, 99, true, FNC_SIGRY_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_ACC9 {181, 219, 99, true, FNC_SIGGW_OFF, COLOR_BLACK, COLOR_GREEN, COLOR_LIGHTGREY}, // FNC_ACC10 {255, 219, 3, true, FNC_SIGRY_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_LIGHTGREY}, // FNC_ACC11 { 33, 309, 4, true, FNC_SIGGW_OFF, COLOR_BLACK, COLOR_WHITE, COLOR_LIGHTGREY}, // FNC_ACC12 {107, 309, 99, true, FNC_SEMR_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_ACC13 {181, 309, 99, true, FNC_SEMG_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_ACC14 {255, 309, 99, true, FNC_SEMY_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_ACC15 { 29, 119, 99, true, FNC_BLANK_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_ASPECT0 { 79, 119, 99, true, FNC_BLANK_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_ASPECT1 {129, 119, 99, true, FNC_BLANK_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_ASPECT2 {179, 119, 99, true, FNC_BLANK_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_ASPECT3 {104, 150, 99, true, FNC_BLANK_OFF, COLOR_BLACK, COLOR_YELLOW, COLOR_LIGHTGREY}, // FNC_ACC_TYPE { 20, 84, 99, true, FNC_NO_ICON_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_EDIT_ASPECT0 { 20, 124, 99, true, FNC_NO_ICON_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_EDIT_ASPECT1 { 20, 164, 99, true, FNC_NO_ICON_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_EDIT_ASPECT2 { 20, 204, 99, true, FNC_NO_ICON_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_EDIT_ASPECT3 { 85, 420, 99, true, FNC_ACC_OFF, COLOR_BLACK, COLOR_RED, COLOR_BACKGROUND}, // FNC_ACC_PANEL {134, 8, 99, true, FNC_KEYPAD_OFF, COLOR_BLACK, COLOR_CYAN, COLOR_WHITE}, // FNC_SEL_KEYPAD {144, 352, 99, false, FNC_POWER_OFF, COLOR_RED, COLOR_RED, COLOR_GHOST_WHITE}, // FNC_SCAN_RESET { 10, 150, 99, true, FNC_STAR_OFF, COLOR_ORANGE, COLOR_YELLOW, COLOR_BLUE}, // FNC_STA_STARS {144, 234, 99, true, FNC_NEXT_OFF, COLOR_ORANGE, COLOR_WHITE, COLOR_BLUE - 0x0010}, // FNC_STA_DIR { 20, 384, 1, true, FNC_TURNLD_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_STA_ACC0 { 76, 384, 2, true, FNC_TURNLD_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_STA_ACC1 {132, 384, 3, true, FNC_TURNLD_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_STA_ACC2 {188, 384, 4, true, FNC_TURNLD_OFF, COLOR_BLACK, COLOR_RED, COLOR_LIGHTGREY}, // FNC_STA_ACC3 { 25, 210, 99, true, FNC_STAR_OFF, COLOR_ORANGE, COLOR_YELLOW, COLOR_BLUE - 0x000D}, // FNC_STA_STARC { 30, 129, 99, true, FNC_STAR_OFF, COLOR_ORANGE, COLOR_YELLOW, COLOR_WHITE}, // FNC_STA_STAR1 { 42, 161, 99, true, FNC_STAR_OFF, COLOR_ORANGE, COLOR_YELLOW, COLOR_WHITE}, // FNC_STA_STAR2 {270, 15, 99, false, FNC_RAYO_OFF, COLOR_DARKGREY, COLOR_YELLOW, COLOR_BLUE}, // FNC_STA_RAYO }; //////////////////////////////////////////////////////////// // ***** ICON ***** //////////////////////////////////////////////////////////// enum iconObj {ICON_PACO, ICON_SDCARD, ICON_NO_SD, ICON_WIFI, ICON_NO_WIFI, ICON_WIFI_SSID, ICON_WIFI_CLOSE, ICON_WIFI_CFG, ICON_WIFI_OK, ICON_PWD_OK, ICON_PWD_CNCL, ICON_PROT_OK, ICON_CAL_OK, ICON_MENU, ICON_FNEXT, ICON_FWD, ICON_REV, ICON_POWER, ICON_WARNING, ICON_WARNING_ON, ICON_BLIGHT, ICON_SET_CLOCK, ICON_CLOCK_OK, ICON_CLOCK_CNCL, ICON_INFO, ICON_LOK_EDIT, ICON_SEL_LOK,/* ICON_KEYB,*/ ICON_LAST_UP, ICON_NUM_UP, ICON_NUM_DWN, ICON_NAME_UP, ICON_NAME_DWN, ICON_EDIT_SAVE, ICON_EDIT_DEL, ICON_EDIT_CNCL, ICON_FNC_OK, ICON_FNC_CNCL, ICON_PREV_IMAGE, ICON_NEXT_IMAGE, ICON_INIT_LOCO, ICON_MENU_DRIVE, ICON_MENU_ACC, ICON_MENU_CV, ICON_MENU_CFG, ICON_MENU_UTILS, ICON_CFG_OK, ICON_CFG_CNCL, ICON_CFG_SCR, ICON_CFG_SPD, ICON_CFG_WIFI, ICON_CFG_FCLK, ICON_CFG_LOCK, ICON_CFG_ABOUT, ICON_CFG_EXIT, ICON_CFG_TOUCH, ICON_SCR_OK, ICON_SCR_CNCL, ICON_SPD_OK, ICON_STOP, ICON_ABOUT_PACO, ICON_LOCK, ICON_OPT_OK, ICON_ESTOP, ICON_SPEEDO_LOK, ICON_SPEEDO_CNCL, ICON_SPEEDO_RADAR, ICON_SPEEDO_CV, ICON_CV_CNCL, ICON_WAIT, ICON_WAIT_CV, ICON_ADDR, ICON_ADDR_CNCL, ICON_MANOMETER, ICON_STEAM_CNCL, ICON_STEAM_EDIT, ICON_UTL_SPEED, ICON_UTL_EXIT, ICON_SURE_OK, ICON_SURE_CNCL, ICON_FIND_LNCV, ICON_ACC_CNCL, ICON_ACC_EDIT, ICON_TYPE_OK, ICON_TYPE_CNCL, ICON_KEYB_ACC, ICON_PLUS_ONE, ICON_UTL_SCAN, ICON_UTL_STA, ICON_STA_CLOCK, ICON_STA_STATION, ICON_STA_EDIT, ICON_STA_CNCL, ICON_STA_TARGET, ICON_STA_TRAIN, ICON_STA_PIN, ICON_STA_TIME, ICON_STA_COUNT, ICON_STA_STOP, ICON_STA_TIMEOUT, ICON_STA_OK, MAX_ICON_OBJ }; typedef struct { // icon data uint16_t x; uint16_t y; uint16_t w; uint16_t h; uint16_t color; const uint8_t *bitmap; // img2cpp: Arduino Code output. Draw Mode set to Horizontal - 1 bit per pixel. Invert image colors } wIconObj; wIconObj iconData[MAX_ICON_OBJ] = { {225, 65, 44, 64, COLOR_BLACK, cara_paco44x64}, // ICON_PACO { 20, 68, 16, 16, COLOR_BLACK, sdcard}, // ICON_SDCARD { 28, 76, 16, 16, COLOR_RED, cancel}, // ICON_NO_SD { 65, 64, 32, 24, COLOR_BLACK, wifi}, // ICON_WIFI { 85, 76, 16, 16, COLOR_RED, cancel}, // ICON_NO_WIFI { 50, 92, 32, 24, COLOR_BLACK, wifi}, // ICON_WIFI_SSID {242, 95, 16, 16, COLOR_RED, cancel}, // ICON_WIFI_CLOSE {104, 10, 32, 24, COLOR_BLACK, wifi}, // ICON_WIFI_CFG { 37, 284, 16, 16, COLOR_GREENYELLOW, ok}, // ICON_WIFI_OK {117, 294, 16, 16, COLOR_GREENYELLOW, ok}, // ICON_PWD_OK {197, 294, 16, 16, COLOR_RED, cancel}, // ICON_PWD_CNCL {187, 274, 16, 16, COLOR_GREENYELLOW, ok}, // ICON_PROT_OK {152, 232, 16, 16, COLOR_GREENYELLOW, ok}, // ICON_CAL_OK {272, 11, 32, 32, COLOR_BLACK, menu}, // ICON_MENU {223, 424, 32, 24, COLOR_BLACK, fncnxt}, // ICON_FNEXT {194, 160, 16, 16, COLOR_NAVY, arrowR}, // ICON_FWD {110, 160, 16, 16, COLOR_DARKGREY, arrowL}, // ICON_REV { 13, 11, 32, 32, COLOR_DARKGREY, power}, // ICON_POWER { 25, 144, 32, 32, COLOR_BLACK, warning_off}, // ICON_WARNING { 25, 144, 32, 32, COLOR_YELLOW, warning_on}, // ICON_WARNING_ON { 30, 90, 24, 24, COLOR_BLACK, brillo}, // ICON_BLIGHT { 25, 130, 24, 24, COLOR_BLACK, Clock}, // ICON_SET_CLOCK { 42, 224, 16, 16, COLOR_GREENYELLOW, ok}, // ICON_CLOCK_OK (+17,+4) { 97, 224, 16, 16, COLOR_RED, cancel}, // ICON_CLOCK_CNCL { 25, 144, 32, 32, COLOR_NAVY, info}, // ICON_INFO {148, 424, 24, 24, COLOR_BLACK, wrench}, // ICON_LOK_EDIT { 42, 8, 32, 32, COLOR_WHITE, sel_lok}, // ICON_SEL_LOK //{134, 12, 32, 24, COLOR_BLACK, keyb}, // ICON_KEYB // keyboard //{134, 8, 32, 32, COLOR_WHITE, keypad_off}, // ICON_KEYB // keypad { 10, 12, 16, 24, COLOR_BLACK, last_up}, // ICON_LAST_UP { 10, 12, 16, 24, COLOR_BLACK, num_up}, // ICON_NUM_UP { 10, 12, 16, 24, COLOR_BLACK, num_dwn}, // ICON_NUM_DWN { 10, 12, 16, 24, COLOR_BLACK, name_up}, // ICON_NAME_UP { 10, 12, 16, 24, COLOR_BLACK, name_dwn}, // ICON_NAME_DWN { 37, 294, 16, 16, COLOR_BLACK, sdcard}, // ICON_EDIT_SAVE {117, 294, 16, 16, COLOR_BLACK, trash}, // ICON_EDIT_DEL {197, 294, 16, 16, COLOR_RED, cancel}, // ICON_EDIT_CNCL {117, 294, 16, 16, COLOR_GREENYELLOW, ok}, // ICON_FNC_OK {197, 294, 16, 16, COLOR_RED, cancel}, // ICON_FNC_CNCL { 45, 364, 32, 32, COLOR_BLACK, prevP}, // ICON_PREV_IMAGE {244, 364, 32, 32, COLOR_BLACK, nextP}, // ICON_NEXT_IMAGE {125, 64, 32, 24, COLOR_BLACK, sel_lok}, // ICON_INIT_LOCO { 44, 108, 32, 24, COLOR_WHITE, sel_lok}, // ICON_MENU_DRIVE { 44, 164, 32, 32, COLOR_WHITE, accessory}, // ICON_MENU_ACC { 44, 224, 32, 32, COLOR_WHITE, prgCV}, // ICON_MENU_CV { 44, 284, 32, 32, COLOR_WHITE, configure}, // ICON_MENU_CFG { 48, 348, 24, 24, COLOR_WHITE, wrench}, // ICON_MENU_UTILS { 4, 8, 16, 16, COLOR_GREENYELLOW, ok}, // ICON_CFG_OK { 4, 8, 16, 16, COLOR_RED, cancel}, // ICON_CFG_CNCL { 44, 74, 32, 32, COLOR_RED, screen}, // ICON_CFG_SCR { 44, 138, 32, 24, COLOR_BLACK, sel_lok}, // ICON_CFG_SPD { 44, 198, 32, 24, COLOR_BLACK, wifi}, // ICON_CFG_WIFI { 48, 258, 24, 24, COLOR_BLACK, Clock}, // ICON_CFG_FCLK { 48, 318, 24, 24, COLOR_BLACK, padlock}, // ICON_CFG_LOCK { 44, 374, 32, 32, COLOR_NAVY, info}, // ICON_CFG_ABOUT { 44, 434, 32, 32, COLOR_WHITE, prevP}, // ICON_CFG_EXIT {170, 178, 24, 24, COLOR_BLACK, touchscr}, // ICON_CFG_TOUCH { 47, 182, 16, 16, COLOR_GREENYELLOW, ok}, // ICON_SCR_OK {107, 182, 16, 16, COLOR_RED, cancel}, // ICON_SCR_CNCL {112, 242, 16, 16, COLOR_GREENYELLOW, ok}, // ICON_SPD_OK { 20, 180, 32, 32, COLOR_RED, stop0}, // ICON_STOP {205, 75, 44, 64, COLOR_BLACK, cara_paco44x64}, // ICON_ABOUT_PACO {108, 238, 24, 24, COLOR_BLACK, padlock}, // ICON_LOCK {112, 242, 16, 16, COLOR_GREENYELLOW, ok}, // ICON_OPT_OK { 25, 144, 32, 32, COLOR_RED, stop0}, // ICON_ESTOP { 40, 100, 32, 24, COLOR_MAROON, sel_lok}, // ICON_SPEEDO_LOK {197, 204, 16, 16, COLOR_RED, cancel}, // ICON_SPEEDO_CNCL { 40, 142, 32, 24, COLOR_BLACK, radar}, // ICON_SPEEDO_RADAR { 19, 195, 32, 32, COLOR_BLACK, prgCV}, // ICON_SPEEDO_CV { 37, 291, 16, 16, COLOR_RED, cancel}, // ICON_CV_CNCL { 49, 148, 24, 24, COLOR_BLACK, Clock}, // ICON_WAIT { 45, 144, 32, 32, COLOR_BLACK, prgCV}, // ICON_WAIT_CV { 45, 40, 32, 24, COLOR_BLACK, sel_lok}, // ICON_ADDR {112, 291, 16, 16, COLOR_RED, cancel}, // ICON_ADDR_CNCL {110, 75, 60, 60, COLOR_BLACK, manometro_bar}, // ICON_MANOMETER {282, 22, 16, 16, COLOR_RED, cancel}, // ICON_STEAM_CNCL {205, 250, 24, 24, COLOR_SILVER, wrench}, // ICON_STEAM_EDIT { 44, 14, 32, 24, COLOR_BLACK, radar}, // ICON_UTL_SPEED { 44, 434, 32, 32, COLOR_BLACK, prevP}, // ICON_UTL_EXIT {102, 169, 16, 16, COLOR_DARKGREEN, ok}, // ICON_SURE_OK {162, 169, 16, 16, COLOR_RED, cancel}, // ICON_SURE_CNCL {184, 29, 32, 32, COLOR_BLACK, search}, // ICON_FIND_LNCV { 42, 407, 16, 16, COLOR_RED, cancel}, // ICON_ACC_CNCL {260, 403, 24, 24, COLOR_BLACK, wrench}, // ICON_ACC_EDIT { 57, 294, 16, 16, COLOR_GREENYELLOW, ok}, // ICON_TYPE_OK {167, 294, 16, 16, COLOR_RED, cancel}, // ICON_TYPE_CNCL {152, 242, 16, 16, COLOR_RED, cancel}, // ICON_KEYB_ACC {192, 13, 32, 24, COLOR_BLACK, plus_one}, // ICON_PLUS_ONE { 44, 138, 32, 24, COLOR_BLACK, wifi}, // ICON_UTL_SCAN { 44, 194, 32, 32, COLOR_BLACK, sel_lok}, // ICON_UTL_STA {160, 154, 24, 24, COLOR_WHITE, gameclock}, // ICON_STA_CLOCK {160, 95, 48, 32, COLOR_GREEN, station}, // ICON_STA_STATION {280, 430, 24, 24, COLOR_WHITE, wrench}, // ICON_STA_EDIT { 52, 434, 16, 16, COLOR_YELLOW, cancel}, // ICON_STA_CNCL { 45, 119, 48, 32, COLOR_SILVER, station}, // ICON_STA_TARGET {140, 119, 48, 32, COLOR_WHITE, train}, // ICON_STA_TRAIN { 53, 89, 32, 32, COLOR_ORANGE, targetpin}, // ICON_STA_PIN {160, 15, 24, 24, COLOR_WHITE, gameclock}, // ICON_STA_TIME { 10, 12, 48, 32, COLOR_GREENYELLOW, station}, // ICON_STA_COUNT {252, 242, 16, 16, COLOR_YELLOW, cancel}, // ICON_STA_STOP {24, 148, 24, 24, COLOR_BLACK, gameclock}, // ICON_STA_TIMEOUT {203, 18, 16, 16, COLOR_YELLOW, ok}, // ICON_STA_OK }; //////////////////////////////////////////////////////////// // ***** BUTTON ***** //////////////////////////////////////////////////////////// enum buttonObj {BUT_CAL_OK, BUT_SSID_CLOSE, BUT_WIFI_OK, BUT_PWD_OK, BUT_PWD_CNCL, BUT_PROT_OK, BUT_OPTIONS, BUT_CLOCK_OK, BUT_CLOCK_CNCL, BUT_EDIT_OK, BUT_EDIT_DEL, BUT_EDIT_CNCL, BUT_EDIT_FUNC, BUT_NAME_OK, BUT_NAME_CNCL, BUT_FNC_OK, BUT_FNC_CNCL, BUT_IMAGE_CNCL, BUT_MENU_I_DRIVE, BUT_MENU_I_ACC, BUT_MENU_I_CV, BUT_MENU_I_CFG, BUT_MENU_I_UTILS, BUT_MENU_T_DRIVE, BUT_MENU_T_ACC, BUT_MENU_T_CV, BUT_MENU_T_CFG, BUT_MENU_T_UTILS, BUT_CFG_I_LANG, BUT_CFG_I_SCR, BUT_CFG_I_SPD, BUT_CFG_I_WIFI, BUT_CFG_I_FCLK, BUT_CFG_I_LOCK, BUT_CFG_I_ABOUT, BUT_CFG_T_LANG, BUT_CFG_T_SCR, BUT_CFG_T_SPD, BUT_CFG_T_WIFI, BUT_CFG_T_FCLK, BUT_CFG_T_LOCK, BUT_CFG_T_ABOUT, BUT_CFG_TOUCH, BUT_SCR_OK, BUT_SCR_CNCL, BUT_SPD_OK, BUT_LOCK, BUT_OPT_OK, BUT_SPEEDO_CNCL, BUT_SPEEDO_CV, BUT_SPEEDO_H0, BUT_SPEEDO_N, BUT_SPEEDO_TT, BUT_SPEEDO_Z, BUT_SPEEDO_0, BUT_CV_ADDR, BUT_CV_SPD_L, BUT_CV_SPD_M, BUT_CV_SPD_H, BUT_CV_ACC, BUT_CV_DEC, BUT_CV_CFG, BUT_CV_MAN, BUT_CV_READ, BUT_CV_CNCL, BUT_CV_LNCV, BUT_CV_0, BUT_CV_1, BUT_CV_2, BUT_CV_3, BUT_CV_4, BUT_CV_5, BUT_CV_6, BUT_CV_7, BUT_ADDR_CNCL, BUT_UTL_I_SPEEDO, BUT_UTL_I_STEAM, BUT_UTL_I_SCAN, BUT_UTL_I_STA, BUT_UTL_T_SPEEDO, BUT_UTL_T_STEAM, BUT_UTL_T_SCAN, BUT_UTL_T_STA, BUT_STEAM_CNCL, BUT_SURE_OK, BUT_SURE_CNCL, BUT_LNCV_FIND, BUT_LNCV_CNCL, BUT_ACC_0, BUT_ACC_1, BUT_ACC_2, BUT_ACC_3, BUT_ACC_4, BUT_ACC_5, BUT_ACC_6, BUT_ACC_7, BUT_ACC_8, BUT_ACC_9, BUT_ACC_10, BUT_ACC_11, BUT_ACC_12, BUT_ACC_13, BUT_ACC_14, BUT_ACC_15, BUT_ACC_CNCL, BUT_ACC_EDIT, BUT_ACC_RED, BUT_ACC_GREEN, BUT_ACC_ASPECT0, BUT_ACC_ASPECT1, BUT_ACC_ASPECT2, BUT_ACC_ASPECT3, BUT_ACC_OUT0, BUT_ACC_OUT1, BUT_ACC_OUT2, BUT_ACC_OUT3, BUT_ACC_OUT4, BUT_ACC_OUT5, BUT_ACC_OUT6, BUT_ACC_OUT7, BUT_ACC_OUT8, BUT_ACC_OUT9, BUT_ACC_OUT10, BUT_ACC_OUT11, BUT_ACC_OUT12, BUT_ACC_OUT13, BUT_ACC_OUT14, BUT_ACC_OUT15, BUT_TYPE_OK, BUT_TYPE_CNCL, BUT_STA_START, BUT_STA_CNCL, BUT_STA_ACC0, BUT_STA_ACC1, BUT_STA_ACC2, BUT_STA_ACC3, BUT_STA_STOP, BUT_STA_EDIT, BUT_STA_STAM, BUT_STA_STAP, BUT_STA_TURNM, BUT_STA_TURNP, MAX_BUT_OBJ }; typedef struct { // button data uint16_t x; uint16_t y; uint16_t w; uint16_t h; uint16_t border; uint16_t backgnd; uint16_t objType; uint16_t objID; } wButtonObj; wButtonObj buttonData[MAX_BUT_OBJ] = { {140, 225, 40, 30, COLOR_WHITE, COLOR_LIGHTBLACK, OBJ_ICON, ICON_CAL_OK}, // BUT_CAL_OK {230, 90, 40, 24, COLOR_WHITE, COLOR_LIGHTBLACK, OBJ_ICON, ICON_WIFI_CLOSE}, // BUT_SSID_CLOSE { 10, 280, 70, 24, COLOR_WHITE, COLOR_LIGHTBLACK, OBJ_ICON, ICON_WIFI_OK}, // BUT_WIFI_OK {100, 290, 50, 24, COLOR_WHITE, COLOR_LIGHTBLACK, OBJ_ICON, ICON_PWD_OK}, // BUT_PWD_OK {180, 290, 50, 24, COLOR_WHITE, COLOR_LIGHTBLACK, OBJ_ICON, ICON_PWD_CNCL}, // BUT_PWD_CNCL {160, 265, 70, 34, COLOR_AQUA, COLOR_LIGHTBLACK, OBJ_ICON, ICON_PROT_OK}, // BUT_PROT_OK { 10, 265, 120, 34, COLOR_AQUA, COLOR_LIGHTBLACK, OBJ_LABEL, LBL_OPTIONS}, // BUT_OPTIONS { 25, 220, 50, 24, COLOR_WHITE, COLOR_LIGHTBLACK, OBJ_ICON, ICON_CLOCK_OK}, // BUT_CLOCK_OK { 80, 220, 50, 24, COLOR_WHITE, COLOR_LIGHTBLACK, OBJ_ICON, ICON_CLOCK_CNCL}, // BUT_CLOCK_CNCL { 20, 290, 50, 24, COLOR_AQUA, COLOR_CREAM, OBJ_ICON, ICON_EDIT_SAVE}, // BUT_EDIT_OK {100, 290, 50, 24, COLOR_AQUA, COLOR_CREAM, OBJ_ICON, ICON_EDIT_DEL}, // BUT_EDIT_DEL {180, 290, 50, 24, COLOR_AQUA, COLOR_CREAM, OBJ_ICON, ICON_EDIT_CNCL}, // BUT_EDIT_CNCL { 60, 220, 120, 26, COLOR_AQUA, COLOR_CREAM, OBJ_LABEL, LBL_FUNC}, // BUT_EDIT_FUNC {100, 290, 50, 24, COLOR_WHITE, COLOR_LIGHTBLACK, OBJ_ICON, ICON_PWD_OK}, // BUT_NAME_OK {180, 290, 50, 24, COLOR_WHITE, COLOR_LIGHTBLACK, OBJ_ICON, ICON_PWD_CNCL}, // BUT_NAME_CNCL {100, 290, 50, 24, COLOR_WHITE, COLOR_LIGHTBLACK, OBJ_ICON, ICON_FNC_OK}, // BUT_FNC_OK {180, 290, 50, 24, COLOR_WHITE, COLOR_LIGHTBLACK, OBJ_ICON, ICON_FNC_CNCL}, // BUT_FNC_CNCL {230, 90, 40, 24, COLOR_WHITE, COLOR_LIGHTBLACK, OBJ_ICON, ICON_WIFI_CLOSE}, // BUT_IMAGE_CNCL { 41, 101, 39, 39, COLOR_BLACK, COLOR_BLACK, OBJ_ICON, ICON_MENU_DRIVE}, // BUT_MENU_I_DRIVE { 41, 161, 39, 39, COLOR_BLACK, COLOR_BLACK, OBJ_ICON, ICON_MENU_ACC}, // BUT_MENU_I_ACC { 41, 221, 39, 39, COLOR_BLACK, COLOR_BLACK, OBJ_ICON, ICON_MENU_CV}, // BUT_MENU_I_CV { 41, 281, 39, 39, COLOR_BLACK, COLOR_BLACK, OBJ_ICON, ICON_MENU_CFG}, // BUT_MENU_I_CFG { 41, 341, 39, 39, COLOR_BLACK, COLOR_BLACK, OBJ_ICON, ICON_MENU_UTILS}, // BUT_MENU_I_UTILS { 81, 101, 198, 39, COLOR_BLACK, COLOR_BLACK, OBJ_LABEL, LBL_MENU_DRIVE}, // BUT_MENU_T_DRIVE { 81, 161, 198, 39, COLOR_BLACK, COLOR_BLACK, OBJ_LABEL, LBL_MENU_ACC}, // BUT_MENU_T_ACC { 81, 221, 198, 39, COLOR_BLACK, COLOR_BLACK, OBJ_LABEL, LBL_MENU_CV}, // BUT_MENU_T_CV { 81, 281, 198, 39, COLOR_BLACK, COLOR_BLACK, OBJ_LABEL, LBL_MENU_CFG}, // BUT_MENU_T_CFG { 81, 341, 198, 39, COLOR_BLACK, COLOR_BLACK, OBJ_LABEL, LBL_MENU_UTILS}, // BUT_MENU_T_UTILS { 41, 11, 39, 39, COLOR_WHITE, COLOR_WHITE, OBJ_DRAWSTR, DSTR_ENGLISH}, // BUT_CFG_I_LANG { 41, 71, 39, 39, COLOR_WHITE, COLOR_WHITE, OBJ_ICON, ICON_CFG_SCR}, // BUT_CFG_I_SCR { 41, 131, 39, 39, COLOR_WHITE, COLOR_WHITE, OBJ_ICON, ICON_CFG_SPD}, // BUT_CFG_I_SPD { 41, 191, 39, 39, COLOR_WHITE, COLOR_WHITE, OBJ_ICON, ICON_CFG_WIFI}, // BUT_CFG_I_WIFI { 41, 251, 39, 39, COLOR_WHITE, COLOR_WHITE, OBJ_ICON, ICON_CFG_FCLK}, // BUT_CFG_I_FCLK { 41, 311, 39, 39, COLOR_WHITE, COLOR_WHITE, OBJ_ICON, ICON_CFG_LOCK}, // BUT_CFG_I_LOCK { 41, 371, 39, 39, COLOR_WHITE, COLOR_WHITE, OBJ_ICON, ICON_CFG_ABOUT}, // BUT_CFG_I_ABOUT { 81, 11, 198, 39, COLOR_NAVY, COLOR_WHITE, OBJ_LABEL, LBL_CFG_LANG}, // BUT_CFG_T_LANG { 81, 71, 198, 39, COLOR_NAVY, COLOR_WHITE, OBJ_LABEL, LBL_CFG_SCR}, // BUT_CFG_T_SCR { 81, 131, 198, 39, COLOR_NAVY, COLOR_WHITE, OBJ_LABEL, LBL_CFG_SPD}, // BUT_CFG_T_SPD { 81, 191, 198, 39, COLOR_NAVY, COLOR_WHITE, OBJ_LABEL, LBL_CFG_WIFI}, // BUT_CFG_T_WIFI { 81, 251, 198, 39, COLOR_NAVY, COLOR_WHITE, OBJ_LABEL, LBL_CFG_FCLK}, // BUT_CFG_T_FCLK { 81, 311, 198, 39, COLOR_NAVY, COLOR_WHITE, OBJ_LABEL, LBL_CFG_LOCK}, // BUT_CFG_T_LOCK { 81, 371, 198, 39, COLOR_NAVY, COLOR_WHITE, OBJ_LABEL, LBL_CFG_ABOUT}, // BUT_CFG_T_ABOUT {150, 170, 60, 40, COLOR_AQUA, COLOR_CREAM, OBJ_ICON, ICON_CFG_TOUCH}, // BUT_CFG_TOUCH { 30, 170, 50, 40, COLOR_AQUA, COLOR_LIGHTBLACK, OBJ_ICON, ICON_SCR_OK}, // BUT_SCR_OK { 90, 170, 50, 40, COLOR_AQUA, COLOR_LIGHTBLACK, OBJ_ICON, ICON_SCR_CNCL}, // BUT_SCR_CNCL { 95, 230, 50, 40, COLOR_AQUA, COLOR_LIGHTBLACK, OBJ_ICON, ICON_SPD_OK}, // BUT_SPD_OK { 95, 230, 50, 40, COLOR_AQUA, COLOR_CREAM, OBJ_ICON, ICON_LOCK}, // BUT_LOCK { 95, 230, 50, 40, COLOR_AQUA, COLOR_LIGHTBLACK, OBJ_ICON, ICON_OPT_OK}, // BUT_OPT_OK {185, 191, 40, 40, COLOR_AQUA, COLOR_CREAM, OBJ_ICON, ICON_SPEEDO_CNCL},// BUT_SPEEDO_CNCL { 15, 191, 40, 40, COLOR_BLACK, COLOR_WHITE, OBJ_ICON, ICON_SPEEDO_CV}, // BUT_SPEEDO_CV { 10, 80, 60, 30, COLOR_AQUA, COLOR_CREAM, OBJ_LABEL, LBL_SCALE_H0}, // BUT_SPEEDO_H0 { 10, 120, 60, 30, COLOR_AQUA, COLOR_CREAM, OBJ_LABEL, LBL_SCALE_N}, // BUT_SPEEDO_N { 10, 160, 60, 30, COLOR_AQUA, COLOR_CREAM, OBJ_LABEL, LBL_SCALE_TT}, // BUT_SPEEDO_TT { 10, 200, 60, 30, COLOR_AQUA, COLOR_CREAM, OBJ_LABEL, LBL_SCALE_Z}, // BUT_SPEEDO_Z { 10, 240, 60, 30, COLOR_AQUA, COLOR_CREAM, OBJ_LABEL, LBL_SCALE_0}, // BUT_SPEEDO_0 { 41, 11, 238, 39, COLOR_NAVY, COLOR_WHITE, OBJ_LABEL, LBL_CV_ADDR}, // BUT_CV_ADDR { 41, 71, 238, 39, COLOR_NAVY, COLOR_WHITE, OBJ_LABEL, LBL_CV_SPD_L}, // BUT_CV_SPD_L { 41, 131, 238, 39, COLOR_NAVY, COLOR_WHITE, OBJ_LABEL, LBL_CV_SPD_M}, // BUT_CV_SPD_M { 41, 191, 238, 39, COLOR_NAVY, COLOR_WHITE, OBJ_LABEL, LBL_CV_SPD_H}, // BUT_CV_SPD_H { 41, 251, 238, 39, COLOR_NAVY, COLOR_WHITE, OBJ_LABEL, LBL_CV_ACC}, // BUT_CV_ACC { 41, 311, 238, 39, COLOR_NAVY, COLOR_WHITE, OBJ_LABEL, LBL_CV_DEC}, // BUT_CV_DEC { 41, 371, 238, 39, COLOR_NAVY, COLOR_WHITE, OBJ_LABEL, LBL_CV_CFG}, // BUT_CV_CFG { 41, 431, 238, 39, COLOR_NAVY, COLOR_WHITE, OBJ_LABEL, LBL_CV_MAN}, // BUT_CV_MAN { 15, 175, 60, 40, COLOR_WHITE, COLOR_CREAM, OBJ_FNC, FNC_CV_READ}, // BUT_CV_READ { 15, 280, 60, 35, COLOR_WHITE, COLOR_CREAM, OBJ_ICON, ICON_CV_CNCL}, // BUT_CV_CNCL { 15, 230, 60, 35, COLOR_WHITE, COLOR_CREAM, OBJ_LABEL, LBL_LNCV}, // BUT_CV_LNCV {202, 91, 18, 18, COLOR_WHITE, COLOR_BROWN, OBJ_CHAR, CHAR_CV_0}, // BUT_CV_0 {182, 91, 18, 18, COLOR_WHITE, COLOR_BROWN, OBJ_CHAR, CHAR_CV_1}, // BUT_CV_1 {162, 91, 18, 18, COLOR_WHITE, COLOR_BROWN, OBJ_CHAR, CHAR_CV_2}, // BUT_CV_2 {142, 91, 18, 18, COLOR_WHITE, COLOR_BROWN, OBJ_CHAR, CHAR_CV_3}, // BUT_CV_3 {122, 91, 18, 18, COLOR_WHITE, COLOR_BROWN, OBJ_CHAR, CHAR_CV_4}, // BUT_CV_4 {102, 91, 18, 18, COLOR_WHITE, COLOR_BROWN, OBJ_CHAR, CHAR_CV_5}, // BUT_CV_5 { 82, 91, 18, 18, COLOR_WHITE, COLOR_BROWN, OBJ_CHAR, CHAR_CV_6}, // BUT_CV_6 { 62, 91, 18, 18, COLOR_WHITE, COLOR_BROWN, OBJ_CHAR, CHAR_CV_7}, // BUT_CV_7 { 90, 280, 60, 35, COLOR_WHITE, COLOR_CREAM, OBJ_ICON, ICON_ADDR_CNCL}, // BUT_ADDR_CNCL { 41, 11, 39, 39, COLOR_WHITE, COLOR_WHITE, OBJ_ICON, ICON_UTL_SPEED}, // BUT_UTL_I_SPEEDO { 41, 71, 39, 39, COLOR_WHITE, COLOR_WHITE, OBJ_FNC, FNC_UTL_STEAM}, // BUT_UTL_I_STEAM { 41, 131, 39, 39, COLOR_WHITE, COLOR_WHITE, OBJ_ICON, ICON_UTL_SCAN}, // BUT_UTL_I_SCAN { 41, 191, 39, 39, COLOR_WHITE, COLOR_WHITE, OBJ_ICON, ICON_UTL_STA}, // BUT_UTL_I_STA { 81, 11, 198, 39, COLOR_NAVY, COLOR_WHITE, OBJ_LABEL, LBL_UTIL_SPEED}, // BUT_UTL_T_SPEEDO { 81, 71, 198, 39, COLOR_NAVY, COLOR_WHITE, OBJ_LABEL, LBL_UTIL_STEAM}, // BUT_UTL_T_STEAM { 81, 131, 198, 39, COLOR_NAVY, COLOR_WHITE, OBJ_LABEL, LBL_UTIL_SCAN}, // BUT_UTL_T_SCAN { 81, 191, 198, 39, COLOR_NAVY, COLOR_WHITE, OBJ_LABEL, LBL_UTIL_STA}, // BUT_UTL_T_STA {265, 11, 40, 32, COLOR_SKYBLUE, COLOR_SKYBLUE, OBJ_ICON, ICON_STEAM_CNCL}, // BUT_STEAM_CNCL { 85, 165, 50, 24, COLOR_AQUA, COLOR_CREAM, OBJ_ICON, ICON_SURE_OK}, // BUT_SURE_OK {145, 165, 50, 24, COLOR_AQUA, COLOR_CREAM, OBJ_ICON, ICON_SURE_CNCL}, // BUT_SURE_CNCL {180, 25, 40, 40, COLOR_AQUA, COLOR_CREAM, OBJ_ICON, ICON_FIND_LNCV}, // BUT_LNCV_FIND { 15, 280, 60, 35, COLOR_WHITE, COLOR_CREAM, OBJ_ICON, ICON_CV_CNCL}, // BUT_LNCV_CNCL { 24, 30, 50, 50, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ACC0}, // BUT_ACC_0 { 98, 30, 50, 50, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ACC1}, // BUT_ACC_1 {172, 30, 50, 50, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ACC2}, // BUT_ACC_2 {246, 30, 50, 50, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ACC3}, // BUT_ACC_3 { 24, 120, 50, 50, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ACC4}, // BUT_ACC_4 { 98, 120, 50, 50, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ACC5}, // BUT_ACC_5 {172, 120, 50, 50, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ACC6}, // BUT_ACC_6 {246, 120, 50, 50, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ACC7}, // BUT_ACC_7 { 24, 210, 50, 50, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ACC8}, // BUT_ACC_8 { 98, 210, 50, 50, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ACC9}, // BUT_ACC_9 {172, 210, 50, 50, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ACC10}, // BUT_ACC_10 {246, 210, 50, 50, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ACC11}, // BUT_ACC_11 { 24, 300, 50, 50, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ACC12}, // BUT_ACC_12 { 98, 300, 50, 50, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ACC13}, // BUT_ACC_13 {172, 300, 50, 50, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ACC14}, // BUT_ACC_14 {246, 300, 50, 50, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ACC15}, // BUT_ACC_15 { 24, 390, 50, 50, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_ICON, ICON_ACC_CNCL}, // BUT_ACC_CNCL {246, 390, 50, 50, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_ICON, ICON_ACC_EDIT}, // BUT_ACC_EDIT {160, 35, 50, 40, COLOR_WHITE, COLOR_RED, OBJ_UNDEF, OBJ_UNDEF}, // BUT_ACC_RED { 20, 35, 50, 40, COLOR_WHITE, COLOR_GREEN, OBJ_UNDEF, OBJ_UNDEF}, // BUT_ACC_GREEN { 25, 115, 40, 40, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ASPECT0}, // BUT_ACC_ASPECT0 { 75, 115, 40, 40, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ASPECT1}, // BUT_ACC_ASPECT1 {125, 115, 40, 40, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ASPECT2}, // BUT_ACC_ASPECT2 {175, 115, 40, 40, COLOR_AQUA, COLOR_LIGHTGREY, OBJ_FNC, FNC_ASPECT3}, // BUT_ACC_ASPECT3 { 80, 88, 24, 24, COLOR_WHITE, COLOR_GREEN, OBJ_UNDEF, OBJ_UNDEF}, // BUT_ACC_OUT0 {116, 88, 24, 24, COLOR_WHITE, COLOR_RED, OBJ_UNDEF, OBJ_UNDEF}, // BUT_ACC_OUT1 {160, 88, 24, 24, COLOR_WHITE, COLOR_GREEN, OBJ_UNDEF, OBJ_UNDEF}, // BUT_ACC_OUT2 {196, 88, 24, 24, COLOR_WHITE, COLOR_RED, OBJ_UNDEF, OBJ_UNDEF}, // BUT_ACC_OUT3 { 80, 128, 24, 24, COLOR_WHITE, COLOR_GREEN, OBJ_UNDEF, OBJ_UNDEF}, // BUT_ACC_OUT4 {116, 128, 24, 24, COLOR_WHITE, COLOR_RED, OBJ_UNDEF, OBJ_UNDEF}, // BUT_ACC_OUT5 {160, 128, 24, 24, COLOR_WHITE, COLOR_GREEN, OBJ_UNDEF, OBJ_UNDEF}, // BUT_ACC_OUT6 {196, 128, 24, 24, COLOR_WHITE, COLOR_RED, OBJ_UNDEF, OBJ_UNDEF}, // BUT_ACC_OUT7 { 80, 168, 24, 24, COLOR_WHITE, COLOR_GREEN, OBJ_UNDEF, OBJ_UNDEF}, // BUT_ACC_OUT8 {116, 168, 24, 24, COLOR_WHITE, COLOR_RED, OBJ_UNDEF, OBJ_UNDEF}, // BUT_ACC_OUT9 {160, 168, 24, 24, COLOR_WHITE, COLOR_GREEN, OBJ_UNDEF, OBJ_UNDEF}, // BUT_ACC_OUT10 {196, 168, 24, 24, COLOR_WHITE, COLOR_RED, OBJ_UNDEF, OBJ_UNDEF}, // BUT_ACC_OUT11 { 80, 208, 24, 24, COLOR_WHITE, COLOR_GREEN, OBJ_UNDEF, OBJ_UNDEF}, // BUT_ACC_OUT12 {116, 208, 24, 24, COLOR_WHITE, COLOR_RED, OBJ_UNDEF, OBJ_UNDEF}, // BUT_ACC_OUT13 {160, 208, 24, 24, COLOR_WHITE, COLOR_GREEN, OBJ_UNDEF, OBJ_UNDEF}, // BUT_ACC_OUT14 {196, 208, 24, 24, COLOR_WHITE, COLOR_RED, OBJ_UNDEF, OBJ_UNDEF}, // BUT_ACC_OUT15 { 40, 168, 50, 24, COLOR_WHITE, COLOR_LIGHTBLACK, OBJ_ICON, ICON_TYPE_OK}, // BUT_TYPE_OK {150, 168, 50, 24, COLOR_WHITE, COLOR_LIGHTBLACK, OBJ_ICON, ICON_TYPE_CNCL}, // BUT_TYPE_CNCL {100, 210, 120, 40, COLOR_WHITE, COLOR_ORANGE, OBJ_LABEL, LBL_STA_START}, // BUT_STA_START { 30, 426, 60, 32, COLOR_WHITE, COLOR_BLUE, OBJ_ICON, ICON_STA_CNCL}, // BUT_STA_CNCL { 16, 370, 40, 60, COLOR_WHITE, COLOR_LIGHTGREY, OBJ_FNC, FNC_STA_ACC0}, // BUT_STA_ACC0 { 72, 370, 40, 60, COLOR_WHITE, COLOR_LIGHTGREY, OBJ_FNC, FNC_STA_ACC1}, // BUT_STA_ACC1 {128, 370, 40, 60, COLOR_WHITE, COLOR_LIGHTGREY, OBJ_FNC, FNC_STA_ACC2}, // BUT_STA_ACC2 {184, 370, 40, 60, COLOR_WHITE, COLOR_LIGHTGREY, OBJ_FNC, FNC_STA_ACC3}, // BUT_STA_ACC3 {240, 230, 40, 40, COLOR_WHITE, COLOR_BLACK, OBJ_ICON, ICON_STA_STOP}, // BUT_STA_STOP {195, 10, 40, 32, COLOR_WHITE, COLOR_LIGHTGREY, OBJ_ICON, ICON_STA_OK}, // BUT_STA_EDIT {120, 50, 32, 32, COLOR_WHITE, COLOR_BLACK, OBJ_CHAR, CHAR_STA_STAM}, // BUT_STA_STAM {200, 50, 32, 32, COLOR_WHITE, COLOR_BLACK, OBJ_CHAR, CHAR_STA_STAP}, // BUT_STA_STAP {120, 90, 32, 32, COLOR_WHITE, COLOR_BLACK, OBJ_CHAR, CHAR_STA_TURNM}, // BUT_STA_TURNM {200, 90, 32, 32, COLOR_WHITE, COLOR_BLACK, OBJ_CHAR, CHAR_STA_TURNP}, // BUT_STA_TURNP }; //////////////////////////////////////////////////////////// // ***** RADIO BUTTON ***** //////////////////////////////////////////////////////////// enum radioObj {RAD_STOP_MODE, RAD_PROTOCOL, RAD_PROTOCOL_LN, RAD_CSTATION, MAX_RAD_OBJ }; typedef struct { // radio button data uint16_t x; uint16_t y; uint16_t h; uint16_t r; uint16_t num; uint16_t value; uint16_t border; uint16_t backgnd; } wRadioObj; wRadioObj radioData[MAX_RAD_OBJ] = { { 50, 165, 30, 10, 2, 0, COLOR_BLUE, COLOR_LIGHTGREY}, // RAD_STOP_MODE { 10, 40, 35, 10, 4, 0, COLOR_BLUE, COLOR_LIGHTGREY}, // RAD_PROTOCOL { 50, 180, 35, 10, 2, 0, COLOR_BLUE, COLOR_LIGHTGREY}, // RAD_PROTOCOL_LN { 20, 110, 35, 10, 3, 0, COLOR_BLUE, COLOR_LIGHTGREY}, // RAD_CSTATION }; //////////////////////////////////////////////////////////// // ***** PROGRESS BAR ***** //////////////////////////////////////////////////////////// enum barObj {BAR_INIT, BAR_BLIGHT, BAR_WAIT, BAR_JOHNSON, BAR_WATER, BAR_TENDER, BAR_BRAKE, MAX_BAR_OBJ }; typedef struct { // Progress bar data uint16_t x; uint16_t y; uint16_t w; uint16_t h; uint16_t r; uint16_t colorOn; uint16_t colorOff; uint16_t border; uint16_t backgnd; uint16_t min; uint16_t max; uint16_t value; } wBarObj; wBarObj barData[MAX_BAR_OBJ] = { { 60, 150, 200, 20, 0, COLOR_DARKCYAN, COLOR_CYAN, COLOR_NAVY, COLOR_WHITE, 0, 100, 0}, // BAR_INIT { 80, 95, 128, 12, 10, COLOR_NAVY, COLOR_WHITE, COLOR_AQUA, COLOR_WHITE, USER_MIN_BL, 255, 0}, // BAR_BLIGHT { 85, 154, 100, 12, 0, COLOR_DARKCYAN, COLOR_CYAN, COLOR_NAVY, COLOR_WHITE, 0, 100, 0}, // BAR_WAIT {270, 240, 10, 130, 10, COLOR_DARKGREY, COLOR_LIGHTGREY, COLOR_RED, COLOR_BLACK, 0, 6, 3}, // BAR_JOHNSON { 50, 175, 12, 60, 0, COLOR_BLUE, COLOR_LIGHTGREY, COLOR_WHITE, COLOR_BLACK, 0, 50, 40}, // BAR_WATER { 15, 305, 10, 50, 0, COLOR_BLUE, COLOR_LIGHTGREY, COLOR_WHITE, COLOR_BLACK, 0, 500, 400}, // BAR_TENDER {255, 165, 50, 8, 8, COLOR_DARKGREY, COLOR_LIGHTGREY, COLOR_RED, COLOR_BLACK, 0, 4, 3}, // BAR_BRAKE }; //////////////////////////////////////////////////////////// // ***** LOCO PICTURE ***** //////////////////////////////////////////////////////////// #define LPIC_WIDTH 190 #define LPIC_HEIGHT 40 enum locoPic {SYS_NO_LOK, SYS_ELOK, SYS_LOCO_2, SYS_LOCO_3, SYS_LOCO_4, SYS_LOCO_5, SYS_LOCO_6, SYS_LOCO_7, SYS_LOCO_8, SYS_LOCO_9, MAX_SYS_LPIC}; enum locoPicObj {LPIC_MAIN, LPIC_LOK_EDIT, LPIC_SEL_IMG1, LPIC_SEL_IMG2, LPIC_SEL_IMG3, LPIC_SEL_IMG4, LPIC_SEL_IMG5, LPIC_SEL_IMG6, LPIC_SPEEDO, LPIC_STEAM, MAX_LPIC_OBJ }; const unsigned char* sysLocoPic[] = { sysNoLoco, sysLocoPic0, sysLocoPic1, sysLocoPic2, sysLocoPic3, sysLocoPic4, sysLocoPic5, sysLocoPic6, sysLocoPic7, sysLocoPic8 }; typedef struct { // Loco picture data (190x40 pixel) uint16_t x; uint16_t y; uint16_t id; } wLpicObj; wLpicObj lpicData[MAX_LPIC_OBJ] = { { 65, 52, SYS_NO_LOK}, // LPIC_MAIN { 25, 80, SYS_NO_LOK}, // LPIC_LOK_EDIT { 65, 120, SYS_NO_LOK}, // LPIC_SEL_IMG1 { 65, 160, SYS_NO_LOK}, // LPIC_SEL_IMG2 { 65, 200, SYS_NO_LOK}, // LPIC_SEL_IMG3 { 65, 240, SYS_NO_LOK}, // LPIC_SEL_IMG4 { 65, 280, SYS_NO_LOK}, // LPIC_SEL_IMG5 { 65, 320, SYS_NO_LOK}, // LPIC_SEL_IMG6 { 25, 16, SYS_NO_LOK}, // LPIC_SPEEDO { 32, 0, SYS_LOCO_4}, // LPIC_STEAM }; //////////////////////////////////////////////////////////// // ***** GAUGE ***** //////////////////////////////////////////////////////////// enum gaugeObj {GAUGE_SPEED, GAUGE_SPEEDO, GAUGE_STATION, MAX_GAUGE_OBJ }; typedef struct { // Gauge data uint16_t x; uint16_t y; uint16_t r; // Speed gauge has Radius = 0 uint16_t color; uint16_t backgnd; uint16_t value; // 0..255 } wGaugeObj; wGaugeObj gaugeData[MAX_GAUGE_OBJ] = { { 160, 290, 0, COLOR_BLACK, COLOR_DARKGREY, 0}, // GAUGE_SPEED { 120, 220, 40, COLOR_BLUE, COLOR_CYAN, 128}, // GAUGE_SPEEDO { 160, 250, 46, COLOR_ORANGE, COLOR_CYAN, 128}, // GAUGE_STATION }; //////////////////////////////////////////////////////////// // ***** TEXTBOX ***** //////////////////////////////////////////////////////////// #define NAME_LNG 16 // loco names length #define ADDR_LNG 4 // loco addr length #define SSID_LNG 24 #define PWD_LNG 32 #define IP_LNG 3 #define PORT_LNG 5 #define PANEL_LNG 12 #define ACC_LNG 6 char ssidName[SSID_LNG + 1]; char ssidName1[SSID_LNG + 1]; char ssidName2[SSID_LNG + 1]; char ssidName3[SSID_LNG + 1]; char ssidName4[SSID_LNG + 1]; char ssidName5[SSID_LNG + 1]; char ssidName6[SSID_LNG + 1]; char keybIP1Buf[IP_LNG + 1]; // IP keyboard char keybIP2Buf[IP_LNG + 1]; char keybIP3Buf[IP_LNG + 1]; char keybIP4Buf[IP_LNG + 1]; char keybPwdHideBuf[NAME_LNG + 1]; char keybPortBuf[PORT_LNG + 1]; char keybPwdBuf[PWD_LNG + 1]; char keybProtoBuf[PWD_LNG + 1]; char locoName[NAME_LNG + 1]; char locoAddr[ADDR_LNG + 1]; char clockBuf[NAME_LNG + 1]; char keybHourBuf[3]; char keybMinBuf[3]; char keybRateBuf[4]; char locoEditName[NAME_LNG + 1]; char locoEditAddr[ADDR_LNG + 1]; char locoEditID[ADDR_LNG + 1]; char locoEditVmax[ADDR_LNG + 1]; char keybNameBuf[NAME_LNG + 1]; char locoEditFunc[ADDR_LNG + 1]; char selLocoAddr1[ADDR_LNG + 1]; char selLocoAddr2[ADDR_LNG + 1]; char selLocoAddr3[ADDR_LNG + 1]; char selLocoAddr4[ADDR_LNG + 1]; char selLocoAddr5[ADDR_LNG + 1]; char selLocoAddr6[ADDR_LNG + 1]; char selLocoName1[NAME_LNG + 1]; char selLocoName2[NAME_LNG + 1]; char selLocoName3[NAME_LNG + 1]; char selLocoName4[NAME_LNG + 1]; char selLocoName5[NAME_LNG + 1]; char selLocoName6[NAME_LNG + 1]; char locoKeybAddr[ADDR_LNG + 1]; char aboutPacoMouseCYD[PWD_LNG + 1]; char aboutIP[PWD_LNG + 1]; char aboutMAC[PWD_LNG + 1]; char spdScaleBuf[NAME_LNG + 1]; char spdSelScaleBuf[NAME_LNG + 1]; char spdSelScaleNumBuf[IP_LNG + 1]; char spdLengthBuf[NAME_LNG + 1]; char spdSpeedBuf[NAME_LNG + 1]; char speedoKeybLng[PORT_LNG + 1]; char keybCvBuf[ADDR_LNG + 1]; char keybCvValBuf[IP_LNG + 1]; char cvStatusBuf[PWD_LNG + 1]; char keybLncvArtBuf[PORT_LNG + 1]; char keybLncvModBuf[PORT_LNG + 1]; char keybLncvAdrBuf[PORT_LNG + 1]; char keybLncvValBuf[PORT_LNG + 1]; char accNamesBuf[16][ACC_LNG + 1]; char panelNameBuf[PANEL_LNG + 1]; char panelNamesBuf[16][PANEL_LNG + 1]; char accKeybAddr[ADDR_LNG + 1]; char accKeybAddr1[ADDR_LNG + 1]; char accKeybAddr2[ADDR_LNG + 1]; char accKeybName[ACC_LNG + 1]; char accKeybAdrEdit[ADDR_LNG + 1]; char staLevelBuf[ADDR_LNG + 1]; char staStationsBuf[ACC_LNG + 1]; char staStarsBuf[ADDR_LNG + 1]; char staTimeBuf[ACC_LNG + 1]; char staStartTimeBuf[IP_LNG + 1]; char staStatNumBuf[IP_LNG + 1]; char staTurnNumBuf[IP_LNG + 1]; char staTurnout1Buf[ADDR_LNG + 1]; char staTurnout2Buf[ADDR_LNG + 1]; char staTurnout3Buf[ADDR_LNG + 1]; char staTurnout4Buf[ADDR_LNG + 1]; enum textObj {TXT_SSID1, TXT_SSID2, TXT_SSID3, TXT_SSID4, TXT_SSID5, TXT_SSID6, TXT_IP1, TXT_IP2, TXT_IP3, TXT_IP4, TXT_PORT, TXT_SSID, TXT_PWD_HIDE, TXT_PWD, TXT_PROTOCOL, TXT_LOCO_NAME, TXT_LOCO_ADDR, TXT_CLOCK, TXT_HOUR, TXT_MIN, TXT_RATE, TXT_EDIT_ADDR, TXT_EDIT_NAME, TXT_EDIT_IMAGE, TXT_EDIT_VMAX, TXT_NAME, TXT_EDIT_FNC, TXT_KEYB_VMAX, TXT_SEL_ADDR1, TXT_SEL_ADDR2, TXT_SEL_ADDR3, TXT_SEL_ADDR4, TXT_SEL_ADDR5, TXT_SEL_ADDR6, TXT_SEL_NAME1, TXT_SEL_NAME2, TXT_SEL_NAME3, TXT_SEL_NAME4, TXT_SEL_NAME5, TXT_SEL_NAME6, TXT_KEYB_ADDR, TXT_ABOUT, TXT_ABOUT_IP, TXT_ABOUT_MAC, TXT_SPEEDO_SCALE, TXT_SPEEDO_LNG, TXT_SPEEDO_SPD, TXT_EDIT_LNG, TXT_EDIT_SCALE, TXT_NUM_SCALE, TXT_CV, TXT_CV_VAL, TXT_CV_STATUS, TXT_CV_ADDR, TXT_LNCV_ART, TXT_LNCV_MOD, TXT_LNCV_ADR, TXT_LNCV_VAL, TXT_ACC_0, TXT_ACC_1, TXT_ACC_2, TXT_ACC_3, TXT_ACC_4, TXT_ACC_5, TXT_ACC_6, TXT_ACC_7, TXT_ACC_8, TXT_ACC_9, TXT_ACC_10, TXT_ACC_11, TXT_ACC_12, TXT_ACC_13, TXT_ACC_14, TXT_ACC_15, TXT_PANEL, TXT_PANEL0, TXT_PANEL1, TXT_PANEL2, TXT_PANEL3, TXT_PANEL4, TXT_PANEL5, TXT_PANEL6, TXT_PANEL7, TXT_PANEL8, TXT_PANEL9, TXT_PANEL10, TXT_PANEL11, TXT_PANEL12, TXT_PANEL13, TXT_PANEL14, TXT_PANEL15, TXT_ACC_ADDR, TXT_ACC_ADDR1, TXT_ACC_ADDR2, TXT_ACC_NAME, TXT_ACC_EDIT, TXT_STA_LEVEL, TXT_STA_STARS, TXT_STA_STATION, TXT_STA_CLOCK, TXT_STA_TIME, TXT_STA_COUNT, TXT_STA_STARC, TXT_STA_STARTTIME, TXT_STA_STATNUM, TXT_STA_TURNNUM, TXT_STA_TURNOUT1, TXT_STA_TURNOUT2, TXT_STA_TURNOUT3, TXT_STA_TURNOUT4, MAX_TXT_OBJ }; typedef struct { // Textbox data uint16_t x; uint16_t y; uint16_t w; uint16_t h; uint16_t color; uint16_t backgnd; uint16_t border; bool alignCenter; uint16_t maxLength; char *buf; const GFXfont *font; } wTxtObj; wTxtObj txtData[MAX_TXT_OBJ] = { { 41, 130, 238, 40, COLOR_WHITE, COLOR_BLACK, COLOR_WHITE, false, SSID_LNG, ssidName1, FSS9}, // TXT_SSID1 { 41, 170, 238, 40, COLOR_WHITE, COLOR_BLACK, COLOR_WHITE, false, SSID_LNG, ssidName2, FSS9}, // TXT_SSID2 { 41, 210, 238, 40, COLOR_WHITE, COLOR_BLACK, COLOR_WHITE, false, SSID_LNG, ssidName3, FSS9}, // TXT_SSID3 { 41, 250, 238, 40, COLOR_WHITE, COLOR_BLACK, COLOR_WHITE, false, SSID_LNG, ssidName4, FSS9}, // TXT_SSID4 { 41, 290, 238, 40, COLOR_WHITE, COLOR_BLACK, COLOR_WHITE, false, SSID_LNG, ssidName5, FSS9}, // TXT_SSID5 { 41, 330, 238, 40, COLOR_WHITE, COLOR_BLACK, COLOR_WHITE, false, SSID_LNG, ssidName6, FSS9}, // TXT_SSID6 { 55, 130, 40, 24, COLOR_BLACK, COLOR_BACKGROUND, COLOR_WHITE, true, IP_LNG, keybIP1Buf, FSS9}, // TXT_IP1 {100, 130, 40, 24, COLOR_BLACK, COLOR_BACKGROUND, COLOR_WHITE, true, IP_LNG, keybIP2Buf, FSS9}, // TXT_IP2 {145, 130, 40, 24, COLOR_BLACK, COLOR_BACKGROUND, COLOR_WHITE, true, IP_LNG, keybIP3Buf, FSS9}, // TXT_IP3 {190, 130, 40, 24, COLOR_BLACK, COLOR_BACKGROUND, COLOR_WHITE, true, IP_LNG, keybIP4Buf, FSS9}, // TXT_IP4 { 80, 170, 60, 24, COLOR_BLACK, COLOR_BACKGROUND, COLOR_WHITE, true, PORT_LNG, keybPortBuf, FSS9}, // TXT_PORT { 10, 50, 220, 24, COLOR_BLACK, COLOR_BACKGROUND, COLOR_WHITE, false, SSID_LNG, ssidName, FSS9}, // TXT_SSID {140, 90, 90, 24, COLOR_BLACK, COLOR_BACKGROUND, COLOR_WHITE, false, NAME_LNG, keybPwdHideBuf, FSS9}, // TXT_PWD_HIDE { 10, 135, 220, 24, COLOR_BLACK, COLOR_YELLOW, COLOR_WHITE, true, PWD_LNG, keybPwdBuf, FSS9}, // TXT_PWD { 10, 240, 140, 24, COLOR_BLACK, COLOR_BACKGROUND, COLOR_WHITE, false, PWD_LNG, keybProtoBuf, FSS9}, // TXT_PROTOCOL { 80, 102, 160, 24, COLOR_NAVY, COLOR_BACKGROUND, COLOR_BACKGROUND, true, NAME_LNG, locoName, FSS7}, // TXT_LOCO_NAME {130, 156, 60, 24, COLOR_NAVY, COLOR_BACKGROUND, COLOR_BACKGROUND, true, ADDR_LNG, locoAddr, FSSB9}, // TXT_LOCO_ADDR { 80, 11, 160, 31, COLOR_BLACK, COLOR_BACKGROUND, COLOR_BACKGROUND, true, NAME_LNG, clockBuf, FSSB12}, // TXT_CLOCK { 55, 130, 40, 24, COLOR_BLACK, COLOR_BACKGROUND, COLOR_WHITE, true, 2, keybHourBuf, FSS9}, // TXT_HOUR {100, 130, 40, 24, COLOR_BLACK, COLOR_BACKGROUND, COLOR_WHITE, true, 2, keybMinBuf, FSS9}, // TXT_MIN {100, 170, 40, 24, COLOR_BLACK, COLOR_BACKGROUND, COLOR_WHITE, true, 3, keybRateBuf, FSS9}, // TXT_RATE {120, 12, 60, 24, COLOR_BLUE, COLOR_BACKGROUND, COLOR_BACKGROUND, false, ADDR_LNG, locoEditAddr, FSSB9}, // TXT_EDIT_ADDR { 80, 140, 150, 24, COLOR_BLACK, COLOR_WHITE, COLOR_NAVY, false, NAME_LNG, locoEditName, FSS9}, // TXT_EDIT_NAME {120, 52, 60, 24, COLOR_BLUE, COLOR_BACKGROUND, COLOR_BACKGROUND, false, ADDR_LNG, locoEditID, FSSB9}, // TXT_EDIT_IMAGE {125, 180, 50, 24, COLOR_BLACK, COLOR_WHITE, COLOR_NAVY, true, ADDR_LNG, locoEditVmax, FSS9}, // TXT_EDIT_VMAX { 10, 135, 220, 24, COLOR_BLACK, COLOR_YELLOW, COLOR_WHITE, true, NAME_LNG, keybNameBuf, FSS9}, // TXT_NAME { 80, 115, 80, 31, COLOR_NAVY, COLOR_BACKGROUND, COLOR_BACKGROUND, true, ADDR_LNG, locoEditFunc, FSSB12}, // TXT_EDIT_FNC { 75, 40, 80, 31, COLOR_BLACK, COLOR_WHITE, COLOR_NAVY, true, IP_LNG, locoEditVmax, FSSB12}, // TXT_KEYB_VMAX { 1, 50, 60, 40, COLOR_NAVY, COLOR_WHITE, COLOR_LIGHTGREY, true, ADDR_LNG, selLocoAddr1, FSSB12}, // TXT_SEL_ADDR1 { 1, 90, 60, 40, COLOR_NAVY, COLOR_WHITE, COLOR_LIGHTGREY, true, ADDR_LNG, selLocoAddr2, FSSB12}, // TXT_SEL_ADDR2 { 1, 130, 60, 40, COLOR_NAVY, COLOR_WHITE, COLOR_LIGHTGREY, true, ADDR_LNG, selLocoAddr3, FSSB12}, // TXT_SEL_ADDR3 { 1, 170, 60, 40, COLOR_NAVY, COLOR_WHITE, COLOR_LIGHTGREY, true, ADDR_LNG, selLocoAddr4, FSSB12}, // TXT_SEL_ADDR4 { 1, 210, 60, 40, COLOR_NAVY, COLOR_WHITE, COLOR_LIGHTGREY, true, ADDR_LNG, selLocoAddr5, FSSB12}, // TXT_SEL_ADDR5 { 1, 250, 60, 40, COLOR_NAVY, COLOR_WHITE, COLOR_LIGHTGREY, true, ADDR_LNG, selLocoAddr6, FSSB12}, // TXT_SEL_ADDR6 { 61, 50, 178, 40, COLOR_NAVY, COLOR_WHITE, COLOR_LIGHTGREY, false, NAME_LNG, selLocoName1, FSS9}, // TXT_SEL_NAME1 { 61, 90, 178, 40, COLOR_NAVY, COLOR_WHITE, COLOR_LIGHTGREY, false, NAME_LNG, selLocoName2, FSS9}, // TXT_SEL_NAME2 { 61, 130, 178, 40, COLOR_NAVY, COLOR_WHITE, COLOR_LIGHTGREY, false, NAME_LNG, selLocoName3, FSS9}, // TXT_SEL_NAME3 { 61, 170, 178, 40, COLOR_NAVY, COLOR_WHITE, COLOR_LIGHTGREY, false, NAME_LNG, selLocoName4, FSS9}, // TXT_SEL_NAME4 { 61, 210, 178, 40, COLOR_NAVY, COLOR_WHITE, COLOR_LIGHTGREY, false, NAME_LNG, selLocoName5, FSS9}, // TXT_SEL_NAME5 { 61, 250, 178, 40, COLOR_NAVY, COLOR_WHITE, COLOR_LIGHTGREY, false, NAME_LNG, selLocoName6, FSS9}, // TXT_SEL_NAME6 { 75, 40, 80, 31, COLOR_BLACK, COLOR_WHITE, COLOR_NAVY, true, ADDR_LNG, locoKeybAddr, FSSB12}, // TXT_KEYB_ADDR { 70, 90, 120, 31, COLOR_NAVY, COLOR_WHITE, COLOR_WHITE, true, PWD_LNG, aboutPacoMouseCYD, FSSB12}, // TXT_ABOUT { 55, 172, 150, 31, COLOR_WHITE, COLOR_BLUE, COLOR_BLUE, false, PWD_LNG, aboutIP, FSS7}, // TXT_ABOUT_IP { 55, 195, 160, 31, COLOR_WHITE, COLOR_BLUE, COLOR_BLUE, false, PWD_LNG, aboutMAC, FSS7}, // TXT_ABOUT_MAC {115, 67, 100, 30, COLOR_BLACK, COLOR_WHITE, COLOR_BLACK, true, NAME_LNG, spdScaleBuf, FSSB9}, // TXT_SPEEDO_SCALE { 87, 140, 70, 30, COLOR_BLACK, COLOR_WHITE, COLOR_BLACK, true, NAME_LNG, spdLengthBuf, FSSB9}, // TXT_SPEEDO_LNG { 25, 270, 190, 30, COLOR_BLACK, COLOR_WHITE, COLOR_BLACK, true, NAME_LNG, spdSpeedBuf, FSSB9}, // TXT_SPEEDO_SPD { 75, 40, 80, 31, COLOR_BLACK, COLOR_WHITE, COLOR_NAVY, true, PORT_LNG, speedoKeybLng, FSSB12}, // TXT_EDIT_LNG { 55, 20, 70, 30, COLOR_YELLOW, COLOR_BACKGROUND, COLOR_BACKGROUND, true, NAME_LNG, spdSelScaleBuf, FSSB12}, // TXT_EDIT_SCALE {130, 20, 60, 30, COLOR_BLACK, COLOR_WHITE, COLOR_BLACK, true, IP_LNG, spdSelScaleNumBuf, FSSB12}, // TXT_NUM_SCALE { 50, 45, 70, 30, COLOR_BLACK, COLOR_WHITE, COLOR_BLACK, true, ADDR_LNG, keybCvBuf, FSSB12}, // TXT_CV {160, 45, 60, 30, COLOR_BLACK, COLOR_WHITE, COLOR_BLACK, true, IP_LNG, keybCvValBuf, FSSB12}, // TXT_CV_VAL { 1, 5, 238, 30, COLOR_BLACK, COLOR_BACKGROUND, COLOR_BACKGROUND, true, PWD_LNG, cvStatusBuf, FSSB12}, // TXT_CV_STATUS {100, 40, 80, 30, COLOR_BLUE, COLOR_WHITE, COLOR_BLACK, true, ADDR_LNG, locoEditAddr, FSSB12}, // TXT_CV_ADDR { 85, 8, 70, 30, COLOR_BLACK, COLOR_WHITE, COLOR_BLACK, true, PORT_LNG, keybLncvArtBuf, FSSB12}, // TXT_LNCV_ART { 85, 48, 70, 30, COLOR_BLACK, COLOR_WHITE, COLOR_BLACK, true, PORT_LNG, keybLncvModBuf, FSSB12}, // TXT_LNCV_MOD { 75, 88, 70, 30, COLOR_BLACK, COLOR_WHITE, COLOR_BLACK, true, PORT_LNG, keybLncvAdrBuf, FSSB12}, // TXT_LNCV_ADR {160, 88, 70, 30, COLOR_BLACK, COLOR_WHITE, COLOR_BLACK, true, PORT_LNG, keybLncvValBuf, FSSB12}, // TXT_LNCV_VAL { 24, 80, 50, 20, COLOR_BLACK, COLOR_WHITE, COLOR_WHITE, true, ACC_LNG, accNamesBuf[0], FSSB6}, // TXT_ACC_0 { 98, 80, 50, 20, COLOR_BLACK, COLOR_WHITE, COLOR_WHITE, true, ACC_LNG, accNamesBuf[1], FSSB6}, // TXT_ACC_1 {172, 80, 50, 20, COLOR_BLACK, COLOR_WHITE, COLOR_WHITE, true, ACC_LNG, accNamesBuf[2], FSSB6}, // TXT_ACC_2 {246, 80, 50, 20, COLOR_BLACK, COLOR_WHITE, COLOR_WHITE, true, ACC_LNG, accNamesBuf[3], FSSB6}, // TXT_ACC_3 { 24, 170, 50, 20, COLOR_BLACK, COLOR_WHITE, COLOR_WHITE, true, ACC_LNG, accNamesBuf[4], FSSB6}, // TXT_ACC_4 { 98, 170, 50, 20, COLOR_BLACK, COLOR_WHITE, COLOR_WHITE, true, ACC_LNG, accNamesBuf[5], FSSB6}, // TXT_ACC_5 {172, 170, 50, 20, COLOR_BLACK, COLOR_WHITE, COLOR_WHITE, true, ACC_LNG, accNamesBuf[6], FSSB6}, // TXT_ACC_6 {246, 170, 50, 20, COLOR_BLACK, COLOR_WHITE, COLOR_WHITE, true, ACC_LNG, accNamesBuf[7], FSSB6}, // TXT_ACC_7 { 24, 260, 50, 20, COLOR_BLACK, COLOR_WHITE, COLOR_WHITE, true, ACC_LNG, accNamesBuf[8], FSSB6}, // TXT_ACC_8 { 98, 260, 50, 20, COLOR_BLACK, COLOR_WHITE, COLOR_WHITE, true, ACC_LNG, accNamesBuf[9], FSSB6}, // TXT_ACC_9 {172, 260, 50, 20, COLOR_BLACK, COLOR_WHITE, COLOR_WHITE, true, ACC_LNG, accNamesBuf[10], FSSB6}, // TXT_ACC_10 {246, 260, 50, 20, COLOR_BLACK, COLOR_WHITE, COLOR_WHITE, true, ACC_LNG, accNamesBuf[11], FSSB6}, // TXT_ACC_11 { 24, 350, 50, 20, COLOR_BLACK, COLOR_WHITE, COLOR_WHITE, true, ACC_LNG, accNamesBuf[12], FSSB6}, // TXT_ACC_12 { 98, 350, 50, 20, COLOR_BLACK, COLOR_WHITE, COLOR_WHITE, true, ACC_LNG, accNamesBuf[13], FSSB6}, // TXT_ACC_13 {172, 350, 50, 20, COLOR_BLACK, COLOR_WHITE, COLOR_WHITE, true, ACC_LNG, accNamesBuf[14], FSSB6}, // TXT_ACC_14 {246, 350, 50, 20, COLOR_BLACK, COLOR_WHITE, COLOR_WHITE, true, ACC_LNG, accNamesBuf[15], FSSB6}, // TXT_ACC_15 {105, 400, 110, 32, COLOR_NAVY, COLOR_CREAM, COLOR_BACKGROUND, true, PANEL_LNG, panelNameBuf, FSS7}, // TXT_PANEL { 5, 4, 110, 32, COLOR_NAVY, COLOR_CREAM, COLOR_BACKGROUND, true, PANEL_LNG, panelNamesBuf[0], FSS7}, // TXT_PANEL0 {125, 4, 110, 32, COLOR_NAVY, COLOR_CREAM, COLOR_BACKGROUND, true, PANEL_LNG, panelNamesBuf[1], FSS7}, // TXT_PANEL1 { 5, 44, 110, 32, COLOR_NAVY, COLOR_CREAM, COLOR_BACKGROUND, true, PANEL_LNG, panelNamesBuf[2], FSS7}, // TXT_PANEL2 {125, 44, 110, 32, COLOR_NAVY, COLOR_CREAM, COLOR_BACKGROUND, true, PANEL_LNG, panelNamesBuf[3], FSS7}, // TXT_PANEL3 { 5, 84, 110, 32, COLOR_NAVY, COLOR_CREAM, COLOR_BACKGROUND, true, PANEL_LNG, panelNamesBuf[4], FSS7}, // TXT_PANEL4 {125, 84, 110, 32, COLOR_NAVY, COLOR_CREAM, COLOR_BACKGROUND, true, PANEL_LNG, panelNamesBuf[5], FSS7}, // TXT_PANEL5 { 5, 124, 110, 32, COLOR_NAVY, COLOR_CREAM, COLOR_BACKGROUND, true, PANEL_LNG, panelNamesBuf[6], FSS7}, // TXT_PANEL6 {125, 124, 110, 32, COLOR_NAVY, COLOR_CREAM, COLOR_BACKGROUND, true, PANEL_LNG, panelNamesBuf[7], FSS7}, // TXT_PANEL7 { 5, 164, 110, 32, COLOR_NAVY, COLOR_CREAM, COLOR_BACKGROUND, true, PANEL_LNG, panelNamesBuf[8], FSS7}, // TXT_PANEL8 {125, 164, 110, 32, COLOR_NAVY, COLOR_CREAM, COLOR_BACKGROUND, true, PANEL_LNG, panelNamesBuf[9], FSS7}, // TXT_PANEL9 { 5, 204, 110, 32, COLOR_NAVY, COLOR_CREAM, COLOR_BACKGROUND, true, PANEL_LNG, panelNamesBuf[10], FSS7}, // TXT_PANEL10 {125, 204, 110, 32, COLOR_NAVY, COLOR_CREAM, COLOR_BACKGROUND, true, PANEL_LNG, panelNamesBuf[11], FSS7}, // TXT_PANEL11 { 5, 244, 110, 32, COLOR_NAVY, COLOR_CREAM, COLOR_BACKGROUND, true, PANEL_LNG, panelNamesBuf[12], FSS7}, // TXT_PANEL12 {125, 244, 110, 32, COLOR_NAVY, COLOR_CREAM, COLOR_BACKGROUND, true, PANEL_LNG, panelNamesBuf[13], FSS7}, // TXT_PANEL13 { 5, 284, 110, 32, COLOR_NAVY, COLOR_CREAM, COLOR_BACKGROUND, true, PANEL_LNG, panelNamesBuf[14], FSS7}, // TXT_PANEL14 {125, 284, 110, 32, COLOR_NAVY, COLOR_CREAM, COLOR_BACKGROUND, true, PANEL_LNG, panelNamesBuf[15], FSS7}, // TXT_PANEL15 { 75, 40, 80, 31, COLOR_BLACK, COLOR_WHITE, COLOR_NAVY, true, ADDR_LNG, accKeybAddr, FSSB12}, // TXT_ACC_ADDR { 75, 45, 70, 30, COLOR_BLACK, COLOR_WHITE, COLOR_NAVY, true, ADDR_LNG, accKeybAddr1, FSSB9}, // TXT_ACC_ADDR1 {155, 45, 70, 30, COLOR_BLACK, COLOR_WHITE, COLOR_NAVY, true, ADDR_LNG, accKeybAddr2, FSSB9}, // TXT_ACC_ADDR2 { 75, 5, 100, 30, COLOR_BLACK, COLOR_WHITE, COLOR_NAVY, true, ACC_LNG, accKeybName, FSSB9}, // TXT_ACC_NAME { 75, 40, 80, 31, COLOR_BLACK, COLOR_WHITE, COLOR_NAVY, true, ADDR_LNG, accKeybAdrEdit, FSSB12}, // TXT_ACC_EDIT { 65, 90, 40, 31, COLOR_WHITE, COLOR_BLUE, COLOR_BLUE, false, ADDR_LNG, staLevelBuf, FSS9}, // TXT_STA_LEVEL { 50, 150, 40, 31, COLOR_WHITE, COLOR_BLUE, COLOR_BLUE, false, ADDR_LNG, staStarsBuf, FSS9}, // TXT_STA_STARS {218, 90, 60, 31, COLOR_WHITE, COLOR_BLUE, COLOR_BLUE, false, ACC_LNG, staStationsBuf, FSS9}, // TXT_STA_STATION {190, 150, 60, 31, COLOR_WHITE, COLOR_BLUE, COLOR_BLUE, false, ACC_LNG, staTimeBuf, FSS9}, // TXT_STA_CLOCK {190, 12, 55, 27, COLOR_WHITE, COLOR_BLUE, COLOR_BLUE, false, ACC_LNG, staTimeBuf, FSS9}, // TXT_STA_TIME { 60, 12, 55, 27, COLOR_WHITE, COLOR_BLUE, COLOR_BLUE, false, ACC_LNG, staStationsBuf, FSS9}, // TXT_STA_COUNT { 22, 245, 40, 26, COLOR_WHITE, COLOR_BLUE - 0x0011, COLOR_BLUE - 0x0011, true, ADDR_LNG, staStarsBuf, FSS9}, // TXT_STA_STARC {120, 10, 60, 32, COLOR_WHITE, COLOR_BLUE, COLOR_WHITE, true, IP_LNG, staStartTimeBuf, FSS9}, // TXT_STA_STARTTIME {160, 50, 32, 32, COLOR_WHITE, COLOR_BLUE, COLOR_WHITE, true, IP_LNG, staStatNumBuf, FSS9}, // TXT_STA_STATNUM {160, 90, 32, 32, COLOR_WHITE, COLOR_BLUE, COLOR_WHITE, true, IP_LNG, staTurnNumBuf, FSS9}, // TXT_STA_TURNNUM { 10, 165, 60, 32, COLOR_WHITE, COLOR_BLUE, COLOR_WHITE, true, ADDR_LNG, staTurnout1Buf, FSS9}, // TXT_STA_TURNOUT1 { 10, 200, 60, 32, COLOR_WHITE, COLOR_BLUE, COLOR_WHITE, true, ADDR_LNG, staTurnout2Buf, FSS9}, // TXT_STA_TURNOUT2 { 10, 235, 60, 32, COLOR_WHITE, COLOR_BLUE, COLOR_WHITE, true, ADDR_LNG, staTurnout3Buf, FSS9}, // TXT_STA_TURNOUT3 { 10, 270, 60, 32, COLOR_WHITE, COLOR_BLUE, COLOR_WHITE, true, ADDR_LNG, staTurnout4Buf, FSS9}, // TXT_STA_TURNOUT4 }; //////////////////////////////////////////////////////////// // ***** SWITCH ***** //////////////////////////////////////////////////////////// enum switchObj { SW_SHUNTING, SW_ROTATE, SW_LOCK_LOK, SW_LOCK_ACC, SW_LOCK_PRG, SW_OPT_TT_OFFSET, SW_OPT_ADR, SW_OPT_DISCOVER, SW_POM, SW_STA_OR1, SW_STA_OR2, SW_STA_OR3, SW_STA_OR4, SW_STA_INV1, SW_STA_INV2, SW_STA_INV3, SW_STA_INV4, MAX_SWITCH_OBJ }; typedef struct { // Switch data uint16_t x; uint16_t y; uint16_t h; uint16_t colorOn; uint16_t colorOff; uint16_t colorKnob; bool state; } wSwitchObj; wSwitchObj switchData[MAX_SWITCH_OBJ] = { { 35, 130, 21, COLOR_BLUE, COLOR_DARKCYAN, COLOR_WHITE, false}, // SW_SHUNTING { 30, 130, 21, COLOR_BLUE, COLOR_DARKCYAN, COLOR_WHITE, false}, // SW_ROTATE { 25, 130, 21, COLOR_BLUE, COLOR_DARKCYAN, COLOR_WHITE, false}, // SW_LOCK_LOK { 25, 165, 21, COLOR_BLUE, COLOR_DARKCYAN, COLOR_WHITE, false}, // SW_LOCK_ACC { 25, 200, 21, COLOR_BLUE, COLOR_DARKCYAN, COLOR_WHITE, false}, // SW_LOCK_PRG { 15, 50, 21, COLOR_BLUE, COLOR_DARKCYAN, COLOR_WHITE, false}, // SW_OPT_TT_OFFSET { 15, 155, 21, COLOR_BLUE, COLOR_DARKCYAN, COLOR_WHITE, false}, // SW_OPT_ADR { 15, 85, 21, COLOR_BLUE, COLOR_DARKCYAN, COLOR_WHITE, false}, // SW_OPT_DISCOVER { 15, 125, 21, COLOR_RED, COLOR_DARKCYAN, COLOR_WHITE, false}, // SW_POM { 95, 170, 21, COLOR_CYAN, COLOR_DARKCYAN, COLOR_WHITE, false}, // SW_STA_OR1 { 95, 205, 21, COLOR_CYAN, COLOR_DARKCYAN, COLOR_WHITE, false}, // SW_STA_OR2 { 95, 240, 21, COLOR_CYAN, COLOR_DARKCYAN, COLOR_WHITE, false}, // SW_STA_OR3 { 95, 275, 21, COLOR_CYAN, COLOR_DARKCYAN, COLOR_WHITE, false}, // SW_STA_OR4 {170, 170, 21, COLOR_CYAN, COLOR_DARKCYAN, COLOR_WHITE, false}, // SW_STA_INV1 {170, 205, 21, COLOR_CYAN, COLOR_DARKCYAN, COLOR_WHITE, false}, // SW_STA_INV2 {170, 240, 21, COLOR_CYAN, COLOR_DARKCYAN, COLOR_WHITE, false}, // SW_STA_INV3 {170, 275, 21, COLOR_CYAN, COLOR_DARKCYAN, COLOR_WHITE, false}, // SW_STA_INV4 }; //////////////////////////////////////////////////////////// // ***** KEYBOARD ***** //////////////////////////////////////////////////////////// #define KEYB_WIDTH 240 #define KEYB_HEIGHT 120 #define KEYPAD_WIDTH 80 #define KEYPAD_HEIGHT 120 #define KEYPAD_BIG_WIDTH 150 #define KEYPAD_BIG_HEIGHT 190 #define CHR_BKSPC 8 #define CHR_ENTER '\n' #define CHR_REDRAW '\r' const char KeybAlphaCaps[3][12] = { { 0, 12, 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P'}, {10, 11, 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L'}, {30, 9, 'Z', 'X', 'C', 'V', 'B', 'N', 'M'}, }; const char KeybAlpha[3][12] = { { 0, 12, 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'}, {10, 11, 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'}, {30, 9, 'z', 'x', 'c', 'v', 'b', 'n', 'm'}, }; const char KeybNum[3][12] = { { 0, 12, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'}, { 0, 12, '-', '/', ':', ';', '(', ')', '$', '&', '@', '"'}, { 50, 7, '.', ',', '?', '!', '\''} }; const char KeybSym[3][12] = { { 0, 12, '[', ']', '{', '}', '#', '%', '^', '*', '+', '='}, {40, 8, '_', '\\', '|', '~', '<', '>'}, {50, 7, '.', ',', '?', '!', '\''} }; const char KeybKeypad[3][12] = { { 0, 5, '7', '8', '9'}, { 0, 5, '4', '5', '6'}, { 0, 5, '1', '2', '3'} }; enum keybType {KEYB_ALPHA, KEYB_CAPS, KEYB_NUM, KEYB_SYM, KEYB_KEYPAD, KEYB_KEYPAD_BIG, KEYB_KEYPAD_OPT}; enum keybObj {KEYB_IP, KEYB_PWD, KEYB_CLOCK, KEYB_NAME, KEYB_VMAX, KEYB_ADDR, KEYB_LNG, KEYB_SCALE, KEYB_CV, KEYB_CV_ADDR, KEYB_LNCV, KEYB_ACC, KEYB_ACC_ADDR, KEYB_STA, MAX_KEYB_OBJ }; typedef struct { // Keyboard data uint16_t x; uint16_t y; uint16_t type; uint16_t idTextbox; } wKeybObj; wKeybObj keybData[MAX_KEYB_OBJ] = { {150, 170, KEYB_KEYPAD, TXT_IP1}, // KEYB_IP { 0, 165, KEYB_ALPHA, TXT_PWD}, // KEYB_PWD {142, 130, KEYB_KEYPAD, TXT_HOUR}, // KEYB_CLOCK { 0, 165, KEYB_CAPS, TXT_NAME}, // KEYB_NAME { 40, 80, KEYB_KEYPAD_BIG, TXT_KEYB_VMAX}, // KEYB_VMAX { 40, 80, KEYB_KEYPAD_BIG, TXT_KEYB_ADDR}, // KEYB_ADDR { 40, 80, KEYB_KEYPAD_BIG, TXT_EDIT_LNG}, // KEYB_LNG { 80, 80, KEYB_KEYPAD_BIG, TXT_NUM_SCALE}, // KEYB_SCALE { 80, 125, KEYB_KEYPAD_BIG, TXT_CV_VAL}, // KEYB_CV { 40, 80, KEYB_KEYPAD_BIG, TXT_CV_ADDR}, // KEYB_CV_ADDR { 85, 125, KEYB_KEYPAD_BIG, TXT_LNCV_VAL}, // KEYB_LNCV { 40, 80, KEYB_KEYPAD_OPT, TXT_ACC_ADDR}, // KEYB_ACC { 40, 80, KEYB_KEYPAD_BIG, TXT_ACC_EDIT}, // KEYB_ACC_ADDR { 85, 80, KEYB_KEYPAD_BIG, TXT_STA_STARTTIME}, // KEYB_STA };