Drohnen-Status-Pille zeigt bei Verbindungsverlust rot/disconnected statt eingefrorener Werte
Waehrend eines Verbindungsverlusts frieren die TelemetryFrame-Werte
bewusst ein (telemetryProvider.value bleibt auf dem letzten Stand, siehe
vorherigen Commit) - die Fusszeilen-Pille im Fly-Modus hat daraus bislang
weiterhin den zuletzt bekannten (ggf. laengst veralteten) Zustand
abgeleitet, statt den Verbindungsverlust selbst widerzuspiegeln.
- domain/telemetry/drone_status.dart: neuer DroneState.disconnected,
computeDroneStatus() bekommt einen neuen Parameter `connected` - hat
Vorrang vor allem anderen (auch vor Emergency) und uebersteuert
connectionQuality auf rot. positionQuality bleibt bewusst unveraendert
(folgt weiterhin den eingefrorenen Werten) - laut Anfrage sollen nur
Drohnen-Icon und Verbindungsqualitaet, nicht die Positionsqualitaet, rot
erzwungen werden.
- fly_screen.dart: `connected: !telemetryAsync.hasError` statt der
bisherigen Ableitung aus einzelnen Telemetriewerten.
- bottom_stats_bar.dart: neues Label/Farbe ("disconnected", rot) fuer den
neuen Zustand in der Drohnen-Status-Pille.
Auf dem Pixel_10a-Emulator verifiziert: WiFi-Verbindungsart (noch nie
verbunden) zeigt bereits korrekt rotes Papierflieger-Icon, rote
Verbindungsqualitaet, rotes Satelliten-Icon und "disconnected" in rot;
Mock-Verbindung zeigt unveraendert normal gruen "ready".
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
e5c87fba5f
commit
46e51b3920
@@ -4,8 +4,13 @@ enum SignalLevel { green, yellow, red }
|
||||
|
||||
/// Zustand der Drohne fuer das Papierflieger-Icon in der Drohnen-Status-
|
||||
/// Pille (Doku: "drone state: papierflieger icon mit farbcodierung ... mit
|
||||
/// text wie (idle, ready, armed, waypoint, error)").
|
||||
enum DroneState { idle, ready, armed, waypoint, error }
|
||||
/// text wie (idle, ready, armed, waypoint, error)"). [disconnected] deckt
|
||||
/// den Fall ab, dass der Telemetrie-Strom selbst gerade fehlerhaft ist
|
||||
/// (Doku: "Statuspille ... muss eine rote Drohne, eine rote
|
||||
/// Verbindungsqualität und den Status text in rot disconnected anzeigen"),
|
||||
/// im Unterschied zu den anderen Zustaenden, die aus (ggf. eingefrorenen,
|
||||
/// siehe computeDroneStatus) Telemetriewerten abgeleitet werden.
|
||||
enum DroneState { idle, ready, armed, waypoint, disconnected, error }
|
||||
|
||||
/// Kombiniertes Ergebnis aus [computeDroneStatus] - die drei Elemente der
|
||||
/// Fly-Modus-Drohnen-Pille (Doku: "connection quality", "position quality",
|
||||
@@ -49,12 +54,15 @@ SignalLevel _positionQuality({
|
||||
}
|
||||
|
||||
/// Zustand aus Armed-Status, GPS-Fix und dem rohen Navigationsmodus
|
||||
/// (`MW_GPS_MODE_*`, siehe TelemetryFrame.navMode) - Emergency (15) hat
|
||||
/// Vorrang vor allem anderen, "waypoint" nur solange tatsaechlich armed und
|
||||
/// im Waypoint-Missionsmodus (3) navigiert wird, "ready" markiert lediglich
|
||||
/// einen vorhandenen GPS-Fix im disarmed-Zustand (kein zusaetzlicher
|
||||
/// Qualitaets-Gate durch Positionsqualitaet - Nutzerentscheidung).
|
||||
/// (`MW_GPS_MODE_*`, siehe TelemetryFrame.navMode) - [connected] hat
|
||||
/// Vorrang vor allem anderen (kein Telemetrie-Strom heisst, keiner der
|
||||
/// anderen Werte ist aktuell), danach Emergency (15), "waypoint" nur
|
||||
/// solange tatsaechlich armed und im Waypoint-Missionsmodus (3) navigiert
|
||||
/// wird, "ready" markiert lediglich einen vorhandenen GPS-Fix im
|
||||
/// disarmed-Zustand (kein zusaetzlicher Qualitaets-Gate durch
|
||||
/// Positionsqualitaet - Nutzerentscheidung).
|
||||
DroneState _droneState({
|
||||
required bool connected,
|
||||
required bool armed,
|
||||
required bool hasFix,
|
||||
required int navMode,
|
||||
@@ -62,6 +70,7 @@ DroneState _droneState({
|
||||
const navModeEmergency = 15;
|
||||
const navModeWaypointMission = 3;
|
||||
|
||||
if (!connected) return DroneState.disconnected;
|
||||
if (navMode == navModeEmergency) return DroneState.error;
|
||||
if (armed && navMode == navModeWaypointMission) return DroneState.waypoint;
|
||||
if (armed) return DroneState.armed;
|
||||
@@ -72,7 +81,16 @@ DroneState _droneState({
|
||||
/// Reine Ableitung aus einem [TelemetryFrame] (siehe transport/
|
||||
/// flight_controller_link.dart) - kein MSP-/Protokollwissen, nur die
|
||||
/// bereits normalisierten Felder.
|
||||
///
|
||||
/// [connected] spiegelt, ob der Telemetrie-Strom gerade tatsaechlich Daten
|
||||
/// liefert (z.B. `!telemetryProvider.hasError`, siehe fly_screen.dart) -
|
||||
/// getrennt von den einzelnen Telemetriewerten, weil diese bei einem
|
||||
/// Verbindungsverlust bewusst auf ihrem letzten Stand "einfrieren" (Doku:
|
||||
/// "im Drone Detail Menü ist es okay, dass die Daten einfrieren"), die
|
||||
/// Statuspille aber trotzdem ehrlich "disconnected" anzeigen soll statt
|
||||
/// den zuletzt bekannten (ggf. laengst veralteten) Zustand fortzuschreiben.
|
||||
DroneStatus computeDroneStatus({
|
||||
required bool connected,
|
||||
required bool armed,
|
||||
required bool hasFix,
|
||||
required int numSat,
|
||||
@@ -82,8 +100,10 @@ DroneStatus computeDroneStatus({
|
||||
required int navMode,
|
||||
}) {
|
||||
return DroneStatus(
|
||||
connectionQuality: _connectionQuality(linkQuality: linkQuality, snrDb: snrDb),
|
||||
connectionQuality: connected
|
||||
? _connectionQuality(linkQuality: linkQuality, snrDb: snrDb)
|
||||
: SignalLevel.red,
|
||||
positionQuality: _positionQuality(hasFix: hasFix, numSat: numSat, hdop: hdop),
|
||||
state: _droneState(armed: armed, hasFix: hasFix, navMode: navMode),
|
||||
state: _droneState(connected: connected, armed: armed, hasFix: hasFix, navMode: navMode),
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user