Files
zh_menu_manager/include/menu_manager.h
2026-01-25 20:53:24 +03:00

114 lines
2.4 KiB
C

/**
* @file menu_manager.h
* @brief This file defines structures and functions related to the Menu System.
*/
#ifndef __MENU_MANAGER_H__
#define __MENU_MANAGER_H__
#pragma once
#include "freertos/idf_additions.h"
#include "sdkconfig.h"
#include <esp_err.h>
#include <freertos/FreeRTOS.h>
#include <freertos/semphr.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#define END_MENU_FUNCTION end_menuFunction()
#define SET_QUICK_FUNCTION setQuick_menuFunction()
extern TaskHandle_t tMenuFunction;
extern QueueHandle_t qCommands;
/**
* Type with possibles of action in menu system.
*
*/
typedef enum {
NAVIGATE_UP,
/**< Action up (index++). */
NAVIGATE_DOWN,
/**< Action DOWN (index--). */
NAVIGATE_SELECT,
/**< Action SELECT (depth++). */
NAVIGATE_BACK,
/**< Action BACH (depth--). */
NAVIGATE_NOTHING,
/**< Nothing. */
} Navigate_t;
/**
* Menu System is based in nodes all menus are nodes. Submenus are nodes with
* array of more submenus and function (leafs) are nodes with function.
*
*/
typedef struct menu_node {
char *label;
/**< Title of node. */
struct menu_node *submenus;
/**< Point of array submenus or one submenu. */
size_t num_options;
/**< number of option on submenu. */
void (*function)(void *args);
/**< function that defined this node as leaf. */
} menu_node_t;
/**
* Struct for save location and index.
*
*/
typedef struct {
menu_node_t *current_menu;
/**< Point if current menu. */
uint8_t current_index;
/**< current Index of selected option. */
} menu_path_t;
/**
* This struct is all essential args that menu_init will need.
*/
typedef struct {
menu_node_t root;
/**< Menu_node_t: origin of Menu System. */
void (*display)(menu_path_t *current_path);
/**< Function that receive menu_path_t and index for display current
* selection. */
bool loop;
/**< Loop menu. */
} menu_config_t;
/**
* Start menu system that receive generic input function and generic
* display function.
*
* @param params The struct that there are args.
*/
void menu_init(void *params);
/**
* @brief Use this function all option menus when finish
*/
void exitFunction(void);
/**
* @brief Exec especific funtioon
*
* @param Function addres of function
*/
void execFunction(void (*function)(void *args));
/**
* @brief Use this function when your function is a wuick function before
* end_menuFunction()
*/
void setQuick_menuFunction(void);
#ifdef __cplusplus
}
#endif
#endif //__MENU_MANAGER_H__