how to define a Product name string on USBX Device CDC-ACM?

Hello,

I use the USB FS port in CDC-ACM device mode with the S7G2-DK card in order to simulate one of our products in this mode.
This product has a specific VendorID and Product ID with a specific Product Name, to which we have associated an .INF driver in order to be recognized as a virtual port by our Windows PC software.
This simulator based on S7G2 works well under Windows Seven, it is recognized as our device by the device manager and our PC software.
However, under Windows 10, I notice that instead of associating the simulator with our custom driver ".inf" it is associated with the standard Microsoft driver.


It is true that on the synergy configurator of the USBX Device configurator I did not put the product name not knowing how to associate the Index of Product String Descriptor with the product name string?

I did not see any information on the documentation about that.

Can this explain the difference in module identification between Windows7 and Windows10? Knowing that the VendorID and ProductID are identical?

(I use SSP1.6.3)

Thank you in advance for your help,

Eric

  • The difference between Win7 and Win10 is the latter have preinstalled build-in virtual serial driver which is automatically installed for CDC-ACM devices. Which is what you see. Win7 also have (different) build-in driver but it isnt' installed automatically so you need to use your own INF. BTW, Win10 version is completely new which fixes several problems Win7 one has (it is very old legacy driver) but unfortunately brings new problems which depend on Win10 release... We switched to WinUsb because of this.

    However, the next difference is Win10 should automatically use product name string from device strings descriptors so all you need is to define one. It is string descriptor index 2. I'm not sure how exactly it is defined for CDC-ACM devices but it should be easy.

    There is a caveat. Win10 install driver when you plug-in the device for the first time to given USB port. It reads string descriptors and stores product name in the registry and uses probably some generic name if you don't have string descriptor 2 defined. If you define it later, nothing changes and the registry value is used. It can be solved several ways:
    - change USB PID after string descriptors change (just for testing, may not be suitable for production)
    - use different USB port where this device was never attached
    - unistall the driver, then reattach the device and if you're lucky, everything automagically fixes (it may depend on previous installations history)

  • In reply to Michal:

    Hi Michal,

    Thank you very much for this precise information on the difference in behavior between win7 and Win10.
    On the other hand, I did not find precisely how to enter the "chain 2" of the descriptor in the Synergy configurator.
    Is it possible to customize it? I use the Auto-Initialization mode
    of the USBX Device configuration module.

    Thanks again for your help

    Eric
  • In reply to Eric:

    To enter a string descriptor, first define the string framework (the one below is from the USBX Device Stack Users guide :-

    /* String Device Framework:
    Byte 0 and 1: Word containing the language ID: 0x0904 for US
    Byte 2 : Byte containing the index of the descriptor
    Byte 3 : Byte containing the length of the descriptor string
    */

    UCHAR g_string_framework[] = {
    /* Manufacturer string descriptor: Index 1 */
    0x09, 0x04, 0x01, 0x0c,
    0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x20, 0x4c,
    0x6f, 0x67, 0x69, 0x63,
    /* Product string descriptor: Index 2 */
    0x09, 0x04, 0x02, 0x0c,
    0x4D, 0x4C, 0x36, 0x39, 0x36, 0x35, 0x30, 0x30,
    0x20, 0x53, 0x44, 0x4B,
    /* Serial Number string descriptor: Index 3 */
    0x09, 0x04, 0x03, 0x04,
    0x30, 0x30, 0x30, 0x31
    };

     

    Then enter the name the name of the string descriptor, the number of indexes, and the index of the Manufacturer, Product and Serial number in the USBX Device Configuration properties :-

    Then the Manufacturer, Product and Serial number can be seen in UsbView :-

  • In reply to Jeremy:

    Thank you very much Jeremy !

    In fact, it's very easy !
    It's a pity that it is not indicated in "the USBX ™ Device Class CDC-ACM Module Guide"...

    Best Regards,
    Eric
  • In reply to Eric:

    Jeremy already answered and I'd only add there is improved UsbView version named UsbTreeView: www.uwe-sieber.de/usbtreeview_e.html. It is very useful tool when you do anything with USB.
  • In reply to Michal:

    Hi Michal,

    Thank you very much for this additional information!
    This will help me a lot in my USB connection improvements!

    See you soon !

    Eric