diff --git a/Board320_240.cpp b/Board320_240.cpp index e04b314..3f0ccce 100644 --- a/Board320_240.cpp +++ b/Board320_240.cpp @@ -456,63 +456,63 @@ void Board320_240::drawPreDrawnChargingGraphs(int zeroX, int zeroY, int mulX, in // Rapid gate spr.drawLine(zeroX + (/* SOC FROM */ 1 * mulX), zeroY - (/*I*/ 180 * /*U SOC*/ (1 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 57 * mulX), zeroY - (/*I*/ 180 * /*U SOC*/ (57 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_RAPIDGATE35); + zeroX + (/* SOC TO */ 57 * mulX), zeroY - (/*I*/ 180 * /*U SOC*/ (57 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_RAPIDGATE35); // Coldgate <5C spr.drawLine(zeroX + (/* SOC FROM */ 1 * mulX), zeroY - (/*I*/ 60 * /*U SOC*/ (1 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 65 * mulX), zeroY - (/*I*/ 60 * /*U SOC*/ (65 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE0_5); + zeroX + (/* SOC TO */ 65 * mulX), zeroY - (/*I*/ 60 * /*U SOC*/ (65 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE0_5); // Coldgate 5-14C spr.drawLine(zeroX + (/* SOC FROM */ 1 * mulX), zeroY - (/*I*/ 110 * /*U SOC*/ (1 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 57 * mulX), zeroY - (/*I*/ 110 * /*U SOC*/ (57 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE5_14); + zeroX + (/* SOC TO */ 57 * mulX), zeroY - (/*I*/ 110 * /*U SOC*/ (57 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE5_14); spr.drawLine(zeroX + (/* SOC FROM */ 57 * mulX), zeroY - (/*I*/ 110 * /*U SOC*/ (57 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 58 * mulX), zeroY - (/*I*/ 75 * /*U SOC*/ (58 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE5_14); + zeroX + (/* SOC TO */ 58 * mulX), zeroY - (/*I*/ 75 * /*U SOC*/ (58 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE5_14); spr.drawLine(zeroX + (/* SOC FROM */ 58 * mulX), zeroY - (/*I*/ 75 * /*U SOC*/ (58 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 64 * mulX), zeroY - (/*I*/ 75 * /*U SOC*/ (64 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE5_14); + zeroX + (/* SOC TO */ 64 * mulX), zeroY - (/*I*/ 75 * /*U SOC*/ (64 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE5_14); spr.drawLine(zeroX + (/* SOC FROM */ 64 * mulX), zeroY - (/*I*/ 75 * /*U SOC*/ (64 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 65 * mulX), zeroY - (/*I*/ 60 * /*U SOC*/ (65 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE5_14); + zeroX + (/* SOC TO */ 65 * mulX), zeroY - (/*I*/ 60 * /*U SOC*/ (65 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE5_14); spr.drawLine(zeroX + (/* SOC FROM */ 65 * mulX), zeroY - (/*I*/ 60 * /*U SOC*/ (65 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 82 * mulX), zeroY - (/*I*/ 60 * /*U SOC*/ (82 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE5_14); + zeroX + (/* SOC TO */ 82 * mulX), zeroY - (/*I*/ 60 * /*U SOC*/ (82 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE5_14); spr.drawLine(zeroX + (/* SOC FROM */ 82 * mulX), zeroY - (/*I*/ 60 * /*U SOC*/ (82 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 83 * mulX), zeroY - (/*I*/ 40 * /*U SOC*/ (83 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE5_14); + zeroX + (/* SOC TO */ 83 * mulX), zeroY - (/*I*/ 40 * /*U SOC*/ (83 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE5_14); // Coldgate 15-24C spr.drawLine(zeroX + (/* SOC FROM */ 1 * mulX), zeroY - (/*I*/ 150 * /*U SOC*/ (1 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 57 * mulX), zeroY - (/*I*/ 150 * /*U SOC*/ (57 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE15_24); + zeroX + (/* SOC TO */ 57 * mulX), zeroY - (/*I*/ 150 * /*U SOC*/ (57 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE15_24); spr.drawLine(zeroX + (/* SOC FROM */ 57 * mulX), zeroY - (/*I*/ 150 * /*U SOC*/ (57 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC FROM */ 58 * mulX), zeroY - (/*I*/ 110 * /*U SOC*/ (58 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE15_24); + zeroX + (/* SOC FROM */ 58 * mulX), zeroY - (/*I*/ 110 * /*U SOC*/ (58 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE15_24); spr.drawLine(zeroX + (/* SOC TO */ 58 * mulX), zeroY - (/*I*/ 110 * /*U SOC*/ (58 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 78 * mulX), zeroY - (/*I*/ 110 * /*U SOC*/ (78 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE15_24); + zeroX + (/* SOC TO */ 78 * mulX), zeroY - (/*I*/ 110 * /*U SOC*/ (78 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_COLDGATE15_24); // Optimal spr.drawLine(zeroX + (/* SOC FROM */ 1 * mulX), zeroY - (/*I*/ 200 * /*U SOC*/ (1 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 57 * mulX), zeroY - (/*I*/ 200 * /*U SOC*/ (57 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); + zeroX + (/* SOC TO */ 57 * mulX), zeroY - (/*I*/ 200 * /*U SOC*/ (57 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); spr.drawLine(zeroX + (/* SOC FROM */ 51 * mulX), zeroY - (/*I*/ 200 * /*U SOC*/ (51 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 51 * mulX), zeroY - (/*I*/ 195 * /*U SOC*/ (51 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); + zeroX + (/* SOC TO */ 51 * mulX), zeroY - (/*I*/ 195 * /*U SOC*/ (51 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); spr.drawLine(zeroX + (/* SOC FROM */ 53 * mulX), zeroY - (/*I*/ 200 * /*U SOC*/ (53 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 53 * mulX), zeroY - (/*I*/ 195 * /*U SOC*/ (53 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); + zeroX + (/* SOC TO */ 53 * mulX), zeroY - (/*I*/ 195 * /*U SOC*/ (53 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); spr.drawLine(zeroX + (/* SOC FROM */ 55 * mulX), zeroY - (/*I*/ 200 * /*U SOC*/ (55 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 55 * mulX), zeroY - (/*I*/ 195 * /*U SOC*/ (55 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); + zeroX + (/* SOC TO */ 55 * mulX), zeroY - (/*I*/ 195 * /*U SOC*/ (55 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); spr.drawLine(zeroX + (/* SOC FROM */ 57 * mulX), zeroY - (/*I*/ 200 * /*U SOC*/ (57 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 58 * mulX), zeroY - (/*I*/ 150 * /*U SOC*/ (58 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); + zeroX + (/* SOC TO */ 58 * mulX), zeroY - (/*I*/ 150 * /*U SOC*/ (58 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); spr.drawLine(zeroX + (/* SOC FROM */ 58 * mulX), zeroY - (/*I*/ 150 * /*U SOC*/ (58 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 77 * mulX), zeroY - (/*I*/ 150 * /*U SOC*/ (77 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); + zeroX + (/* SOC TO */ 77 * mulX), zeroY - (/*I*/ 150 * /*U SOC*/ (77 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); spr.drawLine(zeroX + (/* SOC FROM */ 71 * mulX), zeroY - (/*I*/ 150 * /*U SOC*/ (71 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 71 * mulX), zeroY - (/*I*/ 145 * /*U SOC*/ (71 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); + zeroX + (/* SOC TO */ 71 * mulX), zeroY - (/*I*/ 145 * /*U SOC*/ (71 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); spr.drawLine(zeroX + (/* SOC FROM */ 73 * mulX), zeroY - (/*I*/ 150 * /*U SOC*/ (73 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 73 * mulX), zeroY - (/*I*/ 145 * /*U SOC*/ (73 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); + zeroX + (/* SOC TO */ 73 * mulX), zeroY - (/*I*/ 145 * /*U SOC*/ (73 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); spr.drawLine(zeroX + (/* SOC FROM */ 75 * mulX), zeroY - (/*I*/ 150 * /*U SOC*/ (75 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 75 * mulX), zeroY - (/*I*/ 145 * /*U SOC*/ (75 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); + zeroX + (/* SOC TO */ 75 * mulX), zeroY - (/*I*/ 145 * /*U SOC*/ (75 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); spr.drawLine(zeroX + (/* SOC FROM */ 77 * mulX), zeroY - (/*I*/ 150 * /*U SOC*/ (77 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 78 * mulX), zeroY - (/*I*/ 90 * /*U SOC*/ (78 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); + zeroX + (/* SOC TO */ 78 * mulX), zeroY - (/*I*/ 90 * /*U SOC*/ (78 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); spr.drawLine(zeroX + (/* SOC FROM */ 78 * mulX), zeroY - (/*I*/ 90 * /*U SOC*/ (78 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 82 * mulX), zeroY - (/*I*/ 90 * /*U SOC*/ (82 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); + zeroX + (/* SOC TO */ 82 * mulX), zeroY - (/*I*/ 90 * /*U SOC*/ (82 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); spr.drawLine(zeroX + (/* SOC FROM */ 82 * mulX), zeroY - (/*I*/ 90 * /*U SOC*/ (82 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 83 * mulX), zeroY - (/*I*/ 60 * /*U SOC*/ (83 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); + zeroX + (/* SOC TO */ 83 * mulX), zeroY - (/*I*/ 60 * /*U SOC*/ (83 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); spr.drawLine(zeroX + (/* SOC FROM */ 83 * mulX), zeroY - (/*I*/ 60 * /*U SOC*/ (83 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 92 * mulX), zeroY - (/*I*/ 60 * /*U SOC*/ (92 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); + zeroX + (/* SOC TO */ 92 * mulX), zeroY - (/*I*/ 60 * /*U SOC*/ (92 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); spr.drawLine(zeroX + (/* SOC FROM */ 92 * mulX), zeroY - (/*I*/ 60 * /*U SOC*/ (92 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 95 * mulX), zeroY - (/*I*/ 35 * /*U SOC*/ (95 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); + zeroX + (/* SOC TO */ 95 * mulX), zeroY - (/*I*/ 35 * /*U SOC*/ (95 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); spr.drawLine(zeroX + (/* SOC FROM */ 95 * mulX), zeroY - (/*I*/ 35 * /*U SOC*/ (95 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 98 * mulX), zeroY - (/*I*/ 35 * /*U SOC*/ (98 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); + zeroX + (/* SOC TO */ 98 * mulX), zeroY - (/*I*/ 35 * /*U SOC*/ (98 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); spr.drawLine(zeroX + (/* SOC FROM */ 98 * mulX), zeroY - (/*I*/ 35 * /*U SOC*/ (98 * 55 / 100 + 352) /**/ / 1000 * mulY), - zeroX + (/* SOC TO */ 100 * mulX), zeroY - (/*I*/ 15 * /*U SOC*/ (100 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); + zeroX + (/* SOC TO */ 100 * mulX), zeroY - (/*I*/ 15 * /*U SOC*/ (100 * 55 / 100 + 352) /**/ / 1000 * mulY), TFT_GRAPH_OPTIMAL25); // Triangles int x = zeroX; int y; @@ -821,15 +821,29 @@ String Board320_240::menuItemCaption(int16_t menuItemId, String title) { String prefix = "", suffix = ""; - if (menuItemId == 10) // Version - suffix = APP_VERSION; - - if (menuItemId == 401) // distance - suffix = (liveData->settings.distanceUnit == 'k') ? "[km]" : "[mi]"; - if (menuItemId == 402) // temperature - suffix = (liveData->settings.temperatureUnit == 'c') ? "[C]" : "[F]"; - if (menuItemId == 403) // pressure - suffix = (liveData->settings.pressureUnit == 'b') ? "[bar]" : "[psi]"; + switch (menuItemId) { + // Set vehicle type + case MENU_VEHICLE_TYPE: sprintf(tmpStr1, "[%d]", liveData->settings.carType); suffix = tmpStr1; break; + case MENU_SAVE_SETTINGS: sprintf(tmpStr1, "[v%d]", liveData->settings.settingsVersion); suffix = tmpStr1; break; + case MENU_APP_VERSION: sprintf(tmpStr1, "[%s]", APP_VERSION); suffix = tmpStr1; break; + // + case 101: prefix = (liveData->settings.carType == CAR_KIA_ENIRO_2020_64) ? ">" : ""; break; + case 102: prefix = (liveData->settings.carType == CAR_HYUNDAI_KONA_2020_64) ? ">" : ""; break; + case 103: prefix = (liveData->settings.carType == CAR_HYUNDAI_IONIQ_2018) ? ">" : ""; break; + case 104: prefix = (liveData->settings.carType == CAR_KIA_ENIRO_2020_39) ? ">" : ""; break; + case 105: prefix = (liveData->settings.carType == CAR_HYUNDAI_KONA_2020_39) ? ">" : ""; break; + case 106: prefix = (liveData->settings.carType == CAR_RENAULT_ZOE) ? ">" : ""; break; + case 107: prefix = (liveData->settings.carType == CAR_DEBUG_OBD2_KIA) ? ">" : ""; break; + // + case MENU_DEFAULT_SCREEN: sprintf(tmpStr1, "[%d]", liveData->settings.defaultScreen); suffix = tmpStr1; break; + case MENU_DEBUG_SCREEN: suffix = (liveData->settings.debugScreen == 1) ? "[on]" : "[off]"; break; + case MENU_SCREEN_BRIGHTNESS: sprintf(tmpStr1, "[%d%%]", liveData->settings.lcdBrightness); suffix = (liveData->settings.lcdBrightness == 0) ? "[auto]" : tmpStr1; break; + case MENU_PREDRAWN_GRAPHS: suffix = (liveData->settings.predrawnChargingGraphs == 1) ? "[on]" : "[off]"; break; + // + case MENU_DISTANCE_UNIT: suffix = (liveData->settings.distanceUnit == 'k') ? "[km]" : "[mi]"; break; + case MENU_TEMPERATURE_UNIT: suffix = (liveData->settings.temperatureUnit == 'c') ? "[C]" : "[F]"; break; + case MENU_PRESSURE_UNIT: suffix = (liveData->settings.pressureUnit == 'b') ? "[bar]" : "[psi]"; break; + } title = ((prefix == "") ? "" : prefix + " ") + title + ((suffix == "") ? "" : " " + suffix); @@ -907,12 +921,15 @@ void Board320_240::menuMove(bool forward) { void Board320_240::menuItemClick() { // Locate menu item for meta data - MENU_ITEM tmpMenuItem; + MENU_ITEM* tmpMenuItem; uint16_t tmpCurrMenuItem = 0; + int16_t parentMenu = -1; for (uint16_t i = 0; i < liveData->menuItemsCount; ++i) { if (liveData->menuCurrent == liveData->menuItems[i].parentId) { + if (parentMenu == -1) + parentMenu = liveData->menuItems[i].targetParentId; if (liveData->menuItemSelected == tmpCurrMenuItem) { - tmpMenuItem = liveData->menuItems[i]; + tmpMenuItem = &liveData->menuItems[i]; break; } tmpCurrMenuItem++; @@ -922,64 +939,63 @@ void Board320_240::menuItemClick() { // Exit menu, parent level menu, open item if (liveData->menuItemSelected == 0) { // Exit menu - if (tmpMenuItem.parentId == 0 && tmpMenuItem.id == 0) { + if (tmpMenuItem->parentId == 0 && tmpMenuItem->id == 0) { liveData->menuVisible = false; redrawScreen(); } else { // Parent menu - liveData->menuCurrent = tmpMenuItem.targetParentId; + liveData->menuCurrent = tmpMenuItem->targetParentId; showMenu(); } return; } else { - Serial.println(tmpMenuItem.id); + Serial.println(tmpMenuItem->id); // Device list - if (tmpMenuItem.id > 10000 && tmpMenuItem.id < 10100) { - strlcpy((char*)liveData->settings.obdMacAddress, (char*)tmpMenuItem.obdMacAddress, 20); + if (tmpMenuItem->id > 10000 && tmpMenuItem->id < 10100) { + strlcpy((char*)liveData->settings.obdMacAddress, (char*)tmpMenuItem->obdMacAddress, 20); Serial.print("Selected adapter MAC address "); Serial.println(liveData->settings.obdMacAddress); saveSettings(); ESP.restart(); } // Other menus - switch (tmpMenuItem.id) { + bool showParentMenu = false; + switch (tmpMenuItem->id) { // Set vehicle type - case 101: liveData->settings.carType = CAR_KIA_ENIRO_2020_64; break; - case 102: liveData->settings.carType = CAR_HYUNDAI_KONA_2020_64; break; - case 103: liveData->settings.carType = CAR_HYUNDAI_IONIQ_2018; break; - case 104: liveData->settings.carType = CAR_KIA_ENIRO_2020_39; break; - case 105: liveData->settings.carType = CAR_HYUNDAI_KONA_2020_39; break; - case 106: liveData->settings.carType = CAR_RENAULT_ZOE; break; - case 107: liveData->settings.carType = CAR_DEBUG_OBD2_KIA; break; + case 101: liveData->settings.carType = CAR_KIA_ENIRO_2020_64; showMenu(); return; break; + case 102: liveData->settings.carType = CAR_HYUNDAI_KONA_2020_64; showMenu(); return; break; + case 103: liveData->settings.carType = CAR_HYUNDAI_IONIQ_2018; showMenu(); return; break; + case 104: liveData->settings.carType = CAR_KIA_ENIRO_2020_39; showMenu(); return; break; + case 105: liveData->settings.carType = CAR_HYUNDAI_KONA_2020_39; showMenu(); return; break; + case 106: liveData->settings.carType = CAR_RENAULT_ZOE; showMenu(); return; break; + case 107: liveData->settings.carType = CAR_DEBUG_OBD2_KIA; showMenu(); return; break; // Screen orientation case 3011: liveData->settings.displayRotation = 1; tft.setRotation(liveData->settings.displayRotation); break; case 3012: liveData->settings.displayRotation = 3; tft.setRotation(liveData->settings.displayRotation); break; // Default screen - case 3021: liveData->settings.defaultScreen = 1; break; - case 3022: liveData->settings.defaultScreen = 2; break; - case 3023: liveData->settings.defaultScreen = 3; break; - case 3024: liveData->settings.defaultScreen = 4; break; - case 3025: liveData->settings.defaultScreen = 5; break; + case 3021: liveData->settings.defaultScreen = 1; showParentMenu = true; break; + case 3022: liveData->settings.defaultScreen = 2; showParentMenu = true; break; + case 3023: liveData->settings.defaultScreen = 3; showParentMenu = true; break; + case 3024: liveData->settings.defaultScreen = 4; showParentMenu = true; break; + case 3025: liveData->settings.defaultScreen = 5; showParentMenu = true; break; // Debug screen off/on - case 3031: liveData->settings.debugScreen = 0; break; - case 3032: liveData->settings.debugScreen = 1; break; + case MENU_DEBUG_SCREEN: liveData->settings.debugScreen = (liveData->settings.debugScreen == 1) ? 0 : 1; showMenu(); return; break; // Lcd brightness - case 3041: liveData->settings.lcdBrightness = 0; break; - case 3042: liveData->settings.lcdBrightness = 20; break; - case 3043: liveData->settings.lcdBrightness = 50; break; - case 3044: liveData->settings.lcdBrightness = 100; break; + case 3041: liveData->settings.lcdBrightness = 0; showParentMenu = true; break; + case 3042: liveData->settings.lcdBrightness = 20; showParentMenu = true; break; + case 3043: liveData->settings.lcdBrightness = 50; showParentMenu = true; break; + case 3044: liveData->settings.lcdBrightness = 100; showParentMenu = true; break; // Pre-drawn charg.graphs off/on - case 3051: liveData->settings.predrawnChargingGraphs = 0; break; - case 3052: liveData->settings.predrawnChargingGraphs = 1; break; + case MENU_PREDRAWN_GRAPHS: liveData->settings.predrawnChargingGraphs = (liveData->settings.predrawnChargingGraphs == 1) ? 0 : 1; showMenu(); return; break; // Distance - case 4011: liveData->settings.distanceUnit = 'k'; break; - case 4012: liveData->settings.distanceUnit = 'm'; break; + case 4011: liveData->settings.distanceUnit = 'k'; showParentMenu = true; break; + case 4012: liveData->settings.distanceUnit = 'm'; showParentMenu = true; break; // Temperature - case 4021: liveData->settings.temperatureUnit = 'c'; break; - case 4022: liveData->settings.temperatureUnit = 'f'; break; + case 4021: liveData->settings.temperatureUnit = 'c'; showParentMenu = true; break; + case 4022: liveData->settings.temperatureUnit = 'f'; showParentMenu = true; break; // Pressure - case 4031: liveData->settings.pressureUnit = 'b'; break; - case 4032: liveData->settings.pressureUnit = 'p'; break; + case 4031: liveData->settings.pressureUnit = 'b'; showParentMenu = true; break; + case 4032: liveData->settings.pressureUnit = 'p'; showParentMenu = true; break; // Pair ble device case 2: scanDevices = true; /*startBleScan(); */return; // Reset settings @@ -992,14 +1008,21 @@ void Board320_240::menuItemClick() { case 11: shutdownDevice(); return; default: // Submenu - liveData->menuCurrent = tmpMenuItem.id; + liveData->menuCurrent = tmpMenuItem->id; liveData->menuItemSelected = 0; showMenu(); return; } - // close menu - hideMenu(); + if (showParentMenu && parentMenu != -1) { + liveData->menuCurrent = parentMenu; + liveData->menuItemSelected = 0; + Serial.println(liveData->menuCurrent); + showMenu(); + } else { + // close menu + hideMenu(); + } } } @@ -1165,10 +1188,10 @@ void Board320_240::mainLoop() { } /** - * skipAdapterScan - */ + skipAdapterScan +*/ bool Board320_240::skipAdapterScan() { - return digitalRead(pinButtonMiddle) == LOW || digitalRead(pinButtonLeft) == LOW || digitalRead(pinButtonRight) == LOW; + return digitalRead(pinButtonMiddle) == LOW || digitalRead(pinButtonLeft) == LOW || digitalRead(pinButtonRight) == LOW; } #endif // BOARD320_240_CPP diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 13dfe35..633f91a 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -4,6 +4,7 @@ - m5stack mute speaker - settings v4 (wifi/gprs/sdcard/ntp/..) - ble4 skipped if mac is not set (00:00:00:00:00:00) +- improved menu ### v2.0.0 2020-12-02 - Project renamed from eNiroDashboard to evDash diff --git a/config.h b/config.h index 496a0bf..cba2567 100644 --- a/config.h +++ b/config.h @@ -66,4 +66,16 @@ typedef struct { char serviceUUID[40]; } MENU_ITEM; +#define MENU_VEHICLE_TYPE 1 +#define MENU_SAVE_SETTINGS 9 +#define MENU_APP_VERSION 10 +#define MENU_DEFAULT_SCREEN 302 +#define MENU_DEBUG_SCREEN 303 +#define MENU_SCREEN_BRIGHTNESS 304 +#define MENU_PREDRAWN_GRAPHS 305 +#define MENU_DISTANCE_UNIT 401 +#define MENU_TEMPERATURE_UNIT 402 +#define MENU_PRESSURE_UNIT 403 + + #endif // CONFIG_H diff --git a/menu.h b/menu.h index 6203b8a..6f18707 100644 --- a/menu.h +++ b/menu.h @@ -5,13 +5,13 @@ MENU_ITEM menuItemsSource[79] = { {0, 0, 0, "<- exit menu"}, - {1, 0, -1, "Vehicle type"}, + {MENU_VEHICLE_TYPE, 0, -1, "Vehicle type"}, {2, 0, -1, "Select OBD2BLE adapter"}, {3, 0, -1, "Others"}, {4, 0, -1, "Units"}, {8, 0, -1, "Factory reset"}, - {9, 0, -1, "Save settings"}, - {10, 0, -1, "Version"}, + {MENU_SAVE_SETTINGS, 0, -1, "Save settings"}, + {MENU_APP_VERSION, 0, -1, "Version"}, {11, 0, -1, "Shutdown"}, {100, 1, 0, "<- parent menu"}, @@ -25,17 +25,17 @@ MENU_ITEM menuItemsSource[79] = { {300, 3, 0, "<- parent menu"}, {301, 3, -1, "Screen rotation"}, - {302, 3, -1, "Default screen"}, - {303, 3, -1, "Debug screen off/on"}, - {304, 3, -1, "LCD brightness"}, - {305, 3, -1, "Pre-drawn ch.graphs 0/1"}, + {MENU_DEFAULT_SCREEN, 3, -1, "Default screen"}, + {MENU_DEBUG_SCREEN, 3, -1, "Debug screen"}, + {MENU_SCREEN_BRIGHTNESS, 3, -1, "LCD brightness"}, + {MENU_PREDRAWN_GRAPHS, 3, -1, "Pre-drawn ch.graphs"}, {306, 3, -1, "[DEV] WiFi network"}, {307, 3, -1, "[DEV] SD card"}, {400, 4, 0, "<- parent menu"}, - {401, 4, -1, "Distance"}, - {402, 4, -1, "Temperature"}, - {403, 4, -1, "Pressure"}, + {MENU_DISTANCE_UNIT, 4, -1, "Distance"}, + {MENU_TEMPERATURE_UNIT, 4, -1, "Temperature"}, + {MENU_PRESSURE_UNIT, 4, -1, "Pressure"}, {3010, 301, 3, "<- parent menu"}, {3011, 301, -1, "Normal"}, @@ -48,20 +48,12 @@ MENU_ITEM menuItemsSource[79] = { {3024, 302, -1, "Battery cells"}, {3025, 302, -1, "Charging graph"}, - {3030, 303, 3, "<- parent menu"}, - {3031, 303, -1, "Off"}, - {3032, 303, -1, "On"}, - {3040, 304, 3, "<- parent menu"}, {3041, 304, -1, "Auto"}, {3042, 304, -1, "20%"}, {3043, 304, -1, "50%"}, {3044, 304, -1, "100%"}, - {3050, 305, 3, "<- parent menu"}, - {3051, 305, -1, "Off"}, - {3052, 305, -1, "On"}, - {3060, 306, 3, "<- parent menu"}, {3061, 306, -1, "WiFi off/on"}, {3062, 306, -1, "SSID"},