BUG FIXES:
Repeating timers were being cancelled! Set time always advanced by one day upon entry. Desired temperature was incorrect when using enhanced thermostat modes in Detailed menu
This commit is contained in:
parent
1819a244f9
commit
9a36df14ec
6 changed files with 66 additions and 19 deletions
|
@ -93,7 +93,7 @@ CDetailedScreen::show()
|
||||||
float desiredT = 0;
|
float desiredT = 0;
|
||||||
if((runstate && (runstate <= 5)) || _showTarget) {
|
if((runstate && (runstate <= 5)) || _showTarget) {
|
||||||
if(getThermostatModeActive())
|
if(getThermostatModeActive())
|
||||||
desiredT = getHeaterInfo().getTemperature_Desired();
|
desiredT = getTemperatureDesired();
|
||||||
else
|
else
|
||||||
desiredT = -getHeaterInfo().getPump_Fixed();
|
desiredT = -getHeaterInfo().getPump_Fixed();
|
||||||
}
|
}
|
||||||
|
|
|
@ -188,10 +188,13 @@ CSetClockScreen::keyHandler(uint8_t event)
|
||||||
}
|
}
|
||||||
// press UP
|
// press UP
|
||||||
if(event & key_Up) {
|
if(event & key_Up) {
|
||||||
if(_rowSel == 0)
|
if(_rowSel == 0) {
|
||||||
_rowSel = 1;
|
_rowSel = 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
_adjTimeDate(+1);
|
_adjTimeDate(+1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// press DOWN
|
// press DOWN
|
||||||
if(event & key_Down) {
|
if(event & key_Down) {
|
||||||
if(_rowSel == 0) {
|
if(_rowSel == 0) {
|
||||||
|
|
|
@ -63,6 +63,7 @@ CThermostatModeScreen::_initUI()
|
||||||
{
|
{
|
||||||
_rowSel = 0;
|
_rowSel = 0;
|
||||||
_animateCount = 0;
|
_animateCount = 0;
|
||||||
|
_keyRepeat = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
@ -156,6 +157,7 @@ bool
|
||||||
CThermostatModeScreen::keyHandler(uint8_t event)
|
CThermostatModeScreen::keyHandler(uint8_t event)
|
||||||
{
|
{
|
||||||
if(event & keyPressed) {
|
if(event & keyPressed) {
|
||||||
|
_keyRepeat = 0; // unlock hold function
|
||||||
// press LEFT to select previous screen
|
// press LEFT to select previous screen
|
||||||
if(event & key_Left) {
|
if(event & key_Left) {
|
||||||
switch(_rowSel) {
|
switch(_rowSel) {
|
||||||
|
@ -192,7 +194,7 @@ CThermostatModeScreen::keyHandler(uint8_t event)
|
||||||
}
|
}
|
||||||
if(event & key_Down) {
|
if(event & key_Down) {
|
||||||
if(_rowSel == 0) {
|
if(_rowSel == 0) {
|
||||||
_ScreenManager.selectMenu(CScreenManager::BranchMenu, CScreenManager::FontDumpUI);
|
// _ScreenManager.selectMenu(CScreenManager::BranchMenu, CScreenManager::FontDumpUI);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
_rowSel--;
|
_rowSel--;
|
||||||
|
@ -235,6 +237,18 @@ CThermostatModeScreen::keyHandler(uint8_t event)
|
||||||
}
|
}
|
||||||
_ScreenManager.reqUpdate();
|
_ScreenManager.reqUpdate();
|
||||||
}
|
}
|
||||||
|
if(event & keyRepeat) {
|
||||||
|
_keyRepeat++;
|
||||||
|
if((event & key_Down) && (keyRepeat >= 4)) {
|
||||||
|
_keyRepeat = -1;
|
||||||
|
if(_rowSel == 0) {
|
||||||
|
_ScreenManager.selectMenu(CScreenManager::BranchMenu, CScreenManager::FontDumpUI);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(event & keyReleased) {
|
||||||
|
_keyRepeat = -1;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ class CScreenManager;
|
||||||
class CThermostatModeScreen : public CPasswordScreen
|
class CThermostatModeScreen : public CPasswordScreen
|
||||||
{
|
{
|
||||||
int _rowSel;
|
int _rowSel;
|
||||||
|
int _keyRepeat;
|
||||||
void _adjust(int dir);
|
void _adjust(int dir);
|
||||||
float _window;
|
float _window;
|
||||||
int _thermoMode;
|
int _thermoMode;
|
||||||
|
|
|
@ -219,29 +219,58 @@ CTimerManager::manageTime(int _hour, int _minute, int _dow)
|
||||||
|
|
||||||
int retval = 0;
|
int retval = 0;
|
||||||
int dayMinute = (hour * 60) + minute;
|
int dayMinute = (hour * 60) + minute;
|
||||||
int lookup = weekTimerIDs[dow][dayMinute];
|
int newID = weekTimerIDs[dow][dayMinute];
|
||||||
int newID = lookup & 0x0f;
|
|
||||||
if(activeTimer != newID) {
|
if(activeTimer != newID) {
|
||||||
if(newID) {
|
|
||||||
requestOn();
|
DebugPort.print("Timer ID change detected ");
|
||||||
activeDow = dow; // dow when timer interval started
|
DebugPort.print(activeTimer & 0x0f);
|
||||||
retval = 1;
|
if(activeTimer & 0x80) DebugPort.print("(repeating)");
|
||||||
|
DebugPort.print(" -> ");
|
||||||
|
DebugPort.print(newID & 0x0f);
|
||||||
|
if(newID & 0x80) DebugPort.print("(repeating)");
|
||||||
|
DebugPort.println("");
|
||||||
|
|
||||||
|
if(activeTimer) {
|
||||||
|
// deal with expired timer
|
||||||
|
DebugPort.println("Handling expired timer cleanup");
|
||||||
|
|
||||||
|
if(activeTimer & 0x80) {
|
||||||
|
DebugPort.println("Expired timer repeats, leaving definition alone");
|
||||||
}
|
}
|
||||||
else {
|
else { // non repeating timer
|
||||||
requestOff();
|
|
||||||
// delete one shot timer - note that this may require ticking off each day as they appear
|
// delete one shot timer - note that this may require ticking off each day as they appear
|
||||||
if((lookup & 0x80) == 0) { // non repeating timer
|
DebugPort.print("Expired timer does not repeat - Cancelling"); DebugPort.println(activeTimer);
|
||||||
|
int ID = activeTimer & 0x0f;
|
||||||
|
if(ID) {
|
||||||
|
ID--;
|
||||||
sTimer timer;
|
sTimer timer;
|
||||||
// get timer settings
|
// get timer settings
|
||||||
NVstore.getTimerInfo(activeTimer-1, timer);
|
NVstore.getTimerInfo(ID, timer);
|
||||||
if(timer.enabled & 0x80)
|
if(timer.enabled & 0x80) {
|
||||||
|
DebugPort.println("Cancelling next day");
|
||||||
timer.enabled = 0; // ouright cancel anyday timer
|
timer.enabled = 0; // ouright cancel anyday timer
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
|
DebugPort.print("Cancelling specific day idx"); DebugPort.println(activeDow);
|
||||||
timer.enabled &= ~(0x01 << activeDow); // cancel specific day that started the timer
|
timer.enabled &= ~(0x01 << activeDow); // cancel specific day that started the timer
|
||||||
NVstore.setTimerInfo(activeTimer-1, timer);
|
}
|
||||||
|
NVstore.setTimerInfo(ID, timer);
|
||||||
NVstore.save();
|
NVstore.save();
|
||||||
createMap();
|
createMap();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(newID) {
|
||||||
|
DebugPort.println("Start of timer interval, starting heater");
|
||||||
|
requestOn();
|
||||||
|
activeDow = dow; // dow when timer interval started
|
||||||
|
// activeRepeat = lookup & 0x80;
|
||||||
|
retval = 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DebugPort.println("End of timer interval, stopping heater");
|
||||||
|
requestOff();
|
||||||
retval = 2;
|
retval = 2;
|
||||||
}
|
}
|
||||||
activeTimer = newID;
|
activeTimer = newID;
|
||||||
|
|
Binary file not shown.
Loading…
Reference in a new issue