summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick <nick.win999@gmail.com>2020-11-02 15:47:22 -0600
committerPete Johanson <peter@peterjohanson.com>2020-11-03 22:08:20 -0500
commit1af4221908b52f6fc46e30445af8c87056b5f60b (patch)
tree8fec97683a88dc375613c276eaceeffa8298abe5
parentc3e7742f9c990bcc55a7f7358a51530bf4897265 (diff)
feat(underglow): Debounce state settings save
-rw-r--r--app/src/rgb_underglow.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c
index b371c94..084482e 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