drone status menue with status and critical event log implemented
This commit is contained in:
@@ -35,6 +35,8 @@ class TelemetryFrame {
|
||||
required this.headingDeg,
|
||||
required this.armed,
|
||||
required this.batteryPercent,
|
||||
required this.batteryVoltage,
|
||||
required this.currentA,
|
||||
required this.linkQuality,
|
||||
required this.snrDb,
|
||||
required this.hdop,
|
||||
@@ -65,6 +67,14 @@ class TelemetryFrame {
|
||||
/// Akku-Ladestand in Prozent (0-100).
|
||||
final int batteryPercent;
|
||||
|
||||
/// Akkuspannung in Volt (siehe parseMspInavAnalogVoltage in
|
||||
/// msp_telemetry_codec.dart).
|
||||
final double batteryVoltage;
|
||||
|
||||
/// Aktuelle Stromaufnahme in Ampere (siehe parseMspInavAnalogAmperage in
|
||||
/// msp_telemetry_codec.dart).
|
||||
final double currentA;
|
||||
|
||||
/// Empfaenger-Linkqualitaet in Prozent (0-100).
|
||||
final int linkQuality;
|
||||
|
||||
|
||||
@@ -95,6 +95,11 @@ class MockFlightControllerLink implements FlightControllerLink {
|
||||
headingDeg: _heading,
|
||||
armed: _armed,
|
||||
batteryPercent: _batteryPercent.round(),
|
||||
// 6S-Akku (22.2V nominal), Spannung sinkt mit dem Mock-Ladestand
|
||||
// mit, damit auch die neue Statusanzeige (Doku: "Drone battery
|
||||
// Voltage") auf Werteaenderungen reagiert.
|
||||
batteryVoltage: 18.0 + (_batteryPercent / 100) * 6.0,
|
||||
currentA: 12.5,
|
||||
linkQuality: 95,
|
||||
snrDb: 9,
|
||||
hdop: 0.9,
|
||||
|
||||
@@ -138,6 +138,20 @@ MspNavMode parseMspNavMode(Uint8List payload) {
|
||||
/// 0-100 berechnet, siehe [MspCommands.inavAnalog]).
|
||||
int parseMspInavAnalogBatteryPercent(Uint8List payload) => payload[21];
|
||||
|
||||
/// Parst die `MSP2_INAV_ANALOG`-Antwort und liefert die Akkuspannung in Volt
|
||||
/// (Offset 1, u16 in 0.01V-Schritten - `battery.c`: `static uint16_t vbat`,
|
||||
/// Kommentar "battery voltage in 0.01V steps", siehe [MspCommands.inavAnalog]).
|
||||
double parseMspInavAnalogVoltage(Uint8List payload) =>
|
||||
ByteData.sublistView(payload).getUint16(1, Endian.little) / 100.0;
|
||||
|
||||
/// Parst die `MSP2_INAV_ANALOG`-Antwort und liefert die aktuelle
|
||||
/// Stromaufnahme in Ampere (Offset 3, `fc_msp.c`: `sbufWriteU16(dst,
|
||||
/// getAmperage())` - "send amperage in 0.01 A steps", `getAmperage()` selbst
|
||||
/// liefert `int16_t`, deshalb vorzeichenbehaftet gelesen, siehe
|
||||
/// [MspCommands.inavAnalog]).
|
||||
double parseMspInavAnalogAmperage(Uint8List payload) =>
|
||||
ByteData.sublistView(payload).getInt16(3, Endian.little) / 100.0;
|
||||
|
||||
/// 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]).
|
||||
|
||||
@@ -39,6 +39,8 @@ class MspTelemetryPoller {
|
||||
bool _armed = false;
|
||||
int? _activeWaypointIndex;
|
||||
int _batteryPercent = 0;
|
||||
double _batteryVoltage = 0;
|
||||
double _currentA = 0;
|
||||
int _linkQuality = 0;
|
||||
int _snrDb = 0;
|
||||
int _navMode = 0;
|
||||
@@ -86,9 +88,10 @@ class MspTelemetryPoller {
|
||||
final navMode = parseMspNavMode(navStatusPayload);
|
||||
_navMode = navMode.mode;
|
||||
_flightMode = navMode.formatted;
|
||||
_batteryPercent = parseMspInavAnalogBatteryPercent(
|
||||
await _client.request(MspCommands.inavAnalog),
|
||||
);
|
||||
final analogPayload = await _client.request(MspCommands.inavAnalog);
|
||||
_batteryPercent = parseMspInavAnalogBatteryPercent(analogPayload);
|
||||
_batteryVoltage = parseMspInavAnalogVoltage(analogPayload);
|
||||
_currentA = parseMspInavAnalogAmperage(analogPayload);
|
||||
final linkStatsPayload = await _client.request(MspCommands.inavLinkStats);
|
||||
_linkQuality = parseMspLinkQuality(linkStatsPayload);
|
||||
_snrDb = parseMspLinkStatsSnr(linkStatsPayload);
|
||||
@@ -105,6 +108,8 @@ class MspTelemetryPoller {
|
||||
headingDeg: gps.headingDeg,
|
||||
armed: _armed,
|
||||
batteryPercent: _batteryPercent,
|
||||
batteryVoltage: _batteryVoltage,
|
||||
currentA: _currentA,
|
||||
linkQuality: _linkQuality,
|
||||
snrDb: _snrDb,
|
||||
hdop: gps.hdop,
|
||||
|
||||
Reference in New Issue
Block a user