piotr c911872de5 feat: split kiosk into fallback canvas and OSD overlay layers (#8)
Drive two independent visual layers per display target from one shared
video presence signal: the fullscreen fallback/menu canvas below video
and a transparent, input-transparent OSD overlay above video, reserved
as the future flight OSD rendering surface. WFB and video decode stay
out of the UI process; pilot video keeps rendering priority.
2026-10-01 15:43:31 +02:00
2026-09-29 11:26:27 +02:00
2026-09-29 11:35:50 +02:00

Ground Station

Orange Pi Zero 3W application for the custom OpenIPC/WFB ground station.

Current baseline

  • receives framed GX12 RC channel data over the dedicated AUX1 UART at 115200 8N1;
  • validates protocol version, frame length and CRC-16;
  • logs final mixed channel values;
  • starts an independent kiosk display process that maps two independent layers on DISPLAY=:0 for the Viture target before video: the fullscreen fallback/menu canvas below video, and a transparent, input-transparent OSD overlay above video reserved as the future flight OSD rendering surface; both tolerate X11 downtime without restarting the supervisor and stop deterministically on shutdown;
  • video keeps rendering priority: the kiosk canvas stays below the fpv-video window, shows the exact fallback text Brak połączenia WFB only while no video output is presented, and the OSD overlay stays above video without ever presenting pixels over it or intercepting its input; future display targets (MIPI/touch) get their own target-specific templates instead of one global layout.

The first baseline is intentionally small. It does not yet control an AUX, manipulate the flight-control link, or replace the primary video pipeline.

Run

# Supervisor (YAML configuration, default /etc/groundstation/config.yml;
# hardware UART paths live in the config file)
groundstation -config /etc/groundstation/config.yml

# Test input mode
groundstation -stdin

# Kiosk canvas alone (the supervisor starts it; standalone for debugging)
groundstation-display -target x11

Runtime dependencies

  • an X11 session on :0 owned by the orangepi desktop user (the kiosk waits for X11 to appear and reconnects after display-manager restarts);
  • wmctrl for the fullscreen/below kiosk window state — without it the canvas still maps but stays a plain window (logged);
  • runuser from util-linux (base install) for the unprivileged kiosk launch.

Protocol

The v1 protocol is described in AGENTS.md once the repository policy file is approved. It carries 16 final EdgeTX channel outputs as a binary framed message with CRC.

Project direction

  1. GX12 Ground Station UART mode sends final RC/switch state to Orange Pi.
  2. Orange Pi logs and renders state while supervising the FPV video launcher.
  3. Add WFB quality, recorder state, and MIPI touch display independently of pilot video.
  4. Add a watchdog-protected override of exactly one reserved SAFE/NORMAL/HIGH AUX.
S
Description
No description provided
Readme
225 KiB
Languages
Go 99.8%
Dockerfile 0.2%