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

USB Descriptor Problem, XP ok, Vista/7 not?!?

Hey!

we're having a problem with our USB-device...it's a composite device with 3 interfaces, a normal cdc interface, a cdc data interface and a costum interface.

Using windows XP, everthing is fine, it work's as intended, but with Windows Vista/Seven it doesn't.

Logging the transfers it say's an illegal_parameter while selecting the configuration. (seven/vista).

000029: Select Configuration (UP), 25.09.2009 22:07:21.463 +0.0. Status: 0x80000300
Configuration Index: 1
Configuration Handle: 0x0

Somehow strange is that the device works using a Win Seven/Vista - VM (VMWare Workstation 6.5) on a Seven host - no idea why ;)

We're using the interface association descriptor...maybe that's the problem.

Here's the complete config descriptor

/* USB configuration descriptor */
    9,          /* sizeof(usbDescrConfig): length of descriptor in bytes */
    USBDESCR_CONFIG,    /* descriptor type */
    84,
    0,          /* total length of data returned (including inlined descriptors) */
    3,          /* number of interfaces in this configuration */
    1,          /* index of this configuration */
    0,          /* configuration name string index */
#if USB_CFG_IS_SELF_POWERED
    USBATTR_SELFPOWER,  /* attributes */
#else
    USBATTR_BUSPOWER,   /* attributes */
#endif
    USB_CFG_MAX_BUS_POWER/2,            /* max USB current in 2mA units */

    /* IAD descriptor */
    8,
    11,       // bDescriptorType = 11
       0x00,               // bFirstInterface
       0x02,               // bInterfaceCount
       0x02,               // bFunctionClass (Communication Class)
       0x02,               // bFunctionSubClass (Abstract Control Model)
       0x01,               // bFunctionProcotol (V.25ter, Common AT commands)
       0x00,                // iInterface

    /* Test */

    /* interface descriptor follows inline: */
    9,          /* sizeof(usbDescrInterface): length of descriptor in bytes */
    USBDESCR_INTERFACE, /* descriptor type */
    0,          /* index of this interface */
    0,          /* alternate setting for this interface */
    USB_CFG_HAVE_INTRIN_ENDPOINT,   /* endpoints excl 0: number of endpoint descriptors to follow */
    USB_CFG_INTERFACE_CLASS,
    USB_CFG_INTERFACE_SUBCLASS,
    USB_CFG_INTERFACE_PROTOCOL,
    0,          /* string index for interface */

    /* CDC Class-Specific descriptor */
    5,           /* sizeof(usbDescrCDC_HeaderFn): length of descriptor in bytes */
    0x24,        /* descriptor type */
    0,           /* header functional descriptor */
    0x10, 0x01,

    4,           /* sizeof(usbDescrCDC_AcmFn): length of descriptor in bytes */
    0x24,        /* descriptor type */
    2,           /* abstract control management functional descriptor */
    0x02,        /* SET_LINE_CODING,    GET_LINE_CODING, SET_CONTROL_LINE_STATE    */

    5,           /* sizeof(usbDescrCDC_UnionFn): length of descriptor in bytes */
    0x24,        /* descriptor type */
    6,           /* union functional descriptor */
    0,           /* CDC_COMM_INTF_ID */
    1,           /* CDC_DATA_INTF_ID */

    5,           /* sizeof(usbDescrCDC_CallMgtFn): length of descriptor in bytes */
    0x24,        /* descriptor type */
    1,           /* call management functional descriptor */
    3,           /* allow management on data interface, handles call management by itself */
    1,           /* CDC_DATA_INTF_ID */

    /* Endpoint Descriptor */
    7,           /* sizeof(usbDescrEndpoint) */
    USBDESCR_ENDPOINT,  /* descriptor type = endpoint */
    0x83,        /* IN endpoint number 3 */
    0x03,        /* attrib: Interrupt endpoint */
    8, 0,        /* maximum packet size */
    USB_CFG_INTR_POLL_INTERVAL,        /* in ms */

    /* Interface Descriptor  */
    9,           /* sizeof(usbDescrInterface): length of descriptor in bytes */
    USBDESCR_INTERFACE,           /* descriptor type */
    1,           /* index of this interface */
    0,           /* alternate setting for this interface */
    2,           /* endpoints excl 0: number of endpoint descriptors to follow */
    0x0A,        /* Data Interface Class Codes */
    0,
    0,           /* Data Interface Class Protocol Codes */
    0,           /* string index for interface */

    /* Endpoint Descriptor */
    7,           /* sizeof(usbDescrEndpoint) */
    USBDESCR_ENDPOINT,  /* descriptor type = endpoint */
    0x01,        /* OUT endpoint number 1 */
    0x02,        /* attrib: Bulk endpoint */
    HW_CDC_BULK_OUT_SIZE, 0,        /* maximum packet size */
    0,           /* in ms */

    /* Endpoint Descriptor */
    7,           /* sizeof(usbDescrEndpoint) */
    USBDESCR_ENDPOINT,  /* descriptor type = endpoint */
    0x81,        /* IN endpoint number 1 */
    0x02,        /* attrib: Bulk endpoint */
    HW_CDC_BULK_IN_SIZE, 0,        /* maximum packet size */
    0,           /* in ms */

    /* usbasp descriptor */
   9,                  /* sizeof () usbasp descriptor */
   USBDESCR_INTERFACE,      /* descriptor Type */
   2,                  /* index for this interface */
   0,                  /* alternate Setting for this interface */
   0,                  /* number of endpoint descriptros to follow */
   0,                  /* interface class */
   0,                  /* interface subclass */
   0,                  /* interface protocol */
   0,                  /* string index for interface */

Here's the device descriptor:

   18,         /* sizeof(usbDescriptorDevice): length of descriptor in bytes */
    USBDESCR_DEVICE,        /* descriptor type */
    0x10, 0x01,             /* USB version supported */
    0xEF,                /* USB_CFG_DEVICE_CLASS */
    0x02,                /* USB_CFG_DEVICE_SUBCLASS */
    1,                      /* protocol */
    8,                      /* max packet size */
    /* the following two casts affect the first byte of the constant only, but
     * that's sufficient to avoid a warning with the default values.
     */
    (char)USB_CFG_VENDOR_ID,/* 2 bytes */
    (char)USB_CFG_DEVICE_ID,/* 2 bytes */
    USB_CFG_DEVICE_VERSION, /* 2 bytes */
    USB_CFG_DESCR_PROPS_STRING_VENDOR != 0 ? 1 : 0,         /* manufacturer string index */
    USB_CFG_DESCR_PROPS_STRING_PRODUCT != 0 ? 2 : 0,        /* product string index */
    USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER != 0 ? 3 : 0,  /* serial number string index */
    1,          /* number of configurations */

if you need the complete config descriptor, i'll post it, but it's pretty long ;)

Every idea will be appreciated ;)

Thanks,
Kai

Parents
  • > is there any way to get more information than the "illegal parameter"?

    It's configuration "1", as it tells. :-)
    ie. Windows doesn't like configuration 1 on your descriptor.

    It also suggests conflict of the descriptor with the registry.

    Delete (uninstall) all device instances of the VID/PID once using USBDeview,
    And re-install the INF file.

    USBDeview
    www.nirsoft.net/.../usb_devices_view.html

    I posted an example of a composite device of CDC + HID using IAD at the top of this topic on SiLabs USB forum,

    USB composite device
    www.cygnal.org/.../001050.html
    USB_CDC_HID_IAD_10.zip

    It has enumerated fine on XP-SP3 and Vista-SP1 (not tested on Win7 yet).
    Compare descriptors and INF file with yours.
    These are common to the implementations of all USB chips.

    Tsuneo

Reply
  • > is there any way to get more information than the "illegal parameter"?

    It's configuration "1", as it tells. :-)
    ie. Windows doesn't like configuration 1 on your descriptor.

    It also suggests conflict of the descriptor with the registry.

    Delete (uninstall) all device instances of the VID/PID once using USBDeview,
    And re-install the INF file.

    USBDeview
    www.nirsoft.net/.../usb_devices_view.html

    I posted an example of a composite device of CDC + HID using IAD at the top of this topic on SiLabs USB forum,

    USB composite device
    www.cygnal.org/.../001050.html
    USB_CDC_HID_IAD_10.zip

    It has enumerated fine on XP-SP3 and Vista-SP1 (not tested on Win7 yet).
    Compare descriptors and INF file with yours.
    These are common to the implementations of all USB chips.

    Tsuneo

Children
No data