From 12ed7301dc2ee167c0c9152b65e170603b4bcedf Mon Sep 17 00:00:00 2001 From: rljonesau Date: Thu, 28 Feb 2019 19:56:13 +1100 Subject: [PATCH] Added initUI calls, along with onSelect when screens come into view - ensures fresh start every time --- .../src/OLED/FuelMixtureScreen.cpp | 12 +++++-- .../src/OLED/FuelMixtureScreen.h | 1 + .../src/OLED/HeaterSettingsScreen.cpp | 12 +++++-- .../src/OLED/HeaterSettingsScreen.h | 1 + .../src/OLED/PasswordScreen.cpp | 13 +++++++- .../BTCDieselHeater/src/OLED/PasswordScreen.h | 2 ++ .../src/OLED/PrimingScreen.cpp | 29 ++++++++++++++--- .../BTCDieselHeater/src/OLED/PrimingScreen.h | 5 ++- Arduino/BTCDieselHeater/src/OLED/Screen.cpp | 4 +++ Arduino/BTCDieselHeater/src/OLED/Screen.h | 1 + .../src/OLED/ScreenManager.cpp | 32 +++++++++++++++---- .../BTCDieselHeater/src/OLED/ScreenManager.h | 3 +- .../src/OLED/SetClockScreen.cpp | 22 ++++++++++--- .../BTCDieselHeater/src/OLED/SetClockScreen.h | 4 ++- .../src/OLED/SetTimerScreen.cpp | 23 ++++++++----- .../BTCDieselHeater/src/OLED/SetTimerScreen.h | 3 +- .../src/OLED/SettingsScreen.cpp | 16 +++++++++- .../BTCDieselHeater/src/OLED/SettingsScreen.h | 2 ++ .../BTCDieselHeater/src/OLED/WiFiScreen.cpp | 16 +++++++--- Arduino/BTCDieselHeater/src/OLED/WiFiScreen.h | 2 ++ 20 files changed, 164 insertions(+), 39 deletions(-) diff --git a/Arduino/BTCDieselHeater/src/OLED/FuelMixtureScreen.cpp b/Arduino/BTCDieselHeater/src/OLED/FuelMixtureScreen.cpp index 04ae0a8..92d4360 100644 --- a/Arduino/BTCDieselHeater/src/OLED/FuelMixtureScreen.cpp +++ b/Arduino/BTCDieselHeater/src/OLED/FuelMixtureScreen.cpp @@ -37,19 +37,27 @@ CFuelMixtureScreen::CFuelMixtureScreen(C128x64_OLED& display, CScreenManager& mgr) : CPasswordScreen(display, mgr) { - _rowSel = 0; - _colSel = 0; + _initUI(); } void CFuelMixtureScreen::onSelect() { + CPasswordScreen::onSelect(); + _initUI(); adjPump[0] = getHeaterInfo().getPump_Min(); adjPump[1] = getHeaterInfo().getPump_Max(); adjFan[0] = getHeaterInfo().getFan_Min(); adjFan[1] = getHeaterInfo().getFan_Max(); } +void +CFuelMixtureScreen::_initUI() +{ + _rowSel = 0; + _colSel = 0; +} + bool CFuelMixtureScreen::show() { diff --git a/Arduino/BTCDieselHeater/src/OLED/FuelMixtureScreen.h b/Arduino/BTCDieselHeater/src/OLED/FuelMixtureScreen.h index 0adf2c3..160bc6d 100644 --- a/Arduino/BTCDieselHeater/src/OLED/FuelMixtureScreen.h +++ b/Arduino/BTCDieselHeater/src/OLED/FuelMixtureScreen.h @@ -34,6 +34,7 @@ class CFuelMixtureScreen : public CPasswordScreen { int _rowSel; int _colSel; void _adjustSetting(int dir); + void _initUI(); public: CFuelMixtureScreen(C128x64_OLED& display, CScreenManager& mgr); diff --git a/Arduino/BTCDieselHeater/src/OLED/HeaterSettingsScreen.cpp b/Arduino/BTCDieselHeater/src/OLED/HeaterSettingsScreen.cpp index cc00c25..bcb8877 100644 --- a/Arduino/BTCDieselHeater/src/OLED/HeaterSettingsScreen.cpp +++ b/Arduino/BTCDieselHeater/src/OLED/HeaterSettingsScreen.cpp @@ -42,21 +42,29 @@ static const int plugPowers[] = { 35, 40, 45, 80, 85, 90}; CHeaterSettingsScreen::CHeaterSettingsScreen(C128x64_OLED& display, CScreenManager& mgr) : CPasswordScreen(display, mgr) { - _rowSel = 0; + _initUI(); _fanSensor = 1; _glowDrive = 5; _sysVoltage = 12; - _animateCount = 0; } void CHeaterSettingsScreen::onSelect() { + CPasswordScreen::onSelect(); + _initUI(); _fanSensor = getHeaterInfo().getFan_Sensor(); _glowDrive = getHeaterInfo().getGlow_Drive(); _sysVoltage = int(getHeaterInfo().getSystemVoltage()); } +void +CHeaterSettingsScreen::_initUI() +{ + _rowSel = 0; + _animateCount = 0; +} + bool CHeaterSettingsScreen::show() { diff --git a/Arduino/BTCDieselHeater/src/OLED/HeaterSettingsScreen.h b/Arduino/BTCDieselHeater/src/OLED/HeaterSettingsScreen.h index 76e9445..36f439a 100644 --- a/Arduino/BTCDieselHeater/src/OLED/HeaterSettingsScreen.h +++ b/Arduino/BTCDieselHeater/src/OLED/HeaterSettingsScreen.h @@ -36,6 +36,7 @@ class CHeaterSettingsScreen : public CPasswordScreen int _fanSensor; int _glowDrive; int _animateCount; + void _initUI(); public: CHeaterSettingsScreen(C128x64_OLED& display, CScreenManager& mgr); bool show(); diff --git a/Arduino/BTCDieselHeater/src/OLED/PasswordScreen.cpp b/Arduino/BTCDieselHeater/src/OLED/PasswordScreen.cpp index 9fcea35..46a3fff 100644 --- a/Arduino/BTCDieselHeater/src/OLED/PasswordScreen.cpp +++ b/Arduino/BTCDieselHeater/src/OLED/PasswordScreen.cpp @@ -36,6 +36,18 @@ CPasswordScreen::CPasswordScreen(C128x64_OLED& display, CScreenManager& mgr) : CScreenHeader(display, mgr) +{ + _initUI(); +} + +void +CPasswordScreen::onSelect() +{ + _initUI(); +} + +void +CPasswordScreen::_initUI() { _bGetPassword = false; _bPasswordOK = false; @@ -45,7 +57,6 @@ CPasswordScreen::CPasswordScreen(C128x64_OLED& display, CScreenManager& mgr) : C _SaveTime = 0; } - bool CPasswordScreen::show() { diff --git a/Arduino/BTCDieselHeater/src/OLED/PasswordScreen.h b/Arduino/BTCDieselHeater/src/OLED/PasswordScreen.h index b7de6ce..ca77715 100644 --- a/Arduino/BTCDieselHeater/src/OLED/PasswordScreen.h +++ b/Arduino/BTCDieselHeater/src/OLED/PasswordScreen.h @@ -38,8 +38,10 @@ protected: void _getPassword(); bool _isPasswordOK() { return _bPasswordOK; }; void _showStoringMessage(); + void _initUI(); public: CPasswordScreen(C128x64_OLED& display, CScreenManager& mgr); + void onSelect(); bool show(); bool keyHandler(uint8_t event); bool animate(); diff --git a/Arduino/BTCDieselHeater/src/OLED/PrimingScreen.cpp b/Arduino/BTCDieselHeater/src/OLED/PrimingScreen.cpp index cac7f4a..3e24369 100644 --- a/Arduino/BTCDieselHeater/src/OLED/PrimingScreen.cpp +++ b/Arduino/BTCDieselHeater/src/OLED/PrimingScreen.cpp @@ -35,6 +35,26 @@ CPrimingScreen::CPrimingScreen(C128x64_OLED& display, CScreenManager& mgr) : CScreenHeader(display, mgr) +{ + _initUI(); +} + +void +CPrimingScreen::onSelect() +{ + _stopPump(); + _initUI(); +} + +void +CPrimingScreen::onExit() +{ + _stopPump(); +} + + +void +CPrimingScreen::_initUI() { _PrimeStop = 0; _PrimeCheck = 0; @@ -42,7 +62,6 @@ CPrimingScreen::CPrimingScreen(C128x64_OLED& display, CScreenManager& mgr) : CSc _colSel = 0; } - bool CPrimingScreen::show() { @@ -92,12 +111,12 @@ CPrimingScreen::show() // recognise if heater has stopped pump, after an initial holdoff upon first starting long tDelta = millis() - _PrimeCheck; if(_PrimeCheck && tDelta > 0 && pumpHz < 0.1) { - stopPump(); + _stopPump(); } // test if time is up, stop priming if so tDelta = millis() - _PrimeStop; if(_PrimeStop && tDelta > 0) { - stopPump(); + _stopPump(); } if(_PrimeStop) { @@ -191,7 +210,7 @@ CPrimingScreen::keyHandler(uint8_t event) _PrimeCheck = millis() + 3000; // holdoff upon start before testing for heater shutting off pump } else { - stopPump(); + _stopPump(); } _ScreenManager.reqUpdate(); @@ -200,7 +219,7 @@ CPrimingScreen::keyHandler(uint8_t event) } void -CPrimingScreen::stopPump() +CPrimingScreen::_stopPump() { reqPumpPrime(false); _PrimeCheck = 0; diff --git a/Arduino/BTCDieselHeater/src/OLED/PrimingScreen.h b/Arduino/BTCDieselHeater/src/OLED/PrimingScreen.h index e5f6ff5..75d5471 100644 --- a/Arduino/BTCDieselHeater/src/OLED/PrimingScreen.h +++ b/Arduino/BTCDieselHeater/src/OLED/PrimingScreen.h @@ -33,9 +33,12 @@ class CPrimingScreen : public CScreenHeader { unsigned long _PrimeCheck; int _rowSel; int _colSel; - void stopPump(); + void _stopPump(); + void _initUI(); public: CPrimingScreen(C128x64_OLED& display, CScreenManager& mgr); + void onSelect(); + void onExit(); bool show(); bool keyHandler(uint8_t event); bool animate() { return CScreen::animate(); }; diff --git a/Arduino/BTCDieselHeater/src/OLED/Screen.cpp b/Arduino/BTCDieselHeater/src/OLED/Screen.cpp index 3bfa466..e5d3b36 100644 --- a/Arduino/BTCDieselHeater/src/OLED/Screen.cpp +++ b/Arduino/BTCDieselHeater/src/OLED/Screen.cpp @@ -44,6 +44,10 @@ CScreen::onSelect() { } +void +CScreen::onExit() +{ +} void CScreen::_printMenuText(int x, int y, const char* str, bool selected, eJUSTIFY justify, int border, int radius) diff --git a/Arduino/BTCDieselHeater/src/OLED/Screen.h b/Arduino/BTCDieselHeater/src/OLED/Screen.h index 66af870..7198576 100644 --- a/Arduino/BTCDieselHeater/src/OLED/Screen.h +++ b/Arduino/BTCDieselHeater/src/OLED/Screen.h @@ -49,6 +49,7 @@ public: CScreen(C128x64_OLED& disp, CScreenManager& mgr); virtual ~CScreen(); virtual void onSelect(); + virtual void onExit(); virtual bool animate(); virtual bool show(); virtual bool keyHandler(uint8_t event) { return false; }; diff --git a/Arduino/BTCDieselHeater/src/OLED/ScreenManager.cpp b/Arduino/BTCDieselHeater/src/OLED/ScreenManager.cpp index f7b88ed..ca20f75 100644 --- a/Arduino/BTCDieselHeater/src/OLED/ScreenManager.cpp +++ b/Arduino/BTCDieselHeater/src/OLED/ScreenManager.cpp @@ -172,7 +172,7 @@ CScreenManager::begin(bool bNoClock) _currentScreen = 1; // basic control screen #endif - _switchScreen(); + _enterScreen(); } bool @@ -186,6 +186,7 @@ CScreenManager::checkUpdate() _pDisplay->dim(true); _DimTime = 0; + _leaveScreen(); // fall back to main menu selectTimerScreen(false); selectSetTimeScreen(false); @@ -195,6 +196,7 @@ CScreenManager::checkUpdate() if(_currentScreen > 2) { _currentScreen = 1; } + _enterScreen(); } } @@ -253,7 +255,7 @@ CScreenManager::refresh() } void -CScreenManager::_switchScreen() +CScreenManager::_enterScreen() { if(_timerScreen >= 0) _TimerScreens[_timerScreen]->onSelect(); else if(_settingScreen >= 0) _SettingsScreens[_settingScreen]->onSelect(); @@ -262,9 +264,19 @@ CScreenManager::_switchScreen() reqUpdate(); } +void +CScreenManager::_leaveScreen() +{ + if(_timerScreen >= 0) _TimerScreens[_timerScreen]->onExit(); + else if(_settingScreen >= 0) _SettingsScreens[_settingScreen]->onExit(); + else if(_currentScreen >= 0) _Screens[_currentScreen]->onExit(); +} + void CScreenManager::nextScreen() { + _leaveScreen(); + if(_bSetTime) { } @@ -280,12 +292,15 @@ CScreenManager::nextScreen() _currentScreen++; ROLLUPPERLIMIT(_currentScreen, _Screens.size()-1, 0); } - _switchScreen(); + + _enterScreen(); } void CScreenManager::prevScreen() { + _leaveScreen(); + if(_bSetTime) { } else if(_timerScreen >=0) { @@ -300,7 +315,7 @@ CScreenManager::prevScreen() _currentScreen--; ROLLLOWERLIMIT(_currentScreen, 0, _Screens.size()-1); } - _switchScreen(); + _enterScreen(); } void @@ -325,28 +340,31 @@ CScreenManager::keyHandler(uint8_t event) void CScreenManager::selectTimerScreen(bool show) { + _leaveScreen(); _timerScreen = show ? 0 : -1; _settingScreen = -1; _bSetTime = false; - _switchScreen(); + _enterScreen(); } void CScreenManager::selectSettingsScreen(bool show) { + _leaveScreen(); _settingScreen = show ? 0 : -1; _timerScreen = -1; _bSetTime = false; - _switchScreen(); + _enterScreen(); } void CScreenManager::selectSetTimeScreen(bool show) { + _leaveScreen(); _bSetTime = show; _settingScreen = -1; _timerScreen = -1; - _switchScreen(); + _enterScreen(); } void diff --git a/Arduino/BTCDieselHeater/src/OLED/ScreenManager.h b/Arduino/BTCDieselHeater/src/OLED/ScreenManager.h index bc7d085..2040c94 100644 --- a/Arduino/BTCDieselHeater/src/OLED/ScreenManager.h +++ b/Arduino/BTCDieselHeater/src/OLED/ScreenManager.h @@ -42,7 +42,8 @@ class CScreenManager { bool _bSetTime; unsigned long _DimTime; bool _bReqUpdate; - void _switchScreen(); + void _enterScreen(); + void _leaveScreen(); CRebootScreen* _pRebootScreen; public: CScreenManager(); diff --git a/Arduino/BTCDieselHeater/src/OLED/SetClockScreen.cpp b/Arduino/BTCDieselHeater/src/OLED/SetClockScreen.cpp index 3bdaed3..fef534e 100644 --- a/Arduino/BTCDieselHeater/src/OLED/SetClockScreen.cpp +++ b/Arduino/BTCDieselHeater/src/OLED/SetClockScreen.cpp @@ -36,6 +36,18 @@ CSetClockScreen::CSetClockScreen(C128x64_OLED& display, CScreenManager& mgr) : CScreenHeader(display, mgr) +{ + _initUI(); +} + +void +CSetClockScreen::onSelect() +{ + _initUI(); +} + +void +CSetClockScreen::_initUI() { _rowSel = 0; _nextT = millis(); @@ -148,7 +160,7 @@ CSetClockScreen::keyHandler(uint8_t event) _ScreenManager.selectSetTimeScreen(false); } else { - adjTimeDate(-1); + _adjTimeDate(-1); } } // press RIGHT @@ -157,7 +169,7 @@ CSetClockScreen::keyHandler(uint8_t event) _ScreenManager.selectSetTimeScreen(false); } else { - adjTimeDate(+1); + _adjTimeDate(+1); } } // press UP @@ -179,11 +191,11 @@ CSetClockScreen::keyHandler(uint8_t event) if(_rowSel>=1) { // hold RIGHT if(event & key_Right) { - adjTimeDate(+1); + _adjTimeDate(+1); } // hold LEFT if(event & key_Left) { - adjTimeDate(-1); + _adjTimeDate(-1); } } } @@ -194,7 +206,7 @@ CSetClockScreen::keyHandler(uint8_t event) } void -CSetClockScreen::adjTimeDate(int dir) +CSetClockScreen::_adjTimeDate(int dir) { int days; switch(_rowSel) { diff --git a/Arduino/BTCDieselHeater/src/OLED/SetClockScreen.h b/Arduino/BTCDieselHeater/src/OLED/SetClockScreen.h index a17346e..45dafdc 100644 --- a/Arduino/BTCDieselHeater/src/OLED/SetClockScreen.h +++ b/Arduino/BTCDieselHeater/src/OLED/SetClockScreen.h @@ -36,10 +36,12 @@ class CSetClockScreen : public CScreenHeader { BTCDateTime working; unsigned long _SaveTime; - void adjTimeDate(int dir); + void _adjTimeDate(int dir); + void _initUI(); public: CSetClockScreen(C128x64_OLED& display, CScreenManager& mgr); + void onSelect(); bool show(); void showTime(int); bool keyHandler(uint8_t event); diff --git a/Arduino/BTCDieselHeater/src/OLED/SetTimerScreen.cpp b/Arduino/BTCDieselHeater/src/OLED/SetTimerScreen.cpp index 4f50310..24d8e35 100644 --- a/Arduino/BTCDieselHeater/src/OLED/SetTimerScreen.cpp +++ b/Arduino/BTCDieselHeater/src/OLED/SetTimerScreen.cpp @@ -38,18 +38,25 @@ const char* briefDOW[] = { "S", "M", "T", "W", "T", "F", "S" }; CSetTimerScreen::CSetTimerScreen(C128x64_OLED& display, CScreenManager& mgr, int instance) : CScreenHeader(display, mgr) { - _rowSel = 0; - _colSel = 0; - _SaveTime = 0; + _initUI(); _instance = instance; } void CSetTimerScreen::onSelect() { + _initUI(); NVstore.getTimerInfo(_instance, _timer); } +void +CSetTimerScreen::_initUI() +{ + _rowSel = 0; + _colSel = 0; + _SaveTime = 0; +} + bool CSetTimerScreen::show() { @@ -207,8 +214,8 @@ CSetTimerScreen::keyHandler(uint8_t event) bHeld = true; if(_rowSel == 1) { if(_colSel < 4) { - if(event & key_Left) adjust(-1); - if(event & key_Right) adjust(+1); + if(event & key_Left) _adjust(-1); + if(event & key_Right) _adjust(+1); } else if(_colSel == 4) { if(event & key_Right) { @@ -233,7 +240,7 @@ CSetTimerScreen::keyHandler(uint8_t event) if(event & key_Left) { switch(_rowSel) { case 1: - adjust(-1); + _adjust(-1); break; } } @@ -257,7 +264,7 @@ CSetTimerScreen::keyHandler(uint8_t event) switch(_rowSel) { case 1: // adjust selected item - adjust(+1); + _adjust(+1); break; } } @@ -285,7 +292,7 @@ CSetTimerScreen::keyHandler(uint8_t event) void -CSetTimerScreen::adjust(int dir) +CSetTimerScreen::_adjust(int dir) { int days; int maskDOW = 0x01 << _colSel; // if doing Day of Week - (_rowSel == 2) diff --git a/Arduino/BTCDieselHeater/src/OLED/SetTimerScreen.h b/Arduino/BTCDieselHeater/src/OLED/SetTimerScreen.h index 2900472..497c66f 100644 --- a/Arduino/BTCDieselHeater/src/OLED/SetTimerScreen.h +++ b/Arduino/BTCDieselHeater/src/OLED/SetTimerScreen.h @@ -36,8 +36,9 @@ class CSetTimerScreen : public CScreenHeader { int _instance; unsigned long _SaveTime; sTimer _timer; - void adjust(int dir); + void _adjust(int dir); void _printEnabledTimers(); + void _initUI(); public: CSetTimerScreen(C128x64_OLED& display, CScreenManager& mgr, int instance); diff --git a/Arduino/BTCDieselHeater/src/OLED/SettingsScreen.cpp b/Arduino/BTCDieselHeater/src/OLED/SettingsScreen.cpp index 7c29dc3..d79c02f 100644 --- a/Arduino/BTCDieselHeater/src/OLED/SettingsScreen.cpp +++ b/Arduino/BTCDieselHeater/src/OLED/SettingsScreen.cpp @@ -42,11 +42,25 @@ static const int plugPowers[] = { 35, 40, 45, 80, 85, 90}; CSettingsScreen::CSettingsScreen(C128x64_OLED& display, CScreenManager& mgr) : CPasswordScreen(display, mgr) { + _initUI(); +} + +void +CSettingsScreen::onSelect() +{ + // ensure standard entry to screen - especially after a dimming timeout + CPasswordScreen::onSelect(); + _initUI(); +} + +void +CSettingsScreen::_initUI() +{ + // ensure standard entry to screen - especially after a dimming timeout _animateCount = 0; _nAdoptSettings = 0; } - bool CSettingsScreen::show() { diff --git a/Arduino/BTCDieselHeater/src/OLED/SettingsScreen.h b/Arduino/BTCDieselHeater/src/OLED/SettingsScreen.h index 408b32f..0eaf5ab 100644 --- a/Arduino/BTCDieselHeater/src/OLED/SettingsScreen.h +++ b/Arduino/BTCDieselHeater/src/OLED/SettingsScreen.h @@ -31,11 +31,13 @@ class CScreenManager; class CSettingsScreen : public CPasswordScreen { int _animateCount; int _nAdoptSettings; + void _initUI(); public: CSettingsScreen(C128x64_OLED& display, CScreenManager& mgr); bool show(); bool keyHandler(uint8_t event); bool animate(); + void onSelect(); }; #endif \ No newline at end of file diff --git a/Arduino/BTCDieselHeater/src/OLED/WiFiScreen.cpp b/Arduino/BTCDieselHeater/src/OLED/WiFiScreen.cpp index 382030d..dc8a88b 100644 --- a/Arduino/BTCDieselHeater/src/OLED/WiFiScreen.cpp +++ b/Arduino/BTCDieselHeater/src/OLED/WiFiScreen.cpp @@ -23,9 +23,6 @@ #include "KeyPad.h" #include "../Protocol/helpers.h" #include "../Wifi/BTCWifi.h" -// #include "fonts/Tahoma8.h" -// #include "fonts/FranklinGothic.h" -// #include "fonts/Arial.h" #include "../Utility/NVstorage.h" /////////////////////////////////////////////////////////////////////////// @@ -40,12 +37,23 @@ #define STA_HOLD_TIME 10 CWiFiScreen::CWiFiScreen(C128x64_OLED& display, CScreenManager& mgr) : CScreenHeader(display, mgr) +{ + _initUI(); +} + +void +CWiFiScreen::onSelect() +{ + _initUI(); +} + +void +CWiFiScreen::_initUI() { _rowSel = 0; _bShowMAC = false; } - bool CWiFiScreen::show() { diff --git a/Arduino/BTCDieselHeater/src/OLED/WiFiScreen.h b/Arduino/BTCDieselHeater/src/OLED/WiFiScreen.h index cbd5489..dcb1b8e 100644 --- a/Arduino/BTCDieselHeater/src/OLED/WiFiScreen.h +++ b/Arduino/BTCDieselHeater/src/OLED/WiFiScreen.h @@ -31,12 +31,14 @@ class CScreenManager; class CWiFiScreen : public CScreenHeader { public: CWiFiScreen(C128x64_OLED& display, CScreenManager& mgr); + void onSelect(); bool show(); bool keyHandler(uint8_t event); private: int _rowSel; int _repeatCount; bool _bShowMAC; + void _initUI(); }; #endif