Files
kaptan/ground-suite/README.md
T

2.6 KiB

Ground Suite

Ground Suite is Kaptan's desktop ground-control software. Its application identifier is com.orkavian.ground_suite.

Current scope

The first vertical slice is a read-only observability console. It uses a deterministic replay fixture to present a vehicle identity, heartbeat state, telemetry presence, ordinary logs, runtime errors, and orderly-shutdown observations. It never sends bytes to a vehicle.

This is deliberate: the current F722 firmware rejects every inbound MAVLink frame, and kaptan-sitl serve has no MAVLink endpoint. A connected-looking UI must not suggest the vehicle is controllable, safe, armed, or writable.

Architecture

VehicleDataPort (replay now; MAVLink adapter later)
        -> typed observation-or-drop updates
        -> Riverpod observability state
        -> Overview / Diagnostics presentation

MavlinkByteSource and MavlinkEventDecoder are receive-only seams. The future decoder must combine pinned MAVLink Common definitions with Kaptan's kaptan.xml root, and preserve the firmware's semantic rules for bounded KAPTAN_LOG, KAPTAN_ERROR, and KAPTAN_SHUTDOWN payloads. Raw severity, shutdown-reason, and diagnostic-flag values remain visible even when an app does not yet recognise them. Expected malformed or unsupported frames become parser/semantic drop updates and never terminate the observation stream.

Development

From the repository root:

nix develop -c flutter analyze ground-suite
nix develop -c dart format --set-exit-if-changed ground-suite
nix develop -c sh -c 'cd ground-suite && flutter test'
nix develop -c sh -c 'cd ground-suite && flutter run -d linux'

Linux is the first tested desktop runner. Native macOS and Windows runners will be added only with their respective CI coverage.

Deliberately deferred work

  • TODO(gcs-live-mavlink): generated MAVLink Common plus custom-dialect bindings, a MAVLink 2 receive parser, semantic validation, and serial/UDP/recording endpoints.
  • TODO(gcs-connection): endpoint lifecycle, reconnect generation, link-loss policy, and parser/semantic-drop accounting sourced from real frames.
  • TODO(gcs-config): descriptor-driven configuration UI only after firmware has authenticated ingress, source binding, persistent anti-replay state, target storage, and a disarmed atomic activation path.
  • TODO(gcs-upload): CBOR import/export only through the reviewed transaction protocol; never treat a local file as active vehicle configuration.
  • TODO(gcs-control): arm, command, calibration, and shutdown workflows need their own reviewed authority and safety contracts.