drone status pill in footer for fly mode implemented. footer layout and sizes homogenized
This commit is contained in:
@@ -11,6 +11,7 @@ class MspGpsReading {
|
||||
required this.lon,
|
||||
required this.speedMs,
|
||||
required this.headingDeg,
|
||||
required this.hdop,
|
||||
});
|
||||
|
||||
/// 0 = kein Fix (`fc_msp.c`: `gpsSol.fixType`).
|
||||
@@ -24,6 +25,13 @@ class MspGpsReading {
|
||||
/// `groundCourse` - nur bei [hasFix] aussagekraeftig.
|
||||
final double headingDeg;
|
||||
|
||||
/// Horizontale Streuung der Positionsschaetzung (kleiner = besser, ~1.0
|
||||
/// oder darunter ist gut) - `gpsSol.hdop / HDOP_SCALE` (`gps.h`:
|
||||
/// `#define HDOP_SCALE (100)`). Ohne Fix meldet iNAV hier 9999/100 =
|
||||
/// 99.99 (`gps.c`: `gpsSol.hdop = 9999`), also einen sehr grossen statt
|
||||
/// eines fehlenden Werts.
|
||||
final double hdop;
|
||||
|
||||
bool get hasFix => fixType != 0;
|
||||
}
|
||||
|
||||
@@ -37,6 +45,7 @@ MspGpsReading parseMspRawGps(Uint8List payload) {
|
||||
lon: data.getInt32(6, Endian.little) / 1e7,
|
||||
speedMs: data.getUint16(12, Endian.little) / 100.0,
|
||||
headingDeg: data.getUint16(14, Endian.little) / 10.0,
|
||||
hdop: data.getUint16(16, Endian.little) / 100.0,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -133,3 +142,11 @@ int parseMspInavAnalogBatteryPercent(Uint8List payload) => payload[21];
|
||||
/// Empfaenger-Linkqualitaet in Prozent (Offset 1, `rxLinkStatistics.uplinkLQ`
|
||||
/// - bereits 0-100, siehe [MspCommands.inavLinkStats]).
|
||||
int parseMspLinkQuality(Uint8List payload) => payload[1];
|
||||
|
||||
/// Parst die `MSP2_INAV_GET_LINK_STATS`-Antwort und liefert das
|
||||
/// Signal-Rausch-Verhaeltnis des Uplinks in dB (Offset 2,
|
||||
/// `rxLinkStatistics.uplinkSNR` - `int8_t`, `fc_msp.c` schreibt
|
||||
/// `(uint8_t)rxLinkStatistics.uplinkSNR`, das Byte muss also vorzeichen-
|
||||
/// behaftet zurueckgelesen werden, siehe [MspCommands.inavLinkStats]).
|
||||
int parseMspLinkStatsSnr(Uint8List payload) =>
|
||||
ByteData.sublistView(payload).getInt8(2);
|
||||
|
||||
@@ -40,6 +40,8 @@ class MspTelemetryPoller {
|
||||
int? _activeWaypointIndex;
|
||||
int _batteryPercent = 0;
|
||||
int _linkQuality = 0;
|
||||
int _snrDb = 0;
|
||||
int _navMode = 0;
|
||||
String _flightMode = 'Idle';
|
||||
|
||||
Stream<TelemetryFrame> get frames => _framesController.stream;
|
||||
@@ -81,13 +83,15 @@ class MspTelemetryPoller {
|
||||
);
|
||||
final navStatusPayload = await _client.request(MspCommands.navStatus);
|
||||
_activeWaypointIndex = parseMspNavStatusActiveWaypoint(navStatusPayload);
|
||||
_flightMode = parseMspNavMode(navStatusPayload).formatted;
|
||||
final navMode = parseMspNavMode(navStatusPayload);
|
||||
_navMode = navMode.mode;
|
||||
_flightMode = navMode.formatted;
|
||||
_batteryPercent = parseMspInavAnalogBatteryPercent(
|
||||
await _client.request(MspCommands.inavAnalog),
|
||||
);
|
||||
_linkQuality = parseMspLinkQuality(
|
||||
await _client.request(MspCommands.inavLinkStats),
|
||||
);
|
||||
final linkStatsPayload = await _client.request(MspCommands.inavLinkStats);
|
||||
_linkQuality = parseMspLinkQuality(linkStatsPayload);
|
||||
_snrDb = parseMspLinkStatsSnr(linkStatsPayload);
|
||||
}
|
||||
|
||||
if (!_framesController.isClosed) {
|
||||
@@ -102,6 +106,9 @@ class MspTelemetryPoller {
|
||||
armed: _armed,
|
||||
batteryPercent: _batteryPercent,
|
||||
linkQuality: _linkQuality,
|
||||
snrDb: _snrDb,
|
||||
hdop: gps.hdop,
|
||||
navMode: _navMode,
|
||||
flightMode: _flightMode,
|
||||
activeWaypointIndex: _activeWaypointIndex,
|
||||
));
|
||||
|
||||
Reference in New Issue
Block a user