Align ATSAM HID descriptors with LUFA/ChibiOS (#7651)

* Align ATSAM HID descriptors with LUFA/ChibiOS

* Don't hardcode raw endpoint size

format code according to conventions [skip ci]
This commit is contained in:
fauxpark
2020-02-02 13:10:57 +11:00
committed by Florian Didron
parent 44108e524d
commit 686e501160
+126 -109
View File
@@ -98,30 +98,36 @@ UDC_DESC_STORAGE udi_hid_kbd_report_desc_t udi_hid_kbd_report_desc = {{
0x05, 0x01, // Usage Page (Generic Desktop) 0x05, 0x01, // Usage Page (Generic Desktop)
0x09, 0x06, // Usage (Keyboard) 0x09, 0x06, // Usage (Keyboard)
0xA1, 0x01, // Collection (Application) 0xA1, 0x01, // Collection (Application)
// Modifiers (8 bits)
0x05, 0x07, // Usage Page (Keyboard) 0x05, 0x07, // Usage Page (Keyboard)
0x19, 0xE0, // Usage Minimum (224) 0x19, 0xE0, // Usage Minimum (Keyboard Left Control)
0x29, 0xE7, // Usage Maximum (231) 0x29, 0xE7, // Usage Maximum (Keyboard Right GUI)
0x15, 0x00, // Logical Minimum (0) 0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1) 0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1)
0x95, 0x08, // Report Count (8) 0x95, 0x08, // Report Count (8)
0x75, 0x01, // Report Size (1)
0x81, 0x02, // Input (Data, Variable, Absolute) 0x81, 0x02, // Input (Data, Variable, Absolute)
// Reserved (1 byte)
0x81, 0x01, // Input (Constant) 0x81, 0x01, // Input (Constant)
// Keycodes (6 bytes)
0x19, 0x00, // Usage Minimum (0) 0x19, 0x00, // Usage Minimum (0)
0x29, 0xFF, // Usage Maximum (255) 0x29, 0xFF, // Usage Maximum (255)
0x15, 0x00, // Logical Minimum (0) 0x15, 0x00, // Logical Minimum (0)
0x25, 0xFF, // Logical Maximum (255) 0x25, 0xFF, // Logical Maximum (255)
0x75, 0x08, // Report Size (8)
0x95, 0x06, // Report Count (6) 0x95, 0x06, // Report Count (6)
0x81, 0x00, // Input (Data, Array) 0x75, 0x08, // Report Size (8)
0x81, 0x00, // Input (Data, Array, Absolute)
// Status LEDs (5 bits)
0x05, 0x08, // Usage Page (LED) 0x05, 0x08, // Usage Page (LED)
0x19, 0x01, // Usage Minimum (1) 0x19, 0x01, // Usage Minimum (Num Lock)
0x29, 0x05, // Usage Maximum (5) 0x29, 0x05, // Usage Maximum (Kana)
0x15, 0x00, // Logical Minimum (0) 0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1) 0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1)
0x95, 0x05, // Report Count (5) 0x95, 0x05, // Report Count (5)
0x75, 0x01, // Report Size (1)
0x91, 0x02, // Output (Data, Variable, Absolute) 0x91, 0x02, // Output (Data, Variable, Absolute)
// LED padding (3 bits)
0x95, 0x03, // Report Count (3) 0x95, 0x03, // Report Count (3)
0x91, 0x01, // Output (Constant) 0x91, 0x01, // Output (Constant)
0xC0 // End Collection 0xC0 // End Collection
@@ -231,43 +237,41 @@ static uint8_t udi_hid_nkro_report_trans[UDI_HID_NKRO_REPORT_SIZE];
COMPILER_WORD_ALIGNED COMPILER_WORD_ALIGNED
UDC_DESC_STORAGE udi_hid_nkro_report_desc_t udi_hid_nkro_report_desc = {{ UDC_DESC_STORAGE udi_hid_nkro_report_desc_t udi_hid_nkro_report_desc = {{
0x05, 0x01, // Usage Page (Generic Desktop), 0x05, 0x01, // Usage Page (Generic Desktop)
0x09, 0x06, // Usage (Keyboard), 0x09, 0x06, // Usage (Keyboard)
0xA1, 0x01, // Collection (Application) - Keyboard, 0xA1, 0x01, // Collection (Application)
// Mods // Modifiers (8 bits)
0x75, 0x01, // Report Size (1), 0x05, 0x07, // Usage Page (Keyboard/Keypad)
0x95, 0x08, // Report Count (8), 0x19, 0xE0, // Usage Minimum (Keyboard Left Control)
0x15, 0x00, // Logical Minimum (0), 0x29, 0xE7, // Usage Maximum (Keyboard Right GUI)
0x25, 0x01, // Logical Maximum (1), 0x15, 0x00, // Logical Minimum (0)
0x05, 0x07, // Usage Page (Key Codes), 0x25, 0x01, // Logical Maximum (1)
0x19, 0xE0, // Usage Minimum (224), 0x95, 0x08, // Report Count (8)
0x29, 0xE7, // Usage Maximum (231), 0x75, 0x01, // Report Size (1)
0x81, 0x02, // Input (Data, Variable, Absolute), 0x81, 0x02, // Input (Data, Variable, Absolute)
// Keycodes
0x05, 0x07, // Usage Page (Keyboard/Keypad)
0x19, 0x00, // Usage Minimum (0)
0x29, 0xF7, // Usage Maximum (247)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x95, 0xF8, // Report Count (248)
0x75, 0x01, // Report Size (1)
0x81, 0x02, // Input (Data, Variable, Absolute, Bitfield)
// LED Report // Status LEDs (5 bits)
0x75, 0x01, // Report Size (1), 0x05, 0x08, // Usage Page (LED)
0x95, 0x05, // Report Count (5), 0x19, 0x01, // Usage Minimum (Num Lock)
0x05, 0x08, // Usage Page (LEDs), 0x29, 0x05, // Usage Maximum (Kana)
0x19, 0x01, // Usage Minimum (1), 0x95, 0x05, // Report Count (5)
0x29, 0x05, // Usage Maximum (5), 0x75, 0x01, // Report Size (1)
0x91, 0x02, // Output (Data, Variable, Absolute), 0x91, 0x02, // Output (Data, Variable, Absolute)
// LED padding (3 bits)
// LED Report Padding 0x95, 0x01, // Report Count (1)
0x75, 0x03, // Report Size (3), 0x75, 0x03, // Report Size (3)
0x95, 0x01, // Report Count (1), 0x91, 0x03, // Output (Constant)
0x91, 0x03, // Output (Constant), 0xC0 // End Collection
// Main keys
0x75, 0x01, // Report Size (1),
0x95, 0xF8, // Report Count (248),
0x15, 0x00, // Logical Minimum (0),
0x25, 0x01, // Logical Maximum (1),
0x05, 0x07, // Usage Page (Key Codes),
0x19, 0x00, // Usage Minimum (0),
0x29, 0xF7, // Usage Maximum (247),
0x81, 0x02, // Input (Data, Variable, Absolute, Bitfield),
0xc0, // End Collection - Keyboard
}}; }};
static bool udi_hid_nkro_setreport(void); static bool udi_hid_nkro_setreport(void);
@@ -373,15 +377,18 @@ static uint8_t udi_hid_exk_report_trans[UDI_HID_EXK_REPORT_SIZE];
COMPILER_WORD_ALIGNED COMPILER_WORD_ALIGNED
UDC_DESC_STORAGE udi_hid_exk_report_desc_t udi_hid_exk_report_desc = {{ UDC_DESC_STORAGE udi_hid_exk_report_desc_t udi_hid_exk_report_desc = {{
// clang-format off
0x05, 0x01, // Usage Page (Generic Desktop) 0x05, 0x01, // Usage Page (Generic Desktop)
0x09, 0x80, // Usage (System Control) 0x09, 0x80, // Usage (System Control)
0xA1, 0x01, // Collection (Application) 0xA1, 0x01, // Collection (Application)
0x85, REPORT_ID_SYSTEM, // Report ID 0x85, REPORT_ID_SYSTEM, // Report ID
0x19, 0x01, // Usage Minimum (Pointer) 0x1A, 0x81,
0x2A, 0xB7, 0x00, // Usage Maximum (System Display LCD Autoscale) 0x00, // Usage Minimum (81) (System Power Down)
0x15, 0x01, // Logical Minimum 0x2A, 0x83,
0x26, 0xB7, 0x00, // Logical Maximum 0x00, // Usage Maximum (83) (System Wake Up)
0x16, 0x01,
0x00, // Logical Minimum (1)
0x26, 0x03,
0x00, // Logical Maximum (3)
0x95, 0x01, // Report Count (1) 0x95, 0x01, // Report Count (1)
0x75, 0x10, // Report Size (16) 0x75, 0x10, // Report Size (16)
0x81, 0x00, // Input (Data, Array, Absolute) 0x81, 0x00, // Input (Data, Array, Absolute)
@@ -391,15 +398,18 @@ UDC_DESC_STORAGE udi_hid_exk_report_desc_t udi_hid_exk_report_desc = {{
0x09, 0x01, // Usage (Consumer Control) 0x09, 0x01, // Usage (Consumer Control)
0xA1, 0x01, // Collection (Application) 0xA1, 0x01, // Collection (Application)
0x85, REPORT_ID_CONSUMER, // Report ID 0x85, REPORT_ID_CONSUMER, // Report ID
0x19, 0x01, // Usage Minimum (Consumer Control) 0x1A, 0x01,
0x2A, 0xA0, 0x02, // Usage Maximum (AC Desktop Show All Applications) 0x00, // Usage Minimum (Consumer Control)
0x15, 0x01, // Logical Minimum 0x2A, 0x9C,
0x26, 0xA0, 0x02, // Logical Maximum 0x02, // Usage Maximum (AC Distribute Vertically)
0x16, 0x01,
0x00, // Logical Minimum
0x26, 0x9C,
0x02, // Logical Maximum
0x95, 0x01, // Report Count (1) 0x95, 0x01, // Report Count (1)
0x75, 0x10, // Report Size (16) 0x75, 0x10, // Report Size (16)
0x81, 0x00, // Input (Data, Array, Absolute) 0x81, 0x00, // Input (Data, Array, Absolute)
0xC0 // End Collection 0xC0 // End Collection
//clang-format on
}}; }};
static bool udi_hid_exk_setreport(void); static bool udi_hid_exk_setreport(void);
@@ -504,49 +514,53 @@ static uint8_t udi_hid_mou_report_trans[UDI_HID_MOU_REPORT_SIZE];
COMPILER_WORD_ALIGNED COMPILER_WORD_ALIGNED
UDC_DESC_STORAGE udi_hid_mou_report_desc_t udi_hid_mou_report_desc = {{ UDC_DESC_STORAGE udi_hid_mou_report_desc_t udi_hid_mou_report_desc = {{
0x05, 0x01, // Usage Page (Generic Desktop), 0x05, 0x01, // Usage Page (Generic Desktop)
0x09, 0x02, // Usage (Mouse), 0x09, 0x02, // Usage (Mouse)
0xA1, 0x01, // Collection (Application), 0xA1, 0x01, // Collection (Application)
0x09, 0x01, // Usage (Pointer), 0x09, 0x01, // Usage (Pointer)
0xA1, 0x00, // Collection (Physical), 0xA1, 0x00, // Collection (Physical)
0x05, 0x09, // Usage Page (Buttons), // Buttons (5 bits)
0x19, 0x01, // Usage Minimum (01), 0x05, 0x09, // Usage Page (Button)
0x29, 0x05, // Usage Maximun (05), 0x19, 0x01, // Usage Minimum (Button 1)
0x15, 0x00, // Logical Minimum (0), 0x29, 0x05, // Usage Maximun (Button 5)
0x25, 0x01, // Logical Maximum (1), 0x15, 0x00, // Logical Minimum (0)
0x95, 0x05, // Report Count (5), 0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1), 0x95, 0x05, // Report Count (5)
0x81, 0x02, // Input (Data, Variable, Absolute), ;5 button bits 0x75, 0x01, // Report Size (1)
0x95, 0x01, // Report Count (1), 0x81, 0x02, // Input (Data, Variable, Absolute)
0x75, 0x03, // Report Size (3), // Button padding (3 bits)
0x81, 0x01, // Input (Constant), ;3 bit padding, 0x95, 0x01, // Report Count (1)
0x75, 0x03, // Report Size (3)
0x81, 0x01, // Input (Constant)
0x05, 0x01, // Usage Page (Generic Desktop), // X/Y position (2 bytes)
0x09, 0x30, // Usage (X), 0x05, 0x01, // Usage Page (Generic Desktop)
0x09, 0x31, // Usage (Y), 0x09, 0x30, // Usage (X)
0x15, 0x81, // Logical Minimum (-127), 0x09, 0x31, // Usage (Y)
0x25, 0x7F, // Logical Maximum (127), 0x15, 0x81, // Logical Minimum (-127)
0x95, 0x02, // Report Count (2), 0x25, 0x7F, // Logical Maximum (127)
0x75, 0x08, // Report Size (8), 0x95, 0x02, // Report Count (2)
0x81, 0x06, // Input (Data, Variable, Relative), ;2 position bytes (X & Y), 0x75, 0x08, // Report Size (8)
0x81, 0x06, // Input (Data, Variable, Relative)
0x09, 0x38, // Usage (Wheel), // Vertical wheel (1 byte)
0x15, 0x81, // Logical Minimum (-127), 0x09, 0x38, // Usage (Wheel)
0x25, 0x7F, // Logical Maximum (127), 0x15, 0x81, // Logical Minimum (-127)
0x95, 0x01, // Report Count (1), 0x25, 0x7F, // Logical Maximum (127)
0x75, 0x08, // Report Size (8), 0x95, 0x01, // Report Count (1)
0x81, 0x06, // Input (Data, Variable, Relative), 0x75, 0x08, // Report Size (8)
0x81, 0x06, // Input (Data, Variable, Relative)
0x05, 0x0C, // Usage Page (Consumer), // Horizontal wheel (1 byte)
0x0A, 0x38, 0x02, // Usage (AC Pan (Horizontal wheel)), 0x05, 0x0C, // Usage Page (Consumer)
0x15, 0x81, // Logical Minimum (-127), 0x0A, 0x38, 0x02, // Usage (AC Pan)
0x25, 0x7F, // Logical Maximum (127), 0x15, 0x81, // Logical Minimum (-127)
0x95, 0x01, // Report Count (1), 0x25, 0x7F, // Logical Maximum (127)
0x75, 0x08, // Report Size (8), 0x95, 0x01, // Report Count (1)
0x81, 0x06, // Input (Data, Variable, Relative), 0x75, 0x08, // Report Size (8)
0x81, 0x06, // Input (Data, Variable, Relative)
0xC0, // End Collection,
0xC0, // End Collection 0xC0, // End Collection
0xC0 // End Collection
}}; }};
static void udi_hid_mou_report_sent(udd_ep_status_t status, iram_size_t nb_sent, udd_ep_id_t ep); static void udi_hid_mou_report_sent(udd_ep_status_t status, iram_size_t nb_sent, udd_ep_id_t ep);
@@ -634,20 +648,21 @@ static uint8_t udi_hid_raw_report_trans[UDI_HID_RAW_REPORT_SIZE];
COMPILER_WORD_ALIGNED COMPILER_WORD_ALIGNED
UDC_DESC_STORAGE udi_hid_raw_report_desc_t udi_hid_raw_report_desc = {{ UDC_DESC_STORAGE udi_hid_raw_report_desc_t udi_hid_raw_report_desc = {{
0x06, // Usage Page (Vendor Defined) 0x06, 0x60, 0xFF, // Usage Page (Vendor Defined)
0xFF, 0xFF, 0x09, 0x61, // Usage (Vendor Defined)
0x0A, // Usage (Mouse) 0xA1, 0x01, // Collection (Application)
0xFF, 0xFF, 0xA1, 0x01, // Collection (Application)
0x75, 0x08, // Report Size (8) 0x75, 0x08, // Report Size (8)
0x15, 0x00, // Logical Minimum (0) 0x15, 0x00, // Logical Minimum (0)
0x25, 0xFF, // Logical Maximum (255) 0x25, 0xFF, // Logical Maximum (255)
0x95, 0x40, // Report Count // Data to host
0x09, 0x01, // Usage (Input) 0x09, 0x62, // Usage (Vendor Defined)
0x81, 0x02, // Input (Data 0x95, RAW_EPSIZE, // Report Count
0x95, 0x40, // Report Count 0x81, 0x02, // Input (Data, Variable, Absolute)
0x09, 0x02, // Usage (Output) // Data from host
0x91, 0x02, // Output (Data 0x09, 0x63, // Usage (Vendor Defined)
0xC0, // End Collection - Consumer Control 0x95, RAW_EPSIZE, // Report Count
0x91, 0x02, // Output (Data, Variable, Absolute)
0xC0 // End Collection
}}; }};
static bool udi_hid_raw_setreport(void); static bool udi_hid_raw_setreport(void);
@@ -751,22 +766,24 @@ static uint8_t udi_hid_con_report_trans[UDI_HID_CON_REPORT_SIZE];
COMPILER_WORD_ALIGNED COMPILER_WORD_ALIGNED
UDC_DESC_STORAGE udi_hid_con_report_desc_t udi_hid_con_report_desc = {{ UDC_DESC_STORAGE udi_hid_con_report_desc_t udi_hid_con_report_desc = {{
0x06, 0x31, 0xFF, // Vendor Page (PJRC Teensy compatible) 0x06, 0x31, 0xFF, // Usage Page (Vendor Defined - PJRC Teensy compatible)
0x09, 0x74, // Vendor Usage (PJRC Teensy compatible) 0x09, 0x74, // Usage (Vendor Defined - PJRC Teensy compatible)
0xA1, 0x01, // Collection (Application) 0xA1, 0x01, // Collection (Application)
0x09, 0x75, // Usage (Vendor) // Data to host
0x09, 0x75, // Usage (Vendor Defined)
0x15, 0x00, // Logical Minimum (0x00) 0x15, 0x00, // Logical Minimum (0x00)
0x26, 0xFF, 0x00, // Logical Maximum (0x00FF) 0x26, 0xFF, 0x00, // Logical Maximum (0x00FF)
0x95, CONSOLE_EPSIZE, // Report Count 0x95, CONSOLE_EPSIZE, // Report Count
0x75, 0x08, // Report Size (8) 0x75, 0x08, // Report Size (8)
0x81, 0x02, // Input (Data) 0x81, 0x02, // Input (Data, Variable, Absolute)
0x09, 0x76, // Usage (Vendor) // Data from host
0x09, 0x76, // Usage (Vendor Defined)
0x15, 0x00, // Logical Minimum (0x00) 0x15, 0x00, // Logical Minimum (0x00)
0x26, 0xFF, 0x00, // Logical Maximum (0x00FF) 0x26, 0xFF, 0x00, // Logical Maximum (0x00FF)
0x95, CONSOLE_EPSIZE, // Report Count 0x95, CONSOLE_EPSIZE, // Report Count
0x75, 0x08, // Report Size (8) 0x75, 0x08, // Report Size (8)
0x91, 0x02, // Output (Data) 0x91, 0x02, // Output (Data)
0xC0, // End Collection 0xC0 // End Collection
}}; }};
static bool udi_hid_con_setreport(void); static bool udi_hid_con_setreport(void);