diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp index 5a8951c25..d4c0ccf60 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp @@ -23,7 +23,6 @@ #include "datastructs_220.h" #include "myeeprom_220.h" -#define GVAR_SMALL 128 #define VOLUME_LEVEL_DEF 12 bool w_board(void* user, uint8_t* data, uint32_t bitoffs, @@ -38,12 +37,13 @@ bool in_write_weight(const YamlNode* node, uint32_t val, yaml_writer_func wf, void* opaque) { int32_t sval = yaml_to_signed(val, node->size); + int32_t gvar = (node->size > 8 ? GV1_LARGE : GV1_SMALL); - if (sval > GVAR_SMALL - 11 && sval < GVAR_SMALL - 1) { - char n = GVAR_SMALL - sval + '0'; + if (sval >= gvar - 10 && sval <= gvar) { + char n = gvar - sval + '0'; return wf(opaque, "-GV", 3) && wf(opaque, &n, 1); - } else if (sval < -GVAR_SMALL + 11 && sval > -GVAR_SMALL + 1) { - char n = val - GVAR_SMALL + '1'; + } else if (sval <= -gvar + 10 && sval >= -gvar) { + char n = val - gvar + '1'; return wf(opaque, "GV", 2) && wf(opaque, &n, 1); } diff --git a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp index 5d4922497..567745ec7 100644 --- a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp @@ -143,10 +143,10 @@ static bool w_board(void* user, uint8_t* data, uint32_t bitoffs, return yaml_conv_220::w_board(user, data, bitoffs, wf, opaque); } -#define GVAR_SMALL 128 - static uint32_t in_read_weight(const YamlNode* node, const char* val, uint8_t val_len) { + int gvar = (node->size > 8 ? GV1_LARGE : GV1_SMALL); + if ((val_len == 4) && (val[0] == '-') && (val[1] == 'G') @@ -154,8 +154,8 @@ static uint32_t in_read_weight(const YamlNode* node, const char* val, uint8_t va && (val[3] >= '1') && (val[3] <= '9')) { - TRACE("%.*s -> %i\n", val_len, val, GVAR_SMALL - (val[3] - '0')); - return GVAR_SMALL - (val[3] - '0'); // -GVx => 128 - x + TRACE("%.*s -> %i\n", val_len, val, gvar - (val[3] - '0')); + return gvar - (val[3] - '0'); // -GVx => 128 - x } if ((val_len == 3) @@ -164,8 +164,8 @@ static uint32_t in_read_weight(const YamlNode* node, const char* val, uint8_t va && (val[2] >= '1') && (val[2] <= '9')) { - TRACE("%.*s -> %i\n", val_len, val, -GVAR_SMALL + (val[2] - '1')); - return -GVAR_SMALL + (val[2] - '1'); // GVx => -128 + (x-1) + TRACE("%.*s -> %i\n", val_len, val, -gvar + (val[2] - '1')); + return -gvar + (val[2] - '1'); // GVx => -128 + (x-1) } return (uint32_t)yaml_str2int(val, val_len);