/* USB Standard Device Descriptor */
const uint8_t Joystick_DeviceDescriptor[JOYSTICK_SIZ_DEVICE_DESC] =
{
0x12,
/*bLength */
USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/
0x00,
/*bcdUSB */
0x02,
0x00,
/*bDeviceClass*/
0x00,
/*bDeviceSubClass*/
0x00,
/*bDeviceProtocol*/
0x40,
/*bMaxPacketSize40*/
0x08,
/*idVendor (0x0483)*/
0x48,
0x57,
/*idProduct = 0x5710*/
0x10,
0x00,
/*bcdDevice rel. 2.00*/
0x02,
1,
/*Index of string descriptor describing
manufacturer */
2,
/*Index of string descriptor describing
product*/
3,
/*Index of string descriptor describing the
device serial number */
0x01 /*bNumConfigurations*/
}
; /* Joystick_DeviceDescriptor */
/* USB Configuration Descriptor */
/* All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */
const uint8_t Joystick_ConfigDescriptor[JOYSTICK_SIZ_CONFIG_DESC] =
{
0x09,
/* bLength: Configuation Descriptor size */
USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */
JOYSTICK_SIZ_CONFIG_DESC,
/* wTotalLength: Bytes returned */
0x00,
0x01,
/*bNumInterfaces: 1 interface*/
0x01,
/*bConfigurationValue: Configuration value*/
0x00,
/*iConfiguration: Index of string descriptor describing
the configuration*/
0xC0,
/*bmAttributes: bus powered */
0x32,
/*MaxPower 100 mA: this current is used for detecting Vbus*/
/************** Descriptor of Joystick Mouse interface ****************/
/* 09 */
0x09,
/*bLength: Interface Descriptor size*/
USB_INTERFACE_DESCRIPTOR_TYPE,/*bDescriptorType: Interface descriptor type*/
0x00,
/*bInterfaceNumber: Number of Interface*/
0x00,
/*bAlternateSetting: Alternate setting*/
0x02,
/*bNumEndpoints*/
0x03,
/*bInterfaceClass: HID*/
0x01,
/*bInterfaceSubClass : 1=BOOT, 0=no boot*/
0x01,
/*nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse*/
0,
/*iInterface: Index of string descriptor*/
/******************** Descriptor of Joystick Mouse HID ********************/
/* 18 */
0x09,
/*bLength: HID Descriptor size*/
HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/
0x00,
/*bcdHID: HID Class Spec release number*/
0x01,
0x00,
/*bCountryCode: Hardware target country*/
0x01,
/*bNumDescriptors: Number of HID class descriptors to follow*/
0x22,
/*bDescriptorType*/
JOYSTICK_SIZ_REPORT_DESC,/*wItemLength: Total length of Report descriptor*/
0x00,
/******************** Descriptor of Joystick Mouse endpoint ********************/
/* 27 */
0x07,
/*bLength: Endpoint Descriptor size*/
USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/
0x81,
/*bEndpointAddress: Endpoint Address (IN)*/
0x03,
/*bmAttributes: Interrupt endpoint*/
0x08,
/*wMaxPacketSize: 4 Byte max */
0x00,
0x20,
/*bInterval: Polling Interval (32 ms)*/
/* 34 */
0x07,
/*bLength: Endpoint Descriptor size*/
USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/
0x01,
/*bEndpointAddress: Endpoint Address (OUT)*/
0x03,
/*bmAttributes: Interrupt endpoint*/
0x08,
/*wMaxPacketSize: 8 Byte max */
0x00,
0x05,
//0x20 /*bInterval: Polling Interval (32 ms)*/
/* 41 */
}
; /* MOUSE_ConfigDescriptor */
const uint8_t Joystick_ReportDescriptor[JOYSTICK_SIZ_REPORT_DESC] =
{
0x05,
0x01,
// USAGE_PAGE (Generic Desktop)
0x09,
0x06,
// USAGE (Keyboard)
0xa1,
0x01,
// COLLECTION (Application)
0x05,
0x07,
// USAGE_PAGE (Keyboard/Keypad)
0x19,
0xe0,
// USAGE_MINIMUM (Keyboard LeftControl)
0x29,
0xe7,
// USAGE_MAXIMUM (Keyboard Right GUI)
0x15,
0x00,
// LOGICAL_MINIMUM (0)
0x25,
0x01,
// LOGICAL_MAXIMUM (1)
0x95,
0x08,
// REPORT_COUNT (8)
0x75,
0x01,
// REPORT_SIZE (1)
0x81,
0x02,
// INPUT (Data,Var,Abs)
0x95,
0x01,
// REPORT_COUNT (1)
0x75,
0x08,
// REPORT_SIZE (8)
0x81,
0x03,
// INPUT (Cnst,Var,Abs)
0x95,
0x06,
// REPORT_COUNT (6)
0x75,
0x08,
// REPORT_SIZE (8)
0x25,
0xFF,
// LOGICAL_MAXIMUM (255)
0x19,
0x00,
// USAGE_MINIMUM (Reserved (no event indicated))
0x29,
0x65,
// USAGE_MAXIMUM (Keyboard Application)
0x81,
0x00,
// INPUT (Data,Ary,Abs)
0x25,
0x01,
// LOGICAL_MAXIMUM (1)
0x95,
0x02,
// REPORT_COUNT (2)
0x75,
0x01,
// REPORT_SIZE (1)
0x05,
0x08,
// USAGE_PAGE (LEDs)
0x19,
0x01,
// USAGE_MINIMUM (Num Lock)
0x29,
0x02,
// USAGE_MAXIMUM (Caps Lock)
0x91,
0x02,
// OUTPUT (Data,Var,Abs)
0x95,
0x01,
// REPORT_COUNT (1)
0x75,
0x06,
// REPORT_SIZE (6)
0x91,
0x03,
// OUTPUT (Cnst,Var,Abs)
0xc0 // END_COLLECTION
}
; /* Joystick_ReportDescriptor */
/* USB String Descriptors (optional) */
const uint8_t Joystick_StringLangID[JOYSTICK_SIZ_STRING_LANGID] =
{
JOYSTICK_SIZ_STRING_LANGID,
USB_STRING_DESCRIPTOR_TYPE,
0x09,
0x04
}
; /* LangID = 0x0409: U.S. English */
转载于:https://www.cnblogs.com/zhaocundang/p/5352510.html
相关资源:STM32 RBT6 USB复合设备,HID鼠标 HID键盘 两个Interface