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