Consolidated new generated run states into protocol handler, new JSON for suspend mode
This commit is contained in:
parent
cce60328c0
commit
708a8087b1
7 changed files with 78 additions and 77 deletions
|
@ -1223,13 +1223,3 @@ bool isCyclicActive()
|
|||
return bUserON && (NVstore.getCyclicMode() != 0);
|
||||
}
|
||||
|
||||
int getRunStateEx()
|
||||
{
|
||||
int heaterstate = getHeaterInfo().getRunState();
|
||||
if(heaterstate == 0) {
|
||||
if(isCyclicActive()) {
|
||||
heaterstate = 10; // special state for cyclic suspended
|
||||
}
|
||||
}
|
||||
return heaterstate;
|
||||
}
|
||||
|
|
|
@ -180,8 +180,10 @@ CBasicScreen::keyHandler(uint8_t event)
|
|||
// impossible with 5 way switch!
|
||||
uint8_t doubleKey = key_Down | key_Up;
|
||||
if((event & doubleKey) == doubleKey) {
|
||||
if(reqThermoToggle())
|
||||
if(reqThermoToggle()) {
|
||||
_showSetMode = millis() + 2000;
|
||||
NVstore.save();
|
||||
}
|
||||
else
|
||||
_reqOEMWarning();
|
||||
}
|
||||
|
@ -208,21 +210,18 @@ CBasicScreen::keyHandler(uint8_t event)
|
|||
}
|
||||
// hold CENTRE to turn ON or OFF
|
||||
if(event & key_Centre) {
|
||||
if(getHeaterInfo().getRunState()) {
|
||||
// running, request OFF
|
||||
int runstate = getHeaterInfo().getRunStateEx();
|
||||
if(runstate) { // running, including cyclic mode idle
|
||||
if(repeatCount > 5) {
|
||||
repeatCount = -2; // prevent double handling
|
||||
repeatCount = -1;
|
||||
requestOff();
|
||||
}
|
||||
}
|
||||
else {
|
||||
else { // standard idle state
|
||||
// standby, request ON
|
||||
if(repeatCount > 3) {
|
||||
repeatCount = -1;
|
||||
if(isCyclicActive())
|
||||
requestOff(); // actually shut off cyclic mode if already in idle
|
||||
else
|
||||
requestOn();
|
||||
requestOn();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -264,7 +263,7 @@ CBasicScreen::keyHandler(uint8_t event)
|
|||
void
|
||||
CBasicScreen::showRunState()
|
||||
{
|
||||
int runstate = getHeaterInfo().getRunState();
|
||||
int runstate = getHeaterInfo().getRunStateEx();
|
||||
int errstate = getHeaterInfo().getErrState();
|
||||
|
||||
if(errstate) errstate--; // correct for +1 biased return value
|
||||
|
@ -272,8 +271,8 @@ CBasicScreen::showRunState()
|
|||
static bool toggle = false;
|
||||
const char* toPrint = NULL;
|
||||
_display.setTextColor(WHITE, BLACK);
|
||||
if(runstate >= 0 && runstate <= 8) {
|
||||
if(((runstate == 0) || (runstate > 5)) && errstate) {
|
||||
// if(runstate >= 0 && runstate <= 8) {
|
||||
if(errstate && ((runstate == 0) || (runstate > 5))) {
|
||||
|
||||
// flash error code
|
||||
char msg[16];
|
||||
|
@ -293,22 +292,18 @@ CBasicScreen::showRunState()
|
|||
}
|
||||
else {
|
||||
if(runstate) {
|
||||
if(runstate < 5) toPrint = "Starting";
|
||||
else if(runstate == 5) toPrint = "Running";
|
||||
else if(isCyclicActive()) {
|
||||
if(runstate > 5) toPrint = "Suspending...";
|
||||
}
|
||||
else {
|
||||
if(runstate == 8) toPrint = "Cooling";
|
||||
else toPrint = "Shutting down";
|
||||
toPrint = getHeaterInfo().getRunStateStr();
|
||||
// simplify starting states
|
||||
switch(runstate) {
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
toPrint = "Starting";
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(isCyclicActive()) {
|
||||
toPrint = "Suspended";
|
||||
}
|
||||
}
|
||||
}
|
||||
// }
|
||||
}
|
||||
if(toPrint) {
|
||||
// locate at bottom centre
|
||||
|
|
|
@ -81,8 +81,8 @@ CDetailedScreen::show()
|
|||
|
||||
const char* c = String(getTemperatureSensor()).c_str();
|
||||
|
||||
int runstate = getHeaterInfo().getRunState();//HtrFrame.getRunState();
|
||||
int errstate = getHeaterInfo().getErrState(); //HtrFrame.getErrState();
|
||||
int runstate = getHeaterInfo().getRunStateEx();
|
||||
int errstate = getHeaterInfo().getErrState();
|
||||
if(errstate) errstate--; // correct for +1 biased return value
|
||||
|
||||
long tDelta = millis() - _showTarget;
|
||||
|
@ -106,7 +106,7 @@ CDetailedScreen::show()
|
|||
_animatePump = false;
|
||||
_animateGlow = false;
|
||||
|
||||
if(runstate) {
|
||||
if(runstate != 0 && runstate != 10) { // not idle modes
|
||||
float power = getHeaterInfo().getGlowPlug_Power();
|
||||
if(power > 1) {
|
||||
showGlowPlug(power);
|
||||
|
@ -188,7 +188,8 @@ CDetailedScreen::keyHandler(uint8_t event)
|
|||
if(_keyRepeatCount >= 0) {
|
||||
_keyRepeatCount++;
|
||||
if(event & key_Centre) {
|
||||
if(getHeaterInfo().getRunState()) {
|
||||
int runstate = getHeaterInfo().getRunStateEx();
|
||||
if(runstate) { // running, including cyclic mode idle
|
||||
if(_keyRepeatCount > 5) {
|
||||
_keyRepeatCount = -1; // prevent double handling
|
||||
requestOff();
|
||||
|
@ -197,17 +198,17 @@ CDetailedScreen::keyHandler(uint8_t event)
|
|||
else {
|
||||
if(_keyRepeatCount > 3) {
|
||||
_keyRepeatCount = -1; // prevent double handling
|
||||
if(isCyclicActive())
|
||||
requestOff();
|
||||
else
|
||||
requestOn();
|
||||
requestOn();
|
||||
}
|
||||
}
|
||||
}
|
||||
if(event & key_Down) {
|
||||
if(_keyRepeatCount > 1) { // held Down - togle thermo/fixed mode
|
||||
_keyRepeatCount = -1; // prevent double handling
|
||||
if(reqThermoToggle()) _showTarget = millis() + 3500;
|
||||
if(reqThermoToggle()) {
|
||||
_showTarget = millis() + 3500;
|
||||
NVstore.save();
|
||||
}
|
||||
else _reqOEMWarning();
|
||||
}
|
||||
}
|
||||
|
@ -398,36 +399,27 @@ CDetailedScreen::showRunState(int runstate, int errstate)
|
|||
const char* toPrint = NULL;
|
||||
int yPos = 25;
|
||||
_display.setTextColor(WHITE, BLACK);
|
||||
if(runstate >= 0 && runstate <= 8) {
|
||||
if(errstate && ((runstate == 0) || (runstate > 5))) {
|
||||
// an error is present in idle or states beyond running, show it
|
||||
// create an "E-XX" message to display
|
||||
char msg[16];
|
||||
sprintf(msg, "E-%02d", errstate);
|
||||
if(runstate > 5)
|
||||
yPos -= _display.textHeight();
|
||||
_display.setCursor(_display.xCentre(), yPos);
|
||||
// flash error code
|
||||
toggle = !toggle;
|
||||
if(toggle)
|
||||
_display.printCentreJustified(msg);
|
||||
else {
|
||||
_display.printCentreJustified(" ");
|
||||
}
|
||||
yPos += _display.textHeight();
|
||||
toPrint = getHeaterInfo().getErrStateStr();
|
||||
}
|
||||
if(errstate && ((runstate == 0) || (runstate > 5))) {
|
||||
// an error is present in idle or states beyond running, show it
|
||||
// create an "E-XX" message to display
|
||||
char msg[16];
|
||||
sprintf(msg, "E-%02d", errstate);
|
||||
if(runstate > 5)
|
||||
yPos -= _display.textHeight();
|
||||
_display.setCursor(_display.xCentre(), yPos);
|
||||
// flash error code
|
||||
toggle = !toggle;
|
||||
if(toggle)
|
||||
_display.printCentreJustified(msg);
|
||||
else {
|
||||
// no errors, heater normal
|
||||
if(isCyclicActive()) {
|
||||
if(runstate == 0) toPrint = "Suspended";
|
||||
else if(runstate > 5) toPrint = "Suspending...";
|
||||
else toPrint = getHeaterInfo().getRunStateStr();
|
||||
}
|
||||
else {
|
||||
toPrint = getHeaterInfo().getRunStateStr();
|
||||
}
|
||||
_display.printCentreJustified(" ");
|
||||
}
|
||||
yPos += _display.textHeight();
|
||||
toPrint = getHeaterInfo().getErrStateStr();
|
||||
}
|
||||
else {
|
||||
// no errors, heater normal
|
||||
toPrint = getHeaterInfo().getRunStateStr();
|
||||
}
|
||||
if(toPrint) {
|
||||
_printMenuText(_display.xCentre(), yPos, toPrint, false, eCentreJustify);
|
||||
|
|
|
@ -323,6 +323,24 @@ CProtocol::setSystemVoltage(float fVal)
|
|||
Controller.OperatingVoltage = val;
|
||||
}
|
||||
|
||||
|
||||
int CProtocolPackage::getRunStateEx() const
|
||||
{
|
||||
int runstate = getRunState();
|
||||
if(isCyclicActive()) {
|
||||
// special states for cyclic suspended
|
||||
switch(runstate) {
|
||||
case 0: runstate = 10; break; // standby, awaiting temperature drop
|
||||
case 7: runstate = 11; break; // shutting down due to cyclic trip
|
||||
case 8: runstate = 12; break; // cooling due to cyclic trip
|
||||
}
|
||||
}
|
||||
if(runstate == 2 && getPump_Actual() == 0) { // split runstate 2 - glow, then fuel
|
||||
runstate = 9;
|
||||
}
|
||||
return runstate;
|
||||
}
|
||||
|
||||
const char* Runstates [] PROGMEM = {
|
||||
" Stopped/Ready ", // 0
|
||||
"Starting...", // 1
|
||||
|
@ -335,6 +353,8 @@ const char* Runstates [] PROGMEM = {
|
|||
"Cooling", // 8
|
||||
"Heating glow plug", // 9 - interpreted state - actually runstate 2 with no pump action!
|
||||
"Suspended", // 10 - interpreted state - cyclic mode has suspended heater
|
||||
"Suspending...", // 11 - interpreted state - cyclic mode is suspending heater
|
||||
"Suspend cooling", // 12 - interpreted state - cyclic mode is suspending heater
|
||||
"Unknown run state"
|
||||
};
|
||||
|
||||
|
@ -344,7 +364,7 @@ const char*
|
|||
CProtocolPackage::getRunStateStr() const
|
||||
{
|
||||
uint8_t runstate = getRunStateEx();
|
||||
UPPERLIMIT(runstate, 10);
|
||||
UPPERLIMIT(runstate, 13);
|
||||
if(runstate == 2 && getPump_Actual() == 0) { // split runstate 2 - glow, then fuel
|
||||
runstate = 9;
|
||||
}
|
||||
|
|
|
@ -217,6 +217,7 @@ class CProtocolPackage {
|
|||
public:
|
||||
void set(const CProtocol& htr, const CProtocol& ctl) { Heater = htr; Controller = ctl; };
|
||||
int getRunState() const { return Heater.getRunState(); };
|
||||
int getRunStateEx() const; // extra support for cyclic thermostat mode
|
||||
const char* getRunStateStr() const;
|
||||
int getErrState() const;
|
||||
const char* getErrStateStr() const;
|
||||
|
|
|
@ -56,7 +56,6 @@ extern bool hasOEMLCDcontroller();
|
|||
extern int getBlueWireStat();
|
||||
extern int getSmartError();
|
||||
extern bool isCyclicActive();
|
||||
extern int getRunStateEx();
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -86,6 +86,9 @@ void interpretJsonCommand(char* pLine)
|
|||
else if(strcmp("FanMax", it->key) == 0) {
|
||||
setFanMax(it->value.as<short>());
|
||||
}
|
||||
else if(strcmp("ThermostatOvertemp", it->key) == 0) {
|
||||
NVstore.setCyclicMode(it->value.as<unsigned char>());
|
||||
}
|
||||
else if(strcmp("ThermostatMethod", it->key) == 0) {
|
||||
NVstore.setThermostatMethodMode(it->value.as<unsigned char>());
|
||||
}
|
||||
|
@ -178,7 +181,7 @@ bool makeJSONString(CModerator& moderator, char* opStr, int len)
|
|||
bSend |= moderator.addJson("TempMax", getHeaterInfo().getTemperature_Max(), root);
|
||||
bSend |= moderator.addJson("TempBody", getHeaterInfo().getTemperature_HeatExchg(), root);
|
||||
// bSend |= moderator.addJson("RunState", getHeaterInfo().getRunState(), root);
|
||||
bSend |= moderator.addJson("RunState", getRunStateEx(), root);
|
||||
bSend |= moderator.addJson("RunState", getHeaterInfo().getRunStateEx(), root);
|
||||
bSend |= moderator.addJson("RunString", getHeaterInfo().getRunStateStr(), root); // verbose it up!
|
||||
bSend |= moderator.addJson("ErrorState", getHeaterInfo().getErrState(), root );
|
||||
bSend |= moderator.addJson("ErrorString", getHeaterInfo().getErrStateStrEx(), root); // verbose it up!
|
||||
|
@ -215,6 +218,7 @@ bool makeJSONStringEx(CModerator& moderator, char* opStr, int len)
|
|||
|
||||
bSend |= moderator.addJson("ThermostatMethod", NVstore.getThermostatMethodMode(), root);
|
||||
bSend |= moderator.addJson("ThermostatWindow", NVstore.getThermostatMethodWindow(), root);
|
||||
bSend |= moderator.addJson("ThermostatOvertemp", NVstore.getCyclicMode(), root);
|
||||
|
||||
if(bSend) {
|
||||
root.printTo(opStr, len);
|
||||
|
|
Loading…
Reference in a new issue