We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I am trying to make a composite device with two identical HID joystick classes on one device but windows 10 doesn´t recongnize it. I don't want to make a device with one interface and using one HID descriptor with two joystick described as TLC but I want to make a device with two interfaces each one with user defined HID descriptor. The microcontroller is LPC1788 and I am using middleware with usb component. One device (USBD_Config_0.c) and two HID (USBD_Config_HID_0.h and USBD_Config_HID_1.h) with user provide descriptor in USBD_User_HID_0.c and USBD_User_HID_1.c identicals. The error:
The USB device \ VID_1234 & PID_9101 \ 0001A0000001 could not be migrated.
Last Device Instance ID: USB \ VID_04D8 & PID_0021 \ 5 & e4db51b & 0 & 6 GUID Class: {745A17A0-74D3-11D0-B6FE-00A0C90F57DA} Location Path: PCIROOT (0) #PCI (0200) #USBROOT (0) #USB (6) Migration Classification: 0xF000FFFFFFFF0033 Present: false Status: 0xC0000719
USB device \ VID_1234 & PID_9101 \ 0001A0000001 configured.
Driver Name: usb.inf Guid Class: {36FC9E60-C465-11CF-8056-444553540000} Date of the Driver: 06/21/2006 Driver Version: 10.0.15063.674 Driver Provider: Microsoft Driver Section: Composite.Dev.NT Driver Rating: 0xFF2003 Corresponding Device ID: USB \ COMPOSITE Unrated Drivers: Updated Device: false Parent Device: USB \ ROOT_HUB \ 4 & 1d398213 & 0
The USB device \ VID_1234 & PID_9101 \ 0001A0000001 had a problem starting.
Driver Name: usb.inf Guid Class: {36FC9E60-C465-11CF-8056-444553540000} Service: usbccgp Lower Filters: Higher Filters: Problem: 0xA Issue Status: 0xC0000001
One of the descriptors:
extern const uint8_t usbd_hid0_report_descriptor[]; const uint8_t usbd_hid0_report_descriptor[] = { 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x04, // USAGE (Joystick) 0xa1, 0x01, // COLLECTION (Application) 0x09, 0x01, // USAGE (Pointer) 0xa1, 0x00, // COLLECTION (Physical) 0x09, 0x30, // USAGE (X) 0x09, 0x31, // USAGE (Y) 0x09, 0x32, // USAGE (Z) 0x09, 0x33, // USAGE (Rx) 0x15, 0x81, // LOGICAL_MINIMUM (-127) 0x25, 0x7f, // LOGICAL_MAXIMUM (127) 0x75, 0x08, // REPORT_SIZE (8) 0x95, 0x04, // REPORT_COUNT (4) 0x81, 0x02, // INPUT (Data,Var,Abs) 0xc0, // END_COLLECTION 0x05, 0x09, // USAGE_PAGE (Button) 0x19, 0x01, // USAGE_MINIMUM (Button 1) 0x29, 0x10, // USAGE_MAXIMUM (Button 16) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x01, // LOGICAL_MAXIMUM (1) 0x75, 0x01, // REPORT_SIZE (1) 0x95, 0x10, // REPORT_COUNT (16) 0x81, 0x02, // INPUT (Data,Var,Abs) 0xc0 // END_COLLECTION };
If I remove one HID the project works and one joystick is recognized by windows but if I add the other HID the error occurs. I can make a composite device with two interfaces with different classes as HID + CDC but with same class doesn't work (HID + HID). Can anyone help me ?
I would like to thank Andrew Neil for the indication of the post. Although the post did not solve my problem, it led me to understand why it was not working. I was trying to use the endpoint number 2 that can only be used as a bulk endpoint. As soon as I used endpoint number 4 everything worked.