| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- #include "include.h"
- #include "usb_desc.h"
- #if USB_HID_EN
- //Config descriptor: HID
- AT(.usbdev.com.table)
- const u8 desc_config_hid[] = {
- //Interface Descriptor:
- 9, /* Num bytes of this descriptor */
- INTERFACE_DESCRIPTOR, /* Interface descriptor type */
- USB_HID_ITF_INDEX, /* Interface Number*/
- 0, /* Alternate interface number */
- 2, /* Num endpoints of this interface */
- 0x03, /* Interface Sub Class: Human Interface Device */
- 0, /* Interface Sub Class: */
- 0, /* Class specific protocol: */
- 0, /* Index of Interface string descriptor */
- //HID Descriptor:
- 9, /* Num bytes of this descriptor */
- HID_DESCRIPTOR, /* HID Type */
- 0x11, 0x01, /* HID Class Specification compliance */
- 0x00, /* Country Code: none */
- 0x01, /* Number of descriptors to follow */
- HID_REPORT_DESCRIPTOR, /* Report descriptor type */
- BYTE0(HID_REPORT_DESC_SIZE), /* Len of Report descriptor ,sizeof(desc_hid_report) */
- BYTE1(HID_REPORT_DESC_SIZE),
- //EndpointDescriptor:
- 7, /* Num bytes of this descriptor */
- ENDPOINT_DESCRIPTOR, /* Endpoint descriptor type */
- USB_HID_EP_OUT_INDEX, /* Endpoint address: */
- EP_TYPE_INTR, /* Interrupt Endpoint */
- BYTE0(HID_EP_OUT_MAX_SIZE), /* Maximum packet size */
- BYTE1(HID_EP_OUT_MAX_SIZE),
- 0x01, /* Poll every 1 msec seconds */
- //EndpointDescriptor:
- 7, /* Num bytes of this descriptor */
- ENDPOINT_DESCRIPTOR, /* Endpoint descriptor type */
- USB_HID_EP_IN_INDEX | 0x80, /* Endpoint address: */
- EP_TYPE_INTR, /* Interrupt Endpoint */
- BYTE0(HID_EP_IN_MAX_SIZE), /* Maximum packet size */
- BYTE1(HID_EP_IN_MAX_SIZE),
- 0x01, /* Poll every 1 msec seconds */
- };
- //HID report
- AT(.rodata.usb.desc)
- const u8 desc_hid_report[HID_REPORT_DESC_SIZE] = {
- HID_REP_MAP_CONSUMER(1),
- #if 0
- 0x05, 0x0C, /* Usage Page (Consumer) */
- 0x09, 0x01, /* Usage (Consumer Control) */
- 0xA1, 0x01, /* Collection (Application) */
- 0x85, 0x01, /* Report ID (1) */
- 0x1A, 0x00, 0x00, /* Usage Minimum (Unassigned) */
- 0x2A, 0x9C, 0x02, /* Usage Maximum (AC Distribute Vertically) */
- 0x16, 0x00, 0x00, /* Logical minimum (0) */
- 0x26, 0x9C, 0x02, /* Logical maximum (668) */
- 0x75, 0x10, /* Report Size (16) */
- 0x95, 0x01, /* Report Count (1) */
- 0x81, 0x00, /* Input (Data,Array,Absolute,Bit Field) */
- 0x75, 0x08, /* REPORT_SIZE (8) */
- 0x95, 0x02, /* REPORT_COUNT (2) */
- 0x81, 0x01, /* INPUT (Cnst,Ary,Abs) */
- 0xC0, /* End Collection */
- #endif
- HID_REP_MAP_KEYBOARD(2),
- #if 0
- 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
- 0x09, 0x06, /* USAGE (Keyboard) */
- 0xA1, 0x01, /* COLLECTION (Application) */
- 0x85, 0x02, /* Report ID (2) */
- 0x05, 0x07, /* USAGE_PAGE (Keyboard) */
- 0x19, 0xE0, /* USAGE_MINIMUM (Keyboard LeftControl) */
- 0x29, 0xE7, /* USAGE_MAXIMUM (Keyboard Right GUI) */
- 0x15, 0x00, /* LOGICAL_MINIMUM (0) */
- 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */
- 0x75, 0x01, /* REPORT_SIZE (1) */
- 0x95, 0x08, /* REPORT_COUNT (8) */
- 0x81, 0x02, /* INPUT (Data,Var,Abs) */
- 0x95, 0x03, /* REPORT_COUNT (3) */
- 0x75, 0x08, /* REPORT_SIZE (8) */
- 0x15, 0x00, /* LOGICAL_MINIMUM (0) */
- 0x25, 0x65, /* LOGICAL_MAXIMUM (101) */
- 0x05, 0x07, /* USAGE_PAGE (Keyboard) */
- 0x19, 0x00, /* USAGE_MINIMUM (Reserved (no event indicated)) */
- 0x29, 0x65, /* USAGE_MAXIMUM (Keyboard Application) */
- 0x81, 0x00, /* INPUT (Data,Ary,Abs) */
- 0xC0, /* END_COLLECTION */
- #endif
- HID_REP_MAP_MOUSE(3),
- #if 0
- 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
- 0x09, 0x02, /* USAGE (Mouse) */
- 0xa1, 0x01, /* COLLECTION (Application) */
- 0x85, 0x03, /* Report ID (3) */
- 0x09, 0x01, /* USAGE (Pointer) */
- 0xa1, 0x00, /* COLLECTION (Physical) */
- 0x05, 0x09, /* USAGE_PAGE (Button) */
- 0x19, 0x01, /* USAGE_MINIMUM (Button 1) */
- 0x29, 0x05, /* USAGE_MAXIMUM (Button 5) */
- 0x15, 0x00, /* LOGICAL_MINIMUM (0) */
- 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */
- 0x75, 0x01, /* REPORT_SIZE (1) */
- 0x95, 0x05, /* REPORT_COUNT (5) */
- 0x81, 0x02, /* INPUT (Data,Var,Abs) */
- 0x75, 0x03, /* REPORT_SIZE (3) */
- 0x95, 0x01, /* REPORT_COUNT (1) */
- 0x81, 0x01, /* INPUT (Cnst,Ary,Abs) */
- 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
- 0x09, 0x38, /* USAGE (Wheel) */
- 0x09, 0x30, /* USAGE (X) */
- 0x09, 0x31, /* USAGE (Y) */
- 0x15, 0x81, /* LOGICAL_MINIMUM (-127) */
- 0x25, 0x7f, /* LOGICAL_MAXIMUM (127) */
- 0x75, 0x08, /* REPORT_SIZE (8) */
- 0x95, 0x03, /* REPORT_COUNT (3) */
- 0x81, 0x06, /* INPUT (Data,Var,Rel) */
- 0xc0, /* END_COLLECTION */
- 0xc0, /* END_COLLECTION */
- #endif
- };
- uint8_t *usb_hid_itf_desc_get(uint8_t *length)
- {
- if (HID_REPORT_DESC_SIZE != sizeof(desc_hid_report)){
- printf("--->desc_hid_report_size_err: %d,%d\n", HID_REPORT_DESC_SIZE, sizeof(desc_hid_report));
- while(1);
- }
- *length = sizeof(desc_config_hid);
- return (u8 *)desc_config_hid;
- }
- uint8_t *usb_hid_report_desc_get(uint8_t *length)
- {
- *length = sizeof(desc_hid_report);
- return (u8 *)desc_hid_report;
- }
- #endif
|