Releases: tloimu/adapt-ffb-joy
v0.5.0beta1
Summary
The objective of this firmware update is to improve the force feedback capability for the Force Feedback Pro (FFP) to include the features that are supported only by all three of:
a) USB Device Class Definition for Physical Interface Devices (PID),
b) the FFP firmware, and
c) the "next generation" GameInput API.
It includes a collection of new features, bug fixes and workarounds of FFP limitations that cumulatively should improve compatibility with most games and make it more likely the effects will play as originally intended.
More details on the development here: #45
Tested so far with: Force Editor (fedit.exe), FSX, FS-Force for FSX, XPForce for FSX, SimFFB, Need for Speed III, Monster Truck Madness 2
Which Firmware should I use?
Firmware file | Target Board(s) | DB15 pin 2 to AVR pins: | LED on AVR pin(s) | Axes | Arrow Button | USB Serial Debug/Logging |
---|---|---|---|---|---|---|
adaptffbjoy-0.5.0beta1.hex | Teensy 2.0 | PB0 & PD0 | PD6 | 8 = 4 joystick + 3 from pots + 1 unused | Is button 9 | Disabled |
adaptffbjoy-0.5.0beta1-shift_4axis_Teensy.hex | Teensy 2.0 | PB0 & PD0 | PD6 | 4 joystick | Shifts buttons 1-8 to 9-16 | Disabled |
adaptffbjoy-0.5.0beta1-shift_4axis_Micro.hex | Arduino Micro & Leonardo*, Pro Micro 5V, Itsy Bitsy 5V* | PB6 & PD0 | PB0, PD5, PC7 | 4 joystick | Shifts buttons 1-8 to 9-16 | Disabled |
*Expected compatible - not tested
Notes:
- The first entry matches the configuration of legacy builds (Teensy 2.0 is now discontinued) using the optional potentiometers for additional controls.
- The logging/debugging USB COM port is disabled for improved performance.
- The shift-4axis variants are based on mods by @JayBee-git including some collected from other contributors (not clear who, apologies if you are not credited). The reduction in axis count is intended to improve compatibility with games that are picky about maximum number of axes.
- The PB0 to PB6 pinout change was done by @juchong.
- If you are using the Micro targeted firmware you will need to read across the pinout from the How To Build guide, observing the change to PB6.
Changes/New Features
- Fixes #46 that caused some effects below 50% force to be halved and therefore imperceptible.
- Work around for an FFP bug that meant Constant forces could not be adjusted on the fly without suppressing the Envelope.
- Fix a bug that meant Constant forces could not be adjusted to negative values on the fly
- Device Gain supported (when available in software)
- All Device Control Commands supported (Enable/Disable, Pause/Continue, Stop All, Reset)
- Adapter tracks how many of each effect type are loaded to predict when FFP will reject an effect and report "Full" to host. This keeps Effect IDs in synch.
- Adapter compares the previous values of all MIDI parameters so that only parameters that have changed trigger a modification message to be sent over MIDI. This significantly reduces the number of messages that are sent to the FFP and may improve performance.
- All parameters are adjustable on the fly except effect type and periodic Phase.
- Report correct number of effects playable simultaneously to host (16).
- Effect Gain supported for all effect types (previously only constant and sine). This improves on FFP original drivers which did not allow Conditional effect gains.
- Offset and Magnitude apply for all Periodic effects (previously only Sine - other Periodics always played full strength)
- Fix implementation of Offset that caused erratic forces if Offset +/- Magnitude exceeded +/-100% force values.
- Envelopes for all Waveforms allow Attack and Fade levels to be greater than Magnitude.
- Full Ramp effect implementation. Ramp direction can be reversed on the fly (original FFP drivers did not support this)
- TriggerButton i.e. effects triggered in the FFP by a joystick button.
- Frequencies rounded to nearest integer Hz rather than floored.
- SampleRate supported for Ramps and Periodic effects. Previously always 100Hz.
- If SampleRate is set to "default" in USB it will be set to the greater of 100Hz or 4 x Effect Frequency. This allows higher frequency effects to be played without aliasing. Fixes #6
- FFP is initialised with auto spring centre on. This is different to previous behaviour but consistent with original drivers.
- [Debug] Allow new effects to be created in the adapter by simulating the USB CreateNewEffect report over USB serial port (when enabled).
Not supported
- Custom Forces - no known uses "in the wild". Dropped by latest GameInput API.
- Proprietary Microsoft SWForce effects (Wall, ROM, RawForce, VFX) - not supported by USB PID or game APIs.
- Periodic frequencies have been intentionally limited to 77Hz to avoid potential damage to components. Previously SampleRate was always 100Hz so max actual frequency was 50Hz. Original driver limits unknown. FFP can play up to 169Hz. See #6.
FFP Firmware Limitations and Bugs
- Some spring/damper/inertia parameters not supported - Only Coefficient and Offset implemented in FFP firmware
- LoopCount and StartDelay not implemented in FFP firmware. See #33
- Periodic phases limited to 0,90,180,270 for Sine and 0,180 for Square,Triangle,Sawtooth. Not adjustable on the fly.
- TriggerButton implementation inconsistent with USB PID spec - Button release stops effect.
- TriggerRepeatInterval not implemented in FFP firmware.
- Low resolution of Periodic Frequency at high and low frequencies. See #6.
- Decreasing the Frequency of finite duration Periodic effects can cause effects to stop prematurely (FFP firmware bug)
- Max 10 waveforms and 2 of each type of Conditional effect can be loaded at any one time
Known/Possible Issues
- Wheel not playable even without Force Feedback. See #39.
- It is possible that FFP devices do not all have the same firmware version, which might explain some of the apparent workarounds that were found not to be needed. The current version has only been tested with a #96755 device (no fan).
- (Not an issue but intended) FFP is now initialised with auto spring centre on, so it is now only possible to tell if force feedback is successfully activated by testing in an application that supports force feedback.