USBSER_Class with Linux

I’m working on an integrated device that uses a USB connection for the serial transfer of data.

USBSER_Class inside of HKEY_LOCAL_MACHINE/Drivers/USB/FunctionalDrivers is set, and it does work on Windows using a certain driver, but it’s not recognised as a serial port on Linux.

I have changed the VID and PID to a few FTDI and CH340 driver providers, and while both do provide us with two serial interfaces, none of them works.

If we run lsusb, we detect the device as

Bus 003 Device 006: ID 045e:0079 Microsoft Corp. IXI Ogo CT-17 handheld device

and if we run the verbose version, we get the following:

Bus 003 Device 006: ID 045e:0079 Microsoft Corp. IXI Ogo CT-17 handheld device
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass           32 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x045e Microsoft Corp.
  idProduct          0x0079 IXI Ogo CT-17 handheld device
  bcdDevice            0.90
  iManufacturer           1 Generic Manufacturer (PROTOTYPE--Remember to change idVendor)
  iProduct                2 Generic Serial (PROTOTYPE--Remember to change idVendor)
  iSerial                 3 00001400-a32d-cdc1-0000-000000000000
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0027
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xc0
      Self Powered
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           3
      bInterfaceClass         2 Communications
      bInterfaceSubClass    255 
      bInterfaceProtocol    255 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval              12
Device Qualifier (for other device speed):
  bLength                10
  bDescriptorType         6
  bcdUSB               2.00
  bDeviceClass           32 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  bNumConfigurations      1
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x0001
  Self Powered

I got it working using the Generic Serial driver, that’s preinstalled in Linux.

I’ve got it running using

echo 045e 0079 >/sys/bus/usb-serial/drivers/generic/new_id

Which whitelisted the default VID and PID to work with it.

PID and VID have been extracted from the lsusb -v and are written under idVendor and idProduct

  idVendor           0x045e Microsoft Corp.
  idProduct          0x0079 IXI Ogo CT-17 handheld device

The instructions for the solutions were found on this website and should work for kernels 5.8+.

Kind regards,
MGlolenstine.

Glad your problem solved. Thank you for the update.