drone status menue with status and critical event log implemented

This commit is contained in:
Constantin Leue
2026-08-04 23:15:56 +02:00
parent 75736793f2
commit 8e4df2d0d3
15 changed files with 571 additions and 24 deletions
@@ -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,