feat: publish adaptive-link OSD contract and keep overlay above video (#3)
This commit is contained in:
@@ -16,14 +16,16 @@ Current capabilities:
|
||||
- logs channel changes instead of every frame;
|
||||
- starts/stops `fpv-video` from the configured CH6 power/lifecycle control;
|
||||
- publishes immutable flight OSD snapshots — final RC channels, arm state
|
||||
derived from the configured arm channel, requested CH6 WFB power and
|
||||
decoded-video presence — to a tmpfs state file without ever blocking the
|
||||
UART, WFB or video paths; unchanged state is republished as a heartbeat
|
||||
and the file is removed on shutdown;
|
||||
derived from the configured arm channel, the adaptive-link contract values
|
||||
(operator target table, temporary CH6 maxPower ceiling, requested runtime
|
||||
level, VTX acknowledgment, observed link — pending/unknown until their
|
||||
producers exist) and decoded-video presence — to a tmpfs state file
|
||||
without ever blocking the UART, WFB or video paths; unchanged state is
|
||||
republished as a heartbeat and the file is removed on shutdown;
|
||||
- starts an independent kiosk display before video, tolerates temporary X11 downtime without restarting the supervisor, and stops deterministically on shutdown;
|
||||
- keeps the fullscreen fallback/menu canvas below `fpv-video`, showing `Brak połączenia WFB` only while video is absent;
|
||||
- maps a transparent, input-transparent OSD overlay above `fpv-video` as the flight OSD rendering surface: it never intercepts video input, and it punches its output shape only around the text it draws;
|
||||
- renders a deliberately minimal Viture OSD — arm state and requested CH6 WFB power — on that overlay while decoded video is present, refreshing on a slower cadence than the video so the pilot stream keeps priority; a stale snapshot (dead UART) stops rendering instead of freezing telemetry over live video.
|
||||
- renders a deliberately minimal Viture OSD on that overlay while decoded video is present — the arm state and one compact adaptive-link line showing the target table, the CH6 maxPower ceiling, the requested runtime level and the applied VTX state, with explicit pending marks until real producers arrive — refreshing on a slower cadence than the video so the pilot stream keeps priority; a stale snapshot (dead UART) stops rendering instead of freezing telemetry over live video.
|
||||
|
||||
Future MIPI/touch targets use their own templates rather than sharing one global layout. The flight OSD renders on the existing transparent layer above video, preserving the pilot stream's priority.
|
||||
|
||||
@@ -68,9 +70,13 @@ osd:
|
||||
state_path: /run/groundstation/osd-state.bin
|
||||
arm_index: 4 # CH5/AUX1, zero-based
|
||||
armed_threshold: 0 # armed while the arm channel stays above this
|
||||
vtx_table_gen: 0 # operator-selected VTX table (0 = none selected)
|
||||
vtx_table_hash: 0
|
||||
```
|
||||
|
||||
`groundstation-display` reads the same state file; both sides must agree on
|
||||
CH6 acts only as the temporary operator maxPower ceiling and static
|
||||
configuration is never applied VTX state. `groundstation-display` reads the
|
||||
same state file; both sides must agree on
|
||||
the path (override the renderer's with `groundstation-display -osd-state
|
||||
<path>` if you change `osd.state_path`). The state file carries only flight
|
||||
telemetry and never any credentials or keys.
|
||||
|
||||
Reference in New Issue
Block a user