summaryrefslogtreecommitdiff
path: root/app/src/endpoints.c
diff options
context:
space:
mode:
authorNick <nick.win999@gmail.com>2020-12-02 17:00:57 -0600
committerPete Johanson <peter@peterjohanson.com>2020-12-14 22:46:49 -0500
commit2204a5dce47a5d3f5f8b32f316dbf0d9a8eea201 (patch)
tree61248ffaf34696513d348237e16bc0e1073fba63 /app/src/endpoints.c
parent69d48c5715885facee84259bfff3e277fa56bc2c (diff)
refactor(settings): Debounce BLE/endpoint settings saves
Diffstat (limited to 'app/src/endpoints.c')
-rw-r--r--app/src/endpoints.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/app/src/endpoints.c b/app/src/endpoints.c
index ad44822..b126f33 100644
--- a/app/src/endpoints.c
+++ b/app/src/endpoints.c
@@ -29,6 +29,23 @@ static enum zmk_endpoint preferred_endpoint =
static void update_current_endpoint();
+#if IS_ENABLED(CONFIG_SETTINGS)
+static void endpoints_save_preferred_work(struct k_work *work) {
+ settings_save_one("endpoints/preferred", &preferred_endpoint, sizeof(preferred_endpoint));
+}
+
+static struct k_delayed_work endpoints_save_work;
+#endif
+
+static int endpoints_save_preferred() {
+#if IS_ENABLED(CONFIG_SETTINGS)
+ k_delayed_work_cancel(&endpoints_save_work);
+ return k_delayed_work_submit(&endpoints_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE));
+#else
+ return 0;
+#endif
+}
+
int zmk_endpoints_select(enum zmk_endpoint endpoint) {
LOG_DBG("Selected endpoint %d", endpoint);
@@ -38,9 +55,7 @@ int zmk_endpoints_select(enum zmk_endpoint endpoint) {
preferred_endpoint = endpoint;
-#if IS_ENABLED(CONFIG_SETTINGS)
- settings_save_one("endpoints/preferred", &preferred_endpoint, sizeof(preferred_endpoint));
-#endif
+ endpoints_save_preferred();
update_current_endpoint();
@@ -166,6 +181,8 @@ static int zmk_endpoints_init(const struct device *_arg) {
return err;
}
+ k_delayed_work_init(&endpoints_save_work, endpoints_save_preferred_work);
+
settings_load_subtree("endpoints");
#endif