Added the 'bare' modifier to CLI 'diff' / 'dump' commands.

This commit is contained in:
mikeller 2019-03-10 12:29:36 +13:00 committed by Michael Keller
parent b1a63a0253
commit 2ce19e89a1
1 changed files with 77 additions and 61 deletions

View File

@ -254,7 +254,19 @@ extern uint32_t inputBuffer[DSHOT_TELEMETRY_INPUT_LEN];
extern uint32_t setDirectionMicros;
#endif
typedef bool printFn(uint8_t dumpMask, bool equalsDefault, const char *format, ...);
typedef enum dumpFlags_e {
DUMP_MASTER = (1 << 0),
DUMP_PROFILE = (1 << 1),
DUMP_RATES = (1 << 2),
DUMP_ALL = (1 << 3),
DO_DIFF = (1 << 4),
SHOW_DEFAULTS = (1 << 5),
HIDE_UNUSED = (1 << 6),
HARDWARE_ONLY = (1 << 7),
BARE = (1 << 8),
} dumpFlags_t;
typedef bool printFn(dumpFlags_t dumpMask, bool equalsDefault, const char *format, ...);
static void backupPgConfig(const pgRegistry_t *pg)
@ -327,24 +339,13 @@ static void cliPutp(void *p, char ch)
bufWriterAppend(p, ch);
}
typedef enum {
DUMP_MASTER = (1 << 0),
DUMP_PROFILE = (1 << 1),
DUMP_RATES = (1 << 2),
DUMP_ALL = (1 << 3),
DO_DIFF = (1 << 4),
SHOW_DEFAULTS = (1 << 5),
HIDE_UNUSED = (1 << 6),
HARDWARE_ONLY = (1 << 7),
} dumpFlags_e;
static void cliPrintfva(const char *format, va_list va)
{
tfp_format(cliWriter, cliPutp, format, va);
bufWriterFlush(cliWriter);
}
static bool cliDumpPrintLinef(uint8_t dumpMask, bool equalsDefault, const char *format, ...)
static bool cliDumpPrintLinef(dumpFlags_t dumpMask, bool equalsDefault, const char *format, ...)
{
if (!((dumpMask & DO_DIFF) && equalsDefault)) {
va_list va;
@ -363,7 +364,7 @@ static void cliWrite(uint8_t ch)
bufWriterAppend(cliWriter, ch);
}
static bool cliDefaultPrintLinef(uint8_t dumpMask, bool equalsDefault, const char *format, ...)
static bool cliDefaultPrintLinef(dumpFlags_t dumpMask, bool equalsDefault, const char *format, ...)
{
if ((dumpMask & SHOW_DEFAULTS) && !equalsDefault) {
cliWrite('#');
@ -624,7 +625,7 @@ const void *cliGetDefaultPointer(const clivalue_t *value)
return rec->address + getValueOffset(value);
}
static void dumpPgValue(const clivalue_t *value, uint8_t dumpMask)
static void dumpPgValue(const clivalue_t *value, dumpFlags_t dumpMask)
{
const pgRegistry_t *pg = pgFind(value->pgn);
#ifdef DEBUG
@ -651,7 +652,7 @@ static void dumpPgValue(const clivalue_t *value, uint8_t dumpMask)
}
}
static void dumpAllValues(uint16_t valueSection, uint8_t dumpMask)
static void dumpAllValues(uint16_t valueSection, dumpFlags_t dumpMask)
{
for (uint32_t i = 0; i < valueTableEntryCount; i++) {
const clivalue_t *value = &valueTable[i];
@ -843,7 +844,7 @@ static bool isEmpty(const char *string)
return (string == NULL || *string == '\0') ? true : false;
}
static void printRxFailsafe(uint8_t dumpMask, const rxFailsafeChannelConfig_t *rxFailsafeChannelConfigs, const rxFailsafeChannelConfig_t *defaultRxFailsafeChannelConfigs)
static void printRxFailsafe(dumpFlags_t dumpMask, const rxFailsafeChannelConfig_t *rxFailsafeChannelConfigs, const rxFailsafeChannelConfig_t *defaultRxFailsafeChannelConfigs)
{
// print out rxConfig failsafe settings
for (uint32_t channel = 0; channel < MAX_SUPPORTED_RC_CHANNEL_COUNT; channel++) {
@ -959,7 +960,7 @@ static void cliRxFailsafe(char *cmdline)
}
}
static void printAux(uint8_t dumpMask, const modeActivationCondition_t *modeActivationConditions, const modeActivationCondition_t *defaultModeActivationConditions)
static void printAux(dumpFlags_t dumpMask, const modeActivationCondition_t *modeActivationConditions, const modeActivationCondition_t *defaultModeActivationConditions)
{
const char *format = "aux %u %u %u %u %u %u %u";
// print out aux channel settings
@ -1071,7 +1072,7 @@ static void cliAux(char *cmdline)
}
}
static void printSerial(uint8_t dumpMask, const serialConfig_t *serialConfig, const serialConfig_t *serialConfigDefault)
static void printSerial(dumpFlags_t dumpMask, const serialConfig_t *serialConfig, const serialConfig_t *serialConfigDefault)
{
const char *format = "serial %d %d %ld %ld %ld %ld";
for (uint32_t i = 0; i < SERIAL_PORT_COUNT; i++) {
@ -1339,7 +1340,7 @@ static void cliSerialPassthrough(char *cmdline)
}
#endif
static void printAdjustmentRange(uint8_t dumpMask, const adjustmentRange_t *adjustmentRanges, const adjustmentRange_t *defaultAdjustmentRanges)
static void printAdjustmentRange(dumpFlags_t dumpMask, const adjustmentRange_t *adjustmentRanges, const adjustmentRange_t *defaultAdjustmentRanges)
{
const char *format = "adjrange %u %u %u %u %u %u %u %u %u";
// print out adjustment ranges channel settings
@ -1470,7 +1471,7 @@ static void cliAdjustmentRange(char *cmdline)
}
#ifndef USE_QUAD_MIXER_ONLY
static void printMotorMix(uint8_t dumpMask, const motorMixer_t *customMotorMixer, const motorMixer_t *defaultCustomMotorMixer)
static void printMotorMix(dumpFlags_t dumpMask, const motorMixer_t *customMotorMixer, const motorMixer_t *defaultCustomMotorMixer)
{
const char *format = "mmix %d %s %s %s %s";
char buf0[FTOA_BUFFER_LENGTH];
@ -1578,7 +1579,7 @@ static void cliMotorMix(char *cmdline)
#endif
}
static void printRxRange(uint8_t dumpMask, const rxChannelRangeConfig_t *channelRangeConfigs, const rxChannelRangeConfig_t *defaultChannelRangeConfigs)
static void printRxRange(dumpFlags_t dumpMask, const rxChannelRangeConfig_t *channelRangeConfigs, const rxChannelRangeConfig_t *defaultChannelRangeConfigs)
{
const char *format = "rxrange %u %u %u";
for (uint32_t i = 0; i < NON_AUX_CHANNEL_COUNT; i++) {
@ -1649,7 +1650,7 @@ static void cliRxRange(char *cmdline)
}
#ifdef USE_LED_STRIP_STATUS_MODE
static void printLed(uint8_t dumpMask, const ledConfig_t *ledConfigs, const ledConfig_t *defaultLedConfigs)
static void printLed(dumpFlags_t dumpMask, const ledConfig_t *ledConfigs, const ledConfig_t *defaultLedConfigs)
{
const char *format = "led %u %s";
char ledConfigBuffer[20];
@ -1694,7 +1695,7 @@ static void cliLed(char *cmdline)
}
}
static void printColor(uint8_t dumpMask, const hsvColor_t *colors, const hsvColor_t *defaultColors)
static void printColor(dumpFlags_t dumpMask, const hsvColor_t *colors, const hsvColor_t *defaultColors)
{
const char *format = "color %u %d,%u,%u";
for (uint32_t i = 0; i < LED_CONFIGURABLE_COLOR_COUNT; i++) {
@ -1731,7 +1732,7 @@ static void cliColor(char *cmdline)
}
}
static void printModeColor(uint8_t dumpMask, const ledStripStatusModeConfig_t *ledStripStatusModeConfig, const ledStripStatusModeConfig_t *defaultLedStripConfig)
static void printModeColor(dumpFlags_t dumpMask, const ledStripStatusModeConfig_t *ledStripStatusModeConfig, const ledStripStatusModeConfig_t *defaultLedStripConfig)
{
const char *format = "mode_color %u %u %u";
for (uint32_t i = 0; i < LED_MODE_COUNT; i++) {
@ -1802,7 +1803,7 @@ static void cliModeColor(char *cmdline)
#endif
#ifdef USE_SERVOS
static void printServo(uint8_t dumpMask, const servoParam_t *servoParams, const servoParam_t *defaultServoParams)
static void printServo(dumpFlags_t dumpMask, const servoParam_t *servoParams, const servoParam_t *defaultServoParams)
{
// print out servo settings
const char *format = "servo %u %d %d %d %d %d";
@ -1941,7 +1942,7 @@ static void cliServo(char *cmdline)
#endif
#ifdef USE_SERVOS
static void printServoMix(uint8_t dumpMask, const servoMixer_t *customServoMixers, const servoMixer_t *defaultCustomServoMixers)
static void printServoMix(dumpFlags_t dumpMask, const servoMixer_t *customServoMixers, const servoMixer_t *defaultCustomServoMixers)
{
const char *format = "smix %d %d %d %d %d %d %d %d";
for (uint32_t i = 0; i < MAX_SERVO_RULES; i++) {
@ -2270,7 +2271,7 @@ static void cliFlashRead(char *cmdline)
#endif
#ifdef USE_VTX_CONTROL
static void printVtx(uint8_t dumpMask, const vtxConfig_t *vtxConfig, const vtxConfig_t *vtxConfigDefault)
static void printVtx(dumpFlags_t dumpMask, const vtxConfig_t *vtxConfig, const vtxConfig_t *vtxConfigDefault)
{
// print out vtx channel settings
const char *format = "vtx %u %u %u %u %u %u";
@ -2393,7 +2394,7 @@ static char *formatVtxTableBandFrequency(const uint16_t *frequency, int channels
return freqbuf;
}
static void printVtxTableBand(uint8_t dumpMask, int band, const vtxTableConfig_t *currentConfig, const vtxTableConfig_t *defaultConfig)
static void printVtxTableBand(dumpFlags_t dumpMask, int band, const vtxTableConfig_t *currentConfig, const vtxTableConfig_t *defaultConfig)
{
char *fmt = "vtxtable band %d %s %c%s";
bool equalsDefault = false;
@ -2432,7 +2433,7 @@ static char *formatVtxTablePowerValues(const uint16_t *levels, int count)
return pwrbuf;
}
static void printVtxTablePowerValues(uint8_t dumpMask, const vtxTableConfig_t *currentConfig, const vtxTableConfig_t *defaultConfig)
static void printVtxTablePowerValues(dumpFlags_t dumpMask, const vtxTableConfig_t *currentConfig, const vtxTableConfig_t *defaultConfig)
{
char *fmt = "vtxtable powervalues %s";
bool equalsDefault = false;
@ -2469,7 +2470,7 @@ static char *formatVtxTablePowerLabels(const char labels[VTX_TABLE_MAX_POWER_LEV
return pwrbuf;
}
static void printVtxTablePowerLabels(uint8_t dumpMask, const vtxTableConfig_t *currentConfig, const vtxTableConfig_t *defaultConfig)
static void printVtxTablePowerLabels(dumpFlags_t dumpMask, const vtxTableConfig_t *currentConfig, const vtxTableConfig_t *defaultConfig)
{
char *fmt = "vtxtable powerlabels%s";
bool equalsDefault = false;
@ -2488,7 +2489,7 @@ static void printVtxTablePowerLabels(uint8_t dumpMask, const vtxTableConfig_t *c
cliDumpPrintLinef(dumpMask, equalsDefault, fmt, pwrbuf);
}
static void printVtxTable(uint8_t dumpMask, const vtxTableConfig_t *currentConfig, const vtxTableConfig_t *defaultConfig)
static void printVtxTable(dumpFlags_t dumpMask, const vtxTableConfig_t *currentConfig, const vtxTableConfig_t *defaultConfig)
{
bool equalsDefault;
char *fmt;
@ -2722,7 +2723,7 @@ static void cliVtxTable(char *cmdline)
#endif // USE_VTX_TABLE
#ifdef USE_OSD
static void printDisplayName(uint8_t dumpMask, const pilotConfig_t *pilotConfig)
static void printDisplayName(dumpFlags_t dumpMask, const pilotConfig_t *pilotConfig)
{
const bool equalsDefault = strlen(pilotConfig->displayName) == 0;
cliDumpPrintLinef(dumpMask, equalsDefault, "display_name %s", equalsDefault ? emptyName : pilotConfig->displayName);
@ -2741,7 +2742,7 @@ static void cliDisplayName(char *cmdline)
}
#endif
static void printName(uint8_t dumpMask, const pilotConfig_t *pilotConfig)
static void printName(dumpFlags_t dumpMask, const pilotConfig_t *pilotConfig)
{
const bool equalsDefault = strlen(pilotConfig->name) == 0;
cliDumpPrintLinef(dumpMask, equalsDefault, "name %s", equalsDefault ? emptyName : pilotConfig->name);
@ -2869,7 +2870,7 @@ static uint32_t getFeatureMask(const uint32_t featureMask)
}
}
static void printFeature(uint8_t dumpMask, const featureConfig_t *featureConfig, const featureConfig_t *featureConfigDefault)
static void printFeature(dumpFlags_t dumpMask, const featureConfig_t *featureConfig, const featureConfig_t *featureConfigDefault)
{
const uint32_t mask = getFeatureMask(featureConfig->enabledFeatures);
const uint32_t defaultMask = featureConfigDefault->enabledFeatures;
@ -2968,7 +2969,7 @@ static void cliFeature(char *cmdline)
}
#if defined(USE_BEEPER)
static void printBeeper(uint8_t dumpMask, const uint32_t offFlags, const uint32_t offFlagsDefault, const char *name, const uint32_t allowedFlags)
static void printBeeper(dumpFlags_t dumpMask, const uint32_t offFlags, const uint32_t offFlagsDefault, const char *name, const uint32_t allowedFlags)
{
const uint8_t beeperCount = beeperTableEntryCount();
for (int32_t i = 0; i < beeperCount - 1; i++) {
@ -3093,7 +3094,7 @@ void cliRxSpiBind(char *cmdline){
}
#endif
static void printMap(uint8_t dumpMask, const rxConfig_t *rxConfig, const rxConfig_t *defaultRxConfig)
static void printMap(dumpFlags_t dumpMask, const rxConfig_t *rxConfig, const rxConfig_t *defaultRxConfig)
{
bool equalsDefault = true;
char buf[16];
@ -3742,7 +3743,7 @@ static void cliRateProfile(char *cmdline)
}
}
static void cliDumpPidProfile(uint8_t pidProfileIndex, uint8_t dumpMask)
static void cliDumpPidProfile(uint8_t pidProfileIndex, dumpFlags_t dumpMask)
{
if (pidProfileIndex >= PID_PROFILE_COUNT) {
// Faulty values
@ -3759,7 +3760,7 @@ static void cliDumpPidProfile(uint8_t pidProfileIndex, uint8_t dumpMask)
pidProfileIndexToUse = CURRENT_PROFILE_INDEX;
}
static void cliDumpRateProfile(uint8_t rateProfileIndex, uint8_t dumpMask)
static void cliDumpRateProfile(uint8_t rateProfileIndex, dumpFlags_t dumpMask)
{
if (rateProfileIndex >= CONTROL_RATE_PROFILE_COUNT) {
// Faulty values
@ -4524,7 +4525,7 @@ static ioTag_t *getIoTag(const cliResourceValue_t value, uint8_t index)
return CONST_CAST(ioTag_t *, rec->address + value.stride * index + value.offset);
}
static void printResource(uint8_t dumpMask)
static void printResource(dumpFlags_t dumpMask)
{
for (unsigned int i = 0; i < ARRAYLEN(resourceTable); i++) {
const char* owner = ownerNames[resourceTable[i].owner];
@ -4703,7 +4704,7 @@ static void dmaoptToString(int optval, char *buf)
}
}
static void printPeripheralDmaoptDetails(dmaoptEntry_t *entry, int index, const dmaoptValue_t dmaopt, const bool equalsDefault, const uint8_t dumpMask, printFn *printValue)
static void printPeripheralDmaoptDetails(dmaoptEntry_t *entry, int index, const dmaoptValue_t dmaopt, const bool equalsDefault, const dumpFlags_t dumpMask, printFn *printValue)
{
if (dmaopt != DMA_OPT_UNUSED) {
printValue(dumpMask, equalsDefault,
@ -4725,7 +4726,7 @@ static void printPeripheralDmaoptDetails(dmaoptEntry_t *entry, int index, const
}
}
static void printPeripheralDmaopt(dmaoptEntry_t *entry, int index, uint8_t dumpMask)
static void printPeripheralDmaopt(dmaoptEntry_t *entry, int index, dumpFlags_t dumpMask)
{
const pgRegistry_t* pg = pgFind(entry->pgn);
const void *currentConfig;
@ -4758,7 +4759,7 @@ static void printPeripheralDmaopt(dmaoptEntry_t *entry, int index, uint8_t dumpM
}
#if defined(USE_TIMER_MGMT)
static void printTimerDmaoptDetails(const ioTag_t ioTag, const timerHardware_t *timer, const dmaoptValue_t dmaopt, const bool equalsDefault, const uint8_t dumpMask, printFn *printValue)
static void printTimerDmaoptDetails(const ioTag_t ioTag, const timerHardware_t *timer, const dmaoptValue_t dmaopt, const bool equalsDefault, const dumpFlags_t dumpMask, printFn *printValue)
{
const char *format = "dma pin %c%02d %d";
@ -4788,7 +4789,7 @@ static void printTimerDmaoptDetails(const ioTag_t ioTag, const timerHardware_t *
}
}
static void printTimerDmaopt(const timerIOConfig_t *currentConfig, const timerIOConfig_t *defaultConfig, unsigned index, uint8_t dumpMask)
static void printTimerDmaopt(const timerIOConfig_t *currentConfig, const timerIOConfig_t *defaultConfig, unsigned index, dumpFlags_t dumpMask)
{
const ioTag_t ioTag = currentConfig[index].ioTag;
@ -4820,7 +4821,7 @@ static void printTimerDmaopt(const timerIOConfig_t *currentConfig, const timerIO
}
#endif
static void printDmaopt(uint8_t dumpMask)
static void printDmaopt(dumpFlags_t dumpMask)
{
for (size_t i = 0; i < ARRAYLEN(dmaoptEntryTable); i++) {
dmaoptEntry_t *entry = &dmaoptEntryTable[i];
@ -5110,7 +5111,7 @@ static void cliResource(char *cmdline)
#ifdef USE_TIMER_MGMT
static void printTimer(uint8_t dumpMask)
static void printTimer(dumpFlags_t dumpMask)
{
const char *format = "timer %c%02d %d";
@ -5252,7 +5253,7 @@ error:
static void printConfig(char *cmdline, bool doDiff)
{
uint8_t dumpMask = DUMP_MASTER;
dumpFlags_t dumpMask = DUMP_MASTER;
char *options;
if ((options = checkCommand(cmdline, "master"))) {
dumpMask = DUMP_MASTER; // only
@ -5272,12 +5273,14 @@ static void printConfig(char *cmdline, bool doDiff)
dumpMask = dumpMask | DO_DIFF;
}
backupAndResetConfigs();
if (checkCommand(options, "defaults")) {
dumpMask = dumpMask | SHOW_DEFAULTS; // add default values as comments for changed values
} else if (checkCommand(options, "bare")) {
dumpMask = dumpMask | BARE; // show the diff / dump without extra commands and board specific data
}
backupAndResetConfigs();
if ((dumpMask & DUMP_MASTER) || (dumpMask & DUMP_ALL)) {
cliPrintHashLine("version");
cliVersion(NULL);
@ -5288,14 +5291,14 @@ static void printConfig(char *cmdline, bool doDiff)
cliManufacturerId("");
#endif
if (dumpMask & DUMP_ALL) {
if ((dumpMask & DUMP_ALL) && !(dumpMask & BARE)) {
cliMcuId(NULL);
#if defined(USE_SIGNATURE)
cliSignature("");
cliSignature("");
#endif
}
if (!(dumpMask & HARDWARE_ONLY)) {
if (!(dumpMask & BARE)) {
if ((dumpMask & (DUMP_ALL | DO_DIFF)) == (DUMP_ALL | DO_DIFF)) {
cliPrintHashLine("reset configuration to default settings");
cliPrint("defaults nosave");
@ -5306,7 +5309,9 @@ static void printConfig(char *cmdline, bool doDiff)
cliPrintHashLine("start the command batch");
cliPrintLine("batch start");
#endif
}
if (!(dumpMask & HARDWARE_ONLY)) {
cliPrintHashLine("name");
printName(dumpMask, &pilotConfig_Copy);
}
@ -5408,6 +5413,11 @@ static void printConfig(char *cmdline, bool doDiff)
cliPrintHashLine("master");
if (dumpMask & HARDWARE_ONLY) {
dumpAllValues(HARDWARE_VALUE, dumpMask);
#ifdef USE_CLI_BATCH
cliPrintHashLine("end the command batch");
cliPrintLine("batch end");
#endif
} else {
dumpAllValues(MASTER_VALUE, dumpMask);
@ -5417,9 +5427,12 @@ static void printConfig(char *cmdline, bool doDiff)
}
pidProfileIndexToUse = systemConfig_Copy.pidProfileIndex;
cliPrintHashLine("restore original profile selection");
cliProfile("");
if (!(dumpMask & BARE)) {
cliPrintHashLine("restore original profile selection");
cliProfile("");
}
pidProfileIndexToUse = CURRENT_PROFILE_INDEX;
@ -5428,14 +5441,17 @@ static void printConfig(char *cmdline, bool doDiff)
}
rateProfileIndexToUse = systemConfig_Copy.activeRateProfile;
cliPrintHashLine("restore original rateprofile selection");
cliRateProfile("");
if (!(dumpMask & BARE)) {
cliPrintHashLine("restore original rateprofile selection");
cliRateProfile("");
cliPrintHashLine("save configuration");
cliPrint("save");
}
rateProfileIndexToUse = CURRENT_PROFILE_INDEX;
cliPrintHashLine("save configuration");
cliPrint("save");
} else {
cliDumpPidProfile(systemConfig_Copy.pidProfileIndex, dumpMask);
@ -5551,7 +5567,7 @@ const clicmd_t cmdTable[] = {
CLI_COMMAND_DEF("color", "configure colors", NULL, cliColor),
#endif
CLI_COMMAND_DEF("defaults", "reset to defaults and reboot", "[nosave]", cliDefaults),
CLI_COMMAND_DEF("diff", "list configuration changes from default", "[master|profile|rates|hardware|all] {defaults}", cliDiff),
CLI_COMMAND_DEF("diff", "list configuration changes from default", "[master|profile|rates|hardware|all] {defaults|bare}", cliDiff),
#ifdef USE_OSD
CLI_COMMAND_DEF("display_name", "display name of craft", NULL, cliDisplayName),
#endif
@ -5566,7 +5582,7 @@ const clicmd_t cmdTable[] = {
CLI_COMMAND_DEF("dshotprog", "program DShot ESC(s)", "<index> <command>+", cliDshotProg),
#endif
CLI_COMMAND_DEF("dump", "dump configuration",
"[master|profile|rates|hardware|all] {defaults}", cliDump),
"[master|profile|rates|hardware|all] {defaults|bare}", cliDump),
#ifdef USE_ESCSERIAL
CLI_COMMAND_DEF("escprog", "passthrough esc to serial", "<mode [sk/bl/ki/cc]> <index>", cliEscPassthrough),
#endif