diff --git a/src/main/fc/cli.c b/src/main/fc/cli.c index f043800cb0..283390db20 100755 --- a/src/main/fc/cli.c +++ b/src/main/fc/cli.c @@ -44,6 +44,7 @@ extern uint8_t __config_end; #include "common/time.h" #include "common/typeconversion.h" #include "common/global_functions.h" +#include "common/global_variables.h" #include "config/config_eeprom.h" #include "config/feature.h" @@ -1829,6 +1830,77 @@ static void cliLogic(char *cmdline) { } } } + +static void printGvar(uint8_t dumpMask, const globalVariableConfig_t *gvars, const globalVariableConfig_t *defaultGvars) +{ + const char *format = "gvar %d %d %d"; + for (uint32_t i = 0; i < MAX_GLOBAL_VARIABLES; i++) { + const globalVariableConfig_t gvar = gvars[i]; + + bool equalsDefault = false; + if (defaultGvars) { + globalVariableConfig_t defaultValue = defaultGvars[i]; + equalsDefault = + gvar.min == defaultValue.min && + gvar.max == defaultValue.max; + + cliDefaultPrintLinef(dumpMask, equalsDefault, format, + i, + gvar.min, + gvar.max + ); + } + cliDumpPrintLinef(dumpMask, equalsDefault, format, + i, + gvar.min, + gvar.max + ); + } +} + +static void cliGvar(char *cmdline) { + char * saveptr; + int args[3], check = 0; + uint8_t len = strlen(cmdline); + + if (len == 0) { + printGvar(DUMP_MASTER, globalVariableConfigs(0), NULL); + } else if (sl_strncasecmp(cmdline, "reset", 5) == 0) { + pgResetCopy(globalVariableConfigsMutable(0), PG_GLOBAL_VARIABLE_CONFIG); + } else { + enum { + INDEX = 0, + MIN, + MAX, + ARGS_COUNT + }; + char *ptr = strtok_r(cmdline, " ", &saveptr); + while (ptr != NULL && check < ARGS_COUNT) { + args[check++] = fastA2I(ptr); + ptr = strtok_r(NULL, " ", &saveptr); + } + + if (ptr != NULL || check != ARGS_COUNT) { + cliShowParseError(); + return; + } + + int32_t i = args[INDEX]; + if ( + i >= 0 && i < MAX_GLOBAL_VARIABLES && + args[MIN] >= INT32_MIN && args[MIN] <= INT32_MAX && + args[MAX] >= INT32_MIN && args[MAX] <= INT32_MAX + ) { + globalVariableConfigsMutable(i)->min = args[MIN]; + globalVariableConfigsMutable(i)->max = args[MAX]; + + cliGvar(""); + } else { + cliShowParseError(); + } + } +} + #endif #ifdef USE_GLOBAL_FUNCTIONS @@ -3162,6 +3234,9 @@ static void printConfig(const char *cmdline, bool doDiff) #ifdef USE_LOGIC_CONDITIONS cliPrintHashLine("logic"); printLogic(dumpMask, logicConditions_CopyArray, logicConditions(0)); + + cliPrintHashLine("gvar"); + printGvar(dumpMask, globalVariableConfigs_CopyArray, globalVariableConfigs(0)); #endif #ifdef USE_GLOBAL_FUNCTIONS @@ -3419,6 +3494,10 @@ const clicmd_t cmdTable[] = { CLI_COMMAND_DEF("logic", "configure logic conditions", " \r\n" "\treset\r\n", cliLogic), + + CLI_COMMAND_DEF("gvar", "configure global variables", + " \r\n" + "\treset\r\n", cliGvar), #endif #ifdef USE_GLOBAL_FUNCTIONS CLI_COMMAND_DEF("gf", "configure global functions",