import '../domain/waypoint/flat_waypoint_list.dart'; /// Abstrakte Flugmodi, protokollunabhaengig (Architektur-Doku 3.1). enum FlightMode { missionRun, guidedPoint, returnHome, hold } /// Feature-Flags des angebundenen Flightcontrollers (Doku 3.1). class FcCapabilities { const FcCapabilities({ required this.supportsMultiMission, required this.supportsInFlightUpload, required this.maxWaypoints, }); final bool supportsMultiMission; final bool supportsInFlightUpload; final int maxWaypoints; } /// Normalisiertes Telemetrie-Frame, das an die UI weitergereicht wird (Doku 3.4). class TelemetryFrame { const TelemetryFrame({ required this.lat, required this.lon, required this.altitudeM, required this.speedMs, required this.armed, this.activeWaypointIndex, }); final double lat; final double lon; final double altitudeM; final double speedMs; final bool armed; final int? activeWaypointIndex; } /// Zentrale Abstraktion fuer alle Flightcontroller-Interaktionen (Doku 3.1). /// Implementierungen: MspFlightControllerLink (iNAV), MavlinkFlightControllerLink /// (ArduPilot, Post-MVP), MockFlightControllerLink (Tests ohne Hardware). abstract class FlightControllerLink { FcCapabilities get capabilities; Future connect(); Future disconnect(); Future uploadMission(FlatWaypointList mission); Future setFlightMode(FlightMode mode); Future arm(); Stream subscribeTelemetry(); Future readActiveWaypointIndex(); }