Lots of refactoring
This commit is contained in:
210
source/menu.c
210
source/menu.c
@@ -73,7 +73,6 @@ extern SYSTEM_DATA_t sys;
|
||||
|
||||
extern uint8_t Cur_Mode;
|
||||
|
||||
extern ADC_t adc;
|
||||
extern uint8_t frequency,psu_failed;
|
||||
extern uint8_t Dds_Pot_Val[];
|
||||
extern uint8_t Port_State[];
|
||||
@@ -81,8 +80,9 @@ extern uint8_t Port_State[];
|
||||
extern HARDWARE_FIX_t hwf;
|
||||
extern uint32_t systemTime;
|
||||
|
||||
MenuItem_t _menuItems[50];
|
||||
|
||||
#define MENU_ITEM_SIZE 50
|
||||
MenuItem_t _menuItems[MENU_ITEM_SIZE];
|
||||
int _menuItemsIndex;
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
@@ -93,6 +93,7 @@ static Menu_t* getNewMenu(MenuHandler_t handler);
|
||||
static Menu_t* getCurrentMenu(void);
|
||||
static int handleSystemInfoMenu(Menu_t *menu);
|
||||
static int handleAutoShutdown(Menu_t *menu);
|
||||
static int handleFrequencies(Menu_t *menu);
|
||||
|
||||
static void ClearMenuItems(MenuItem_t items[], uint32_t num);
|
||||
|
||||
@@ -120,11 +121,13 @@ static void createMenuItem(MenuItemId_t id, MenuItem_t *item)
|
||||
{
|
||||
|
||||
item->id = id;
|
||||
item->handler = NULL;
|
||||
|
||||
switch (id)
|
||||
{
|
||||
case MENU_ID_SYSINFO:
|
||||
{
|
||||
item->pMonoIcon = menuMore;
|
||||
item->pMonoIcon = (uint32_t*)menuMore;
|
||||
strcpy(item->text, "System Information");
|
||||
item->handler = handleSystemInfoMenu;
|
||||
break;
|
||||
@@ -132,8 +135,9 @@ static void createMenuItem(MenuItemId_t id, MenuItem_t *item)
|
||||
|
||||
case MENU_ID_FREQUENCIES:
|
||||
{
|
||||
item->pMonoIcon = menuMore;
|
||||
item->pMonoIcon = (uint32_t*)menuMore;
|
||||
strcpy(item->text, "Frequencies");
|
||||
item->handler = handleFrequencies;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -147,7 +151,14 @@ static void createMenuItem(MenuItemId_t id, MenuItem_t *item)
|
||||
|
||||
case MENU_ID_LANGUAGE:
|
||||
{
|
||||
item->pMonoIcon = menuMore;
|
||||
item->pMonoIcon = (uint32_t*)menuMore;
|
||||
strcpy(item->text, "Language");
|
||||
break;
|
||||
}
|
||||
|
||||
case MENU_ID_FREQUENCY:
|
||||
{
|
||||
item->pMonoIcon = NULL;
|
||||
strcpy(item->text, "Language");
|
||||
break;
|
||||
}
|
||||
@@ -155,7 +166,7 @@ static void createMenuItem(MenuItemId_t id, MenuItem_t *item)
|
||||
|
||||
}
|
||||
|
||||
static void handleUpDown(uint32_t pressed, Menu_t *menu)
|
||||
static void handleMenuKeys(uint32_t pressed, Menu_t *menu)
|
||||
{
|
||||
switch (menu->longPress)
|
||||
{
|
||||
@@ -166,7 +177,7 @@ static void handleUpDown(uint32_t pressed, Menu_t *menu)
|
||||
if (systemTime >= menu->nextRepeat)
|
||||
{
|
||||
pressed = KEY_UP;
|
||||
menu->nextRepeat = systemTime + 100;
|
||||
menu->nextRepeat = systemTime + KEY_REPEAT_TIME;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -217,10 +228,12 @@ static void handleUpDown(uint32_t pressed, Menu_t *menu)
|
||||
{
|
||||
menu->selected++;
|
||||
|
||||
|
||||
if(menu->selected >= menu->itemCount)
|
||||
{
|
||||
menu->selected = menu->itemCount - 1;
|
||||
}
|
||||
|
||||
menu->draw = true;
|
||||
|
||||
break;
|
||||
@@ -233,6 +246,13 @@ static void handleUpDown(uint32_t pressed, Menu_t *menu)
|
||||
menu->nextRepeat = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case KEY_BACK:
|
||||
{
|
||||
menu->exitCode = MENU_EXIT;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (menu->draw)
|
||||
@@ -246,6 +266,14 @@ static void handleUpDown(uint32_t pressed, Menu_t *menu)
|
||||
menu->displayIndex--;
|
||||
}
|
||||
}
|
||||
|
||||
if (pressed == KEY_ENTER)
|
||||
{
|
||||
if (menu->items[menu->selected].handler != NULL)
|
||||
{
|
||||
menu->items[menu->selected].handler(NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void drawScrollBar(Menu_t *menu)
|
||||
@@ -293,11 +321,11 @@ static int handleAutoShutdown(Menu_t *menu)
|
||||
|
||||
}
|
||||
|
||||
static int handleSystemInfoMenu(Menu_t *menu)
|
||||
static int handleFrequencies(Menu_t *menu)
|
||||
{
|
||||
if (menu == NULL)
|
||||
{
|
||||
menu = getNewMenu(handleSystemInfoMenu);
|
||||
menu = getNewMenu(handleFrequencies);
|
||||
|
||||
if (menu == NULL)
|
||||
{
|
||||
@@ -308,10 +336,20 @@ static int handleSystemInfoMenu(Menu_t *menu)
|
||||
if (menu->init)
|
||||
{
|
||||
int itemCount = 0;
|
||||
menu->items = &_menuItems[_menuItemsIndex];
|
||||
MenuItem_t *item;
|
||||
int numFreq = FREQ_GetNumFrequencies();
|
||||
|
||||
createMenuItem(MENU_ID_SYSINFO , &menu->items[itemCount++]);
|
||||
createMenuItem(MENU_ID_FREQUENCIES , &menu->items[itemCount++]);
|
||||
for (int i=0; i<numFreq; ++i)
|
||||
{
|
||||
item = &menu->items[itemCount++];
|
||||
item->id = MENU_ID_FREQUENCY;
|
||||
item->handler = NULL;
|
||||
FREQ_GetFrequencyName(i, item->text);
|
||||
item->data = (void*)FREQ_GetFreqPointerByIndex(i);
|
||||
}
|
||||
|
||||
_menuItemsIndex += itemCount;
|
||||
menu->itemCount = itemCount;
|
||||
menu->init = false;
|
||||
menu->draw = true;
|
||||
@@ -320,19 +358,14 @@ static int handleSystemInfoMenu(Menu_t *menu)
|
||||
|
||||
uint32_t pressed = KEY_GetPressed();
|
||||
|
||||
handleUpDown(pressed, menu);
|
||||
handleMenuKeys(pressed, menu);
|
||||
|
||||
if (pressed == KEY_BACK)
|
||||
{
|
||||
menu->exitCode = MENU_EXIT;
|
||||
}
|
||||
else
|
||||
if (pressed == KEY_ENTER)
|
||||
{
|
||||
if (menu->items[menu->selected].handler != NULL)
|
||||
{
|
||||
menu->items[menu->selected].handler(NULL);
|
||||
}
|
||||
FREQUENCY_t *freq = (FREQUENCY_t*)menu->items[menu->selected].data;
|
||||
|
||||
freq->enabled ^= 1;
|
||||
menu->draw = true;
|
||||
}
|
||||
|
||||
if (menu->draw)
|
||||
@@ -348,14 +381,17 @@ static int handleSystemInfoMenu(Menu_t *menu)
|
||||
{
|
||||
item = &menu->items[i];
|
||||
|
||||
//Menu strings
|
||||
FL_DrawTranslatedString(item->text, MENU_MAIN_TEXT_X, MENU_MAIN_TEXT_Y_START + (i-menu->displayIndex)*MENU_LINE_HEIGHT, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT);
|
||||
//Frequency name
|
||||
FL_DrawString(item->text, MENU_MAIN_TEXT_X, MENU_MAIN_TEXT_Y_START + (i - menu->displayIndex)*MENU_LINE_HEIGHT, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT);
|
||||
|
||||
|
||||
// Draw item status
|
||||
if (item->pMonoIcon != NULL)
|
||||
//checkBoxes
|
||||
if(FREQ_GetFreqByIndex(i).enabled)
|
||||
{
|
||||
GL_DrawMonoBitmap(item->pMonoIcon, MENU_MAIN_STATUS_X, MENU_MAIN_TEXT_Y_START + (i-menu->displayIndex)*MENU_LINE_HEIGHT + MENU_MAIN_STATUS_Y_OFF, LCD_DRAW_SET);
|
||||
GL_DrawMonoBitmap(box_checked, MENU_MAIN_STATUS_X, MENU_MAIN_TEXT_Y_START +2+ (i - menu->displayIndex)*MENU_LINE_HEIGHT, LCD_DRAW_SET);
|
||||
}
|
||||
else
|
||||
{
|
||||
GL_DrawMonoBitmap(box_unchecked, MENU_MAIN_STATUS_X, MENU_MAIN_TEXT_Y_START +2+ (i - menu->displayIndex)*MENU_LINE_HEIGHT, LCD_DRAW_SET);
|
||||
}
|
||||
|
||||
|
||||
@@ -374,7 +410,56 @@ static int handleSystemInfoMenu(Menu_t *menu)
|
||||
|
||||
return menu->exitCode;
|
||||
|
||||
//SystemInfoMenu();
|
||||
}
|
||||
|
||||
static int handleSystemInfoMenu(Menu_t *menu)
|
||||
{
|
||||
if (menu == NULL)
|
||||
{
|
||||
menu = getNewMenu(handleSystemInfoMenu);
|
||||
|
||||
if (menu == NULL)
|
||||
{
|
||||
return MENU_EXIT;
|
||||
}
|
||||
}
|
||||
|
||||
if (menu->init)
|
||||
{
|
||||
|
||||
menu->items = NULL;
|
||||
menu->itemCount = 2;
|
||||
|
||||
menu->init = false;
|
||||
menu->draw = true;
|
||||
|
||||
}
|
||||
|
||||
uint32_t pressed = KEY_GetPressed();
|
||||
|
||||
handleMenuKeys(pressed, menu);
|
||||
|
||||
if (menu->draw)
|
||||
{
|
||||
|
||||
LCD_Clear();
|
||||
|
||||
if (menu->selected == 0)
|
||||
{
|
||||
FL_DrawString("Menu 1", MENU_MAIN_TEXT_X, MENU_MAIN_TEXT_Y_START, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT);
|
||||
}
|
||||
else
|
||||
if (menu->selected == 1)
|
||||
{
|
||||
FL_DrawString("Menu 2", MENU_MAIN_TEXT_X, MENU_MAIN_TEXT_Y_START, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT);
|
||||
}
|
||||
|
||||
LCD_Update();
|
||||
|
||||
menu->draw = false;
|
||||
}
|
||||
|
||||
return menu->exitCode;
|
||||
}
|
||||
|
||||
static int handleMainMenu(Menu_t *menu)
|
||||
@@ -391,17 +476,14 @@ static int handleMainMenu(Menu_t *menu)
|
||||
{
|
||||
int itemCount = 0;
|
||||
|
||||
menu->items = &_menuItems[_menuItemsIndex];
|
||||
|
||||
createMenuItem(MENU_ID_SYSINFO , &menu->items[itemCount++]);
|
||||
createMenuItem(MENU_ID_FREQUENCIES , &menu->items[itemCount++]);
|
||||
createMenuItem(MENU_ID_AUTOSHUTDOWN , &menu->items[itemCount++]);
|
||||
createMenuItem(MENU_ID_LANGUAGE , &menu->items[itemCount++]);
|
||||
|
||||
createMenuItem(MENU_ID_SYSINFO , &menu->items[itemCount++]);
|
||||
createMenuItem(MENU_ID_FREQUENCIES , &menu->items[itemCount++]);
|
||||
createMenuItem(MENU_ID_AUTOSHUTDOWN , &menu->items[itemCount++]);
|
||||
createMenuItem(MENU_ID_LANGUAGE , &menu->items[itemCount++]);
|
||||
|
||||
_menuItemsIndex += itemCount;
|
||||
menu->itemCount = itemCount;
|
||||
menu->init = false;
|
||||
menu->draw = true;
|
||||
@@ -410,21 +492,21 @@ static int handleMainMenu(Menu_t *menu)
|
||||
|
||||
uint32_t pressed = KEY_GetPressed();
|
||||
|
||||
handleUpDown(pressed, menu);
|
||||
handleMenuKeys(pressed, menu);
|
||||
|
||||
if (pressed == KEY_BACK)
|
||||
{
|
||||
menu->exitCode = MENU_EXIT;
|
||||
}
|
||||
else
|
||||
if (pressed == KEY_ENTER)
|
||||
{
|
||||
if (menu->items[menu->selected].handler != NULL)
|
||||
{
|
||||
menu->items[menu->selected].handler(NULL);
|
||||
//return MENU_OK;
|
||||
}
|
||||
}
|
||||
// if (pressed == KEY_BACK)
|
||||
// {
|
||||
// menu->exitCode = MENU_EXIT;
|
||||
// }
|
||||
// else
|
||||
// if (pressed == KEY_ENTER)
|
||||
// {
|
||||
// if (menu->items[menu->selected].handler != NULL)
|
||||
// {
|
||||
// menu->items[menu->selected].handler(NULL);
|
||||
// //return MENU_OK;
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
if (menu->draw)
|
||||
@@ -482,7 +564,7 @@ static void ClearMenuItems(MenuItem_t items[], uint32_t num)
|
||||
for(uint32_t i = 0; i < num; i++)
|
||||
{
|
||||
items[i].pMonoIcon = NULL; //Init mono icon pointer to null
|
||||
items[i].text[0] = NULL; //Init first char to null
|
||||
items[i].text[0] = '\0'; //Init first char to null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -822,17 +904,17 @@ static void DisplayDiagnostics(void)
|
||||
yPos += yInc;
|
||||
// yPos += yInc;
|
||||
|
||||
sprintf(tempString, "%d", adc.V_OffsetAdc);
|
||||
sprintf(tempString, "%d", sys.adc.V_OffsetAdc);
|
||||
FL_DrawString(tempString, xCol2, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); //voltage offset
|
||||
if(!adc.vosOK)
|
||||
if(!sys.adc.vosOK)
|
||||
{
|
||||
FL_DrawString("ERR", xCol1 + 30, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT);
|
||||
}
|
||||
yPos += yInc;
|
||||
|
||||
sprintf(tempString, "%d", adc.I_OffsetAdc);
|
||||
sprintf(tempString, "%d", sys.adc.I_OffsetAdc);
|
||||
FL_DrawString(tempString, xCol2, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT); //current offset
|
||||
if(!adc.iosOK)
|
||||
if(!sys.adc.iosOK)
|
||||
{
|
||||
FL_DrawString("ERR", xCol1 + 30, yPos, MENU_FONT, LCD_DRAW_SET, FL_ALIGN_LEFT);
|
||||
}
|
||||
@@ -1241,6 +1323,8 @@ void MENU_Init(void)
|
||||
ClearMenuItems(mainMenu, MAIN_MENU_NUM_TX10);
|
||||
ClearMenuItems(langMenu, LANG_MENU_NUM);
|
||||
|
||||
_menuItemsIndex = 0;
|
||||
|
||||
for (int i=0; i < MENU_STACK_SIZE; ++i)
|
||||
{
|
||||
_menuData.menuStack[i].selected = 0;
|
||||
@@ -1484,11 +1568,16 @@ void Menu_init(void)
|
||||
_menuData.menuStack[i].displayIndex = 0;
|
||||
_menuData.menuStack[i].exitCode = MENU_OK;
|
||||
|
||||
for (int j=0; j<MENU_ITEM_SIZE; ++j)
|
||||
{
|
||||
_menuData.menuStack[i].items[j].id = MENU_ID_NONE;
|
||||
_menuData.menuStack[i].items[j].handler = NULL;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
for (int j=0; j<MENU_ITEM_SIZE; ++j)
|
||||
{
|
||||
//_menuData.menuStack[i].items[j].id = MENU_ID_NONE;
|
||||
//_menuData.menuStack[i].items[j].handler = NULL;
|
||||
|
||||
_menuItems[j].id = MENU_ID_NONE;
|
||||
_menuItems[j].handler = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1505,6 +1594,7 @@ void Menu_mainMenu(void)
|
||||
void Menu_service(void)
|
||||
{
|
||||
int exitCode = MENU_OK;
|
||||
Menu_t *menu;
|
||||
|
||||
// run the menu state machine and prevent blocking
|
||||
if (_menuData.currentMenu != NULL)
|
||||
@@ -1516,11 +1606,15 @@ void Menu_service(void)
|
||||
case MENU_HOME:
|
||||
{
|
||||
_menuData.stackCount = 0;
|
||||
_menuItemsIndex = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case MENU_EXIT:
|
||||
{
|
||||
menu = getCurrentMenu();
|
||||
_menuItemsIndex -= (menu->items != NULL ? menu->itemCount : 0);
|
||||
|
||||
// pop the menu off the stack
|
||||
_menuData.stackCount--;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user