Joystick with keyboard, mouse and joystick endpoints disconnects after 3-4 seconds
Date: Tue, 18 Jan 2022 15:21:25 UTC
Hi,
When attaching an APEM VM Desktop joystick, https://www.apem.com/int/vm-desktop-93.html, to a 12.2 system, I get this sequence of events:
ugen0.10: <CH Products VM Desktop> at usbus0
uhid0 numa-domain 0 on uhub2
uhid0: <VM Joystick Interface> on usbus0
uhid1 numa-domain 0 on uhub2
uhid1: <VM Keyboard Interface> on usbus0
uhid2 numa-domain 0 on uhub2
uhid2: <VM Mouse Interface> on usbus0
ugen0.10: <CH Products VM Desktop> at usbus0 (disconnected)
uhid0: at uhub2, port 5, addr 19 (disconnected)
uhid0: detached
uhid1: at uhub2, port 5, addr 19 (disconnected)
uhid1: detached
uhid2: at uhub2, port 5, addr 19 (disconnected)
uhid2: detached
The disconnection happens about 3-4 seconds after the attachment completes.
The device has three endpoints: A mouse, a keyboard and a joystick. I have added quirks to have ums and ukbd ignore the device, so that uhid attaches. I believe that mouse and keyboard endpoints on the same device are not currently supported.
The output from “usbconfig dump_all_desc” is shown below.
Any ideas on where to look to resolve this?
Thanks,
Jan M.
ugen0.10: <CH Products VM Desktop> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (500mA)
bLength = 0x0012
bDescriptorType = 0x0001
bcdUSB = 0x0200
bDeviceClass = 0x0000 <Probed by interface class>
bDeviceSubClass = 0x0000
bDeviceProtocol = 0x0000
bMaxPacketSize0 = 0x0008
idVendor = 0x068e
idProduct = 0x0064
bcdDevice = 0x0200
iManufacturer = 0x0001 <CH Products>
iProduct = 0x0002 <VM Desktop>
iSerialNumber = 0x0000 <no string>
bNumConfigurations = 0x0001
Configuration index 0
bLength = 0x0009
bDescriptorType = 0x0002
wTotalLength = 0x005b
bNumInterfaces = 0x0003
bConfigurationValue = 0x0001
iConfiguration = 0x0000 <no string>
bmAttributes = 0x0080
bMaxPower = 0x00fa
Interface 0
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0000
bAlternateSetting = 0x0000
bNumEndpoints = 0x0002
bInterfaceClass = 0x0003 <HID device>
bInterfaceSubClass = 0x0000
bInterfaceProtocol = 0x0000
iInterface = 0x0005 <VM Joystick Interface>
Additional Descriptor
bLength = 0x09
bDescriptorType = 0x21
bDescriptorSubType = 0x11
RAW dump:
0x00 | 0x09, 0x21, 0x11, 0x01, 0x21, 0x01, 0x22, 0x4b,
0x08 | 0x00
Endpoint 0
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0082 <IN>
bmAttributes = 0x0003 <INTERRUPT>
wMaxPacketSize = 0x0040
bInterval = 0x000a
bRefresh = 0x0000
bSynchAddress = 0x0000
Endpoint 1
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0001 <OUT>
bmAttributes = 0x0003 <INTERRUPT>
wMaxPacketSize = 0x0040
bInterval = 0x000a
bRefresh = 0x0000
bSynchAddress = 0x0000
Interface 1
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0001
bAlternateSetting = 0x0000
bNumEndpoints = 0x0001
bInterfaceClass = 0x0003 <HID device>
bInterfaceSubClass = 0x0000
bInterfaceProtocol = 0x0000
iInterface = 0x0004 <VM Keyboard Interface>
Additional Descriptor
bLength = 0x09
bDescriptorType = 0x21
bDescriptorSubType = 0x11
RAW dump:
0x00 | 0x09, 0x21, 0x11, 0x01, 0x21, 0x01, 0x22, 0x3f,
0x08 | 0x00
Endpoint 0
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0083 <IN>
bmAttributes = 0x0003 <INTERRUPT>
wMaxPacketSize = 0x0008
bInterval = 0x000a
bRefresh = 0x0000
bSynchAddress = 0x0000
Interface 2
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0002
bAlternateSetting = 0x0000
bNumEndpoints = 0x0001
bInterfaceClass = 0x0003 <HID device>
bInterfaceSubClass = 0x0000
bInterfaceProtocol = 0x0000
iInterface = 0x0003 <VM Mouse Interface>
Additional Descriptor
bLength = 0x09
bDescriptorType = 0x21
bDescriptorSubType = 0x11
RAW dump:
0x00 | 0x09, 0x21, 0x11, 0x01, 0x21, 0x01, 0x22, 0x34,
0x08 | 0x00
Endpoint 0
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0084 <IN>
bmAttributes = 0x0003 <INTERRUPT>
wMaxPacketSize = 0x0008
bInterval = 0x000a
bRefresh = 0x0000
bSynchAddress = 0x0000