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
@@ -29,6 +29,7 @@ Timer _startFakeFlightController(LoopbackTransport transport) {
d.setInt32(2, 525200000, Endian.little); // lat 52.52
d.setInt32(6, 134050000, Endian.little); // lon 13.405
d.setUint16(12, 500, Endian.little); // 5.00 m/s
d.setUint16(14, 2700, Endian.little); // 270.0 deg
payload = d.buffer.asUint8List();
case MspCommands.altitude:
final d = ByteData(10);
@@ -67,6 +68,7 @@ void main() {
expect(frame.lon, closeTo(13.405, 1e-6));
expect(frame.altitudeM, closeTo(50.0, 1e-6));
expect(frame.speedMs, closeTo(5.0, 1e-6));
expect(frame.headingDeg, closeTo(270.0, 1e-6));
await link.disconnect();
responder.cancel();
@@ -28,6 +28,7 @@ void main() {
expect(reading.lat, closeTo(52.52, 1e-9));
expect(reading.lon, closeTo(13.405, 1e-9));
expect(reading.speedMs, closeTo(12.34, 1e-9));
expect(reading.headingDeg, closeTo(90.0, 1e-9));
});
test('fixType 0 bedeutet kein Fix', () {
+23 -2
View File
@@ -25,6 +25,7 @@ import 'package:dmc_app/ui/providers/geocoding_provider.dart';
import 'package:dmc_app/ui/providers/mission_meta_provider.dart';
import 'package:dmc_app/ui/providers/sharing_provider.dart';
import 'package:dmc_app/ui/providers/telemetry_provider.dart';
import 'package:dmc_app/transport/mock/mock_flight_controller_link.dart';
import 'package:dmc_app/ui/widgets/full_value_chart.dart';
import 'package:dmc_app/ui/widgets/halo_menu.dart';
import 'package:dmc_app/ui/widgets/header_wind_pill.dart';
@@ -68,8 +69,21 @@ class _FakeSharingService extends SharingService {
// path_provider-Plugin (echtes Dateisystem) benoetigt wird.
AppDatabase _testDatabase() => AppDatabase.forTesting(NativeDatabase.memory());
// flightControllerLinkProvider waehlt inzwischen je nach Verbindungsart
// (Settings-Default: WLAN) zwischen echtem MSP-ueber-UDP-Link und dem Mock -
// in Tests immer explizit den Mock erzwingen, sonst wuerde der Fly-Modus
// versuchen, einen echten Platform-Channel (WifiNetworkSpecifier) zu
// verwenden, der in der Testumgebung nie eine Antwort liefert und den Test
// haengen liesse.
ProviderContainer _testContainer() => ProviderContainer(
overrides: [appDatabaseProvider.overrideWithValue(_testDatabase())],
overrides: [
appDatabaseProvider.overrideWithValue(_testDatabase()),
flightControllerLinkProvider.overrideWith((ref) {
final link = MockFlightControllerLink();
ref.onDispose(link.disconnect);
return link;
}),
],
);
/// Der Fly-Modus startet ueber telemetryProvider einen Mock-Telemetrie-
@@ -81,7 +95,14 @@ Future<void> _stopTelemetry(ProviderContainer container) =>
container.read(flightControllerLinkProvider).disconnect();
Widget _wrap(Widget child) => ProviderScope(
overrides: [appDatabaseProvider.overrideWithValue(_testDatabase())],
overrides: [
appDatabaseProvider.overrideWithValue(_testDatabase()),
flightControllerLinkProvider.overrideWith((ref) {
final link = MockFlightControllerLink();
ref.onDispose(link.disconnect);
return link;
}),
],
child: BlocProvider(
create: (_) => AppModeCubit(),
child: MaterialApp(home: child),