summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/src/ble.c21
-rw-r--r--app/src/endpoints.c23
2 files changed, 40 insertions, 4 deletions
diff --git a/app/src/ble.c b/app/src/ble.c
index 1f311a0..9cfef4b 100644
--- a/app/src/ble.c
+++ b/app/src/ble.c
@@ -228,6 +228,23 @@ int zmk_ble_clear_bonds() {
int zmk_ble_active_profile_index() { return active_profile; }
+#if IS_ENABLED(CONFIG_SETTINGS)
+static void ble_save_profile_work(struct k_work *work) {
+ settings_save_one("ble/active_profile", &active_profile, sizeof(active_profile));
+}
+
+static struct k_delayed_work ble_save_work;
+#endif
+
+static int ble_save_profile() {
+#if IS_ENABLED(CONFIG_SETTINGS)
+ k_delayed_work_cancel(&ble_save_work);
+ return k_delayed_work_submit(&ble_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE));
+#else
+ return 0;
+#endif
+}
+
int zmk_ble_prof_select(uint8_t index) {
LOG_DBG("profile %d", index);
if (active_profile == index) {
@@ -235,7 +252,7 @@ int zmk_ble_prof_select(uint8_t index) {
}
active_profile = index;
- settings_save_one("ble/active_profile", &active_profile, sizeof(active_profile));
+ ble_save_profile();
update_advertising();
@@ -526,6 +543,8 @@ static int zmk_ble_init(const struct device *_arg) {
return err;
}
+ k_delayed_work_init(&ble_save_work, ble_save_profile_work);
+
settings_load_subtree("ble");
settings_load_subtree("bt");
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