Merge pull request #50 from vas-dav/menu-array-2
menu: [#38] resolve Menu array of string elements
This commit is contained in:
commit
845f021a50
@ -7,18 +7,34 @@
|
|||||||
|
|
||||||
#include "Menu.h"
|
#include "Menu.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <string.h>
|
||||||
#include "UserInterface.h"
|
#include "UserInterface.h"
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
CURRENT_TEMP,
|
||||||
|
DESIRED_TEMP,
|
||||||
|
DESIRED_TEMP_F,
|
||||||
|
LOADING
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char * interface_messages [] =
|
||||||
|
{
|
||||||
|
"CURRENT %3d ",
|
||||||
|
"DESIRED %3d ",
|
||||||
|
"DESIRED[%3d] ",
|
||||||
|
" Loading... "
|
||||||
|
};
|
||||||
|
|
||||||
Menu::Menu(ThreadCommon::QueueManager* qm): _qm(qm),
|
Menu::Menu(ThreadCommon::QueueManager* qm): _qm(qm),
|
||||||
current(&Menu::sInitView), ext_temp(-99, 99, 1), set_point(-99, 99, 1),
|
current(&Menu::sInitView), ext_temp(-99, 99, 1), set_point(-99, 99, 1)
|
||||||
main_text ("CURRENT %3d DESIRED %3d "),
|
|
||||||
set_point_text("CURRENT %3d DESIRED[%3d] ")
|
|
||||||
{
|
{
|
||||||
LOG_DEBUG("Creating Menu");
|
LOG_DEBUG("Creating Menu");
|
||||||
this->SetState(&Menu::sInitView);
|
this->SetState(&Menu::sInitView);
|
||||||
ext_temp.setCurrent(0);
|
ext_temp.setCurrent(0);
|
||||||
set_point.setCurrent(0);
|
set_point.setCurrent(0);
|
||||||
|
memset(screen_text, 0, 64); // Clear screen
|
||||||
readSetPointFromEEPROM();
|
readSetPointFromEEPROM();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,11 +105,13 @@ void Menu::sInitView(const MenuObjEvent &e)
|
|||||||
{
|
{
|
||||||
case MenuObjEvent::eFocus:
|
case MenuObjEvent::eFocus:
|
||||||
LOG_DEBUG("enter sInitView");
|
LOG_DEBUG("enter sInitView");
|
||||||
this->NotifyAndRefreshUI("Loading...");
|
constructUIString(0, interface_messages[LOADING], this->ext_temp.getCurrent());
|
||||||
|
this->NotifyAndRefreshUI();
|
||||||
break;
|
break;
|
||||||
case MenuObjEvent::eUnFocus:
|
case MenuObjEvent::eUnFocus:
|
||||||
LOG_DEBUG("leave sInitView");
|
LOG_DEBUG("leave sInitView");
|
||||||
this->NotifyAndRefreshUI("");
|
memset(screen_text, 0, 64); // Clear screen
|
||||||
|
this->NotifyAndRefreshUI();
|
||||||
break;
|
break;
|
||||||
case MenuObjEvent::eRollClockWise:
|
case MenuObjEvent::eRollClockWise:
|
||||||
break;
|
break;
|
||||||
@ -119,13 +137,14 @@ void Menu::sMainView(const MenuObjEvent &e)
|
|||||||
{
|
{
|
||||||
case MenuObjEvent::eFocus:
|
case MenuObjEvent::eFocus:
|
||||||
LOG_DEBUG("enter sMainView");
|
LOG_DEBUG("enter sMainView");
|
||||||
sprintf(screen_text, main_text, this->ext_temp.getCurrent(),
|
constructUIString(0, interface_messages[CURRENT_TEMP], this->ext_temp.getCurrent());
|
||||||
this->set_point.getCurrent());
|
constructUIString(1, interface_messages[DESIRED_TEMP], this->set_point.getCurrent());
|
||||||
this->NotifyAndRefreshUI(screen_text);
|
this->NotifyAndRefreshUI();
|
||||||
break;
|
break;
|
||||||
case MenuObjEvent::eUnFocus:
|
case MenuObjEvent::eUnFocus:
|
||||||
LOG_DEBUG("leave sMainView");
|
LOG_DEBUG("leave sMainView");
|
||||||
this->NotifyAndRefreshUI("");
|
memset(screen_text, 0, 64); // Clear screen
|
||||||
|
this->NotifyAndRefreshUI();
|
||||||
break;
|
break;
|
||||||
case MenuObjEvent::eRollClockWise:
|
case MenuObjEvent::eRollClockWise:
|
||||||
break;
|
break;
|
||||||
@ -136,10 +155,9 @@ 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.getCurrent(),
|
constructUIString(0, interface_messages[CURRENT_TEMP], this->ext_temp.getCurrent());
|
||||||
this->set_point.getCurrent());
|
|
||||||
LOG_DEBUG("refresh sMainView");
|
LOG_DEBUG("refresh sMainView");
|
||||||
this->NotifyAndRefreshUI(screen_text);
|
this->NotifyAndRefreshUI();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -155,25 +173,24 @@ void Menu::sSetPointMod(const MenuObjEvent &e)
|
|||||||
{
|
{
|
||||||
case MenuObjEvent::eFocus:
|
case MenuObjEvent::eFocus:
|
||||||
LOG_DEBUG("enter sSetPointMod");
|
LOG_DEBUG("enter sSetPointMod");
|
||||||
sprintf(screen_text, set_point_text, this->ext_temp.getCurrent(),
|
constructUIString(0, interface_messages[CURRENT_TEMP], this->ext_temp.getCurrent());
|
||||||
this->set_point.getCurrent());
|
constructUIString(1, interface_messages[DESIRED_TEMP_F], this->set_point.getCurrent());
|
||||||
this->NotifyAndRefreshUI(screen_text);
|
this->NotifyAndRefreshUI();
|
||||||
break;
|
break;
|
||||||
case MenuObjEvent::eUnFocus:
|
case MenuObjEvent::eUnFocus:
|
||||||
LOG_DEBUG("leave sSetPointMod");
|
LOG_DEBUG("leave sSetPointMod");
|
||||||
this->NotifyAndRefreshUI("");
|
memset(screen_text, 0, 64); // Clear screen
|
||||||
|
this->NotifyAndRefreshUI();
|
||||||
break;
|
break;
|
||||||
case MenuObjEvent::eRollClockWise:
|
case MenuObjEvent::eRollClockWise:
|
||||||
set_point.inc();
|
set_point.inc();
|
||||||
sprintf(screen_text, set_point_text, this->ext_temp.getCurrent(),
|
constructUIString(1, interface_messages[DESIRED_TEMP_F], this->set_point.getCurrent());
|
||||||
this->set_point.getCurrent());
|
this->NotifyAndRefreshUI();
|
||||||
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.getCurrent(),
|
constructUIString(1, interface_messages[DESIRED_TEMP_F], this->set_point.getCurrent());
|
||||||
this->set_point.getCurrent());
|
this->NotifyAndRefreshUI();
|
||||||
this->NotifyAndRefreshUI(screen_text);
|
|
||||||
break;
|
break;
|
||||||
case MenuObjEvent::eClick:
|
case MenuObjEvent::eClick:
|
||||||
LOG_DEBUG("click sSetPointMod");
|
LOG_DEBUG("click sSetPointMod");
|
||||||
@ -189,15 +206,31 @@ void Menu::sSetPointMod(const MenuObjEvent &e)
|
|||||||
break;
|
break;
|
||||||
case MenuObjEvent::eRefresh:
|
case MenuObjEvent::eRefresh:
|
||||||
LOG_DEBUG("refresh sSetPointMod");
|
LOG_DEBUG("refresh sSetPointMod");
|
||||||
sprintf(screen_text, set_point_text, this->ext_temp.getCurrent(),
|
constructUIString(0, interface_messages[CURRENT_TEMP], this->ext_temp.getCurrent());
|
||||||
this->set_point.getCurrent());
|
this->NotifyAndRefreshUI();
|
||||||
this->NotifyAndRefreshUI(screen_text);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Menu::constructUIString(uint8_t line, const char *fmt, ...)
|
||||||
|
{
|
||||||
|
char buff[17];
|
||||||
|
va_list args;
|
||||||
|
va_start (args, fmt);
|
||||||
|
|
||||||
|
size_t char_line_counter = 0;
|
||||||
|
for (uint8_t i = 0; i < line; i++)
|
||||||
|
{
|
||||||
|
char_line_counter += 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
vsprintf (buff, fmt, args);
|
||||||
|
memcpy(screen_text + char_line_counter, buff, 16);
|
||||||
|
va_end (args);
|
||||||
|
}
|
||||||
|
|
||||||
void Menu::SetState (p_state new_state)
|
void Menu::SetState (p_state new_state)
|
||||||
{
|
{
|
||||||
(this->*current) (MenuObjEvent (MenuObjEvent::eUnFocus));
|
(this->*current) (MenuObjEvent (MenuObjEvent::eUnFocus));
|
||||||
@ -210,10 +243,10 @@ void Menu::HandleObj (const MenuObjEvent &event)
|
|||||||
(this->*current) (event);
|
(this->*current) (event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Menu::NotifyAndRefreshUI (const char *str)
|
void Menu::NotifyAndRefreshUI ()
|
||||||
{
|
{
|
||||||
//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, screen_text};
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,16 +31,16 @@ private:
|
|||||||
Counter<EventRawData> ext_temp;
|
Counter<EventRawData> ext_temp;
|
||||||
Counter<EventRawData> set_point;
|
Counter<EventRawData> set_point;
|
||||||
EEPROMio eeprom;
|
EEPROMio eeprom;
|
||||||
const char main_text[64];
|
char screen_text[64];
|
||||||
const char set_point_text[64];
|
|
||||||
/* States */
|
/* States */
|
||||||
void sInitView(const MenuObjEvent &e);
|
void sInitView(const MenuObjEvent &e);
|
||||||
void sMainView(const MenuObjEvent &e);
|
void sMainView(const MenuObjEvent &e);
|
||||||
void sSetPointMod(const MenuObjEvent &e);
|
void sSetPointMod(const MenuObjEvent &e);
|
||||||
/* Methods */
|
/* Methods */
|
||||||
|
void constructUIString(uint8_t line, const char *fmt, ...);
|
||||||
void SetState (p_state new_state);
|
void SetState (p_state new_state);
|
||||||
void HandleObj (const MenuObjEvent &event);
|
void HandleObj (const MenuObjEvent &event);
|
||||||
void NotifyAndRefreshUI (const char *str);
|
void NotifyAndRefreshUI ();
|
||||||
void readSetPointFromEEPROM (void);
|
void readSetPointFromEEPROM (void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user