diff --git a/Bootload/AfterburnerV3.1.2.bin b/Bootload/AfterburnerV3.1.2.bin deleted file mode 100644 index 804404c..0000000 Binary files a/Bootload/AfterburnerV3.1.2.bin and /dev/null differ diff --git a/Bootload/COM.bat b/Bootload/COM.bat index ba5d34c..ec4aa13 100644 --- a/Bootload/COM.bat +++ b/Bootload/COM.bat @@ -1,5 +1,5 @@ REM Firmware -esptool.exe --chip esp32 --port COM16 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect 0xe000 boot_app0.bin 0x1000 bootloader_qio_80m.bin 0x10000 AfterburnerV3.1.2.bin 0x8000 Afterburner.partitions.bin +esptool.exe --chip esp32 --port COM16 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect 0xe000 boot_app0.bin 0x1000 bootloader_qio_80m.bin 0x10000 AfterburnerV3.1.3.bin 0x8000 Afterburner.partitions.bin REM SPIFFS esptool.exe --chip esp32 --port COM16 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_size detect 0x3d0000 spiffs.bin diff --git a/platformio.ini b/platformio.ini index 001080d..5a22cab 100644 --- a/platformio.ini +++ b/platformio.ini @@ -15,12 +15,12 @@ board = esp32dev framework = arduino board_build.partitions = ABpartition.csv upload_speed = 921600 -;upload_port = 192.168.20.40 -;upload_protocol = espota -upload_port = COM16 -upload_protocol = esptool -;upload_flags = -; --port=3232 +upload_port = 192.168.20.120 +upload_protocol = espota +upload_flags = + --port=3232 +;upload_port = COM16 +;upload_protocol = esptool ;monitor_speed = 115200 extra_scripts = post:add_CRC.py ; replace shitty Arduino millis with a linear time version diff --git a/src/Afterburner.cpp b/src/Afterburner.cpp index cf9a709..54c31c6 100644 --- a/src/Afterburner.cpp +++ b/src/Afterburner.cpp @@ -470,6 +470,7 @@ void setup() { FilteredSamples.Fan.setRounding(10); FilteredSamples.Fan.setAlpha(0.7); FilteredSamples.AmbientTemp.reset(-100.0); + FilteredSamples.AmbientTemp.setAlpha(0); // no average - for test FilteredSamples.FastipVolts.setRounding(0.1); FilteredSamples.FastipVolts.setAlpha(0.7); FilteredSamples.FastGlowAmps.setRounding(0.01); @@ -1414,7 +1415,7 @@ void checkDebugCommands() bTestBTModule = !bTestBTModule; Bluetooth.test(bTestBTModule ? 0xff : 0x00); // special enter or leave BT test commands } - else if(rxVal == ('s' & 0x1f)) { // CTRL-S Stripped back - no heater mode +/* else if(rxVal == ('s' & 0x1f)) { // CTRL-S Stripped back - no heater mode sUserSettings us = NVstore.getUserSettings(); us.NoHeater = !us.NoHeater; NVstore.setUserSettings(us); @@ -1427,7 +1428,7 @@ void checkDebugCommands() DebugPort.handle(); delay(1000); ESP.restart(); - } + }*/ } #ifdef PROTOCOL_INVESTIGATION if(bSendVal) { diff --git a/src/OLED/BasicScreen.cpp b/src/OLED/BasicScreen.cpp index 902f737..0a8cb45 100644 --- a/src/OLED/BasicScreen.cpp +++ b/src/OLED/BasicScreen.cpp @@ -191,7 +191,7 @@ CBasicScreen::keyHandler(uint8_t event) if(event & key_Down) { if(repeatCount > 2) { repeatCount = -1; // prevent double handling - if(!NVstore.getUserSettings().NoHeater) { + if(NVstore.getUserSettings().menuMode < 2) { _showModeTime = millis() + 5000; _nModeSel = getThermostatModeActive() ? 0 : 1; } @@ -201,7 +201,7 @@ CBasicScreen::keyHandler(uint8_t event) if(event & key_Up) { if(repeatCount > 2) { repeatCount = -1; // prevent double handling - if(!NVstore.getUserSettings().NoHeater) { + if(NVstore.getUserSettings().menuMode < 2) { _showModeTime = millis() + 5000; } sUserSettings settings = NVstore.getUserSettings(); @@ -212,7 +212,7 @@ CBasicScreen::keyHandler(uint8_t event) } // hold CENTRE to turn ON or OFF if(event & key_Centre) { - if(!NVstore.getUserSettings().NoHeater) { + if(NVstore.getUserSettings().menuMode < 2) { int runstate = getHeaterInfo().getRunStateEx(); if(runstate) { // running, including cyclic mode idle if(repeatCount > 5) { @@ -238,7 +238,7 @@ CBasicScreen::keyHandler(uint8_t event) if(event & keyReleased) { if(!_showModeTime) { // release DOWN key to reduce set demand, provided we are not in mode select - if(!NVstore.getUserSettings().NoHeater) { + if(NVstore.getUserSettings().menuMode < 2) { if(event & key_Down) { if(reqDemandDelta(-1)) { _showSetModeTime = millis() + 2000; @@ -297,7 +297,7 @@ CBasicScreen::keyHandler(uint8_t event) } // release CENTRE to accept new mode, and/or show current setting if(event & key_Centre) { - if(!NVstore.getUserSettings().NoHeater) { + if(NVstore.getUserSettings().menuMode < 2) { if(repeatCount != -2) { // prevent after off commands if(_showModeTime) { _showModeTime = millis(); // force immediate cancellation of showmode (via screen update) @@ -317,7 +317,7 @@ CBasicScreen::keyHandler(uint8_t event) void CBasicScreen::showRunState() { - if(NVstore.getUserSettings().NoHeater) + if(NVstore.getUserSettings().menuMode == 2) return; int runstate = getHeaterInfo().getRunStateEx(); diff --git a/src/OLED/ClockScreen.cpp b/src/OLED/ClockScreen.cpp index c75cbc3..3808955 100644 --- a/src/OLED/ClockScreen.cpp +++ b/src/OLED/ClockScreen.cpp @@ -109,7 +109,7 @@ CClockScreen::keyHandler(uint8_t event) } // press DOWN if(event & key_Down) { - if(!NVstore.getUserSettings().NoHeater) { + if(NVstore.getUserSettings().menuMode < 2) { _ScreenManager.selectMenu(CScreenManager::TimerMenuLoop); // switch to timer set screen loop } } @@ -133,7 +133,7 @@ CClockScreen::keyHandler(uint8_t event) } // hold CENTRE to toggle On/Off state if(event & key_Centre) { - if(!NVstore.getUserSettings().NoHeater) { + if(NVstore.getUserSettings().menuMode < 2) { int runstate = getHeaterInfo().getRunStateEx(); if(runstate) { // running, including cyclic mode idle if(_keyRepeatCount > 5) { diff --git a/src/OLED/MenuTrunkScreen.cpp b/src/OLED/MenuTrunkScreen.cpp index 2a8e452..d9d0725 100644 --- a/src/OLED/MenuTrunkScreen.cpp +++ b/src/OLED/MenuTrunkScreen.cpp @@ -71,10 +71,12 @@ CMenuTrunkScreen::show() _printMenuText(_display.xCentre(), yPos[_rowSel], " \021 \020 ", true, eCentreJustify); - if(!NVstore.getUserSettings().NoHeater) { + if(NVstore.getUserSettings().menuMode == 0) { _printMenuText(_display.xCentre(), yPos[3], "Heater Tuning", false, eCentreJustify); } - _printMenuText(_display.xCentre(), yPos[2], "System Settings", false, eCentreJustify); + if(NVstore.getUserSettings().menuMode != 1) { + _printMenuText(_display.xCentre(), yPos[2], "System Settings", false, eCentreJustify); + } _printMenuText(_display.xCentre(), yPos[1], "User Settings", false, eCentreJustify); _printMenuText(_display.xCentre(), yPos[0], "Root menu", false, eCentreJustify); @@ -128,7 +130,11 @@ CMenuTrunkScreen::keyHandler(uint8_t event) // press UP if(event & key_Up) { _rowSel++; - int lim = NVstore.getUserSettings().NoHeater ? 2 : 3; + int lim = 3; + switch(NVstore.getUserSettings().menuMode) { + case 1: lim = 1; break; + case 2: lim = 2; break; + } UPPERLIMIT(_rowSel, lim); } // press DOWN diff --git a/src/OLED/ScreenHeader.cpp b/src/OLED/ScreenHeader.cpp index 8b929ba..5997e8c 100644 --- a/src/OLED/ScreenHeader.cpp +++ b/src/OLED/ScreenHeader.cpp @@ -309,7 +309,7 @@ CScreenHeader::showWifiIcon() void CScreenHeader::showBatteryIcon(float voltage) { - if(!NVstore.getUserSettings().NoHeater) { + if(NVstore.getUserSettings().menuMode < 2) { _drawBitmap(X_BATT_ICON, Y_BATT_ICON, BatteryIconInfo); char msg[16]; sprintf(msg, "%.1fV", voltage); diff --git a/src/OLED/ScreenManager.cpp b/src/OLED/ScreenManager.cpp index 922a2d7..3f77995 100644 --- a/src/OLED/ScreenManager.cpp +++ b/src/OLED/ScreenManager.cpp @@ -393,15 +393,7 @@ CScreenManager::begin(bool bNoClock) std::vector menuloop; // create root menu loop - if(NVstore.getUserSettings().NoHeater) { - menuloop.push_back(new CMenuTrunkScreen(*_pDisplay, *this)); - menuloop.push_back(new CBasicScreen(*_pDisplay, *this)); // basic control - if(!bNoClock) - menuloop.push_back(new CClockScreen(*_pDisplay, *this)); // clock - if(getBoardRevision() != 0 && getBoardRevision() != BRD_V2_NOGPIO) // has GPIO support - menuloop.push_back(new CGPIOInfoScreen(*_pDisplay, *this)); // GPIO info - } - else { + if(NVstore.getUserSettings().menuMode == 0) { menuloop.push_back(new CDetailedScreen(*_pDisplay, *this)); // detail control menuloop.push_back(new CBasicScreen(*_pDisplay, *this)); // basic control if(!bNoClock) @@ -411,6 +403,20 @@ CScreenManager::begin(bool bNoClock) menuloop.push_back(new CGPIOInfoScreen(*_pDisplay, *this)); // GPIO info menuloop.push_back(new CMenuTrunkScreen(*_pDisplay, *this)); } + else if(NVstore.getUserSettings().menuMode == 1) { + menuloop.push_back(new CMenuTrunkScreen(*_pDisplay, *this)); + menuloop.push_back(new CBasicScreen(*_pDisplay, *this)); // basic control + if(!bNoClock) + menuloop.push_back(new CClockScreen(*_pDisplay, *this)); // clock + } + else if(NVstore.getUserSettings().menuMode == 2) { + menuloop.push_back(new CMenuTrunkScreen(*_pDisplay, *this)); + menuloop.push_back(new CBasicScreen(*_pDisplay, *this)); // basic control + if(!bNoClock) + menuloop.push_back(new CClockScreen(*_pDisplay, *this)); // clock + if(getBoardRevision() != 0 && getBoardRevision() != BRD_V2_NOGPIO) // has GPIO support + menuloop.push_back(new CGPIOInfoScreen(*_pDisplay, *this)); // GPIO info + } _Screens.push_back(menuloop); // create timer screens loop @@ -432,38 +438,45 @@ CScreenManager::begin(bool bNoClock) menuloop.push_back(new CSetTimerScreen(*_pDisplay, *this, 13)); // set timer 14 _Screens.push_back(menuloop); - // create heater tuning screens loop - password protected - menuloop.clear(); - menuloop.push_back(new CFuelMixtureScreen(*_pDisplay, *this)); // mixture tuning - menuloop.push_back(new CHeaterSettingsScreen(*_pDisplay, *this)); // heater system tuning - menuloop.push_back(new CFuelCalScreen(*_pDisplay, *this)); // fuel pump calibration - _Screens.push_back(menuloop); - // create User Settings screens loop menuloop.clear(); - if(NVstore.getUserSettings().NoHeater) { - menuloop.push_back(new CNoHeaterHomeMenuSelScreen(*_pDisplay, *this)); // No Heater Home menu settings screen - if(getBoardRevision() != 0 && getBoardRevision() != BRD_V2_NOGPIO) // has GPIO support ? - menuloop.push_back(new CGPIOSetupScreen(*_pDisplay, *this)); // GPIO settings screen - } - else { + if(NVstore.getUserSettings().menuMode == 0) { menuloop.push_back(new CThermostatModeScreen(*_pDisplay, *this)); // thermostat settings screen menuloop.push_back(new CHomeMenuSelScreen(*_pDisplay, *this)); // Home menu settings screen menuloop.push_back(new CTimeoutsScreen(*_pDisplay, *this)); // Other options screen if(getBoardRevision() != 0 && getBoardRevision() != BRD_V2_NOGPIO) // has GPIO support ? menuloop.push_back(new CGPIOSetupScreen(*_pDisplay, *this)); // GPIO settings screen } + else if(NVstore.getUserSettings().menuMode == 1) { + menuloop.push_back(new CThermostatModeScreen(*_pDisplay, *this)); // thermostat settings screen + menuloop.push_back(new CHomeMenuSelScreen(*_pDisplay, *this)); // Home menu settings screen + menuloop.push_back(new CTimeoutsScreen(*_pDisplay, *this)); // Other options screen + } + else if(NVstore.getUserSettings().menuMode == 2) { + menuloop.push_back(new CNoHeaterHomeMenuSelScreen(*_pDisplay, *this)); // No Heater Home menu settings screen + if(getBoardRevision() != 0 && getBoardRevision() != BRD_V2_NOGPIO) // has GPIO support ? + menuloop.push_back(new CGPIOSetupScreen(*_pDisplay, *this)); // GPIO settings screen + } _Screens.push_back(menuloop); // create System Settings screens loop - menuloop.clear(); - menuloop.push_back(new CVersionInfoScreen(*_pDisplay, *this)); // GPIO settings screen - if(!NVstore.getUserSettings().NoHeater) { - menuloop.push_back(new CHourMeterScreen(*_pDisplay, *this)); // Hour Meter screen + if(NVstore.getUserSettings().menuMode == 0 || NVstore.getUserSettings().menuMode == 2) { + menuloop.clear(); + menuloop.push_back(new CVersionInfoScreen(*_pDisplay, *this)); // GPIO settings screen + if(NVstore.getUserSettings().menuMode == 0) { + menuloop.push_back(new CHourMeterScreen(*_pDisplay, *this)); // Hour Meter screen + } + menuloop.push_back(new CWiFiScreen(*_pDisplay, *this)); + menuloop.push_back(new CMQTTScreen(*_pDisplay, *this)); + menuloop.push_back(new CBTScreen(*_pDisplay, *this)); + _Screens.push_back(menuloop); } - menuloop.push_back(new CWiFiScreen(*_pDisplay, *this)); - menuloop.push_back(new CMQTTScreen(*_pDisplay, *this)); - menuloop.push_back(new CBTScreen(*_pDisplay, *this)); + + // create heater tuning screens loop - password protected + menuloop.clear(); + menuloop.push_back(new CFuelMixtureScreen(*_pDisplay, *this)); // mixture tuning + menuloop.push_back(new CHeaterSettingsScreen(*_pDisplay, *this)); // heater system tuning + menuloop.push_back(new CFuelCalScreen(*_pDisplay, *this)); // fuel pump calibration _Screens.push_back(menuloop); // create branch screens @@ -522,7 +535,7 @@ CScreenManager::checkUpdate() // Basic Control // Clock // return to those upon timeout, otherwise return to Basic Control screen - if((_rootMenu > 2) || ((_rootMenu == 0) && NVstore.getUserSettings().NoHeater)) { + if((_rootMenu > 2) || ((_rootMenu == 0) && NVstore.getUserSettings().menuMode)) { uint8_t userHomeMenu = NVstore.getUserSettings().HomeMenu.onTimeout; if(userHomeMenu) { // allow user to override defualt screen userHomeMenu--; diff --git a/src/OLED/ScreenManager.h b/src/OLED/ScreenManager.h index 5321619..0c63c47 100644 --- a/src/OLED/ScreenManager.h +++ b/src/OLED/ScreenManager.h @@ -45,7 +45,7 @@ class CScreenManager { void _changeSubMenu(int dir); void _dim(bool state); public: - enum eUIMenuSets { RootMenuLoop, TimerMenuLoop, TuningMenuLoop, UserSettingsLoop, SystemSettingsLoop, BranchMenu }; + enum eUIMenuSets { RootMenuLoop, TimerMenuLoop, UserSettingsLoop, SystemSettingsLoop, TuningMenuLoop, BranchMenu }; enum eUIRootMenus { DetailedControlUI, BasicControlUI, ClockUI, ModeUI, GPIOInfoUI, TrunkUI }; enum eUITimerMenus { TimerOverviewUI, Timer1UI, Timer2UI, Timer3UI, Timer4UI, Timer5UI, Timer6UI, Timer7UI, Timer8UI, Timer9UI, Timer10UI, Timer11UI, Timer12UI, Timer13UI, Timer14UI }; diff --git a/src/Utility/BTC_JSON.cpp b/src/Utility/BTC_JSON.cpp index 8fe66f6..4761fab 100644 --- a/src/Utility/BTC_JSON.cpp +++ b/src/Utility/BTC_JSON.cpp @@ -326,6 +326,23 @@ void interpretJsonCommand(char* pLine) NVstore.setHeaterTuning(ht); } } + else if(strcmp("SMenu", it->key) == 0) { + sUserSettings us = NVstore.getUserSettings(); + us.menuMode = it->value.as(); + if(us.menuMode <=2) { + NVstore.setUserSettings(us); + NVstore.save(); + NVstore.doSave(); + switch(us.menuMode) { + case 0: DebugPort.println("Restarting ESP to invoke Full menu control mode"); break; + case 1: DebugPort.println("Restarting ESP to invoke Basic menu mode"); break; + case 2: DebugPort.println("Restarting ESP to invoke cut back No Heater mode"); break; + } + DebugPort.handle(); + delay(1000); + ESP.restart(); + } + } } } @@ -354,7 +371,7 @@ bool makeJSONString(CModerator& moderator, char* opStr, int len) } bSend |= moderator.addJson("TempDesired", getTemperatureDesired(), root); bSend |= moderator.addJson("TempMode", NVstore.getUserSettings().degF, root); - if(!NVstore.getUserSettings().NoHeater) { + if(NVstore.getUserSettings().menuMode < 2) { bSend |= moderator.addJson("TempMin", getHeaterInfo().getTemperature_Min(), root); bSend |= moderator.addJson("TempMax", getHeaterInfo().getTemperature_Max(), root); bSend |= moderator.addJson("TempBody", getHeaterInfo().getTemperature_HeatExchg(), root); @@ -393,7 +410,7 @@ bool makeJSONStringEx(CModerator& moderator, char* opStr, int len) bool bSend = false; // reset should send flag - if(!NVstore.getUserSettings().NoHeater) { + if(NVstore.getUserSettings().menuMode < 2) { bSend |= moderator.addJson("ThermostatMethod", NVstore.getUserSettings().ThermostatMethod, root); bSend |= moderator.addJson("ThermostatWindow", NVstore.getUserSettings().ThermostatWindow, root); int stop = NVstore.getUserSettings().cyclic.Stop; @@ -513,7 +530,7 @@ bool makeJSONStringSysInfo(CModerator& moderator, char* opStr, int len) bSend |= moderator.addJson("SysVer", getVersionStr(), root); bSend |= moderator.addJson("SysDate", getVersionDate(), root); bSend |= moderator.addJson("SysFreeMem", ESP.getFreeHeap(), root); - if(!NVstore.getUserSettings().NoHeater) { + if(NVstore.getUserSettings().menuMode < 2) { bSend |= moderator.addJson("SysRunTime", pHourMeter->getRunTime(), root); bSend |= moderator.addJson("SysGlowTime", pHourMeter->getGlowTime(), root); } diff --git a/src/Utility/NVStorage.cpp b/src/Utility/NVStorage.cpp index a990969..8d00794 100644 --- a/src/Utility/NVStorage.cpp +++ b/src/Utility/NVStorage.cpp @@ -386,7 +386,7 @@ sUserSettings::load() validatedLoad("JSONsingle", JSON.singleElement, 0, u8inBounds, 0, 1); validatedLoad("JSONLF", JSON.LF, 0, u8inBounds, 0, 1); validatedLoad("JSONpad", JSON.padding, 0, u8inBounds, 0, 1); - validatedLoad("NoHeater", NoHeater, 0, u8inBounds, 0, 1); + validatedLoad("menuMode", menuMode, 0, u8inBounds, 0, 2); validatedLoad("Clock12hr", clock12hr, 0, u8inBounds, 0, 1); preferences.end(); } @@ -419,7 +419,7 @@ sUserSettings::save() preferences.putUChar("JSONsingle", JSON.singleElement); preferences.putUChar("JSONLF", JSON.LF); preferences.putUChar("JSONpad", JSON.padding); - preferences.putUChar("NoHeater", NoHeater); + preferences.putUChar("menuMode", menuMode); preferences.putUChar("Clock12hr", clock12hr); preferences.end(); } diff --git a/src/Utility/NVStorage.h b/src/Utility/NVStorage.h index 8a31e82..dea2580 100644 --- a/src/Utility/NVStorage.h +++ b/src/Utility/NVStorage.h @@ -264,7 +264,7 @@ struct sUserSettings : public CESP32_NVStorage { sHomeMenuActions HomeMenu; sGPIOparams GPIO; sJSONoptions JSON; - uint8_t NoHeater; + uint8_t menuMode; // 0 normal, 1, basic, 2 no heater uint8_t clock12hr; bool valid() { @@ -307,7 +307,7 @@ struct sUserSettings : public CESP32_NVStorage { cyclic.init(); HomeMenu.init(); JSON.init(); - NoHeater = 0; + menuMode = 0; clock12hr = 0; }; void load(); @@ -331,7 +331,7 @@ struct sUserSettings : public CESP32_NVStorage { cyclic = rhs.cyclic; HomeMenu = rhs.HomeMenu; JSON = rhs.JSON; - NoHeater = rhs.NoHeater; + menuMode = rhs.menuMode; clock12hr = rhs.clock12hr; return *this; }