This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Middleware Composite HID + HID with two interface doesn't work

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 ?

Parents Reply Children
  • Middleware Composite HID + HID with two interface doesn't work
    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.