Skip to content

Add support for CP210x devices over USB Serial #411

Open
@wowkster

Description

@wowkster

Hosting CP210x serial devices such as the ESP32 is not supported with the srldrvce library.

Here is an Example USB Device Descriptor for the NodeMCU-32S:


    =========================== USB Port4 ===========================
 
Connection Status        : 0x01 (Device is connected)
Port Chain               : 1-4
 
      ========================== Summary =========================
Vendor ID                : 0x10C4 (Silicon Laboratories, Inc.)
Product ID               : 0xEA60
USB Version              : 1.1
Port maximum Speed       : High-Speed
Device maximum Speed     : Full-Speed
Device Connection Speed  : Full-Speed
Self powered             : no
Demanded Current         : 100 mA
Used Endpoints           : 3
 
      ======================== USB Device ========================
 
        +++++++++++++++++ Device Information ++++++++++++++++++
Friendly Name            : Silicon Labs CP210x USB to UART Bridge (COM6)
Device Description       : Silicon Labs CP210x USB to UART Bridge
Device Path 1            : \\?\USB#VID_10C4&PID_EA60#0001#{a5dcbf10-6530-11d2-901f-00c04fb951ed} (GUID_DEVINTERFACE_USB_DEVICE)
Device Path 2            : \\?\USB#VID_10C4&PID_EA60#0001#{86e0d1e0-8089-11d0-9ce4-08003e301f73} (GUID_DEVINTERFACE_COMPORT)
Device Path 3            : \\?\USB#VID_10C4&PID_EA60#0001#{a2a39220-39f4-4b88-aecb-3d86a35dc748}
Kernel Name              : \Device\USBPDO-15
Device ID                : USB\VID_10C4&PID_EA60\0001
Hardware IDs             : USB\VID_10C4&PID_EA60&REV_0100 USB\VID_10C4&PID_EA60
Driver KeyName           : {4d36e978-e325-11ce-bfc1-08002be10318}\0002 (GUID_DEVCLASS_PORTS)
Driver                   : \SystemRoot\system32\DRIVERS\silabser.sys (Version: 6.7.4.261  Date: 2021-12-20)
Driver Inf               : C:\Windows\inf\oem76.inf
Legacy BusType           : PNPBus
Class                    : Ports
Class GUID               : {4d36e978-e325-11ce-bfc1-08002be10318} (GUID_DEVCLASS_PORTS)
Service                  : silabser
Enumerator               : USB
Location Info            : Port_#0004.Hub_#0001
Location IDs             : PCIROOT(0)#PCI(1400)#USBROOT(0)#USB(4), ACPI(_SB_)#ACPI(PCI0)#ACPI(XHC_)#ACPI(RHUB)#ACPI(HS04)
Container ID             : {34c052a1-08b6-5809-881e-95820d434537}
Manufacturer Info        : Silicon Labs
Capabilities             : 0x94 (Removable, UniqueID, SurpriseRemovalOK)
Status                   : 0x0180600A (DN_DRIVER_LOADED, DN_STARTED, DN_DISABLEABLE, DN_REMOVABLE, DN_NT_ENUMERATOR, DN_NT_DRIVER)
Problem Code             : 0
HcDisableSelectiveSuspend: 0
EnableSelectiveSuspend   : 0
SelectiveSuspendEnabled  : 0
EnhancedPowerMgmtEnabled : 0
IdleInWorkingState       : 1
WakeFromSleepState       : 0
Power State              : D3 (supported: D0, D3, wake from D0)
COM-Port                 : COM6 (\Device\Silabser7)
 
        ---------------- Connection Information ---------------
Connection Index         : 0x04 (Port 4)
Connection Status        : 0x01 (DeviceConnected)
Current Config Value     : 0x01 (Configuration 1)
Device Address           : 0x2C (44)
Is Hub                   : 0x00 (no)
Device Bus Speed         : 0x01 (Full-Speed)
Number Of Open Pipes     : 0x02 (2 pipes to data endpoints)
Pipe[0]                  : EndpointID=1  Direction=IN   ScheduleOffset=0  Type=Bulk  wMaxPacketSize=64    bInterval=0
Pipe[1]                  : EndpointID=1  Direction=OUT  ScheduleOffset=0  Type=Bulk  wMaxPacketSize=64    bInterval=0
Data (HexDump)           : 04 00 00 00 12 01 10 01 00 00 00 40 C4 10 60 EA   ...........@..`.
                           00 01 01 02 03 01 01 01 00 2C 00 02 00 00 00 01   .........,......
                           00 00 00 07 05 81 02 40 00 00 00 00 00 00 07 05   .......@........
                           01 02 40 00 00 00 00 00 00                        ..@......
 
        --------------- Connection Information V2 -------------
Connection Index         : 0x04 (4)
Length                   : 0x10 (16 bytes)
SupportedUsbProtocols    : 0x03
 Usb110                  : 1 (yes, port supports USB 1.1)
 Usb200                  : 1 (yes, port supports USB 2.0)
 Usb300                  : 0 (no, port not supports USB 3.0)
 ReservedMBZ             : 0x00
Flags                    : 0x00
 DevIsOpAtSsOrHigher     : 0 (Device is not operating at SuperSpeed or higher)
 DevIsSsCapOrHigher      : 0 (Device is not SuperSpeed capable or higher)
 DevIsOpAtSsPlusOrHigher : 0 (Device is not operating at SuperSpeedPlus or higher)
 DevIsSsPlusCapOrHigher  : 0 (Device is not SuperSpeedPlus capable or higher)
 ReservedMBZ             : 0x00
Data (HexDump)           : 04 00 00 00 10 00 00 00 03 00 00 00 00 00 00 00   ................
 
    ---------------------- Device Descriptor ----------------------
bLength                  : 0x12 (18 bytes)
bDescriptorType          : 0x01 (Device Descriptor)
bcdUSB                   : 0x110 (USB Version 1.1)
bDeviceClass             : 0x00 (defined by the interface descriptors)
bDeviceSubClass          : 0x00
bDeviceProtocol          : 0x00
bMaxPacketSize0          : 0x40 (64 bytes)
idVendor                 : 0x10C4 (Silicon Laboratories, Inc.)
idProduct                : 0xEA60
bcdDevice                : 0x0100
iManufacturer            : 0x01 (String Descriptor 1)
iProduct                 : 0x02 (String Descriptor 2)
iSerialNumber            : 0x03 (String Descriptor 3)
bNumConfigurations       : 0x01 (1 Configuration)
Data (HexDump)           : 12 01 10 01 00 00 00 40 C4 10 60 EA 00 01 01 02   .......@..`.....
                           03 01                                             ..
 
    ------------------ Configuration Descriptor -------------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x02 (Configuration Descriptor)
wTotalLength             : 0x0020 (32 bytes)
bNumInterfaces           : 0x01 (1 Interface)
bConfigurationValue      : 0x01 (Configuration 1)
iConfiguration           : 0x00 (No String Descriptor)
bmAttributes             : 0x80
 D7: Reserved, set 1     : 0x01
 D6: Self Powered        : 0x00 (no)
 D5: Remote Wakeup       : 0x00 (no)
 D4..0: Reserved, set 0  : 0x00
MaxPower                 : 0x32 (100 mA)
Data (HexDump)           : 09 02 20 00 01 01 00 80 32 09 04 00 00 02 FF 00   .. .....2.......
                           00 02 07 05 81 02 40 00 00 07 05 01 02 40 00 00   ......@......@..
 
        ---------------- Interface Descriptor -----------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x04 (Interface Descriptor)
bInterfaceNumber         : 0x00 (Interface 0)
bAlternateSetting        : 0x00
bNumEndpoints            : 0x02 (2 Endpoints)
bInterfaceClass          : 0xFF (Vendor Specific)
bInterfaceSubClass       : 0x00
bInterfaceProtocol       : 0x00
iInterface               : 0x02 (String Descriptor 2)
Data (HexDump)           : 09 04 00 00 02 FF 00 00 02                        .........
 
        ----------------- Endpoint Descriptor -----------------
bLength                  : 0x07 (7 bytes)
bDescriptorType          : 0x05 (Endpoint Descriptor)
bEndpointAddress         : 0x81 (Direction=IN EndpointID=1)
bmAttributes             : 0x02 (TransferType=Bulk)
wMaxPacketSize           : 0x0040 (64 bytes)
bInterval                : 0x00 (ignored)
Data (HexDump)           : 07 05 81 02 40 00 00                              ....@..
 
        ----------------- Endpoint Descriptor -----------------
bLength                  : 0x07 (7 bytes)
bDescriptorType          : 0x05 (Endpoint Descriptor)
bEndpointAddress         : 0x01 (Direction=OUT EndpointID=1)
bmAttributes             : 0x02 (TransferType=Bulk)
wMaxPacketSize           : 0x0040 (64 bytes)
bInterval                : 0x00 (ignored)
Data (HexDump)           : 07 05 01 02 40 00 00                              ....@..
 
      -------------------- String Descriptors -------------------
String descriptors are not available  (because the device is in low power state)

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions