初始化整定

This commit is contained in:
冯佳
2025-12-22 16:00:51 +08:00
parent 8bddc34c88
commit 331c9a285d
58 changed files with 1794 additions and 9011 deletions

View File

@ -1,215 +0,0 @@
/**
**********************************************************************************************************************
* @file menu_stack.c
* @brief 菜单组件栈管理实现
* @author menu_component
* @date 2025-12-19
**********************************************************************************************************************
*/
/* Includes ----------------------------------------------------------------------------------------------------------*/
#include "menu_types.h"
/* 函数实现 ---------------------------------------------------------------------------------------------------------*/
/**
* @brief 初始化菜单栈
* @param stack 栈指针
* @param max_depth 最大深度
*/
void menu_stack_init(MenuStack* stack, uint8_t max_depth)
{
MENU_ASSERT(stack != NULL);
stack->top = 0;
stack->max_depth = max_depth;
// 初始化栈元素为0
for (uint8_t i = 0; i < max_depth; i++) {
stack->items[i] = 0;
}
}
/**
* @brief 检查栈是否为空
* @param stack 栈指针
* @return true为空false不为空
*/
bool menu_stack_is_empty(const MenuStack* stack)
{
MENU_ASSERT(stack != NULL);
return (stack->top == 0);
}
/**
* @brief 检查栈是否已满
* @param stack 栈指针
* @return true已满false未满
*/
bool menu_stack_is_full(const MenuStack* stack)
{
MENU_ASSERT(stack != NULL);
return (stack->top >= stack->max_depth);
}
/**
* @brief 获取栈的当前深度
* @param stack 栈指针
* @return 当前深度
*/
uint8_t menu_stack_get_depth(const MenuStack* stack)
{
MENU_ASSERT(stack != NULL);
return stack->top;
}
/**
* @brief 向栈中压入元素
* @param stack 栈指针
* @param node_id 要压入的节点ID
* @return 错误码
*/
MenuErrCode menu_stack_push(MenuStack* stack, MenuNodeId node_id)
{
MENU_ASSERT(stack != NULL);
if (menu_stack_is_full(stack)) {
return MENU_ERR_OUT_OF_MEMORY;
}
stack->items[stack->top] = node_id;
stack->top++;
return MENU_ERR_OK;
}
/**
* @brief 从栈中弹出元素
* @param stack 栈指针
* @param node_id 用于存储弹出的节点ID
* @return 错误码
*/
MenuErrCode menu_stack_pop(MenuStack* stack, MenuNodeId* node_id)
{
MENU_ASSERT(stack != NULL);
MENU_ASSERT(node_id != NULL);
if (menu_stack_is_empty(stack)) {
return MENU_ERR_QUEUE_EMPTY;
}
stack->top--;
*node_id = stack->items[stack->top];
stack->items[stack->top] = 0;
return MENU_ERR_OK;
}
/**
* @brief 获取栈顶元素
* @param stack 栈指针
* @param node_id 用于存储栈顶节点ID
* @return 错误码
*/
MenuErrCode menu_stack_peek(const MenuStack* stack, MenuNodeId* node_id)
{
MENU_ASSERT(stack != NULL);
MENU_ASSERT(node_id != NULL);
if (menu_stack_is_empty(stack)) {
return MENU_ERR_QUEUE_EMPTY;
}
*node_id = stack->items[stack->top - 1];
return MENU_ERR_OK;
}
/**
* @brief 清空栈
* @param stack 栈指针
*/
void menu_stack_clear(MenuStack* stack)
{
MENU_ASSERT(stack != NULL);
stack->top = 0;
// 清空栈元素
for (uint8_t i = 0; i < stack->max_depth; i++) {
stack->items[i] = 0;
}
}
/**
* @brief 初始化菜单导航路径
* @param nav_path 导航路径指针
* @param max_depth 最大深度
*/
void menu_nav_path_init(MenuNavPath* nav_path, uint8_t max_depth)
{
MENU_ASSERT(nav_path != NULL);
nav_path->depth = 0;
nav_path->max_depth = max_depth;
// 初始化路径为0
for (uint8_t i = 0; i < max_depth; i++) {
nav_path->path[i] = 0;
}
}
/**
* @brief 添加导航路径节点
* @param nav_path 导航路径指针
* @param node_id 要添加的节点ID
* @return 错误码
*/
MenuErrCode menu_nav_path_add(MenuNavPath* nav_path, MenuNodeId node_id)
{
MENU_ASSERT(nav_path != NULL);
if (nav_path->depth >= nav_path->max_depth) {
return MENU_ERR_OUT_OF_MEMORY;
}
nav_path->path[nav_path->depth] = node_id;
nav_path->depth++;
return MENU_ERR_OK;
}
/**
* @brief 移除导航路径最后一个节点
* @param nav_path 导航路径指针
* @return 错误码
*/
MenuErrCode menu_nav_path_remove_last(MenuNavPath* nav_path)
{
MENU_ASSERT(nav_path != NULL);
if (nav_path->depth == 0) {
return MENU_ERR_QUEUE_EMPTY;
}
nav_path->depth--;
nav_path->path[nav_path->depth] = 0;
return MENU_ERR_OK;
}
/**
* @brief 清空导航路径
* @param nav_path 导航路径指针
*/
void menu_nav_path_clear(MenuNavPath* nav_path)
{
MENU_ASSERT(nav_path != NULL);
nav_path->depth = 0;
// 清空路径
for (uint8_t i = 0; i < nav_path->max_depth; i++) {
nav_path->path[i] = 0;
}
}