diff --git a/lib/src/control.dart b/lib/src/control.dart index 8b408b1..ef32c98 100644 --- a/lib/src/control.dart +++ b/lib/src/control.dart @@ -430,7 +430,7 @@ class Gen5HelloInfo { final batteryRaw = u32(body, 1) ~/ 10; return Gen5HelloInfo( helloRevision: body[0], - batteryPct: (batteryRaw >= 0 && batteryRaw <= 100) ? batteryRaw : null, + batteryPct: batteryRaw <= 100 ? batteryRaw : null, charging: (body[5] & 0x01) != 0, tsSeconds: u32(body, 6), tsSubseconds: u32(body, 10), diff --git a/lib/src/garmin.dart b/lib/src/garmin.dart index c3d4b23..8889489 100644 --- a/lib/src/garmin.dart +++ b/lib/src/garmin.dart @@ -124,7 +124,7 @@ GarminMlrPacket? garminDecodeMlr(List data) { if (data.isEmpty) return null; if ((data[0] & _kMlrFlag) != 0) { final handle = (data[0] & _kMlrHandleMask) >> _kMlrHandleShift; - return GarminMlrData(handle, Uint8List.fromList(data)); + return GarminMlrData(handle, Uint8List.fromList(data.sublist(1))); } if (data[0] != 0) return null; if (data.length < 2) return null; diff --git a/lib/src/ultrahuman.dart b/lib/src/ultrahuman.dart index 5c54c09..bae1c34 100644 --- a/lib/src/ultrahuman.dart +++ b/lib/src/ultrahuman.dart @@ -187,7 +187,7 @@ const int kUltrahumanMeasureNotOnFinger = 100; /// `offset + 32 > bytes.length` — a truncated record, never guessed at. UltrahumanRecord? parseUltrahumanRecord(List bytes, int offset) { if (offset < 0 || offset + kUltrahumanRecordLen > bytes.length) return null; - final b = Uint8List.fromList(bytes); + final b = bytes is Uint8List ? bytes : Uint8List.fromList(bytes); final d = b.buffer.asByteData(b.offsetInBytes + offset); return UltrahumanRecord( tsA: d.getUint32(0, Endian.little), diff --git a/test/garmin_test.dart b/test/garmin_test.dart index 6529a59..05fad1c 100644 --- a/test/garmin_test.dart +++ b/test/garmin_test.dart @@ -114,6 +114,7 @@ void main() { final decoded = garminDecodeMlr([0x80 | (2 << 4), 1, 2, 3]); expect(decoded, isA()); expect((decoded as GarminMlrData).handle, 2); + expect(decoded.payload, [1, 2, 3], reason: 'routing byte 0 must be stripped'); }); test('a non-flagged, non-zero first byte is rejected, not a data frame',