From 6eb61d0cd1336c097bc121b55f1f0a55c007effa Mon Sep 17 00:00:00 2001 From: Tokazio Date: Tue, 17 Jan 2023 19:05:04 +0100 Subject: [PATCH] esyo-net/main: resolve preserve locality outside of direct keymap bindings #1630 (squashed 2023-02-23) --- app/include/zmk/split/bluetooth/central.h | 4 +++- app/src/behavior_queue.c | 8 +++++-- app/src/keymap.c | 26 ++++++++++++++--------- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/app/include/zmk/split/bluetooth/central.h b/app/include/zmk/split/bluetooth/central.h index 072408605cf7..e08427e05913 100644 --- a/app/include/zmk/split/bluetooth/central.h +++ b/app/include/zmk/split/bluetooth/central.h @@ -5,4 +5,6 @@ #include int zmk_split_bt_invoke_behavior(uint8_t source, struct zmk_behavior_binding *binding, - struct zmk_behavior_binding_event event, bool state); \ No newline at end of file + struct zmk_behavior_binding_event event, bool state); + +int zmk_run_behavior(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event,uint8_t source,bool pressed); \ No newline at end of file diff --git a/app/src/behavior_queue.c b/app/src/behavior_queue.c index 617d5aad8ecd..7e350e7c62f7 100644 --- a/app/src/behavior_queue.c +++ b/app/src/behavior_queue.c @@ -9,6 +9,8 @@ #include #include #include +#include + LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); @@ -35,9 +37,11 @@ static void behavior_queue_process_next(struct k_work *work) { .timestamp = k_uptime_get()}; if (item.press) { - behavior_keymap_binding_pressed(&item.binding, event); + zmk_run_behavior(&item.binding, event,0,true); +// behavior_keymap_binding_pressed(&item.binding, event); } else { - behavior_keymap_binding_released(&item.binding, event); + zmk_run_behavior(&item.binding, event,0,false); + // behavior_keymap_binding_released(&item.binding, event); } LOG_DBG("Processing next queued behavior in %dms", item.wait); diff --git a/app/src/keymap.c b/app/src/keymap.c index e586316f4f43..6431052b1a60 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -179,17 +179,23 @@ int zmk_keymap_apply_position_state(uint8_t source, int layer, uint32_t position .timestamp = timestamp, }; - LOG_DBG("layer: %d position: %d, binding name: %s", layer, position, - log_strdup(binding.behavior_dev)); + return zmk_run_behavior(&binding,event,source,pressed); +} + +int zmk_run_behavior(struct zmk_behavior_binding *binding, struct zmk_behavior_binding_event event,uint8_t source,bool pressed){ + + LOG_DBG("layer: %d position: %d, binding name: %s", event.layer, event.position, + log_strdup(binding->behavior_dev)); + - behavior = device_get_binding(binding.behavior_dev); + const struct device *behavior = device_get_binding(binding->behavior_dev); if (!behavior) { - LOG_WRN("No behavior assigned to %d on layer %d", position, layer); + LOG_WRN("No behavior assigned to %d on layer %d", event.position, event.layer); return 1; } - int err = behavior_keymap_binding_convert_central_state_dependent_params(&binding, event); + int err = behavior_keymap_binding_convert_central_state_dependent_params(binding, event); if (err) { LOG_ERR("Failed to convert relative to absolute behavior binding (err %d)", err); return err; @@ -204,24 +210,24 @@ int zmk_keymap_apply_position_state(uint8_t source, int layer, uint32_t position switch (locality) { case BEHAVIOR_LOCALITY_CENTRAL: - return invoke_locally(&binding, event, pressed); + return invoke_locally(binding, event, pressed); case BEHAVIOR_LOCALITY_EVENT_SOURCE: #if ZMK_BLE_IS_CENTRAL if (source == ZMK_POSITION_STATE_CHANGE_SOURCE_LOCAL) { - return invoke_locally(&binding, event, pressed); + return invoke_locally(binding, event, pressed); } else { return zmk_split_bt_invoke_behavior(source, &binding, event, pressed); } #else - return invoke_locally(&binding, event, pressed); + return invoke_locally(binding, event, pressed); #endif case BEHAVIOR_LOCALITY_GLOBAL: #if ZMK_BLE_IS_CENTRAL for (int i = 0; i < ZMK_BLE_SPLIT_PERIPHERAL_COUNT; i++) { - zmk_split_bt_invoke_behavior(i, &binding, event, pressed); + zmk_split_bt_invoke_behavior(i, binding, event, pressed); } #endif - return invoke_locally(&binding, event, pressed); + return invoke_locally(binding, event, pressed); } return -ENOTSUP;