1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-14 20:10:18 +03:00

Add CLI batch support for presenting warnings when pasting configs

Adds a new `batch` command used to delineate a group of commands as a related batch. The primary purpose is to group commands sent from the Configurator resulting from a copy/pasted config. Currently the output of the `diff all` command appends a `save` at the end of its output. So when a user pastes in their config to restore they may not see any errors because the `save` command causes the flight controller to reboot before they can review. When commands are wrapped inside of a batch, any errors will set a flag that will issue a warning when the `save` command is executed. This allows the user ro review and correct there configuration.
This commit is contained in:
Bruce Luckcuck 2018-09-08 16:05:19 -04:00
parent 499ddc003b
commit 8c1e6fa017
2 changed files with 81 additions and 0 deletions

View file

@ -191,6 +191,11 @@ static int8_t rateProfileIndexToUse = CURRENT_PROFILE_INDEX;
static bool featureMaskIsCopied = false;
static uint32_t featureMaskCopy;
#ifdef USE_CLI_BATCH
static bool commandBatchActive = false;
static bool commandBatchError = false;
#endif
#if defined(USE_BOARD_INFO)
static bool boardInformationUpdated = false;
#if defined(USE_SIGNATURE)
@ -399,6 +404,12 @@ static void cliPrintErrorVa(const char *format, va_list va)
cliPrintfva(format, va);
va_end(va);
cliPrint("###");
#ifdef USE_CLI_BATCH
if (commandBatchActive) {
commandBatchError = true;
}
#endif
}
static void cliPrintError(const char *format, ...)
@ -3764,10 +3775,54 @@ static void cliDumpRateProfile(uint8_t rateProfileIndex, uint8_t dumpMask)
rateProfileIndexToUse = CURRENT_PROFILE_INDEX;
}
#ifdef USE_CLI_BATCH
static void cliPrintCommandBatchWarning(const char *warning)
{
cliPrintErrorLinef("ERRORS WERE DETECTED - PLEASE REVIEW BEFORE CONTINUING");
if (warning) {
cliPrintErrorLinef(warning);
}
}
static void resetCommandBatch(void)
{
commandBatchActive = false;
commandBatchError = false;
}
static void cliBatch(char *cmdline)
{
if (strncasecmp(cmdline, "start", 5) == 0) {
if (!commandBatchActive) {
commandBatchActive = true;
commandBatchError = false;
}
cliPrintLine("Command batch started");
} else if (strncasecmp(cmdline, "end", 3) == 0) {
if (commandBatchActive && commandBatchError) {
cliPrintCommandBatchWarning(NULL);
} else {
cliPrintLine("Command batch ended");
}
resetCommandBatch();
} else {
cliPrintErrorLinef("Invalid option");
}
}
#endif
static void cliSave(char *cmdline)
{
UNUSED(cmdline);
#ifdef USE_CLI_BATCH
if (commandBatchActive && commandBatchError) {
cliPrintCommandBatchWarning("PLEASE FIX ERRORS THEN 'SAVE'");
resetCommandBatch();
return;
}
#endif
cliPrintHashLine("saving");
#if defined(USE_BOARD_INFO)
@ -3806,6 +3861,14 @@ static void cliDefaults(char *cmdline)
resetConfigs();
#ifdef USE_CLI_BATCH
// Reset only the error state and allow the batch active state to remain.
// This way if a "defaults nosave" was issued after the "batch on" we'll
// only reset the current error state but the batch will still be active
// for subsequent commands.
commandBatchError = false;
#endif
if (saveConfigs) {
cliSave(NULL);
}
@ -5238,6 +5301,11 @@ static void printConfig(char *cmdline, bool doDiff)
cliPrintLinefeed();
}
#ifdef USE_CLI_BATCH
cliPrintHashLine("start the command batch");
cliPrintLine("batch start");
#endif
cliPrintHashLine("name");
printName(dumpMask, &pilotConfig_Copy);
}
@ -5382,6 +5450,11 @@ static void printConfig(char *cmdline, bool doDiff)
if (dumpMask & DUMP_RATES) {
cliDumpRateProfile(systemConfig_Copy.activeRateProfile, dumpMask);
#ifdef USE_CLI_BATCH
cliPrintHashLine("end the command batch");
cliPrintLine("batch end");
#endif
}
}
@ -5461,6 +5534,9 @@ static void cliHelp(char *cmdline);
const clicmd_t cmdTable[] = {
CLI_COMMAND_DEF("adjrange", "configure adjustment ranges", NULL, cliAdjustmentRange),
CLI_COMMAND_DEF("aux", "configure modes", "<index> <mode> <aux> <start> <end> <logic>", cliAux),
#ifdef USE_CLI_BATCH
CLI_COMMAND_DEF("batch", "start or end a batch of commands", "start | end", cliBatch),
#endif
#if defined(USE_BEEPER)
#if defined(USE_DSHOT)
CLI_COMMAND_DEF("beacon", "enable/disable Dshot beacon for a condition", "list\r\n"
@ -5743,6 +5819,10 @@ void cliEnter(serialPort_t *serialPort)
setArmingDisabled(ARMING_DISABLED_CLI);
cliPrompt();
#ifdef USE_CLI_BATCH
resetCommandBatch();
#endif
}
void cliInit(const serialConfig_t *serialConfig)