packMessage method

Uint8List packMessage(
  1. int command, {
  2. String? data,
})

Implementation

Uint8List packMessage(int command, {String? data}) {
  List<int> message = [];

  debugPrint(
    "Command: 0x${command.toRadixString(16).padLeft(2, '0').toUpperCase()}",
  );
  debugPrint("Data to be send: ${data?.readable}");

  // PRE
  message.add(Separator.PRE.value);

  // LEN = 4 (LEN) + 1 (SEQ) + 4 (CMD) + data.length + 1 (PST) + 0x20
  final dataBytes = toAscii(data);
  final lenValue =
      StaticBytes.LEN.size +
      StaticBytes.SEQ.size +
      StaticBytes.CMD.size +
      dataBytes.length +
      StaticBytes.PST.size +
      0x20;
  message.addAll(encodeAsciiHex(lenValue));

  // SEQ
  message.add(sequance);

  // CMD (e.g. 0x23 → '0023' → ASCII hex)
  message.addAll(encodeAsciiHex(command));

  // DATA (plain ASCII bytes)
  message.addAll(dataBytes);

  // PST
  message.add(Separator.PST.value);

  // BCC (sum from LEN to PST)
  final bccEndIndex = message.lastIndexOf(Separator.PST.value) + 1;
  final bccSum = message
      .sublist(StaticBytes.LEN.offset, bccEndIndex)
      .fold<int>(0, (a, b) => a + b);
  message.addAll(encodeAsciiHex(bccSum));

  // EOT
  message.add(Separator.EOT.value);

  return Uint8List.fromList(message);
}