refactor(hid): Move hid logic into hid.c
Move the logic for picking the correct hid function into hid.c.
This commit is contained in:
parent
4ef11ac4aa
commit
131d001e8d
3 changed files with 33 additions and 30 deletions
|
@ -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_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_press(zmk_mod_flags_t implicit_modifiers);
|
||||||
int zmk_hid_implicit_modifiers_release();
|
int zmk_hid_implicit_modifiers_release();
|
||||||
|
|
||||||
int zmk_hid_keyboard_press(zmk_key_t key);
|
int zmk_hid_keyboard_press(zmk_key_t key);
|
||||||
int zmk_hid_keyboard_release(zmk_key_t key);
|
int zmk_hid_keyboard_release(zmk_key_t key);
|
||||||
void zmk_hid_keyboard_clear();
|
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);
|
int zmk_hid_consumer_release(zmk_key_t key);
|
||||||
void zmk_hid_consumer_clear();
|
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_keyboard_report *zmk_hid_get_keyboard_report();
|
||||||
struct zmk_hid_consumer_report *zmk_hid_get_consumer_report();
|
struct zmk_hid_consumer_report *zmk_hid_get_consumer_report();
|
||||||
|
|
|
@ -129,6 +129,26 @@ int zmk_hid_consumer_release(zmk_key_t code) {
|
||||||
return 0;
|
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)); }
|
void zmk_hid_consumer_clear() { memset(&consumer_report.body, 0, sizeof(consumer_report.body)); }
|
||||||
|
|
||||||
struct zmk_hid_keyboard_report *zmk_hid_get_keyboard_report() {
|
struct zmk_hid_keyboard_report *zmk_hid_get_keyboard_report() {
|
||||||
|
|
|
@ -20,22 +20,11 @@ static int hid_listener_keycode_pressed(const struct zmk_keycode_state_changed *
|
||||||
int err;
|
int err;
|
||||||
LOG_DBG("usage_page 0x%02X keycode 0x%02X implicit_mods 0x%02X explicit_mods 0x%02X",
|
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);
|
ev->usage_page, ev->keycode, ev->implicit_modifiers, ev->explicit_modifiers);
|
||||||
switch (ev->usage_page) {
|
err = zmk_hid_press(ev->usage_page, ev->keycode);
|
||||||
case HID_USAGE_KEY:
|
|
||||||
err = zmk_hid_keyboard_press(ev->keycode);
|
|
||||||
if (err) {
|
if (err) {
|
||||||
LOG_ERR("Unable to press keycode");
|
LOG_DBG("Unable to press keycode");
|
||||||
return err;
|
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;
|
|
||||||
}
|
|
||||||
zmk_hid_register_mods(ev->explicit_modifiers);
|
zmk_hid_register_mods(ev->explicit_modifiers);
|
||||||
zmk_hid_implicit_modifiers_press(ev->implicit_modifiers);
|
zmk_hid_implicit_modifiers_press(ev->implicit_modifiers);
|
||||||
return zmk_endpoints_send_report(ev->usage_page);
|
return zmk_endpoints_send_report(ev->usage_page);
|
||||||
|
@ -45,21 +34,11 @@ static int hid_listener_keycode_released(const struct zmk_keycode_state_changed
|
||||||
int err;
|
int err;
|
||||||
LOG_DBG("usage_page 0x%02X keycode 0x%02X implicit_mods 0x%02X explicit_mods 0x%02X",
|
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);
|
ev->usage_page, ev->keycode, ev->implicit_modifiers, ev->explicit_modifiers);
|
||||||
switch (ev->usage_page) {
|
err = zmk_hid_release(ev->usage_page, ev->keycode);
|
||||||
case HID_USAGE_KEY:
|
|
||||||
err = zmk_hid_keyboard_release(ev->keycode);
|
|
||||||
if (err) {
|
if (err) {
|
||||||
LOG_ERR("Unable to release keycode");
|
LOG_DBG("Unable to release keycode");
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
case HID_USAGE_CONSUMER:
|
|
||||||
err = zmk_hid_consumer_release(ev->keycode);
|
|
||||||
if (err) {
|
|
||||||
LOG_ERR("Unable to release keycode");
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
zmk_hid_unregister_mods(ev->explicit_modifiers);
|
zmk_hid_unregister_mods(ev->explicit_modifiers);
|
||||||
// There is a minor issue with this code.
|
// There is a minor issue with this code.
|
||||||
// If LC(A) is pressed, then LS(B), then LC(A) is released, the shift for B will be released
|
// If LC(A) is pressed, then LS(B), then LC(A) is released, the shift for B will be released
|
||||||
|
|
Loading…
Add table
Reference in a new issue