From 7bf9d7317942f70f05cb075c8a7d8a4a067651ec Mon Sep 17 00:00:00 2001 From: Jacob Dahl Date: Thu, 19 Mar 2026 21:37:47 -0800 Subject: [PATCH] fix(parameters): add RC*_REV float to int32 migration Existing saved parameters store RC*_REV as float. The parameter import system does strict type checking and would silently skip these on firmware update. Add migration to preserve user settings. --- src/lib/parameters/param_translation.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/lib/parameters/param_translation.cpp b/src/lib/parameters/param_translation.cpp index d1266fdf17..e88faf8579 100644 --- a/src/lib/parameters/param_translation.cpp +++ b/src/lib/parameters/param_translation.cpp @@ -229,6 +229,17 @@ param_modify_on_import_ret param_modify_on_import(bson_node_t node) int32_t delay_ms = static_cast(node->d); param_set(param_find("EKF2_POS_LOCK"), &delay_ms); PX4_INFO("migrating %s -> %s", "EKF2_ENGINE_WRM", "EKF2_POS_LOCK"); + return param_modify_on_import_ret::PARAM_SKIP_IMPORT; + } + } + + // 2026-03-19: translate RC*_REV from float to int32 + { + if ((node->type == bson_type_t::BSON_DOUBLE) && (strncmp("RC", node->name, 2) == 0) + && strstr(node->name, "_REV") != nullptr) { + node->i32 = (node->d < 0.0) ? -1 : 1; + node->type = bson_type_t::BSON_INT32; + PX4_INFO("migrating %s from float to int32", node->name); return param_modify_on_import_ret::PARAM_MODIFIED; } }