Advanced: Autoflight / FMA Deep Dive
How the Flight Mode Annunciator and the autoflight system underneath it actually behave
01FMA Layout: What Each Column Means
The Flight Mode Annunciator across the top of the PFD is organized into columns, each with an active row and an armed row below it:
- Column 1 — Autothrust. The active thrust mode (e.g. THR CLB, SPEED, THR IDLE) and, when relevant, an armed mode below it.
- Column 2 — Vertical. The active vertical mode (CLB, DES, ALT, ALT*, V/S, FPA, G/S, FINAL) with armed modes shown below when applicable.
- Column 3 — Lateral. The active lateral mode (HDG, TRK, NAV, LOC, LOC*, ROLL OUT) with armed modes below.
- Column 4 — AP/FD/A-THR status. Which autopilot(s) and flight director(s) are engaged, and whether auto-thrust is active.
- Column 5 — Approach capability. Shown once an approach is armed or captured.
A recurring theme across the mode logic below: the FMA is driven by explicit mode-state fields (an "active mode" subject per axis), not inferred after the fact from raw autopilot output — so any code path that changes what the aircraft is actually doing must also update the FMA's own state, or the display and the aircraft's behavior can disagree.
02Managed Descent Engagement
Managed descent (DES) engagement follows FCOM logic that's easy to get subtly wrong:
- Managed descent requires an explicit push on the altitude knob as a consent latch — dialing a lower altitude into the FCU alone only sets a clearance limit, it does not by itself command a descent.
- A push before the computed top of descent commands a fixed, shallow descent rate, not the full managed-path law — the aircraft doesn't try to rejoin a profile that hasn't started yet.
- Levelling off at a selected altitude clears the descent-consent latch, requiring a fresh push to continue down — but levelling off at a constraint-derived altitude does not clear it, and the descent auto-resumes. The distinction matters: one is you stopping the descent, the other is the profile stopping itself temporarily.
- The cruise-to-descent phase transition fires on either a genuinely-engaged descent mode, or a "significantly below cruise altitude and near the destination" heuristic with a distance gate — so that an en-route step-down doesn't get mistaken for the start of the arrival descent and drop you out of the cruise speed schedule early.
03Go-Around Logic
Go-around detection and sequencing has more moving parts than "TOGA was pressed":
- TOGA-press detection works off a rising-edge count of levers reaching the TOGA detent, and explicitly excludes the takeoff phase — otherwise a normal takeoff roll could re-trigger go-around logic.
- The system deliberately avoids faking an "active" VNAV/managed-climb state on the ground purely to show CLB armed on the FMA — forcing that state for cosmetic reasons can interact badly with a later-engaging altitude-capture path and cause a spurious early level-off during the initial climb. Any "armed-looking" display without the real logic engaged is done as a display-only override, never a real state-engine activation.
- There are two independent altitude-capture code paths in the autopilot stack (a managed-climb-manager path and a base-autopilot capture-director path) — both must be checked when auditing "captures altitude when it shouldn't," since fixing only one looks complete but isn't.
- A floor/clamp applied to an otherwise-unset target value is a classic way to accidentally manufacture a valid-looking but wrong capture target — any such floor logic gets audited for this specifically.
04Autothrust (A/THR)
Auto-thrust disconnect and target logic follows several FCOM rules that are easy to over-simplify into a single blanket condition:
- A straddle condition — some thrust levers above the CL detent while others sit at or below it — does not force a full A/THR disconnect. The engines with levers above CL are legitimately under manual/direct FADEC control; the others stay managed.
- Reverse thrust selection is a sticky disconnect — once selected on any lever, A/THR does not silently re-arm until the next departure, matching FCOM.
- Any FMA-mode-change-driven attempt to re-activate A/THR is gated on a proper "can activate" check, specifically to avoid on/off flapping during takeoff detent transitions.
- The PFD-displayed speed target and the actually-flown target must be the same value. A classic and easily-reintroduced bug is a display that always shows final approach speed while the real flown target correctly steps through Green Dot → S → F → VAPP configuration speeds during approach — display and control law read from one shared source here, not two independently-computed ones.
- Flight-plan speed constraints are skipped during the approach phase (configuration speeds govern per FCOM) and floored at VLS/stall speed everywhere else.
05Director Arm vs. Activate Semantics
Not every autopilot "director" (the internal class backing a specific mode) auto-activates the moment it's armed:
- Some directors self-transition from Armed to Active inside their own arm() call — appropriate for "engage now" modes like takeoff or go-around pitch guidance.
- Others (speed-on-elevator, NAV capture, altitude capture) sit at Armed indefinitely until their own capture criteria are met externally, even when substituted in as a drop-in replacement for a self-activating director.
- On the disengage side, deactivating a director only flips that director's own internal state — it does not by itself clear the FMA's own active-mode fields. Since the FMA reads those fields (not the director directly), a mode-drop path that forgets to clear them leaves a mode annunciated forever against a director that's no longer doing anything.
06Thrust Rating Annunciation
Two FCOM-general display rules govern what the thrust-rating portion of the FMA/E-WD shows:
- A derated-climb-thrust label substitution is phase-gated to takeoff/climb only — derate is a climb-phase-specific thrust limit, and the underlying thrust-limit computation feeding the real engine model is gated identically, so the display and the actual limit can't disagree.
- The FMA can correctly show THR IDLE during a managed-descent geometric-path capture even though the underlying auto-thrust active-mode value reports a generic "speed" mode internally — a display-only override checks whether the descent mode is geometric-path AND all engines are actually at idle N1, reusing the same idle-detection test the E-WD/engine page already relies on so the two displays can never disagree with each other.
07FCU Heading/Track Window Behavior
The FCU heading/track window shows dashes — not a numeric preview — whenever lateral navigation is armed, not only once it's engaged, matching FCOM. That armed state is mirrored into a persistent, aircraft-wide flag rather than a one-shot event, specifically so a display that starts up after NAV first arms (which may only happen once, at spawn) still sees the correct state rather than defaulting to showing a stale numeric heading.
08AP/FD Behavior on Flight Director Deselect
Turning off both flight directors is not just a display change — it now correctly disarms NAV and CLB rather than leaving them silently armed against a director that no longer has any FD to hand guidance to. Previously, deselecting both FDs left those modes armed on the FMA with nothing driving them, which could cause a surprise re-engagement if a director was reselected later in the flight.
09Approach Arming: RNAV vs. ILS
Two related fixes affect how an approach arms for capture:
- A superseded ILS insert could steal an already-active RNAV approach — if an ILS was tuned/inserted after an RNAV approach was already loaded, the system could silently switch approach types out from under you. The active approach type now holds until you explicitly change it.
- The APPR arm gate is no longer tied to a fixed 31 NM ring around the destination. That distance gate existed to stop a stray DIR TO onto an approach fix from arming APPR prematurely from any range — it's now resolved without hard-coding a one-size-fits-all radius, so legitimate arming further out (or a tighter pattern closer in) isn't blocked by an arbitrary distance.