Files
dmc/app/lib/transport/flight_controller_link.dart
T

63 lines
1.7 KiB
Dart

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.headingDeg,
required this.armed,
this.activeWaypointIndex,
});
final double lat;
final double lon;
final double altitudeM;
final double speedMs;
/// Kurs ueber Grund in Grad (0 = Norden, im Uhrzeigersinn) - dreht den
/// Drohnen-Marker (Doku 3.10, [DroneMarkerIcon]).
final double headingDeg;
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<void> connect();
Future<void> disconnect();
Future<void> uploadMission(FlatWaypointList mission);
Future<void> setFlightMode(FlightMode mode);
Future<void> arm();
Stream<TelemetryFrame> subscribeTelemetry();
Future<int?> readActiveWaypointIndex();
}