Message ID | 20241231154731.1719919-2-tomasz.pakula.oficjalny@gmail.com |
---|---|
State | New |
Headers | show |
Series | HID: Upgrade the generic pidff driver and add hid-universal-pidff | expand |
Hello, 在 2024/12/31 23:47, Tomasz Pakuła 写道: > Linux defines 0 length as infinite in its force feedback API > while USB PID defines NULL (0xffff). Most PID devices do not expect a > 0-length effect and can't interpret it as infinite. This change fixes > Force Feedback for most PID compliant devices. > > As most games depend on updating the values of already playing infinite > effects, this is crucial to ensure they will actually work. > > Previously, users had to rely on third-party software to do this conversion > and make their PID devices usable. > > Co-developed-by: Makarenko Oleg <oleg@makarenk.ooo> > Signed-off-by: Makarenko Oleg <oleg@makarenk.ooo> > Signed-off-by: Tomasz Pakuła <tomasz.pakula.oficjalny@gmail.com> > --- > drivers/hid/usbhid/hid-pidff.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/hid/usbhid/hid-pidff.c b/drivers/hid/usbhid/hid-pidff.c > index 3b4ee21cd811..1b5d3db62c09 100644 > --- a/drivers/hid/usbhid/hid-pidff.c > +++ b/drivers/hid/usbhid/hid-pidff.c > @@ -301,7 +301,12 @@ static void pidff_set_effect_report(struct pidff_device *pidff, > pidff->block_load[PID_EFFECT_BLOCK_INDEX].value[0]; > pidff->set_effect_type->value[0] = > pidff->create_new_effect_type->value[0]; > - pidff->set_effect[PID_DURATION].value[0] = effect->replay.length; > + > + // Convert infinite lenght from Linux API (0) Typo, lenght -> length Best regards, Shengyu > + // to PID standard (NULL) if needed > + pidff->set_effect[PID_DURATION].value[0] = > + effect->replay.length == 0 ? 0xffff : effect->replay.length; > + > pidff->set_effect[PID_TRIGGER_BUTTON].value[0] = effect->trigger.button; > pidff->set_effect[PID_TRIGGER_REPEAT_INT].value[0] = > effect->trigger.interval;
On Thu, 2 Jan 2025 at 05:37, Shengyu Qu <wiagn233@outlook.com> wrote:
> Typo, lenght -> length
Thanks!
This, along with indentation fixes in hid-ids.h, will be included in
v2 that will
happen 100% after Jiri and Benjamin add their input. I'm especially open to
better name suggestions for hid-universal-pidff.
diff --git a/drivers/hid/usbhid/hid-pidff.c b/drivers/hid/usbhid/hid-pidff.c index 3b4ee21cd811..1b5d3db62c09 100644 --- a/drivers/hid/usbhid/hid-pidff.c +++ b/drivers/hid/usbhid/hid-pidff.c @@ -301,7 +301,12 @@ static void pidff_set_effect_report(struct pidff_device *pidff, pidff->block_load[PID_EFFECT_BLOCK_INDEX].value[0]; pidff->set_effect_type->value[0] = pidff->create_new_effect_type->value[0]; - pidff->set_effect[PID_DURATION].value[0] = effect->replay.length; + + // Convert infinite lenght from Linux API (0) + // to PID standard (NULL) if needed + pidff->set_effect[PID_DURATION].value[0] = + effect->replay.length == 0 ? 0xffff : effect->replay.length; + pidff->set_effect[PID_TRIGGER_BUTTON].value[0] = effect->trigger.button; pidff->set_effect[PID_TRIGGER_REPEAT_INT].value[0] = effect->trigger.interval;