diff --git a/src/lib/parameters/flashparams/flashparams.cpp b/src/lib/parameters/flashparams/flashparams.cpp index 896340145f..8769bf0c8f 100644 --- a/src/lib/parameters/flashparams/flashparams.cpp +++ b/src/lib/parameters/flashparams/flashparams.cpp @@ -362,5 +362,5 @@ int flash_param_load() int flash_param_import() { - return param_import_internal(false); + return param_import_internal(true); } diff --git a/src/lib/parameters/param.h b/src/lib/parameters/param.h index d94f95d9f8..4aae9d4d5d 100644 --- a/src/lib/parameters/param.h +++ b/src/lib/parameters/param.h @@ -308,10 +308,11 @@ __EXPORT int param_export(int fd, bool only_unsaved, param_filter_func filter); * This function merges the imported parameters with the current parameter set. * * @param fd File descriptor to import from (-1 selects the FLASH storage). + * @param mark_saved Whether to mark imported parameters as already saved * @return Zero on success, nonzero if an error occurred during import. * Note that in the failure case, parameters may be inconsistent. */ -__EXPORT int param_import(int fd); +__EXPORT int param_import(int fd, bool mark_saved); /** * Load parameters from a file. diff --git a/src/lib/parameters/parameters.cpp b/src/lib/parameters/parameters.cpp index 0ed1bacf3c..b991d17707 100644 --- a/src/lib/parameters/parameters.cpp +++ b/src/lib/parameters/parameters.cpp @@ -1300,13 +1300,13 @@ param_import_internal(int fd, bool mark_saved) } int -param_import(int fd) +param_import(int fd, bool mark_saved) { if (fd < 0) { return flash_param_import(); } - return param_import_internal(fd, false); + return param_import_internal(fd, mark_saved); } int diff --git a/src/lib/parameters/parameters_shmem.cpp b/src/lib/parameters/parameters_shmem.cpp index 6e6ed452c1..a50eb52244 100644 --- a/src/lib/parameters/parameters_shmem.cpp +++ b/src/lib/parameters/parameters_shmem.cpp @@ -1073,7 +1073,7 @@ param_load_default_no_notify() return 1; } - int result = param_import(fd_load); + int result = param_import(fd_load, true); close(fd_load); @@ -1351,10 +1351,10 @@ param_import_internal(int fd, bool mark_saved) } int -param_import(int fd) +param_import(int fd, bool mark_saved) { #if !defined(FLASH_BASED_PARAMS) - return param_import_internal(fd, false); + return param_import_internal(fd, mark_saved); #else (void)fd; // unused // no need for locking here diff --git a/src/systemcmds/param/param.cpp b/src/systemcmds/param/param.cpp index df8b9b650c..80adb32c27 100644 --- a/src/systemcmds/param/param.cpp +++ b/src/systemcmds/param/param.cpp @@ -83,7 +83,7 @@ enum class COMPARE_ERROR_LEVEL { static int do_save(const char *param_file_name); static int do_save_default(); static int do_load(const char *param_file_name); -static int do_import(const char *param_file_name); +static int do_import(const char *param_file_name = nullptr); static int do_show(const char *search_string, bool only_changed); static int do_show_for_airframe(); static int do_show_all(); @@ -213,7 +213,7 @@ param_main(int argc, char *argv[]) return do_import(argv[2]); } else { - return do_import(param_get_default_file()); + return do_import(); } } @@ -428,6 +428,12 @@ do_load(const char *param_file_name) static int do_import(const char *param_file_name) { + bool mark_saved = false; + if (param_file_name == nullptr) { + param_file_name = param_get_default_file(); + mark_saved = true; // if imported from default storage, mark as saved + } + int fd = -1; if (param_file_name) { // passing NULL means to select the flash storage fd = open(param_file_name, O_RDONLY); @@ -438,7 +444,7 @@ do_import(const char *param_file_name) } } - int result = param_import(fd); + int result = param_import(fd, mark_saved); if (fd >= 0) { close(fd); } diff --git a/src/systemcmds/tests/test_parameters.cpp b/src/systemcmds/tests/test_parameters.cpp index 8ad37cfaed..27eb71775d 100644 --- a/src/systemcmds/tests/test_parameters.cpp +++ b/src/systemcmds/tests/test_parameters.cpp @@ -363,7 +363,7 @@ bool ParameterTest::exportImportAll() return false; } - int result = param_export(fd, false); + int result = param_export(fd, false, nullptr); if (result != PX4_OK) { PX4_ERR("param_export failed"); @@ -516,7 +516,7 @@ bool ParameterTest::exportImportAll() return false; } - result = param_import(fd); + result = param_import(fd, false); close(fd); if (result < 0) {