Skip to content

Commit

Permalink
esyo-net/main: resolve preserve locality outside of direct keymap bin…
Browse files Browse the repository at this point in the history
…dings zmkfirmware#1630 (squashed 2023-02-23)
  • Loading branch information
tokazio authored and xudongzheng committed Feb 23, 2023
1 parent 3b9c5a1 commit 6eb61d0
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 13 deletions.
4 changes: 3 additions & 1 deletion app/include/zmk/split/bluetooth/central.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@
#include <zmk/behavior.h>

int zmk_split_bt_invoke_behavior(uint8_t source, struct zmk_behavior_binding *binding,
struct zmk_behavior_binding_event event, bool state);
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);
8 changes: 6 additions & 2 deletions app/src/behavior_queue.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
#include <kernel.h>
#include <logging/log.h>
#include <drivers/behavior.h>
#include <zmk/split/bluetooth/central.h>


LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);

Expand All @@ -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);
Expand Down
26 changes: 16 additions & 10 deletions app/src/keymap.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down

0 comments on commit 6eb61d0

Please sign in to comment.