#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);