From 1af4221908b52f6fc46e30445af8c87056b5f60b Mon Sep 17 00:00:00 2001 From: Nick Date: Mon, 2 Nov 2020 15:47:22 -0600 Subject: [PATCH] feat(underglow): Debounce state settings save --- app/src/rgb_underglow.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index b371c943..084482ea 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -227,6 +227,14 @@ static void zmk_rgb_underglow_tick_handler(struct k_timer *timer) { K_TIMER_DEFINE(underglow_tick, zmk_rgb_underglow_tick_handler, NULL); +#if IS_ENABLED(CONFIG_SETTINGS) +static void zmk_rgb_underglow_save_state_work() { + settings_save_one("rgb/underglow/state", &state, sizeof(state)); +} + +static struct k_delayed_work underglow_save_work; +#endif + static int zmk_rgb_underglow_init(struct device *_arg) { led_strip = device_get_binding(STRIP_LABEL); if (led_strip) { @@ -248,6 +256,7 @@ static int zmk_rgb_underglow_init(struct device *_arg) { #if IS_ENABLED(CONFIG_SETTINGS) settings_register(&rgb_conf); + k_delayed_work_init(&underglow_save_work, zmk_rgb_underglow_save_state_work); #endif k_timer_start(&underglow_tick, K_NO_WAIT, K_MSEC(50)); @@ -257,7 +266,8 @@ static int zmk_rgb_underglow_init(struct device *_arg) { int zmk_rgb_underglow_save_state() { #if IS_ENABLED(CONFIG_SETTINGS) - return settings_save_one("rgb/underglow/state", &state, sizeof(state)); + k_delayed_work_cancel(&underglow_save_work); + return k_delayed_work_submit(&underglow_save_work, K_MINUTES(1)); #else return 0; #endif