Menu & UI: [#25, #35] Fixed UI.

*String in Menu are static. Temperature is limited by -99 and 99 bounds.
*UserInterface cleaned a bit.
This commit is contained in:
RedHawk 2023-05-10 13:11:41 +03:00
parent ea1139567a
commit 2b02a786fa
3 changed files with 25 additions and 20 deletions

View File

@ -10,11 +10,12 @@
#include "UserInterface.h" #include "UserInterface.h"
Menu::Menu(ThreadCommon::QueueManager* qm): _qm(qm), Menu::Menu(ThreadCommon::QueueManager* qm): _qm(qm),
current(&Menu::sInitView), set_point(0, 100, 1), current(&Menu::sInitView), ext_temp(-99, 99, 1), set_point(-99, 99, 1),
main_text ("CURRENT %2d DESIRED %2d "), main_text ("CURRENT %3d DESIRED %3d "),
set_point_text("CURRENT %2d DESIRED[%2d] ") set_point_text("CURRENT %3d DESIRED[%3d] ")
{ {
this->SetState(&Menu::sInitView); this->SetState(&Menu::sInitView);
ext_temp.setCurrent(0);
set_point.setCurrent(0); set_point.setCurrent(0);
} }
@ -51,8 +52,8 @@ void Menu::HandleEventPair (Event::EventPair *ep)
} }
break; break;
case Event::ExternalTemp: case Event::ExternalTemp:
//Change ExternalTemp value. //Change ExternalTemp value. -99 <= ext_temp <= 99
this->ext_temp = ep->rd; this->ext_temp.setCurrent(ep->rd);
//Refresh the menu screen. //Refresh the menu screen.
this->HandleObj(MenuObjEvent (MenuObjEvent::eRefresh)); this->HandleObj(MenuObjEvent (MenuObjEvent::eRefresh));
break; break;
@ -73,6 +74,7 @@ void Menu::sInitView(const MenuObjEvent &e)
this->NotifyAndRefreshUI("Loading..."); this->NotifyAndRefreshUI("Loading...");
break; break;
case MenuObjEvent::eUnFocus: case MenuObjEvent::eUnFocus:
printf("NOTE: leave sInitView\n");
this->NotifyAndRefreshUI(""); this->NotifyAndRefreshUI("");
break; break;
case MenuObjEvent::eRollClockWise: case MenuObjEvent::eRollClockWise:
@ -80,6 +82,7 @@ void Menu::sInitView(const MenuObjEvent &e)
case MenuObjEvent::eRollCClockWise: case MenuObjEvent::eRollCClockWise:
break; break;
case MenuObjEvent::eClick: case MenuObjEvent::eClick:
this->SetState(&Menu::sMainView);
break; break;
case MenuObjEvent::eRefresh: case MenuObjEvent::eRefresh:
printf("NOTE: sInitView handled eRefresh.\n"); printf("NOTE: sInitView handled eRefresh.\n");
@ -92,11 +95,12 @@ void Menu::sInitView(const MenuObjEvent &e)
void Menu::sMainView(const MenuObjEvent &e) void Menu::sMainView(const MenuObjEvent &e)
{ {
char screen_text[64]; static char screen_text[64];
switch (e.type) switch (e.type)
{ {
case MenuObjEvent::eFocus: case MenuObjEvent::eFocus:
sprintf(screen_text, main_text, this->ext_temp, this->set_point.getCurrent()); sprintf(screen_text, main_text, this->ext_temp.getCurrent(),
this->set_point.getCurrent());
this->NotifyAndRefreshUI(screen_text); this->NotifyAndRefreshUI(screen_text);
break; break;
case MenuObjEvent::eUnFocus: case MenuObjEvent::eUnFocus:
@ -110,7 +114,8 @@ void Menu::sMainView(const MenuObjEvent &e)
this->SetState(&Menu::sSetPointMod); this->SetState(&Menu::sSetPointMod);
break; break;
case MenuObjEvent::eRefresh: case MenuObjEvent::eRefresh:
sprintf(screen_text, main_text, this->ext_temp, this->set_point.getCurrent()); sprintf(screen_text, main_text, this->ext_temp.getCurrent(),
this->set_point.getCurrent());
this->NotifyAndRefreshUI(screen_text); this->NotifyAndRefreshUI(screen_text);
break; break;
default: default:
@ -120,11 +125,12 @@ void Menu::sMainView(const MenuObjEvent &e)
void Menu::sSetPointMod(const MenuObjEvent &e) void Menu::sSetPointMod(const MenuObjEvent &e)
{ {
char screen_text[64]; static char screen_text[64];
switch (e.type) switch (e.type)
{ {
case MenuObjEvent::eFocus: case MenuObjEvent::eFocus:
sprintf(screen_text, set_point_text, this->ext_temp, this->set_point.getCurrent()); sprintf(screen_text, set_point_text, this->ext_temp.getCurrent(),
this->set_point.getCurrent());
this->NotifyAndRefreshUI(screen_text); this->NotifyAndRefreshUI(screen_text);
break; break;
case MenuObjEvent::eUnFocus: case MenuObjEvent::eUnFocus:
@ -132,19 +138,22 @@ void Menu::sSetPointMod(const MenuObjEvent &e)
break; break;
case MenuObjEvent::eRollClockWise: case MenuObjEvent::eRollClockWise:
set_point.inc(); set_point.inc();
sprintf(screen_text, set_point_text, this->ext_temp, this->set_point.getCurrent()); sprintf(screen_text, set_point_text, this->ext_temp.getCurrent(),
this->set_point.getCurrent());
this->NotifyAndRefreshUI(screen_text); this->NotifyAndRefreshUI(screen_text);
break; break;
case MenuObjEvent::eRollCClockWise: case MenuObjEvent::eRollCClockWise:
set_point.dec(); set_point.dec();
sprintf(screen_text, set_point_text, this->ext_temp, this->set_point.getCurrent()); sprintf(screen_text, set_point_text, this->ext_temp.getCurrent(),
this->set_point.getCurrent());
this->NotifyAndRefreshUI(screen_text); this->NotifyAndRefreshUI(screen_text);
break; break;
case MenuObjEvent::eClick: case MenuObjEvent::eClick:
this->SetState(&Menu::sMainView); this->SetState(&Menu::sMainView);
break; break;
case MenuObjEvent::eRefresh: case MenuObjEvent::eRefresh:
sprintf(screen_text, set_point_text, this->ext_temp, this->set_point.getCurrent()); sprintf(screen_text, set_point_text, this->ext_temp.getCurrent(),
this->set_point.getCurrent());
this->NotifyAndRefreshUI(screen_text); this->NotifyAndRefreshUI(screen_text);
break; break;
default: default:
@ -168,6 +177,6 @@ void Menu::NotifyAndRefreshUI (const char *str)
{ {
//Send string on a queue to UI task. //Send string on a queue to UI task.
UserInterface::InterfaceWithData ud = {UserInterface::LCD1, str}; UserInterface::InterfaceWithData ud = {UserInterface::LCD1, str};
//Event * p_e = new Event(Event::EventType::NotifyUI, *(reinterpret_cast<EventRawData*>(&ud))); this->_qm->send<UserInterface::InterfaceWithData>(
this->_qm->send<UserInterface::InterfaceWithData>(ThreadCommon::QueueManager::ui_event_manager, &ud, portMAX_DELAY); ThreadCommon::QueueManager::ui_event_manager, &ud, portMAX_DELAY);
} }

View File

@ -27,7 +27,7 @@ private:
/* Variables and objects */ /* Variables and objects */
ThreadCommon::QueueManager* _qm; ThreadCommon::QueueManager* _qm;
p_state current; p_state current;
short ext_temp; Counter<EventRawData> ext_temp;
Counter<EventRawData> set_point; Counter<EventRawData> set_point;
const char main_text[64]; const char main_text[64];
const char set_point_text[64]; const char set_point_text[64];

View File

@ -26,15 +26,11 @@ UserInterface::~UserInterface()
void UserInterface::taskFunction() void UserInterface::taskFunction()
{ {
Event data(Event::Null, 0);
InterfaceWithData ui_with_data; InterfaceWithData ui_with_data;
for (;;) for (;;)
{ {
this->_qm->receive<UserInterface::InterfaceWithData>(ThreadCommon::QueueManager::ui_event_manager, &ui_with_data, portMAX_DELAY); this->_qm->receive<UserInterface::InterfaceWithData>(ThreadCommon::QueueManager::ui_event_manager, &ui_with_data, portMAX_DELAY);
//Don't mind the type, we care only about the raw_data.
//EventRawData ed = data.getDataOf(Event::NotifyUI);
//if(ed != ERROR_RETURN)
this->handleEvent(&ui_with_data); this->handleEvent(&ui_with_data);
} }