msp over wifi implemented

This commit is contained in:
Constantin Leue
2026-08-02 09:20:05 +02:00
parent 24db38dc33
commit 6cfb82bd77
11 changed files with 155 additions and 13 deletions
+26 -5
View File
@@ -1,16 +1,37 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../transport/connection_type.dart';
import '../../transport/flight_controller_link.dart';
import '../../transport/mock/mock_flight_controller_link.dart';
import '../../transport/msp/msp_flight_controller_link.dart';
import 'connection_settings_provider.dart';
import 'wifi_connection_provider.dart';
/// FlightControllerLink fuer den Fly-Modus (Doku 3.1) - aktuell fest auf den
/// Mock verdrahtet, bis ein echter Transport (MSP, Doku 4.19) existiert.
/// FlightControllerLink fuer den Fly-Modus (Doku 3.1): bei WLAN als
/// gewaehlter Verbindungsart ein echter MSP-Link ueber den UDP-Transport,
/// sonst (Bluetooth/5G/USB, oder solange die Einstellungen noch nicht
/// geladen sind) weiterhin der Mock fuer UI-Entwicklung ohne Hardware -
/// Bluetooth ist auf der eingesetzten mLRS-Bruecke ohnehin nicht moeglich
/// (Doku Kommunikationsschicht v2, Abschnitt 1), 5G/USB sind noch nicht
/// umgesetzt.
///
/// connectionType wird bewusst per ref.read() einmalig beim Eintritt in den
/// Fly-Modus gelesen, nicht reaktiv beobachtet - sonst wuerde jede
/// Einstellungsaenderung waehrend des Flugs (z.B. Tippen im
/// SSID-Praefix-Feld, das ueberall im Settings-Screen ein
/// `ref.invalidate(connectionSettingsProvider)` ausloest) einen Neuaufbau
/// dieses Providers samt Trennen/Neuverbinden des Transports ausloesen.
///
/// autoDispose: verbindet erst, wenn der Fly-Screen tatsaechlich beobachtet
/// wird, und trennt/stoppt den Mock-Ticker wieder, sobald niemand mehr
/// zuhoert (z.B. Rueckkehr in den Plan-Modus) statt endlos im Hintergrund
/// wird, und trennt sich wieder (Doku Abschnitt 8: "Verlassen des
/// Fly-Modus gibt den Netz-Request frei"), sobald niemand mehr zuhoert
/// (z.B. Rueckkehr in den Plan-Modus) statt endlos im Hintergrund
/// weiterzulaufen.
final flightControllerLinkProvider = Provider.autoDispose<FlightControllerLink>((ref) {
final link = MockFlightControllerLink();
final connectionType = ref.read(connectionSettingsProvider).value?.connectionType;
final FlightControllerLink link = connectionType == ConnectionType.wifi
? MspFlightControllerLink(transport: ref.watch(wifiTransportProvider))
: MockFlightControllerLink();
ref.onDispose(link.disconnect);
return link;
});