The crew panel, the flight deck and the world outside, for a mock that has none of them. Everything here is a switch a PED can only ever observe — the spec operations themselves live on the sockets and at /docs.
Every connected PED immediately receives its own updated list — the per-device fan-out §2.1.2 describes — and should show it as a banner.
Retracting removes a notification for everyone, unlike a PED dismissing it for itself. Clearing is what real hardware does on weight-on-wheels: it empties the list and every device's dismissals.
Stands in for the flight deck: there is no Set: "PA" in the
spec, so a PED can only ever observe this. While it is active every connected PED
receives { "PA": "Active" } unasked and should lock its UI, mute its media
and show the announcement message. On the cabin node the real speakers are muted for
the duration; Volume and NowPlaying are deliberately left
alone, so the level returns by itself when the announcement ends.
A property of the airframe, not a control: §2.1.2.1 reports task
lights only by whether a TASK_LIGHTS entry appears in the Get Lights
response — "No value for Task Lights. Only used to show if present or not."
With them removed, every PED should render no task-light control at all, and
Set: "Lights" for CABIN_LIGHTS or LAV_LIGHTS is
denied as invalid. The entry is hidden rather than deleted, so putting
them back restores it unchanged.
The hardware options every other response is derived from, and the one
thing here with no spec operation of any kind — §2.1.2 gives the profile a
Get and nothing else, because it describes the airframe. manual shades make
ShadesPresent false and Get: "Shades" an empty list;
cw is reported as the lights Type; None cabin audio and
an unset Crew Hail are widgets the app removes on its own. Leaving Name empty clears
it, which is what exercises the tail-number fallback. Serial is not
settable: it is permanent and nothing branches on it.
Nothing is broadcast. Real hardware does not become a
different aircraft in flight, so there is no unsolicited update to send and inventing
one would teach the app an event the real node never emits. A connected PED keeps the
airframe it read until it asks again — reconnect it, or have it re-read
Get: "Aircraft".
§2.1.4: a cockpit command supersedes every app role, the owner
included. Locking one re-broadcasts the affected surfaces unasked, with
LightsControl / ShadesControl / TempControl /
SpeedControl reading "Locked", and a Set against
it is denied with Reason: "locked". Temperature and fan share one avionics
enable and always lock together.
§2.1.1: dropping it emits lost on /io,
/map and /media, and a client connecting while it is down is
told lost instead of ready. It disconnects nobody and locks
nothing — the PED is still on the cabin WiFi and the controls keep answering, so
there is somebody there to show the disabled UI.
Flips the insertion switch and broadcasts the emptied library to every
/media client the way pulling a drive does. While it is out,
Get: "Songs" and Get: "Videos" with
Source: "usb" answer with empty lists — the drive is gone, not idle.
The library itself is untouched, so putting it back restores it.
Swaps the whole flight picture and pushes it to every /map
client. A client watching the map keeps streaming across the switch.
Cruising is KATL to KJFK, the shipped default.
On ground is parked at KATL with no flight plan, OnGround true, and
airspeed, Mach, wind and the entire destination set absent rather than zeroed.
Transcon is KJFK to KLAX, and it exists because Cruising cannot catch a
timezone bug: both its ends sit at -04:00, so an app that reads
ArrivalTimeLocal and one that recomputes it against the aircraft's own clock
render the same string. On Transcon they differ by three hours — the field
says 13:20 local, the same instant on the aircraft's clock reads 16:20.
§2.1.3.1: a parameter the source cannot
compute is left out of the response entirely — not
null, and not 0, which an app renders as a reading the
avionics never made. Tick one to make it disappear from both the snapshot and the
periodic push, live, without a reconnect. ETA and
RemainingTime carry the same value, so they hide and return together.
Re-seeds every store from the bundled defaults, including the switches above. It does not disconnect anyone, so a connected PED keeps whatever it last read until it asks again.