From a0e2b0c5a247beaf201c6e49a3221c7e04e306e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20K=C3=BCng?= Date: Fri, 24 Mar 2017 17:01:16 +0100 Subject: [PATCH] param: add param_control_autosave to enable/disable autosave --- src/modules/systemlib/param/param.c | 15 +++++++++++++++ src/modules/systemlib/param/param.h | 8 ++++++++ src/modules/systemlib/param/param_shmem.c | 15 +++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/src/modules/systemlib/param/param.c b/src/modules/systemlib/param/param.c index 37ad429f85..7800dde4cc 100644 --- a/src/modules/systemlib/param/param.c +++ b/src/modules/systemlib/param/param.c @@ -639,6 +639,21 @@ static void param_autosave(void) autosave_scheduled = true; work_queue(LPWORK, &autosave_work, (worker_t)&autosave_worker, NULL, USEC2TICK(delay)); } + +void +param_control_autosave(bool enable) +{ + param_lock_writer(); + + if (!enable && autosave_scheduled) { + work_cancel(LPWORK, &autosave_work); + autosave_scheduled = false; + } + + autosave_disabled = !enable; + param_unlock_writer(); +} + static int param_set_internal(param_t param, const void *val, bool mark_saved, bool notify_changes) { diff --git a/src/modules/systemlib/param/param.h b/src/modules/systemlib/param/param.h index 09889b2ef8..c2d5c06adb 100644 --- a/src/modules/systemlib/param/param.h +++ b/src/modules/systemlib/param/param.h @@ -383,6 +383,14 @@ __EXPORT int param_load_default(void); */ __EXPORT uint32_t param_hash_check(void); + +/** + * Enable/disable the param autosaving. + * Re-enabling with changed params will not cause an autosave. + * @param enable true: enable autosaving, false: disable autosaving + */ +__EXPORT void param_control_autosave(bool enable); + /* * Macros creating static parameter definitions. * diff --git a/src/modules/systemlib/param/param_shmem.c b/src/modules/systemlib/param/param_shmem.c index ab4aecae25..390ce7c9be 100644 --- a/src/modules/systemlib/param/param_shmem.c +++ b/src/modules/systemlib/param/param_shmem.c @@ -640,6 +640,21 @@ static void param_autosave(void) autosave_scheduled = true; work_queue(LPWORK, &autosave_work, (worker_t)&autosave_worker, NULL, USEC2TICK(delay)); } + +void +param_control_autosave(bool enable) +{ + param_lock(); + + if (!enable && autosave_scheduled) { + work_cancel(LPWORK, &autosave_work); + autosave_scheduled = false; + } + + autosave_disabled = !enable; + param_unlock(); +} + static int param_set_internal(param_t param, const void *val, bool mark_saved, bool notify_changes) {