49 lines
1.6 KiB
Dart
49 lines
1.6 KiB
Dart
|
|
import '../io_tool/io_manager.dart';
|
|||
|
|
import '../io_tool/io_tool.dart';
|
|||
|
|
import 'io_type.dart';
|
|||
|
|
|
|||
|
|
abstract class IOData {
|
|||
|
|
List<int> 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<int>? commandData = []; //数据域
|
|||
|
|
final int? tail = 0xFF; //帧尾
|
|||
|
|
|
|||
|
|
SenderProtocol(this.commandType) {
|
|||
|
|
_commandIndex = IoManager().commandIndex;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//TODO:拼装数据
|
|||
|
|
List<int> packageData() {
|
|||
|
|
commandData = messageDetail();
|
|||
|
|
List<int> 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;
|
|||
|
|
|
|||
|
|
}
|