1、添加卡跟指纹循环、胁迫、限时协议。2、添加配网成功后返回锁设置功能
This commit is contained in:
parent
408b516106
commit
e55e3482bf
@ -23,7 +23,7 @@ class SenderAddFingerprintCommand extends SenderProtocol {
|
||||
int? startTime;
|
||||
int? endTime;
|
||||
int? needAuthor;
|
||||
List<int>? publicKey;
|
||||
List<int>? signKey;
|
||||
List<int>? privateKey;
|
||||
|
||||
SenderAddFingerprintCommand({
|
||||
@ -35,7 +35,7 @@ class SenderAddFingerprintCommand extends SenderProtocol {
|
||||
this.startTime,
|
||||
this.endTime,
|
||||
this.needAuthor,
|
||||
this.publicKey,
|
||||
this.signKey,
|
||||
this.privateKey,
|
||||
}) : super(CommandType.generalExtendedCommond);
|
||||
|
||||
@ -96,17 +96,16 @@ class SenderAddFingerprintCommand extends SenderProtocol {
|
||||
subData.add(0);
|
||||
} else {
|
||||
List<int> authCodeData = [];
|
||||
//KeyID
|
||||
authCodeData.addAll(utf8.encode(keyID!));
|
||||
|
||||
//authUserID
|
||||
authCodeData.addAll(utf8.encode(userID!));
|
||||
|
||||
//KeyID
|
||||
authCodeData.addAll(utf8.encode(keyID!));
|
||||
|
||||
//token 4 首次请求 Token 填 0,如果锁需要鉴权操作者身份,则会分配动态口令并在应答消息中返回,二次请求时带上。
|
||||
authCodeData.addAll(token!);
|
||||
|
||||
authCodeData.addAll(publicKey!);
|
||||
authCodeData.addAll(signKey!);
|
||||
|
||||
print("${commandType!.typeValue}-authCodeData:$authCodeData");
|
||||
|
||||
|
||||
@ -0,0 +1,185 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import '../io_tool/io_tool.dart';
|
||||
import '../sm4Encipher/sm4.dart';
|
||||
import '../io_reply.dart';
|
||||
import '../io_sender.dart';
|
||||
import '../io_type.dart';
|
||||
import 'package:crypto/crypto.dart' as crypto;
|
||||
|
||||
///TODO:添加指纹
|
||||
/*
|
||||
备注:
|
||||
删除单个指纹规则:UseCountLimit 设置为 0。删除全部指纹规则: UseCountLimit 设置为 0,FingerNo 设置为 255,userId 设置为“Delete All !@#”,只有门锁管理员才有权限
|
||||
**/
|
||||
class SenderAddFingerprintWithTimeCycleCoercionCommand extends SenderProtocol {
|
||||
|
||||
String? keyID;
|
||||
String? userID;
|
||||
int? fingerNo;
|
||||
int? useCountLimit;
|
||||
int? isForce;
|
||||
List<int>? token;
|
||||
int? isRound;
|
||||
int? weekRound;
|
||||
int? startDate;
|
||||
int? endDate;
|
||||
int? startTime;
|
||||
int? endTime;
|
||||
int? needAuthor;
|
||||
List<int>? signKey;
|
||||
List<int>? privateKey;
|
||||
|
||||
SenderAddFingerprintWithTimeCycleCoercionCommand({
|
||||
this.keyID,
|
||||
this.userID,
|
||||
this.fingerNo,
|
||||
this.useCountLimit,
|
||||
this.isForce,
|
||||
this.token,
|
||||
this.isRound,
|
||||
this.weekRound,
|
||||
this.startDate,
|
||||
this.endDate,
|
||||
this.startTime,
|
||||
this.endTime,
|
||||
this.needAuthor,
|
||||
this.signKey,
|
||||
this.privateKey,
|
||||
}) : super(CommandType.generalExtendedCommond);
|
||||
|
||||
@override
|
||||
List<int> messageDetail() {
|
||||
List<int> data = [];
|
||||
List<int> subData = [];
|
||||
List<int> ebcData = [];
|
||||
|
||||
print("pwdNopwdNopwdNopwdNo:$fingerNo");
|
||||
|
||||
// 指令类型
|
||||
int type = commandType!.typeValue;
|
||||
double typeDouble = type / 256;
|
||||
int type1 = typeDouble.toInt();
|
||||
int type2 = type % 256;
|
||||
data.add(type1);
|
||||
data.add(type2);
|
||||
|
||||
// 子命令类型
|
||||
data.add(36);
|
||||
|
||||
// keyID 40
|
||||
int keyIDLength = utf8.encode(keyID!).length;
|
||||
// print("${commandType!.typeValue}LockIDLength:$lockIDLength utf8.encode(lockID!)${utf8.encode(lockID!)}");
|
||||
subData.addAll(utf8.encode(keyID!));
|
||||
subData = getFixedLengthList(subData, 40 - keyIDLength);
|
||||
|
||||
//userID 20
|
||||
int userIDLength = utf8.encode(userID!).length;
|
||||
// print("${commandType!.typeValue}IDLength:$authUserIDLength utf8.encode(authUserID!)${utf8.encode(authUserID!)}");
|
||||
subData.addAll(utf8.encode(userID!));
|
||||
subData = getFixedLengthList(subData, 20 - userIDLength);
|
||||
|
||||
// fingerNo
|
||||
subData.add(fingerNo!);
|
||||
|
||||
// UseCountLimit
|
||||
subData.add(useCountLimit!);
|
||||
|
||||
// isForce
|
||||
subData.add(isForce!);
|
||||
|
||||
// token
|
||||
subData.addAll(token!);
|
||||
|
||||
// isRound
|
||||
subData.add(isRound!);
|
||||
|
||||
// weekRound
|
||||
subData.add(weekRound!);
|
||||
|
||||
// startDate 4
|
||||
subData.add((startDate! & 0xff000000) >> 24);
|
||||
subData.add((startDate! & 0xff0000) >> 16);
|
||||
subData.add((startDate! & 0xff00) >> 8);
|
||||
subData.add((startDate! & 0xff));
|
||||
|
||||
// endDate 4
|
||||
subData.add((endDate! & 0xff000000) >> 24);
|
||||
subData.add((endDate! & 0xff0000) >> 16);
|
||||
subData.add((endDate! & 0xff00) >> 8);
|
||||
subData.add((endDate! & 0xff));
|
||||
|
||||
// startTime 4
|
||||
subData.add((startTime! & 0xff000000) >> 24);
|
||||
subData.add((startTime! & 0xff0000) >> 16);
|
||||
subData.add((startTime! & 0xff00) >> 8);
|
||||
subData.add((startTime! & 0xff));
|
||||
|
||||
// endTime 4
|
||||
subData.add((endTime! & 0xff000000) >> 24);
|
||||
subData.add((endTime! & 0xff0000) >> 16);
|
||||
subData.add((endTime! & 0xff00) >> 8);
|
||||
subData.add((endTime! & 0xff));
|
||||
|
||||
if(needAuthor == 0){
|
||||
//AuthCodeLen 1
|
||||
subData.add(0);
|
||||
} else {
|
||||
List<int> authCodeData = [];
|
||||
//KeyID
|
||||
authCodeData.addAll(utf8.encode(keyID!));
|
||||
|
||||
//authUserID
|
||||
authCodeData.addAll(utf8.encode(userID!));
|
||||
|
||||
//token 4 首次请求 Token 填 0,如果锁需要鉴权操作者身份,则会分配动态口令并在应答消息中返回,二次请求时带上。
|
||||
authCodeData.addAll(token!);
|
||||
|
||||
authCodeData.addAll(signKey!);
|
||||
|
||||
print("${commandType!.typeValue}-authCodeData:$authCodeData");
|
||||
|
||||
// 把KeyID、authUserID、时间戳、公钥通过md5加密之后就是authCode
|
||||
var authCode = crypto.md5.convert(authCodeData);
|
||||
|
||||
subData.add(authCode.bytes.length);
|
||||
subData.addAll(authCode.bytes);
|
||||
}
|
||||
|
||||
data.add(subData.length);
|
||||
data.addAll(subData);
|
||||
|
||||
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 SenderAddFingerprintWithTimeCycleCoercionReply extends Reply {
|
||||
SenderAddFingerprintWithTimeCycleCoercionReply.parseData(CommandType commandType, List<int> dataDetail)
|
||||
: super.parseData(commandType, dataDetail) {
|
||||
data = dataDetail;
|
||||
}
|
||||
}
|
||||
|
||||
class SenderAddFingerprintProcessReply extends Reply {
|
||||
SenderAddFingerprintProcessReply.parseData(CommandType commandType, List<int> dataDetail)
|
||||
: super.parseData(commandType, dataDetail) {
|
||||
data = dataDetail;
|
||||
}
|
||||
}
|
||||
|
||||
class SenderAddFingerprintConfirmationReply extends Reply {
|
||||
SenderAddFingerprintConfirmationReply.parseData(CommandType commandType, List<int> dataDetail)
|
||||
: super.parseData(commandType, dataDetail) {
|
||||
data = dataDetail;
|
||||
}
|
||||
}
|
||||
@ -24,7 +24,7 @@ class SenderAddICCardCommand extends SenderProtocol {
|
||||
int? startTime;
|
||||
int? endTime;
|
||||
int? needAuthor;
|
||||
List<int>? publicKey;
|
||||
List<int>? signKey;
|
||||
List<int>? privateKey;
|
||||
|
||||
SenderAddICCardCommand({
|
||||
@ -36,7 +36,7 @@ class SenderAddICCardCommand extends SenderProtocol {
|
||||
this.startTime,
|
||||
this.endTime,
|
||||
this.needAuthor,
|
||||
this.publicKey,
|
||||
this.signKey,
|
||||
this.privateKey,
|
||||
}) : super(CommandType.generalExtendedCommond);
|
||||
|
||||
@ -46,6 +46,8 @@ class SenderAddICCardCommand extends SenderProtocol {
|
||||
List<int> subData = [];
|
||||
List<int> ebcData = [];
|
||||
|
||||
print("pwdNopwdNopwdNopwdNo:$cardNo");
|
||||
|
||||
// 指令类型
|
||||
int type = commandType!.typeValue;
|
||||
double typeDouble = type / 256;
|
||||
@ -95,17 +97,16 @@ class SenderAddICCardCommand extends SenderProtocol {
|
||||
subData.add(0);
|
||||
} else {
|
||||
List<int> authCodeData = [];
|
||||
//KeyID
|
||||
authCodeData.addAll(utf8.encode(keyID!));
|
||||
|
||||
//authUserID
|
||||
authCodeData.addAll(utf8.encode(userID!));
|
||||
|
||||
//KeyID
|
||||
authCodeData.addAll(utf8.encode(keyID!));
|
||||
|
||||
//token 4 首次请求 Token 填 0,如果锁需要鉴权操作者身份,则会分配动态口令并在应答消息中返回,二次请求时带上。
|
||||
authCodeData.addAll(token!);
|
||||
|
||||
authCodeData.addAll(publicKey!);
|
||||
authCodeData.addAll(signKey!);
|
||||
|
||||
print("${commandType!.typeValue}-authCodeData:$authCodeData");
|
||||
|
||||
|
||||
@ -0,0 +1,178 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import '../io_tool/io_tool.dart';
|
||||
import '../sm4Encipher/sm4.dart';
|
||||
import '../io_reply.dart';
|
||||
import '../io_sender.dart';
|
||||
import '../io_type.dart';
|
||||
import 'package:crypto/crypto.dart' as crypto;
|
||||
|
||||
///TODO:添加指纹
|
||||
/*
|
||||
备注:
|
||||
删除单个指纹规则:UseCountLimit 设置为 0。删除全部指纹规则: UseCountLimit 设置为 0,FingerNo 设置为 255,userId 设置为“Delete All !@#”,只有门锁管理员才有权限
|
||||
**/
|
||||
class SenderAddICCardWithTimeCycleCoercionCommand extends SenderProtocol {
|
||||
|
||||
String? keyID;
|
||||
String? userID;
|
||||
int? cardNo;
|
||||
int? useCountLimit;
|
||||
int? isForce;
|
||||
List<int>? token;
|
||||
int? isRound;
|
||||
int? weekRound;
|
||||
int? startDate;
|
||||
int? endDate;
|
||||
int? startTime;
|
||||
int? endTime;
|
||||
int? needAuthor;
|
||||
List<int>? signKey;
|
||||
List<int>? privateKey;
|
||||
|
||||
SenderAddICCardWithTimeCycleCoercionCommand({
|
||||
this.keyID,
|
||||
this.userID,
|
||||
this.cardNo,
|
||||
this.useCountLimit,
|
||||
this.isForce,
|
||||
this.token,
|
||||
this.isRound,
|
||||
this.weekRound,
|
||||
this.startDate,
|
||||
this.endDate,
|
||||
this.startTime,
|
||||
this.endTime,
|
||||
this.needAuthor,
|
||||
this.signKey,
|
||||
this.privateKey,
|
||||
}) : super(CommandType.generalExtendedCommond);
|
||||
|
||||
@override
|
||||
List<int> messageDetail() {
|
||||
List<int> data = [];
|
||||
List<int> subData = [];
|
||||
List<int> ebcData = [];
|
||||
|
||||
print("cardNocardNocardNocardNo:$cardNo");
|
||||
|
||||
// 指令类型
|
||||
int type = commandType!.typeValue;
|
||||
double typeDouble = type / 256;
|
||||
int type1 = typeDouble.toInt();
|
||||
int type2 = type % 256;
|
||||
data.add(type1);
|
||||
data.add(type2);
|
||||
|
||||
// 子命令类型
|
||||
data.add(24);
|
||||
|
||||
// keyID 40
|
||||
int keyIDLength = utf8.encode(keyID!).length;
|
||||
// print("${commandType!.typeValue}LockIDLength:$lockIDLength utf8.encode(lockID!)${utf8.encode(lockID!)}");
|
||||
subData.addAll(utf8.encode(keyID!));
|
||||
subData = getFixedLengthList(subData, 40 - keyIDLength);
|
||||
|
||||
//userID 20
|
||||
int userIDLength = utf8.encode(userID!).length;
|
||||
// print("${commandType!.typeValue}IDLength:$authUserIDLength utf8.encode(authUserID!)${utf8.encode(authUserID!)}");
|
||||
subData.addAll(utf8.encode(userID!));
|
||||
subData = getFixedLengthList(subData, 20 - userIDLength);
|
||||
|
||||
// fingerNo
|
||||
subData.add(cardNo!);
|
||||
|
||||
// UseCountLimit
|
||||
subData.add(useCountLimit!);
|
||||
|
||||
// isForce
|
||||
subData.add(isForce!);
|
||||
|
||||
// token
|
||||
subData.addAll(token!);
|
||||
|
||||
// isRound
|
||||
subData.add(isRound!);
|
||||
|
||||
// weekRound
|
||||
subData.add(weekRound!);
|
||||
|
||||
// startDate 4
|
||||
subData.add((startDate! & 0xff000000) >> 24);
|
||||
subData.add((startDate! & 0xff0000) >> 16);
|
||||
subData.add((startDate! & 0xff00) >> 8);
|
||||
subData.add((startDate! & 0xff));
|
||||
|
||||
// endDate 4
|
||||
subData.add((endDate! & 0xff000000) >> 24);
|
||||
subData.add((endDate! & 0xff0000) >> 16);
|
||||
subData.add((endDate! & 0xff00) >> 8);
|
||||
subData.add((endDate! & 0xff));
|
||||
|
||||
// startTime 4
|
||||
subData.add((startTime! & 0xff000000) >> 24);
|
||||
subData.add((startTime! & 0xff0000) >> 16);
|
||||
subData.add((startTime! & 0xff00) >> 8);
|
||||
subData.add((startTime! & 0xff));
|
||||
|
||||
// endTime 4
|
||||
subData.add((endTime! & 0xff000000) >> 24);
|
||||
subData.add((endTime! & 0xff0000) >> 16);
|
||||
subData.add((endTime! & 0xff00) >> 8);
|
||||
subData.add((endTime! & 0xff));
|
||||
|
||||
if(needAuthor == 0){
|
||||
//AuthCodeLen 1
|
||||
subData.add(0);
|
||||
} else {
|
||||
List<int> authCodeData = [];
|
||||
//KeyID
|
||||
authCodeData.addAll(utf8.encode(keyID!));
|
||||
|
||||
//authUserID
|
||||
authCodeData.addAll(utf8.encode(userID!));
|
||||
|
||||
//token 4 首次请求 Token 填 0,如果锁需要鉴权操作者身份,则会分配动态口令并在应答消息中返回,二次请求时带上。
|
||||
authCodeData.addAll(token!);
|
||||
|
||||
authCodeData.addAll(signKey!);
|
||||
|
||||
print("${commandType!.typeValue}-authCodeData:$authCodeData");
|
||||
|
||||
// 把KeyID、authUserID、时间戳、公钥通过md5加密之后就是authCode
|
||||
var authCode = crypto.md5.convert(authCodeData);
|
||||
|
||||
subData.add(authCode.bytes.length);
|
||||
subData.addAll(authCode.bytes);
|
||||
}
|
||||
|
||||
data.add(subData.length);
|
||||
data.addAll(subData);
|
||||
|
||||
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 SenderAddICCardWithTimeCycleCoercionReply extends Reply {
|
||||
SenderAddICCardWithTimeCycleCoercionReply.parseData(CommandType commandType, List<int> dataDetail)
|
||||
: super.parseData(commandType, dataDetail) {
|
||||
data = dataDetail;
|
||||
}
|
||||
}
|
||||
|
||||
class SenderAddICCardConfirmationReply extends Reply {
|
||||
SenderAddICCardConfirmationReply.parseData(CommandType commandType, List<int> dataDetail)
|
||||
: super.parseData(commandType, dataDetail) {
|
||||
data = dataDetail;
|
||||
}
|
||||
}
|
||||
@ -46,7 +46,7 @@ class SenderCustomPasswordsCommand extends SenderProtocol {
|
||||
List<int> subData = [];
|
||||
List<int> ebcData = [];
|
||||
|
||||
// print("pwdNopwdNopwdNopwdNo:$pwdNo");
|
||||
print("pwdNopwdNopwdNopwdNo:$pwdNo");
|
||||
|
||||
// 指令类型
|
||||
int type = commandType!.typeValue;
|
||||
|
||||
@ -20,8 +20,10 @@ import 'package:star_lock/blue/io_protocol/io_timing.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_transferPermissions.dart';
|
||||
|
||||
import '../tools/storage.dart';
|
||||
import 'io_protocol/io_addFingerprint.dart';
|
||||
import 'io_protocol/io_addICCard.dart';
|
||||
// import 'io_protocol/io_addFingerprint.dart';
|
||||
import 'io_protocol/io_addFingerprintWithTimeCycleCoercion.dart';
|
||||
// import 'io_protocol/io_addICCard.dart';
|
||||
import 'io_protocol/io_addICCardWithTimeCycleCoercion.dart';
|
||||
import 'io_protocol/io_addStressFingerprint.dart';
|
||||
import 'io_protocol/io_addStressICCard.dart';
|
||||
import 'io_protocol/io_addStressPassword.dart';
|
||||
@ -225,12 +227,12 @@ class CommandReciverManager {
|
||||
commandType, data);
|
||||
}
|
||||
break;
|
||||
case 21:
|
||||
{
|
||||
// 注册卡片开始
|
||||
reply = SenderAddICCardReply.parseData(commandType, data);
|
||||
}
|
||||
break;
|
||||
// case 21:
|
||||
// {
|
||||
// // 注册卡片开始
|
||||
// reply = SenderAddICCardReply.parseData(commandType, data);
|
||||
// }
|
||||
// break;
|
||||
case 22:
|
||||
{
|
||||
// 注册卡片确认
|
||||
@ -238,6 +240,13 @@ class CommandReciverManager {
|
||||
commandType, data);
|
||||
}
|
||||
break;
|
||||
case 24:
|
||||
{
|
||||
// 注册卡片开始
|
||||
reply = SenderAddICCardWithTimeCycleCoercionReply.parseData(
|
||||
commandType, data);
|
||||
}
|
||||
break;
|
||||
case 30:
|
||||
{
|
||||
// 查询指纹状态
|
||||
@ -245,13 +254,13 @@ class CommandReciverManager {
|
||||
commandType, data);
|
||||
}
|
||||
break;
|
||||
case 31:
|
||||
{
|
||||
// 注册指纹开始
|
||||
reply =
|
||||
SenderAddFingerprintReply.parseData(commandType, data);
|
||||
}
|
||||
break;
|
||||
// case 31:
|
||||
// {
|
||||
// // 注册指纹开始
|
||||
// reply =
|
||||
// SenderAddFingerprintReply.parseData(commandType, data);
|
||||
// }
|
||||
// break;
|
||||
case 32:
|
||||
{
|
||||
// 注册指纹确认
|
||||
@ -266,6 +275,13 @@ class CommandReciverManager {
|
||||
commandType, data);
|
||||
}
|
||||
break;
|
||||
case 36:
|
||||
{
|
||||
// 注册指纹开始(带限时、循环、胁迫...)
|
||||
reply = SenderAddFingerprintWithTimeCycleCoercionReply.parseData(
|
||||
commandType, data);
|
||||
}
|
||||
break;
|
||||
case 40:
|
||||
{
|
||||
// 事件查询记录
|
||||
|
||||
@ -8,6 +8,8 @@ import 'package:star_lock/blue/io_protocol/io_queryingFaceStatus.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_readAdminPassword.dart';
|
||||
|
||||
import 'io_protocol/io_addFingerprint.dart';
|
||||
import 'io_protocol/io_addFingerprintWithTimeCycleCoercion.dart';
|
||||
import 'io_protocol/io_addICCardWithTimeCycleCoercion.dart';
|
||||
import 'io_protocol/io_addStressFingerprint.dart';
|
||||
import 'io_protocol/io_addStressPassword.dart';
|
||||
import 'io_protocol/io_addUser.dart';
|
||||
@ -338,7 +340,7 @@ class IoSenderManage {
|
||||
required int? startTime,
|
||||
required int? endTime,
|
||||
required int? needAuthor,
|
||||
required List<int>? publicKey,
|
||||
required List<int>? signKey,
|
||||
required List<int>? privateKey,
|
||||
CommandSendCallBack? callBack}) {
|
||||
CommandSenderManager().managerSendData(
|
||||
@ -351,7 +353,47 @@ class IoSenderManage {
|
||||
startTime: startTime,
|
||||
endTime: endTime,
|
||||
needAuthor: needAuthor,
|
||||
publicKey: publicKey,
|
||||
signKey: signKey,
|
||||
privateKey: privateKey,
|
||||
),
|
||||
callBack: callBack);
|
||||
}
|
||||
|
||||
//todo:添加指纹开始(带限时、循环、胁迫...)
|
||||
static void senderAddFingerprintWithTimeCycleCoercionCommand(
|
||||
{
|
||||
required String? keyID,
|
||||
required String? userID,
|
||||
required int? fingerNo,
|
||||
required int? useCountLimit,
|
||||
required int? isForce,
|
||||
required List<int>? token,
|
||||
required int? isRound,
|
||||
required int? weekRound,
|
||||
required int? startDate,
|
||||
required int? endDate,
|
||||
required int? startTime,
|
||||
required int? endTime,
|
||||
required int? needAuthor,
|
||||
required List<int>? signKey,
|
||||
required List<int>? privateKey,
|
||||
CommandSendCallBack? callBack}) {
|
||||
CommandSenderManager().managerSendData(
|
||||
command: SenderAddFingerprintWithTimeCycleCoercionCommand(
|
||||
keyID: keyID,
|
||||
userID: userID,
|
||||
fingerNo: fingerNo,
|
||||
useCountLimit: useCountLimit,
|
||||
isForce: isForce,
|
||||
token: token,
|
||||
isRound: isRound,
|
||||
weekRound: weekRound,
|
||||
startDate: startDate,
|
||||
endDate: endDate,
|
||||
startTime: startTime,
|
||||
endTime: endTime,
|
||||
needAuthor: needAuthor,
|
||||
signKey: signKey,
|
||||
privateKey: privateKey,
|
||||
),
|
||||
callBack: callBack);
|
||||
@ -367,7 +409,7 @@ class IoSenderManage {
|
||||
required int? startTime,
|
||||
required int? endTime,
|
||||
required int? needAuthor,
|
||||
required List<int>? publicKey,
|
||||
required List<int>? signKey,
|
||||
required List<int>? privateKey,
|
||||
CommandSendCallBack? callBack}) {
|
||||
CommandSenderManager().managerSendData(
|
||||
@ -380,7 +422,47 @@ class IoSenderManage {
|
||||
startTime: startTime,
|
||||
endTime: endTime,
|
||||
needAuthor: needAuthor,
|
||||
publicKey: publicKey,
|
||||
signKey: signKey,
|
||||
privateKey: privateKey,
|
||||
),
|
||||
callBack: callBack);
|
||||
}
|
||||
|
||||
//todo:添加卡开始(带限时、循环、胁迫...)
|
||||
static void senderAddCardWithTimeCycleCoercionCommand(
|
||||
{
|
||||
required String? keyID,
|
||||
required String? userID,
|
||||
required int? cardNo,
|
||||
required int? useCountLimit,
|
||||
required int? isForce,
|
||||
required List<int>? token,
|
||||
required int? isRound,
|
||||
required int? weekRound,
|
||||
required int? startDate,
|
||||
required int? endDate,
|
||||
required int? startTime,
|
||||
required int? endTime,
|
||||
required int? needAuthor,
|
||||
required List<int>? signKey,
|
||||
required List<int>? privateKey,
|
||||
CommandSendCallBack? callBack}) {
|
||||
CommandSenderManager().managerSendData(
|
||||
command: SenderAddICCardWithTimeCycleCoercionCommand(
|
||||
keyID: keyID,
|
||||
userID: userID,
|
||||
cardNo: cardNo,
|
||||
useCountLimit: useCountLimit,
|
||||
isForce: isForce,
|
||||
token: token,
|
||||
isRound: isRound,
|
||||
weekRound: weekRound,
|
||||
startDate: startDate,
|
||||
endDate: endDate,
|
||||
startTime: startTime,
|
||||
endTime: endTime,
|
||||
needAuthor: needAuthor,
|
||||
signKey: signKey,
|
||||
privateKey: privateKey,
|
||||
),
|
||||
callBack: callBack);
|
||||
|
||||
@ -23,9 +23,6 @@ class _StarLockRegisterPageState extends State<StarLockRegisterPage> {
|
||||
final logic = Get.put(StarLockRegisterLogic());
|
||||
final state = Get.find<StarLockRegisterLogic>().state;
|
||||
|
||||
// late Timer _timer;
|
||||
// final int _seconds = 60;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
|
||||
@ -75,6 +75,7 @@ class AddCardTypeLogic extends BaseGetXController{
|
||||
"isAdministrator": state.isAdministrator.value == false ? "1" : "2", // 1:不是管理员 2:是管理员
|
||||
"effectiveTime": startTime,
|
||||
"failureTime": endTime,
|
||||
"selectType": state.selectType.value,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -1,15 +1,13 @@
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
// import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
|
||||
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/blue/io_type.dart';
|
||||
import 'package:star_lock/tools/baseGetXController.dart';
|
||||
import 'package:star_lock/tools/dateTool.dart';
|
||||
|
||||
import '../../../../blue/blue_manage.dart';
|
||||
import '../../../../blue/io_protocol/io_addICCard.dart';
|
||||
import '../../../../blue/io_protocol/io_addICCardWithTimeCycleCoercion.dart';
|
||||
import '../../../../blue/io_protocol/io_addStressICCard.dart';
|
||||
import '../../../../blue/io_reply.dart';
|
||||
import '../../../../blue/io_tool/io_tool.dart';
|
||||
@ -28,7 +26,7 @@ class AddICCardLogic extends BaseGetXController{
|
||||
void _initReplySubscription() {
|
||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) async {
|
||||
// 添加IC卡开始
|
||||
if(reply is SenderAddICCardReply) {
|
||||
if(reply is SenderAddICCardWithTimeCycleCoercionReply) {
|
||||
_replyAddICCardBegin(reply);
|
||||
}
|
||||
|
||||
@ -59,22 +57,25 @@ class AddICCardLogic extends BaseGetXController{
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var token = reply.data.sublist(5, 9);
|
||||
var saveStrList = changeIntListToStringList(token);
|
||||
Storage.setStringList(saveBlueToken, saveStrList);
|
||||
|
||||
IoSenderManage.senderAddFingerprintCommand(
|
||||
IoSenderManage.senderAddICCardCommand(
|
||||
keyID:"1",
|
||||
userID:await Storage.getUid(),
|
||||
fingerNo:1,
|
||||
cardNo:state.isAdministrator.value == "2" ? 254 : 1,
|
||||
useCountLimit:0xff,
|
||||
startTime:int.parse(state.startDate.value)~/1000,
|
||||
endTime:int.parse(state.endDate.value)~/1000,
|
||||
needAuthor:1,
|
||||
publicKey:publicKeyDataList,
|
||||
signKey:signKeyDataList,
|
||||
privateKey:getPrivateKeyList,
|
||||
token: token,
|
||||
);
|
||||
@ -166,6 +167,7 @@ class AddICCardLogic extends BaseGetXController{
|
||||
var saveStrList = changeIntListToStringList(token);
|
||||
Storage.setStringList(saveBlueToken, saveStrList);
|
||||
|
||||
Get.log("state.isAdministrator.value:${state.isAdministrator.value}");
|
||||
IoSenderManage.senderAddStressICCardCommand(
|
||||
keyID:"1",
|
||||
userID:await Storage.getUid(),
|
||||
@ -206,8 +208,19 @@ class AddICCardLogic extends BaseGetXController{
|
||||
BlueManage().bludSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == BluetoothConnectionState.connected){
|
||||
cancelBlueConnetctToastTimer();
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var weekStr = "00000000";
|
||||
for (var day in state.weekDay.value) {
|
||||
int index = day % 7; // 将周日的索引转换为 0
|
||||
weekStr = '${weekStr.substring(0, index)}1${weekStr.substring(index + 1)}';
|
||||
}
|
||||
// print("weekStrweekStrweekStr:$weekStr");
|
||||
int weekRound = int.parse(weekStr, radix: 2);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
@ -215,18 +228,37 @@ class AddICCardLogic extends BaseGetXController{
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
|
||||
IoSenderManage.senderAddICCardCommand(
|
||||
Get.log("state.isAdministrator.value:${state.isAdministrator.value}");
|
||||
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
|
||||
keyID:"1",
|
||||
userID:await Storage.getUid(),
|
||||
cardNo:state.isAdministrator.value == "2" ? 254 : 1,
|
||||
fingerNo:state.isAdministrator.value == "2" ? 254 : 1,
|
||||
useCountLimit:0xff,
|
||||
startTime:int.parse(state.startDate.value)~/1000,
|
||||
endTime:int.parse(state.endDate.value)~/1000,
|
||||
isForce:state.isCoerced.value == "1" ? 0 : 1, // 是否是胁迫
|
||||
isRound:state.selectType.value == "2" ? 1: 0, // 是否是循环
|
||||
weekRound:weekRound, // 周循环
|
||||
startDate: int.parse(state.startDate.value)~/1000,
|
||||
endDate: int.parse(state.endDate.value)~/1000,
|
||||
startTime:int.parse(state.effectiveDateTime.value)~/1000,
|
||||
endTime:int.parse(state.failureDateTime.value)~/1000,
|
||||
needAuthor:1,
|
||||
publicKey:publicKeyDataList,
|
||||
signKey:signKeyDataList,
|
||||
privateKey:getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
|
||||
// IoSenderManage.senderAddICCardCommand(
|
||||
// keyID:"1",
|
||||
// userID:await Storage.getUid(),
|
||||
// cardNo:state.isAdministrator.value == "2" ? 254 : 1,
|
||||
// useCountLimit:0xff,
|
||||
// startTime:int.parse(state.startDate.value)~/1000,
|
||||
// endTime:int.parse(state.endDate.value)~/1000,
|
||||
// needAuthor:1,
|
||||
// signKey:signKeyDataList,
|
||||
// privateKey:getPrivateKeyList,
|
||||
// token: getTokenList,
|
||||
// );
|
||||
} else if (deviceConnectionState == BluetoothConnectionState.disconnected){
|
||||
if(state.ifCurrentScreen.value == true){
|
||||
showBlueConnetctToast();
|
||||
|
||||
@ -27,8 +27,7 @@ class _AddICCardPageState extends State<AddICCardPage> with RouteAware {
|
||||
return Scaffold(
|
||||
backgroundColor: AppColors.mainBackgroundColor,
|
||||
appBar: TitleAppBar(
|
||||
barTitle:
|
||||
"${TranslationLoader.lanKeys!.add!.tr}${TranslationLoader.lanKeys!.card!.tr}",
|
||||
barTitle: "${TranslationLoader.lanKeys!.add!.tr}${TranslationLoader.lanKeys!.card!.tr}",
|
||||
haveBack: true,
|
||||
backgroundColor: AppColors.mainColor,
|
||||
),
|
||||
|
||||
@ -19,6 +19,7 @@ class AddICCardState{
|
||||
final fromType = 0.obs;
|
||||
final effectiveDateTime = "".obs;// 生效时间
|
||||
final failureDateTime = "".obs;// 失效时间
|
||||
final selectType = "0".obs;// 0永久 1显示 2循环
|
||||
|
||||
AddICCardState() {
|
||||
Map map = Get.arguments;
|
||||
@ -37,5 +38,6 @@ class AddICCardState{
|
||||
fromType.value = map["fromType"];
|
||||
effectiveDateTime.value = map["effectiveTime"];
|
||||
failureDateTime.value = map["failureTime"];
|
||||
selectType.value = map["selectType"];
|
||||
}
|
||||
}
|
||||
@ -51,6 +51,9 @@ class CardDetailLogic extends BaseGetXController{
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
@ -66,7 +69,7 @@ class CardDetailLogic extends BaseGetXController{
|
||||
startTime:int.parse(state.starDate.value),
|
||||
endTime:int.parse(state.endDate.value),
|
||||
needAuthor:1,
|
||||
publicKey:publicKeyDataList,
|
||||
signKey:signKeyDataList,
|
||||
privateKey:getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
@ -100,8 +103,11 @@ class CardDetailLogic extends BaseGetXController{
|
||||
});
|
||||
BlueManage().bludSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == BluetoothConnectionState.connected){
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
@ -118,7 +124,7 @@ class CardDetailLogic extends BaseGetXController{
|
||||
startTime:int.parse(state.starDate.value),
|
||||
endTime:int.parse(state.endDate.value),
|
||||
needAuthor:1,
|
||||
publicKey:publicKeyDataList,
|
||||
signKey:signKeyDataList,
|
||||
privateKey:getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
|
||||
@ -62,8 +62,11 @@ class CardListLogic extends BaseGetXController {
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
@ -76,7 +79,7 @@ class CardListLogic extends BaseGetXController {
|
||||
startTime:0x11223344,
|
||||
endTime:0x11223344,
|
||||
needAuthor:1,
|
||||
publicKey:publicKeyDataList,
|
||||
signKey:signKeyDataList,
|
||||
privateKey:getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
@ -258,8 +261,11 @@ class CardListLogic extends BaseGetXController {
|
||||
});
|
||||
BlueManage().bludSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == BluetoothConnectionState.connected){
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
@ -275,7 +281,7 @@ class CardListLogic extends BaseGetXController {
|
||||
startTime:0x11223344,
|
||||
endTime:0x11223344,
|
||||
needAuthor:1,
|
||||
publicKey:publicKeyDataList,
|
||||
signKey:signKeyDataList,
|
||||
privateKey:getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
|
||||
@ -100,8 +100,7 @@ class _CardListPageState extends State<CardListPage> with RouteAware {
|
||||
SizedBox(height: 20.h),
|
||||
Expanded(child: _buildMainUI()),
|
||||
AddBottomWhiteBtn(
|
||||
btnName:
|
||||
'${TranslationLoader.lanKeys!.add!.tr}${TranslationLoader.lanKeys!.card!.tr}',
|
||||
btnName: '${TranslationLoader.lanKeys!.add!.tr}${TranslationLoader.lanKeys!.card!.tr}',
|
||||
onClick: () async {
|
||||
var data = await Get.toNamed(Routers.addCardTypeManagePage, arguments: {
|
||||
"lockId": state.lockId.value,
|
||||
@ -179,8 +178,7 @@ class _CardListPageState extends State<CardListPage> with RouteAware {
|
||||
) : NoData(noDataHeight: 1.sh - ScreenUtil().statusBarHeight - ScreenUtil().bottomBarHeight - 190.h - 64.h));
|
||||
}
|
||||
|
||||
Widget _keyItem(String lockTypeIcon, String lockTypeTitle, String ifInvalidation, String showTime,
|
||||
Function() action) {
|
||||
Widget _keyItem(String lockTypeIcon, String lockTypeTitle, String ifInvalidation, String showTime, Function() action) {
|
||||
return GestureDetector(
|
||||
onTap: action,
|
||||
child: Container(
|
||||
|
||||
@ -116,9 +116,9 @@ class SendElectronicKeyLogic extends BaseGetXController {
|
||||
//用户未注册
|
||||
state.isCreateUser.value = true;
|
||||
if (isPhoneNumber(state.emailOrPhoneController.text) == true) {
|
||||
_showPhoneDialog(Get.context, '${entity.errorMsg}');
|
||||
_showEmailDialog();
|
||||
} else {
|
||||
_showEmailDialog(Get.context);
|
||||
_showEmailDialog();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -137,51 +137,51 @@ class SendElectronicKeyLogic extends BaseGetXController {
|
||||
return emailRegExp.hasMatch(input);
|
||||
}
|
||||
|
||||
//用户未注册确认弹窗
|
||||
void _showPhoneDialog(widgetContext, String errMsg) {
|
||||
showCupertinoDialog(
|
||||
context: widgetContext,
|
||||
builder: (context) {
|
||||
return CupertinoAlertDialog(
|
||||
title: Text('接收者号码未注册,请重新发送'.tr),
|
||||
actions: [
|
||||
CupertinoDialogAction(
|
||||
child: Text(
|
||||
TranslationLoader.lanKeys!.cancel!.tr,
|
||||
style: TextStyle(color: AppColors.mainColor),
|
||||
),
|
||||
onPressed: () {
|
||||
Get.back();
|
||||
},
|
||||
),
|
||||
CupertinoDialogAction(
|
||||
child: Text(
|
||||
TranslationLoader.lanKeys!.sure!.tr,
|
||||
style: TextStyle(color: AppColors.mainColor),
|
||||
),
|
||||
onPressed: () async {
|
||||
//选择国家代码
|
||||
Get.back();
|
||||
|
||||
// var result = await Get.toNamed(Routers.selectCountryRegionPage);
|
||||
// if (result != null) {
|
||||
// result as Map<String, dynamic>;
|
||||
// state.countryCode.value = result['code'];
|
||||
// state.countryName.value = result['countryName'];
|
||||
// }
|
||||
sendElectronicKeyRequest();
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
// //用户未注册确认弹窗
|
||||
// void _showPhoneDialog(widgetContext, String errMsg) {
|
||||
// showCupertinoDialog(
|
||||
// context: widgetContext,
|
||||
// builder: (context) {
|
||||
// return CupertinoAlertDialog(
|
||||
// title: Text('接收者号码未注册,请重新发送'.tr),
|
||||
// actions: [
|
||||
// CupertinoDialogAction(
|
||||
// child: Text(
|
||||
// TranslationLoader.lanKeys!.cancel!.tr,
|
||||
// style: TextStyle(color: AppColors.mainColor),
|
||||
// ),
|
||||
// onPressed: () {
|
||||
// Get.back();
|
||||
// },
|
||||
// ),
|
||||
// CupertinoDialogAction(
|
||||
// child: Text(
|
||||
// TranslationLoader.lanKeys!.sure!.tr,
|
||||
// style: TextStyle(color: AppColors.mainColor),
|
||||
// ),
|
||||
// onPressed: () async {
|
||||
// //选择国家代码
|
||||
// Get.back();
|
||||
//
|
||||
// // var result = await Get.toNamed(Routers.selectCountryRegionPage);
|
||||
// // if (result != null) {
|
||||
// // result as Map<String, dynamic>;
|
||||
// // state.countryCode.value = result['code'];
|
||||
// // state.countryName.value = result['countryName'];
|
||||
// // }
|
||||
// sendElectronicKeyRequest();
|
||||
// },
|
||||
// ),
|
||||
// ],
|
||||
// );
|
||||
// },
|
||||
// );
|
||||
// }
|
||||
|
||||
//用户未注册确认弹窗---邮箱
|
||||
void _showEmailDialog(widgetContext) {
|
||||
void _showEmailDialog() {
|
||||
showCupertinoDialog(
|
||||
context: widgetContext,
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return CupertinoAlertDialog(
|
||||
title: Text('${"是否发送电子钥匙给未注册账号".tr}\n${state.emailOrPhoneController.text}'),
|
||||
|
||||
@ -7,7 +7,7 @@ import 'package:get/get.dart';
|
||||
import 'package:star_lock/blue/io_type.dart';
|
||||
|
||||
import '../../../../../blue/blue_manage.dart';
|
||||
import '../../../../../blue/io_protocol/io_addFingerprint.dart';
|
||||
// import '../../../../../blue/io_protocol/io_addFingerprint.dart';
|
||||
import '../../../../../blue/io_protocol/io_addStressFingerprint.dart';
|
||||
import '../../../../../blue/io_reply.dart';
|
||||
import '../../../../../blue/io_tool/io_tool.dart';
|
||||
@ -17,6 +17,7 @@ import '../../../../../network/api_repository.dart';
|
||||
import '../../../../../tools/baseGetXController.dart';
|
||||
import '../../../../../tools/eventBusEventManage.dart';
|
||||
import '../../../../../tools/storage.dart';
|
||||
import '../../../../blue/io_protocol/io_addFingerprintWithTimeCycleCoercion.dart';
|
||||
import 'addFingerprint_state.dart';
|
||||
|
||||
class AddFingerprintLogic extends BaseGetXController {
|
||||
@ -27,7 +28,7 @@ class AddFingerprintLogic extends BaseGetXController {
|
||||
void _initReplySubscription() {
|
||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) async {
|
||||
// 添加指纹开始
|
||||
if(reply is SenderAddFingerprintReply) {
|
||||
if(reply is SenderAddFingerprintWithTimeCycleCoercionReply) {
|
||||
_replyAddFingerprintBegin(reply);
|
||||
}
|
||||
|
||||
@ -69,22 +70,39 @@ class AddFingerprintLogic extends BaseGetXController {
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var token = reply.data.sublist(5, 9);
|
||||
print("tokentokentokentoken:$token");
|
||||
var saveStrList = changeIntListToStringList(token);
|
||||
Storage.setStringList(saveBlueToken, saveStrList);
|
||||
|
||||
IoSenderManage.senderAddFingerprintCommand(
|
||||
var weekStr = "00000000";
|
||||
for (var day in state.weekDay.value) {
|
||||
int index = day % 7; // 将周日的索引转换为 0
|
||||
weekStr = '${weekStr.substring(0, index)}1${weekStr.substring(index + 1)}';
|
||||
}
|
||||
// print("weekStrweekStrweekStr:$weekStr");
|
||||
int weekRound = int.parse(weekStr, radix: 2);
|
||||
|
||||
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
|
||||
keyID:"1",
|
||||
userID:await Storage.getUid(),
|
||||
fingerNo:state.isAdministrator.value == "2" ? 254 : 1,
|
||||
useCountLimit:0xff,
|
||||
startTime:int.parse(state.startDate.value)~/1000,
|
||||
endTime:int.parse(state.endDate.value)~/1000,
|
||||
isForce:state.isCoerced.value == "1" ? 1 : 0, // 是否是胁迫
|
||||
isRound:state.selectType.value == "2" ? 1: 0, // 是否是循环
|
||||
weekRound:weekRound, // 周循环
|
||||
startDate: int.parse(state.startDate.value)~/1000,
|
||||
endDate: int.parse(state.endDate.value)~/1000,
|
||||
startTime:int.parse(state.effectiveDateTime.value)~/1000,
|
||||
endTime:int.parse(state.failureDateTime.value)~/1000,
|
||||
needAuthor:1,
|
||||
publicKey:publicKeyDataList,
|
||||
signKey:signKeyDataList,
|
||||
privateKey:getPrivateKeyList,
|
||||
token: token,
|
||||
);
|
||||
@ -164,13 +182,13 @@ class AddFingerprintLogic extends BaseGetXController {
|
||||
}else{
|
||||
state.fingerprintNumber.value = (reply.data[6]).toString();
|
||||
}
|
||||
if(state.isCoerced.value == "1"){
|
||||
// if(state.isCoerced.value == "1"){
|
||||
// 非胁迫指纹
|
||||
addFingerprintsData();
|
||||
}else{
|
||||
// 如果是胁迫指纹在 添加完之后以后再调用添加胁迫指纹的
|
||||
senderAddStressFingerprint();
|
||||
}
|
||||
// }else{
|
||||
// // 如果是胁迫指纹在 添加完之后以后再调用添加胁迫指纹的
|
||||
// senderAddStressFingerprint();
|
||||
// }
|
||||
break;
|
||||
case 0x06:
|
||||
//需要权限
|
||||
@ -254,27 +272,41 @@ class AddFingerprintLogic extends BaseGetXController {
|
||||
BlueManage().bludSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == BluetoothConnectionState.connected){
|
||||
cancelBlueConnetctToastTimer();
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var weekStr = "00000000";
|
||||
for (var day in state.weekDay.value) {
|
||||
int index = day % 7; // 将周日的索引转换为 0
|
||||
weekStr = '${weekStr.substring(0, index)}1${weekStr.substring(index + 1)}';
|
||||
}
|
||||
// print("weekStrweekStrweekStr:$weekStr");
|
||||
int weekRound = int.parse(weekStr, radix: 2);
|
||||
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
|
||||
Get.log("state.isAdministrator.value:${state.isAdministrator.value}");
|
||||
IoSenderManage.senderAddFingerprintCommand(
|
||||
IoSenderManage.senderAddFingerprintWithTimeCycleCoercionCommand(
|
||||
keyID:"1",
|
||||
userID:await Storage.getUid(),
|
||||
fingerNo:state.isAdministrator.value == "2" ? 254 : 1,
|
||||
useCountLimit:0xff,
|
||||
// startTime:0x11223344,
|
||||
// endTime:0x11223344,
|
||||
startTime:int.parse(state.startDate.value)~/1000,
|
||||
endTime:int.parse(state.endDate.value)~/1000,
|
||||
isForce:state.isCoerced.value == "1" ? 0 : 1, // 是否是胁迫
|
||||
isRound:state.selectType.value == "2" ? 1: 0, // 是否是循环
|
||||
weekRound:weekRound, // 周循环
|
||||
startDate: int.parse(state.startDate.value)~/1000,
|
||||
endDate: int.parse(state.endDate.value)~/1000,
|
||||
startTime:int.parse(state.effectiveDateTime.value)~/1000,
|
||||
endTime:int.parse(state.failureDateTime.value)~/1000,
|
||||
needAuthor:1,
|
||||
publicKey:publicKeyDataList,
|
||||
signKey:signKeyDataList,
|
||||
privateKey:getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
@ -286,6 +318,45 @@ class AddFingerprintLogic extends BaseGetXController {
|
||||
Get.close(1);
|
||||
}
|
||||
});
|
||||
|
||||
// BlueManage().bludSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
|
||||
// if (deviceConnectionState == BluetoothConnectionState.connected){
|
||||
// cancelBlueConnetctToastTimer();
|
||||
// // var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// // List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
//
|
||||
// var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
// List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
//
|
||||
// var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
// List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
//
|
||||
// var token = await Storage.getStringList(saveBlueToken);
|
||||
// List<int> getTokenList = changeStringListToIntList(token!);
|
||||
//
|
||||
// Get.log("state.isAdministrator.value:${state.isAdministrator.value}");
|
||||
// IoSenderManage.senderAddFingerprintCommand(
|
||||
// keyID:"1",
|
||||
// userID:await Storage.getUid(),
|
||||
// fingerNo:state.isAdministrator.value == "2" ? 254 : 1,
|
||||
// useCountLimit:0xff,
|
||||
// // startTime:0x11223344,
|
||||
// // endTime:0x11223344,
|
||||
// startTime:int.parse(state.startDate.value)~/1000,
|
||||
// endTime:int.parse(state.endDate.value)~/1000,
|
||||
// needAuthor:1,
|
||||
// signKey:signKeyDataList,
|
||||
// privateKey:getPrivateKeyList,
|
||||
// token: getTokenList,
|
||||
// );
|
||||
// }else if (deviceConnectionState == BluetoothConnectionState.disconnected){
|
||||
// if(state.ifCurrentScreen.value == true){
|
||||
// showBlueConnetctToast();
|
||||
// }
|
||||
// cancelBlueConnetctToastTimer();
|
||||
// Get.close(1);
|
||||
// }
|
||||
// });
|
||||
}
|
||||
|
||||
// 添加胁迫指纹
|
||||
|
||||
@ -22,6 +22,7 @@ class AddFingerprintState{
|
||||
final fromType = 1.obs;
|
||||
final effectiveDateTime = "".obs;// 生效时间
|
||||
final failureDateTime = "".obs;// 失效时间
|
||||
final selectType = "0".obs;// 0永久 1显示 2循环
|
||||
|
||||
AddFingerprintState() {
|
||||
Map map = Get.arguments;
|
||||
@ -40,5 +41,6 @@ class AddFingerprintState{
|
||||
fromType.value = map["fromType"];
|
||||
effectiveDateTime.value = map["effectiveTime"];
|
||||
failureDateTime.value = map["failureTime"];
|
||||
selectType.value = map["selectType"];
|
||||
}
|
||||
}
|
||||
@ -77,6 +77,7 @@ class AddFingerprintTypeLogic extends BaseGetXController{
|
||||
"isAdministrator": state.isAdministrator.value == false ? "1" : "2", // 1:不是管理员 2:是管理员
|
||||
"effectiveTime": startTime,
|
||||
"failureTime": endTime,
|
||||
"selectType": state.selectType.value,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -52,8 +52,11 @@ class FingerprintDetailLogic extends BaseGetXController{
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
@ -67,7 +70,7 @@ class FingerprintDetailLogic extends BaseGetXController{
|
||||
startTime:int.parse(state.starDate.value),
|
||||
endTime:int.parse(state.endDate.value),
|
||||
needAuthor:1,
|
||||
publicKey:publicKeyDataList,
|
||||
signKey:signKeyDataList,
|
||||
privateKey:getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
@ -101,8 +104,11 @@ class FingerprintDetailLogic extends BaseGetXController{
|
||||
});
|
||||
BlueManage().bludSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == BluetoothConnectionState.connected){
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
@ -120,7 +126,7 @@ class FingerprintDetailLogic extends BaseGetXController{
|
||||
startTime:int.parse(state.starDate.value),
|
||||
endTime:int.parse(state.endDate.value),
|
||||
needAuthor:1,
|
||||
publicKey:publicKeyDataList,
|
||||
signKey:signKeyDataList,
|
||||
privateKey:getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
|
||||
@ -64,8 +64,11 @@ class FingerprintListLogic extends BaseGetXController{
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
@ -78,7 +81,7 @@ class FingerprintListLogic extends BaseGetXController{
|
||||
startTime:0x11223344,
|
||||
endTime:0x11223344,
|
||||
needAuthor:1,
|
||||
publicKey:publicKeyDataList,
|
||||
signKey:signKeyDataList,
|
||||
privateKey:getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
@ -299,8 +302,11 @@ class FingerprintListLogic extends BaseGetXController{
|
||||
});
|
||||
BlueManage().bludSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == BluetoothConnectionState.connected){
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
@ -316,7 +322,7 @@ class FingerprintListLogic extends BaseGetXController{
|
||||
startTime:0x11223344,
|
||||
endTime:0x11223344,
|
||||
needAuthor:1,
|
||||
publicKey:publicKeyDataList,
|
||||
signKey:signKeyDataList,
|
||||
privateKey:getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
|
||||
@ -52,8 +52,11 @@ class IrisDetailLogic extends BaseGetXController {
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
@ -67,7 +70,7 @@ class IrisDetailLogic extends BaseGetXController {
|
||||
startTime: int.parse(state.starDate.value),
|
||||
endTime: int.parse(state.endDate.value),
|
||||
needAuthor: 1,
|
||||
publicKey: publicKeyDataList,
|
||||
signKey: signKeyDataList,
|
||||
privateKey: getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
@ -105,8 +108,11 @@ class IrisDetailLogic extends BaseGetXController {
|
||||
BlueManage().bludSendData(BlueManage().connectDeviceName,
|
||||
(BluetoothConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == BluetoothConnectionState.connected) {
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
@ -124,7 +130,7 @@ class IrisDetailLogic extends BaseGetXController {
|
||||
startTime: int.parse(state.starDate.value),
|
||||
endTime: int.parse(state.endDate.value),
|
||||
needAuthor: 1,
|
||||
publicKey: publicKeyDataList,
|
||||
signKey: signKeyDataList,
|
||||
privateKey: getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
|
||||
@ -4,6 +4,7 @@ import 'dart:io';
|
||||
|
||||
// import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
|
||||
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:network_info_plus/network_info_plus.dart';
|
||||
import 'package:permission_handler/permission_handler.dart';
|
||||
import 'package:star_lock/tools/baseGetXController.dart';
|
||||
@ -68,7 +69,9 @@ class ConfiguringWifiLogic extends BaseGetXController{
|
||||
state.sureBtnState.value = 0;
|
||||
cancelBlueConnetctToastTimer();
|
||||
dismissEasyLoading();
|
||||
showToast("配网成功");
|
||||
showToast("配网成功", something:(){
|
||||
Get.close(2);
|
||||
});
|
||||
break;
|
||||
case 0x06:
|
||||
//无权限
|
||||
|
||||
@ -1,15 +1,12 @@
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/scheduler.dart';
|
||||
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/blue/io_type.dart';
|
||||
import 'package:star_lock/tools/showTipView.dart';
|
||||
|
||||
import '../../../../appRouters.dart';
|
||||
import '../../../../blue/blue_manage.dart';
|
||||
import '../../../../blue/io_protocol/io_factoryDataReset.dart';
|
||||
import '../../../../blue/io_protocol/io_setSupportFunctionsNoParameters.dart';
|
||||
@ -20,9 +17,7 @@ import '../../../../blue/sender_manage.dart';
|
||||
import '../../../../network/api_repository.dart';
|
||||
import '../../../../tools/baseGetXController.dart';
|
||||
import '../../../../tools/eventBusEventManage.dart';
|
||||
import '../../../../tools/showTFView.dart';
|
||||
import '../../../../tools/storage.dart';
|
||||
import '../../../../translations/trans_lib.dart';
|
||||
import 'checkingInInfoData_entity.dart';
|
||||
import 'lockSetInfo_entity.dart';
|
||||
import 'lockSet_state.dart';
|
||||
|
||||
@ -51,8 +51,11 @@ class PalmDetailLogic extends BaseGetXController {
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
@ -66,7 +69,7 @@ class PalmDetailLogic extends BaseGetXController {
|
||||
startTime: int.parse(state.starDate.value),
|
||||
endTime: int.parse(state.endDate.value),
|
||||
needAuthor: 1,
|
||||
publicKey: publicKeyDataList,
|
||||
signKey: signKeyDataList,
|
||||
privateKey: getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
@ -104,8 +107,11 @@ class PalmDetailLogic extends BaseGetXController {
|
||||
BlueManage().bludSendData(BlueManage().connectDeviceName,
|
||||
(BluetoothConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == BluetoothConnectionState.connected) {
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
@ -123,7 +129,7 @@ class PalmDetailLogic extends BaseGetXController {
|
||||
startTime: int.parse(state.starDate.value),
|
||||
endTime: int.parse(state.endDate.value),
|
||||
needAuthor: 1,
|
||||
publicKey: publicKeyDataList,
|
||||
signKey: signKeyDataList,
|
||||
privateKey: getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
|
||||
@ -308,7 +308,7 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
|
||||
// Get.log("state.isAdministrator.value:${state.isAdministrator.value}");
|
||||
Get.log("state.isAdministrator.value:${state.isAdministrator.value}");
|
||||
IoSenderManage.senderCustomPasswordsCommand(
|
||||
keyID: "1",
|
||||
userID: await Storage.getUid(),
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
|
||||
import 'dart:async';
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
||||
// import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_changeAdministratorPassword.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_senderCustomPasswords.dart';
|
||||
@ -48,21 +48,18 @@ class SaveLockLogic extends BaseGetXController {
|
||||
// 添加用户
|
||||
Future<void> _replyAddUserKey(Reply reply) async {
|
||||
var lockId = reply.data.sublist(2, 42);
|
||||
// print("lockId:$lockId");
|
||||
|
||||
var token = reply.data.sublist(42, 46);
|
||||
List<String> strTokenList = changeIntListToStringList(token);
|
||||
Storage.setStringList(saveBlueToken, strTokenList);
|
||||
// print("token:$token");
|
||||
|
||||
int status = reply.data[46];
|
||||
// print("status:$status reply.data:${reply.data}");
|
||||
|
||||
print("status:$status");
|
||||
Get.log("status:$status");
|
||||
switch (status) {
|
||||
case 0x00:
|
||||
//成功
|
||||
print("添加用户数据解析成功");
|
||||
Get.log("添加用户数据解析成功");
|
||||
state.lockUserNo = reply.data[47];
|
||||
|
||||
cancelBlueConnetctToastTimer();
|
||||
@ -70,7 +67,7 @@ class SaveLockLogic extends BaseGetXController {
|
||||
break;
|
||||
case 0x06:
|
||||
//无权限
|
||||
print("需要鉴权");
|
||||
Get.log("需要鉴权");
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
@ -95,17 +92,17 @@ class SaveLockLogic extends BaseGetXController {
|
||||
break;
|
||||
case 0x07:
|
||||
//无权限
|
||||
print("用户无权限");
|
||||
Get.log("用户无权限");
|
||||
dismissEasyLoading();
|
||||
break;
|
||||
case 0x09:
|
||||
// 权限校验错误
|
||||
print("添加用户权限校验错误");
|
||||
Get.log("添加用户权限校验错误");
|
||||
dismissEasyLoading();
|
||||
break;
|
||||
default:
|
||||
//失败
|
||||
print("领锁失败");
|
||||
Get.log("领锁失败");
|
||||
dismissEasyLoading();
|
||||
break;
|
||||
}
|
||||
@ -115,22 +112,21 @@ class SaveLockLogic extends BaseGetXController {
|
||||
Future<void> _replySenderCustomPasswords(Reply reply) async {
|
||||
var token = reply.data.sublist(5, 9);
|
||||
var saveStrList = changeIntListToStringList(token);
|
||||
print("_replyFactoryDataResetKeyToken:$token");
|
||||
Storage.setStringList(saveBlueToken, saveStrList);
|
||||
|
||||
int status = reply.data[2];
|
||||
print("status:$status");
|
||||
Get.log("status:$status");
|
||||
|
||||
switch (status) {
|
||||
case 0x00:
|
||||
//成功
|
||||
print("${reply.commandType!.typeValue} 数据解析成功");
|
||||
//成功
|
||||
Get.log("${reply.commandType!.typeValue} 数据解析成功");
|
||||
dismissEasyLoading();
|
||||
addLockAdminPassword(true);
|
||||
break;
|
||||
case 0x06:
|
||||
//无权限
|
||||
print("${reply.commandType!.typeValue} 需要鉴权");
|
||||
//无权限
|
||||
Get.log("${reply.commandType!.typeValue} 需要鉴权");
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
@ -151,19 +147,16 @@ class SaveLockLogic extends BaseGetXController {
|
||||
token: token);
|
||||
break;
|
||||
case 0x07:
|
||||
//无权限
|
||||
print("${reply.commandType!.typeValue} 用户无权限");
|
||||
|
||||
//无权限
|
||||
Get.log("${reply.commandType!.typeValue} 用户无权限");
|
||||
break;
|
||||
case 0x09:
|
||||
// 权限校验错误
|
||||
print("${reply.commandType!.typeValue} 权限校验错误");
|
||||
|
||||
// 权限校验错误
|
||||
Get.log("${reply.commandType!.typeValue} 权限校验错误");
|
||||
break;
|
||||
default:
|
||||
//失败
|
||||
print("${reply.commandType!.typeValue} 失败");
|
||||
|
||||
//失败
|
||||
Get.log("${reply.commandType!.typeValue} 失败");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -172,22 +165,21 @@ class SaveLockLogic extends BaseGetXController {
|
||||
Future<void> _replyChangeAdministratorPassword(Reply reply) async {
|
||||
var token = reply.data.sublist(5, 9);
|
||||
var saveStrList = changeIntListToStringList(token);
|
||||
print("_replyFactoryDataResetKeyToken:$token");
|
||||
Storage.setStringList(saveBlueToken, saveStrList);
|
||||
|
||||
int status = reply.data[2];
|
||||
print("status:$status");
|
||||
Get.log("status:$status");
|
||||
|
||||
switch (status) {
|
||||
case 0x00:
|
||||
//成功
|
||||
print("${reply.commandType!.typeValue} 数据解析成功");
|
||||
//成功
|
||||
Get.log("${reply.commandType!.typeValue} 数据解析成功");
|
||||
cancelBlueConnetctToastTimer();
|
||||
addLockAdminPassword(false);
|
||||
break;
|
||||
case 0x06:
|
||||
//无权限
|
||||
print("${reply.commandType!.typeValue} 需要鉴权");
|
||||
//无权限
|
||||
Get.log("${reply.commandType!.typeValue} 需要鉴权");
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
@ -209,26 +201,22 @@ class SaveLockLogic extends BaseGetXController {
|
||||
token: token);
|
||||
break;
|
||||
case 0x07:
|
||||
//无权限
|
||||
print("${reply.commandType!.typeValue} 用户无权限");
|
||||
|
||||
// 无权限
|
||||
Get.log("${reply.commandType!.typeValue} 用户无权限");
|
||||
break;
|
||||
case 0x09:
|
||||
// 权限校验错误
|
||||
print("${reply.commandType!.typeValue} 权限校验错误");
|
||||
|
||||
// 权限校验错误
|
||||
Get.log("${reply.commandType!.typeValue} 权限校验错误");
|
||||
break;
|
||||
default:
|
||||
//失败
|
||||
print("${reply.commandType!.typeValue} 失败");
|
||||
|
||||
// 失败
|
||||
Get.log("${reply.commandType!.typeValue} 失败");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 添加用户
|
||||
Future<void> addUserConnectBlue() async {
|
||||
// print("111111");
|
||||
// 进来之后首先连接
|
||||
showEasyLoading();
|
||||
showBlueConnetctToastTimer(action: (){
|
||||
@ -236,9 +224,7 @@ class SaveLockLogic extends BaseGetXController {
|
||||
state.saveBtnIsUsable.value = true;
|
||||
});
|
||||
BlueManage().bludSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async {
|
||||
// print("222222");
|
||||
if (deviceConnectionState == BluetoothConnectionState.connected){
|
||||
// print("333333");
|
||||
// 私钥
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
@ -269,7 +255,6 @@ class SaveLockLogic extends BaseGetXController {
|
||||
token: getTokenList
|
||||
);
|
||||
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
|
||||
print("444444");
|
||||
dismissEasyLoading();
|
||||
cancelBlueConnetctToastTimer();
|
||||
state.saveBtnIsUsable.value = true;
|
||||
@ -296,7 +281,6 @@ class SaveLockLogic extends BaseGetXController {
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
print("openDoorTokenPubToken:$getTokenList");
|
||||
|
||||
IoSenderManage.senderCustomPasswordsCommand(
|
||||
keyID: "1",
|
||||
@ -330,7 +314,7 @@ class SaveLockLogic extends BaseGetXController {
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
print("openDoorTokenPubToken:$getTokenList");
|
||||
Get.log("openDoorTokenPubToken:$getTokenList");
|
||||
|
||||
IoSenderManage.changeAdministratorPasswordCommand(
|
||||
keyID: "1",
|
||||
@ -345,7 +329,6 @@ class SaveLockLogic extends BaseGetXController {
|
||||
privateKey: getPrivateKeyList,
|
||||
token: getTokenList);
|
||||
} else if (deviceConnectionState == BluetoothConnectionState.disconnected) {
|
||||
print("444444");
|
||||
dismissEasyLoading();
|
||||
cancelBlueConnetctToastTimer();
|
||||
state.saveBtnIsUsable.value = true;
|
||||
@ -357,7 +340,6 @@ class SaveLockLogic extends BaseGetXController {
|
||||
}
|
||||
|
||||
void bindBlueAdmin() async{
|
||||
// print("state.lockInfo:${state.lockInfo}");
|
||||
|
||||
var positionMap = {};
|
||||
positionMap['longitude'] = state.addressInfo["longitude"];
|
||||
@ -385,8 +367,6 @@ class SaveLockLogic extends BaseGetXController {
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
bluetooth['signKey'] = signKeyDataList;
|
||||
|
||||
// print("addUser:publicKeyDataList$publicKeyDataList getPrivateKeyList:$getPrivateKeyList signKeyDataList:$signKeyDataList");
|
||||
|
||||
var entity = await ApiRepository.to.bindingBlueAdmin(
|
||||
lockAlias: state.aliName.value,
|
||||
position: positionMap,
|
||||
@ -468,7 +448,6 @@ class SaveLockLogic extends BaseGetXController {
|
||||
void onReady() {
|
||||
// TODO: implement onReady
|
||||
super.onReady();
|
||||
print("onReady()");
|
||||
|
||||
_initReplySubscription();
|
||||
}
|
||||
@ -477,7 +456,7 @@ class SaveLockLogic extends BaseGetXController {
|
||||
void onInit() {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
print("onInit()");
|
||||
|
||||
}
|
||||
|
||||
@override
|
||||
@ -487,4 +466,5 @@ class SaveLockLogic extends BaseGetXController {
|
||||
BlueManage().stopScan();
|
||||
super.onClose();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -52,8 +52,11 @@ class ExpireCardLogic extends BaseGetXController {
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
@ -67,7 +70,7 @@ class ExpireCardLogic extends BaseGetXController {
|
||||
startTime:state.deletExpireCardItemEntity.startDate!~/1000,
|
||||
endTime:state.deletExpireCardItemEntity.endDate!~/1000,
|
||||
needAuthor:1,
|
||||
publicKey:publicKeyDataList,
|
||||
signKey:signKeyDataList,
|
||||
privateKey:getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
@ -104,8 +107,11 @@ class ExpireCardLogic extends BaseGetXController {
|
||||
});
|
||||
BlueManage().bludSendData(state.deletExpireCardItemEntity.lockInfo!.btDeviceName!, (BluetoothConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == BluetoothConnectionState.connected){
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
@ -123,7 +129,7 @@ class ExpireCardLogic extends BaseGetXController {
|
||||
startTime:state.deletExpireCardItemEntity.startDate!~/1000,
|
||||
endTime:state.deletExpireCardItemEntity.endDate!~/1000,
|
||||
needAuthor:1,
|
||||
publicKey:publicKeyDataList,
|
||||
signKey:signKeyDataList,
|
||||
privateKey:getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
|
||||
@ -53,6 +53,9 @@ class ExpireFingerprintLogic extends BaseGetXController {
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
@ -68,7 +71,7 @@ class ExpireFingerprintLogic extends BaseGetXController {
|
||||
startTime:state.deletExpireFingerprintItemEntity.startDate!~/1000,
|
||||
endTime:state.deletExpireFingerprintItemEntity.endDate!~/1000,
|
||||
needAuthor:1,
|
||||
publicKey:publicKeyDataList,
|
||||
signKey:signKeyDataList,
|
||||
privateKey:getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
@ -105,8 +108,11 @@ class ExpireFingerprintLogic extends BaseGetXController {
|
||||
});
|
||||
BlueManage().bludSendData(state.deletExpireFingerprintItemEntity.lockInfo!.btDeviceName!, (BluetoothConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == BluetoothConnectionState.connected){
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
// var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
// List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
@ -124,7 +130,7 @@ class ExpireFingerprintLogic extends BaseGetXController {
|
||||
startTime:state.deletExpireFingerprintItemEntity.startDate!~/1000,
|
||||
endTime:state.deletExpireFingerprintItemEntity.endDate!~/1000,
|
||||
needAuthor:1,
|
||||
publicKey:publicKeyDataList,
|
||||
signKey:signKeyDataList,
|
||||
privateKey:getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user