merge:解决冲突

This commit is contained in:
anfe 2024-04-25 14:24:22 +08:00
commit 092c5d75d4
3 changed files with 61 additions and 35 deletions

View File

@ -55,53 +55,78 @@ class OTAUpgradeCommand extends SenderProtocol {
data.add(type1); data.add(type1);
data.add(type2); data.add(type2);
print('---> 指令 : $type1 $type2' );
// id 40 // id 40
int lockIDLength = utf8.encode(lockID!).length; int lockIDLength = utf8.encode(lockID!).length;
data.addAll(utf8.encode(lockID!)); data.addAll(utf8.encode(lockID!));
data = getFixedLengthList(data, 40 - lockIDLength); data = getFixedLengthList(data, 40 - lockIDLength);
print('---> 锁id :' + utf8.encode(lockID!).toString());
//userID 20 //userID 20
int userIDLength = utf8.encode(userID!).length; int userIDLength = utf8.encode(userID!).length;
data.addAll(utf8.encode(userID!)); data.addAll(utf8.encode(userID!));
data = getFixedLengthList(data, 20 - userIDLength); data = getFixedLengthList(data, 20 - userIDLength);
print('---> userID :' + utf8.encode(userID!).toString());
//platform 2 //platform 2
int platform0 = (platform! & 0xFF00) >> 8; int platform0 = (platform! & 0xFF00) >> 8;
int platform1 = platform! & 0xFF; int platform1 = platform! & 0xFF;
data.add(platform0); data.add(platform0);
data.add(platform1); data.add(platform1);
print('---> platform : $platform0 $platform1');
//product 2 //product 2
int product0 = (product! & 0xFF00) >> 8; // int product0 = (product! & 0xFF00) >> 8;
int product1 = product! & 0xFF; // int product1 = product! & 0xFF;
data.add(product0); // data.add(product0);
data.add(product1); // data.add(product1);
data.addAll([0,1]);// 01
print('---> platform : ${[0,1]}');
//HwVersion 20 //HwVersion 20
int hwVersionLength = utf8.encode(hwVersion!).length; int hwVersionLength = utf8.encode(hwVersion!).length;
data.addAll(utf8.encode(hwVersion!)); data.addAll(utf8.encode(hwVersion!));
data = getFixedLengthList(data, 20 - hwVersionLength); data = getFixedLengthList(data, 20 - hwVersionLength);
print('---> hwVersion : ${utf8.encode(hwVersion!)}');
//FwVersion 20 //FwVersion 20
int fwVersionLength = utf8.encode(fwVersion!).length; int fwVersionLength = utf8.encode(fwVersion!).length;
data.addAll(utf8.encode(fwVersion!)); data.addAll(utf8.encode(fwVersion!));
data = getFixedLengthList(data, 20 - fwVersionLength); data = getFixedLengthList(data, 20 - fwVersionLength);
print('---> FwVersion : ${utf8.encode(fwVersion!)}');
//fwSize 4 //fwSize 4
ByteData bytes = ByteData(4); // 4 ByteData bytes = ByteData(4); // 4
bytes.setInt32(0, fwSize!); bytes.setInt32(0, fwSize!);
List<int> byteList = bytes.buffer.asUint8List(); List<int> byteList = bytes.buffer.asUint8List();
data.addAll(byteList); data.addAll(byteList);
//fwMD5 16 print('---> fwSize : ${byteList}');
int fwMD5Length = utf8.encode(fwMD5!).length;
data.addAll(utf8.encode(fwMD5!)); // 16
data = getFixedLengthList(data, 16 - fwMD5Length); Uint8List result = Uint8List(16);
// 4
for (int i = 0; i < fwMD5!.length; i += 2) {
String hex = fwMD5!.substring(i, i + 2);
int byteValue = int.parse(hex, radix: 16);
result[i ~/ 2] = byteValue;
}
data.addAll(result);
print('---> fwMD5 : ${result}');
// token 4 Token 0 token失效或者第一次发送的时候token为0 // token 4 Token 0 token失效或者第一次发送的时候token为0
data.addAll(token!); data.addAll(token!);
print('--->1'+data.toString()); print('---> token : ${token}');
print('--->1' + data.toString());
if (needAuthor == 0) { if (needAuthor == 0) {
//AuthCodeLen 1 //AuthCodeLen 1
@ -120,6 +145,8 @@ class OTAUpgradeCommand extends SenderProtocol {
authCodeData.addAll(signKey!); authCodeData.addAll(signKey!);
print('---> ${utf8.encode(keyID!)} ${utf8.encode(userID!)} $token $signKey');
// KeyIDauthUserIDmd5加密之后就是authCode // KeyIDauthUserIDmd5加密之后就是authCode
var authCode = crypto.md5.convert(authCodeData); var authCode = crypto.md5.convert(authCodeData);
@ -149,7 +176,7 @@ class OTAUpgradeReply extends Reply {
data = dataDetail; data = dataDetail;
token = data.sublist(2, 6); token = data.sublist(2, 6);
status = data[6]; status = data[6];
print('--->2'+data.toString()); print('--->2' + data.toString());
errorWithStstus(status); errorWithStstus(status);
} }
} }

View File

@ -13,8 +13,8 @@ enum CommandType {
calibrationTime, // = 0x30f0 calibrationTime, // = 0x30f0
readStarLockStatusInfo, // 0x3040 readStarLockStatusInfo, // 0x3040
startOATUpgrade, //OTA升级开始 0x30E0 startOATUpgrade, //OTA升级开始 0x30E0
confirmationOTAUpgrade, //OTA升级开始 0x30E1 confirmationOTAUpgrade, //OTA升级开始 0x30E2
processOTAUpgrade, //OTA升级过程 0x30E2 processOTAUpgrade, //OTA升级过程 0x30E1
generalExtendedCommond, // = 0x3030 generalExtendedCommond, // = 0x3030
gecChangeAdministratorPassword, // - = 2 gecChangeAdministratorPassword, // - = 2

View File

@ -14,6 +14,8 @@ import 'package:star_lock/blue/io_protocol/io_processOtaUpgrade.dart';
import 'package:star_lock/blue/io_reply.dart'; import 'package:star_lock/blue/io_reply.dart';
import 'package:star_lock/blue/io_tool/io_tool.dart'; import 'package:star_lock/blue/io_tool/io_tool.dart';
import 'package:star_lock/blue/io_tool/manager_event_bus.dart'; import 'package:star_lock/blue/io_tool/manager_event_bus.dart';
import 'package:star_lock/blue/sender_manage.dart';
import 'package:star_lock/main/lockDetail/lockSet/lockSet/lockSet_logic.dart';
import 'package:star_lock/permission/permission_dialog.dart'; import 'package:star_lock/permission/permission_dialog.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/commonDataManage.dart'; import 'package:star_lock/tools/commonDataManage.dart';
@ -64,7 +66,7 @@ class LockEscalationLogic extends BaseGetXController {
} }
String md5Str = md5.convert(otaBin!).toString(); String md5Str = md5.convert(otaBin!).toString();
headJson!['fwMd5'] = md5Str; headJson!['fwMd5'] = md5Str;
blueOTAUpgrade(headJson!, [0,0,0,0]); blueOTAUpgrade(headJson!, [0, 0, 0, 0]);
} }
// ota // ota
@ -74,20 +76,13 @@ class LockEscalationLogic extends BaseGetXController {
if (deviceConnectionState == BluetoothConnectionState.connected) { if (deviceConnectionState == BluetoothConnectionState.connected) {
var privateKey = await Storage.getStringList(saveBluePrivateKey); var privateKey = await Storage.getStringList(saveBluePrivateKey);
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!); List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
var signKey = await Storage.getStringList(saveBlueSignKey); var signKey = await Storage.getStringList(saveBlueSignKey);
List<int> signKeyDataList = changeStringListToIntList(signKey!); List<int> signKeyDataList = changeStringListToIntList(signKey!);
String lockID = CommonDataManage.shareManager()?.currentLockSetInfoData String uid = await Storage.getUid() ?? '';
.lockId
?.toString() ??
'';
String keyID =
CommonDataManage.shareManager()?.currentKeyInfo.keyId?.toString() ??
'';
BlueManage().writeCharacteristicWithResponse(OTAUpgradeCommand( BlueManage().writeCharacteristicWithResponse(OTAUpgradeCommand(
lockID: lockID, lockID: BlueManage().connectDeviceName,
userID: await Storage.getUid(), userID: uid,
keyID: keyID, keyID: BlueManage().connectDeviceName,
platform: int.tryParse(data['platform']) ?? 0, platform: int.tryParse(data['platform']) ?? 0,
product: int.tryParse(data['product']) ?? 0, product: int.tryParse(data['product']) ?? 0,
hwVersion: data['hwVersion'], hwVersion: data['hwVersion'],
@ -96,7 +91,7 @@ class LockEscalationLogic extends BaseGetXController {
fwMD5: data['fwMd5'], fwMD5: data['fwMd5'],
needAuthor: 1, needAuthor: 1,
token: token, token: token,
signKey: signKeyDataList, signKey: signKeyDataList,
privateKey: getPrivateKeyList) privateKey: getPrivateKeyList)
.packageData()); .packageData());
} else if (deviceConnectionState == } else if (deviceConnectionState ==
@ -119,10 +114,11 @@ class LockEscalationLogic extends BaseGetXController {
} }
if (otaCount <= otaIndex) { if (otaCount <= otaIndex) {
int now = DateTime.now().millisecondsSinceEpoch ~/ 1000; int now = DateTime.now().millisecondsSinceEpoch ~/ 1000;
String msg = '传输完成 时间:${now - startSecond}'; String msg =
'传输完成 时间:${now - startSecond}秒 otaCount:$otaCount otaIndex:$otaIndex ';
closeOTADAta(); closeOTADAta();
print(msg); print(msg);
showToast(msg); // showToast(msg);
return; return;
} }
int star = otaIndex * 240; int star = otaIndex * 240;
@ -130,10 +126,11 @@ class LockEscalationLogic extends BaseGetXController {
if (end > length) { if (end > length) {
end = length; end = length;
} }
int size = end - star;
List<int> data = otaBin!.sublist(star, end); List<int> data = otaBin!.sublist(star, end);
state.otaProgress.value = otaIndex / otaCount; state.otaProgress.value = otaIndex / otaCount;
await BlueManage().writeCharacteristicWithResponse( await BlueManage().writeCharacteristicWithResponse(
ProcessOtaUpgradeCommand(index: otaIndex, size: length, data: data) ProcessOtaUpgradeCommand(index: otaIndex, size: size, data: data)
.packageData()); .packageData());
} }
@ -173,7 +170,7 @@ class LockEscalationLogic extends BaseGetXController {
Uint8List metaLenList = data.sublist(12, 16); Uint8List metaLenList = data.sublist(12, 16);
int metaLen = ByteData.sublistView(metaLenList).getUint32(0); int metaLen = ByteData.sublistView(metaLenList).getUint32(0);
if (metaLen < 2 || metaLen > 10240) { if (metaLen < 2 || metaLen > 10240) {
showToast('元数据长度错误'); showToast('文件校验失败 0x01');
return null; return null;
} }
// //
@ -190,13 +187,14 @@ class LockEscalationLogic extends BaseGetXController {
// //
Uint8List bin = data.sublist(binOffset.toInt(), data.length); Uint8List bin = data.sublist(binOffset.toInt(), data.length);
//md5 //md5
// String md5Str = md5.convert(bin).toString(); String md5Str = md5.convert(bin).toString().toUpperCase();
// if (md5Str != meta['fwMd5']) { print('---> $md5Str ${meta['fwMd5']}');
// showToast('固件MD5校验失败'); if (md5Str != meta['fwMd5']) {
// return false; showToast('文件校验失败 0x02');
// } return null;
}
if (bin.length != meta['fwSize']) { if (bin.length != meta['fwSize']) {
showToast('固件校验失败'); showToast('文件校验失败 0x03');
return null; return null;
} }
return bin; return bin;
@ -216,6 +214,7 @@ class LockEscalationLogic extends BaseGetXController {
if (reply is OTAUpgradeReply) { if (reply is OTAUpgradeReply) {
if (reply.status == 0x00) { if (reply.status == 0x00) {
// //
startOTAData();
processOtaUpgrade(); processOtaUpgrade();
} else if (reply.status == 0x06) { } else if (reply.status == 0x06) {
blueOTAUpgrade(headJson!, reply.token); blueOTAUpgrade(headJson!, reply.token);