From 4d08f97edda39c6fccad097d252d9cca7f63b4f5 Mon Sep 17 00:00:00 2001 From: krikun98 Date: Mon, 3 May 2021 12:32:36 +0300 Subject: [PATCH] Report refactor (added macros) --- app/include/dt-bindings/zmk/hid_usage_pages.h | 1 + app/include/zmk/hid.h | 232 +++++++++++++----- 2 files changed, 168 insertions(+), 65 deletions(-) diff --git a/app/include/dt-bindings/zmk/hid_usage_pages.h b/app/include/dt-bindings/zmk/hid_usage_pages.h index f38f4fd3..e3946867 100644 --- a/app/include/dt-bindings/zmk/hid_usage_pages.h +++ b/app/include/dt-bindings/zmk/hid_usage_pages.h @@ -26,6 +26,7 @@ #define HID_USAGE_GDV (0x06) // Generic Device Controls #define HID_USAGE_KEY (0x07) // Keyboard/Keypad #define HID_USAGE_LED (0x08) // LED +#define HID_USAGE_BUTTON (0x09) // Button #define HID_USAGE_TELEPHONY (0x0B) // Telephony Device #define HID_USAGE_CONSUMER (0x0C) // Consumer #define HID_USAGE_DIGITIZERS (0x0D) // Digitizers diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h index 3f4a6712..bfa87f58 100644 --- a/app/include/zmk/hid.h +++ b/app/include/zmk/hid.h @@ -14,45 +14,59 @@ #include #include -#define ZMK_HID_KEYBOARD_NKRO_MAX_USAGE HID_USAGE_KEY_KEYPAD_EQUAL - #define COLLECTION_REPORT 0x03 static const uint8_t zmk_hid_report_desc[] = { /* USAGE_PAGE (Generic Desktop) */ - HID_GI_USAGE_PAGE, HID_USAGE_GD, + HID_GI_USAGE_PAGE, + HID_USAGE_GD, /* USAGE (Keyboard) */ - HID_LI_USAGE, HID_USAGE_GD_KEYBOARD, + HID_LI_USAGE, + HID_USAGE_GD_KEYBOARD, /* COLLECTION (Application) */ - HID_MI_COLLECTION, COLLECTION_APPLICATION, + HID_MI_COLLECTION, + COLLECTION_APPLICATION, /* REPORT ID (1) */ - HID_GI_REPORT_ID, 0x01, + HID_GI_REPORT_ID, + 0x01, /* USAGE_PAGE (Keyboard/Keypad) */ - HID_GI_USAGE_PAGE, HID_USAGE_KEY, + HID_GI_USAGE_PAGE, + HID_USAGE_KEY, /* USAGE_MINIMUM (Keyboard LeftControl) */ - HID_LI_USAGE_MIN(1), HID_USAGE_KEY_KEYBOARD_LEFTCONTROL, + HID_LI_USAGE_MIN(1), + HID_USAGE_KEY_KEYBOARD_LEFTCONTROL, /* USAGE_MAXIMUM (Keyboard Right GUI) */ - HID_LI_USAGE_MAX(1), HID_USAGE_KEY_KEYBOARD_RIGHT_GUI, + HID_LI_USAGE_MAX(1), + HID_USAGE_KEY_KEYBOARD_RIGHT_GUI, /* LOGICAL_MINIMUM (0) */ - HID_GI_LOGICAL_MIN(1), 0x00, + HID_GI_LOGICAL_MIN(1), + 0x00, /* LOGICAL_MAXIMUM (1) */ - HID_GI_LOGICAL_MAX(1), 0x01, + HID_GI_LOGICAL_MAX(1), + 0x01, /* REPORT_SIZE (1) */ - HID_GI_REPORT_SIZE, 0x01, + HID_GI_REPORT_SIZE, + 0x01, /* REPORT_COUNT (8) */ - HID_GI_REPORT_COUNT, 0x08, + HID_GI_REPORT_COUNT, + 0x08, /* INPUT (Data,Var,Abs) */ - HID_MI_INPUT, 0x02, + HID_MI_INPUT, + 0x02, /* USAGE_PAGE (Keyboard/Keypad) */ - HID_GI_USAGE_PAGE, HID_USAGE_KEY, + HID_GI_USAGE_PAGE, + HID_USAGE_KEY, /* REPORT_SIZE (8) */ - HID_GI_REPORT_SIZE, 0x08, + HID_GI_REPORT_SIZE, + 0x08, /* REPORT_COUNT (1) */ - HID_GI_REPORT_COUNT, 0x01, + HID_GI_REPORT_COUNT, + 0x01, /* INPUT (Cnst,Var,Abs) */ - HID_MI_INPUT, 0x03, + HID_MI_INPUT, + 0x03, /* USAGE_PAGE (Keyboard/Keypad) */ HID_GI_USAGE_PAGE, @@ -82,13 +96,17 @@ static const uint8_t zmk_hid_report_desc[] = { 0x02, #elif IS_ENABLED(CONFIG_ZMK_HID_REPORT_TYPE_HKRO) /* LOGICAL_MINIMUM (0) */ - HID_GI_LOGICAL_MIN(1), 0x00, + HID_GI_LOGICAL_MIN(1), + 0x00, /* LOGICAL_MAXIMUM (0xFF) */ - HID_GI_LOGICAL_MAX(1), 0xFF, + HID_GI_LOGICAL_MAX(1), + 0xFF, /* USAGE_MINIMUM (Reserved) */ - HID_LI_USAGE_MIN(1), 0x00, + HID_LI_USAGE_MIN(1), + 0x00, /* USAGE_MAXIMUM (Keyboard Application) */ - HID_LI_USAGE_MAX(1), 0xFF, + HID_LI_USAGE_MAX(1), + 0xFF, /* REPORT_SIZE (1) */ HID_GI_REPORT_SIZE, 0x08, @@ -105,13 +123,17 @@ static const uint8_t zmk_hid_report_desc[] = { /* END_COLLECTION */ HID_MI_COLLECTION_END, /* USAGE_PAGE (Consumer) */ - HID_GI_USAGE_PAGE, HID_USAGE_CONSUMER, + HID_GI_USAGE_PAGE, + HID_USAGE_CONSUMER, /* USAGE (Consumer Control) */ - HID_LI_USAGE, HID_USAGE_CONSUMER_CONSUMER_CONTROL, + HID_LI_USAGE, + HID_USAGE_CONSUMER_CONSUMER_CONTROL, /* Consumer Page */ - HID_MI_COLLECTION, COLLECTION_APPLICATION, + HID_MI_COLLECTION, + COLLECTION_APPLICATION, /* REPORT ID (1) */ - HID_GI_REPORT_ID, 0x02, + HID_GI_REPORT_ID, + 0x02, /* USAGE_PAGE (Consumer) */ HID_GI_USAGE_PAGE, HID_USAGE_CONSUMER, @@ -136,11 +158,18 @@ static const uint8_t zmk_hid_report_desc[] = { 0x08, #elif IS_ENABLED(CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_FULL) /* LOGICAL_MINIMUM (0) */ - HID_GI_LOGICAL_MIN(1), 0x00, + HID_GI_LOGICAL_MIN(1), + 0x00, /* LOGICAL_MAXIMUM (0xFFFF) */ - HID_GI_LOGICAL_MAX(2), 0xFF, 0xFF, HID_LI_USAGE_MIN(1), 0x00, + HID_GI_LOGICAL_MAX(2), + 0xFF, + 0xFF, + HID_LI_USAGE_MIN(1), + 0x00, /* USAGE_MAXIMUM (0xFFFF) */ - HID_LI_USAGE_MAX(2), 0xFF, 0xFF, + HID_LI_USAGE_MAX(2), + 0xFF, + 0xFF, /* INPUT (Data,Ary,Abs) */ /* REPORT_SIZE (16) */ HID_GI_REPORT_SIZE, @@ -156,42 +185,115 @@ static const uint8_t zmk_hid_report_desc[] = { /* END COLLECTION */ HID_MI_COLLECTION_END, - 0x05, 0x01, /* Usage Page (Generic Desktop Ctrls) */ - 0x09, 0x02, /* Usage (Mouse) */ - 0xA1, 0x01, /* Collection (Application) */ - 0x85, 0x04, /* Report ID (4) */ - 0x09, 0x01, /* Usage (Pointer) */ - 0xA1, 0x00, /* Collection (Physical) */ - 0x05, 0x09, /* Usage Page (Button) */ - 0x19, 0x01, /* Usage Minimum (0x01) */ - 0x29, 0x10, /* Usage Maximum (0x10) */ - 0x15, 0x00, /* Logical Minimum (0) */ - 0x25, 0x01, /* Logical Maximum (1) */ - 0x95, 0x10, /* Report Count (16) */ - 0x75, 0x01, /* Report Size (1) */ - 0x81, 0x02, /* Input (Data,Var,Abs,No Wrap,Linear,...) */ - 0x05, 0x01, /* Usage Page (Generic Desktop Ctrls) */ - 0x16, 0x01, 0x80, /* Logical Minimum (-32767) */ - 0x26, 0xFF, 0x7F, /* Logical Maximum (32767) */ - 0x75, 0x10, /* Report Size (8) */ - 0x95, 0x02, /* Report Count (2) */ - 0x09, 0x30, /* Usage (X) */ - 0x09, 0x31, /* Usage (Y) */ - 0x81, 0x06, /* Input (Data,Var,Rel,No Wrap,Linear,...) */ - 0x15, 0x81, /* Logical Minimum (-127) */ - 0x25, 0x7F, /* Logical Maximum (127) */ - 0x75, 0x08, /* Report Count (8) */ - 0x95, 0x01, /* Report Size (1) */ - 0x09, 0x38, /* Usage (Wheel) */ - 0x81, 0x06, /* Input (Data,Var,Rel,No Wrap,Linear,...) */ - 0x05, 0x0C, /* Usage Page (Consumer) */ // Horizontal wheel - 0x0A, 0x38, 0x02, /* Usage (AC Pan) */ - 0x15, 0x81, /* Logical Minimum (-127) */ - 0x25, 0x7f, /* Logical Maximum (127) */ - 0x95, 0x01, /* Report Count (1) */ - 0x81, 0x06, /* Input (Data,Var,Rel,No Wrap,Linear,...) */ - 0xC0, /* End Collection */ - 0xC0, /* End Collection */ + /* USAGE_PAGE (Generic Desktop) */ + HID_GI_USAGE_PAGE, + HID_USAGE_GD, + /* USAGE (Mouse) */ + HID_LI_USAGE, + HID_USAGE_GD_MOUSE, + /* COLLECTION (Application) */ + HID_MI_COLLECTION, + COLLECTION_APPLICATION, + /* REPORT ID (4) */ + HID_GI_REPORT_ID, + 0x04, + /* USAGE (Pointer) */ + HID_LI_USAGE, + HID_USAGE_GD_POINTER, + /* COLLECTION (Physical) */ + HID_MI_COLLECTION, + COLLECTION_PHYSICAL, + /* USAGE_PAGE (Button) */ + HID_GI_USAGE_PAGE, + HID_USAGE_BUTTON, + /* USAGE_MINIMUM (0x1) (button 1?) */ + HID_LI_USAGE_MIN(1), + 0x1, + /* USAGE_MAXIMUM (0x10) (button 5? Buttons up to 8 still work) */ + HID_LI_USAGE_MAX(1), + 0x10, + /* LOGICAL_MINIMUM (0) */ + HID_GI_LOGICAL_MIN(1), + 0x00, + /* LOGICAL_MAXIMUM (1) */ + HID_GI_LOGICAL_MAX(1), + 0x01, + /* REPORT_SIZE (1) */ + HID_GI_REPORT_SIZE, + 0x01, + /* REPORT_COUNT (16) */ + HID_GI_REPORT_COUNT, + 0x10, + /* INPUT (Data,Var,Abs) */ + HID_MI_INPUT, + 0x02, + /* USAGE_PAGE (Generic Desktop) */ + HID_GI_USAGE_PAGE, + HID_USAGE_GD, + /* LOGICAL_MINIMUM (-32767) */ + HID_GI_LOGICAL_MIN(2), + 0x01, + 0x80, + /* LOGICAL_MAXIMUM (32767) */ + HID_GI_LOGICAL_MAX(2), + 0xFF, + 0x7F, + /* REPORT_SIZE (16) */ + HID_GI_REPORT_SIZE, + 0x10, + /* REPORT_COUNT (2) */ + HID_GI_REPORT_COUNT, + 0x02, + /* USAGE (X) */ + HID_LI_USAGE, + HID_USAGE_GD_X, + /* USAGE (Y) */ + HID_LI_USAGE, + HID_USAGE_GD_Y, + /* Input (Data,Var,Rel) */ + HID_MI_INPUT, + 0x06, + /* LOGICAL_MINIMUM (-127) */ + HID_GI_LOGICAL_MIN(1), + 0x81, + /* LOGICAL_MAXIMUM (127) */ + HID_GI_LOGICAL_MAX(1), + 0x7F, + /* REPORT_SIZE (8) */ + HID_GI_REPORT_SIZE, + 0x08, + /* REPORT_COUNT (1) */ + HID_GI_REPORT_COUNT, + 0x01, + /* USAGE (Wheel) */ + HID_LI_USAGE, + HID_USAGE_GD_WHEEL, + /* Input (Data,Var,Rel) */ + HID_MI_INPUT, + 0x06, + /* USAGE_PAGE (Consumer) */ // Horizontal wheel + HID_GI_USAGE_PAGE, + HID_USAGE_CONSUMER, + /* USAGE (AC Pan) */ + 0x0A, + 0x38, + 0x02, + /* LOGICAL_MINIMUM (-127) */ + HID_GI_LOGICAL_MIN(1), + 0x81, + /* LOGICAL_MAXIMUM (127) */ + HID_GI_LOGICAL_MAX(1), + 0x7F, + /* REPORT_COUNT (1) */ + HID_GI_REPORT_COUNT, + 0x01, + /* Input (Data,Var,Rel) */ + HID_MI_INPUT, + 0x06, + /* END COLLECTION */ + HID_MI_COLLECTION_END, + /* END COLLECTION */ + HID_MI_COLLECTION_END, }; // struct zmk_hid_boot_report