mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-14 20:10:18 +03:00
Fix diff support for array data types (#5366)
Previously diff would only compare the first element of an array type. Changed valuePtrEqualsDefault() to make it array-aware and compare all elements to the defaults.
This commit is contained in:
parent
5d3c3b766b
commit
43d8f67db2
1 changed files with 22 additions and 14 deletions
|
@ -379,22 +379,30 @@ static void printValuePointer(const clivalue_t *var, const void *valuePointer, b
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool valuePtrEqualsDefault(uint8_t type, const void *ptr, const void *ptrDefault)
|
|
||||||
|
static bool valuePtrEqualsDefault(const clivalue_t *var, const void *ptr, const void *ptrDefault)
|
||||||
{
|
{
|
||||||
bool result = false;
|
bool result = true;
|
||||||
switch (type & VALUE_TYPE_MASK) {
|
int elementCount = 1;
|
||||||
case VAR_UINT8:
|
|
||||||
result = *(uint8_t *)ptr == *(uint8_t *)ptrDefault;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case VAR_INT8:
|
if ((var->type & VALUE_MODE_MASK) == MODE_ARRAY) {
|
||||||
result = *(int8_t *)ptr == *(int8_t *)ptrDefault;
|
elementCount = var->config.array.length;
|
||||||
break;
|
}
|
||||||
|
for (int i = 0; i < elementCount; i++) {
|
||||||
|
switch (var->type & VALUE_TYPE_MASK) {
|
||||||
|
case VAR_UINT8:
|
||||||
|
result = result && ((uint8_t *)ptr)[i] == ((uint8_t *)ptrDefault)[i];
|
||||||
|
break;
|
||||||
|
|
||||||
case VAR_UINT16:
|
case VAR_INT8:
|
||||||
case VAR_INT16:
|
result = result && ((int8_t *)ptr)[i] == ((int8_t *)ptrDefault)[i];
|
||||||
result = *(int16_t *)ptr == *(int16_t *)ptrDefault;
|
break;
|
||||||
break;
|
|
||||||
|
case VAR_UINT16:
|
||||||
|
case VAR_INT16:
|
||||||
|
result = result && ((int16_t *)ptr)[i] == ((int16_t *)ptrDefault)[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
@ -438,7 +446,7 @@ static void dumpPgValue(const clivalue_t *value, uint8_t dumpMask)
|
||||||
const char *format = "set %s = ";
|
const char *format = "set %s = ";
|
||||||
const char *defaultFormat = "#set %s = ";
|
const char *defaultFormat = "#set %s = ";
|
||||||
const int valueOffset = getValueOffset(value);
|
const int valueOffset = getValueOffset(value);
|
||||||
const bool equalsDefault = valuePtrEqualsDefault(value->type, pg->copy + valueOffset, pg->address + valueOffset);
|
const bool equalsDefault = valuePtrEqualsDefault(value, pg->copy + valueOffset, pg->address + valueOffset);
|
||||||
|
|
||||||
if (((dumpMask & DO_DIFF) == 0) || !equalsDefault) {
|
if (((dumpMask & DO_DIFF) == 0) || !equalsDefault) {
|
||||||
if (dumpMask & SHOW_DEFAULTS && !equalsDefault) {
|
if (dumpMask & SHOW_DEFAULTS && !equalsDefault) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue