diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/dt-bindings/zmk/keys.h | 22 | ||||
-rw-r--r-- | include/zmk/endpoints.h | 3 | ||||
-rw-r--r-- | include/zmk/hid.h | 93 | ||||
-rw-r--r-- | include/zmk/hog.h | 3 | ||||
-rw-r--r-- | include/zmk/usb_hid.h | 2 |
5 files changed, 112 insertions, 11 deletions
diff --git a/include/dt-bindings/zmk/keys.h b/include/dt-bindings/zmk/keys.h index 027eb92..c91d27b 100644 --- a/include/dt-bindings/zmk/keys.h +++ b/include/dt-bindings/zmk/keys.h @@ -99,10 +99,24 @@ #define KC_RALT 0xE6 #define KC_RGUI 0xE7 -#define ZC_TRNS 0xF0 -#define ZC_NO 0xF1 +#define KC_VOLU 0x80 +#define KC_VOLD 0x81 -#define ZC_CSTM(n) (0xFF + n) +/* The following are select consumer page usages */ + +#define KC_MNXT 0x100 +#define KC_MPRV 0x101 +#define KC_MSTP 0x102 +#define KC_MJCT 0x103 +#define KC_MPLY 0x104 +#define KC_MMUT 0x105 +#define KC_MVLU 0x106 +#define KC_MVLD 0x107 + +#define ZC_TRNS (0xFFFF) +#define ZC_NO (0xFFFF - 1) + +#define ZC_CSTM(n) (0xFFF + n) #define MOD_LCTL (1 << 0x00) #define MOD_LSFT (1 << 0x01) @@ -119,6 +133,8 @@ #define ZK_KEY(a) (a & 0xFFFF) #define ZK_MODS(a) ((a >> 16) & 0xFF) +#define ZK_IS_CONSUMER(k) (ZK_KEY(k) >= 0x100) + #define ZMK_ACTION_KEY 0x01 #define ZMK_ACTION_MOD_TAP 0x01 #define ZMK_ACTION_ONE_SHOT 0x02 diff --git a/include/zmk/endpoints.h b/include/zmk/endpoints.h index 666f00d..255ca54 100644 --- a/include/zmk/endpoints.h +++ b/include/zmk/endpoints.h @@ -1,7 +1,8 @@ #pragma once #include <zmk/keys.h> +#include <zmk/hid.h> int zmk_endpoints_init(); -int zmk_endpoints_send_report(); +int zmk_endpoints_send_report(enum zmk_hid_report_changes changes); int zmk_endpoints_send_key_event(struct zmk_key_event key_event); diff --git a/include/zmk/hid.h b/include/zmk/hid.h index 3767b78..7e3560d 100644 --- a/include/zmk/hid.h +++ b/include/zmk/hid.h @@ -7,6 +7,8 @@ #include <zmk/keys.h> +#define COLLECTION_REPORT 0x03 + #define ZMK_HID_MAX_KEYCODE KC_APP static const u8_t zmk_hid_report_desc[] = { @@ -54,7 +56,7 @@ static const u8_t zmk_hid_report_desc[] = { /* LOGICAL_MINIMUM (0) */ HID_GI_LOGICAL_MIN(1), 0x00, - /* LOGICAL_MAXIMUM (101) */ + /* LOGICAL_MAXIMUM (1) */ HID_GI_LOGICAL_MAX(1), 0x01, /* USAGE_MINIMUM (Reserved) */ @@ -86,6 +88,62 @@ static const u8_t zmk_hid_report_desc[] = { 0x03, /* END_COLLECTION */ HID_MI_COLLECTION_END, + /* USAGE_PAGE (Consumer) */ + HID_GI_USAGE_PAGE, + 0x0C, + /* USAGE (Consumer Control) */ + HID_LI_USAGE, + 0x01, + /* Consumer Page */ + HID_MI_COLLECTION, + COLLECTION_APPLICATION, + /* REPORT ID (1) */ + HID_GI_REPORT_ID, + 0x02, + /* USAGE_PAGE (Consumer) */ + HID_GI_USAGE_PAGE, + 0x0C, + /* LOGICAL_MINIMUM (0) */ + HID_GI_LOGICAL_MIN(1), + 0x00, + /* LOGICAL_MAXIMUM (1) */ + HID_GI_LOGICAL_MAX(1), + 0x01, + /* USAGE (Scan Next Track) */ + HID_LI_USAGE, + 0xB5, + /* USAGE (Scan Previous Track) */ + HID_LI_USAGE, + 0xB6, + /* USAGE (Stop) */ + HID_LI_USAGE, + 0xB7, + /* USAGE (Eject) */ + HID_LI_USAGE, + 0xB8, + /* USAGE (Media Play/Pause) */ + HID_LI_USAGE, + 0xCD, + /* USAGE (Mute) */ + HID_LI_USAGE, + 0xE2, + /* USAGE (Volume Increment) */ + HID_LI_USAGE, + 0xE9, + /* USAGE (Volume Decrement) */ + HID_LI_USAGE, + 0xEA, + /* INPUT (Data,Ary,Abs) */ + /* REPORT_SIZE (1) */ + HID_GI_REPORT_SIZE, + 0x01, + /* REPORT_COUNT (8) */ + HID_GI_REPORT_COUNT, + 0x08, + HID_MI_INPUT, + 0x02, + /* END COLLECTION */ + HID_MI_COLLECTION_END, }; // struct zmk_hid_boot_report @@ -95,17 +153,42 @@ static const u8_t zmk_hid_report_desc[] = { // u8_t keys[6]; // } __packed; -struct zmk_hid_report +struct zmk_hid_keypad_report_body { zmk_mod_flags modifiers; u8_t keys[13]; } __packed; +struct zmk_hid_keypad_report +{ + u8_t report_id; + struct zmk_hid_keypad_report_body body; +} __packed; + +struct zmk_hid_consumer_report_body +{ + u8_t keys; +} __packed; + +struct zmk_hid_consumer_report +{ + u8_t report_id; + struct zmk_hid_consumer_report_body body; +} __packed; + +enum zmk_hid_report_changes +{ + None = 0x00, + Keypad = (0x01 << 0x00), + Consumer = (0x01 << 0x01) +}; + int zmk_hid_register_mod(zmk_mod modifier); int zmk_hid_unregister_mod(zmk_mod modifier); int zmk_hid_register_mods(zmk_mod_flags modifiers); int zmk_hid_unregister_mods(zmk_mod_flags modifiers); -int zmk_hid_press_key(zmk_key key); -int zmk_hid_release_key(zmk_key key); +enum zmk_hid_report_changes zmk_hid_press_key(zmk_key key); +enum zmk_hid_report_changes zmk_hid_release_key(zmk_key key); -struct zmk_hid_report *zmk_hid_get_report(); +struct zmk_hid_keypad_report *zmk_hid_get_keypad_report(); +struct zmk_hid_consumer_report *zmk_hid_get_consumer_report(); diff --git a/include/zmk/hog.h b/include/zmk/hog.h index a48fa98..e2f976a 100644 --- a/include/zmk/hog.h +++ b/include/zmk/hog.h @@ -6,4 +6,5 @@ int zmk_hog_init(); -int zmk_hog_send_report(struct zmk_hid_report *report); +int zmk_hog_send_keypad_report(struct zmk_hid_keypad_report_body *body); +int zmk_hog_send_consumer_report(struct zmk_hid_consumer_report_body *body); diff --git a/include/zmk/usb_hid.h b/include/zmk/usb_hid.h index 893e7e4..5d7c744 100644 --- a/include/zmk/usb_hid.h +++ b/include/zmk/usb_hid.h @@ -9,6 +9,6 @@ int zmk_usb_hid_init(); -int zmk_usb_hid_send_report(const struct zmk_hid_report *report); +int zmk_usb_hid_send_report(u8_t *report, size_t len); #endif |