Heater settings now explain PF-X and SN-X by toggling their actual effect.

First press if display is dimmed now brightens display but does not perform an action.
This commit is contained in:
rljonesau 2019-01-20 14:19:38 +11:00
parent a6ea647724
commit a218218db0
4 changed files with 100 additions and 57 deletions

View file

@ -25,7 +25,6 @@
#include "../Protocol/helpers.h" #include "../Protocol/helpers.h"
#include "../Utility/UtilClasses.h" #include "../Utility/UtilClasses.h"
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// //
// CHeaterSettingsScreen // CHeaterSettingsScreen
@ -34,19 +33,27 @@
// //
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
static const int Line3 = 14;
static const int Line2 = 27;
static const int Line1 = 40;
static const int Column = 96;
static const int plugPowers[] = { 35, 40, 45, 80, 85, 90};
CHeaterSettingsScreen::CHeaterSettingsScreen(C128x64_OLED& display, CScreenManager& mgr) : CPasswordScreen(display, mgr) CHeaterSettingsScreen::CHeaterSettingsScreen(C128x64_OLED& display, CScreenManager& mgr) : CPasswordScreen(display, mgr)
{ {
_rowSel = 0; _rowSel = 0;
_fanSensor = 1; _fanSensor = 1;
_glowPower = 5; _glowDrive = 5;
_sysVoltage = 12; _sysVoltage = 12;
_animateCount = 0;
} }
void void
CHeaterSettingsScreen::onSelect() CHeaterSettingsScreen::onSelect()
{ {
_fanSensor = getHeaterInfo().getFan_Sensor(); _fanSensor = getHeaterInfo().getFan_Sensor();
_glowPower = getHeaterInfo().getGlow_Drive(); _glowDrive = getHeaterInfo().getGlow_Drive();
_sysVoltage = int(getHeaterInfo().getSystemVoltage()); _sysVoltage = int(getHeaterInfo().getSystemVoltage());
} }
@ -54,12 +61,8 @@ bool
CHeaterSettingsScreen::show() CHeaterSettingsScreen::show()
{ {
char msg[20]; char msg[20];
int xPos, yPos;
_display.clearDisplay(); _display.clearDisplay();
yPos = 14;
if(!CPasswordScreen::show()) { // for showing "saving settings" if(!CPasswordScreen::show()) { // for showing "saving settings"
if(_rowSel == 4) { if(_rowSel == 4) {
@ -69,20 +72,14 @@ CHeaterSettingsScreen::show()
} }
else { else {
_printInverted(_display.xCentre(), 0, " Heater Settings ", true, eCentreJustify); _printInverted(_display.xCentre(), 0, " Heater Settings ", true, eCentreJustify);
_printMenuText(98, yPos, "Glow plug power:", false, eRightJustify); _printMenuText(97, Line3, "System voltage:", false, eRightJustify);
sprintf(msg, "PF-%d", _glowPower); _printMenuText(97, Line2, "Fan sensor:", false, eRightJustify);
_printMenuText(100, yPos, msg, _rowSel == 3); _printMenuText(97, Line1, "Glowplug power:", false, eRightJustify);
yPos = 27;
_printMenuText(98, yPos, "Fan sensor:", false, eRightJustify);
sprintf(msg, "SN-%d", _fanSensor);
_printMenuText(100, yPos, msg, _rowSel == 2);
yPos = 40;
_printMenuText(98, yPos, "System voltage:", false, eRightJustify);
sprintf(msg, "%dV", _sysVoltage); sprintf(msg, "%dV", _sysVoltage);
_printMenuText(100, yPos, msg, _rowSel == 1); _printMenuText(Column, Line3, msg, _rowSel == 3);
// navigation line // navigation line
yPos = 53; int yPos = 53;
xPos = _display.xCentre(); int xPos = _display.xCentre();
_printMenuText(xPos, yPos, "<- exit ->", _rowSel == 0, eCentreJustify); _printMenuText(xPos, yPos, "<- exit ->", _rowSel == 0, eCentreJustify);
} }
} }
@ -91,6 +88,61 @@ CHeaterSettingsScreen::show()
} }
bool
CHeaterSettingsScreen::animate()
{
char msg[16];
if(isPasswordBusy() || (_rowSel == 4)) { // Password screen activity
_printMenuText(Column, Line2, " ");
_printMenuText(Column, Line1, " ");
if(_rowSel == 4)
_printMenuText(_display.xCentre(), 43, "confirm save", false, eCentreJustify);
}
else {
_animateCount++;
ROLLUPPERLIMIT(_animateCount, 9, 0);
if(_rowSel == 1) {
_display.drawRect(Column-border, Line1-border, 34, 8+2*border, BLACK);
_display.drawRoundRect(Column-border, Line1-border, 34, 8+2*border, radius, WHITE);
}
else {
_printMenuText(Column, Line1, " ");
}
if(_animateCount < 4)
sprintf(msg, "PF-%d ", _glowDrive);
else
sprintf(msg, "(%dW)", plugPowers[_glowDrive-1]);
_printMenuText(Column, Line1, msg);
int xPos = Column;
_printMenuText(xPos, Line2, " ", _rowSel == 2); // erase, but create selection loop
if(_animateCount < 4) {
sprintf(msg, "SN-%d", _fanSensor);
_printMenuText(Column, Line2, msg/*, _rowSel == 2*/);
}
else {
_printMenuText(xPos, Line2, "(");
xPos += 6;
// .
// draw old fashioned divide symbol -----
// .
int barOfs = 3;
_display.drawLine(xPos, Line2+barOfs, xPos+4, Line2+barOfs, WHITE);
_display.drawPixel(xPos+2, Line2+barOfs-2, WHITE);
_display.drawPixel(xPos+2, Line2+barOfs+2, WHITE);
xPos += 6;
sprintf(msg, "%d)", _fanSensor);
_printMenuText(xPos, Line2, msg);
}
}
return true;
}
bool bool
CHeaterSettingsScreen::keyHandler(uint8_t event) CHeaterSettingsScreen::keyHandler(uint8_t event)
{ {
@ -145,7 +197,7 @@ CHeaterSettingsScreen::keyHandler(uint8_t event)
_showStoringMessage(); _showStoringMessage();
setSystemVoltage(float(_sysVoltage)); setSystemVoltage(float(_sysVoltage));
setFanSensor(_fanSensor); setFanSensor(_fanSensor);
setGlowDrive(_glowPower); setGlowDrive(_glowDrive);
saveNV(); saveNV();
_rowSel = 0; _rowSel = 0;
break; break;
@ -174,16 +226,16 @@ void
CHeaterSettingsScreen::_adjust(int dir) CHeaterSettingsScreen::_adjust(int dir)
{ {
switch(_rowSel) { switch(_rowSel) {
case 1: // system voltage case 1: // glow power
_sysVoltage = (_sysVoltage == 12) ? 24 : 12; _glowDrive += dir;
UPPERLIMIT(_glowDrive, 6);
LOWERLIMIT(_glowDrive, 1);
break; break;
case 2: // fan sensor case 2: // fan sensor
_fanSensor = (_fanSensor == 1) ? 2 : 1; _fanSensor = (_fanSensor == 1) ? 2 : 1;
break; break;
case 3: // glow power case 3: // system voltage
_glowPower += dir; _sysVoltage = (_sysVoltage == 12) ? 24 : 12;
UPPERLIMIT(_glowPower, 6);
LOWERLIMIT(_glowPower, 1);
break; break;
} }
} }

View file

@ -34,10 +34,12 @@ class CHeaterSettingsScreen : public CPasswordScreen
void _adjust(int dir); void _adjust(int dir);
int _sysVoltage; int _sysVoltage;
int _fanSensor; int _fanSensor;
int _glowPower; int _glowDrive;
int _animateCount;
public: public:
CHeaterSettingsScreen(C128x64_OLED& display, CScreenManager& mgr); CHeaterSettingsScreen(C128x64_OLED& display, CScreenManager& mgr);
bool show(); bool show();
bool animate();
bool keyHandler(uint8_t event); bool keyHandler(uint8_t event);
void onSelect(); void onSelect();
}; };

View file

@ -43,6 +43,7 @@ public:
bool show(); bool show();
bool keyHandler(uint8_t event); bool keyHandler(uint8_t event);
bool animate() { return CScreen::animate(); }; bool animate() { return CScreen::animate(); };
bool isPasswordBusy() { return (_SaveTime != 0) || _bGetPassword; };
}; };
#endif #endif

View file

@ -199,7 +199,6 @@ CScreenManager::checkUpdate()
return true; return true;
} }
else if(_settingScreen >= 0) { else if(_settingScreen >= 0) {
DebugPort.println("setting screen show");
_SettingsScreens[_settingScreen]->show(); _SettingsScreens[_settingScreen]->show();
_bReqUpdate = false; _bReqUpdate = false;
return true; return true;
@ -228,15 +227,9 @@ CScreenManager::reqUpdate()
bool bool
CScreenManager::animate() CScreenManager::animate()
{ {
if(_settingScreen >= 0) { if(_settingScreen >= 0) return _SettingsScreens[_settingScreen]->animate();
return _SettingsScreens[_settingScreen]->animate(); if(_timerScreen >= 0) return _TimerScreens[_timerScreen]->animate();
} if(_currentScreen >= 0) return _Screens[_currentScreen]->animate();
if(_timerScreen >= 0) {
return _TimerScreens[_timerScreen]->animate();
}
if(_currentScreen >= 0) {
return _Screens[_currentScreen]->animate();
}
return false; return false;
} }
@ -250,13 +243,9 @@ CScreenManager::refresh()
void void
CScreenManager::_switchScreen() CScreenManager::_switchScreen()
{ {
if(_timerScreen >= 0) if(_timerScreen >= 0) _TimerScreens[_timerScreen]->onSelect();
_TimerScreens[_timerScreen]->onSelect(); else if(_settingScreen >= 0) _SettingsScreens[_settingScreen]->onSelect();
else if(_settingScreen >= 0) { else if(_currentScreen >= 0) _Screens[_currentScreen]->onSelect();
_SettingsScreens[_settingScreen]->onSelect();
}
else if(_currentScreen >= 0)
_Screens[_currentScreen]->onSelect();
reqUpdate(); reqUpdate();
} }
@ -305,21 +294,20 @@ CScreenManager::prevScreen()
void void
CScreenManager::keyHandler(uint8_t event) CScreenManager::keyHandler(uint8_t event)
{ {
if(_bSetTime) if(_DimTime == 0) {
_SetTimeScreen->keyHandler(event);
else if(_settingScreen >= 0) {
DebugPort.println("setting screen keyhandler");
_SettingsScreens[_settingScreen]->keyHandler(event);
}
else if(_timerScreen >= 0)
_TimerScreens[_timerScreen]->keyHandler(event);
else if(_currentScreen >= 0)
_Screens[_currentScreen]->keyHandler(event);
if(_DimTime == 0)
_pDisplay->dim(false); _pDisplay->dim(false);
_DimTime = (millis() + NVstore.getDimTime()) | 1;
return; // initial press when dimmed is thrown away
}
_DimTime = (millis() + NVstore.getDimTime()) | 1; _DimTime = (millis() + NVstore.getDimTime()) | 1;
// _DimTime = (millis() + 60000) | 1;
// call handler for active screen
if(_bSetTime) _SetTimeScreen->keyHandler(event);
else if(_settingScreen >= 0) _SettingsScreens[_settingScreen]->keyHandler(event);
else if(_timerScreen >= 0) _TimerScreens[_timerScreen]->keyHandler(event);
else if(_currentScreen >= 0) _Screens[_currentScreen]->keyHandler(event);
} }
void void