[PATCH RESEND] HID USB: Add IDs for Logitech Wii Speed Force Wireless Wheel

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[Resent as no response/acknowledgement; CC'ed Jiri as you seem to involved
with USB ID's - apologies if you are not]

Attached patch adds support for Logitech Wii Speed Force Wireless Wheel
USB IDs and fixes the HID report so that the buttons/axis are correctly
recognised.

At present I am using the userland app to trigger the bonding of dongle to
wheel, as this does not happen automatically.

If there is something different or further testing required (other than
playing Torcs) please advise.

Simon
(aka. Mungewell)


---------------------------- Original Message ----------------------------
Subject: [PATCH] Logitech Wii Speed Force Wireless Wheel
From:    simon@xxxxxxxxxxxxx
Date:    Thu, August 19, 2010 11:27 pm
To:      "linux-input@xxxxxxxxxxxxxxx" <linux-input@xxxxxxxxxxxxxxx>
--------------------------------------------------------------------------

Attached is a preliminary patch to enable support for the Logitech Wii
Speed Force Wireless Wheel, currently being sold on 'clearance' for around
$10.

The dongle/wheel do not automatically register with each other, a small
libhid app can be used to make a connection as follows:
--
$ sudo echo -n "3-2:1.0" > /sys/bus/usb/drivers/usbhid/unbind
$ sudo python wii_wheel_bond.py
$ sudo echo -n "3-2:1.0" > /sys/bus/usb/drivers/usbhid/bind
--

Basic functions work, but I believe that there if further work needed to
fully understand the configuration process of the dongle. Once understood
this function should be performed by the kernel driver.

I've also attached some notes on the configuration of the dongle. Since
the dongle is based around the nRF24L01 this might be similar to the other
Logitech 2.4GHz devices.

Cheers,
Simon
(aka. Mungewell)
diff -ur linux-source-2.6.32/drivers/hid/hid-core.c linux-2.6.32-sdw/drivers/hid/hid-core.c
--- linux-source-2.6.32/drivers/hid/hid-core.c	2010-07-28 00:06:55.000000000 -0600
+++ linux-2.6.32-sdw/drivers/hid/hid-core.c	2010-07-06 18:56:15.000000000 -0600
@@ -1329,6 +1329,7 @@
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WII_WHEEL) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K) },
diff -ur linux-source-2.6.32/drivers/hid/hid-ids.h linux-2.6.32-sdw/drivers/hid/hid-ids.h
--- linux-source-2.6.32/drivers/hid/hid-ids.h	2010-07-28 00:06:55.000000000 -0600
+++ linux-2.6.32-sdw/drivers/hid/hid-ids.h	2010-07-06 18:55:19.000000000 -0600
@@ -308,6 +308,7 @@
 #define USB_DEVICE_ID_LOGITECH_WINGMAN_FFG	0xc293
 #define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL	0xc295
 #define USB_DEVICE_ID_LOGITECH_G25_WHEEL	0xc299
+#define USB_DEVICE_ID_LOGITECH_WII_WHEEL	0xc29c
 #define USB_DEVICE_ID_LOGITECH_ELITE_KBD	0xc30a
 #define USB_DEVICE_ID_S510_RECEIVER	0xc50c
 #define USB_DEVICE_ID_S510_RECEIVER_2	0xc517
diff -ur linux-source-2.6.32/drivers/hid/hid-lg.c linux-2.6.32-sdw/drivers/hid/hid-lg.c
--- linux-source-2.6.32/drivers/hid/hid-lg.c	2009-12-02 20:51:21.000000000 -0700
+++ linux-2.6.32-sdw/drivers/hid/hid-lg.c	2010-07-12 21:18:31.222442036 -0600
@@ -33,6 +33,7 @@
 #define LG_NOGET		0x100
 #define LG_FF			0x200
 #define LG_FF2			0x400
+#define LG_WIIWHEEL		0x2000
 
 /*
  * Certain Logitech keyboards send in report #3 keys which are far
@@ -51,6 +52,18 @@
 		rdesc[84] = rdesc[89] = 0x4d;
 		rdesc[85] = rdesc[90] = 0x10;
 	}
+
+        if ((quirks & LG_WIIWHEEL) && rsize >= 101 && 
+                        rdesc[41] == 0x95 && rdesc[42] == 0x0B &&
+                        rdesc[47] == 0x05 && rdesc[48] == 0x09) {
+                dev_info(&hdev->dev, "fixing up Logitech WiiWheel button "
+                                "descriptor\n");
+                rdesc[41] = 0x05;
+                rdesc[42] = 0x09;
+                rdesc[47] = 0x95;
+                rdesc[48] = 0x0B;
+        }
+
 }
 
 #define lg_map_key_clear(c)	hid_map_usage_clear(hi, usage, bit, max, \
@@ -299,6 +312,8 @@
 		.driver_data = LG_FF },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL),
 		.driver_data = LG_FF },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WII_WHEEL),
+		.driver_data = LG_FF | LG_WIIWHEEL },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_FFG ),
 		.driver_data = LG_FF },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2),
diff -ur linux-source-2.6.32/drivers/hid/hid-lgff.c linux-2.6.32-sdw/drivers/hid/hid-lgff.c
--- linux-source-2.6.32/drivers/hid/hid-lgff.c	2009-12-02 20:51:21.000000000 -0700
+++ linux-2.6.32-sdw/drivers/hid/hid-lgff.c	2010-07-12 21:16:40.890453659 -0600
@@ -70,6 +70,7 @@
 	{ 0x046d, 0xc293, ff_joystick },
 	{ 0x046d, 0xc294, ff_wheel },
 	{ 0x046d, 0xc295, ff_joystick },
+	{ 0x046d, 0xc29c, ff_wheel },
 	{ 0x046d, 0xca03, ff_wheel },
 };
 

[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux