diff --git a/README.md b/README.md index c8ad838..08886f6 100644 --- a/README.md +++ b/README.md @@ -25,9 +25,9 @@ And that's basically it ## What does not work? -1. Telemetry functions (Shift lights, displays, SimHub, etc), mostly because telemetry works only with proprietary soft, which can't get access to shared memory chunks from games. +1. Telemetry functions. They are handeled by [Monocoque](https://github.com/Spacefreak18/monocoque) 2. `Firmware Update` function. Use Windows PC or Windows VM at the moment. -3. Setup through proprietary software. May require [some tweaking](#how-to-set-up-a-base-parameters)) +3. Setup through proprietary software. May require [some tweaking](#how-to-set-up-a-base-parameters) ## How to install this driver? You can install it through AUR package, through DKMS or manually. @@ -61,6 +61,9 @@ Best for debugging purposes, where you need frequently change codebase/branches To unload module: `sudo rmmod hid_universal_pidff` +### Testing +To test the supported effects, use ffbplay from [ffbtools](https://github.com/berarma/ffbtools) and play the included [effect-test.ffb](./effect-test.ffb) file + ## How to set up a base parameters? ### MOZA **[Boxflat](https://github.com/Lawstorant/boxflat)** is a Linux Pit House alternative made by [@Lawstorant](https://github.com/Lawstorant) diff --git a/effect-test.ffb b/effect-test.ffb new file mode 100644 index 0000000..0270fb6 --- /dev/null +++ b/effect-test.ffb @@ -0,0 +1,67 @@ +00000000 # Constant force left +00000000 > UPLOAD id:-1 dir:16384 type:CONSTANT level:9000 +00000000 < 0 id:0 +00000000 > PLAY 0 1 +03000000 # Constant force right +03000000 > UPLOAD id:0 dir:16384 type:CONSTANT level:-9000 +06000000 # Spring +06000000 > REMOVE 0 +06000000 > UPLOAD id:-1 dir:16384 type:SPRING left_coeff:32767 right_coeff:32767 +06000000 < 0 id:0 +06000000 > PLAY 0 1 +07000000 # Move the wheel yourself to test these next 3 effects +09000000 > STOP 0 +09000000 # Damper +09000000 > REMOVE 0 +09000000 > UPLOAD id:-1 dir:16384 type:DAMPER left_coeff:32767 right_coeff:32767 +09000000 < 0 id:0 +09000000 > PLAY 0 1 +12000000 # Friction +12000000 > STOP 0 +12000000 > REMOVE 0 +12000000 > UPLOAD id:-1 dir:16384 type:FRICTION left_coeff:32767 right_coeff:32767 +12000000 < 0 id:0 +12000000 > PLAY 0 1 +15000000 # Inertia +15000000 > STOP 0 +15000000 > REMOVE 0 +15000000 > UPLOAD id:-1 dir:16384 type:INERTIA left_coeff:32767 right_coeff:32767 +15000000 < 0 id:0 +15000000 > PLAY 0 1 +18000000 # Periodic sine +18000000 > REMOVE 0 +18000000 > UPLOAD id:-1 dir:16384 type:PERIODIC waveform:SINE period:100 magnitude:9000 +18000000 < 0 id:0 +18000000 > PLAY 0 1 +21000000 # Periodic square +21000000 > REMOVE 0 +21000000 > UPLOAD id:-1 dir:16384 type:PERIODIC waveform:SQUARE period:100 magnitude:9000 +21000000 < 0 id:0 +21000000 > PLAY 0 1 +24000000 # Periodic triangle +24000000 > REMOVE 0 +24000000 > UPLOAD id:-1 dir:16384 type:PERIODIC waveform:TRIANGLE period:100 magnitude:9000 +24000000 < 0 id:0 +24000000 > PLAY 0 1 +27000000 # Periodic saw up +27000000 > REMOVE 0 +27000000 > UPLOAD id:-1 dir:16384 type:PERIODIC waveform:SAW_UP period:100 magnitude:9000 +27000000 < 0 id:0 +27000000 > PLAY 0 1 +30000000 # Periodic saw down +30000000 > REMOVE 0 +30000000 > UPLOAD id:-1 dir:16384 type:PERIODIC waveform:SAW_DOWN period:100 magnitude:9000 +30000000 < 0 id:0 +30000000 > PLAY 0 1 +33000000 # Sine constant force emulation left +33000000 > REMOVE 0 +33000000 > UPLOAD id:-1 dir:16384 type:PERIODIC waveform:SINE period:1000 magnitude:0 offset:12000 +33000000 < 0 id:0 +33000000 > PLAY 0 1 +36000000 # Sine constant force emulation right +36000000 > UPLOAD id:0 dir:16384 type:PERIODIC waveform:SINE period:1000 magnitude:0 offset:-12000 +39000000 > REMOVE 0 +39000000 # Sine constant force emulation right +39000000 > UPLOAD id:0 dir:16384 type:PERIODIC waveform:SINE period:1000 magnitude:0 offset:-12000 +42000000 > STOP 0 +42000000 > REMOVE 0 \ No newline at end of file diff --git a/hid-pidff-wrapper.c b/hid-pidff-wrapper.c index 8fc2aa4..4770261 100644 --- a/hid-pidff-wrapper.c +++ b/hid-pidff-wrapper.c @@ -121,12 +121,22 @@ err: static int universal_pidff_input_configured(struct hid_device *hdev, struct hid_input *hidinput) { - // Remove fuzz and deadzone + // Remove fuzz and deadzone from the wheel axis struct input_dev *input = hidinput->input; input_set_abs_params(input, ABS_X, input->absinfo[ABS_X].minimum, input->absinfo[ABS_X].maximum, 0, 0); - return 0; + // Decrease fuzz and deadzone on additional axes + // Default Linux values are 255 for fuzz and 4096 for flat (deadzone) + short axis; + for (axis = ABS_Y; axis <= ABS_BRAKE, axis++) { + if (!test_bit(input->absbit, axis)) + continue; + + input_set_abs_params(input, axis, + input->absinfo[axis].minimum, + input->absinfo[axis].maximum, 8, 16); + } } static struct hid_driver universal_pidff = {