add telemetry messages: rx link quality, battery percentage, flight mode, relative altitude
This commit is contained in:
@@ -43,7 +43,16 @@ Timer _startFakeFlightController(
|
||||
d.setUint32(9, 1 << 2, Endian.little); // ARMED
|
||||
payload = d.buffer.asUint8List();
|
||||
case MspCommands.navStatus:
|
||||
payload = Uint8List.fromList([0, 0, 0, 3, 0, 0, 0]); // WP #3 aktiv
|
||||
// mode=3 (Nav/Waypoint), state=5 (WP_ENROUTE), WP #3 aktiv.
|
||||
payload = Uint8List.fromList([3, 5, 0, 3, 0, 0, 0]);
|
||||
case MspCommands.inavAnalog:
|
||||
final d = ByteData(24);
|
||||
d.setUint8(21, 77); // Batterie-Prozent
|
||||
payload = d.buffer.asUint8List();
|
||||
case MspCommands.inavLinkStats:
|
||||
final d = ByteData(3);
|
||||
d.setUint8(1, 88); // Linkqualitaet %
|
||||
payload = d.buffer.asUint8List();
|
||||
default:
|
||||
payload = Uint8List(0);
|
||||
}
|
||||
@@ -65,7 +74,10 @@ void main() {
|
||||
final link = MspFlightControllerLink(transport: transport);
|
||||
|
||||
await link.connect();
|
||||
final frame = await link.subscribeTelemetry().first;
|
||||
// Armed/Akku/Link/Flugmodus/aktiver Wegpunkt werden nur jeden dritten
|
||||
// Zyklus aufgefrischt (siehe MspTelemetryPoller._statusEveryNCycles) -
|
||||
// erst ab dem dritten emittierten Frame garantiert befuellt.
|
||||
final frame = await link.subscribeTelemetry().skip(2).first;
|
||||
|
||||
expect(frame.lat, closeTo(52.52, 1e-6));
|
||||
expect(frame.lon, closeTo(13.405, 1e-6));
|
||||
@@ -74,6 +86,9 @@ void main() {
|
||||
expect(frame.altitudeM, closeTo(50.0, 1e-6));
|
||||
expect(frame.speedMs, closeTo(5.0, 1e-6));
|
||||
expect(frame.headingDeg, closeTo(270.0, 1e-6));
|
||||
expect(frame.batteryPercent, 77);
|
||||
expect(frame.linkQuality, 88);
|
||||
expect(frame.flightMode, 'Waypoint mission (en route to WP)');
|
||||
|
||||
await link.disconnect();
|
||||
responder.cancel();
|
||||
|
||||
@@ -94,4 +94,48 @@ void main() {
|
||||
expect(parseMspNavStatusActiveWaypoint(navStatusPayload(5)), 5);
|
||||
});
|
||||
});
|
||||
|
||||
group('parseMspNavMode/MspNavMode.formatted', () {
|
||||
Uint8List navStatusPayload(int mode, int state) {
|
||||
return Uint8List.fromList([mode, state, 0, 0, 0, 0, 0]);
|
||||
}
|
||||
|
||||
test('mode 0 (None) ohne state', () {
|
||||
final nav = parseMspNavMode(navStatusPayload(0, 0));
|
||||
expect(nav.mode, 0);
|
||||
expect(nav.state, 0);
|
||||
expect(nav.formatted, 'Idle');
|
||||
});
|
||||
|
||||
test('mode 3 (Nav/Waypoint) + state 5 (WP_ENROUTE)', () {
|
||||
final nav = parseMspNavMode(navStatusPayload(3, 5));
|
||||
expect(nav.formatted, 'Waypoint mission (en route to WP)');
|
||||
});
|
||||
|
||||
test('mode 2 (RTH) + state 15 (RTH_CLIMB)', () {
|
||||
final nav = parseMspNavMode(navStatusPayload(2, 15));
|
||||
expect(nav.formatted, 'Return to home (climbing)');
|
||||
});
|
||||
|
||||
test('unbekannter mode faellt auf Nummer zurueck', () {
|
||||
final nav = parseMspNavMode(navStatusPayload(7, 0));
|
||||
expect(nav.formatted, 'Unknown (7)');
|
||||
});
|
||||
});
|
||||
|
||||
group('parseMspInavAnalogBatteryPercent', () {
|
||||
test('liest Batterie-Prozent an Offset 21', () {
|
||||
final payload = Uint8List(24);
|
||||
payload[21] = 42;
|
||||
expect(parseMspInavAnalogBatteryPercent(payload), 42);
|
||||
});
|
||||
});
|
||||
|
||||
group('parseMspLinkQuality', () {
|
||||
test('liest Linkqualitaet an Offset 1', () {
|
||||
final payload = Uint8List(3);
|
||||
payload[1] = 87;
|
||||
expect(parseMspLinkQuality(payload), 87);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user