fix:修复锁升级因为不兼容问题,导致无法升级。提高了对 固件 json 结构的解析

This commit is contained in:
anfe 2024-07-08 18:25:06 +08:00
parent a8414d1876
commit ea57d1058f
6 changed files with 45 additions and 52 deletions

View File

@ -65,67 +65,62 @@ class OTAUpgradeCommand extends SenderProtocol {
@override @override
List<int> messageDetail() { List<int> messageDetail() {
List<int> data = []; List<int> data = <int>[];
List<int> ebcData = []; List<int> ebcData = <int>[];
// //
int type = commandType!.typeValue; final int type = commandType!.typeValue;
double typeDouble = type / 256; final double typeDouble = type / 256;
int type1 = typeDouble.toInt(); final int type1 = typeDouble.toInt();
int type2 = type % 256; final int type2 = type % 256;
data.add(type1); data.add(type1);
data.add(type2); data.add(type2);
// id 40 // id 40
int lockIDLength = utf8.encode(lockID!).length; final 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);
//userID 20 //userID 20
int userIDLength = utf8.encode(userID!).length; final 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);
//platform 2 //platform 2
int platform0 = (platform! & 0xFF00) >> 8; final int platform0 = (platform! & 0xFF00) >> 8;
int platform1 = platform! & 0xFF; final int platform1 = platform! & 0xFF;
data.add(platform0); data.add(platform0);
data.add(platform1); data.add(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 data.addAll(<int>[0, 1]); // 01
//HwVersion 20 //HwVersion 20
int hwVersionLength = utf8.encode(hwVersion!).length; final 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);
//FwVersion 20 //FwVersion 20
int fwVersionLength = utf8.encode(fwVersion!).length; final 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);
//fwSize 4 //fwSize 4
ByteData bytes = ByteData(4); // 4 final ByteData bytes = ByteData(4); // 4
bytes.setInt32(0, fwSize!); bytes.setInt32(0, fwSize!);
List<int> byteList = bytes.buffer.asUint8List(); final List<int> byteList = bytes.buffer.asUint8List();
data.addAll(byteList); data.addAll(byteList);
// 16 // 16
Uint8List result = Uint8List(16); final Uint8List result = Uint8List(16);
// 4 // 4
for (int i = 0; i < fwMD5!.length; i += 2) { for (int i = 0; i < fwMD5!.length; i += 2) {
String hex = fwMD5!.substring(i, i + 2); final String hex = fwMD5!.substring(i, i + 2);
int byteValue = int.parse(hex, radix: 16); final int byteValue = int.parse(hex, radix: 16);
result[i ~/ 2] = byteValue; result[i ~/ 2] = byteValue;
} }
data.addAll(result); data.addAll(result);
@ -135,7 +130,7 @@ class OTAUpgradeCommand extends SenderProtocol {
//AuthCodeLen 1 //AuthCodeLen 1
data.add(0); data.add(0);
} else { } else {
List<int> authCodeData = []; final List<int> authCodeData = <int>[];
//KeyID //KeyID
authCodeData.addAll(utf8.encode(keyID!)); authCodeData.addAll(utf8.encode(keyID!));
@ -144,19 +139,19 @@ class OTAUpgradeCommand extends SenderProtocol {
authCodeData.addAll(utf8.encode(userID!)); authCodeData.addAll(utf8.encode(userID!));
//token 4 Token 0 //token 4 Token 0
authCodeData.addAll(token??[]); authCodeData.addAll(token ?? <int>[]);
authCodeData.addAll(signKey??[]); authCodeData.addAll(signKey ?? <int>[]);
// KeyIDauthUserIDmd5加密之后就是authCode // KeyIDauthUserIDmd5加密之后就是authCode
var authCode = crypto.md5.convert(authCodeData); final crypto.Digest authCode = crypto.md5.convert(authCodeData);
data.add(authCode.bytes.length); data.add(authCode.bytes.length);
data.addAll(authCode.bytes); data.addAll(authCode.bytes);
} }
if ((data.length % 16) != 0) { if ((data.length % 16) != 0) {
int add = (16 - data.length % 16); final int add = 16 - data.length % 16;
for (int i = 0; i < add; i++) { for (int i = 0; i < add; i++) {
data.add(0); data.add(0);
} }
@ -164,7 +159,6 @@ class OTAUpgradeCommand extends SenderProtocol {
printLog(data); printLog(data);
if (encrypt) { if (encrypt) {
// LockId进行SM4 ECB加密 key:544d485f633335373034383064613864 // LockId进行SM4 ECB加密 key:544d485f633335373034383064613864
ebcData = SM4.encrypt(data, key: privateKey, mode: SM4CryptoMode.ECB); ebcData = SM4.encrypt(data, key: privateKey, mode: SM4CryptoMode.ECB);
return ebcData; return ebcData;
@ -176,7 +170,7 @@ class OTAUpgradeCommand extends SenderProtocol {
} }
class OTAUpgradeReply extends Reply { class OTAUpgradeReply extends Reply {
List<int> token = []; List<int> token = <int>[];
OTAUpgradeReply.parseData(CommandType commandType, List<int> dataDetail) OTAUpgradeReply.parseData(CommandType commandType, List<int> dataDetail)
: super.parseData(commandType, dataDetail) { : super.parseData(commandType, dataDetail) {

View File

@ -1345,7 +1345,8 @@ class _LockDetailPageState extends State<LockDetailPage>
final double textSizeWidth = textPainter.size.width; // final double textSizeWidth = textPainter.size.width; //
if (textSizeWidth > 358.w * 2 - 20) { if (textSizeWidth > 358.w * 2 - 20) {
lockAlias = '${lockAlias.substring(0, 25)}...'; lockAlias =
'${lockAlias.substring(0, lockAlias.length > 25 ? 25 : lockAlias.length)}...';
} }
return Center( return Center(
child: Stack( child: Stack(
@ -1430,7 +1431,7 @@ class _LockDetailPageState extends State<LockDetailPage>
} }
} }
Future<void> startOpenLock() async{ Future<void> startOpenLock() async {
if (state.openLockBtnState.value == 1) { if (state.openLockBtnState.value == 1) {
return; return;
} }

View File

@ -92,8 +92,8 @@ class LockEscalationLogic extends BaseGetXController {
lockID: BlueManage().connectDeviceName, lockID: BlueManage().connectDeviceName,
userID: uid, userID: uid,
keyID: BlueManage().connectDeviceName, keyID: BlueManage().connectDeviceName,
platform: int.tryParse(data['platform'] ?? '0'), platform: int.tryParse(data['platform'] ?? '0') ?? 0,
product: int.tryParse(data['product'] ?? '0'), product: int.tryParse(data['product'] ?? '0') ?? 0,
hwVersion: data['hwVersion'], hwVersion: data['hwVersion'],
fwVersion: data['fwVersion'], fwVersion: data['fwVersion'],
fwSize: data['fwSize'], fwSize: data['fwSize'],

View File

@ -182,17 +182,7 @@ class _LockEscalationPageState extends State<LockEscalationPage> {
height: 20.h, height: 20.h,
), ),
Text( Text(
'${'机型'.tr}${logic.headJson?['platform']}-${logic.headJson?['product']}', '${'机型'.tr}${logic.headJson?['platform']}',
style: TextStyle(
color: AppColors.blackColor,
fontSize: 22.sp,
fontWeight: FontWeight.w600),
),
SizedBox(
height: 10.h,
),
Text(
'${'硬件版本'.tr}${logic.headJson?['hwVersion']}',
style: TextStyle( style: TextStyle(
color: AppColors.blackColor, color: AppColors.blackColor,
fontSize: 22.sp, fontSize: 22.sp,

View File

@ -1,10 +1,11 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
import 'package:star_lock/flavors.dart'; import 'package:star_lock/flavors.dart';
import 'package:star_lock/mine/mine/starLockMine_state.dart'; import 'package:star_lock/mine/mine/starLockMine_state.dart';
import 'package:star_lock/tools/commonItem.dart';
import 'package:star_lock/tools/customer_tool.dart';
import '../../appRouters.dart'; import '../../appRouters.dart';
import '../../app_settings/app_colors.dart'; import '../../app_settings/app_colors.dart';
@ -204,6 +205,12 @@ class StarLockMinePageState extends State<StarLockMinePage> with BaseWidget {
Get.back(); Get.back();
Get.toNamed(Routers.lockMallPage); Get.toNamed(Routers.lockMallPage);
}), }),
if (F.isSKY)
mineItem('images/mine/icon_mine_main_shoppingcart.png',
TranslationLoader.lanKeys!.supportStaff!.tr, () {
Get.back();
CustomerTool.openCustomerService();
}),
mineItem('images/mine/icon_mine_main_about.png', mineItem('images/mine/icon_mine_main_about.png',
TranslationLoader.lanKeys!.about!.tr, () { TranslationLoader.lanKeys!.about!.tr, () {
Get.back(); Get.back();

View File

@ -353,12 +353,13 @@ class _MineSetPageState extends State<MineSetPage>
action: () { action: () {
logic.showToast('功能暂未开放'.tr); logic.showToast('功能暂未开放'.tr);
}), }),
CommonItem( if (F.isXHJ)
leftTitel: TranslationLoader.lanKeys!.supportStaff!.tr, CommonItem(
isHaveLine: widget.showAbout, leftTitel: TranslationLoader.lanKeys!.supportStaff!.tr,
isHaveDirection: true, isHaveLine: widget.showAbout,
action: CustomerTool.openCustomerService, isHaveDirection: true,
), action: CustomerTool.openCustomerService,
),
if (widget.showAbout) if (widget.showAbout)
CommonItem( CommonItem(
leftTitel: TranslationLoader.lanKeys!.about!.tr, leftTitel: TranslationLoader.lanKeys!.about!.tr,