none
USB composite device or not RRS feed

  • Question

  • Hi,

    We are using a GSM modem connected to our platform via USB ( EC7 based platform). It presents three USB interfaces (3 interface descriptors) and I understood this meant it is a composite USB device. This meant I needed to specify one driver per interface. However from what I can see the strict definition of a composite device is one where the device-descriptor fields for device class (bDeviceClass) and device subclass (bDeviceSubClass) both have the value 0. In this case the device descriptor contains a device Class of 02 (CDC) (I have included the full USB descriptor information below).

    So I am now confused. The device class is non-zero and yet has 3 interfaces. Is this a composite device?

    How is this handled by the OS. Does it need multiple drivers?

    Thanks

    Bruno


    ------------------------------


    Device Descriptor:
    ------------------------------

    Value    Valuename
    0x12    bLength
    0x01    bDescriptorType
    0x0200    bcdUSB
    0x02    bDeviceClass   (Communication Device Class)
    0x00    bDeviceSubClass   
    0x00    bDeviceProtocol   
    0x08    bMaxPacketSize0   (8 Bytes)
    0x114F    idVendor
    0x1234    idProduct
    0x0000    bcdDevice
    0x01    iManufacturer   (WAVECOM)
    0x02    iProduct   (WAVECOM MODEM)
    0x03    iSerialNumber   (BE0480012402210)
    0x01    bNumConfigurations
    Hex dump:
    0x12 0x01 0x00 0x02 0x02 0x00 0x00 0x08 0x4F 0x11
    0x34 0x12 0x00 0x00 0x01 0x02 0x03 0x01

    Configuration Descriptor:
    ------------------------------

    Value    Valuename
    0x09    bLength
    0x02    bDescriptorType
    0x0055    wTotalLength
    0x03    bNumInterfaces
    0x01    bConfigurationValue
    0x00    iConfiguration
    0xC0    bmAttributes   (Self-powered Device)
    0x0A    MaxPower   (20 mA)
    Hex dump:
    0x09 0x02 0x55 0x00 0x03 0x01 0x00 0xC0 0x0A

    Interface Descriptor:
    ------------------------------

    Value    Valuename
    0x09    bLength
    0x04    bDescriptorType
    0x00    bInterfaceNumber
    0x00    bAlternateSetting
    0x01    bNumEndPoints
    0x02    bInterfaceClass   (Communication Device Class)
    0x02    bInterfaceSubClass   (Abstract Control Model)
    0x01    bInterfaceProtocol   (ITU-T V.250)
    0x00    iInterface
    Hex dump:
    0x09 0x04 0x00 0x00 0x01 0x02 0x02 0x01 0x00

    CDC Header Functional Descriptor:
    ------------------------------

    Value    Valuename
    0x05    bFunctionalLength
    0x24    bDescriptorType
    0x00    bDescriptorSubtype
    0x0110    bcdCDC
    Hex dump:
    0x05 0x24 0x00 0x10 0x01

    CDC Call Management Functional Descriptor:
    ------------------------------

    Value    Valuename
    0x05    bFunctionalLength
    0x24    bDescriptorType
    0x01    bDescriptorSubtype
    0x03    bmCapabilities
    0x01    bDataInterface
    Hex dump:
    0x05 0x24 0x01 0x03 0x01

    CDC Abstract Control Management Functional Descriptor:
    ------------------------------

    Value    Valuename
    0x04    bFunctionalLength
    0x24    bDescriptorType
    0x02    bDescriptorSubtype
    0x07    bmCapabilities
    Hex dump:
    0x04 0x24 0x02 0x07

    CDC Union Functional Descriptor:
    ------------------------------

    Value    Valuename
    0x05    bFunctionalLength
    0x24    bDescriptorType
    0x06    bDescriptorSubtype
    0x00    bControlInterface
    0x01    bSubordinateInterface(0)
    Hex dump:
    0x05 0x24 0x06 0x00 0x01

    Endpoint Descriptor:
    ------------------------------

    Value    Valuename
    0x07    bLength
    0x05    bDescriptorType
    0x81    bEndpointAddress   (In-Endpoint)
    0x03    bmAttributes
       Transfer Type:           Interrupt-Transfer
       Synchronization Type:    None
       Usage Type:              Data
    0x0010    wMaxPacketSize   (16 Bytes)
    0x64    bInterval
    Hex dump:
    0x07 0x05 0x81 0x03 0x10 0x00 0x64

    Interface Descriptor:
    ------------------------------

    Value    Valuename
    0x09    bLength
    0x04    bDescriptorType
    0x01    bInterfaceNumber
    0x00    bAlternateSetting
    0x02    bNumEndPoints
    0x0A    bInterfaceClass   (CDC-Data)
    0x00    bInterfaceSubClass   
    0x00    bInterfaceProtocol   
    0x00    iInterface
    Hex dump:
    0x09 0x04 0x01 0x00 0x02 0x0A 0x00 0x00 0x00

    Endpoint Descriptor:
    ------------------------------

    Value    Valuename
    0x07    bLength
    0x05    bDescriptorType
    0x83    bEndpointAddress   (In-Endpoint)
    0x02    bmAttributes
       Transfer Type:           Bulk-Transfer
       Synchronization Type:    None
       Usage Type:              Data
    0x0040    wMaxPacketSize   (64 Bytes)
    0x00    bInterval
    Hex dump:
    0x07 0x05 0x83 0x02 0x40 0x00 0x00

    Endpoint Descriptor:
    ------------------------------

    Value    Valuename
    0x07    bLength
    0x05    bDescriptorType
    0x03    bEndpointAddress   (Out-Endpoint)
    0x02    bmAttributes
       Transfer Type:           Bulk-Transfer
       Synchronization Type:    None
       Usage Type:              Data
    0x0040    wMaxPacketSize   (64 Bytes)
    0x00    bInterval
    Hex dump:
    0x07 0x05 0x03 0x02 0x40 0x00 0x00

    Interface Descriptor:
    ------------------------------

    Value    Valuename
    0x09    bLength
    0x04    bDescriptorType
    0x02    bInterfaceNumber
    0x00    bAlternateSetting
    0x00    bNumEndPoints
    0xFE    bInterfaceClass   (Application Specific)
    0x01    bInterfaceSubClass   
    0x01    bInterfaceProtocol   
    0x04    iInterface   (WAVECOM DFU)
    Hex dump:
    0x09 0x04 0x02 0x00 0x00 0xFE 0x01 0x01 0x04

    DFU Functional Descriptor:
    ------------------------------

    Value    Valuename
    0x09    bLength
    0x21    bDescriptorType
    0x01    bmAttributes
    0x4E20    wDetachTimeOut
    0x0400    wTransferSize
    0x1001    bcdDFUVersion
    Hex dump:
    0x09 0x21 0x01 0x20 0x4E 0x00 0x04 0x01 0x10

    Whole Device Descriptor as hex dump:
    0x12, 0x01, 0x00, 0x02, 0x02, 0x00, 0x00, 0x08, 0x4F, 0x11,
    0x34, 0x12, 0x00, 0x00, 0x01, 0x02, 0x03, 0x01

    Whole Configuration Descriptor as hex dump:
    0x09, 0x02, 0x55, 0x00, 0x03, 0x01, 0x00, 0xC0, 0x0A, 0x09,
    0x04, 0x00, 0x00, 0x01, 0x02, 0x02, 0x01, 0x00, 0x05, 0x24,
    0x00, 0x10, 0x01, 0x05, 0x24, 0x01, 0x03, 0x01, 0x04, 0x24,
    0x02, 0x07, 0x05, 0x24, 0x06, 0x00, 0x01, 0x07, 0x05, 0x81,
    0x03, 0x10, 0x00, 0x64, 0x09, 0x04, 0x01, 0x00, 0x02, 0x0A,
    0x00, 0x00, 0x00, 0x07, 0x05, 0x83, 0x02, 0x40, 0x00, 0x00,
    0x07, 0x05, 0x03, 0x02, 0x40, 0x00, 0x00, 0x09, 0x04, 0x02,
    0x00, 0x00, 0xFE, 0x01, 0x01, 0x04, 0x09, 0x21, 0x01, 0x20,
    0x4E, 0x00, 0x04, 0x01, 0x10

    Connectionpath for device:

    Intel(R) ICH9 Family USB Universal Host Controller - 2934
    RootHub
    WAVECOM MODEM (VID=0x114F PID=0x1234)

    TDD Version 1.50.0   Jul 17 2012, 15:29:35

    Friday, August 3, 2012 5:00 PM