Warning thresholds added in drone profile. traffic light indication in drone satus menue added. layout and content optimized
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
import '../mission/drone_profile.dart';
|
||||
import 'drone_status.dart';
|
||||
|
||||
/// Ampel-Farbcodierung je einzelnem Telemetriefeld im Drohnen-Status-Menue
|
||||
/// (Doku: "drone status felder im menue auch farblich kodieren") - anders
|
||||
/// als [computeDroneStatus] (das Verbindungs-/Positionsqualitaet je zu einem
|
||||
/// kombinierten Signal fuer die Fusszeilen-Pille zusammenfasst) bewertet
|
||||
/// dies jedes Feld einzeln anhand der Schwellwerte im aktiven [DroneProfile].
|
||||
class TelemetryFieldStatus {
|
||||
const TelemetryFieldStatus({
|
||||
required this.numSat,
|
||||
required this.hdop,
|
||||
required this.currentA,
|
||||
required this.batteryVoltage,
|
||||
required this.rxQuality,
|
||||
required this.rxSnr,
|
||||
});
|
||||
|
||||
final SignalLevel numSat;
|
||||
final SignalLevel hdop;
|
||||
final SignalLevel currentA;
|
||||
final SignalLevel batteryVoltage;
|
||||
final SignalLevel rxQuality;
|
||||
final SignalLevel rxSnr;
|
||||
}
|
||||
|
||||
/// Fuer Felder, bei denen ein HOHER Wert gut ist (Satelliten, RX-Qualitaet/
|
||||
/// -SNR): rot unterhalb [redMin], gruen ab [greenMin], dazwischen gelb.
|
||||
SignalLevel _levelHigherIsBetter(double value, double greenMin, double redMin) {
|
||||
if (value < redMin) return SignalLevel.red;
|
||||
if (value < greenMin) return SignalLevel.yellow;
|
||||
return SignalLevel.green;
|
||||
}
|
||||
|
||||
/// Fuer Felder, bei denen ein NIEDRIGER Wert gut ist (HDOP): rot oberhalb
|
||||
/// [redMax], gruen bis [greenMax], dazwischen gelb.
|
||||
SignalLevel _levelLowerIsBetter(double value, double greenMax, double redMax) {
|
||||
if (value > redMax) return SignalLevel.red;
|
||||
if (value > greenMax) return SignalLevel.yellow;
|
||||
return SignalLevel.green;
|
||||
}
|
||||
|
||||
/// Reine Ableitung aus normalisierten Telemetriewerten + den
|
||||
/// Ampel-Schwellwerten des aktiven Drohnenprofils - kein MSP-/
|
||||
/// Protokollwissen, siehe computeDroneStatus-Doku.
|
||||
TelemetryFieldStatus computeTelemetryFieldStatus({
|
||||
required int numSat,
|
||||
required bool hasFix,
|
||||
required double hdop,
|
||||
required double currentA,
|
||||
required double batteryVoltage,
|
||||
required int linkQuality,
|
||||
required int snrDb,
|
||||
required DroneProfile profile,
|
||||
}) {
|
||||
return TelemetryFieldStatus(
|
||||
numSat: _levelHigherIsBetter(
|
||||
numSat.toDouble(),
|
||||
profile.gpsSatGreenMin,
|
||||
profile.gpsSatRedMin,
|
||||
),
|
||||
// Ohne Fix ist der HDOP-Wert bedeutungslos/veraltet (siehe Anzeige in
|
||||
// drone_status_warnings_panel.dart, die dafuer bereits '—' zeigt) - dann
|
||||
// unabhaengig vom Zahlenwert rot statt eines irrefuehrend guten Signals.
|
||||
hdop: hasFix
|
||||
? _levelLowerIsBetter(hdop, profile.hdopGreenMax, profile.hdopRedMax)
|
||||
: SignalLevel.red,
|
||||
currentA: _levelLowerIsBetter(
|
||||
currentA,
|
||||
profile.currentGreenMaxA,
|
||||
profile.currentRedMaxA,
|
||||
),
|
||||
batteryVoltage: _levelHigherIsBetter(
|
||||
batteryVoltage,
|
||||
profile.batteryVoltageGreenMinV,
|
||||
profile.batteryVoltageRedMinV,
|
||||
),
|
||||
rxQuality: _levelHigherIsBetter(
|
||||
linkQuality.toDouble(),
|
||||
profile.rxQualityGreenMin,
|
||||
profile.rxQualityRedMin,
|
||||
),
|
||||
rxSnr: _levelHigherIsBetter(
|
||||
snrDb.toDouble(),
|
||||
profile.rxSnrGreenMinDb,
|
||||
profile.rxSnrRedMinDb,
|
||||
),
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user