Files
Maison/PacoMouseCYD/Platformio/Arduino.old/window.ino
2026-02-13 08:49:53 +01:00

886 lines
35 KiB
C++

/* PacoMouseCYD throttle -- F. Cañada 2025-2026 -- https://usuaris.tinet.cat/fmco/
*/
////////////////////////////////////////////////////////////
// ***** WINDOW OBJECTS *****
////////////////////////////////////////////////////////////
void openWindow(uint16_t id) {
uint16_t n;
char buf[MAX_LABEL_LNG];
switch (id) {
case WIN_LOGO:
createObject(OBJ_WIN, WIN_LOGO);
createObject(OBJ_DRAWSTR, DSTR_INIT);
createObject(OBJ_LABEL, LBL_PACO_TXT);
posObjStack1 = createObject(OBJ_LABEL, LBL_INIT);
createObject(OBJ_ICON, ICON_PACO);
createObject(OBJ_BAR, BAR_INIT);
drawWindow(WIN_LOGO);
break;
case WIN_CALIBRATE:
createObject(OBJ_WIN, WIN_CALIBRATE);
posObjStack2 = createObject(OBJ_LABEL, LBL_CAL);
posObjStack1 = createObject(OBJ_LABEL, LBL_PRESS);
newEvent(OBJ_WIN, WIN_CALIBRATE, EVNT_DRAW);
break;
case WIN_SSID:
createObject(OBJ_WIN, WIN_SSID);
createObject(OBJ_ICON, ICON_WIFI_SSID);
createObject(OBJ_BUTTON, BUT_SSID_CLOSE);
posObjStack1 = createObject(OBJ_LABEL, LBL_SCAN);
drawWindow(WIN_SSID);
scanWiFi();
objStack[posObjStack1].objID = LBL_SSID_SCAN;
createObject(OBJ_TXT, TXT_SSID1);
createObject(OBJ_TXT, TXT_SSID2);
createObject(OBJ_TXT, TXT_SSID3);
createObject(OBJ_TXT, TXT_SSID4);
createObject(OBJ_TXT, TXT_SSID5);
createObject(OBJ_TXT, TXT_SSID6);
scanWiFiFill();
newEvent(OBJ_WIN, WIN_SSID, EVNT_DRAW);
break;
case WIN_WIFI:
snprintf(ssidName, SSID_LNG, "%s", wifiSetting.ssid);
snprintf(keybPwdHideBuf, 9, "********");
snprintf(keybIP1Buf, 4, "%d", wifiSetting.CS_IP[0]);
snprintf(keybIP2Buf, 4, "%d", wifiSetting.CS_IP[1]);
snprintf(keybIP3Buf, 4, "%d", wifiSetting.CS_IP[2]);
snprintf(keybIP4Buf, 4, "%d", wifiSetting.CS_IP[3]);
setProtocolData();
createObject(OBJ_WIN, WIN_WIFI);
createObject(OBJ_ICON, ICON_WIFI_CFG);
createObject(OBJ_LABEL, LBL_SSID);
createObject(OBJ_TXT, TXT_SSID);
createObject(OBJ_LABEL, LBL_PWD_HIDE);
createObject(OBJ_TXT, TXT_PWD_HIDE);
createObject(OBJ_LABEL, LBL_IP);
createObject(OBJ_TXT, TXT_IP1);
createObject(OBJ_TXT, TXT_IP2);
createObject(OBJ_TXT, TXT_IP3);
createObject(OBJ_TXT, TXT_IP4);
createObject(OBJ_LABEL, LBL_PORT);
createObject(OBJ_TXT, TXT_PORT);
createObject(OBJ_KEYBOARD, KEYB_IP);
createObject(OBJ_LABEL, LBL_PROTOCOL);
createObject(OBJ_TXT, TXT_PROTOCOL);
createObject(OBJ_BUTTON, BUT_WIFI_OK);
newEvent(OBJ_WIN, WIN_WIFI, EVNT_DRAW);
break;
case WIN_WIFI_PWD:
snprintf(keybPwdBuf, PWD_LNG, wifiSetting.password);
createObject(OBJ_WIN, WIN_WIFI_PWD);
createObject(OBJ_TXT, TXT_PWD);
createObject(OBJ_KEYBOARD, KEYB_PWD);
createObject(OBJ_BUTTON, BUT_PWD_OK);
createObject(OBJ_BUTTON, BUT_PWD_CNCL);
newEvent(OBJ_WIN, WIN_WIFI_PWD, EVNT_DRAW);
break;
case WIN_PROTOCOL:
radioData[RAD_PROTOCOL].value = wifiSetting.protocol - CLIENT_Z21;
if (wifiSetting.protocol == CLIENT_LNET)
radioData[RAD_PROTOCOL_LN].value = (wifiSetting.serverType) ? 0 : 1;
else
radioData[RAD_PROTOCOL_LN].value = radioData[RAD_PROTOCOL_LN].num;
createObject(OBJ_WIN, WIN_PROTOCOL);
createObject(OBJ_RADIO, RAD_PROTOCOL);
createObject(OBJ_RADIO, RAD_PROTOCOL_LN);
createObject(OBJ_LABEL, LBL_SEL_PROT);
createObject(OBJ_LABEL, LBL_SEL_Z21);
createObject(OBJ_LABEL, LBL_SEL_XNET);
createObject(OBJ_LABEL, LBL_SEL_ECOS);
createObject(OBJ_LABEL, LBL_SEL_LNET);
createObject(OBJ_LABEL, LBL_SEL_LBSERVER);
createObject(OBJ_LABEL, LBL_SEL_BINARY);
createObject(OBJ_BUTTON, BUT_PROT_OK);
createObject(OBJ_BUTTON, BUT_OPTIONS);
newEvent(OBJ_WIN, WIN_PROTOCOL, EVNT_DRAW);
break;
case WIN_THROTTLE:
iconData[ICON_LOK_EDIT].bitmap = (wifiSetting.protocol == CLIENT_ECOS) ? info24 : wrench;
createObject(OBJ_WIN, WIN_THROTTLE);
createObject(OBJ_ICON, ICON_MENU);
createObject(OBJ_ICON, ICON_POWER);
createObject(OBJ_ICON, ICON_FNEXT);
createObject(OBJ_ICON, ICON_LOK_EDIT);
createObject(OBJ_FNC, FNC_ACC_PANEL);
//createObject(OBJ_ICON, ICON_FWD);
//createObject(OBJ_ICON, ICON_REV);
createObject(OBJ_TXT, TXT_CLOCK);
createObject(OBJ_TXT, TXT_LOCO_NAME);
createObject(OBJ_TXT, TXT_LOCO_ADDR);
createObject(OBJ_LPIC, LPIC_MAIN);
createObject(OBJ_GAUGE, GAUGE_SPEED);
createObject(OBJ_LABEL, LBL_KMH);
createObject(OBJ_FNC, FNC_FX0);
createObject(OBJ_FNC, FNC_FX1);
createObject(OBJ_FNC, FNC_FX2);
createObject(OBJ_FNC, FNC_FX3);
createObject(OBJ_FNC, FNC_FX4);
createObject(OBJ_FNC, FNC_FX5);
createObject(OBJ_FNC, FNC_FX6);
createObject(OBJ_FNC, FNC_FX7);
createObject(OBJ_FNC, FNC_FX8);
createObject(OBJ_FNC, FNC_FX9);
newEvent(OBJ_WIN, WIN_THROTTLE, EVNT_DRAW);
break;
case WIN_CONFIG:
buttonData[BUT_CFG_I_LANG].objID = DSTR_ENGLISH + currLanguage;
lastLanguage = currLanguage;
createObject(OBJ_WIN, WIN_CONFIG);
createObject(OBJ_DRAWSTR, DSTR_CFG_MENU);
createObject(OBJ_BUTTON, BUT_CFG_I_LANG);
createObject(OBJ_BUTTON, BUT_CFG_T_LANG);
createObject(OBJ_BUTTON, BUT_CFG_I_SCR);
createObject(OBJ_BUTTON, BUT_CFG_T_SCR);
createObject(OBJ_BUTTON, BUT_CFG_I_SPD);
createObject(OBJ_BUTTON, BUT_CFG_T_SPD);
createObject(OBJ_BUTTON, BUT_CFG_I_WIFI);
createObject(OBJ_BUTTON, BUT_CFG_T_WIFI);
createObject(OBJ_BUTTON, BUT_CFG_I_FCLK);
createObject(OBJ_BUTTON, BUT_CFG_T_FCLK);
createObject(OBJ_BUTTON, BUT_CFG_I_LOCK);
createObject(OBJ_BUTTON, BUT_CFG_T_LOCK);
createObject(OBJ_BUTTON, BUT_CFG_I_ABOUT);
createObject(OBJ_BUTTON, BUT_CFG_T_ABOUT);
createObject(OBJ_ICON, ICON_CFG_EXIT);
newEvent(OBJ_WIN, WIN_CONFIG, EVNT_DRAW);
break;
case WIN_SCREEN:
barData[BAR_BLIGHT].value = backlight;
switchData[SW_ROTATE].state = (locationUSB == USB_UP);
createObject(OBJ_WIN, WIN_SCREEN);
createObject(OBJ_ICON, ICON_BLIGHT);
createObject(OBJ_BAR, BAR_BLIGHT);
createObject(OBJ_SWITCH, SW_ROTATE);
createObject(OBJ_LABEL, LBL_SCR_ROTATE);
createObject(OBJ_BUTTON, BUT_CFG_TOUCH);
createObject(OBJ_BUTTON, BUT_SCR_OK);
createObject(OBJ_BUTTON, BUT_SCR_CNCL);
newEvent(OBJ_WIN, WIN_SCREEN, EVNT_DRAW);
break;
case WIN_SPEED:
switchData[SW_SHUNTING].state = shuntingMode;
radioData[RAD_STOP_MODE].value = (stopMode > 0) ? 1 : 0;
createObject(OBJ_WIN, WIN_SPEED);
createObject(OBJ_LABEL, LBL_SHUNTING);
createObject(OBJ_SWITCH, SW_SHUNTING);
createObject(OBJ_RADIO, RAD_STOP_MODE);
createObject(OBJ_ICON, ICON_STOP);
createObject(OBJ_LABEL, LBL_STOP_0);
createObject(OBJ_LABEL, LBL_STOP_E);
createObject(OBJ_BUTTON, BUT_SPD_OK);
newEvent(OBJ_WIN, WIN_SPEED, EVNT_DRAW);
break;
case WIN_SET_CLOCK:
snprintf(keybHourBuf, 3, "%d", clockHour);
snprintf(keybMinBuf, 3, "%d", clockMin);
snprintf(keybRateBuf, 4, "%d", clockRate);
showClockData(TXT_HOUR);
createObject(OBJ_WIN, WIN_SET_CLOCK);
createObject(OBJ_DRAWSTR, DSTR_CLOCK);
createObject(OBJ_CHAR, CHAR_CLK_COLON);
createObject(OBJ_ICON, ICON_SET_CLOCK);
createObject(OBJ_TXT, TXT_HOUR);
createObject(OBJ_TXT, TXT_MIN);
createObject(OBJ_TXT, TXT_RATE);
createObject(OBJ_LABEL, LBL_RATE);
createObject(OBJ_KEYBOARD, KEYB_CLOCK);
createObject(OBJ_BUTTON, BUT_CLOCK_OK);
createObject(OBJ_BUTTON, BUT_CLOCK_CNCL);
newEvent(OBJ_WIN, WIN_SET_CLOCK, EVNT_DRAW);
break;
case WIN_LOCK:
switchData[SW_LOCK_LOK].state = (bitRead(lockOptions, LOCK_SEL_LOCO)) ? true : false;
switchData[SW_LOCK_ACC].state = (bitRead(lockOptions, LOCK_TURNOUT)) ? true : false;
switchData[SW_LOCK_PRG].state = (bitRead(lockOptions, LOCK_PROG)) ? true : false;
createObject(OBJ_WIN, WIN_LOCK);
createObject(OBJ_SWITCH, SW_LOCK_LOK);
createObject(OBJ_SWITCH, SW_LOCK_ACC);
createObject(OBJ_SWITCH, SW_LOCK_PRG);
createObject(OBJ_LABEL, LBL_LOCK_LOK);
createObject(OBJ_LABEL, LBL_LOCK_ACC);
createObject(OBJ_LABEL, LBL_LOCK_PRG);
createObject(OBJ_BUTTON, BUT_LOCK);
newEvent(OBJ_WIN, WIN_LOCK, EVNT_DRAW);
break;
case WIN_ABOUT:
snprintf (aboutPacoMouseCYD, PWD_LNG + 1, "v%s.%s%s", VER_H, VER_L, VER_R);
snprintf (aboutIP, PWD_LNG + 1, "IP: %u.%u.%u.%u", WiFi.localIP().operator[](0), WiFi.localIP().operator[](1), WiFi.localIP().operator[](2), WiFi.localIP().operator[](3));
snprintf (aboutMAC, PWD_LNG + 1, "MAC: %s", WiFi.macAddress().c_str());
createObject(OBJ_WIN, WIN_ABOUT);
createObject(OBJ_DRAWSTR, DSTR_ABOUT);
createObject(OBJ_LABEL, LBL_PACO_TXT);
createObject(OBJ_ICON, ICON_ABOUT_PACO);
createObject(OBJ_TXT, TXT_ABOUT);
createObject(OBJ_TXT, TXT_ABOUT_IP);
createObject(OBJ_TXT, TXT_ABOUT_MAC);
createObject(OBJ_LABEL, LBL_PACO_WEB);
newEvent(OBJ_WIN, WIN_ABOUT, EVNT_DRAW);
break;
case WIN_LOK_EDIT:
snprintf (locoEditName, NAME_LNG + 1, "%s", locoData[myLocoData].myName );
sprintf (locoEditAddr, "%d", locoData[myLocoData].myAddr.address);
sprintf (locoEditID, "%d", locoData[myLocoData].myLocoID);
sprintf (locoEditVmax, "%d", locoData[myLocoData].myVmax);
lpicData[LPIC_LOK_EDIT].id = locoData[myLocoData].myLocoID;
for (n = 0; n < 29; n++)
fncData[FNC_F0 + n].idIcon = locoData[myLocoData].myFuncIcon[n];
createObject(OBJ_WIN, WIN_LOK_EDIT);
createObject(OBJ_LABEL, LBL_ADDR);
createObject(OBJ_LABEL, LBL_IMAGE);
createObject(OBJ_LABEL, LBL_NAME);
createObject(OBJ_LABEL, LBL_VMAX);
createObject(OBJ_LPIC, LPIC_LOK_EDIT);
createObject(OBJ_TXT, TXT_EDIT_ADDR);
createObject(OBJ_TXT, TXT_EDIT_NAME);
createObject(OBJ_TXT, TXT_EDIT_IMAGE);
createObject(OBJ_TXT, TXT_EDIT_VMAX);
createObject(OBJ_BUTTON, BUT_EDIT_FUNC);
createObject(OBJ_BUTTON, BUT_EDIT_CNCL);
if (wifiSetting.protocol != CLIENT_ECOS) {
createObject(OBJ_BUTTON, BUT_EDIT_OK);
if ((locoData[myLocoData].mySpeed < 2) && (countLocoInStack() > 1)) // stopped and remaining locos in stack
createObject(OBJ_BUTTON, BUT_EDIT_DEL);
}
newEvent(OBJ_WIN, WIN_LOK_EDIT, EVNT_DRAW);
break;
case WIN_EDIT_NAME:
snprintf(keybNameBuf, NAME_LNG + 1, locoData[myLocoData].myName);
txtData[TXT_NAME].maxLength = NAME_LNG;
createObject(OBJ_WIN, WIN_EDIT_NAME);
createObject(OBJ_TXT, TXT_NAME);
createObject(OBJ_KEYBOARD, KEYB_NAME);
createObject(OBJ_BUTTON, BUT_NAME_OK);
createObject(OBJ_BUTTON, BUT_NAME_CNCL);
newEvent(OBJ_WIN, WIN_EDIT_NAME, EVNT_DRAW);
break;
case WIN_FUNC:
createObject(OBJ_WIN, WIN_FUNC);
for (n = 0; n < 29; n++)
createObject(OBJ_FNC, FNC_F0 + n);
createObject(OBJ_LABEL, LBL_ADDR);
createObject(OBJ_TXT, TXT_EDIT_ADDR);
createObject(OBJ_LABEL, LBL_EDIT_FUNC);
if (wifiSetting.protocol != CLIENT_ECOS)
createObject(OBJ_BUTTON, BUT_FNC_OK);
createObject(OBJ_BUTTON, BUT_FNC_CNCL);
newEvent(OBJ_WIN, WIN_FUNC, EVNT_DRAW);
break;
case WIN_CHG_FUNC:
createObject(OBJ_WIN, WIN_CHG_FUNC);
createObject(OBJ_FNC, FNC_CHG);
createObject(OBJ_TXT, TXT_EDIT_FNC);
newEvent(OBJ_WIN, WIN_CHG_FUNC, EVNT_DRAW);
break;
case WIN_VMAX:
createObject(OBJ_WIN, WIN_VMAX);
createObject(OBJ_TXT, TXT_KEYB_VMAX);
createObject(OBJ_KEYBOARD, KEYB_VMAX);
newEvent(OBJ_WIN, WIN_VMAX, EVNT_DRAW);
break;
case WIN_SEL_LOCO:
createObject(OBJ_WIN, WIN_SEL_LOCO);
createObject(OBJ_DRAWSTR, DSTR_SELLOK);
posObjStack1 = createObject(OBJ_ICON, ICON_LAST_UP);
prepareLocoList();
createObject(OBJ_ICON, ICON_SEL_LOK);
if (wifiSetting.protocol != CLIENT_ECOS)
createObject(OBJ_FNC, FNC_SEL_KEYPAD);
createObject(OBJ_TXT, TXT_SEL_ADDR1);
createObject(OBJ_TXT, TXT_SEL_NAME1);
createObject(OBJ_TXT, TXT_SEL_ADDR2);
createObject(OBJ_TXT, TXT_SEL_NAME2);
createObject(OBJ_TXT, TXT_SEL_ADDR3);
createObject(OBJ_TXT, TXT_SEL_NAME3);
createObject(OBJ_TXT, TXT_SEL_ADDR4);
createObject(OBJ_TXT, TXT_SEL_NAME4);
createObject(OBJ_TXT, TXT_SEL_ADDR5);
createObject(OBJ_TXT, TXT_SEL_NAME5);
createObject(OBJ_TXT, TXT_SEL_ADDR6);
createObject(OBJ_TXT, TXT_SEL_NAME6);
newEvent(OBJ_WIN, WIN_SEL_LOCO, EVNT_DRAW);
break;
case WIN_ENTER_ADDR:
locoKeybAddr[0] = '\0';
createObject(OBJ_WIN, WIN_ENTER_ADDR);
createObject(OBJ_TXT, TXT_KEYB_ADDR);
createObject(OBJ_KEYBOARD, KEYB_ADDR);
newEvent(OBJ_WIN, WIN_ENTER_ADDR, EVNT_DRAW);
break;
case WIN_SEL_IMAGE:
createObject(OBJ_WIN, WIN_SEL_IMAGE);
createObject(OBJ_LABEL, LBL_SEL_IMAGE);
createObject(OBJ_BUTTON, BUT_IMAGE_CNCL);
drawWindow(WIN_SEL_IMAGE);
populateImageList();
createObject(OBJ_LPIC, LPIC_SEL_IMG1);
createObject(OBJ_LPIC, LPIC_SEL_IMG2);
createObject(OBJ_LPIC, LPIC_SEL_IMG3);
createObject(OBJ_LPIC, LPIC_SEL_IMG4);
createObject(OBJ_LPIC, LPIC_SEL_IMG5);
createObject(OBJ_LPIC, LPIC_SEL_IMG6);
createObject(OBJ_ICON, ICON_PREV_IMAGE);
createObject(OBJ_ICON, ICON_NEXT_IMAGE);
newEvent(OBJ_WIN, WIN_SEL_IMAGE, EVNT_DRAW);
break;
case WIN_MENU:
createObject(OBJ_WIN, WIN_MENU);
createObject(OBJ_BUTTON, BUT_MENU_I_DRIVE);
createObject(OBJ_BUTTON, BUT_MENU_T_DRIVE);
createObject(OBJ_BUTTON, BUT_MENU_I_ACC);
createObject(OBJ_BUTTON, BUT_MENU_T_ACC);
createObject(OBJ_BUTTON, BUT_MENU_I_CV);
createObject(OBJ_BUTTON, BUT_MENU_T_CV);
createObject(OBJ_BUTTON, BUT_MENU_I_CFG);
createObject(OBJ_BUTTON, BUT_MENU_T_CFG);
createObject(OBJ_BUTTON, BUT_MENU_I_UTILS);
createObject(OBJ_BUTTON, BUT_MENU_T_UTILS);
createObject(OBJ_DRAWSTR, DSTR_MENU);
newEvent(OBJ_WIN, WIN_MENU, EVNT_DRAW);
break;
case WIN_OPTIONS:
setOptionsData();
createObject(OBJ_WIN, WIN_OPTIONS);
switch (wifiSetting.protocol) {
case CLIENT_Z21:
//createObject(OBJ_SWITCH, SW_OPT_TT_OFFSET);
//createObject(OBJ_LABEL, LBL_OPT_TT_OFFSET);
createObject(OBJ_SWITCH, SW_OPT_ADR);
createObject(OBJ_LABEL, LBL_OPT_ADR);
break;
case CLIENT_XNET:
//createObject(OBJ_SWITCH, SW_OPT_TT_OFFSET);
//createObject(OBJ_LABEL, LBL_OPT_TT_OFFSET);
break;
case CLIENT_LNET:
switchData[SW_OPT_DISCOVER].state = (autoIdentifyCS > 0) ? true : false;
createObject(OBJ_SWITCH, SW_OPT_DISCOVER);
createObject(OBJ_LABEL, LBL_OPT_DISCOVER);
createObject(OBJ_RADIO, RAD_CSTATION);
createObject(OBJ_LABEL, LBL_OPT_IB2);
createObject(OBJ_LABEL, LBL_OPT_UHLI);
createObject(OBJ_LABEL, LBL_OPT_DIG);
break;
case CLIENT_ECOS:
break;
}
createObject(OBJ_BUTTON, BUT_OPT_OK);
newEvent(OBJ_WIN, WIN_OPTIONS, EVNT_DRAW);
break;
case WIN_SPEEDO:
speedoSpeed = 0;
speedoPhase = SPD_WAIT;
setSpeedoPhase(SPD_WAIT);
setTextSpeedo();
snprintf(spdLengthBuf, NAME_LNG + 1, "%d", speedoLength);
snprintf(spdSpeedBuf, NAME_LNG + 1, "%d km/h", speedoSpeed);
iconData[ICON_SPEEDO_LOK].x = 40 + (speedoPhase * 32);
drawStrData[DSTR_SPEEDO_BLANK].x = 40 + (speedoPhase * 32);
lpicData[LPIC_SPEEDO].id = locoData[myLocoData].myLocoID;
createObject(OBJ_WIN, WIN_SPEEDO);
createObject(OBJ_LPIC, LPIC_SPEEDO);
createObject(OBJ_LABEL, LBL_SCALE);
createObject(OBJ_LABEL, LBL_MM);
createObject(OBJ_GAUGE, GAUGE_SPEEDO);
createObject(OBJ_FNC, FNC_SPEEDO_DIR);
createObject(OBJ_DRAWSTR, DSTR_SPEEDO_BLANK);
createObject(OBJ_DRAWSTR, DSTR_SPEEDO_TRK);
createObject(OBJ_ICON, ICON_SPEEDO_LOK);
createObject(OBJ_ICON, ICON_SPEEDO_RADAR);
createObject(OBJ_BUTTON, BUT_SPEEDO_CNCL);
createObject(OBJ_BUTTON, BUT_SPEEDO_CV);
createObject(OBJ_TXT, TXT_SPEEDO_SCALE);
createObject(OBJ_TXT, TXT_SPEEDO_LNG);
createObject(OBJ_TXT, TXT_SPEEDO_SPD);
newEvent(OBJ_WIN, WIN_SPEEDO, EVNT_DRAW);
break;
case WIN_SPEEDO_LNG:
snprintf(speedoKeybLng, PORT_LNG + 1, "%d", speedoLength);
createObject(OBJ_WIN, WIN_SPEEDO_LNG);
createObject(OBJ_TXT, TXT_EDIT_LNG);
createObject(OBJ_KEYBOARD, KEYB_LNG);
newEvent(OBJ_WIN, WIN_SPEEDO_LNG, EVNT_DRAW);
break;
case WIN_SPEEDO_SCALE:
setTextSpeedo();
createObject(OBJ_WIN, WIN_SPEEDO_SCALE);
createObject(OBJ_TXT, TXT_EDIT_SCALE);
createObject(OBJ_TXT, TXT_NUM_SCALE);
createObject(OBJ_KEYBOARD, KEYB_SCALE);
createObject(OBJ_BUTTON, BUT_SPEEDO_H0);
createObject(OBJ_BUTTON, BUT_SPEEDO_N);
createObject(OBJ_BUTTON, BUT_SPEEDO_TT);
createObject(OBJ_BUTTON, BUT_SPEEDO_Z);
createObject(OBJ_BUTTON, BUT_SPEEDO_0);
newEvent(OBJ_WIN, WIN_SPEEDO_SCALE, EVNT_DRAW);
break;
case WIN_READ_CV:
createObject(OBJ_WIN, WIN_READ_CV);
createObject(OBJ_DRAWSTR, DSTR_CFG_MENU);
createObject(OBJ_BUTTON, BUT_CV_ADDR);
createObject(OBJ_BUTTON, BUT_CV_SPD_L);
createObject(OBJ_BUTTON, BUT_CV_SPD_M);
createObject(OBJ_BUTTON, BUT_CV_SPD_H);
createObject(OBJ_BUTTON, BUT_CV_ACC);
createObject(OBJ_BUTTON, BUT_CV_DEC);
createObject(OBJ_BUTTON, BUT_CV_CFG);
createObject(OBJ_BUTTON, BUT_CV_MAN);
newEvent(OBJ_WIN, WIN_READ_CV, EVNT_DRAW);
break;
case WIN_PROG_CV:
//buttonData[BUT_CV_LNCV].backgnd = (wifiSetting.protocol == CLIENT_LNET) ? COLOR_CREAM : COLOR_LIGHTBLACK;
setFieldsCV();
setBitsCV();
setStatusCV();
switchData[SW_POM].state = modeProg;
createObject(OBJ_WIN, WIN_PROG_CV);
createObject(OBJ_LABEL, LBL_CV);
createObject(OBJ_LABEL, LBL_POM);
createObject(OBJ_LABEL, LBL_BITS);
createObject(OBJ_SWITCH, SW_POM);
createObject(OBJ_BUTTON, BUT_CV_READ);
createObject(OBJ_BUTTON, BUT_CV_CNCL);
if (wifiSetting.protocol == CLIENT_LNET)
createObject(OBJ_BUTTON, BUT_CV_LNCV);
createObject(OBJ_KEYBOARD, KEYB_CV);
createObject(OBJ_CHAR, CHAR_CV_EQUAL);
createObject(OBJ_BUTTON, BUT_CV_0);
createObject(OBJ_BUTTON, BUT_CV_1);
createObject(OBJ_BUTTON, BUT_CV_2);
createObject(OBJ_BUTTON, BUT_CV_3);
createObject(OBJ_BUTTON, BUT_CV_4);
createObject(OBJ_BUTTON, BUT_CV_5);
createObject(OBJ_BUTTON, BUT_CV_6);
createObject(OBJ_BUTTON, BUT_CV_7);
createObject(OBJ_TXT, TXT_CV);
createObject(OBJ_TXT, TXT_CV_VAL);
createObject(OBJ_TXT, TXT_CV_STATUS);
newEvent(OBJ_WIN, WIN_PROG_CV, EVNT_DRAW);
break;
case WIN_PROG_ADDR:
getLabelTxt(LBL_CV_ADDR, buf);
snprintf(cvStatusBuf, PWD_LNG + 1, "%s", buf);
createObject(OBJ_WIN, WIN_PROG_ADDR);
createObject(OBJ_TXT, TXT_CV_STATUS);
createObject(OBJ_ICON, ICON_ADDR);
createObject(OBJ_TXT, TXT_CV_ADDR);
createObject(OBJ_KEYBOARD, KEYB_CV_ADDR);
createObject(OBJ_BUTTON, BUT_ADDR_CNCL);
newEvent(OBJ_WIN, WIN_PROG_ADDR, EVNT_DRAW);
break;
case WIN_PROG_LNCV:
setFieldsLNCV();
createObject(OBJ_WIN, WIN_PROG_LNCV);
createObject(OBJ_KEYBOARD, KEYB_LNCV);
createObject(OBJ_LABEL, LBL_LNCV_ART);
createObject(OBJ_LABEL, LBL_LNCV_MOD);
createObject(OBJ_LABEL, LBL_LNCV_NUM);
createObject(OBJ_BUTTON, BUT_LNCV_FIND);
createObject(OBJ_BUTTON, BUT_LNCV_CNCL);
createObject(OBJ_TXT, TXT_LNCV_ART);
createObject(OBJ_TXT, TXT_LNCV_MOD);
createObject(OBJ_TXT, TXT_LNCV_ADR);
createObject(OBJ_TXT, TXT_LNCV_VAL);
createObject(OBJ_CHAR, CHAR_LNCV_EQUAL);
newEvent(OBJ_WIN, WIN_PROG_LNCV, EVNT_DRAW);
break;
case WIN_STEAM:
fncData[FNC_ST_SMOKE].state = false;
createObject(OBJ_WIN, WIN_STEAM);
createObject(OBJ_DRAWSTR, DSTR_STEAM);
createObject(OBJ_ICON, ICON_POWER);
createObject(OBJ_ICON, ICON_MANOMETER);
createObject(OBJ_ICON, ICON_STEAM_EDIT);
createObject(OBJ_BUTTON, BUT_STEAM_CNCL);
createObject(OBJ_FNC, FNC_ST_WATER);
createObject(OBJ_FNC, FNC_ST_TENDER);
createObject(OBJ_FNC, FNC_ST_WHISTLE);
createObject(OBJ_FNC, FNC_ST_FIRE);
createObject(OBJ_FNC, FNC_ST_SMOKE);
createObject(OBJ_BAR, BAR_JOHNSON);
createObject(OBJ_BAR, BAR_WATER);
createObject(OBJ_BAR, BAR_TENDER);
createObject(OBJ_BAR, BAR_BRAKE);
newEvent(OBJ_WIN, WIN_STEAM, EVNT_DRAW);
break;
case WIN_UTIL:
createObject(OBJ_WIN, WIN_UTIL);
createObject(OBJ_BUTTON, BUT_UTL_I_SPEEDO);
createObject(OBJ_BUTTON, BUT_UTL_T_SPEEDO);
createObject(OBJ_BUTTON, BUT_UTL_I_STEAM);
createObject(OBJ_BUTTON, BUT_UTL_T_STEAM);
createObject(OBJ_BUTTON, BUT_UTL_I_SCAN);
createObject(OBJ_BUTTON, BUT_UTL_T_SCAN);
createObject(OBJ_BUTTON, BUT_UTL_I_STA);
createObject(OBJ_BUTTON, BUT_UTL_T_STA);
createObject(OBJ_ICON, ICON_UTL_EXIT);
createObject(OBJ_DRAWSTR, DSTR_UTL_MENU);
newEvent(OBJ_WIN, WIN_UTIL, EVNT_DRAW);
break;
case WIN_ACCESSORY:
editAccessory = false;
winData[WIN_ACCESSORY].backgnd = COLOR_WHITE;
updateAccPanel();
createObject(OBJ_WIN, WIN_ACCESSORY);
createObject(OBJ_BUTTON, BUT_ACC_0);
createObject(OBJ_BUTTON, BUT_ACC_1);
createObject(OBJ_BUTTON, BUT_ACC_2);
createObject(OBJ_BUTTON, BUT_ACC_3);
createObject(OBJ_BUTTON, BUT_ACC_4);
createObject(OBJ_BUTTON, BUT_ACC_5);
createObject(OBJ_BUTTON, BUT_ACC_6);
createObject(OBJ_BUTTON, BUT_ACC_7);
createObject(OBJ_BUTTON, BUT_ACC_8);
createObject(OBJ_BUTTON, BUT_ACC_9);
createObject(OBJ_BUTTON, BUT_ACC_10);
createObject(OBJ_BUTTON, BUT_ACC_11);
createObject(OBJ_BUTTON, BUT_ACC_12);
createObject(OBJ_BUTTON, BUT_ACC_13);
createObject(OBJ_BUTTON, BUT_ACC_14);
createObject(OBJ_BUTTON, BUT_ACC_15);
createObject(OBJ_BUTTON, BUT_ACC_CNCL);
createObject(OBJ_BUTTON, BUT_ACC_EDIT);
createObject(OBJ_TXT, TXT_ACC_0);
createObject(OBJ_TXT, TXT_ACC_1);
createObject(OBJ_TXT, TXT_ACC_2);
createObject(OBJ_TXT, TXT_ACC_3);
createObject(OBJ_TXT, TXT_ACC_4);
createObject(OBJ_TXT, TXT_ACC_5);
createObject(OBJ_TXT, TXT_ACC_6);
createObject(OBJ_TXT, TXT_ACC_7);
createObject(OBJ_TXT, TXT_ACC_8);
createObject(OBJ_TXT, TXT_ACC_9);
createObject(OBJ_TXT, TXT_ACC_10);
createObject(OBJ_TXT, TXT_ACC_11);
createObject(OBJ_TXT, TXT_ACC_12);
createObject(OBJ_TXT, TXT_ACC_13);
createObject(OBJ_TXT, TXT_ACC_14);
createObject(OBJ_TXT, TXT_ACC_15);
createObject(OBJ_TXT, TXT_PANEL);
newEvent(OBJ_WIN, WIN_ACCESSORY, EVNT_DRAW);
break;
case WIN_PANELS:
createObject(OBJ_WIN, WIN_PANELS);
createObject(OBJ_TXT, TXT_PANEL0);
createObject(OBJ_TXT, TXT_PANEL1);
createObject(OBJ_TXT, TXT_PANEL2);
createObject(OBJ_TXT, TXT_PANEL3);
createObject(OBJ_TXT, TXT_PANEL4);
createObject(OBJ_TXT, TXT_PANEL5);
createObject(OBJ_TXT, TXT_PANEL6);
createObject(OBJ_TXT, TXT_PANEL7);
createObject(OBJ_TXT, TXT_PANEL8);
createObject(OBJ_TXT, TXT_PANEL9);
createObject(OBJ_TXT, TXT_PANEL10);
createObject(OBJ_TXT, TXT_PANEL11);
createObject(OBJ_TXT, TXT_PANEL12);
createObject(OBJ_TXT, TXT_PANEL13);
createObject(OBJ_TXT, TXT_PANEL14);
createObject(OBJ_TXT, TXT_PANEL15);
newEvent(OBJ_WIN, WIN_PANELS, EVNT_DRAW);
break;
case WIN_PANEL_NAME:
snprintf(keybNameBuf, PANEL_LNG + 1, panelNameBuf);
txtData[TXT_NAME].maxLength = PANEL_LNG;
createObject(OBJ_WIN, WIN_PANEL_NAME);
createObject(OBJ_TXT, TXT_NAME);
createObject(OBJ_KEYBOARD, KEYB_NAME);
createObject(OBJ_BUTTON, BUT_NAME_OK);
createObject(OBJ_BUTTON, BUT_NAME_CNCL);
newEvent(OBJ_WIN, WIN_PANEL_NAME, EVNT_DRAW);
break;
case WIN_ACC_CTRL:
snprintf(accKeybAddr, ADDR_LNG + 1, "%d", myTurnout);
createObject(OBJ_WIN, WIN_ACC_CTRL);
createObject(OBJ_TXT, TXT_ACC_ADDR);
createObject(OBJ_KEYBOARD, KEYB_ACC);
createObject(OBJ_ICON, ICON_KEYB_ACC);
createObject(OBJ_BUTTON, BUT_ACC_RED);
createObject(OBJ_BUTTON, BUT_ACC_GREEN);
newEvent(OBJ_WIN, WIN_ACC_CTRL, EVNT_DRAW);
break;
case WIN_ACC_ASPECT:
createObject(OBJ_WIN, WIN_ACC_ASPECT);
createObject(OBJ_BUTTON, BUT_ACC_ASPECT0);
createObject(OBJ_BUTTON, BUT_ACC_ASPECT1);
createObject(OBJ_BUTTON, BUT_ACC_ASPECT2);
if (currAccAspects == 4)
createObject(OBJ_BUTTON, BUT_ACC_ASPECT3);
newEvent(OBJ_WIN, WIN_ACC_ASPECT, EVNT_DRAW);
break;
case WIN_ACC_TYPE:
createObject(OBJ_WIN, WIN_ACC_TYPE);
createObject(OBJ_LABEL, LBL_ACC_TYPE);
createObject(OBJ_FNC, FNC_ACC_TYPE);
newEvent(OBJ_WIN, WIN_ACC_TYPE, EVNT_DRAW);
break;
case WIN_ACC_EDIT:
n = accDef[currAccEdit.type].aspects;
winData[WIN_ACC_EDIT].h = 130 + (n * 40);
buttonData[BUT_TYPE_OK].y = 93 + (n * 40);
buttonData[BUT_TYPE_CNCL].y = 93 + (n * 40);
iconData[ICON_TYPE_OK].y = 97 + (n * 40);
iconData[ICON_TYPE_CNCL].y = 97 + (n * 40);
createObject(OBJ_WIN, WIN_ACC_EDIT);
createObject(OBJ_LABEL, LBL_ACC_NAME);
createObject(OBJ_LABEL, LBL_ACC_ADDR);
createObject(OBJ_TXT, TXT_ACC_NAME);
createObject(OBJ_TXT, TXT_ACC_ADDR1);
createObject(OBJ_FNC, FNC_EDIT_ASPECT0);
createObject(OBJ_BUTTON, BUT_ACC_OUT0);
createObject(OBJ_BUTTON, BUT_ACC_OUT1);
if (n > 1) {
createObject(OBJ_FNC, FNC_EDIT_ASPECT1);
createObject(OBJ_BUTTON, BUT_ACC_OUT4);
createObject(OBJ_BUTTON, BUT_ACC_OUT5);
}
if (n > 2) {
createObject(OBJ_TXT, TXT_ACC_ADDR2);
createObject(OBJ_ICON, ICON_PLUS_ONE);
createObject(OBJ_FNC, FNC_EDIT_ASPECT2);
createObject(OBJ_BUTTON, BUT_ACC_OUT2);
createObject(OBJ_BUTTON, BUT_ACC_OUT3);
createObject(OBJ_BUTTON, BUT_ACC_OUT6);
createObject(OBJ_BUTTON, BUT_ACC_OUT7);
createObject(OBJ_BUTTON, BUT_ACC_OUT8);
createObject(OBJ_BUTTON, BUT_ACC_OUT9);
createObject(OBJ_BUTTON, BUT_ACC_OUT10);
createObject(OBJ_BUTTON, BUT_ACC_OUT11);
}
if (n > 3) {
createObject(OBJ_FNC, FNC_EDIT_ASPECT3);
createObject(OBJ_BUTTON, BUT_ACC_OUT12);
createObject(OBJ_BUTTON, BUT_ACC_OUT13);
createObject(OBJ_BUTTON, BUT_ACC_OUT14);
createObject(OBJ_BUTTON, BUT_ACC_OUT15);
}
createObject(OBJ_BUTTON, BUT_TYPE_OK);
createObject(OBJ_BUTTON, BUT_TYPE_CNCL);
newEvent(OBJ_WIN, WIN_ACC_EDIT, EVNT_DRAW);
break;
case WIN_ACC_NAME:
snprintf(keybNameBuf, ACC_LNG + 1, accKeybName);
txtData[TXT_NAME].maxLength = ACC_LNG;
createObject(OBJ_WIN, WIN_ACC_NAME);
createObject(OBJ_TXT, TXT_NAME);
createObject(OBJ_KEYBOARD, KEYB_NAME);
createObject(OBJ_BUTTON, BUT_NAME_OK);
createObject(OBJ_BUTTON, BUT_NAME_CNCL);
newEvent(OBJ_WIN, WIN_ACC_NAME, EVNT_DRAW);
break;
case WIN_ACC_ADDR1:
snprintf(accKeybAdrEdit, ADDR_LNG + 1, "%d", currAccEdit.addr);
createObject(OBJ_WIN, WIN_ACC_ADDR1);
createObject(OBJ_TXT, TXT_ACC_EDIT);
createObject(OBJ_KEYBOARD, KEYB_ACC_ADDR);
newEvent(OBJ_WIN, WIN_ACC_ADDR1, EVNT_DRAW);
break;
case WIN_ACC_ADDR2:
snprintf(accKeybAdrEdit, ADDR_LNG + 1, "%d", currAccEdit.addr2);
createObject(OBJ_WIN, WIN_ACC_ADDR2);
createObject(OBJ_TXT, TXT_ACC_EDIT);
createObject(OBJ_KEYBOARD, KEYB_ACC_ADDR);
newEvent(OBJ_WIN, WIN_ACC_ADDR2, EVNT_DRAW);
break;
case WIN_WIFI_SCAN:
setTimer(TMR_SCAN, 5, TMR_ONESHOT);
createObject(OBJ_WIN, WIN_WIFI_SCAN);
createObject(OBJ_DRAWSTR, DSTR_WIFI_SCAN);
createObject(OBJ_LABEL, LBL_SSID_SCAN);
createObject(OBJ_FNC, FNC_SCAN_RESET);
newEvent(OBJ_WIN, WIN_WIFI_SCAN, EVNT_DRAW);
break;
case WIN_STA_RUN:
updateStationTime(staTime);
updateStationLevel();
updateStationStars();
updateTargetStations();
createObject(OBJ_WIN, WIN_STA_RUN);
createObject(OBJ_LABEL, LBL_STA_RUN);
createObject(OBJ_LABEL, LBL_STA_LEVEL);
createObject(OBJ_LABEL, LBL_STA_INSTR);
createObject(OBJ_FNC, FNC_STA_STARS);
createObject(OBJ_ICON, ICON_STA_CLOCK);
createObject(OBJ_ICON, ICON_STA_STATION);
createObject(OBJ_ICON, ICON_STA_EDIT);
createObject(OBJ_BUTTON, BUT_STA_START);
createObject(OBJ_BUTTON, BUT_STA_CNCL);
createObject(OBJ_TXT, TXT_STA_LEVEL);
createObject(OBJ_TXT, TXT_STA_STARS);
createObject(OBJ_TXT, TXT_STA_STATION);
createObject(OBJ_TXT, TXT_STA_CLOCK);
newEvent(OBJ_WIN, WIN_STA_RUN, EVNT_DRAW);
break;
case WIN_STA_PLAY:
updateTurnoutButtons();
fncData[FNC_STA_RAYO].state = isTrackOff();
createObject(OBJ_WIN, WIN_STA_PLAY);
createObject(OBJ_DRAWSTR, DSTR_STATION_PLAY);
createObject(OBJ_ICON, ICON_STA_TARGET);
createObject(OBJ_ICON, ICON_STA_TRAIN);
createObject(OBJ_ICON, ICON_STA_PIN);
createObject(OBJ_ICON, ICON_STA_TIME);
createObject(OBJ_ICON, ICON_STA_COUNT);
createObject(OBJ_TXT, TXT_STA_TIME);
createObject(OBJ_TXT, TXT_STA_COUNT);
createObject(OBJ_TXT, TXT_STA_STARC);
createObject(OBJ_GAUGE, GAUGE_STATION);
createObject(OBJ_FNC, FNC_STA_DIR);
createObject(OBJ_FNC, FNC_STA_STARC);
createObject(OBJ_FNC, FNC_STA_RAYO);
createObject(OBJ_BUTTON, BUT_STA_STOP);
switch (staMaxTurnout) {
case 1:
fncData[FNC_STA_ACC0].x = 104;
buttonData[BUT_STA_ACC0].x = 100;
createObject(OBJ_BUTTON, BUT_STA_ACC0);
break;
case 2:
fncData[FNC_STA_ACC0].x = 54;
fncData[FNC_STA_ACC1].x = 154;
buttonData[BUT_STA_ACC0].x = 50;
buttonData[BUT_STA_ACC1].x = 150;
createObject(OBJ_BUTTON, BUT_STA_ACC0);
createObject(OBJ_BUTTON, BUT_STA_ACC1);
break;
case 3:
fncData[FNC_STA_ACC0].x = 40;
fncData[FNC_STA_ACC1].x = 104;
fncData[FNC_STA_ACC2].x = 168;
buttonData[BUT_STA_ACC0].x = 36;
buttonData[BUT_STA_ACC1].x = 100;
buttonData[BUT_STA_ACC2].x = 164;
createObject(OBJ_BUTTON, BUT_STA_ACC0);
createObject(OBJ_BUTTON, BUT_STA_ACC1);
createObject(OBJ_BUTTON, BUT_STA_ACC2);
break;
default:
fncData[FNC_STA_ACC0].x = 20;
fncData[FNC_STA_ACC1].x = 76;
fncData[FNC_STA_ACC2].x = 132;
fncData[FNC_STA_ACC3].x = 188;
buttonData[BUT_STA_ACC0].x = 16;
buttonData[BUT_STA_ACC1].x = 72;
buttonData[BUT_STA_ACC2].x = 128;
buttonData[BUT_STA_ACC3].x = 184;
createObject(OBJ_BUTTON, BUT_STA_ACC0);
createObject(OBJ_BUTTON, BUT_STA_ACC1);
createObject(OBJ_BUTTON, BUT_STA_ACC2);
createObject(OBJ_BUTTON, BUT_STA_ACC3);
break;
}
newEvent(OBJ_WIN, WIN_STA_PLAY, EVNT_DRAW);
break;
case WIN_STA_STARS:
createObject(OBJ_WIN, WIN_STA_STARS);
if (staCurrTime > 0) {
staStars++;
createObject(OBJ_FNC, FNC_STA_STAR1);
if (staCurrTime > 10) { // time remaining
staStars++;
createObject(OBJ_FNC, FNC_STA_STAR2);
createObject(OBJ_LABEL, LBL_STA_EXCEL);
}
else {
createObject(OBJ_LABEL, LBL_STA_GREAT);
}
updateStationStars();
}
else {
createObject(OBJ_ICON, ICON_STA_TIMEOUT);
createObject(OBJ_LABEL, LBL_STA_TIMEOUT);
}
newEvent(OBJ_WIN, WIN_STA_STARS, EVNT_DRAW);
break;
case WIN_STA_EDIT:
snprintf(staStartTimeBuf, IP_LNG + 1, "%d", staStartTime);
snprintf(staStatNumBuf, IP_LNG + 1, "%d", staMaxStations);
snprintf(staTurnNumBuf, IP_LNG + 1, "%d", staMaxTurnout);
snprintf(staTurnout1Buf, ADDR_LNG + 1, "%d", staTurnoutAdr1);
snprintf(staTurnout2Buf, ADDR_LNG + 1, "%d", staTurnoutAdr2);
snprintf(staTurnout3Buf, ADDR_LNG + 1, "%d", staTurnoutAdr3);
snprintf(staTurnout4Buf, ADDR_LNG + 1, "%d", staTurnoutAdr4);
for (n = 0; n < 8; n++)
switchData[SW_STA_OR1 + n].state = bitRead(staTurnoutDef, n);
createObject(OBJ_WIN, WIN_STA_EDIT);
createObject(OBJ_LABEL, LBL_STA_STATIONS);
createObject(OBJ_LABEL, LBL_STA_TURNOUTS);
createObject(OBJ_LABEL, LBL_STA_TIME);
createObject(OBJ_LABEL, LBL_STA_DESC);
createObject(OBJ_TXT, TXT_STA_STARTTIME);
createObject(OBJ_TXT, TXT_STA_STATNUM);
createObject(OBJ_TXT, TXT_STA_TURNNUM);
createObject(OBJ_TXT, TXT_STA_TURNOUT1);
createObject(OBJ_TXT, TXT_STA_TURNOUT2);
createObject(OBJ_TXT, TXT_STA_TURNOUT3);
createObject(OBJ_TXT, TXT_STA_TURNOUT4);
createObject(OBJ_BUTTON, BUT_STA_EDIT);
createObject(OBJ_SWITCH, SW_STA_OR1);
createObject(OBJ_SWITCH, SW_STA_OR2);
createObject(OBJ_SWITCH, SW_STA_OR3);
createObject(OBJ_SWITCH, SW_STA_OR4);
createObject(OBJ_SWITCH, SW_STA_INV1);
createObject(OBJ_SWITCH, SW_STA_INV2);
createObject(OBJ_SWITCH, SW_STA_INV3);
createObject(OBJ_SWITCH, SW_STA_INV4);
createObject(OBJ_BUTTON, BUT_STA_STAM);
createObject(OBJ_BUTTON, BUT_STA_STAP);
createObject(OBJ_BUTTON, BUT_STA_TURNM);
createObject(OBJ_BUTTON, BUT_STA_TURNP);
newEvent(OBJ_WIN, WIN_STA_EDIT, EVNT_DRAW);
break;
case WIN_STA_KEYB:
createObject(OBJ_WIN, WIN_STA_KEYB);
createObject(OBJ_KEYBOARD, KEYB_STA);
newEvent(OBJ_WIN, WIN_STA_KEYB, EVNT_DRAW);
break;
}
}
void alertWindow(byte err) {
errType = err;
createObject(OBJ_WIN, WIN_ALERT);
switch (err) {
case ERR_SERV:
createObject(OBJ_ICON, ICON_WARNING);
createObject(OBJ_ICON, ICON_WARNING_ON);
createObject(OBJ_LABEL, LBL_SERVICE);
break;
case ERR_CHG_WIFI:
createObject(OBJ_ICON, ICON_INFO);
createObject(OBJ_LABEL, LBL_CHG_WIFI);
break;
case ERR_FULL:
createObject(OBJ_ICON, ICON_WARNING);
createObject(OBJ_ICON, ICON_WARNING_ON);
createObject(OBJ_LABEL, LBL_STACK_FULL);
break;
case ERR_STOP:
createObject(OBJ_ICON, ICON_ESTOP);
createObject(OBJ_LABEL, LBL_ESTOP);
break;
case ERR_WAIT:
case ERR_CV:
barData[BAR_WAIT].value = 0;
setTimer(TMR_WAIT, 5, TMR_ONESHOT);
if (err == ERR_WAIT)
createObject(OBJ_ICON, ICON_WAIT);
else
createObject(OBJ_ICON, ICON_WAIT_CV);
createObject(OBJ_BAR, BAR_WAIT);
break;
case ERR_ASK_SURE:
createObject(OBJ_ICON, ICON_WARNING);
createObject(OBJ_ICON, ICON_WARNING_ON);
createObject(OBJ_LABEL, LBL_ASK_SURE);
createObject(OBJ_BUTTON, BUT_SURE_OK);
createObject(OBJ_BUTTON, BUT_SURE_CNCL);
break;
}
newEvent(OBJ_WIN, WIN_ALERT, EVNT_DRAW);
}