Menu & UI: [#25, #35]Communication between these tasks.

* The code is a mess for now. I'm not sure if there is any reason to
send a whole event to UI, it's better to send InterfaceWithData.
* Sending to queue from Menu isn't great as well.
This commit is contained in:
RedHawk 2023-05-08 16:08:34 +03:00
parent cd84528e61
commit f0bbfb22ab
6 changed files with 16 additions and 11 deletions

View File

@ -8,8 +8,8 @@
#include "Manager.h" #include "Manager.h"
#include "ThreadCommon.h" #include "ThreadCommon.h"
Manager::Manager(ThreadCommon::QueueManager* qm, Menu * menu) Manager::Manager(ThreadCommon::QueueManager* qm)
: _qm(qm), _menu(menu) : _qm(qm), _menu{qm}
{ {
} }
@ -43,13 +43,12 @@ void Manager::taskFunction()
{ {
_qm->receive<Event>(ThreadCommon::QueueManager::manager_event_master, &data, portMAX_DELAY); _qm->receive<Event>(ThreadCommon::QueueManager::manager_event_master, &data, portMAX_DELAY);
event_pair= this->parseEvent(&data); event_pair= this->parseEvent(&data);
_menu->HandleEventPair(&event_pair); _menu.HandleEventPair(&event_pair);
} }
} }
void thread_manager(void* pvParams) void thread_manager(void* pvParams)
{ {
Menu menu; Manager m(static_cast<ThreadCommon::QueueManager*>(pvParams));
Manager m(static_cast<ThreadCommon::QueueManager*>(pvParams), &menu);
m.taskFunction(); m.taskFunction();
} }

View File

@ -16,13 +16,13 @@
class Manager { class Manager {
public: public:
Manager(ThreadCommon::QueueManager* qm, Menu * menu); Manager(ThreadCommon::QueueManager* qm);
virtual ~Manager(); virtual ~Manager();
void taskFunction(); void taskFunction();
private: private:
Event::EventPair parseEvent(Event* e); Event::EventPair parseEvent(Event* e);
ThreadCommon::QueueManager* _qm; ThreadCommon::QueueManager* _qm;
Menu* _menu; Menu _menu;
EventRawData rotary_action; EventRawData rotary_action;
}; };

View File

@ -7,8 +7,10 @@
#include "Menu.h" #include "Menu.h"
#include <assert.h> #include <assert.h>
#include "UserInterface.h"
Menu::Menu(): current(&Menu::sInitView), set_point(0, 100, 1), Menu::Menu(ThreadCommon::QueueManager* qm): _qm(qm),
current(&Menu::sInitView), set_point(0, 100, 1),
main_text ("CURRENT %2d DESIRED %2d "), main_text ("CURRENT %2d DESIRED %2d "),
set_point_text("CURRENT %2d DESIRED[%2d] ") set_point_text("CURRENT %2d DESIRED[%2d] ")
{ {
@ -164,4 +166,7 @@ void Menu::HandleObj (const MenuObjEvent &event)
void Menu::NotifyAndRefreshUI (const char *str) 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};
Event * p_e = new Event(Event::EventType::NotifyUI, *(reinterpret_cast<EventRawData*>(&ud)));
this->_qm->send<Event>(ThreadCommon::QueueManager::ui_event_manager, p_e, portMAX_DELAY);
} }

View File

@ -19,12 +19,13 @@ typedef void (Menu::*p_state) (const MenuObjEvent &);
class Menu class Menu
{ {
public: public:
Menu (); Menu (ThreadCommon::QueueManager* qm);
virtual ~Menu (); virtual ~Menu ();
void HandleEventPair (Event::EventPair *ep); void HandleEventPair (Event::EventPair *ep);
private: private:
/* Variables and objects */ /* Variables and objects */
ThreadCommon::QueueManager* _qm;
p_state current; p_state current;
int ext_temp; int ext_temp;
Counter<EventRawData> set_point; Counter<EventRawData> set_point;

View File

@ -32,7 +32,7 @@ void UserInterface::taskFunction()
for (;;) for (;;)
{ {
this->_qm->receive(ThreadCommon::QueueManager::ui_event_manager, &data, portMAX_DELAY); this->_qm->receive<Event>(ThreadCommon::QueueManager::ui_event_manager, &data, portMAX_DELAY);
//Don't mind the type, we care only about the raw_data. //Don't mind the type, we care only about the raw_data.
EventRawData ed = data.getDataOf(Event::NotifyUI); EventRawData ed = data.getDataOf(Event::NotifyUI);
if(ed != ERROR_RETURN) if(ed != ERROR_RETURN)

View File

@ -23,7 +23,7 @@ public:
union InterfaceData union InterfaceData
{ {
char str[64]; const char str[64];
}; };
struct InterfaceWithData struct InterfaceWithData