From 131d001e8d17ec2fc5dc261c43396a9b0b565091 Mon Sep 17 00:00:00 2001 From: Okke Formsma Date: Sun, 14 Mar 2021 21:39:31 +0100 Subject: [PATCH] refactor(hid): Move hid logic into hid.c Move the logic for picking the correct hid function into hid.c. --- app/include/zmk/hid.h | 4 ++++ app/src/hid.c | 20 ++++++++++++++++++++ app/src/hid_listener.c | 39 +++++++++------------------------------ 3 files changed, 33 insertions(+), 30 deletions(-) diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h index 5aa004c2..458e9b96 100644 --- a/app/include/zmk/hid.h +++ b/app/include/zmk/hid.h @@ -173,6 +173,7 @@ int zmk_hid_register_mods(zmk_mod_flags_t explicit_modifiers); int zmk_hid_unregister_mods(zmk_mod_flags_t explicit_modifiers); int zmk_hid_implicit_modifiers_press(zmk_mod_flags_t implicit_modifiers); int zmk_hid_implicit_modifiers_release(); + int zmk_hid_keyboard_press(zmk_key_t key); int zmk_hid_keyboard_release(zmk_key_t key); void zmk_hid_keyboard_clear(); @@ -181,5 +182,8 @@ int zmk_hid_consumer_press(zmk_key_t key); int zmk_hid_consumer_release(zmk_key_t key); void zmk_hid_consumer_clear(); +int zmk_hid_press(uint8_t usage_page, zmk_key_t code); +int zmk_hid_release(uint8_t usage_page, zmk_key_t code); + struct zmk_hid_keyboard_report *zmk_hid_get_keyboard_report(); struct zmk_hid_consumer_report *zmk_hid_get_consumer_report(); diff --git a/app/src/hid.c b/app/src/hid.c index 7ab080e5..e5e7f728 100644 --- a/app/src/hid.c +++ b/app/src/hid.c @@ -129,6 +129,26 @@ int zmk_hid_consumer_release(zmk_key_t code) { return 0; }; +int zmk_hid_press(uint8_t usage_page, zmk_key_t code) { + switch (usage_page) { + case HID_USAGE_KEY: + return zmk_hid_keyboard_press(code); + case HID_USAGE_CONSUMER: + return zmk_hid_consumer_press(code); + } + return -EINVAL; +} + +int zmk_hid_release(uint8_t usage_page, zmk_key_t code) { + switch (usage_page) { + case HID_USAGE_KEY: + return zmk_hid_keyboard_release(code); + case HID_USAGE_CONSUMER: + return zmk_hid_consumer_release(code); + } + return -EINVAL; +} + void zmk_hid_consumer_clear() { memset(&consumer_report.body, 0, sizeof(consumer_report.body)); } struct zmk_hid_keyboard_report *zmk_hid_get_keyboard_report() { diff --git a/app/src/hid_listener.c b/app/src/hid_listener.c index d582c169..1766f965 100644 --- a/app/src/hid_listener.c +++ b/app/src/hid_listener.c @@ -20,21 +20,10 @@ static int hid_listener_keycode_pressed(const struct zmk_keycode_state_changed * int err; LOG_DBG("usage_page 0x%02X keycode 0x%02X implicit_mods 0x%02X explicit_mods 0x%02X", ev->usage_page, ev->keycode, ev->implicit_modifiers, ev->explicit_modifiers); - switch (ev->usage_page) { - case HID_USAGE_KEY: - err = zmk_hid_keyboard_press(ev->keycode); - if (err) { - LOG_ERR("Unable to press keycode"); - return err; - } - break; - case HID_USAGE_CONSUMER: - err = zmk_hid_consumer_press(ev->keycode); - if (err) { - LOG_ERR("Unable to press keycode"); - return err; - } - break; + err = zmk_hid_press(ev->usage_page, ev->keycode); + if (err) { + LOG_DBG("Unable to press keycode"); + return err; } zmk_hid_register_mods(ev->explicit_modifiers); zmk_hid_implicit_modifiers_press(ev->implicit_modifiers); @@ -45,20 +34,10 @@ static int hid_listener_keycode_released(const struct zmk_keycode_state_changed int err; LOG_DBG("usage_page 0x%02X keycode 0x%02X implicit_mods 0x%02X explicit_mods 0x%02X", ev->usage_page, ev->keycode, ev->implicit_modifiers, ev->explicit_modifiers); - switch (ev->usage_page) { - case HID_USAGE_KEY: - err = zmk_hid_keyboard_release(ev->keycode); - if (err) { - LOG_ERR("Unable to release keycode"); - return err; - } - break; - case HID_USAGE_CONSUMER: - err = zmk_hid_consumer_release(ev->keycode); - if (err) { - LOG_ERR("Unable to release keycode"); - return err; - } + err = zmk_hid_release(ev->usage_page, ev->keycode); + if (err) { + LOG_DBG("Unable to release keycode"); + return err; } zmk_hid_unregister_mods(ev->explicit_modifiers); // There is a minor issue with this code. @@ -83,4 +62,4 @@ int hid_listener(const zmk_event_t *eh) { } ZMK_LISTENER(hid_listener, hid_listener); -ZMK_SUBSCRIPTION(hid_listener, zmk_keycode_state_changed); \ No newline at end of file +ZMK_SUBSCRIPTION(hid_listener, zmk_keycode_state_changed);