encodeSystemMessage function

List<int> encodeSystemMessage({
  1. required Location operatorLocation,
  2. required double operatorAltitude,
  3. required int areaCount,
  4. required int areaRadius,
  5. required double areaCeiling,
  6. required double areaFloor,
})

Implementation

List<int> encodeSystemMessage({
  required Location operatorLocation,
  required double operatorAltitude,
  required int areaCount,
  required int areaRadius,
  required double areaCeiling,
  required double areaFloor,
}) {
  // second byte also contains UA classification flag
  final secondByte =
      (ClassificationType.europeanUnion.value << 2) +
      OperatorLocationType.takeOff.value;

  return mergeFieldsToMessage([
    encodeField(encodeFirstByte, MessageType.system),
    [secondByte],
    encodeField(encodeCoordinate, operatorLocation.latitude),
    encodeField(encodeCoordinate, operatorLocation.longitude),
    encodeField(encodeAreaCount, areaCount),
    encodeField(encodeAreaRadius, areaRadius),
    encodeField(encodeAltitude, areaCeiling),
    encodeField(encodeAltitude, areaFloor),
    encodeField(
      encodeEUClassification,
      const UAClassificationEurope(
        uaCategoryEurope: UACategoryEurope.EUOpen,
        uaClassEurope: UAClassEurope.EUClass_0,
      ),
    ),
    encodeField(encodeAltitude, operatorAltitude),
    encodeField(encodeODIDEpochTimestamp, DateTime.now()),
    [0x00], // filler byte
  ]);
}