Files
uC_libs/cmd_parser/cmd_parser2.h
2022-12-03 20:00:11 +01:00

59 lines
1022 B
C

#pragma once
#include "main.h"
#define CMDP_KEY_ARG 1
typedef void (*help_filter)(char key, const char *text);
// key = opt_id, arg = value or NULL
// key = CMDP_KEY_ARG, arg = id_arg or token
typedef enum
{
CMD_NULL,
CMD_OK,
CMD_VALUE_REQ,
CMD_MULTIVAL_REQ,
CMD_UNKNOWN,
} result_t;
typedef result_t (*parser)(char key, char *arg);
typedef enum
{
NO_VALUE = 0,
SINGLE_VALE = 1,
MULTI_VALUE = 2,
NOT_OPTIONAL = 4,
} option_flags_t;
typedef const struct
{
uint8_t opt_id;
char *name;
char *description;
option_flags_t flags;
} option_t;
typedef const struct
{
char *name;
uint8_t arg_id;
char *description;
option_t *options;
uint8_t opt_num;
// parser arg_parser;
} argument_t;
typedef const struct
{
char *name;
char *description;
argument_t *arguments;
uint8_t arg_num;
option_t *options;
uint8_t opt_num;
parser cmd_parser;
} cmd_parser_t;
void cmd_parser_init(cmd_parser_t* commands[], uint8_t size);
// void cmd_parse(char *msg, parser parser);
void cmd_parse(char *msg);