Skip to content

Add MOZA AB6 / AB9 FFB Base support#36

Open
lumir-sliva wants to merge 1 commit into
bobhelander:masterfrom
lumir-sliva:feature/moza-ab6-support
Open

Add MOZA AB6 / AB9 FFB Base support#36
lumir-sliva wants to merge 1 commit into
bobhelander:masterfrom
lumir-sliva:feature/moza-ab6-support

Conversation

@lumir-sliva
Copy link
Copy Markdown

Summary

Adds the MOZA AB6 (PID 0x1002) and AB9 (PID 0x1000) flight bases to the
known-working device list, ships ready-to-use settings.json variants for
each, and documents an empirical setup requirement that isn't called out
anywhere upstream.

Background

Issue #35 reports the AB9 working with a hand-rolled settings.json
entry, but doesn't extend the default settings or KnownWorkingDevices
list, and misses one runtime requirement that was load-bearing in
testing. This PR closes both gaps and adds AB6 support alongside.

What changed

  • KnownWorkingDevices in the bundled EDForceFeedback/settings.json
    and EDForceFeedbackConsole/settings.json now lists both
    MOZA AB6 FFB Base and MOZA AB9 FFB Base with their DirectInput
    Product GUIDs (1002346e-... / 1000346e-...).
  • New settingsMozaAB6.json and settingsMozaAB9.json in both project
    folders, mapping all 28 status flags from EliteAPI's GameStatus
    (Docked, Landed, Gear, Shields, Supercruise, FlightAssist, Hardpoints,
    Winging, Lights, CargoScoop, SilentRunning, Scooping, SrvHandbreak,
    SrvTurrent, SrvNearShip, SrvDriveAssist, MassLocked, FsdCharging,
    FsdCooldown, LowFuel, Overheating, HasLatlong, InDanger,
    InInterdiction, InMothership, InFighter, InSRV, AnalysisMode,
    NightVision, InNoFireZone, IsRunning, InMainMenu) to the bundled
    .ffe files. The 4.5.0 binary's embedded EliteAPI dispatches Status
    events only, not Journal events, so the bundled settings stick to
    Status entries.
  • README.md gets a "MOZA AB6 / AB9" section spelling out the Cockpit
    requirement below.

No code changes. Both bases expose a standard DirectInput FFB device
with all 11 effect types (ConstantForce, RampForce, Sine, Square,
Triangle, SawtoothUp/Down, Spring, Damper, Inertia, Friction), and the
existing SharpDX path drives them as-is once the device entries and
event mappings are configured.

Setup requirement (the missing piece from #35)

The AB6/AB9 firmware silently swallows DirectInput effect writes
unless MOZA Cockpit is running concurrently with "Integrated FFB"
toggled ON in Basic Settings
. With that toggle, Cockpit's filter
relays effect writes to the motor; without it, effects upload and start
without error but the motor stays dead. The README and the new
settings files note this. This wasn't documented in #35 and cost a few
hours of debugging before being identified empirically.

Testing

End-to-end verified on an AB6 with Elite Dangerous running and Cockpit

  • Integrated FFB enabled. Status.MassLocked: True → False plays
    VibrateSide.ffe and the stick reacts; Dock, Gear, Hardpoints,
    CargoScoop, Lights, Supercruise transitions all fire their mapped
    effects.

Default .ffe magnitudes are MSFF2-era and may feel strong on the
AB6's 6Nm motor. ForceFeedbackGain on the device entry (default
10000, range 1–10000) is the global attenuation lever; users wanting
per-effect tuning can edit individual .ffe files with the bundled
FFUtils\fedit.exe.

Refs #35.

The MOZA AB6 (PID 0x1002) and AB9 (PID 0x1000) flight bases expose a
standard DirectInput FFB device with all 11 effect types (ConstantForce,
RampForce, Sine, Square, Triangle, SawtoothUp/Down, Spring, Damper,
Inertia, Friction). EDForceFeedback talks to them through the existing
SharpDX path with no code changes; only the device entries and per-event
mappings need to be configured.

Empirical setup detail not documented anywhere upstream: the AB6/AB9
firmware silently swallows DirectInput effect writes unless MOZA Cockpit
is running concurrently with "Integrated FFB" toggled ON in Cockpit's
Basic Settings. With that toggle, Cockpit's filter relays the effects to
the motor. README and the new settings files note this requirement.

The bundled settingsMozaAB6.json / settingsMozaAB9.json map all 28
status flags from EliteAPI's GameStatus (Docked, Landed, Gear, Shields,
Supercruise, FlightAssist, Hardpoints, Winging, Lights, CargoScoop,
SilentRunning, Scooping, SrvHandbreak, SrvTurrent, SrvNearShip,
SrvDriveAssist, MassLocked, FsdCharging, FsdCooldown, LowFuel,
Overheating, HasLatlong, InDanger, InInterdiction, InMothership,
InFighter, InSRV, AnalysisMode, NightVision, InNoFireZone, IsRunning,
InMainMenu) to the bundled .ffe files. Tested end-to-end on the AB6:
Status.MassLocked:False triggers VibrateSide.ffe and the stick reacts.

Issue bobhelander#35 establishes the AB9 entry; this expands to AB6, the full
status-event set, and the missing Cockpit / Integrated FFB documentation.

Github-Issue: bobhelander#35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant