encodeLocationMessage function
Implementation
List<int> encodeLocationMessage({
required Location location,
required double altitudePressure,
required double altitudeGeodetic,
required double height,
required double verticalSpeed,
required double horizontalSpeed,
required int direction,
required Duration timestamp,
}) {
// second byte contains flags
final eastWestBit = direction < 180 ? 0 : 1;
final secondByte =
(OperationalStatus.airborne.value << 4) +
(HeightType.aboveGroundLevel.value << 2) +
(eastWestBit << 1);
final locationAccuracyByte =
(VerticalAccuracy.meters_1.value << 4) +
HorizontalAccuracy.meters_1.value;
final baroAndSpeedAccuracyByte =
(VerticalAccuracy.meters_1.value << 4) +
SpeedAccuracy.meterPerSecond_1.value;
return mergeFieldsToMessage([
encodeField(encodeFirstByte, MessageType.location),
[secondByte],
encodeField(encodeDirection, direction),
encodeField(encodeHorizontalSpeed, horizontalSpeed),
encodeField(encodeVerticalSpeed, verticalSpeed),
encodeField(encodeCoordinate, location.latitude),
encodeField(encodeCoordinate, location.longitude),
encodeField(encodeAltitude, altitudePressure),
encodeField(encodeAltitude, altitudeGeodetic),
encodeField(encodeAltitude, height),
[locationAccuracyByte, baroAndSpeedAccuracyByte],
encodeField(encodeLocationTimestamp, timestamp),
encodeField(encodeTimestampAccuracy, const Duration(milliseconds: 500)),
[0x00], // filler byte
]);
}