Heater tuning and settings now in OLED sub menu which is password protected.
This commit is contained in:
parent
7ddc2c16ef
commit
a6ea647724
21 changed files with 353 additions and 251 deletions
|
@ -316,7 +316,7 @@ void setup() {
|
|||
|
||||
initWifi(WiFi_TriggerPin, FAILEDSSID, FAILEDPASSWORD);
|
||||
#if USE_OTA == 1
|
||||
initOTA();
|
||||
// initOTA();
|
||||
#endif // USE_OTA
|
||||
#if USE_WEBSERVER == 1
|
||||
initWebServer();
|
||||
|
@ -906,6 +906,11 @@ void setSystemVoltage(float val) {
|
|||
NVstore.setSystemVoltage(val);
|
||||
}
|
||||
|
||||
void setGlowDrive(unsigned char val) {
|
||||
NVstore.setGlowDrive(val);
|
||||
}
|
||||
|
||||
|
||||
void saveNV()
|
||||
{
|
||||
NVstore.save();
|
||||
|
|
|
@ -19,6 +19,9 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#ifndef __CLOCKSCREEN_H___
|
||||
#define __CLOCKSCREEN_H___
|
||||
|
||||
#include <stdint.h>
|
||||
#include "ScreenHeader.h"
|
||||
|
||||
|
@ -34,3 +37,5 @@ public:
|
|||
bool show();
|
||||
bool keyHandler(uint8_t event);
|
||||
};
|
||||
|
||||
#endif
|
|
@ -19,6 +19,9 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#ifndef __DETAILEDSCREEN_H__
|
||||
#define __DETAILEDSCREEN_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include "ScreenHeader.h"
|
||||
|
||||
|
@ -50,3 +53,5 @@ public:
|
|||
bool animate();
|
||||
bool keyHandler(uint8_t event);
|
||||
};
|
||||
|
||||
#endif
|
|
@ -32,6 +32,7 @@
|
|||
#include "KeyPad.h"
|
||||
#include "../Protocol/helpers.h"
|
||||
#include "../Wifi/BTCWifi.h"
|
||||
#include "../utility/debugPort.h"
|
||||
|
||||
|
||||
CFuelMixtureScreen::CFuelMixtureScreen(C128x64_OLED& display, CScreenManager& mgr) : CPasswordScreen(display, mgr)
|
||||
|
@ -40,48 +41,32 @@ CFuelMixtureScreen::CFuelMixtureScreen(C128x64_OLED& display, CScreenManager& mg
|
|||
_colSel = 0;
|
||||
}
|
||||
|
||||
void
|
||||
CFuelMixtureScreen::onSelect()
|
||||
{
|
||||
adjPump[0] = getHeaterInfo().getPump_Min();
|
||||
adjPump[1] = getHeaterInfo().getPump_Max();
|
||||
adjFan[0] = getHeaterInfo().getFan_Min();
|
||||
adjFan[1] = getHeaterInfo().getFan_Max();
|
||||
}
|
||||
|
||||
bool
|
||||
CFuelMixtureScreen::show()
|
||||
{
|
||||
CScreenHeader::show();
|
||||
|
||||
char str[16];
|
||||
int xPos, yPos;
|
||||
const int col2 = 90;
|
||||
const int col3 = _display.width() - border;
|
||||
_printInverted(0, 16, " Fuel Settings ", true);
|
||||
|
||||
_display.clearDisplay();
|
||||
|
||||
if(!CPasswordScreen::show()) {
|
||||
|
||||
switch(_rowSel) {
|
||||
case 0:
|
||||
// show settings overview (initial screen entry)
|
||||
// pump max/min
|
||||
yPos = 28;
|
||||
_printMenuText(0, yPos, "Pump (Hz)");
|
||||
sprintf(str, "%.1f", getHeaterInfo().getPump_Min());
|
||||
_printMenuText(col2, yPos, str, false, eRightJustify);
|
||||
sprintf(str, "%.1f", getHeaterInfo().getPump_Max());
|
||||
_printMenuText(col3, yPos, str, false, eRightJustify);
|
||||
// fan max/min
|
||||
yPos = 40;
|
||||
_printMenuText(0, yPos, "Fan (RPM)");
|
||||
sprintf(str, "%d", getHeaterInfo().getFan_Min());
|
||||
_printMenuText(col2, yPos, str, false, eRightJustify);
|
||||
sprintf(str, "%d", getHeaterInfo().getFan_Max());
|
||||
_printMenuText(col3, yPos, str, false, eRightJustify);
|
||||
// navigation line
|
||||
yPos = 53;
|
||||
xPos = _display.xCentre();
|
||||
_printMenuText(xPos, yPos, "<- ->", true, eCentreJustify);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
_display.clearDisplay();
|
||||
// Pump Minimum adjustment
|
||||
yPos = border + 36;
|
||||
_printMenuText(80, yPos, "Min", false, eRightJustify);
|
||||
|
@ -104,10 +89,12 @@ CFuelMixtureScreen::show()
|
|||
_printMenuText(col3, yPos, str, _rowSel == 4, eRightJustify);
|
||||
// navigation line
|
||||
yPos = 53;
|
||||
_printMenuText(_display.xCentre(), yPos, "<- ->", false, eCentreJustify);
|
||||
xPos = _display.xCentre();
|
||||
_printMenuText(xPos, yPos, "<- exit ->", _rowSel == 0, eCentreJustify);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
_printInverted(_display.xCentre(), 0, " Save Fuel Settings ", true, eCentreJustify);
|
||||
_printMenuText(_display.xCentre(), 35, "Press UP to", false, eCentreJustify);
|
||||
_printMenuText(_display.xCentre(), 43, "confirm save", false, eCentreJustify);
|
||||
break;
|
||||
|
@ -121,133 +108,124 @@ CFuelMixtureScreen::show()
|
|||
bool
|
||||
CFuelMixtureScreen::keyHandler(uint8_t event)
|
||||
{
|
||||
if(CPasswordScreen::keyHandler(event)) {
|
||||
if(_isPasswordOK()) {
|
||||
_rowSel = 1;
|
||||
_colSel = 0;
|
||||
// grab current settings upon entry to edit mode
|
||||
adjPump[0] = getHeaterInfo().getPump_Min();
|
||||
adjPump[1] = getHeaterInfo().getPump_Max();
|
||||
adjFan[0] = getHeaterInfo().getFan_Min();
|
||||
adjFan[1] = getHeaterInfo().getFan_Max();
|
||||
if(event & keyPressed) {
|
||||
// press CENTRE
|
||||
if(event & key_Centre) {
|
||||
switch(_rowSel) {
|
||||
case 0:
|
||||
_ScreenManager.selectSettingsScreen(false);
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
_rowSel = 5; // enter save confirm mode
|
||||
break;
|
||||
case 5:
|
||||
_rowSel = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
|
||||
if(event & keyPressed) {
|
||||
// press CENTRE
|
||||
if(event & key_Centre) {
|
||||
switch(_rowSel) {
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
_rowSel = 5; // enter save confirm mode
|
||||
break;
|
||||
case 5:
|
||||
_rowSel = 0;
|
||||
break;
|
||||
}
|
||||
// press LEFT
|
||||
if(event & key_Left) {
|
||||
switch(_rowSel) {
|
||||
case 0:
|
||||
_ScreenManager.prevScreen();
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
_adjustSetting(-1);
|
||||
break;
|
||||
case 5:
|
||||
_rowSel = 0;
|
||||
break;
|
||||
}
|
||||
// press LEFT
|
||||
if(event & key_Left) {
|
||||
}
|
||||
// press RIGHT
|
||||
if(event & key_Right) {
|
||||
switch(_rowSel) {
|
||||
case 0:
|
||||
_ScreenManager.nextScreen();
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
_adjustSetting(+1);
|
||||
break;
|
||||
case 5:
|
||||
_rowSel = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// press UP
|
||||
if(event & key_Up) {
|
||||
if(hasOEMcontroller())
|
||||
_reqOEMWarning();
|
||||
else {
|
||||
switch(_rowSel) {
|
||||
case 0:
|
||||
_ScreenManager.prevScreen();
|
||||
break;
|
||||
// grab current settings upon entry to edit mode
|
||||
adjPump[0] = getHeaterInfo().getPump_Min();
|
||||
adjPump[1] = getHeaterInfo().getPump_Max();
|
||||
adjFan[0] = getHeaterInfo().getFan_Min();
|
||||
adjFan[1] = getHeaterInfo().getFan_Max();
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
_adjustSetting(-1);
|
||||
break;
|
||||
case 5:
|
||||
_rowSel = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// press RIGHT
|
||||
if(event & key_Right) {
|
||||
switch(_rowSel) {
|
||||
case 0:
|
||||
_ScreenManager.nextScreen();
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
_adjustSetting(+1);
|
||||
break;
|
||||
case 5:
|
||||
_rowSel = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// press UP
|
||||
if(event & key_Up) {
|
||||
if(hasOEMcontroller())
|
||||
_reqOEMWarning();
|
||||
else {
|
||||
switch(_rowSel) {
|
||||
case 0:
|
||||
_getPassword();
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
_rowSel++;
|
||||
_colSel = 0;
|
||||
UPPERLIMIT(_rowSel, 4);
|
||||
break;
|
||||
case 5:
|
||||
_showStoringMessage();
|
||||
setPumpMin(adjPump[0]);
|
||||
setPumpMax(adjPump[1]);
|
||||
setFanMin(adjFan[0]);
|
||||
setFanMax(adjFan[1]);
|
||||
saveNV();
|
||||
_rowSel = 0;
|
||||
_ScreenManager.reqUpdate();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// press DOWN
|
||||
if(event & key_Down) {
|
||||
switch(_rowSel) {
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
_rowSel--;
|
||||
_rowSel++;
|
||||
_colSel = 0;
|
||||
UPPERLIMIT(_rowSel, 4);
|
||||
break;
|
||||
case 5:
|
||||
_showStoringMessage();
|
||||
setPumpMin(adjPump[0]);
|
||||
setPumpMax(adjPump[1]);
|
||||
setFanMin(adjFan[0]);
|
||||
setFanMax(adjFan[1]);
|
||||
saveNV();
|
||||
_rowSel = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(event & keyRepeat) {
|
||||
// press DOWN
|
||||
if(event & key_Down) {
|
||||
switch(_rowSel) {
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
int adj = 0;
|
||||
if(event & key_Right) adj = +1;
|
||||
if(event & key_Left) adj = -1;
|
||||
if(adj) {
|
||||
_adjustSetting(adj);
|
||||
}
|
||||
_rowSel--;
|
||||
_colSel = 0;
|
||||
break;
|
||||
case 5:
|
||||
_rowSel = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
_ScreenManager.reqUpdate();
|
||||
}
|
||||
|
||||
|
||||
if(event & keyRepeat) {
|
||||
switch(_rowSel) {
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
int adj = 0;
|
||||
if(event & key_Right) adj = +1;
|
||||
if(event & key_Left) adj = -1;
|
||||
if(adj) {
|
||||
_adjustSetting(adj);
|
||||
}
|
||||
break;
|
||||
}
|
||||
_ScreenManager.reqUpdate();
|
||||
}
|
||||
_ScreenManager.reqUpdate();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -270,6 +248,10 @@ CFuelMixtureScreen::_adjustSetting(int dir)
|
|||
}
|
||||
LOWERLIMIT(adjPump[0], 0.5f);
|
||||
UPPERLIMIT(adjPump[0], 10.f);
|
||||
LOWERLIMIT(adjPump[1], 0.5f);
|
||||
UPPERLIMIT(adjPump[1], 10.f);
|
||||
LOWERLIMIT(adjFan[0], 1000);
|
||||
UPPERLIMIT(adjFan[0], 5000);
|
||||
LOWERLIMIT(adjFan[1], 1000);
|
||||
UPPERLIMIT(adjFan[1], 5000);
|
||||
}
|
|
@ -19,21 +19,20 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#ifndef __FUELMIXTURESCREEN_H__
|
||||
#define __FUELMIXTURESCREEN_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include "PasswordScreen.h"
|
||||
|
||||
class C128x64_OLED;
|
||||
class CScreenManager;
|
||||
//class CProtocol;
|
||||
|
||||
class CFuelMixtureScreen : public CPasswordScreen {
|
||||
// int _PWdig[4];
|
||||
float adjPump[2];
|
||||
short adjFan[2];
|
||||
int _rowSel;
|
||||
int _colSel;
|
||||
// unsigned long _SaveTime;
|
||||
// void _showPassword();
|
||||
void _adjustSetting(int dir);
|
||||
|
||||
public:
|
||||
|
@ -41,4 +40,7 @@ public:
|
|||
bool show();
|
||||
bool keyHandler(uint8_t event);
|
||||
bool animate() { return CScreen::animate(); };
|
||||
void onSelect();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -42,6 +42,14 @@ CHeaterSettingsScreen::CHeaterSettingsScreen(C128x64_OLED& display, CScreenManag
|
|||
_sysVoltage = 12;
|
||||
}
|
||||
|
||||
void
|
||||
CHeaterSettingsScreen::onSelect()
|
||||
{
|
||||
_fanSensor = getHeaterInfo().getFan_Sensor();
|
||||
_glowPower = getHeaterInfo().getGlow_Drive();
|
||||
_sysVoltage = int(getHeaterInfo().getSystemVoltage());
|
||||
}
|
||||
|
||||
bool
|
||||
CHeaterSettingsScreen::show()
|
||||
{
|
||||
|
@ -49,16 +57,18 @@ CHeaterSettingsScreen::show()
|
|||
int xPos, yPos;
|
||||
_display.clearDisplay();
|
||||
|
||||
_printInverted(0, 0, " Heater Settings ", true);
|
||||
|
||||
if(!CPasswordScreen::show()) {
|
||||
yPos = 14;
|
||||
yPos = 14;
|
||||
|
||||
if(!CPasswordScreen::show()) { // for showing "saving settings"
|
||||
|
||||
if(_rowSel == 4) {
|
||||
_printInverted(_display.xCentre(), 0, " Saving Settings ", true, eCentreJustify);
|
||||
_printMenuText(_display.xCentre(), 35, "Press UP to", false, eCentreJustify);
|
||||
_printMenuText(_display.xCentre(), 43, "confirm save", false, eCentreJustify);
|
||||
}
|
||||
else {
|
||||
_printInverted(_display.xCentre(), 0, " Heater Settings ", true, eCentreJustify);
|
||||
_printMenuText(98, yPos, "Glow plug power:", false, eRightJustify);
|
||||
sprintf(msg, "PF-%d", _glowPower);
|
||||
_printMenuText(100, yPos, msg, _rowSel == 3);
|
||||
|
@ -70,12 +80,13 @@ CHeaterSettingsScreen::show()
|
|||
_printMenuText(98, yPos, "System voltage:", false, eRightJustify);
|
||||
sprintf(msg, "%dV", _sysVoltage);
|
||||
_printMenuText(100, yPos, msg, _rowSel == 1);
|
||||
// navigation line
|
||||
yPos = 53;
|
||||
xPos = _display.xCentre();
|
||||
_printMenuText(xPos, yPos, "<- exit ->", _rowSel == 0, eCentreJustify);
|
||||
}
|
||||
// navigation line
|
||||
yPos = 53;
|
||||
xPos = _display.xCentre();
|
||||
_printMenuText(xPos, yPos, "<- ->", _rowSel == 0, eCentreJustify);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -83,78 +94,79 @@ CHeaterSettingsScreen::show()
|
|||
bool
|
||||
CHeaterSettingsScreen::keyHandler(uint8_t event)
|
||||
{
|
||||
if(CPasswordScreen::keyHandler(event)) {
|
||||
if(_isPasswordOK()) {
|
||||
_rowSel++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(event & keyPressed) {
|
||||
// press LEFT to select previous screen
|
||||
if(event & key_Left) {
|
||||
switch(_rowSel) {
|
||||
case 0:
|
||||
_ScreenManager.prevScreen();
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
_adjust(-1);
|
||||
break;
|
||||
case 4:
|
||||
_rowSel = 0; // abort save
|
||||
break;
|
||||
}
|
||||
}
|
||||
// press RIGHT to select next screen
|
||||
if(event & key_Right) {
|
||||
switch(_rowSel) {
|
||||
case 0:
|
||||
_ScreenManager.nextScreen();
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
_adjust(+1);
|
||||
break;
|
||||
case 4:
|
||||
_rowSel = 0; // abort save
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(event & key_Down) {
|
||||
_rowSel--;
|
||||
LOWERLIMIT(_rowSel, 0);
|
||||
}
|
||||
// UP press
|
||||
if(event & key_Up) {
|
||||
switch(_rowSel) {
|
||||
case 0:
|
||||
_getPassword(); // nav line ,request password
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
_rowSel++;
|
||||
UPPERLIMIT(_rowSel, 3);
|
||||
break;
|
||||
case 4: // confirmed save
|
||||
_showStoringMessage();
|
||||
break;
|
||||
}
|
||||
}
|
||||
// CENTRE press
|
||||
if(event & key_Centre) {
|
||||
switch(_rowSel) {
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
_rowSel = 4;
|
||||
break;
|
||||
}
|
||||
if(event & keyPressed) {
|
||||
// press LEFT to select previous screen
|
||||
if(event & key_Left) {
|
||||
switch(_rowSel) {
|
||||
case 0:
|
||||
_ScreenManager.prevScreen();
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
_adjust(-1);
|
||||
break;
|
||||
case 4:
|
||||
_rowSel = 0; // abort save
|
||||
break;
|
||||
}
|
||||
}
|
||||
// press RIGHT to select next screen
|
||||
if(event & key_Right) {
|
||||
switch(_rowSel) {
|
||||
case 0:
|
||||
_ScreenManager.nextScreen();
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
_adjust(+1);
|
||||
break;
|
||||
case 4:
|
||||
_rowSel = 0; // abort save
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(event & key_Down) {
|
||||
_rowSel--;
|
||||
LOWERLIMIT(_rowSel, 0);
|
||||
}
|
||||
// UP press
|
||||
if(event & key_Up) {
|
||||
switch(_rowSel) {
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
_rowSel++;
|
||||
UPPERLIMIT(_rowSel, 3);
|
||||
break;
|
||||
case 4: // confirmed save
|
||||
_showStoringMessage();
|
||||
setSystemVoltage(float(_sysVoltage));
|
||||
setFanSensor(_fanSensor);
|
||||
setGlowDrive(_glowPower);
|
||||
saveNV();
|
||||
_rowSel = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// CENTRE press
|
||||
if(event & key_Centre) {
|
||||
switch(_rowSel) {
|
||||
case 0:
|
||||
_ScreenManager.selectSettingsScreen(false);
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
_rowSel = 4;
|
||||
break;
|
||||
}
|
||||
}
|
||||
_ScreenManager.reqUpdate();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -19,6 +19,9 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#ifndef __HEATERSETTINGSSCREEN_H__
|
||||
#define __HEATERSETTINGSSCREEN_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include "PasswordScreen.h"
|
||||
|
||||
|
@ -36,4 +39,7 @@ public:
|
|||
CHeaterSettingsScreen(C128x64_OLED& display, CScreenManager& mgr);
|
||||
bool show();
|
||||
bool keyHandler(uint8_t event);
|
||||
void onSelect();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -19,6 +19,9 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#ifndef __PRIMINGSCREEN_H__
|
||||
#define __PRIMINGSCREEN_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include "ScreenHeader.h"
|
||||
|
||||
|
@ -37,3 +40,5 @@ public:
|
|||
bool keyHandler(uint8_t event);
|
||||
bool animate() { return CScreen::animate(); };
|
||||
};
|
||||
|
||||
#endif
|
|
@ -19,6 +19,9 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#ifndef __REBOOTSCREEN_H__
|
||||
#define __REBOOTSCREEN_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include "ScreenHeader.h"
|
||||
|
||||
|
@ -35,3 +38,5 @@ private:
|
|||
String _rebootMessage[2];
|
||||
long _restartTime;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -20,7 +20,7 @@ bool
|
|||
CScreen::animate()
|
||||
{
|
||||
if(_showOEMerror) {
|
||||
DebugPort.println("CScreen::animate()");
|
||||
_display.clearDisplay();
|
||||
_display.fillRect(8, 20, 112, 24, WHITE);
|
||||
if(_showOEMerror & 0x01) {
|
||||
_printInverted(_display.xCentre(), 23, "Other controller ", true, eCentreJustify);
|
||||
|
|
|
@ -9,9 +9,11 @@
|
|||
#include "ClockScreen.h"
|
||||
#include "RebootScreen.h"
|
||||
#include "HeaterSettingsScreen.h"
|
||||
#include "SettingsScreen.h"
|
||||
#include <Wire.h>
|
||||
#include "../cfg/pins.h"
|
||||
#include "../cfg/BTCConfig.h"
|
||||
#include "../protocol/helpers.h"
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -97,6 +99,7 @@ CScreenManager::CScreenManager()
|
|||
_pDisplay = NULL;
|
||||
_currentScreen = -1;
|
||||
_timerScreen = -1;
|
||||
_settingScreen = -1;
|
||||
_bReqUpdate = false;
|
||||
_bSetTime = false;
|
||||
_DimTime = millis() + 60000;
|
||||
|
@ -155,11 +158,12 @@ CScreenManager::begin()
|
|||
_Screens.push_back(new CClockScreen(*_pDisplay, *this)); // clock
|
||||
_Screens.push_back(new CPrimingScreen(*_pDisplay, *this)); // mode / priming
|
||||
_Screens.push_back(new CWiFiScreen(*_pDisplay, *this)); // comms info
|
||||
_Screens.push_back(new CFuelMixtureScreen(*_pDisplay, *this)); // tuning
|
||||
_Screens.push_back(new CHeaterSettingsScreen(*_pDisplay, *this)); // tuning
|
||||
_Screens.push_back(new CSettingsScreen(*_pDisplay, *this)); // tuning info
|
||||
_SetTimeScreen = new CSetClockScreen(*_pDisplay, *this); // clock set
|
||||
_TimerScreens.push_back(new CSetTimerScreen(*_pDisplay, *this, 0)); // set timer 1
|
||||
_TimerScreens.push_back(new CSetTimerScreen(*_pDisplay, *this, 1)); // set timer 2
|
||||
_SettingsScreens.push_back(new CFuelMixtureScreen(*_pDisplay, *this)); // tuning
|
||||
_SettingsScreens.push_back(new CHeaterSettingsScreen(*_pDisplay, *this)); // tuning
|
||||
|
||||
#if RTC_USE_DS3231==0 && RTC_USE_DS1307==0 && RTC_USE_PCF8523==0
|
||||
_currentScreen = 6; // bring up clock set screen first if using millis based RTC!
|
||||
|
@ -194,6 +198,12 @@ CScreenManager::checkUpdate()
|
|||
_bReqUpdate = false;
|
||||
return true;
|
||||
}
|
||||
else if(_settingScreen >= 0) {
|
||||
DebugPort.println("setting screen show");
|
||||
_SettingsScreens[_settingScreen]->show();
|
||||
_bReqUpdate = false;
|
||||
return true;
|
||||
}
|
||||
else if(_timerScreen >= 0) {
|
||||
_TimerScreens[_timerScreen]->show();
|
||||
_bReqUpdate = false;
|
||||
|
@ -218,6 +228,9 @@ CScreenManager::reqUpdate()
|
|||
bool
|
||||
CScreenManager::animate()
|
||||
{
|
||||
if(_settingScreen >= 0) {
|
||||
return _SettingsScreens[_settingScreen]->animate();
|
||||
}
|
||||
if(_timerScreen >= 0) {
|
||||
return _TimerScreens[_timerScreen]->animate();
|
||||
}
|
||||
|
@ -237,10 +250,13 @@ CScreenManager::refresh()
|
|||
void
|
||||
CScreenManager::_switchScreen()
|
||||
{
|
||||
if(_timerScreen >= 0)
|
||||
_TimerScreens[_timerScreen]->onSelect();
|
||||
else if(_currentScreen >= 0)
|
||||
_Screens[_currentScreen]->onSelect();
|
||||
if(_timerScreen >= 0)
|
||||
_TimerScreens[_timerScreen]->onSelect();
|
||||
else if(_settingScreen >= 0) {
|
||||
_SettingsScreens[_settingScreen]->onSelect();
|
||||
}
|
||||
else if(_currentScreen >= 0)
|
||||
_Screens[_currentScreen]->onSelect();
|
||||
|
||||
reqUpdate();
|
||||
}
|
||||
|
@ -253,15 +269,15 @@ CScreenManager::nextScreen()
|
|||
}
|
||||
else if(_timerScreen >= 0) {
|
||||
_timerScreen++;
|
||||
if(_timerScreen >= _TimerScreens.size()) {
|
||||
_timerScreen = 0;
|
||||
}
|
||||
ROLLUPPERLIMIT(_timerScreen, _TimerScreens.size()-1, 0);
|
||||
}
|
||||
else if(_settingScreen >= 0) {
|
||||
_settingScreen++;
|
||||
ROLLUPPERLIMIT(_settingScreen, _SettingsScreens.size()-1, 0);
|
||||
}
|
||||
else {
|
||||
_currentScreen++;
|
||||
if(_currentScreen >= _Screens.size()) {
|
||||
_currentScreen = 0;
|
||||
}
|
||||
ROLLUPPERLIMIT(_currentScreen, _Screens.size()-1, 0);
|
||||
}
|
||||
_switchScreen();
|
||||
}
|
||||
|
@ -273,15 +289,15 @@ CScreenManager::prevScreen()
|
|||
}
|
||||
else if(_timerScreen >=0) {
|
||||
_timerScreen--;
|
||||
if(_timerScreen < 0) {
|
||||
_timerScreen = _TimerScreens.size()-1;
|
||||
}
|
||||
ROLLLOWERLIMIT(_timerScreen, 0, _TimerScreens.size()-1);
|
||||
}
|
||||
else if(_settingScreen >= 0) {
|
||||
_settingScreen--;
|
||||
ROLLLOWERLIMIT(_settingScreen, 0, _SettingsScreens.size()-1);
|
||||
}
|
||||
else {
|
||||
_currentScreen--;
|
||||
if(_currentScreen < 0) {
|
||||
_currentScreen = _Screens.size()-1;
|
||||
}
|
||||
ROLLLOWERLIMIT(_currentScreen, 0, _Screens.size()-1);
|
||||
}
|
||||
_switchScreen();
|
||||
}
|
||||
|
@ -291,6 +307,10 @@ CScreenManager::keyHandler(uint8_t event)
|
|||
{
|
||||
if(_bSetTime)
|
||||
_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)
|
||||
|
@ -303,15 +323,30 @@ CScreenManager::keyHandler(uint8_t event)
|
|||
}
|
||||
|
||||
void
|
||||
CScreenManager::selectTimerScreen(bool showTimers)
|
||||
CScreenManager::selectTimerScreen(bool show)
|
||||
{
|
||||
_timerScreen = showTimers ? 0 : -1;
|
||||
_timerScreen = show ? 0 : -1;
|
||||
_settingScreen = -1;
|
||||
_bSetTime = false;
|
||||
_switchScreen();
|
||||
}
|
||||
|
||||
void
|
||||
CScreenManager::selectSettingsScreen(bool show)
|
||||
{
|
||||
_settingScreen = show ? 0 : -1;
|
||||
_timerScreen = -1;
|
||||
_bSetTime = false;
|
||||
_switchScreen();
|
||||
}
|
||||
|
||||
void
|
||||
CScreenManager::selectSetTimeScreen(bool show)
|
||||
{
|
||||
_bSetTime = show;
|
||||
_settingScreen = -1;
|
||||
_timerScreen = -1;
|
||||
_switchScreen();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -33,10 +33,12 @@ class CRebootScreen;
|
|||
class CScreenManager {
|
||||
std::vector<CScreen*> _Screens;
|
||||
std::vector<CScreen*> _TimerScreens;
|
||||
std::vector<CScreen*> _SettingsScreens;
|
||||
CScreen* _SetTimeScreen;
|
||||
C128x64_OLED* _pDisplay;
|
||||
int _currentScreen;
|
||||
int _timerScreen;
|
||||
int _settingScreen;
|
||||
bool _bSetTime;
|
||||
unsigned long _DimTime;
|
||||
bool _bReqUpdate;
|
||||
|
@ -54,8 +56,9 @@ public:
|
|||
void keyHandler(uint8_t event);
|
||||
void reqUpdate();
|
||||
void showRebootMsg(const char* content[2], long delayTime);
|
||||
void selectTimerScreen(bool showTimers);
|
||||
void selectTimerScreen(bool show);
|
||||
void selectSetTimeScreen(bool show);
|
||||
void selectSettingsScreen(bool show);
|
||||
};
|
||||
|
||||
#endif // __SCREEN_MANAGER_H__
|
||||
|
|
|
@ -19,6 +19,9 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#ifndef __SETCLOCKSCREEN_H__
|
||||
#define __SETCLOCKSCREEN_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include "ScreenHeader.h"
|
||||
#include "../RTC/BTCDateTime.h"
|
||||
|
@ -41,3 +44,5 @@ public:
|
|||
void showTime(int);
|
||||
bool keyHandler(uint8_t event);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -19,6 +19,9 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#ifndef __SETTIMERSCREEN_H__
|
||||
#define __SETTIMERSCREEN_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include "ScreenHeader.h"
|
||||
#include "../Utility/NVStorage.h"
|
||||
|
@ -42,3 +45,5 @@ public:
|
|||
bool show();
|
||||
bool keyHandler(uint8_t event);
|
||||
};
|
||||
|
||||
#endif
|
|
@ -19,6 +19,9 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#ifndef __WIFISCREEN_H__
|
||||
#define __WIFISCREEN_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include "ScreenHeader.h"
|
||||
|
||||
|
@ -35,3 +38,5 @@ private:
|
|||
int _repeatCount;
|
||||
bool _bShowMAC;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -263,14 +263,14 @@ CProtocol::Init(int FrameMode)
|
|||
Controller.OperatingVoltage = 120; // 0.1V/digit
|
||||
Controller.FanSensor = 1; // SN-1 or SN-2
|
||||
Controller.OperatingMode = 0x32; // 0x32:Thermostat, 0xCD:Fixed
|
||||
setTemperature_Min(8); // Minimum settable temperature
|
||||
setTemperature_Max(35); // Maximum settable temperature
|
||||
Controller.MinTempRise = 5; // temp rise to sense fuel ignition - GLOW PLUG POWER?
|
||||
Controller.Prime = 0; // 00: normal, 0x5A: fuel prime
|
||||
Controller.Unknown1_MSB = 0x01; // always 0x01
|
||||
Controller.Unknown1_LSB = 0x2c; // always 0x2c 16bit: "300 secs = max run without burn detected" ??
|
||||
Controller.Unknown2_MSB = 0x0d; // always 0x0d
|
||||
Controller.Unknown2_LSB = 0xac; // always 0xac 16bit: "3500" ?? Ignition fan max RPM????
|
||||
setTemperature_Min(8); // Minimum settable temperature
|
||||
setTemperature_Max(35); // Maximum settable temperature
|
||||
Controller.GlowDrive = 5; // GLOW PLUG POWER, 5 => 85W?
|
||||
Controller.Prime = 0; // 00: normal, 0x5A: fuel prime
|
||||
Controller.Unknown1_MSB = 0x01; // always 0x01
|
||||
Controller.Unknown1_LSB = 0x2c; // always 0x2c 16bit: "300 secs = max run without burn detected" ??
|
||||
Controller.Unknown2_MSB = 0x0d; // always 0x0d
|
||||
Controller.Unknown2_LSB = 0xac; // always 0xac 16bit: "3500" ?? Ignition fan max RPM????
|
||||
setCRC();
|
||||
}
|
||||
else if(FrameMode == HeatMode){
|
||||
|
|
|
@ -46,7 +46,7 @@ public:
|
|||
unsigned char OperatingMode; // [13] 0x32:Thermostat, 0xCD:Fixed
|
||||
unsigned char MinTemperature; // [14] Minimum settable temperature
|
||||
unsigned char MaxTemperature; // [15] Maximum settable temperature
|
||||
unsigned char MinTempRise; // [16] temp rise to sense running OK
|
||||
unsigned char GlowDrive; // [16] power to supply to glow plug
|
||||
unsigned char Prime; // [17] 00: normal, 0x5A: fuel prime
|
||||
unsigned char Unknown1_MSB; // [18] always 0x01
|
||||
unsigned char Unknown1_LSB; // [19] always 0x2c "300 secs = max run without burn detected"?
|
||||
|
@ -190,6 +190,8 @@ public:
|
|||
float getGlowPlug_Voltage() const; // glow plug voltage
|
||||
void setGlowPlug_Current(short ampsx100); // glow plug current
|
||||
void setGlowPlug_Voltage(short voltsx10); // glow plug voltage
|
||||
void setGlowDrive(unsigned char val) { Controller.GlowDrive = val; };
|
||||
unsigned char getGlowDrive() const { return Controller.GlowDrive; };
|
||||
// heat exchanger
|
||||
short getTemperature_HeatExchg() const; // temperature of heat exchanger
|
||||
void setTemperature_HeatExchg(short degC); // temperature of heat exchanger
|
||||
|
@ -238,6 +240,7 @@ public:
|
|||
float getGlow_Voltage() const { return Heater.getGlowPlug_Voltage(); };
|
||||
float getGlow_Current() const { return Heater.getGlowPlug_Current(); };
|
||||
float getSystemVoltage() const { return Controller.getSystemVoltage(); };
|
||||
int getGlow_Drive() const { return Controller.getGlowDrive(); };
|
||||
|
||||
// void setRefTime();
|
||||
void reportFrames(bool isOEM);
|
||||
|
|
|
@ -121,6 +121,7 @@ CTxManage::PrepareFrame(const CProtocol& basisFrame, bool isBTCmaster)
|
|||
m_TxFrame.setTemperature_Desired(NVstore.getDesiredTemperature());
|
||||
m_TxFrame.Controller.OperatingVoltage = NVstore.getSysVoltage();
|
||||
m_TxFrame.Controller.FanSensor = NVstore.getFanSensor();
|
||||
m_TxFrame.Controller.GlowDrive = NVstore.getGlowDrive();
|
||||
}
|
||||
else {
|
||||
m_TxFrame.setPassiveMode(); // this prevents the tuning parameters being saved by heater
|
||||
|
|
|
@ -41,6 +41,7 @@ extern void setFanSensor(unsigned char cVal);
|
|||
extern void setDateTime(const char* newTime);
|
||||
extern void setDate(const char* newTime);
|
||||
extern void setTime(const char* newTime);
|
||||
extern void setGlowDrive(unsigned char val);
|
||||
extern void saveNV();
|
||||
extern void setSystemVoltage(float val);
|
||||
extern const CProtocolPackage& getHeaterInfo();
|
||||
|
@ -52,7 +53,7 @@ extern bool hasOEMcontroller();
|
|||
extern int getBlueWireStat();
|
||||
extern int getSmartError();
|
||||
|
||||
#define LOWERLIMIT(A, B) if(A < B) A = B
|
||||
#define UPPERLIMIT(A, B) if(A > B) A = B
|
||||
#define ROLLUPPERLIMIT(A, B, C) if(A > B) A = C
|
||||
#define ROLLLOWERLIMIT(A, B, C) if(A < B) A = C
|
||||
#define LOWERLIMIT(A, B) if((A) < (B)) (A) = (B)
|
||||
#define UPPERLIMIT(A, B) if((A) > (B)) (A) = (B)
|
||||
#define ROLLUPPERLIMIT(A, B, C) if((A) > (B)) (A) = (C)
|
||||
#define ROLLLOWERLIMIT(A, B, C) if((A) < (B)) (A) = (C)
|
||||
|
|
|
@ -160,6 +160,21 @@ CHeaterStorage::getFanSensor()
|
|||
return _calValues.Heater.fanSensor;
|
||||
}
|
||||
|
||||
void
|
||||
CHeaterStorage::setGlowDrive(unsigned char val)
|
||||
{
|
||||
if(val >=1 && val <= 6)
|
||||
_calValues.Heater.glowDrive = val;
|
||||
else
|
||||
_calValues.Heater.glowDrive = 5;
|
||||
}
|
||||
|
||||
unsigned char
|
||||
CHeaterStorage::getGlowDrive()
|
||||
{
|
||||
return _calValues.Heater.glowDrive;
|
||||
}
|
||||
|
||||
void
|
||||
CHeaterStorage::getTimerInfo(int idx, sTimer& timerInfo)
|
||||
{
|
||||
|
@ -241,7 +256,7 @@ CESP32HeaterStorage::loadHeater()
|
|||
validatedLoad("setTemperature", _calValues.Heater.setTemperature, 22, u8inBounds, 0, 40);
|
||||
validatedLoad("systemVoltage", _calValues.Heater.sysVoltage, 12, u8Match2, 120, 240);
|
||||
validatedLoad("fanSensor", _calValues.Heater.fanSensor, 1, u8inBounds, 1, 2);
|
||||
validatedLoad("glowPower", _calValues.Heater.glowPower, 5, u8inBounds, 1, 6);
|
||||
validatedLoad("glowDrive", _calValues.Heater.glowDrive, 5, u8inBounds, 1, 6);
|
||||
preferences.end();
|
||||
}
|
||||
|
||||
|
@ -258,7 +273,7 @@ CESP32HeaterStorage::saveHeater()
|
|||
preferences.putUChar("setTemperature", _calValues.Heater.setTemperature);
|
||||
preferences.putUChar("systemVoltage", _calValues.Heater.sysVoltage);
|
||||
preferences.putUChar("fanSensor", _calValues.Heater.fanSensor);
|
||||
preferences.putUChar("glowPower", _calValues.Heater.glowPower);
|
||||
preferences.putUChar("glowDrive", _calValues.Heater.glowDrive);
|
||||
preferences.end();
|
||||
}
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ struct sHeater {
|
|||
uint8_t setTemperature;
|
||||
uint8_t sysVoltage;
|
||||
uint8_t fanSensor;
|
||||
uint8_t glowPower;
|
||||
uint8_t glowDrive;
|
||||
|
||||
bool valid() {
|
||||
bool retval = true;
|
||||
|
@ -43,7 +43,7 @@ struct sHeater {
|
|||
retval &= setTemperature < 40;
|
||||
retval &= sysVoltage == 120 || sysVoltage == 240;
|
||||
retval &= fanSensor == 1 || fanSensor == 2;
|
||||
retval &= glowPower >= 1 && glowPower <= 6;
|
||||
retval &= glowDrive >= 1 && glowDrive <= 6;
|
||||
return retval;
|
||||
};
|
||||
void init() {
|
||||
|
@ -55,7 +55,7 @@ struct sHeater {
|
|||
setTemperature = 23;
|
||||
sysVoltage = 120;
|
||||
fanSensor = 1;
|
||||
glowPower = 5;
|
||||
glowDrive = 5;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -148,6 +148,7 @@ public:
|
|||
unsigned char getThermostatMode();
|
||||
unsigned char getSysVoltage();
|
||||
unsigned char getFanSensor();
|
||||
unsigned char getGlowDrive();
|
||||
unsigned long getDimTime();
|
||||
|
||||
void setPmin(float);
|
||||
|
@ -158,6 +159,7 @@ public:
|
|||
void setThermostatMode(unsigned char val);
|
||||
void setSystemVoltage(float fVal);
|
||||
void setFanSensor(unsigned char val);
|
||||
void setGlowDrive(unsigned char val);
|
||||
void setDimTime(unsigned long val);
|
||||
|
||||
void getTimerInfo(int idx, sTimer& timerInfo);
|
||||
|
|
Loading…
Reference in a new issue