Прошло 2 года.
This commit is contained in:
76
lib/epdiy/examples/screen_diag/main/commands.h
Normal file
76
lib/epdiy/examples/screen_diag/main/commands.h
Normal file
@@ -0,0 +1,76 @@
|
||||
#pragma once
|
||||
/* Helper functions and macros for common use cases,
|
||||
* when registering or implementing commands.
|
||||
*/
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <argtable3/argtable3.h>
|
||||
#include <esp_console.h>
|
||||
|
||||
#ifndef ARRAY_SIZE
|
||||
/**
|
||||
* Returns size of a (static) C array.
|
||||
*/
|
||||
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Checks whether the given color argument is a valid color.
|
||||
* I.e. when it's color value is possible to represent by an uint8_t (0x00 - 0xFF).
|
||||
* If no color argument was provided by the user, returns the default color of 0x00.
|
||||
*
|
||||
* @param inout_color initial value will be used as default color,
|
||||
* when the user did not specify a color.
|
||||
* when successful, will be set to the given color.
|
||||
* @param arg user-specified color argument
|
||||
* @return whether the given color is valid
|
||||
*/
|
||||
bool validate_color(uint8_t* inout_color, struct arg_int* arg);
|
||||
|
||||
/**
|
||||
* Determines the number of arguments stored in a struct (container).
|
||||
* That is usually the number of arguments for a given command and
|
||||
* can be used when initializing the arg_end parameter.
|
||||
*
|
||||
* This macro assumes, that
|
||||
* 1. each argument inside the struct is referenced by a pointer,
|
||||
* 2. each struct ends with an arg_end*,
|
||||
* 3. there are no other members in the struct, besides different argument types.
|
||||
*/
|
||||
#define NARGS(container) ((sizeof(container) / sizeof(struct arg_end*)) - 1)
|
||||
|
||||
/**
|
||||
* Handles argument validation for the command.
|
||||
* Assumes that `argc` and `argv` variables are visible, thus should
|
||||
* only be used inside the command implementation function.
|
||||
*
|
||||
* @param args_struct name of the (static) argument struct.
|
||||
*/
|
||||
#define HANDLE_ARGUMENTS(args_struct) \
|
||||
{ \
|
||||
int nerrors = arg_parse(argc, argv, (void**)&args_struct); \
|
||||
if (nerrors > 0) { \
|
||||
arg_print_errors(stdout, args_struct.end, argv[0]); \
|
||||
return 1; \
|
||||
} \
|
||||
}
|
||||
|
||||
/**
|
||||
* Get optional argument value if provided by the user. Otherwise use the default value.
|
||||
*
|
||||
* @param arg pointer to argument struct (e.g. struct arg_int*)
|
||||
* @param accessor accessor used to retrieve the first value (e.g. ival for struct arg_int)
|
||||
* @param default_value
|
||||
*/
|
||||
#define GET_ARG(arg, accessor, default_value) \
|
||||
(arg)->count == 1 ? (arg)->accessor[0] : (default_value)
|
||||
|
||||
/**
|
||||
* Alias for GET_ARG, specialized for int arguments.
|
||||
*
|
||||
* @param arg pointer to an struct arg_int
|
||||
* @param default_value
|
||||
*/
|
||||
#define GET_INT_ARG(arg, default_value) GET_ARG(arg, ival, default_value)
|
||||
Reference in New Issue
Block a user