1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-17 21:35:44 +03:00

Merge pull request #7061 from pulquero/support_uint32_set_vars

Support for setting uint32 vars.
This commit is contained in:
Michael Keller 2018-11-12 01:10:55 +13:00 committed by GitHub
commit 3259abfbc0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 14 deletions

View file

@ -445,6 +445,16 @@ static void printValuePointer(const clivalue_t *var, const void *valuePointer, b
switch (var->type & VALUE_MODE_MASK) { switch (var->type & VALUE_MODE_MASK) {
case MODE_DIRECT: case MODE_DIRECT:
if ((var->type & VALUE_TYPE_MASK) == VAR_UINT32) {
if ((uint32_t) value > var->config.u32_max) {
cliPrintCorruptMessage(value);
} else {
cliPrintf("%d", value);
if (full) {
cliPrintf(" 0 %d", var->config.u32_max);
}
}
} else {
if ((value < var->config.minmax.min) || (value > var->config.minmax.max)) { if ((value < var->config.minmax.min) || (value > var->config.minmax.max)) {
cliPrintCorruptMessage(value); cliPrintCorruptMessage(value);
} else { } else {
@ -453,6 +463,7 @@ static void printValuePointer(const clivalue_t *var, const void *valuePointer, b
cliPrintf(" %d %d", var->config.minmax.min, var->config.minmax.max); cliPrintf(" %d %d", var->config.minmax.min, var->config.minmax.max);
} }
} }
}
break; break;
case MODE_LOOKUP: case MODE_LOOKUP:
if (value < lookupTables[var->config.lookup.tableIndex].valueCount) { if (value < lookupTables[var->config.lookup.tableIndex].valueCount) {
@ -628,7 +639,7 @@ static void cliPrintVarRange(const clivalue_t *var)
} }
} }
static void cliSetVar(const clivalue_t *var, const int16_t value) static void cliSetVar(const clivalue_t *var, const uint32_t value)
{ {
void *ptr = cliGetValuePointer(var); void *ptr = cliGetValuePointer(var);
uint32_t workValue; uint32_t workValue;
@ -681,6 +692,10 @@ static void cliSetVar(const clivalue_t *var, const int16_t value)
case VAR_INT16: case VAR_INT16:
*(int16_t *)ptr = value; *(int16_t *)ptr = value;
break; break;
case VAR_UINT32:
*(uint32_t *)ptr = value;
break;
} }
} }
} }
@ -3433,6 +3448,14 @@ STATIC_UNIT_TESTED void cliSet(char *cmdline)
int16_t value = 0; int16_t value = 0;
switch (val->type & VALUE_MODE_MASK) { switch (val->type & VALUE_MODE_MASK) {
case MODE_DIRECT: { case MODE_DIRECT: {
if ((val->type & VALUE_TYPE_MASK) == VAR_UINT32) {
uint32_t value = strtol(eqptr, NULL, 10);
if (value <= val->config.u32_max) {
cliSetVar(val, value);
valueChanged = true;
}
} else {
int16_t value = atoi(eqptr); int16_t value = atoi(eqptr);
if (value >= val->config.minmax.min && value <= val->config.minmax.max) { if (value >= val->config.minmax.min && value <= val->config.minmax.max) {
@ -3440,6 +3463,7 @@ STATIC_UNIT_TESTED void cliSet(char *cmdline)
valueChanged = true; valueChanged = true;
} }
} }
}
break; break;
case MODE_LOOKUP: case MODE_LOOKUP:

View file

@ -181,10 +181,11 @@ typedef struct cliArrayLengthConfig_s {
} cliArrayLengthConfig_t; } cliArrayLengthConfig_t;
typedef union { typedef union {
cliLookupTableConfig_t lookup; cliLookupTableConfig_t lookup; // used for MODE_LOOKUP excl. VAR_UINT32
cliMinMaxConfig_t minmax; cliMinMaxConfig_t minmax; // used for MODE_DIRECT
cliArrayLengthConfig_t array; cliArrayLengthConfig_t array; // used for MODE_ARRAY
uint8_t bitpos; uint8_t bitpos; // used for MODE_BITSET
uint32_t u32_max; // used for MODE_DIRECT with VAR_UINT32
} cliValueConfig_t; } cliValueConfig_t;
typedef struct clivalue_s { typedef struct clivalue_s {