there is technically no reason why it should not be supported by usb_modeswitch:
Logitech G920 Racing Wheel
Upon plug-in, the device has product-id 0xc261 and is in XBox mode (vendor specific USB interface class: 0xff).
After sending the magical byte-sequence, the device obtains product-id 0xc262 and enters HID mode (USB interface class: 0x03).
See below for lsusb output.
A bit of history:
Initially, the decision was to do the switch-over by the xpad kernel driver.
This initial approach was criticized by the linux-input kernel maintainer, and a new approach was born: usb_skelswitch: a tiny kernel-space driver capable of sending magical byte-sequences associated with VID/PID pairs - a very simple version of the user-space usb_modeswitch.
Finally, usb_modeswitch was mentioned as a better solution (less code in kernel), and this brings us to this post.
New usb_modeswitch config-file "046d:c261":
Code: Select all
# Logitech G920 Racing Wheel
DefaultVendor=046d
DefaultProduct=c261
MessageEndpoint=01
ResponseEndpoint=01
TargetClass=0x03
MessageContent="0f00010142"
Code: Select all
# Logitech G920 Racing Wheel
ATTR{idVendor}=="046d", ATTR{idProduct}=="c261", RUN+="usb_modeswitch '%b/%k'"
Here's the lsusb log before switch-over:
Code: Select all
# lsusb -v -d 046d:c261
Bus 003 Device 012: ID 046d:c261 Logitech, Inc.
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 255 Vendor Specific Subclass
bDeviceProtocol 255 Vendor Specific Protocol
bMaxPacketSize0 64
idVendor 0x046d Logitech, Inc.
idProduct 0xc261
bcdDevice 96.02
iManufacturer 1 Logitech
iProduct 2 G920 Driving Force Racing Wheel for Xbox One
iSerial 3 000072fb6b3b9f58
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 71
bInterfaceProtocol 208
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Device Status: 0x0002
(Bus Powered)
Remote Wakeup Enabled
Code: Select all
# lsusb -v -d 046d:c262
Bus 003 Device 013: ID 046d:c262 Logitech, Inc.
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x046d Logitech, Inc.
idProduct 0xc262
bcdDevice 96.02
iManufacturer 1 Logitech
iProduct 2 G920 Driving Force Racing Wheel for Xbox One
iSerial 3 000072fb6b3b9f58
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 41
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 4 U96.02_B0048
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 No Subclass
bInterfaceProtocol 0 None
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.11
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 168
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 1
Device Status: 0x0000
(Bus Powered)
Previously I was using usb_modeswitch 2.2.1 (on Fedora 22) where it did not work when using cascaded USB hubs: USB path "3-1.4".
Now I'm using usb_modeswitch 2.3.0 where it does work just fine.