diff --git a/src/lib/parameters/param.h b/src/lib/parameters/param.h index d2a196e678..fce0ade507 100644 --- a/src/lib/parameters/param.h +++ b/src/lib/parameters/param.h @@ -215,6 +215,16 @@ __EXPORT size_t param_size(param_t param); */ __EXPORT int param_get(param_t param, void *val); +/** + * Copy the default value of a parameter. + * + * @param param A handle returned by param_find or passed by param_foreach. + * @param val Where to return the value, assumed to point to suitable storage for the parameter type. + * For structures, a bitwise copy of the structure is performed to this address. + * @return Zero if the parameter's deafult value could be returned, nonzero otherwise. + */ +__EXPORT int param_get_default_value(param_t param, void *val); + /** * Set the value of a parameter. * diff --git a/src/lib/parameters/parameters.cpp b/src/lib/parameters/parameters.cpp index 433cc52e6a..9b1d393b31 100644 --- a/src/lib/parameters/parameters.cpp +++ b/src/lib/parameters/parameters.cpp @@ -581,6 +581,24 @@ param_get(param_t param, void *val) return result; } +int +param_get_default_value(param_t param, void *default_val) +{ + if (default_val && handle_in_range(param)) { + switch (param_type(param)) { + case PARAM_TYPE_INT32: + memcpy(default_val, ¶m_info_base[param].val.i, param_size(param)); + return 0; + + case PARAM_TYPE_FLOAT: + memcpy(default_val, ¶m_info_base[param].val.f, param_size(param)); + return 0; + } + } + + return -1; +} + /** * worker callback method to save the parameters * @param arg unused