diff --git a/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp b/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp index e91a1970d..fcb2f31f7 100644 --- a/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp +++ b/radio/src/storage/conversions/yaml/yaml_datastructs_funcs.cpp @@ -748,7 +748,7 @@ bool w_customFn(void* user, uint8_t* data, uint32_t bitoffs, str = yaml_unsigned2str(CFN_CH_INDEX(cfn)); // CH index if (!wf(opaque, str, strlen(str))) return false; if (!wf(opaque, ",", 1)) return false; - str = yaml_unsigned2str(CFN_PARAM(cfn)); // value + str = yaml_signed2str(CFN_PARAM(cfn)); // value if (!wf(opaque, str, strlen(str))) return false; break; diff --git a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp index 8fcbce1a3..8cb3925c4 100644 --- a/radio/src/storage/yaml/yaml_datastructs_funcs.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_funcs.cpp @@ -1051,6 +1051,7 @@ static void r_customFn(void* user, uint8_t* data, uint32_t bitoffs, CFN_CH_INDEX(cfn) = yaml_str2uint_ref(val, val_len); // "," if (!val_len || val[0] != ',') return; + val++; val_len--; // value CFN_PARAM(cfn) = yaml_str2int_ref(val, val_len); } @@ -1235,7 +1236,7 @@ static bool w_customFn(void* user, uint8_t* data, uint32_t bitoffs, str = yaml_unsigned2str(CFN_CH_INDEX(cfn)); // CH index if (!wf(opaque, str, strlen(str))) return false; if (!wf(opaque, ",", 1)) return false; - str = yaml_unsigned2str(CFN_PARAM(cfn)); // value + str = yaml_signed2str(CFN_PARAM(cfn)); // value if (!wf(opaque, str, strlen(str))) return false; break; diff --git a/radio/src/tests/conversions.cpp b/radio/src/tests/conversions.cpp index 5167f78f4..8bae7eb6f 100644 --- a/radio/src/tests/conversions.cpp +++ b/radio/src/tests/conversions.cpp @@ -442,6 +442,10 @@ TEST(Conversions, ConversionTX16SFrom25) EXPECT_EQ(MODULE_SUBTYPE_PXX1_ACCST_LR12, g_model.moduleData[1].subType); EXPECT_EQ(4, g_model.moduleData[1].channelsCount); // 4 + 8 = 12 + EXPECT_EQ(-SWSRC_SE0, g_model.customFn[0].swtch); + EXPECT_EQ(FUNC_OVERRIDE_CHANNEL, g_model.customFn[0].func); + EXPECT_EQ(-100, CFN_PARAM(&(g_model.customFn[0]))); + const auto& top_widget = g_model.topbarData.zones[3]; EXPECT_STRNEQ("Value", top_widget.widgetName); diff --git a/radio/src/tests/model_25_tx16s.otx b/radio/src/tests/model_25_tx16s.otx index 2555135b2..d9a764880 100644 Binary files a/radio/src/tests/model_25_tx16s.otx and b/radio/src/tests/model_25_tx16s.otx differ