Add fullscreen Ground Station display foundation #7

Merged
piotr merged 2 commits from issue-1-fullscreen-display into main 2026-10-01 14:08:50 +02:00
Collaborator

Summary

  • add an independently supervised fullscreen Ground Station kiosk display
  • keep the black canvas alive without WFB/video and preserve video rendering priority
  • introduce target-specific display abstractions for future MIPI/touch templates
  • add deployment configuration, lifecycle tests, documentation, and ARM64 build coverage

Validation

  • go test -race -count=1 ./...
  • focused lifecycle/process tests with repeated race runs
  • go vet ./... and gofmt -l .
  • ARM64 cross-build of both binaries
  • git diff --check and added-lines secrets scan

Closes #1

## Summary - add an independently supervised fullscreen Ground Station kiosk display - keep the black canvas alive without WFB/video and preserve video rendering priority - introduce target-specific display abstractions for future MIPI/touch templates - add deployment configuration, lifecycle tests, documentation, and ARM64 build coverage ## Validation - `go test -race -count=1 ./...` - focused lifecycle/process tests with repeated race runs - `go vet ./...` and `gofmt -l .` - ARM64 cross-build of both binaries - `git diff --check` and added-lines secrets scan Closes #1
grzesiu added 1 commit 2026-09-30 23:13:20 +02:00
Kiosk process owns its display lifecycle: waits for X11, keeps the
fullscreen black canvas below video, stops deterministically on signal.
Supervisor starts it before video, restarts only on process death, and
shuts the whole process group down; X11 downtime never restarts the
supervisor. Per-target opener/template abstractions for future MIPI.
grzesiu added 1 commit 2026-09-30 23:25:31 +02:00
fix: sweep kiosk process group after direct child exit (#1)
Build Ground Station / build (push) Successful in 26s
53ab05ce12
CI caught stopDisplayProcess returning when the direct child died
without proving the group emptied. Escalation tests now ignore SIGINT
from birth (no trap-setup race) and a final group SIGKILL sweep removes
any kiosk surviving an exiting runuser.
piotr merged commit 53ab05ce12 into main 2026-10-01 14:08:50 +02:00
piotr deleted branch issue-1-fullscreen-display 2026-10-01 14:08:50 +02:00
Collaborator

Post-merge architecture review

This is a good foundation and moves in the intended direction: X11 target is isolated behind Opener/Session/Template, target reconnection is independent of the Ground Station UART supervisor, and the process-group cleanup is properly covered by tests.

Follow-up required before adding flight OSD: the kiosk is deliberately below the separate fpv-video window. That correctly implements the no-WFB fallback, but this same window can never draw an OSD over video. I opened a focused follow-up issue for separate fallback/menu and transparent top-level OSD layers.

Small configuration defect: when display.user is empty, startDisplayProcess prepends configured DISPLAY/XAUTHORITY before os.Environ(). Go exec.Cmd.Env resolves duplicate keys using the last value, so inherited values overwrite the configured ones in this direct-launch path. Default production config uses user: orangepi, so it does not affect the current deployment, but the direct-user path and its test should be corrected before relying on it.

Validation on merged commit 53ab05c: gofmt clean, go test ./... PASS, go vet ./... PASS, both linux/arm64 binaries build successfully.

## Post-merge architecture review This is a good foundation and moves in the intended direction: X11 target is isolated behind `Opener`/`Session`/`Template`, target reconnection is independent of the Ground Station UART supervisor, and the process-group cleanup is properly covered by tests. **Follow-up required before adding flight OSD:** the kiosk is deliberately `below` the separate `fpv-video` window. That correctly implements the no-WFB fallback, but this same window can never draw an OSD *over* video. I opened a focused follow-up issue for separate fallback/menu and transparent top-level OSD layers. **Small configuration defect:** when `display.user` is empty, `startDisplayProcess` prepends configured `DISPLAY`/`XAUTHORITY` before `os.Environ()`. Go `exec.Cmd.Env` resolves duplicate keys using the **last** value, so inherited values overwrite the configured ones in this direct-launch path. Default production config uses `user: orangepi`, so it does not affect the current deployment, but the direct-user path and its test should be corrected before relying on it. Validation on merged commit `53ab05c`: `gofmt` clean, `go test ./...` PASS, `go vet ./...` PASS, both linux/arm64 binaries build successfully.
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: piotr/groundstation#7