Introduction
The overall goal of this project was to get Wine's implementation of the joystick/gamepad/wheel part of the DirectInput API up to standard. The greatest bulk of the work was involved in getting force feedback functionality working.
What Got Done
- Slider support and non-zero-based axes were fixed
- Force feedback functionality implemented
- Capability queries to devices
- Status queries on effects and devices
- Complete enumeration of compatible standard effects
- Creation of standard effects of all types with any flags
Effect playback and retreval with any flags except DIES_SOLO
What is Left to Do
- Known Bugs
Directional force feedback effects with non-cardinal directions don't work properly yet due to some bad assumptions. I (DanielRemenak) have a patch in my tree which partially fixes this, but it's not complete.
DirectInput provides a way to trigger an effect on a given button push, with the DIEP_TRIGGERBUTTON flag. Right now it will work only if your force feedback device is in fact a joystick, not a gamepad or wheel. Some serious changes to the the device class w.r.t. button mapping will be needed for this to work universally.
- Missing Functionality
Solo mode (DIES_SOLO) is not implemented.
Custom force types (DIEFT_CUSTOMFORCE) are not supported.
Reading and writing FF effects to files (IDirectInputDevice8::WriteEffectToFile and IDirectInputDevice8::EnumEffectsInFile) have not been implemented. They are stored in a RIFF file, the details of which are undocumented. Given the nature of RIFF, it should be relatively simple (albeit time-consuming) to determine the exact format of the effect files.
---
