/** * 菜单系统与 UI 交互 * 基于 OLED 128x64 的层级菜单 * 支持: 模型选择、高频头配置、通道映射、混控、PWM驱动、首页设置 */ #ifndef MENU_H #define MENU_H #include "main.h" #include "oled.h" #include "input.h" #include "storage.h" #include "pwm_out.h" #include "nrf24l01.h" /* 页面 ID */ #define PAGE_HOME 0 #define PAGE_MAIN_MENU 1 #define PAGE_MODEL_LIST 2 #define PAGE_MODEL_NEW 3 #define PAGE_MODEL_EDIT 4 #define PAGE_CHANNEL_MAP 5 #define PAGE_MIXER 6 #define PAGE_MIXER_EDIT 7 #define PAGE_TELEM 8 #define PAGE_RF_CONFIG 9 #define PAGE_NRF_CONFIG 10 #define PAGE_CRFS_CONFIG 11 #define PAGE_PWM_CONFIG 12 #define PAGE_HOME_SET 13 #define PAGE_BIND 14 #define PAGE_RF_QUICK 15 /* 菜单项最大数 */ #define MENU_MAX_ITEMS 10 /* 菜单项结构 */ typedef struct { const char *text; uint8_t target_page; void (*action)(void); /* 可选回调 */ } MenuItem_t; /* 页面上下文 */ typedef struct { uint8_t page_id; uint8_t cursor; /* 当前选中项 */ uint8_t scroll_offset; /* 滚动偏移 */ uint8_t item_count; MenuItem_t items[MENU_MAX_ITEMS]; uint8_t edit_idx; /* 编辑模式下的索引 */ uint8_t edit_value; /* 编辑值 */ char edit_str[16]; /* 编辑字符串 */ uint8_t edit_str_len; } Page_t; /* 函数声明 */ void Menu_Init(void); void Menu_Run(void); /* 主循环调用 */ /* 页面渲染 */ void Menu_DrawHome(void); void Menu_DrawMainMenu(void); void Menu_DrawModelList(void); void Menu_DrawModelNew(void); void Menu_DrawChannelMap(void); void Menu_DrawMixer(void); void Menu_DrawMixerEdit(void); void Menu_DrawRFConfig(void); void Menu_DrawNRFConfig(void); void Menu_DrawCRFSConfig(void); void Menu_DrawPWMConfig(void); void Menu_DrawHomeSet(void); void Menu_DrawBind(void); void Menu_DrawRFQuick(void); /* 混控计算 */ void Mixer_Compute(int16_t *channels); /* 全局页面状态 */ extern Page_t g_page; /* 通道输出值 (混控后) */ extern int16_t g_channels[CHANNEL_COUNT]; #endif /* MENU_H */