MOZA Force-Feedback Support

XPForce is now compatible with MOZA FFB controllers!

With some fiddling.

I had reports from several people that their MOZA controllers were working strangely. Some forces were inverted. They’d found a workaround involving double-inverting the pitch axis but that left other forces inverted. All very strange.

With help from an owner of the AB210 yoke, and having bought an AB9 stick, it turns out the problem is in MOZA’s “DirectInput” mode. This has been acknowledged by them as a problem and should be resolved in a future driver update. Yay!

For one type of effect, and only that one, the pitch axis forces are inverted and they don’t invert when the axis input is inverted so by double-inverting the pitch axis, the two bugs cancel out – but leave all other forces, which do invert the axis forces if you invert the axis input, well, inverted. This problem remains as of AB9 firmware 1.1.2.12 .

Unfortunately, that’s not all. There are other problems with MOZA’s DirectInput mode which at the time of writing have not been accepted as bugs.

The main issue is that the driver completely ignores a command to disable the spring mechanism. This was considered so important by Microsoft when they designed the command set that it got its own, special property. The specification for this says:

DIPROPAUTOCENTER_OFF: The device should not automatically center when the user releases the device. An application that uses force feedback should disable autocentering before playing effects.”

In other words, they’re saying that normally a stick would want to auto-center to make it behave the same way as a normal, spring-based stick. For a force-enabled stick that’s going to be playing custom force effects, that’s silly because you might not want it always returning to dead center. You can send a custom spring effect with any strength centered on any position, so why would you want to leave a default always-on return-to-center effect running?

MOZA state that having their spring effect enabled at the same time as receiving DirectInput commands is not how they intend the controllers to be used – but when you select “DirectInput” mode in the MOZA software, the spring and many other forces remain enabled by default.

Their software sets you up in a way in which they do not intend the controller to be used, which breaks all DirectInput software, and ignores the standard command that would make it work seamlessly.

Don’t think of the spring force in terms of a traditional joystick which will always return to center with the same strength. The spring force as defined by DirectInput can vary both position and strength – exactly as you want to do when making a stick respond to aerodynamic forces on control surfaces.

With the MOZA software’s spring set by default to 50% strength and returning always to the center, any spring commands that are sent by software only have 50% effect themselves. This is not just strength, it is position too; if DirectInput software commands the spring to be fully back, the actual position used by the stick will be 50% centered and 50% fully back, giving a position only halfway back. This obviously makes trim and autopilot positioning completely wrong if the spring force is used. It also means that in situations where the spring strength would be low or even absent, such as when an aircraft with no hydraulic controls is stationary or during a stall, the spring force is still trying to return the stick to the center at 50% strength. Any subtle push or pull effects can be completely overridden or reversed by the default return-to-center spring.

On the “Special” tab in MOZA Cockpit there is an option labelled “Hardware Trim Mode”, which is described thus:

If you enable this, which seems wrong because we’re talking about software which does natively support force feedback, there is a DirectInput mode available which makes the stick’s own spring effect follow DirectInput’s position. This is good, but it’s only half the solution because it is still not possible to reduce the spring effect below the strength set on the “Basic Settings” page, breaking low-airspeed feedback – stalls, sloppy controls at low speed, elevator droop etc.

What Can Be Done?

Right now there is nothing I can do to avoid these problems. I can’t fix MOZA’s bugs for them; I can’t work around them; I can’t even detect whether the stick is correctly set up. So here is the correct procedure for getting MOZA FFB controllers to work.

1) In the MOZA Cockpit software, under “Basic Settings”, ensure the “Force Feedback Mode” is set to DirectInput:

2) Set Spring to 0:

3) The “Damper”, “Inertia” and “Friction” settings also override DirectInput commands but, because these are set low by default, they are less intrusive.

4) Under “Special”, ensure that Hardware Trim Mode is set off:

5) Save a new Preset, “DirectInput” (you can call it anything) and set “Auto-switch preset” off:

The “auto-switch” option only works if their own custom plugins are installed, not by detecting which program has last sent commands to the controller, so if you leave “auto-switch” enabled it will remain on the “Idle” preset which has the spring enabled and you will need to open MOZA Cockpit and manually select the correct settings every time you want to use the simulator.

Unfortunately even though their software has options for creating new presets you can only create one at a time so it is not possible, for example, to create a second preset where the spring is enabled. The spring effect strength also carries over to Telemetry FFB and Integrated FFB modes which means that if you want to use your controller with any non-DirectInput software, you need to manually enable the spring again. All very annoying.

Summary

Since the spring setting effectively ruins all other effects, until MOZA acknowledge this as a bug and fix it XPForce will show a dialog on every launch if you have MOZA hardware, reminding you to disable the spring manually.

You will also need to manually select a new “MOZA Pitch Bug” switch in XPForce’s settings UI although this will be stored if you save the settings, so you only need to select it once. I don’t want to enable this automatically because MOZA do intend to fix the pitch inversion bug and at that point, having XPForce invert the forces again would be wrong.

If you use multiple force-enabled controllers in a shared-cockpit setup, the pitch-inversion bug workaround will only be applied to MOZA hardware; other manufacturers’ hardware which follows the DirectInput spec will still work correctly.

Sadly, another DirectInput bug in Moza’s driver emerges here. They currently report all firmware versions as “1”, which makes it impossible to disable the warnings about the other bugs should they be fixed in future firmware revisions.

The pitch-axis inversion is MOZA ticket #341932. The inability to disable the center spring effect because DIPROPAUTOCENTER_OFF is ignored is MOZA ticket #358446. The bug about mis-reporting firmware versions is #363941.

If you would like these to be fixed, please tell them so!