add telemetry messages: rx link quality, battery percentage, flight mode, relative altitude
This commit is contained in:
@@ -64,3 +64,61 @@ int? parseMspNavStatusActiveWaypoint(Uint8List payload) {
|
||||
final activeWpNumber = payload[3];
|
||||
return activeWpNumber == 0 ? null : activeWpNumber;
|
||||
}
|
||||
|
||||
/// Parst `mode`/`state` aus der `MSP_NAV_STATUS`-Antwort (Byte 0/1, siehe
|
||||
/// [MspCommands.navStatus]) - Rohwerte aus `navSystemStatus_Mode_e`/
|
||||
/// `navSystemStatus_State_e` (`navigation.h`, iNAV 9.1.0). [formatted]
|
||||
/// bildet daraus eine fuer die UI lesbare Kurzbeschreibung (Doku: "drone
|
||||
/// flight mode" im Settings-Telemetriepanel).
|
||||
class MspNavMode {
|
||||
const MspNavMode({required this.mode, required this.state});
|
||||
|
||||
final int mode;
|
||||
final int state;
|
||||
|
||||
/// `MW_GPS_MODE_*`-Namen (0=None, 1=Hold, 2=RTH, 3=Nav/Waypoint,
|
||||
/// 15=Emergency) - mode 0 heisst nur "keine GPS-Nav-Uebersteuerung aktiv",
|
||||
/// nicht "Manual/Acro": die reine Fluglage (Angle/Horizon/Acro) ist ueber
|
||||
/// MSP_NAV_STATUS nicht sichtbar (dafuer waere MSP_BOXNAMES+boxModeFlags
|
||||
/// noetig, hier bewusst nicht umgesetzt).
|
||||
static const _modeNames = {0: 'Idle', 1: 'Position hold', 2: 'Return to home', 3: 'Waypoint mission', 15: 'Emergency'};
|
||||
|
||||
/// `MW_NAV_STATE_*`-Namen, nur die fuer die Kurzanzeige relevanten.
|
||||
static const _stateNames = {
|
||||
1: 'starting',
|
||||
2: 'en route',
|
||||
3: 'holding',
|
||||
4: 'holding (timed)',
|
||||
5: 'en route to WP',
|
||||
6: 'next waypoint',
|
||||
7: 'jump',
|
||||
8: 'landing',
|
||||
9: 'landing',
|
||||
10: 'landed',
|
||||
11: 'landing',
|
||||
12: 'descending',
|
||||
13: 'hover above home',
|
||||
14: 'emergency landing',
|
||||
15: 'climbing',
|
||||
};
|
||||
|
||||
String get formatted {
|
||||
final modeLabel = _modeNames[mode] ?? 'Unknown ($mode)';
|
||||
final stateLabel = _stateNames[state];
|
||||
return stateLabel == null ? modeLabel : '$modeLabel ($stateLabel)';
|
||||
}
|
||||
}
|
||||
|
||||
MspNavMode parseMspNavMode(Uint8List payload) {
|
||||
return MspNavMode(mode: payload[0], state: payload[1]);
|
||||
}
|
||||
|
||||
/// Parst die `MSP2_INAV_ANALOG`-Antwort und liefert den Akku-Ladestand in
|
||||
/// Prozent (Offset 21, `calculateBatteryPercentage()` - bereits fertig auf
|
||||
/// 0-100 berechnet, siehe [MspCommands.inavAnalog]).
|
||||
int parseMspInavAnalogBatteryPercent(Uint8List payload) => payload[21];
|
||||
|
||||
/// Parst die `MSP2_INAV_GET_LINK_STATS`-Antwort und liefert die
|
||||
/// Empfaenger-Linkqualitaet in Prozent (Offset 1, `rxLinkStatistics.uplinkLQ`
|
||||
/// - bereits 0-100, siehe [MspCommands.inavLinkStats]).
|
||||
int parseMspLinkQuality(Uint8List payload) => payload[1];
|
||||
|
||||
Reference in New Issue
Block a user