Align ATSAM HID descriptors with LUFA/ChibiOS (#7651)
* Align ATSAM HID descriptors with LUFA/ChibiOS * Don't hardcode raw endpoint size
This commit is contained in:
parent
1a79f14e43
commit
e036b94a21
|
@ -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,35 +377,31 @@ 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 = {{
|
||||||
// System Control Collection (8 bits)
|
0x05, 0x01, // Usage Page (Generic Desktop)
|
||||||
|
0x09, 0x80, // Usage (System Control)
|
||||||
|
0xA1, 0x01, // Collection (Application)
|
||||||
|
0x85, REPORT_ID_SYSTEM, // Report ID
|
||||||
|
0x1A, 0x81, 0x00, // Usage Minimum (81) (System Power Down)
|
||||||
|
0x2A, 0x83, 0x00, // Usage Maximum (83) (System Wake Up)
|
||||||
|
0x16, 0x01, 0x00, // Logical Minimum (1)
|
||||||
|
0x26, 0x03, 0x00, // Logical Maximum (3)
|
||||||
|
0x95, 0x01, // Report Count (1)
|
||||||
|
0x75, 0x10, // Report Size (16)
|
||||||
|
0x81, 0x00, // Input (Data, Array, Absolute)
|
||||||
|
0xC0, // End Collection
|
||||||
|
|
||||||
0x05, 0x01, // Usage Page (Generic Desktop),
|
0x05, 0x0C, // Usage Page (Consumer)
|
||||||
0x09, 0x80, // Usage (System Control),
|
0x09, 0x01, // Usage (Consumer Control)
|
||||||
0xA1, 0x01, // Collection (Application),
|
0xA1, 0x01, // Collection (Application)
|
||||||
0x85, REPORT_ID_SYSTEM, // Report ID (2) (System),
|
0x85, REPORT_ID_CONSUMER, // Report ID
|
||||||
0x16, 0x01, 0x00, // Logical Minimum (1),
|
0x1A, 0x01, 0x00, // Usage Minimum (Consumer Control)
|
||||||
0x26, 0x03, 0x00, // Logical Maximum (3),
|
0x2A, 0x9C, 0x02, // Usage Maximum (AC Distribute Vertically)
|
||||||
0x1A, 0x81, 0x00, // Usage Minimum (81) (System Power Down),
|
0x16, 0x01, 0x00, // Logical Minimum
|
||||||
0x2A, 0x83, 0x00, // Usage Maximum (83) (System Wake Up),
|
0x26, 0x9C, 0x02, // Logical Maximum
|
||||||
0x75, 0x10, // Report Size (16),
|
0x95, 0x01, // Report Count (1)
|
||||||
0x95, 0x01, // Report Count (1),
|
0x75, 0x10, // Report Size (16)
|
||||||
0x81, 0x00, // Input (Data, Array),
|
0x81, 0x00, // Input (Data, Array, Absolute)
|
||||||
0xC0, // End Collection - System Control
|
0xC0 // End Collection
|
||||||
|
|
||||||
// Consumer Control Collection - Media Keys (16 bits)
|
|
||||||
|
|
||||||
0x05, 0x0C, // Usage Page (Consumer),
|
|
||||||
0x09, 0x01, // Usage (Consumer Control),
|
|
||||||
0xA1, 0x01, // Collection (Application),
|
|
||||||
0x85, REPORT_ID_CONSUMER, // Report ID (3) (Consumer),
|
|
||||||
0x16, 0x01, 0x00, // Logical Minimum (1),
|
|
||||||
0x26, 0x9C, 0x02, // Logical Maximum (668),
|
|
||||||
0x1A, 0x01, 0x00, // Usage Minimum (1),
|
|
||||||
0x2A, 0x9C, 0x02, // Usage Maximum (668),
|
|
||||||
0x75, 0x10, // Report Size (16),
|
|
||||||
0x95, 0x01, // Report Count (1),
|
|
||||||
0x81, 0x00, // Input (Data, Array),
|
|
||||||
0xC0, // End Collection - Consumer Control
|
|
||||||
}};
|
}};
|
||||||
|
|
||||||
static bool udi_hid_exk_setreport(void);
|
static bool udi_hid_exk_setreport(void);
|
||||||
|
@ -506,49 +506,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);
|
||||||
|
@ -636,20 +640,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);
|
||||||
|
@ -753,22 +758,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);
|
||||||
|
|
Loading…
Reference in a new issue