* [PATCH 1/3] hid: Add report descriptor for Logitech Driving Force wheel
@ 2013-02-02 20:45 Paul Sbarra
2013-02-02 20:45 ` [PATCH 2/3] hid: Split accel, brake " Paul Sbarra
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Paul Sbarra @ 2013-02-02 20:45 UTC (permalink / raw)
To: jkosina; +Cc: linux-input, linux-kernel, Paul Sbarra
This is the original report descriptor as reported by lsusb -vd 046d:c294.
Signed-off-by: Paul Sbarra <sbarra.paul@gmail.com>
---
drivers/hid/hid-lg.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 79 insertions(+), 5 deletions(-)
diff --git a/drivers/hid/hid-lg.c b/drivers/hid/hid-lg.c
index a2f8e88..9312a62 100644
--- a/drivers/hid/hid-lg.c
+++ b/drivers/hid/hid-lg.c
@@ -40,17 +40,83 @@
#define LG_FF3 0x1000
#define LG_FF4 0x2000
-/* Size of the original descriptor of the Driving Force Pro wheel */
+/* Size of the original descriptors of the Driving Force (and Pro) wheels */
+#define DF_RDESC_ORIG_SIZE 130
#define DFP_RDESC_ORIG_SIZE 97
-/* Fixed report descriptor for Logitech Driving Force Pro wheel controller
+/* Fixed report descriptors for Logitech Driving Force (and Pro)
+ * wheel controllers
*
- * The original descriptor hides the separate throttle and brake axes in
+ * The original descriptors hide the separate throttle and brake axes in
* a custom vendor usage page, providing only a combined value as
* GenericDesktop.Y.
- * This descriptor removes the combined Y axis and instead reports
+ * These descriptors remove the combined Y axis and instead report
* separate throttle (Y) and brake (RZ).
*/
+static __u8 df_rdesc_fixed[] = {
+0x05, 0x01, /* Usage Page (Desktop), */
+0x09, 0x04, /* Usage (Joystik), */
+0xA1, 0x01, /* Collection (Application), */
+0xA1, 0x02, /* Collection (Logical), */
+0x95, 0x01, /* Report Count (1), */
+0x75, 0x0A, /* Report Size (10), */
+0x14, /* Logical Minimum (0), */
+0x26, 0xFF, 0x03, /* Logical Maximum (1023), */
+0x34, /* Physical Minimum (0), */
+0x46, 0xFF, 0x03, /* Physical Maximum (1023), */
+0x09, 0x30, /* Usage (X), */
+0x81, 0x02, /* Input (Variable), */
+0x95, 0x0C, /* Report Count (12), */
+0x75, 0x01, /* Report Size (1), */
+0x25, 0x01, /* Logical Maximum (1), */
+0x45, 0x01, /* Physical Maximum (1), */
+0x05, 0x09, /* Usage (Buttons), */
+0x19, 0x01, /* Usage Minimum (1), */
+0x29, 0x0c, /* Usage Maximum (12), */
+0x81, 0x02, /* Input (Variable), */
+0x95, 0x02, /* Report Count (2), */
+0x06, 0x00, 0xFF, /* Usage Page (Vendor: 65280), */
+0x09, 0x01, /* Usage (?: 1), */
+0x81, 0x02, /* Input (Variable), */
+0x05, 0x01, /* Usage Page (Desktop), */
+0x09, 0x31, /* Usage (Y), */
+0x26, 0xFF, 0x00, /* Logical Maximum (255), */
+0x46, 0xFF, 0x00, /* Physical Maximum (255), */
+0x95, 0x01, /* Report Count (1), */
+0x75, 0x08, /* Report Size (8), */
+0x81, 0x02, /* Input (Variable), */
+0x25, 0x07, /* Logical Maximum (7), */
+0x46, 0x3B, 0x01, /* Physical Maximum (315), */
+0x75, 0x04, /* Report Size (4), */
+0x65, 0x14, /* Unit (Degrees), */
+0x09, 0x39, /* Usage (Hat Switch), */
+0x81, 0x42, /* Input (Variable, Null State), */
+0x75, 0x01, /* Report Size (1), */
+0x95, 0x04, /* Report Count (4), */
+0x65, 0x00, /* Unit (none), */
+0x06, 0x00, 0xFF, /* Usage Page (Vendor: 65280), */
+0x09, 0x01, /* Usage (?: 1), */
+0x25, 0x01, /* Logical Maximum (1), */
+0x45, 0x01, /* Physical Maximum (1), */
+0x81, 0x02, /* Input (Variable), */
+0x95, 0x02, /* Report Count (2), */
+0x75, 0x08, /* Report Size (8), */
+0x26, 0xFF, 0x00, /* Logical Maximum (255), */
+0x46, 0xFF, 0x00, /* Physical Maximum (255), */
+0x09, 0x02, /* Usage (?: 2), */
+0x81, 0x02, /* Input (Variable), */
+0xC0, /* End Collection, */
+0xA1, 0x02, /* Collection (Logical), */
+0x26, 0xFF, 0x00, /* Logical Maximum (255), */
+0x46, 0xFF, 0x00, /* Physical Maximum (255), */
+0x95, 0x07, /* Report Count (7), */
+0x75, 0x08, /* Report Size (8), */
+0x09, 0x03, /* Usage (?: 3), */
+0x91, 0x02, /* Output (Variable), */
+0xC0, /* End Collection, */
+0xC0 /* End Collection */
+};
+
static __u8 dfp_rdesc_fixed[] = {
0x05, 0x01, /* Usage Page (Desktop), */
0x09, 0x04, /* Usage (Joystik), */
@@ -99,7 +165,6 @@ static __u8 dfp_rdesc_fixed[] = {
0xC0 /* End Collection */
};
-
/*
* Certain Logitech keyboards send in report #3 keys which are far
* above the logical maximum described in descriptor. This extends
@@ -135,6 +200,15 @@ static __u8 *lg_report_fixup(struct hid_device *hdev, __u8 *rdesc,
}
switch (hdev->product) {
+ case USB_DEVICE_ID_LOGITECH_WHEEL:
+ if (*rsize == DF_RDESC_ORIG_SIZE) {
+ hid_info(hdev,
+ "fixing up Logitech Driving Force report descriptor\n");
+ rdesc = df_rdesc_fixed;
+ *rsize = sizeof(df_rdesc_fixed);
+ }
+ break;
+
case USB_DEVICE_ID_LOGITECH_DFP_WHEEL:
if (*rsize == DFP_RDESC_ORIG_SIZE) {
hid_info(hdev,
--
1.8.1.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/3] hid: Split accel, brake for Logitech Driving Force wheel
2013-02-02 20:45 [PATCH 1/3] hid: Add report descriptor for Logitech Driving Force wheel Paul Sbarra
@ 2013-02-02 20:45 ` Paul Sbarra
2013-02-02 20:45 ` [PATCH 3/3] hid: Calibrate Logitech Driving Force axes Paul Sbarra
2013-02-03 0:30 ` [PATCH 1/3] hid: Add report descriptor for Logitech Driving Force wheel simon
2 siblings, 0 replies; 6+ messages in thread
From: Paul Sbarra @ 2013-02-02 20:45 UTC (permalink / raw)
To: jkosina; +Cc: linux-input, linux-kernel, Paul Sbarra
Conflicts:
drivers/hid/hid-lg.c
Signed-off-by: Paul Sbarra <sbarra.paul@gmail.com>
---
drivers/hid/hid-lg.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/hid/hid-lg.c b/drivers/hid/hid-lg.c
index 9312a62..4bc0e1b 100644
--- a/drivers/hid/hid-lg.c
+++ b/drivers/hid/hid-lg.c
@@ -79,7 +79,6 @@ static __u8 df_rdesc_fixed[] = {
0x09, 0x01, /* Usage (?: 1), */
0x81, 0x02, /* Input (Variable), */
0x05, 0x01, /* Usage Page (Desktop), */
-0x09, 0x31, /* Usage (Y), */
0x26, 0xFF, 0x00, /* Logical Maximum (255), */
0x46, 0xFF, 0x00, /* Physical Maximum (255), */
0x95, 0x01, /* Report Count (1), */
@@ -99,11 +98,14 @@ static __u8 df_rdesc_fixed[] = {
0x25, 0x01, /* Logical Maximum (1), */
0x45, 0x01, /* Physical Maximum (1), */
0x81, 0x02, /* Input (Variable), */
-0x95, 0x02, /* Report Count (2), */
+0x05, 0x01, /* Usage Page (Desktop), */
+0x95, 0x01, /* Report Count (1), */
0x75, 0x08, /* Report Size (8), */
0x26, 0xFF, 0x00, /* Logical Maximum (255), */
0x46, 0xFF, 0x00, /* Physical Maximum (255), */
-0x09, 0x02, /* Usage (?: 2), */
+0x09, 0x31, /* Usage (Y), */
+0x81, 0x02, /* Input (Variable), */
+0x09, 0x35, /* Usage (Rz), */
0x81, 0x02, /* Input (Variable), */
0xC0, /* End Collection, */
0xA1, 0x02, /* Collection (Logical), */
--
1.8.1.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/3] hid: Calibrate Logitech Driving Force axes
2013-02-02 20:45 [PATCH 1/3] hid: Add report descriptor for Logitech Driving Force wheel Paul Sbarra
2013-02-02 20:45 ` [PATCH 2/3] hid: Split accel, brake " Paul Sbarra
@ 2013-02-02 20:45 ` Paul Sbarra
[not found] ` <CAGf+dShLdE8hPYdfKw417hYyiox8cqCL3Jm6OQ3P4HfnE63CPw@mail.gmail.com>
2013-02-03 0:30 ` [PATCH 1/3] hid: Add report descriptor for Logitech Driving Force wheel simon
2 siblings, 1 reply; 6+ messages in thread
From: Paul Sbarra @ 2013-02-02 20:45 UTC (permalink / raw)
To: jkosina; +Cc: linux-input, linux-kernel, Paul Sbarra
Conflicts:
drivers/hid/hid-lg.c
Signed-off-by: Paul Sbarra <sbarra.paul@gmail.com>
---
drivers/hid/hid-lg.c | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/drivers/hid/hid-lg.c b/drivers/hid/hid-lg.c
index 4bc0e1b..6f2067f 100644
--- a/drivers/hid/hid-lg.c
+++ b/drivers/hid/hid-lg.c
@@ -60,16 +60,14 @@ static __u8 df_rdesc_fixed[] = {
0xA1, 0x02, /* Collection (Logical), */
0x95, 0x01, /* Report Count (1), */
0x75, 0x0A, /* Report Size (10), */
-0x14, /* Logical Minimum (0), */
-0x26, 0xFF, 0x03, /* Logical Maximum (1023), */
-0x34, /* Physical Minimum (0), */
-0x46, 0xFF, 0x03, /* Physical Maximum (1023), */
+0x15, 45, /* Logical Minimum (45), */
+0x26, 0xA7, 0x03, /* Logical Maximum (935), */
0x09, 0x30, /* Usage (X), */
0x81, 0x02, /* Input (Variable), */
0x95, 0x0C, /* Report Count (12), */
0x75, 0x01, /* Report Size (1), */
+0x14, /* Logical Minimum (0), */
0x25, 0x01, /* Logical Maximum (1), */
-0x45, 0x01, /* Physical Maximum (1), */
0x05, 0x09, /* Usage (Buttons), */
0x19, 0x01, /* Usage Minimum (1), */
0x29, 0x0c, /* Usage Maximum (12), */
@@ -80,7 +78,6 @@ static __u8 df_rdesc_fixed[] = {
0x81, 0x02, /* Input (Variable), */
0x05, 0x01, /* Usage Page (Desktop), */
0x26, 0xFF, 0x00, /* Logical Maximum (255), */
-0x46, 0xFF, 0x00, /* Physical Maximum (255), */
0x95, 0x01, /* Report Count (1), */
0x75, 0x08, /* Report Size (8), */
0x81, 0x02, /* Input (Variable), */
@@ -95,16 +92,18 @@ static __u8 df_rdesc_fixed[] = {
0x65, 0x00, /* Unit (none), */
0x06, 0x00, 0xFF, /* Usage Page (Vendor: 65280), */
0x09, 0x01, /* Usage (?: 1), */
+0x44, /* Physical Maximum (0), */
0x25, 0x01, /* Logical Maximum (1), */
-0x45, 0x01, /* Physical Maximum (1), */
0x81, 0x02, /* Input (Variable), */
0x05, 0x01, /* Usage Page (Desktop), */
0x95, 0x01, /* Report Count (1), */
0x75, 0x08, /* Report Size (8), */
-0x26, 0xFF, 0x00, /* Logical Maximum (255), */
-0x46, 0xFF, 0x00, /* Physical Maximum (255), */
+0x15, 30, /* Logical Minimum (30), */
+0x25, 180, /* Logical Maximum (180), */
0x09, 0x31, /* Usage (Y), */
0x81, 0x02, /* Input (Variable), */
+0x15, 70, /* Logical Minimum (70), */
+0x25, 215, /* Logical Maximum (215), */
0x09, 0x35, /* Usage (Rz), */
0x81, 0x02, /* Input (Variable), */
0xC0, /* End Collection, */
--
1.8.1.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 1/3] hid: Add report descriptor for Logitech Driving Force wheel
2013-02-02 20:45 [PATCH 1/3] hid: Add report descriptor for Logitech Driving Force wheel Paul Sbarra
2013-02-02 20:45 ` [PATCH 2/3] hid: Split accel, brake " Paul Sbarra
2013-02-02 20:45 ` [PATCH 3/3] hid: Calibrate Logitech Driving Force axes Paul Sbarra
@ 2013-02-03 0:30 ` simon
2013-02-03 3:27 ` simon
2 siblings, 1 reply; 6+ messages in thread
From: simon @ 2013-02-03 0:30 UTC (permalink / raw)
Cc: jkosina, linux-input, linux-kernel, Paul Sbarra
[-- Attachment #1: Type: text/plain, Size: 1480 bytes --]
> This is the original report descriptor as reported by lsusb -vd 046d:c294.
>
> Signed-off-by: Paul Sbarra <sbarra.paul@gmail.com>
> ---
> drivers/hid/hid-lg.c | 84
> ++++++++++++++++++++++++++++++++++++++++++++++++----
> switch (hdev->product) {
> + case USB_DEVICE_ID_LOGITECH_WHEEL:
> + if (*rsize == DF_RDESC_ORIG_SIZE) {
> + hid_info(hdev,
> + "fixing up Logitech Driving Force report descriptor\n");
> + rdesc = df_rdesc_fixed;
> + *rsize = sizeof(df_rdesc_fixed);
> + }
> + break;
> +
> case USB_DEVICE_ID_LOGITECH_DFP_WHEEL:
> if (*rsize == DFP_RDESC_ORIG_SIZE) {
> hid_info(hdev,
> --
Hi Paul,
I'm not following as to why you are patching the descriptor for the DFP,
my understanding is that this is fully supported at the moment (as
USB_DEVICE_ID_LOGITECH_DFP_WHEEL in the line after your patch).
Perhaps you have a different revision. Can you please forward a 'lsusb
-vv' to we can compare.
I have attached the one from my DPF.
--
simon@selkie:~/speed-dreams-2.0$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 003: ID 5986:01a6 Acer, Inc Lenovo Integrated Webcam
Bus 003 Device 002: ID 0a5c:217f Broadcom Corp. Bluetooth Controller
Bus 003 Device 003: ID 046d:c294 Logitech, Inc. Driving Force
--
Thanks,
Simon.
[-- Attachment #2: lsusb_vv.txt --]
[-- Type: text/plain, Size: 2287 bytes --]
Bus 003 Device 003: ID 046d:c294 Logitech, Inc. Driving Force
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x046d Logitech, Inc.
idProduct 0xc294 Driving Force
bcdDevice 11.06
iManufacturer 3
iProduct 1
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 41
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Self Powered
MaxPower 80mA
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.00
bCountryCode 33 US
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 130
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 10
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 10
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/3] hid: Add report descriptor for Logitech Driving Force wheel
2013-02-03 0:30 ` [PATCH 1/3] hid: Add report descriptor for Logitech Driving Force wheel simon
@ 2013-02-03 3:27 ` simon
0 siblings, 0 replies; 6+ messages in thread
From: simon @ 2013-02-03 3:27 UTC (permalink / raw)
To: simon; +Cc: Paul Sbarra, jkosina, linux-input, linux-kernel
> Hi Paul,
> I'm not following as to why you are patching the descriptor for the DFP,
> my understanding is that this is fully supported at the moment (as
> USB_DEVICE_ID_LOGITECH_DFP_WHEEL in the line after your patch).
Ah... you said 'Driving Force'.. not 'Driving Force Pro', but given the
confusing naming schemes I think I can be excused :-)
http://en.wikipedia.org/wiki/Gran_Turismo_official_steering_wheel#Model_comparison
However I do remember that there's a quirk with the logitech wheels that
they all pretend to be the same device, but some can be sent a magic
command which makes them disconnect and re-connect with a different USB ID
and with the larger steering range.
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=drivers/hid/hid-lg4ff.c;h=d7947c701f3063ac6c3683c29d3eca333b7ca1b0;hb=8b31849a113a8868eb2de692be5c9ecadae93ac9#l549
So in summary we need to be careful with "046d:c294 Logitech, Inc. Driving
Force"
Personally I have a Driving Force Pro, Driving Force Wireless and a G27
which all start with reporting this ID.
So a couple of questions:
1) Are you sure you have a "Driving Force"?
2) Does the ForceFeedback work for you?
Just for reference we moved the FF for the logitech wheels to hid-lg4ff
back in Aug 2011, I'm not sure which mainline kernel that was...
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=history;f=drivers/hid/hid-lg4ff.c;h=d7947c701f3063ac6c3683c29d3eca333b7ca1b0;hb=8b31849a113a8868eb2de692be5c9ecadae93ac9
Simon
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2013-02-04 1:03 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-02-02 20:45 [PATCH 1/3] hid: Add report descriptor for Logitech Driving Force wheel Paul Sbarra
2013-02-02 20:45 ` [PATCH 2/3] hid: Split accel, brake " Paul Sbarra
2013-02-02 20:45 ` [PATCH 3/3] hid: Calibrate Logitech Driving Force axes Paul Sbarra
[not found] ` <CAGf+dShLdE8hPYdfKw417hYyiox8cqCL3Jm6OQ3P4HfnE63CPw@mail.gmail.com>
2013-02-04 1:03 ` simon
2013-02-03 0:30 ` [PATCH 1/3] hid: Add report descriptor for Logitech Driving Force wheel simon
2013-02-03 3:27 ` simon
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).