From 385a667a719f1fd4cf3ee992878424c5555e1404 Mon Sep 17 00:00:00 2001 From: Eoin Motherway <25342760+YuKitsune@users.noreply.github.com> Date: Sun, 12 Jul 2026 18:21:37 +1000 Subject: [PATCH] wip: JetBrains Air plan --- .air/plans/ads-c-support.plan.md | 135 +++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 .air/plans/ads-c-support.plan.md diff --git a/.air/plans/ads-c-support.plan.md b/.air/plans/ads-c-support.plan.md new file mode 100644 index 0000000..0bab160 --- /dev/null +++ b/.air/plans/ads-c-support.plan.md @@ -0,0 +1,135 @@ +# ADS-C Support for CPDLC Plugin and Server + +## Context + +The CPDLC server relays CPDLC messages between vatSys controllers and aircraft on Hoppie's ACARS network, but does not handle Hoppie's `ads-c` message type (marked `// TODO: ADS-C` in `HoppieAcarsClient.cs:8` and `Plugin.cs:25`). This plan adds ADS-C support: parse ADS-C position reports from Hoppie, let controllers manually establish/cancel periodic contracts and request one-off demand reports per aircraft, and store report data in the plugin for later ASD display. + +Confirmed scope decisions: +- Contract management: manual, per aircraft, via a new dedicated ADS-C window in the plugin. +- Contract types: periodic (preset intervals 5/10/15/20/30 min) and demand only. No event contracts. +- ASD display: out of scope. Plugin stores contract state + report history so display can be built later. + +## Goal + +Controllers can establish/cancel ADS-C periodic contracts and request demand reports per aircraft from a new plugin window; the server sends the corresponding Hoppie uplinks, parses incoming reports, tracks contract state (including overdue detection), and pushes state/reports to the plugin, which stores them. + +## Approach + +Follow existing architecture end-to-end: Hoppie client parses `ads-c` packets into a new received-message type on the existing channel (made polymorphic); MediatR commands/notifications manage contract state in a new in-memory repository; SignalR hub methods + push events expose it; plugin mirrors state in a new store and presents a new WPF window via the existing WindowManager/MediatR pattern. No new frameworks. + +## Phase 0: Protocol verification (blocks all packet-format code) + +Exact Hoppie ADS-C packet syntax must be verified, not assumed. Believed shape: uplink `REQUEST PERIODIC` (interval handling TBD) / `REQUEST CANCEL`, one-off demand request; downlink `REPORT