初始化demo版本
This commit is contained in:
181
menu.h
Normal file
181
menu.h
Normal file
@ -0,0 +1,181 @@
|
||||
/**
|
||||
**********************************************************************************************************************
|
||||
* @file cot_menu.h
|
||||
* @brief 该文件提供菜单框架所有函数原型
|
||||
* @author const_zpc any question please send mail to const_zpc@163.com
|
||||
* @date 2024-06-09
|
||||
**********************************************************************************************************************
|
||||
*
|
||||
**********************************************************************************************************************
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -----------------------------------------------------------------------------*/
|
||||
#ifndef MENU_H
|
||||
#define MENU_H
|
||||
|
||||
|
||||
/* Includes ----------------------------------------------------------------------------------------------------------*/
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/******************************************* 配置项 ********************************************************************/
|
||||
|
||||
/* 定义 _MENU_USE_MALLOC_ 则采用 malloc/free 的方式实现多级菜单, 否则通过数组的形式 */
|
||||
// #define _MENU_USE_MALLOC_
|
||||
|
||||
/* 定义 _MENU_USE_SHORTCUT_ 则启用快捷菜单选项进入功能 */
|
||||
#define _MENU_USE_SHORTCUT_
|
||||
|
||||
/* 多级菜单深度 */
|
||||
#define COT_MENU_MAX_DEPTH 10
|
||||
|
||||
/* 菜单支持的最大选项数目 */
|
||||
#define COT_MENU_MAX_NUM 20
|
||||
|
||||
/******************************************* 配置项 ********************************************************************/
|
||||
|
||||
|
||||
/* Exported types ----------------------------------------------------------------------------------------------------*/
|
||||
|
||||
#if COT_MENU_MAX_NUM < 255
|
||||
typedef uint8_t menusize_t;
|
||||
#else
|
||||
typedef uint16_t menusize_t;
|
||||
#endif
|
||||
|
||||
typedef union
|
||||
{
|
||||
void *pVoid; /*!< 通用指针(目的消除编译警告) */
|
||||
|
||||
size_t textId; /*!< 文本ID */
|
||||
|
||||
char *pTextString; /*!< 文本字符串 */
|
||||
} MenuDsecStr_u;
|
||||
|
||||
/**
|
||||
* @brief 单个选项信息
|
||||
*
|
||||
*
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
MenuDsecStr_u uMenuDesc; /*!< 该选项的描述 */
|
||||
|
||||
void *pExtendData; /*!< 该选项注册时的扩展数据 */
|
||||
} MenuItemInfo_t;
|
||||
|
||||
typedef void (*MenuCallFun_f)(const MenuItemInfo_t *pItemInfo);
|
||||
|
||||
/**
|
||||
* @brief 单个选项带菜单列表等信息
|
||||
*
|
||||
*
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
menusize_t itemsNum; /*!< 当前菜单中选项的总数目 */
|
||||
|
||||
menusize_t selectItem; /*!< 当前菜单中被选中的选项 */
|
||||
|
||||
menusize_t showBaseItem; /*!< 当前菜单首个显示的选项 */
|
||||
|
||||
MenuDsecStr_u uMenuDesc; /*!< 当前菜单的描述 */
|
||||
|
||||
void *pExtendData; /*!< 当前菜单注册时的扩展数据 */
|
||||
|
||||
MenuDsecStr_u uItemsListDesc[COT_MENU_MAX_NUM];/*!< 当前菜单中选项列表的描述 */
|
||||
|
||||
void *pItemsListExtendData[COT_MENU_MAX_NUM]; /*!< 当前菜单中选项列表注册时的扩展数据 */
|
||||
} MenuShow_t;
|
||||
|
||||
typedef void (*ShowMenuCallFun_f)(MenuShow_t *ptShowInfo);
|
||||
|
||||
/**
|
||||
* @brief 菜单信息注册结构体
|
||||
*
|
||||
*
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
MenuDsecStr_u uMenuDesc; /*!< 当前菜单的描述 */
|
||||
|
||||
MenuCallFun_f pfnEnterCallFun; /*!< 当前菜单选项进入时(从父菜单进入)需要执行一次的函数, 为NULL不执行 */
|
||||
|
||||
MenuCallFun_f pfnExitCallFun; /*!< 当前菜单选项进入后退出时(退出至父菜单)需要执行一次的函数, 为NULL不执行 */
|
||||
|
||||
MenuCallFun_f pfnLoadCallFun; /*!< 当前菜单选项每次加载时(从父菜单进入或子菜单退出)需要执行一次的函数, 为NULL不执行 */
|
||||
|
||||
MenuCallFun_f pfnRunCallFun; /*!< 当前菜单选项的周期调度函数 */
|
||||
|
||||
void *pExtendData; /*!< 当前选项的菜单显示效果函数扩展数据入参, 可自行设置该内容 */
|
||||
} MenuList_t, MainMenuCfg_t;
|
||||
|
||||
/* Exported constants ------------------------------------------------------------------------------------------------*/
|
||||
/* Exported macro ----------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* @brief 单个菜单选项定义
|
||||
*
|
||||
* @param title 菜单选项描述
|
||||
* @param enterFun 当前菜单选项进入时(从父菜单进入)需要执行一次的函数, 为NULL不执行
|
||||
* @param exitFun 当前菜单选项进入后退出时(退出至父菜单)需要执行一次的函数, 为NULL不执行
|
||||
* @param loadFun 当前菜单选项每次加载时(从父菜单进入或子菜单退出)需要执行一次的函数, 为NULL不执行
|
||||
* @param runFun 当前菜单选项的周期调度函数
|
||||
* @param extendData 当前选项的菜单显示效果函数扩展数据入参, 可自行设置该内容
|
||||
*/
|
||||
#define MENU_ITEM_BIND(title, enterFun, exitFun, loadFun, runFun, extendData) \
|
||||
{ \
|
||||
.uMenuDesc = {.pVoid = (void *)title}, \
|
||||
.pfnEnterCallFun = enterFun, \
|
||||
.pfnExitCallFun = exitFun, \
|
||||
.pfnLoadCallFun = loadFun, \
|
||||
.pfnRunCallFun = runFun, \
|
||||
.pExtendData = extendData \
|
||||
}
|
||||
|
||||
// 计算得到菜单列表元素数目
|
||||
#define MENU_GET_NUM(X) (sizeof(X) / sizeof(MenuList_t))
|
||||
|
||||
/* Exported functions ------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/* 菜单初始化和反初始化 */
|
||||
|
||||
extern int Menu_Init(MainMenuCfg_t *pMainMenu);
|
||||
extern int Menu_DeInit(void);
|
||||
|
||||
extern int Menu_Bind(MenuList_t *pMenuList, menusize_t menuNum, ShowMenuCallFun_f pfnShowMenuFun);
|
||||
|
||||
/* 菜单选项显示时需要使用的功能扩展函数 */
|
||||
|
||||
extern int Menu_LimitShowListNum(MenuShow_t *ptMenuShow, menusize_t *pShowNum);
|
||||
extern int Menu_QueryParentMenu(MenuShow_t *ptMenuShow, uint8_t level);
|
||||
|
||||
/* 菜单操作 */
|
||||
|
||||
extern int Menu_MainEnter(void);
|
||||
extern int Menu_MainExit(void);
|
||||
|
||||
extern int Menu_Reset(void);
|
||||
extern int Menu_Enter(void);
|
||||
extern int Menu_Exit(bool isReset);
|
||||
extern int Menu_SelectPrevious(bool isAllowRoll);
|
||||
extern int Menu_SelectNext(bool isAllowRoll);
|
||||
extern int Menu_Select(menusize_t selectItem);
|
||||
|
||||
extern int Menu_ShortcutEnter(bool isAbsolute, uint8_t deep, ...);
|
||||
|
||||
/* 菜单轮询处理任务 */
|
||||
|
||||
extern int cotMenu_Task(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // MENU_H
|
||||
Reference in New Issue
Block a user