diff --git a/platforms/common/include/px4_platform_common/param.h b/platforms/common/include/px4_platform_common/param.h index fec6368f0c..d669601fa9 100644 --- a/platforms/common/include/px4_platform_common/param.h +++ b/platforms/common/include/px4_platform_common/param.h @@ -132,6 +132,12 @@ public: void set(float val) { _val = val; } + void reset() + { + param_reset_no_notification(handle()); + update(); + } + bool update() { return param_get(handle(), &_val) == 0; } param_t handle() const { return param_handle(p); } @@ -166,6 +172,12 @@ public: void set(float val) { _val = val; } + void reset() + { + param_reset_no_notification(handle()); + update(); + } + bool update() { return param_get(handle(), &_val) == 0; } param_t handle() const { return param_handle(p); } @@ -198,6 +210,12 @@ public: void set(int32_t val) { _val = val; } + void reset() + { + param_reset_no_notification(handle()); + update(); + } + bool update() { return param_get(handle(), &_val) == 0; } param_t handle() const { return param_handle(p); } @@ -232,6 +250,12 @@ public: void set(int32_t val) { _val = val; } + void reset() + { + param_reset_no_notification(handle()); + update(); + } + bool update() { return param_get(handle(), &_val) == 0; } param_t handle() const { return param_handle(p); } @@ -272,6 +296,12 @@ public: void set(bool val) { _val = val; } + void reset() + { + param_reset_no_notification(handle()); + update(); + } + bool update() { int32_t value_int; diff --git a/src/lib/parameters/param.h b/src/lib/parameters/param.h index 4aae9d4d5d..d2a196e678 100644 --- a/src/lib/parameters/param.h +++ b/src/lib/parameters/param.h @@ -260,6 +260,17 @@ __EXPORT void param_notify_changes(void); */ __EXPORT int param_reset(param_t param); +/** + * Reset a parameter to its default value, but do not notify the system about the change. + * + * This function frees any storage used by struct parameters, and returns the parameter + * to its default value. + * + * @param param A handle returned by param_find or passed by param_foreach. + * @return Zero on success, nonzero on failure + */ +__EXPORT int param_reset_no_notification(param_t param); + /** * Reset all parameters to their default values. * diff --git a/src/lib/parameters/parameters.cpp b/src/lib/parameters/parameters.cpp index b991d17707..d50446f264 100644 --- a/src/lib/parameters/parameters.cpp +++ b/src/lib/parameters/parameters.cpp @@ -797,8 +797,7 @@ void param_set_used_internal(param_t param) (1 << param_index % bits_per_allocation_unit); } -int -param_reset(param_t param) +static int param_reset_internal(param_t param, bool notify = true) { param_wbuf_s *s = nullptr; bool param_found = false; @@ -823,12 +822,16 @@ param_reset(param_t param) param_unlock_writer(); - if (s != nullptr) { + if (s != nullptr && notify) { _param_notify_changes(); } return (!param_found); } + +int param_reset(param_t param) { return param_reset_internal(param, true); } +int param_reset_no_notification(param_t param) { return param_reset_internal(param, false); } + static void param_reset_all_internal(bool auto_save) {