diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp index 8bcb460ec..c61ad6645 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp @@ -724,21 +724,20 @@ const char* _func_failsafe_lookup[] = { }; // used in read routine as well +extern const char* _func_sound_lookup[]; const char* _func_sound_lookup[] = { "Bp1","Bp2","Bp3","Wrn1","Wrn2", "Chee","Rata","Tick","Sirn","Ring", "SciF","Robt","Chrp","Tada","Crck","Alrm" }; +extern const uint8_t _func_sound_lookup_size = 16; // force external linkage -extern const uint8_t _func_sound_lookup_size = sizeof(_func_sound_lookup); - extern const char* _adjust_gvar_mode_lookup[]; const char* _adjust_gvar_mode_lookup[] = { "Cst", "Src", "GVar", "IncDec" }; - -extern const uint8_t _adjust_gvar_mode_lookup_size = sizeof(_adjust_gvar_mode_lookup); +extern const uint8_t _adjust_gvar_mode_lookup_size = 4; bool w_customFn(void* user, uint8_t* data, uint32_t bitoffs, yaml_writer_func wf, void* opaque) @@ -827,10 +826,15 @@ bool w_customFn(void* user, uint8_t* data, uint32_t bitoffs, break; case FUNC_ADJUST_GVAR: + str = yaml_unsigned2str(CFN_GVAR_INDEX(cfn)); // GVAR index + if (!wf(opaque, str, strlen(str))) return false; + if (!wf(opaque,",",1)) return false; + // output CFN_GVAR_MODE str = _adjust_gvar_mode_lookup[CFN_GVAR_MODE(cfn)]; if (!wf(opaque, str, strlen(str))) return false; if (!wf(opaque,",",1)) return false; + // output param switch(CFN_GVAR_MODE(cfn)) { case FUNC_ADJUST_GVAR_CONSTANT: diff --git a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp index a37842d20..8de104abe 100644 --- a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp @@ -1174,7 +1174,16 @@ static void r_customFn(void* user, uint8_t* data, uint32_t bitoffs, CFN_PARAM(cfn) = yaml_str2uint(val, l_sep); break; - case FUNC_ADJUST_GVAR: + case FUNC_ADJUST_GVAR: { + + CFN_GVAR_INDEX(cfn) = yaml_str2int_ref(val, l_sep); + if (val_len == 0 || val[0] != ',') return; + val++; val_len--; + + // find "," and cut val_len + sep = (const char *)memchr(val, ',', val_len); + l_sep = sep ? sep - val : val_len; + // parse CFN_GVAR_MODE for (int i=0; i < yaml_conv_220::_adjust_gvar_mode_lookup_size; i++) { if (!strncmp(yaml_conv_220::_adjust_gvar_mode_lookup[i],val,l_sep)) { @@ -1182,12 +1191,14 @@ static void r_customFn(void* user, uint8_t* data, uint32_t bitoffs, break; } } + val += l_sep; val_len -= l_sep; if (val_len == 0 || val[0] != ',') return; val++; val_len--; // find "," and cut val_len sep = (const char *)memchr(val, ',', val_len); l_sep = sep ? sep - val : val_len; + // output param switch(CFN_GVAR_MODE(cfn)) { case FUNC_ADJUST_GVAR_CONSTANT: @@ -1203,7 +1214,9 @@ static void r_customFn(void* user, uint8_t* data, uint32_t bitoffs, CFN_PARAM(cfn) = gvar - MIXSRC_FIRST_GVAR; } } break; - } break; + } + + } break; default: eat_comma = false; @@ -1333,10 +1346,15 @@ static bool w_customFn(void* user, uint8_t* data, uint32_t bitoffs, break; case FUNC_ADJUST_GVAR: + str = yaml_unsigned2str(CFN_GVAR_INDEX(cfn)); // GVAR index + if (!wf(opaque, str, strlen(str))) return false; + if (!wf(opaque,",",1)) return false; + // output CFN_GVAR_MODE str = yaml_conv_220::_adjust_gvar_mode_lookup[CFN_GVAR_MODE(cfn)]; if (!wf(opaque, str, strlen(str))) return false; if (!wf(opaque,",",1)) return false; + // output param switch(CFN_GVAR_MODE(cfn)) { case FUNC_ADJUST_GVAR_CONSTANT: @@ -1351,6 +1369,7 @@ static bool w_customFn(void* user, uint8_t* data, uint32_t bitoffs, if (!w_mixSrcRaw(nullptr, CFN_PARAM(cfn) + MIXSRC_FIRST_GVAR, wf, opaque)) return false; break; } + break; default: add_comma = false;