stm32f1/lib/menu.h

54 lines
2.3 KiB
C

/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/** definitions to build menus (API)
* @file menu.h
* @author King Kévin <kingkevin@cuvoodoo.info>
* @date 2018
*/
#pragma once
/** types of argument accepted by the command */
enum menu_argument_t {
MENU_ARGUMENT_NONE, /**< no argument accepted */
MENU_ARGUMENT_SIGNED, /**< int32 argument accepted */
MENU_ARGUMENT_UNSIGNED, /**< uint32 argument accepted */
MENU_ARGUMENT_FLOAT, /**< double argument accepted */
MENU_ARGUMENT_STRING, /**< string argument accepted */
};
/** command menu entry */
struct menu_command_t {
char shortcut; /**< short command code (0 if not available) */
char* name; /**< complete name of the command (space-free) */
char* command_description; /**< human readable description of the command purpose */
enum menu_argument_t argument; /**< what kind of argument it accepts */
char* argument_description; /**< human readable description of the argument it can accept */
void (*command_handler)(void* argument); /**< function to be called to handle this command */
};
/** parse command from line and call corresponding command
* @param[in] line use input to parse
* @param[in] command_list list of available commands
* @param[in] command_list_length number of available commands
* @return if an command corresponding to the line has been found and called
*/
bool menu_handle_command(const char* line, const struct menu_command_t* command_list, size_t command_list_length);
/** print the commands from the command list
* @param[in] command_list list of available commands
* @param[in] command_list_length number of available commands
*/
void menu_print_commands(const struct menu_command_t* command_list, size_t command_list_length);