From 57fca34dc0d2a8106678d311dd06559642dcb443 Mon Sep 17 00:00:00 2001
From: Okke Formsma <okke@formsma.nl>
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 f507b56a..bd6ce2e7 100644
--- a/app/include/zmk/hid.h
+++ b/app/include/zmk/hid.h
@@ -133,6 +133,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();
@@ -141,5 +142,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(uint32_t usage);
+int zmk_hid_release(uint32_t usage);
+
 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 d6c63e1d..a8009c7a 100644
--- a/app/src/hid.c
+++ b/app/src/hid.c
@@ -176,6 +176,26 @@ int zmk_hid_consumer_release(zmk_key_t code) {
     return 0;
 };
 
+int zmk_hid_press(uint32_t usage) {
+    switch (ZMK_HID_USAGE_PAGE(usage)) {
+    case HID_USAGE_KEY:
+        return zmk_hid_keyboard_press(ZMK_HID_USAGE_ID(usage));
+    case HID_USAGE_CONSUMER:
+        return zmk_hid_consumer_press(ZMK_HID_USAGE_ID(usage));
+    }
+    return -EINVAL;
+}
+
+int zmk_hid_release(uint32_t usage) {
+    switch (ZMK_HID_USAGE_PAGE(usage)) {
+    case HID_USAGE_KEY:
+        return zmk_hid_keyboard_release(ZMK_HID_USAGE_ID(usage));
+    case HID_USAGE_CONSUMER:
+        return zmk_hid_consumer_release(ZMK_HID_USAGE_ID(usage));
+    }
+    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 c0a82c34..e233b0b8 100644
--- a/app/src/hid_listener.c
+++ b/app/src/hid_listener.c
@@ -21,21 +21,10 @@ static int hid_listener_keycode_pressed(const struct zmk_keycode_state_changed *
 
     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 < 0) {
-            LOG_ERR("Unable to press keycode");
-            return err;
-        }
-        break;
-    case HID_USAGE_CONSUMER:
-        err = zmk_hid_consumer_press(ev->keycode);
-        if (err < 0) {
-            LOG_ERR("Unable to press keycode");
-            return err;
-        }
-        break;
+    err = zmk_hid_press(ZMK_HID_USAGE(ev->usage_page, ev->keycode));
+    if (err < 0) {
+        LOG_DBG("Unable to press keycode");
+        return err;
     }
     explicit_mods_changed = zmk_hid_register_mods(ev->explicit_modifiers);
     implicit_mods_changed = zmk_hid_implicit_modifiers_press(ev->implicit_modifiers);
@@ -56,20 +45,10 @@ static int hid_listener_keycode_released(const struct zmk_keycode_state_changed
 
     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 < 0) {
-            LOG_ERR("Unable to release keycode");
-            return err;
-        }
-        break;
-    case HID_USAGE_CONSUMER:
-        err = zmk_hid_consumer_release(ev->keycode);
-        if (err < 0) {
-            LOG_ERR("Unable to release keycode");
-            return err;
-        }
+    err = zmk_hid_release(ZMK_HID_USAGE(ev->usage_page, ev->keycode));
+    if (err < 0) {
+        LOG_DBG("Unable to release keycode");
+        return err;
     }
 
     explicit_mods_changed = zmk_hid_unregister_mods(ev->explicit_modifiers);
@@ -104,4 +83,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);