Lots of refactoring

This commit is contained in:
2025-06-11 10:55:00 -05:00
parent a437bcf8b5
commit aaa7f0dc29
35 changed files with 1165 additions and 809 deletions

View File

@@ -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--;