优化整定一版
This commit is contained in:
@ -14,9 +14,10 @@
|
||||
* @brief 菜单事件结构体(事件队列元素)
|
||||
*/
|
||||
typedef struct {
|
||||
MenuEventType type; ///< 事件类型
|
||||
uint32_t param; ///< 事件附加参数
|
||||
uint32_t timestamp; ///< 事件产生时间(ms,用于超时处理)
|
||||
MenuEventType type; ///< 事件类型
|
||||
uint32_t param; ///< 事件附加参数
|
||||
uint32_t timestamp; ///< 事件产生时间(ms,用于超时处理)
|
||||
MenuEventPriority priority; ///< 事件优先级
|
||||
} MenuEvent;
|
||||
|
||||
/**
|
||||
@ -61,6 +62,27 @@ typedef struct {
|
||||
uint8_t count; ///< 队列元素数量
|
||||
} MenuEventQueue;
|
||||
|
||||
/**
|
||||
* @brief 菜单状态枚举(状态机核心)
|
||||
*/
|
||||
typedef enum {
|
||||
MENU_STATE_INIT = 0, ///< 初始化状态
|
||||
MENU_STATE_NORMAL, ///< 正常导航状态
|
||||
MENU_STATE_PARAM_EDIT, ///< 参数编辑状态
|
||||
MENU_STATE_CONFIRM, ///< 确认状态(如保存/退出确认)
|
||||
MENU_STATE_ERROR, ///< 错误状态
|
||||
} MenuState;
|
||||
|
||||
/**
|
||||
* @brief 菜单状态转换结构体
|
||||
*/
|
||||
typedef struct {
|
||||
MenuState current_state; ///< 当前状态
|
||||
MenuEventType event; ///< 触发事件
|
||||
MenuState next_state; ///< 下一个状态
|
||||
MenuErrCode (*action)(MenuGlobalCtx* global_ctx); ///< 状态转换动作
|
||||
} MenuStateTransition;
|
||||
|
||||
/**
|
||||
* @brief 菜单核心上下文(全局唯一,存储菜单状态)
|
||||
*/
|
||||
@ -69,6 +91,7 @@ typedef struct {
|
||||
MenuStack stack; ///< 菜单导航栈
|
||||
MenuEventQueue event_queue; ///< 事件队列
|
||||
MenuNodeId current_node_id; ///< 当前选中的节点ID
|
||||
MenuState current_state; ///< 当前菜单状态
|
||||
uint32_t last_refresh_tick; ///< 上次刷新时间(ms)
|
||||
bool is_initialized; ///< 是否已初始化
|
||||
} MenuCoreCtx;
|
||||
@ -76,34 +99,25 @@ typedef struct {
|
||||
/************************** 核心内部接口声明 **************************/
|
||||
/**
|
||||
* @brief 查找菜单节点(通过ID)
|
||||
* @param global_ctx 全局上下文指针
|
||||
* @param node_id 节点ID
|
||||
* @return 节点指针(NULL表示未找到)
|
||||
*/
|
||||
MenuNode* menu_core_find_node(MenuNodeId node_id);
|
||||
|
||||
/**
|
||||
* @brief 初始化菜单核心上下文
|
||||
* @return 错误码
|
||||
*/
|
||||
MenuErrCode menu_core_ctx_init(void);
|
||||
|
||||
/**
|
||||
* @brief 获取菜单核心上下文(内部唯一访问入口)
|
||||
* @return 菜单核心上下文指针
|
||||
*/
|
||||
MenuCoreCtx* menu_core_get_ctx(void);
|
||||
MenuNode* menu_core_find_node(MenuGlobalCtx* global_ctx, MenuNodeId node_id);
|
||||
|
||||
/**
|
||||
* @brief 处理单个菜单事件
|
||||
* @param global_ctx 全局上下文指针
|
||||
* @param event 事件指针
|
||||
* @return 错误码
|
||||
*/
|
||||
MenuErrCode menu_core_handle_event(const MenuEvent* event);
|
||||
MenuErrCode menu_core_handle_event(MenuGlobalCtx* global_ctx, const MenuEvent* event);
|
||||
|
||||
/**
|
||||
* @brief 刷新菜单显示(内部调用,对接port层显示接口)
|
||||
* @param global_ctx 全局上下文指针
|
||||
*/
|
||||
void menu_core_refresh_display(void);
|
||||
void menu_core_refresh_display(MenuGlobalCtx* global_ctx);
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user