packMessage method
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);
}