From 1400feffde5210f3742419631a079696328d3092 Mon Sep 17 00:00:00 2001 From: vas-dav Date: Sat, 10 Jun 2023 14:29:09 +0300 Subject: [PATCH] threads: [#60] display error when temperature is unavailable - -128 as error signal (highly unlikely temp) - errorView --- source/shoh/src/threads/manager/Menu.cpp | 51 +++++++++++++++++-- source/shoh/src/threads/manager/Menu.h | 1 + .../src/threads/temperature/Temperature.cpp | 7 +-- 3 files changed, 53 insertions(+), 6 deletions(-) diff --git a/source/shoh/src/threads/manager/Menu.cpp b/source/shoh/src/threads/manager/Menu.cpp index 4aabe1b..2c642ba 100644 --- a/source/shoh/src/threads/manager/Menu.cpp +++ b/source/shoh/src/threads/manager/Menu.cpp @@ -16,7 +16,9 @@ enum CURRENT_TEMP, DESIRED_TEMP, DESIRED_TEMP_F, - LOADING + LOADING, + ERROR, + DEVICE_CORRUPTED }; static const char * interface_messages [] = @@ -24,7 +26,9 @@ static const char * interface_messages [] = "CURRENT %3d ", "DESIRED %2d ", "DESIRED [%2d] ", - " Loading... " + " Loading... ", + " ERROR ", + "Device Corrupted" }; Menu::Menu(ThreadCommon::QueueManager* qm): _qm(qm), @@ -86,7 +90,14 @@ void Menu::parseEvent (Event *ep) break; case Event::ExternalTemp: //Change ExternalTemp value. -99 <= ext_temp <= 99 - this->ext_temp.setCurrent(ep->getData()); + EventRawData ext_temp = ep->getData(); + if(ext_temp == -128) + { + LOG_ERROR("Menu recieved -128 as ext_temp."); + this->SetState(&Menu::sErrorView); + break; + } + this->ext_temp.setCurrent(ext_temp); //Refresh the menu screen. this->HandleObj(MenuObjEvent (MenuObjEvent::eRefresh)); break; @@ -164,6 +175,40 @@ void Menu::sMainView(const MenuObjEvent &e) } } +void Menu::sErrorView(const MenuObjEvent &e) +{ + static char screen_text[64]; + switch (e.type) + { + case MenuObjEvent::eFocus: + LOG_DEBUG("enter sErrorView"); + constructUIString(0, interface_messages[ERROR]); + constructUIString(1, interface_messages[DEVICE_CORRUPTED]); + this->NotifyAndRefreshUI(); + break; + case MenuObjEvent::eUnFocus: + LOG_DEBUG("leave sErrorView"); + memset(screen_text, 0, 64); // Clear screen + this->NotifyAndRefreshUI(); + break; + case MenuObjEvent::eRollClockWise: + break; + case MenuObjEvent::eRollCClockWise: + break; + case MenuObjEvent::eClick: + break; + case MenuObjEvent::eRefresh: + LOG_DEBUG("refresh sErrorView"); + if (this->ext_temp.getCurrent() != -128) + { + this->SetState(&Menu::sInitView); + } + break; + default: + break; + } +} + void Menu::sSetPointMod(const MenuObjEvent &e) { static char screen_text[64]; diff --git a/source/shoh/src/threads/manager/Menu.h b/source/shoh/src/threads/manager/Menu.h index 5d1b600..ea12bbe 100644 --- a/source/shoh/src/threads/manager/Menu.h +++ b/source/shoh/src/threads/manager/Menu.h @@ -35,6 +35,7 @@ private: /* States */ void sInitView(const MenuObjEvent &e); void sMainView(const MenuObjEvent &e); + void sErrorView(const MenuObjEvent &e); void sSetPointMod(const MenuObjEvent &e); /* Methods */ void constructUIString(uint8_t line, const char *fmt, ...); diff --git a/source/shoh/src/threads/temperature/Temperature.cpp b/source/shoh/src/threads/temperature/Temperature.cpp index 9c3692d..7929184 100644 --- a/source/shoh/src/threads/temperature/Temperature.cpp +++ b/source/shoh/src/threads/temperature/Temperature.cpp @@ -16,14 +16,15 @@ Temperature::~Temperature() {} void Temperature::taskFunction() { SensorTempTC74 ext_temp_sensor(this->_pi2c, 0x4a); - Event t (Event::ExternalTemp, -10); - int8_t temp_value = -10; + Event t (Event::ExternalTemp, -128); + int8_t temp_value = -128; + _qm->send(ThreadCommon::QueueManager::master_event_all, &t, 0); for (;;) { if (ext_temp_sensor.is_up()) temp_value = ext_temp_sensor.getTemperature(); - if(temp_value == -10) + if(temp_value == -128) { LOG_ERROR("Failed to get temperature."); continue;