encode method

Uint8List encode(
  1. IsoMsg message
)

Implementation

Uint8List encode(IsoMsg message) {
  final Uint8List? header = message.isoHeader;
  if (header == null) throw StateError("message has no link header");
  if (header.length != headerLength) throw StateError("link header must be $headerLength bytes, got ${header.length}");

  message.recalcBitMap();
  final IsoBuffer body = IsoBuffer.allocate(maxMessageSize);
  packager.pack(message, body);
  final Uint8List bodyBytes = body.toBytes();

  final int totalLength = bodyBytes.length + header.length;
  if (totalLength > 0xFFFF) throw StateError("message too long: $totalLength");

  final Uint8List frame = Uint8List(lengthBytes + totalLength);
  frame[0] = totalLength >> 8 & 0xFF;
  frame[1] = totalLength & 0xFF;
  frame.setRange(lengthBytes, lengthBytes + header.length, header);
  frame.setRange(lengthBytes + header.length, frame.length, bodyBytes);
  return frame;
}