import 'dart:convert'; import '../io_reply.dart'; import '../io_sender.dart'; import '../io_tool/io_tool.dart'; import '../io_type.dart'; import '../sm4Encipher/sm4.dart'; class GetStarLockStatuInfoCommand extends SenderProtocol { String? lockID; String? userID; List? privateKey; GetStarLockStatuInfoCommand({ this.lockID, this.userID, this.privateKey }) : super(CommandType.readStarLockStatusInfo); @override List messageDetail() { List data = []; List ebcData = []; // 指令类型 int type = commandType!.typeValue; double typeDouble = type / 256; int type1 = typeDouble.toInt(); int type2 = type % 256; data.add(type1); data.add(type2); // 锁id 40 int lockIDLength = utf8.encode(lockID!).length; // print("addUserLockIDLength:$lockIDLength utf8.encode(lockID!)${utf8.encode(lockID!)}"); data.addAll(utf8.encode(lockID!)); data = getFixedLengthList(data, 40 - lockIDLength); //userID 要接受钥匙的用户的useid 20 int userIDLength = utf8.encode(userID!).length; // print("userIDLength:$userIDLength utf8.encode(userID!)${utf8.encode(userID!)}"); data.addAll(utf8.encode(userID!)); data = getFixedLengthList(data, 20 - userIDLength); if ((data.length % 16) != 0) { int add = (16 - data.length % 16); for (int i = 0; i < add; i++) { data.add(0); } } print("${commandType!.typeName} SM4Data:$data"); // 拿到数据之后通过LockId进行SM4 ECB加密 key:544d485f633335373034383064613864 ebcData = SM4.encrypt(data, key: privateKey, mode: SM4CryptoMode.ECB); return ebcData; } } class GetStarLockStatuInfoReply extends Reply { GetStarLockStatuInfoReply.parseData(CommandType commandType, List dataDetail) : super.parseData(commandType, dataDetail) { data = dataDetail; int status = data[2]; switch(status){ case 0x00: //成功 // print("${commandType.typeValue} 数据解析成功"); // // 厂商名称 // var vendor = data.sublist(3, 23); // // print("softVersion:$softVersion"); // // // 锁设备类型 // var product = data[23]; // // print("product:product"); // // // 产品名称 // var model = data.sublist(24, 44); // // print("model:model"); // // // 软件版本 // var fwVersion = data.sublist(44, 64); // // print("fwVersion:fwVersion"); // // // 硬件版本 // var hwVersion = data.sublist(64, 84); // // print("hwVersion:hwVersion"); // // // 厂商序列号 // var serialNum0 = data.sublist(84, 100); // // print("serialNum0:serialNum0"); // // // 成品商序列号 // var serialNum1 = data.sublist(100, 116); // // print("serialNum1:serialNum1"); // // // 蓝牙名称 // var btDeviceName = data.sublist(116, 132); // // print("btDeviceName:btDeviceName"); // // // 电池剩余电量 // var battRemCap = data[132]; // // print("battRemCap:battRemCap"); // // // 重置次数 // var restoreCounter = data.sublist(133, 134); // // print("restoreCounter:restoreCounter"); // // // 重置时间 // var restoreDate = data.sublist(134, 138); // // print("restoreDate:restoreDate"); // // // 主控芯片型号 // var icPartNo = data.sublist(138, 148); // // print("icPartNo:icPartNo"); // // // 有效时间 // var indate = data.sublist(148, 152); // // print("indate:indate"); break; case 0x06: //无权限 print("${commandType.typeValue} 需要鉴权"); break; case 0x07: //无权限 print("${commandType.typeValue} 用户无权限"); break; case 0x09: // 权限校验错误 print("${commandType.typeValue} 权限校验错误"); break; default: //失败 print("${commandType.typeValue} 领锁失败"); break; } } }