summaryrefslogtreecommitdiff
path: root/app/src/hid.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/hid.c')
-rw-r--r--app/src/hid.c78
1 files changed, 42 insertions, 36 deletions
diff --git a/app/src/hid.c b/app/src/hid.c
index b3d47cf..ca04056 100644
--- a/app/src/hid.c
+++ b/app/src/hid.c
@@ -12,7 +12,7 @@ static struct zmk_hid_keypad_report kp_report = {
static struct zmk_hid_consumer_report consumer_report = {
.report_id = 2,
.body = {
- .keys = 0x00}};
+ .keys = {0,0,0,0,0,0}}};
#define _TOGGLE_MOD(mod, state) \
if (modifier > MOD_RGUI) \
@@ -61,62 +61,68 @@ int zmk_hid_unregister_mods(zmk_mod_flags modifiers)
#define TOGGLE_KEY(code, val) WRITE_BIT(kp_report.body.keys[code / 8], code % 8, val)
-#define TOGGLE_CONSUMER(key, state) \
- WRITE_BIT(consumer_report.body.keys, (key - 0x100), state);
+#define TOGGLE_CONSUMER(match, val) \
+ for (int idx = 0; idx < MAX_KEYS; idx++) \
+ { \
+ if (consumer_report.body.keys[idx] != match) \
+ { \
+ continue; \
+ } \
+ consumer_report.body.keys[idx] = val; \
+ break; \
+ }
+
-enum zmk_hid_report_changes zmk_hid_press_key(zmk_key code)
+int zmk_hid_keypad_press(zmk_key code)
{
- if (code >= KC_LCTL && code <= KC_RGUI)
+ if (code >= LCTL && code <= RGUI)
{
- return zmk_hid_register_mod(code - KC_LCTL);
+ return zmk_hid_register_mod(code - LCTL);
}
- if (ZK_IS_CONSUMER(code))
+
+ if (code > ZMK_HID_MAX_KEYCODE)
{
- LOG_DBG("Toggling a consumer key!");
- TOGGLE_CONSUMER(code, true);
- return Consumer;
+ return -EINVAL;
}
- else
- {
- if (code > ZMK_HID_MAX_KEYCODE)
- {
- return -EINVAL;
- }
- // TOGGLE_BOOT_KEY(0U, code);
+ // TOGGLE_BOOT_KEY(0U, code);
- TOGGLE_KEY(code, true);
+ TOGGLE_KEY(code, true);
- return Keypad;
- }
+ return 0;
};
-enum zmk_hid_report_changes zmk_hid_release_key(zmk_key code)
+int zmk_hid_keypad_release(zmk_key code)
{
- if (code >= KC_LCTL && code <= KC_RGUI)
+ if (code >= LCTL && code <= RGUI)
{
- return zmk_hid_unregister_mod(code - KC_LCTL);
+ return zmk_hid_unregister_mod(code - LCTL);
}
- if (ZK_IS_CONSUMER(code))
+ if (code > ZMK_HID_MAX_KEYCODE)
{
- TOGGLE_CONSUMER(code, false);
- return Consumer;
+ return -EINVAL;
}
- else
- {
- if (code > ZMK_HID_MAX_KEYCODE)
- {
- return -EINVAL;
- }
- // TOGGLE_BOOT_KEY(0U, code);
+ // TOGGLE_BOOT_KEY(0U, code);
- TOGGLE_KEY(code, false);
+ TOGGLE_KEY(code, false);
- return Keypad;
- }
+ return 0;
+};
+
+int zmk_hid_consumer_press(zmk_key code)
+{
+ TOGGLE_CONSUMER(0U, code);
+ return 0;
+};
+
+
+int zmk_hid_consumer_release(zmk_key code)
+{
+ TOGGLE_CONSUMER(code, 0U);
+ return 0;
};
struct zmk_hid_keypad_report *zmk_hid_get_keypad_report()