Message ID | CADbOyBQkSGkDYcfpRUZR-h=gz-3S-NGLg4meuFYAP4zZQ7d2fQ@mail.gmail.com (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Jiri Kosina |
Headers | show |
Hi Elias, First of all - thanks for caring about compatibility with old devices. It would be really annoying if something that worked once stopped working on an update. I just dug out my old Wingman Rumblepad (VID 046d PID c20a) and did the test cases (thanks for the tool by the way - might come in handy for other things). The first motor for this device controls a weak/smooth rumble effect and the second one a strong/coarse one. For both motors, values from 00 to 03 have no effect on the haptic side. You can hear the motors spinning a bit higher if you hold the pad to your ear... :-) - but it sounds like a linear increase. It similar for the high values. FC-FF produce the same high amount of rumble. There might be a small increase but not really any difference. From these observations I would say that clamping is fine for the Rumblepad although not needed. But a special case handling would have no positive effect. Best regards, Hendrik Am 04.04.2014 22:10, schrieb Elias Vanderstuyft: > Hi guys, > > > I'm about to release a patch (see attachment > "0001-HID-lg2ff-add-rumble-magnitude-clamping-quirk.patch") for the > lg2ff driver to account for some weird quirks concerning the magnitude > of a rumble effect. > You can read the description in that patch too get more details on it. > > The reason I sent this to you, is because I only own and tested this > on a Logitech Vibration Feedback wheel, and not on a Rumblepad (2). I > saw that Hendrik might have a Wingman Rumblepad, and Edgar a Rumblepad > 2 device. But if other people have such lg2ff-compatible device as > well, feel free to cooperate. > May I ask you to perform some simple tests (see next paragraph) to > verify that these quirks are also valid on those devices? > > To test sending some USB commands, I attached "USBCommander.zip" which > contains a program made with Qt4 by Michal (Cc'd; thanks Michal!) To > build it, you will need to run 'qmake-qt4' and 'make' in the top-level > directory. > It's simple to use USBCommander: enter the Vendor ID ("046d") and > Product ID ("c20a" for Rumblepad, or "c218" for Rumblepad 2), then > press 'Open', enter the to-be-tested command in the 'Command:' field, > and finally press 'Send command'. > After testing, press 'Release' and then quit the application. > You will need to run 'USBCommander' as root to send the USB commands. > > Commands to test: > ============== > > Send the following commands (without parentheses): > "51 00 xx 00 yy 00 00" > with yy (strong rumble) = "02" and: > xx = "00" => You should feel an irregular weak rumble > xx = "01" => You should feel an irregular weak rumble > xx = "02" => You should feel (almost) no rumble > xx = "03" => You should feel (almost) no rumble > xx = "FC" => You should feel much weak rumble > xx = "FD" => You should feel much weak rumble > xx = "FE" => You should feel much irregular weak rumble, > but less than with xx = FD > xx = "FF" => You should feel much irregular weak rumble, > but less than with xx = FD > > Test the same for the other rumble motor type (swap xx with yy). > > To stop the rumble, send the following command: > "F3 00 00 00 00 00 00" > > If you discover that the results do not match my assumptions, please > tell what happens in that case. > > > Thank you very much, > > Elias > > On Thu, Mar 27, 2014 at 11:13 PM, Elias Vanderstuyft > <elias.vds@gmail.com> wrote: >> Hi, >> >> >> I noticed that my rumble wheel (Logitech Formula Vibration Feedback) >> reacts in a strange way when sending low rumble magnitudes to the >> device: >> >> Assume the following USB command to be send to emit rumble: >> report->field[0]->value[0] = 0x51; >> report->field[0]->value[2] = weak; >> report->field[0]->value[4] = strong; >> When 'weak' or 'strong' is lower than 0x02 (i.e. 0x01 or 0x00), then >> the corresponding rumble motor begins to rumble intermittently, this >> resembles a bit to forcing a 2-state light-switch to be in the middle >> position. >> >> Now my question is whether all other devices (e.g. "Logitech >> RumblePad", "Rumblepad 2") experience this behaviour? >> (If you own such a device, please verify this.) >> >> >> Best regards, >> >> Elias -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Sat, Apr 5, 2014 at 1:02 AM, Hendrik Iben <Hendrik_Iben@web.de> wrote: > Hi Elias, > > First of all - thanks for caring about compatibility with old devices. > It would be really annoying if something that worked once stopped > working on an update. > > I just dug out my old Wingman Rumblepad (VID 046d PID c20a) and did the > test cases (thanks for the tool by the way - might come in handy for > other things). The first motor for this device controls a weak/smooth > rumble effect and the second one a strong/coarse one. For both motors, > values from 00 to 03 have no effect on the haptic side. You can hear the > motors spinning a bit higher if you hold the pad to your ear... :-) - > but it sounds like a linear increase. It similar for the high values. > FC-FF produce the same high amount of rumble. There might be a small > increase but not really any difference. > From these observations I would say that clamping is fine for the > Rumblepad although not needed. But a special case handling would have no > positive effect. OK, thanks for testing! I agree that a special case handling would have no positive effect. I tried to contact Edgar earlier past month, but until now I can't seem to get in touch with him. If there is no reply in a reasonable amount of time, I'll release the patch, it won't hurt anyone ;) Again thanks, Elias -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From 528b4c7e78429672538a65287160ad5498aafd05 Mon Sep 17 00:00:00 2001 From: Elias Vanderstuyft <elias.vds@gmail.com> Date: Thu, 3 Apr 2014 19:25:58 +0200 Subject: [PATCH] HID: lg2ff: add rumble magnitude clamping quirk If a magnitude in the output report is lower than 2, i.e. 1 or 0, the corresponding rumble motor shakes irregularly, instead of being turned (almost) off like when magnitude 2 is used. On the other hand, if a magnitude is higher than 0xfd, i.e 0xfe or 0xff, the corresponding rumble motor shakes irregularly with a rotation speed lower than when magnitude 0xfd is used. From 0x02 to 0xfd, the device behaves well: a monotonic increase of rotation speed. This applies to both weak and strong rumble motor types. This patch fixes this issue by clamping magnitudes from 0x02 to 0xfd. Note: The same thing appears to happen in the Windows Logitech driver, except the max clamping bound is not 0xfd, but 0xfe. Experimentally, I proved this to be wrong. Signed-off-by: Elias Vanderstuyft <elias.vds@gmail.com> Cc: linux-input@vger.kernel.org Cc: linux-kernel@vger.kernel.org --- drivers/hid/hid-lg2ff.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/hid/hid-lg2ff.c b/drivers/hid/hid-lg2ff.c index 0e3fb1a..e180e1e 100644 --- a/drivers/hid/hid-lg2ff.c +++ b/drivers/hid/hid-lg2ff.c @@ -38,12 +38,17 @@ static int play_effect(struct input_dev *dev, void *data, struct lg2ff_device *lg2ff = data; int weak, strong; +#define CLAMP_QUIRK(x) do { if (x < 2) x = 2; else if (x > 0xfd) x = 0xfd; } \ + while (0) + strong = effect->u.rumble.strong_magnitude; weak = effect->u.rumble.weak_magnitude; if (weak || strong) { weak = weak * 0xff / 0xffff; strong = strong * 0xff / 0xffff; + CLAMP_QUIRK(weak); + CLAMP_QUIRK(strong); lg2ff->report->field[0]->value[0] = 0x51; lg2ff->report->field[0]->value[2] = weak; -- 1.8.3.1