import '../io_tool/io_manager.dart'; import '../io_tool/io_tool.dart'; import 'io_type.dart'; abstract class IOData { List messageDetail(); } abstract class SenderProtocol extends IOData { CommandType? commandType; //指令类型 final int header = 0XEF01EE02; //帧头 固定取值 0XEF01EE02,长度 4 字节 final int ask = 0X01 ; // 包类型:0X01 表示请求包,0X11 表示应答包,长度 1 字节 int? _commandIndex; //帧序号 final int identifier = 0x22 ; // 高 4 位表示包版本,低 4 位用来指示后面数据的加密类型,长度为 1 字节,加密类型取值说明,0:明文,1:AES128,2:SM4(事先约定密钥),3:SM4(设备指定密钥) List? commandData = []; //数据域 final int? tail = 0xFF; //帧尾 SenderProtocol(this.commandType) { _commandIndex = IoManager().commandIndex; } //TODO:拼装数据 List packageData() { commandData = messageDetail(); List commandList = []; commandList.add(header); //帧头 commandList.add(_commandIndex!); //帧序号 commandList.addAll(intToInt8List(dataSourceLength())); int type = commandType!.typeValue; commandList.addAll(intToInt8List(type)); //指令类型 commandList.addAll(commandData!); //数据域 commandList.add(checkSum(commandList)); //校验和 commandList.add(tail!); //帧尾 //帧头 // commandList.add(0xEF); // commandList.add(0x01); // commandList.add(0xEE); // commandList.add(0x02); return commandList; } //TODO:校验和 int dataSourceLength() => commandData!.length; }