From: Roland Bosa <rbosa@logitech.com>
To: simon@mungewell.org
Cc: "Michal Malý" <madcatxster@devoid-pointer.net>,
"Dmitry Torokhov" <dmitry.torokhov@gmail.com>,
linux-input@vger.kernel.org, linux-kernel@vger.kernel.org,
jkosina@suse.cz, elias.vds@gmail.com, anssi.hannula@iki.fi
Subject: Re: [PATCH v4 01/24] input: Add ff-memless-next module
Date: Tue, 20 May 2014 18:17:51 -0700 [thread overview]
Message-ID: <537BFEBF.8010601@logitech.com> (raw)
In-Reply-To: <1c6140633925b0838b7627e071e80761.squirrel@mungewell.org>
On 05/20/2014 04:30 PM, simon@mungewell.org wrote:
> Sounds like these are the effect files produced by FEdit tool (from MS
> DirectX SDK), and/or played back by pressing buttons when configuring the
> Logitech driver on Windows ('wooden bridge', etc)...
Prior to the FEdit tool, there was Immersion Studio [1]. It created IFR
files, which were read using a DLL that Immersion provided. This DLL
produced arrays of DIEFFECTs, which had specific durations and start
offsets. By starting the entire array, you would get the desired effect.
Most of the original effects in the Logitech Control Panel were done
that way (by yours truly, as a matter of fact). To "sell" the effect, a
sound-effect was queued concurrently with the force effect.
(Trivia: part of the "Wooden bridge" sound effect was made by smashing a
cigarette lighter against real wooden clogs of a co-worker, then slowing
down the audio a bit.)
In 2003, all of these effects were 'hardcoded' in a series of arrays of
arrays of DI_EFFECTs. This allowed us to drop the Immersion loader DLL
and create them on the fly.
> Do you know if there is a mechanism for playing these under Linux?
I don't - I'm fairly new to the Linux platform itself.
> Under Windows do games just send a 'file' the DirectX driver, or do they
> parse them into individual effects to send?
With the IFR approach, you call a function in a library in userland with
the filename, and it returns an array of effects. With the FEdit tool,
you call a function on the IDirectInputDevice and calls a given callback
the the loaded effects.[2]
At the end of the day, you end up with a series of user-land effect
structures. It's up to the 'game' to download and start them on a given
device.
> If format is known/public it shouldn't be hard to write a userland client
> to play them back.
The file format of an IFR is probably easily deducible. There's a lot of
textual clues to parameters and the values are also written out in
string form.
I don't have a FEdit file at hand, but I suppose it will be similar.
> I assume that most AAA games, would implement these through some middle
> layer. I think that is probably via Steam using SDL2 haptic API, we have
> been testing against SDL2's 'testhaptic'.
I wasn't aware of this layer. I must read up on it. It sounds like a
simple way to access force feedback - I guess a game developer should
shed some light on this...
> Do you see another path (which we should be supporting/testing)?
Nope, not at this time.
> There was some discussion about rate limiting the USB packets to the
> wheel, and how to deal if app updates too quickly. Is there an upper limit
> for the wheel itself, or is it just the USB 'pipe' which is the limiting
> factor?
On the Windows side we send 125 reports/sec. The entire simulation loop
runs with a 8ms resolution. I assume this value was chosen for some
hardware constraints back in the days, but it has proven to be a good
compromise for simulated periodics and physics constraints.
In any case, the USB traffic should be decoupled from the app. Any force
updates should only change state in the ff-memless[-next] driver. Any
change there should trickle down to a 'slot' representation of the
device. If there's any change in the slots, the device is marked as
'dirty' and USB transfers are scheduled to send the latest state to the
physical device.
The scheduling should keep track of how many requests are in-flight and
delay writing the next output, until the previous one has completed.
Question back to the community: are there APIs in the USB layer to check
for presence of in-progress requests? Can one add a 'completion'
callback to a request, that gets invoked on completion/cancellation?
Thanks
roland
--
[1]
http://www.immersion.com/developers/index.php?option=com_content&view=article&id=423&Itemid=684
[2]
http://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.idirectinputdevice8.idirectinputdevice8.enumeffectsinfile(v=vs.85).aspx
next prev parent reply other threads:[~2014-05-21 1:17 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-26 15:01 [PATCH v4 00/24] input: Introduce ff-memless-next as an improved replacement for ff-memless Michal Malý
2014-04-26 15:02 ` [PATCH v4 01/24] input: Add ff-memless-next module Michal Malý
2014-05-14 6:38 ` Dmitry Torokhov
2014-05-14 8:35 ` Michal Malý
2014-05-14 11:26 ` Elias Vanderstuyft
2014-05-14 15:11 ` simon
2014-05-14 17:58 ` Dmitry Torokhov
2014-05-14 18:05 ` Dmitry Torokhov
2014-05-14 19:38 ` Michal Malý
2014-05-20 9:27 ` Michal Malý
2014-05-20 18:32 ` Roland Bosa
2014-05-20 19:00 ` Michal Malý
2014-05-20 21:38 ` Roland Bosa
2014-05-21 14:53 ` Elias Vanderstuyft
[not found] ` <537D28E3.3000401@logitech.com>
2014-05-21 22:42 ` simon
2014-05-20 19:39 ` simon
2014-05-20 22:04 ` Roland Bosa
2014-05-20 23:30 ` simon
2014-05-21 1:17 ` Roland Bosa [this message]
2014-05-21 2:13 ` Michal Malý
2014-05-21 10:17 ` Nestor Lopez Casado
2014-05-21 14:08 ` Elias Vanderstuyft
2014-05-21 13:35 ` Elias Vanderstuyft
2014-05-21 14:22 ` Elias Vanderstuyft
2014-05-21 14:05 ` Elias Vanderstuyft
2014-05-20 20:16 ` simon
2014-05-20 20:58 ` Michal Malý
2014-05-20 21:26 ` Elias Vanderstuyft
2014-05-22 9:48 ` Elias Vanderstuyft
2014-05-20 23:45 ` simon
2014-05-21 0:08 ` Michal Malý
2014-05-14 18:14 ` Dmitry Torokhov
2014-05-14 19:40 ` Michal Malý
2014-04-26 15:02 ` [PATCH v4 02/24] input: Port arizona-haptics to ff-memless-next Michal Malý
2014-04-26 15:02 ` [PATCH v4 03/24] input: Port twl4030-vibra " Michal Malý
2014-04-26 15:02 ` [PATCH v4 04/24] input: Port twl6040-vibra " Michal Malý
2014-04-26 15:02 ` [PATCH v4 05/24] input: Port max8997_haptic " Michal Malý
2014-04-26 15:02 ` [PATCH v4 06/24] input: Port pm8xxx-vibrator " Michal Malý
2014-04-26 15:02 ` [PATCH v4 07/24] hid: Port hid-axff " Michal Malý
2014-04-26 15:02 ` [PATCH v4 08/24] hid: Port hid-emsff " Michal Malý
2014-04-26 15:02 ` [PATCH v4 09/24] hid: Port hid-dr " Michal Malý
2014-04-26 15:02 ` [PATCH v4 10/24] hid: Port hid-gaff " Michal Malý
2014-04-26 15:02 ` [PATCH v4 11/24] hid: Port hid-holtekff " Michal Malý
2014-04-26 15:02 ` [PATCH v4 12/24] hid: Port hid-lgff " Michal Malý
2014-04-26 15:02 ` [PATCH v4 13/24] hid: Port hid-lg3ff " Michal Malý
2014-04-26 15:02 ` [PATCH v4 14/24] hid: Port hid-pl " Michal Malý
2014-04-26 15:02 ` [PATCH v4 15/24] hid: Port hid-sjoy " Michal Malý
2014-04-26 15:02 ` [PATCH v4 16/24] hid: Port hid-sony " Michal Malý
2014-04-26 15:02 ` [PATCH v4 17/24] hid: Port hid-tmff " Michal Malý
2014-04-26 15:02 ` [PATCH v4 18/24] hid: Port hid-wiimote-modules " Michal Malý
2014-04-26 15:02 ` [PATCH v4 19/24] hid: Port hid-zpff " Michal Malý
2014-04-26 15:02 ` [PATCH v4 20/24] input: Port gamecon " Michal Malý
2014-04-26 15:02 ` [PATCH v4 21/24] input: Port xpad " Michal Malý
2014-04-26 15:02 ` [PATCH v4 22/24] hid: Port hid-lg2ff " Michal Malý
2014-04-26 15:02 ` [PATCH v4 23/24] hid: Port hid-lg4ff " Michal Malý
2014-04-29 16:05 ` simon
2014-04-26 15:02 ` [PATCH v4 24/24] input: Replace ff-memless with ff-memless-next Michal Malý
2014-04-29 15:59 ` [PATCH v4 00/24] input: Introduce ff-memless-next as an improved replacement for ff-memless simon
2014-05-12 9:14 ` Jiri Kosina
2014-05-12 9:26 ` Michal Malý
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=537BFEBF.8010601@logitech.com \
--to=rbosa@logitech.com \
--cc=anssi.hannula@iki.fi \
--cc=dmitry.torokhov@gmail.com \
--cc=elias.vds@gmail.com \
--cc=jkosina@suse.cz \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=madcatxster@devoid-pointer.net \
--cc=simon@mungewell.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).