diff --git a/lib/blue/io_protocol/io_gateway_configuringWifi.dart b/lib/blue/io_protocol/io_gateway_configuringWifi.dart index 7bedc725..31fbcd96 100644 --- a/lib/blue/io_protocol/io_gateway_configuringWifi.dart +++ b/lib/blue/io_protocol/io_gateway_configuringWifi.dart @@ -6,8 +6,8 @@ import '../io_reply.dart'; import '../io_sender.dart'; import '../io_tool/io_tool.dart'; import '../io_type.dart'; -import '../sm4Encipher/sm4.dart'; -import 'package:crypto/crypto.dart' as crypto; +// import '../sm4Encipher/sm4.dart'; +// import 'package:crypto/crypto.dart' as crypto; class GatewayConfiguringWifiCommand extends SenderProtocol { @@ -51,13 +51,6 @@ class GatewayConfiguringWifiCommand extends SenderProtocol { data.add(subData.length); data.addAll(subData); - // if ((data.length % 16) != 0) { - // final int add = 16 - data.length % 16; - // for (int i = 0; i < add; i++) { - // data.add(0); - // } - // } - printLog(data); return data; } diff --git a/lib/blue/io_protocol/io_gateway_getStatus.dart b/lib/blue/io_protocol/io_gateway_getStatus.dart new file mode 100644 index 00000000..6b624a65 --- /dev/null +++ b/lib/blue/io_protocol/io_gateway_getStatus.dart @@ -0,0 +1,65 @@ + +// 获取网关状态 +import 'dart:convert'; + +import '../io_reply.dart'; +import '../io_sender.dart'; +import '../io_tool/io_tool.dart'; +import '../io_type.dart'; +// import '../sm4Encipher/sm4.dart'; +// import 'package:crypto/crypto.dart' as crypto; + +class GatewayGetStatusCommand extends SenderProtocol { + + GatewayGetStatusCommand({ + this.lockID, + this.userID, + }) : super(CommandType.gatewayGetStatus); + + String? lockID; + String? userID; + + @override + String toString() { + return 'GatewayGetStatusCommand{lockID: $lockID, userID: $userID}'; + } + + @override + List messageDetail() { + final List data = []; + List subData = []; + + // 指令类型 + final int type = commandType!.typeValue; + final double typeDouble = type / 256; + final int type1 = typeDouble.toInt(); + final int type2 = type % 256; + data.add(type1); + data.add(type2); + + //lockID 40 + final int ssidLength = utf8.encode(lockID!).length; + subData.addAll(utf8.encode(lockID!)); + subData = getFixedLengthList(subData, 40 - ssidLength); + + //userID 20 + final int passwordLength = utf8.encode(userID!).length; + subData.addAll(utf8.encode(userID!)); + subData = getFixedLengthList(subData, 20 - passwordLength); + + data.add(subData.length); + data.addAll(subData); + + printLog(data); + return data; + } +} + +class GatewayGetStatusReply extends Reply { + GatewayGetStatusReply.parseData(CommandType commandType, List dataDetail) + : super.parseData(commandType, dataDetail) { + data = dataDetail; + final int status = data[2]; + errorWithStstus(status); + } +} diff --git a/lib/blue/io_protocol/io_gateway_getWifiList.dart b/lib/blue/io_protocol/io_gateway_getWifiList.dart index 5cf24024..739a3622 100644 --- a/lib/blue/io_protocol/io_gateway_getWifiList.dart +++ b/lib/blue/io_protocol/io_gateway_getWifiList.dart @@ -1,14 +1,14 @@ import 'dart:convert'; -import 'package:crypto/crypto.dart' as crypto; +// import 'package:crypto/crypto.dart' as crypto; import '../../app_settings/app_settings.dart'; import '../io_reply.dart'; import '../io_sender.dart'; import '../io_tool/io_tool.dart'; import '../io_type.dart'; -import '../sm4Encipher/sm4.dart'; +// import '../sm4Encipher/sm4.dart'; class GatewayGetWifiCommand extends SenderProtocol { @@ -47,13 +47,6 @@ class GatewayGetWifiCommand extends SenderProtocol { data.add(subData.length); data.addAll(subData); - // if ((data.length % 16) != 0) { - // final int add = 16 - data.length % 16; - // for (int i = 0; i < add; i++) { - // data.add(0); - // } - // } - printLog(data); return data; } diff --git a/lib/blue/io_type.dart b/lib/blue/io_type.dart index f4e90564..dcf43365 100755 --- a/lib/blue/io_type.dart +++ b/lib/blue/io_type.dart @@ -24,6 +24,7 @@ enum CommandType { startOATUpgrade, //OTA升级开始 0x30E0 confirmationOTAUpgrade, //OTA升级开始 0x30E2 processOTAUpgrade, //OTA升级过程 0x30E1 + gatewayGetStatus,//获取网关状态 0x30F8 gatewayConfiguringWifi,//网关配网 0x30F4 gatewayConfiguringWifiResult,//网关配网结果 0x30F5 gatewayGetWifiList,//网关获取附近的wifi列表 0x30F6 @@ -205,6 +206,11 @@ extension ExtensionCommandType on CommandType { type = CommandType.gatewayGetWifiListResult; } break; + case 0x30F8: + { + type = CommandType.gatewayGetStatus; + } + break; default: { type = CommandType.readLockStatusInfo; @@ -304,6 +310,9 @@ extension ExtensionCommandType on CommandType { case CommandType.gatewayGetWifiListResult: type = 0x30F7; break; + case CommandType.gatewayGetStatus: + type = 0x30F8; + break; default: type = 0x300A; break; @@ -321,6 +330,7 @@ extension ExtensionCommandType on CommandType { case CommandType.processOTAUpgrade: case CommandType.gatewayGetWifiList: case CommandType.gatewayConfiguringWifi: + case CommandType.gatewayGetStatus: //不加密 type = 0x20; break; @@ -436,6 +446,9 @@ extension ExtensionCommandType on CommandType { case 0x30F7: t = '网关获取附近的wifi列表结果'; break; + case 0x30F8: + t = '获取网关状态'; + break; default: t = '读星锁状态信息'; break; diff --git a/lib/blue/reciver_data.dart b/lib/blue/reciver_data.dart index d7d39dc9..b4a11e88 100755 --- a/lib/blue/reciver_data.dart +++ b/lib/blue/reciver_data.dart @@ -33,6 +33,7 @@ import 'io_protocol/io_addUser.dart'; import 'io_protocol/io_checkingCardStatus.dart'; import 'io_protocol/io_checkingUserInfoCount.dart'; import 'io_protocol/io_configuringWifi.dart'; +import 'io_protocol/io_gateway_getStatus.dart'; import 'io_protocol/io_getPrivateKey.dart'; import 'io_protocol/io_getPublicKey.dart'; import 'io_protocol/io_getStarLockStatusInfo.dart'; @@ -272,6 +273,11 @@ class CommandReciverManager { reply = GatewayGetWifiListReply.parseData(commandType, data); } break; + case CommandType.gatewayGetStatus: + { + reply = GatewayGetStatusReply.parseData(commandType, data); + } + break; case CommandType.generalExtendedCommond: { // 子命令类型 diff --git a/lib/blue/sender_manage.dart b/lib/blue/sender_manage.dart index ec436a09..bfee2f39 100755 --- a/lib/blue/sender_manage.dart +++ b/lib/blue/sender_manage.dart @@ -26,6 +26,7 @@ import 'io_protocol/io_configuringWifi.dart'; import 'io_protocol/io_editUser.dart'; import 'io_protocol/io_factoryDataReset.dart'; import 'io_protocol/io_gateway_configuringWifi.dart'; +import 'io_protocol/io_gateway_getStatus.dart'; import 'io_protocol/io_getPrivateKey.dart'; import 'io_protocol/io_getPublicKey.dart'; import 'io_protocol/io_getStarLockStatusInfo.dart'; @@ -52,7 +53,7 @@ import 'io_protocol/io_updataLockSet.dart'; import 'sender_data.dart'; class IoSenderManage { - //todo:获取公钥 + // 获取公钥 static void getPublicKey({String? lockId, CommandSendCallBack? callBack}) { CommandSenderManager().managerSendData( command: GetPublicKeyCommand( @@ -62,7 +63,7 @@ class IoSenderManage { callBack: callBack); } - //todo:获取私钥 + // 获取私钥 static void getPrivateKey( {String? lockId, String? keyID, // 钥匙ID @@ -84,7 +85,7 @@ class IoSenderManage { callBack: callBack); } - //todo:添加用户 + // 添加用户 static void senderAddUser( {String? lockID, String? authUserID, @@ -136,7 +137,7 @@ class IoSenderManage { callBack: callBack); } - //todo:修改用户 + // 修改用户 static void senderEditUser( {String? lockID, String? authUserID, @@ -172,7 +173,7 @@ class IoSenderManage { callBack: callBack); } - //todo:删除 + // 删除 static void deletUser( {String? lockID, String? authUserID, @@ -196,7 +197,7 @@ class IoSenderManage { callBack: callBack); } - //todo:开锁 + // 开锁 static void senderOpenLock( {String? lockID, String? userID, @@ -223,7 +224,7 @@ class IoSenderManage { callBack: callBack); } - //todo:获取锁状态 弃用 + // 获取锁状态 弃用 // static void senderGetLockStatu( // {String? lockID, // String? userID, @@ -238,7 +239,7 @@ class IoSenderManage { // callBack: callBack); // } - //todo:获取星锁状态信息 + // 获取星锁状态信息 static void senderGetStarLockStatuInfo( {required String? lockID, required String? userID, @@ -259,7 +260,7 @@ class IoSenderManage { callBack: callBack); } - //todo:转移权限 + // 转移权限 static void senderTransferPermissions( {required String? lockID, required String? authUserID, @@ -285,7 +286,7 @@ class IoSenderManage { callBack: callBack); } - //todo:转移智能锁 + // 转移智能锁 static void sendTransferSmartLockCommand( {required String? lockID, required String? userID, @@ -307,7 +308,7 @@ class IoSenderManage { callBack: callBack); } - //todo:恢复出厂设置 + // 恢复出厂设置 static void senderFactoryDataReset( {required String? lockID, required String? userID, @@ -329,7 +330,7 @@ class IoSenderManage { callBack: callBack); } - //todo:设置开锁密码 + // 设置开锁密码 static void senderCustomPasswordsCommand( {required String? keyID, required String? userID, @@ -366,7 +367,7 @@ class IoSenderManage { callBack: callBack); } - //todo:修改管理员密码 + // 修改管理员密码 static void changeAdministratorPasswordCommand( {required String? keyID, required String? userID, @@ -399,7 +400,7 @@ class IoSenderManage { callBack: callBack); } - //todo:重置开锁密码 + // 重置开锁密码 static void senderResetPasswordsCommand( {required String? keyID, required String? userID, @@ -422,7 +423,7 @@ class IoSenderManage { callBack: callBack); } - //todo:添加指纹开始 弃用 + // 添加指纹开始 弃用 // static void senderAddFingerprintCommand( // {required String? keyID, // required String? userID, @@ -451,7 +452,7 @@ class IoSenderManage { // callBack: callBack); // } - //todo:添加指纹开始(带限时、循环、胁迫...) + // 添加指纹开始(带限时、循环、胁迫...) static void senderAddFingerprintWithTimeCycleCoercionCommand( {required String? keyID, required String? userID, @@ -496,7 +497,7 @@ class IoSenderManage { callBack: callBack); } - //todo:取消添加指纹 + // 取消添加指纹 static void senderCancelAddFingerprintCommand( {required String? keyID, required String? userID, @@ -517,7 +518,7 @@ class IoSenderManage { callBack: callBack); } - //todo:添加卡开始旧版 + // 添加卡开始旧版 // static void senderAddICCardCommand( // {required String? keyID, // required String? userID, @@ -546,7 +547,7 @@ class IoSenderManage { // callBack: callBack); // } - //todo:添加卡开始(带限时、循环、胁迫...) + // 添加卡开始(带限时、循环、胁迫...) static void senderAddCardWithTimeCycleCoercionCommand( {required String? keyID, required String? userID, @@ -591,7 +592,7 @@ class IoSenderManage { callBack: callBack); } - //todo:取消添加指纹 + // 取消添加指纹 static void senderCancelAddCardCommand( {required String? keyID, required String? userID, @@ -612,7 +613,7 @@ class IoSenderManage { callBack: callBack); } - //todo:添加遥控开始(带限时、循环、胁迫...) + // 添加遥控开始(带限时、循环、胁迫...) static void senderAddRemoteControlWithTimeCycleCoercionCommand( {required String? keyID, required String? userID, @@ -657,7 +658,7 @@ class IoSenderManage { callBack: callBack); } - //todo:取消添加遥控 + // 取消添加遥控 static void senderCancelAddRemoteControlCommand( {required String? keyID, required String? userID, @@ -678,7 +679,7 @@ class IoSenderManage { callBack: callBack); } - //todo:添加人脸开始 + // 添加人脸开始 static void senderAddFaceCommand( {required String? keyID, required String? userID, @@ -723,7 +724,7 @@ class IoSenderManage { callBack: callBack); } - //todo:取消添加人脸 + // 取消添加人脸 static void senderCancelAddFaceCommand( {required String? keyID, required String? userID, @@ -744,7 +745,7 @@ class IoSenderManage { callBack: callBack); } - //todo:添加掌静脉开始(带限时、循环、胁迫...) + // 添加掌静脉开始(带限时、循环、胁迫...) static void senderAddPalmWithTimeCycleCoercionCommand( {required String? keyID, required String? userID, @@ -789,7 +790,7 @@ class IoSenderManage { callBack: callBack); } - //todo:取消添加掌静脉 + // 取消添加掌静脉 static void senderCancelAddPalmCommand( {required String? keyID, required String? userID, @@ -810,7 +811,7 @@ class IoSenderManage { callBack: callBack); } - //todo:校验时间 + // 校验时间 static void senderTimingCommand( {required String? lockID, required String? userID, @@ -833,7 +834,7 @@ class IoSenderManage { callBack: callBack); } - //todo:自动落锁 - 废弃 + // 自动落锁 - 废弃 // static void senderAutomaticPadlockCommand({ // required String? lockID, // required String? userID, @@ -855,7 +856,7 @@ class IoSenderManage { // ), callBack:callBack); // } - //todo:事件记录(页数查询) + // 事件记录(页数查询) static void senderReferEventRecordNumberCommand( {required String? keyID, required String? userID, @@ -880,7 +881,7 @@ class IoSenderManage { callBack: callBack); } - //todo:事件记录(时间查询) + // 事件记录(时间查询) static void senderReferEventRecordTimeCommand( {required String? keyID, required String? userID, @@ -907,7 +908,7 @@ class IoSenderManage { callBack: callBack); } - //todo:查询指纹状态 + // 查询指纹状态 static void senderQueryingFingerprintStatusCommand( {required String? keyID, required String? userID, @@ -934,7 +935,7 @@ class IoSenderManage { callBack: callBack); } - //todo:查询卡片状态 + // 查询卡片状态 static void senderCheckingCardStatusCommand( {required String? keyID, required String? userID, @@ -961,7 +962,7 @@ class IoSenderManage { callBack: callBack); } - //todo:查询人脸状态 + // 查询人脸状态 static void senderQueryingFaceStatusCommand( {required String? keyID, required String? userID, @@ -988,7 +989,7 @@ class IoSenderManage { callBack: callBack); } - //todo:查询用户、指纹、密码、卡片数量(用于判断是否同步) + // 查询用户、指纹、密码、卡片数量(用于判断是否同步) static void senderCheckingUserInfoCountCommand( {required String? keyID, required String? userID, @@ -1013,7 +1014,7 @@ class IoSenderManage { callBack: callBack); } - //todo:wifi列表 + // wifi列表 static void getWifiListCommand( {required String? keyID, required String? userID, @@ -1034,7 +1035,7 @@ class IoSenderManage { callBack: callBack); } - //todo:配置wifi + // 配置wifi static void senderConfiguringWifiCommand( {required String? keyID, required String? userID, @@ -1067,7 +1068,7 @@ class IoSenderManage { callBack: callBack); } - //todo:添加胁迫指纹 + // 添加胁迫指纹 // static void senderAddStressFingerprintCommand( // {required String? keyID, // required String? userID, @@ -1099,7 +1100,7 @@ class IoSenderManage { // callBack: callBack); // } - //todo:添加胁迫卡片 + // 添加胁迫卡片 // static void senderAddStressICCardCommand( // {required String? keyID, // required String? userID, @@ -1131,7 +1132,7 @@ class IoSenderManage { // callBack: callBack); // } - //todo:添加胁迫密码 + // 添加胁迫密码 static void senderAddStressPasswordCommand( {required String? keyID, required String? userID, @@ -1160,7 +1161,7 @@ class IoSenderManage { callBack: callBack); } - //todo:读取支持功能(不带参数)启用/禁用 + // 读取支持功能(不带参数)启用/禁用 static void readSupportFunctionsNoParametersCommand( {required String? keyID, required String? userID, @@ -1183,7 +1184,7 @@ class IoSenderManage { callBack: callBack); } - //todo:设置支持功能(不带参数)启用/禁用 + // 设置支持功能(不带参数)启用/禁用 static void setSupportFunctionsNoParametersCommand( {required String? keyID, required String? userID, @@ -1208,7 +1209,7 @@ class IoSenderManage { callBack: callBack); } - //todo:读取支持功能(带参数)启用/禁用 + // 读取支持功能(带参数)启用/禁用 static void readSupportFunctionsWithParametersCommand( {required String? keyID, required String? userID, @@ -1231,7 +1232,7 @@ class IoSenderManage { callBack: callBack); } - //todo:设置支持功能(带参数)启用/禁用 + // 设置支持功能(带参数)启用/禁用 static void setSupportFunctionsWithParametersCommand( {required String? keyID, required String? userID, @@ -1258,7 +1259,7 @@ class IoSenderManage { callBack: callBack); } - //todo:读取管理员密码 + // 读取管理员密码 static void senderReadAdminPasswordCommand( {required String? keyID, required String? userID, @@ -1559,4 +1560,18 @@ class IoSenderManage { callBack: callBack); } + // 获取网关状态 + static void gatewayGetStatusCommand({ + required String? lockID, + required String? userID, + CommandSendCallBack? callBack}) { + CommandSenderManager().managerSendData( + command: GatewayGetStatusCommand( + lockID: lockID, + userID: userID + ), + isBeforeAddUser: true, + callBack: callBack); + } + } diff --git a/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_logic.dart b/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_logic.dart index 94645ce0..80d3eac9 100644 --- a/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_logic.dart +++ b/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_logic.dart @@ -21,12 +21,12 @@ class GatewayConfigurationWifiLogic extends BaseGetXController { Future gatewayDistributionNetwork() async{ final LoginEntity entity = await ApiRepository.to.gatewayDistributionNetwork( gatewayName: state.gatewayNamePasswardTF.text, - gatewayMac: state.macAddress.value, - serialNumber: DateTime.now().millisecondsSinceEpoch.toString(), + gatewayMac: state.gatewayModel.mac, + serialNumber:state.gatewayModel.serialNum, gatewayType: 2, networkName: state.wifiNameTF.text, - networkMac: state.macAddress.value, - version: '1.0.0', + networkMac: state.gatewayModel.wifiMac, + version: state.gatewayModel.gatewayVersion, ); if(entity.errorCode!.codeIsSuccessful){ showToast('配网成功'.tr, something:(){ diff --git a/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_page.dart b/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_page.dart index 470f810b..7e4b81a0 100755 --- a/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_page.dart +++ b/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_page.dart @@ -1,4 +1,4 @@ -import 'package:flutter/cupertino.dart'; + import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -75,11 +75,11 @@ class _GatewayConfigurationWifiPageState extends State CommonItem( + CommonItem( leftTitel: '网络MAC'.tr, - rightTitle: state.macAddress.value, + rightTitle: state.gatewayModel.wifiMac, // allHeight: 100.h, - isHaveLine: false)), + isHaveLine: false), // SizedBox( // height: 10.h, // ), diff --git a/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_state.dart b/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_state.dart index a77f7151..82b0066c 100644 --- a/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_state.dart +++ b/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_state.dart @@ -1,6 +1,9 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:star_lock/app_settings/app_settings.dart'; + +import '../selectGateway/getGatewayInfo_model.dart'; class GatewayConfigurationWifiState{ GatewayConfigurationWifiState() { @@ -9,12 +12,12 @@ class GatewayConfigurationWifiState{ wifiNameTF.text = map['wifiName']; } - if (map['macAddress'] != null && map['macAddress'] != '') { - macAddress = map['macAddress']; + if (map['gatewayModel'] != null && map['gatewayModel'] != '') { + gatewayModel = map['gatewayModel']; } } - RxString macAddress = ''.obs; + GetGatewayInfoModel gatewayModel = GetGatewayInfoModel(); RxBool isUseStaticIP = false.obs; final TextEditingController wifiNameTF = TextEditingController(); diff --git a/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_page.dart b/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_page.dart index 8646f242..fc031e43 100644 --- a/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_page.dart +++ b/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_page.dart @@ -50,7 +50,7 @@ class _GatewayGetWifiListPageState extends State with Ro return _messageListItem(wifiNameStr['wifiName'], wifiNameStr['rssi'], () { Get.toNamed(Routers.gatewayConfigurationWifiPage, arguments: { 'wifiName': wifiNameStr['wifiName'], - 'macAddress': state.macAddress + 'gatewayModel': state.gatewayModel }); }); }) : NoData(noDataHeight: 1.sh - ScreenUtil().statusBarHeight - ScreenUtil().bottomBarHeight - 64.h)), @@ -63,7 +63,7 @@ class _GatewayGetWifiListPageState extends State with Ro onClick: () { Get.toNamed(Routers.gatewayConfigurationWifiPage, arguments: { 'wifiName': '', - 'macAddress': state.macAddress + 'gatewayModel': state.gatewayModel }); }), SizedBox( diff --git a/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_state.dart b/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_state.dart index ad922eeb..0ef78d83 100644 --- a/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_state.dart +++ b/lib/mine/gateway/addGateway/gatewayGetWifiList/gatewayGetWifiList_state.dart @@ -2,17 +2,19 @@ import 'package:get/get.dart'; +import '../selectGateway/getGatewayInfo_model.dart'; + class GatewayGetWifiListState{ GatewayGetWifiListState() { var map = Get.arguments; - if (map['macAddress'] != null && map['macAddress'] != '') { - macAddress = map['macAddress']; + if (map['gatewayModel'] != null && map['gatewayModel'] != '') { + gatewayModel = map['gatewayModel']; } } final RxList> wifiNameDataList = >[].obs; - String macAddress = ''; + GetGatewayInfoModel gatewayModel = GetGatewayInfoModel(); RxBool ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 RxInt sureBtnState = 0.obs; } \ No newline at end of file diff --git a/lib/mine/gateway/addGateway/selectGateway/getGatewayInfo_model.dart b/lib/mine/gateway/addGateway/selectGateway/getGatewayInfo_model.dart new file mode 100644 index 00000000..b324c514 --- /dev/null +++ b/lib/mine/gateway/addGateway/selectGateway/getGatewayInfo_model.dart @@ -0,0 +1,7 @@ + +class GetGatewayInfoModel{ + late String mac; + late String serialNum; + late String gatewayVersion; + late String wifiMac; +} \ No newline at end of file diff --git a/lib/mine/gateway/addGateway/selectGateway/selectGatewayList_logic.dart b/lib/mine/gateway/addGateway/selectGateway/selectGatewayList_logic.dart index 98a1e798..a87d7246 100644 --- a/lib/mine/gateway/addGateway/selectGateway/selectGatewayList_logic.dart +++ b/lib/mine/gateway/addGateway/selectGateway/selectGatewayList_logic.dart @@ -1,4 +1,5 @@ +import 'dart:async'; import 'dart:io'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; @@ -9,12 +10,87 @@ import 'package:star_lock/tools/baseGetXController.dart'; import '../../../../appRouters.dart'; import '../../../../app_settings/app_settings.dart'; import '../../../../blue/blue_manage.dart'; +import '../../../../blue/io_protocol/io_gateway_getStatus.dart'; +import '../../../../blue/io_reply.dart'; +import '../../../../blue/io_tool/io_tool.dart'; +import '../../../../blue/io_tool/manager_event_bus.dart'; +import '../../../../blue/sender_manage.dart'; +import '../../../../tools/storage.dart'; import '../../../../widget/permission/permission_dialog.dart'; +import 'getGatewayInfo_model.dart'; import 'selectGatewayList_state.dart'; class SelectGatewayListLogic extends BaseGetXController { SelectGatewayListState state = SelectGatewayListState(); + // 监听设备返回的数据 + late StreamSubscription _replySubscription; + void _initReplySubscription() { + _replySubscription = EventBusManager().eventBus!.on().listen((Reply reply) async { + + // 获取网关状态 + if(reply is GatewayGetStatusReply) { + _replyGatewayGetStatusReply(reply); + } + }); + } + + // WIFI配网结果 + Future _replyGatewayGetStatusReply(Reply reply) async { + final int status = reply.data[2]; + + switch(status){ + case 0x00: + //成功 + // state.sureBtnState.value = 0; + cancelBlueConnetctToastTimer(); + dismissEasyLoading(); + + final GetGatewayInfoModel gatewayModel = GetGatewayInfoModel(); + // 网关MAC地址 + int index = 3; + final List macList = reply.data.sublist(index, index + 20); + final String macStr = utf8String(macList); + // lockInfo['mac'] = macStr; + gatewayModel.mac = macStr; + index = index + 20; + AppLog.log('网关MAC地址 macList:$macList macStr:$macStr'); + + // 网关序列号 + final List serialNum = reply.data.sublist(index, index + 20); + final String serialNumStr = utf8String(serialNum); + // lockInfo['serialNum'] = serialNumStr; + gatewayModel.serialNum = serialNumStr; + index = index + 20; + AppLog.log('网关序列号 serialNum:$serialNum serialNumStr:$serialNumStr'); + + // 网关版本 + final List gatewayVersion = reply.data.sublist(index, index + 20); + final String gatewayVersionStr = utf8String(gatewayVersion); + // lockInfo['gatewayVersion'] = gatewayVersionStr; + gatewayModel.gatewayVersion = gatewayVersionStr; + index = index + 20; + AppLog.log('软件版本 gatewayVersion:$gatewayVersion gatewayVersionStr:$gatewayVersionStr'); + + // 硬件版本 + final List wifiMac = reply.data.sublist(index, index + 20); + final String wifiMacStr = utf8String(wifiMac); + // lockInfo['wifiMac'] = wifiMacStr; + gatewayModel.wifiMac = wifiMacStr; + index = index + 20; + + Get.toNamed(Routers.gatewayGetWifiListPage, arguments: { + 'gatewayModel':gatewayModel, + }); + break; + default: + //失败 + dismissEasyLoading(); + showToast('配网失败'.tr); + break; + } + } + void startScanBlueList() { BlueManage().startScan(2000, (List list) { state.devices.clear(); @@ -53,6 +129,28 @@ class SelectGatewayListLogic extends BaseGetXController { startScanBlueList(); } + // 获取网关状态 + Future senderGatewayGetStatusAction() async { + showEasyLoading(); + showBlueConnetctToastTimer(action: (){ + dismissEasyLoading(); + }); + BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async { + if (connectionState == BluetoothConnectionState.connected){ + IoSenderManage.gatewayGetStatusCommand( + lockID: BlueManage().connectDeviceName, + userID: await Storage.getUid(), + ); + } else if (connectionState == BluetoothConnectionState.disconnected) { + dismissEasyLoading(); + cancelBlueConnetctToastTimer(); + if(state.ifCurrentScreen.value == true){ + showBlueConnetctToast(); + } + } + }, isAddEquipment: true); + } + // 点击连接设备 void connect(ScanResult device) { showEasyLoading(); @@ -60,21 +158,32 @@ class SelectGatewayListLogic extends BaseGetXController { dismissEasyLoading(); }); BlueManage().blueSendData(device.advertisementData.advName, (BluetoothConnectionState state) async { - // AppLog.log('点击要添加的设备了'); - if (state == BluetoothConnectionState.connected) { - dismissEasyLoading(); - Get.toNamed(Routers.gatewayGetWifiListPage, arguments: { - 'macAddress':device.device.remoteId.str - }); - } else{ - dismissEasyLoading(); - } - }, isAddEquipment: true); + // AppLog.log('点击要添加的设备了'); + if (state == BluetoothConnectionState.connected) { + dismissEasyLoading(); + + // 没有网关调试,做假数据调试 + // final GetGatewayInfoModel gatewayModel = GetGatewayInfoModel(); + // gatewayModel.mac = 'C1:1E:0D:E0:0C:A9'; + // gatewayModel.serialNum = DateTime.now().millisecondsSinceEpoch.toString(); + // gatewayModel.gatewayVersion = '1.0.1'; + // gatewayModel.wifiMac = 'C1:1E:0D:E0:0C:A9'; + // Get.toNamed(Routers.gatewayGetWifiListPage, arguments: { + // 'gatewayModel':gatewayModel, + // }); + + senderGatewayGetStatusAction(); + } else{ + dismissEasyLoading(); + } + }, isAddEquipment: true); } @override void onInit() { super.onInit(); + + _initReplySubscription(); } @override @@ -82,4 +191,10 @@ class SelectGatewayListLogic extends BaseGetXController { super.onReady(); getNearByLimits(); } + + @override + void dispose() { + super.dispose(); + _replySubscription.cancel(); + } } \ No newline at end of file diff --git a/lib/mine/gateway/addGateway/selectGateway/selectGatewayList_state.dart b/lib/mine/gateway/addGateway/selectGateway/selectGatewayList_state.dart index 9d026f76..1721d940 100644 --- a/lib/mine/gateway/addGateway/selectGateway/selectGatewayList_state.dart +++ b/lib/mine/gateway/addGateway/selectGateway/selectGatewayList_state.dart @@ -4,4 +4,6 @@ import 'package:get/get.dart'; class SelectGatewayListState{ RxList devices = [].obs; + + RxBool ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示 } \ No newline at end of file diff --git a/lib/mine/gateway/gatewayDetail/gatewayDetail_logic.dart b/lib/mine/gateway/gatewayDetail/gatewayDetail_logic.dart index 37f4c8d4..c869839f 100644 --- a/lib/mine/gateway/gatewayDetail/gatewayDetail_logic.dart +++ b/lib/mine/gateway/gatewayDetail/gatewayDetail_logic.dart @@ -20,4 +20,17 @@ class GatewayDetailLogic extends BaseGetXController{ }); } } + + Future updateGateway(String gatewayName) async{ + final LoginEntity entity = await ApiRepository.to.gatewayUpdate( + gatewayId: state.getewayItemData.value.gatewayId ?? 0, + gatewayName:gatewayName + ); + if(entity.errorCode!.codeIsSuccessful){ + showToast('修改成功'.tr, something:(){ + // eventBus.fire(PassCurrentLockInformationEvent(state.lockSetInfoData.value)); + Get.back(); + }); + } + } } \ No newline at end of file diff --git a/lib/mine/gateway/gatewayDetail/gatewayDetail_page.dart b/lib/mine/gateway/gatewayDetail/gatewayDetail_page.dart index 0347af5c..12e2574a 100755 --- a/lib/mine/gateway/gatewayDetail/gatewayDetail_page.dart +++ b/lib/mine/gateway/gatewayDetail/gatewayDetail_page.dart @@ -44,14 +44,13 @@ class _GatewayDetailPageState extends State { ShowTipView().showTFViewAlertDialog( state.changeGatewayNameController, '请输入姓名'.tr, - '', () { + '请输入姓名'.tr, () { if (state.changeGatewayNameController.text.isEmpty) { logic.showToast('请输入姓名'.tr); return; } - // Get.back(); - // state.typeName.value = state.changeNameController.text; - // logic.editICCardData(); + Get.back(); + logic.updateGateway(state.changeGatewayNameController.text); }, inputFormatters: [ FilteringTextInputFormatter.deny('\n'), LengthLimitingTextInputFormatter(50), @@ -75,20 +74,20 @@ class _GatewayDetailPageState extends State { SizedBox( height: 10.h, ), - CommonItem( - leftTitel: '附近的锁'.tr, - rightTitle: state.getewayItemData.value.lockNum.toString(), - isHaveLine: true, - isHaveDirection: true, - action: () { - Navigator.pushNamed(context, Routers.gatewayConnectionLockPage); - }), - CommonItem( - leftTitel: '网关升级'.tr, - rightTitle: '', - isHaveLine: false, - isHaveDirection: true, - action: () {}), + // CommonItem( + // leftTitel: '附近的锁'.tr, + // rightTitle: state.getewayItemData.value.lockNum.toString(), + // isHaveLine: true, + // isHaveDirection: true, + // action: () { + // Navigator.pushNamed(context, Routers.gatewayConnectionLockPage); + // }), + // CommonItem( + // leftTitel: '网关升级'.tr, + // rightTitle: '', + // isHaveLine: false, + // isHaveDirection: true, + // action: () {}), SizedBox( height: 80.h, ), diff --git a/lib/mine/gateway/gatewayDetail/gatewayDetail_state.dart b/lib/mine/gateway/gatewayDetail/gatewayDetail_state.dart index 0cdfbf81..8f2a30ea 100644 --- a/lib/mine/gateway/gatewayDetail/gatewayDetail_state.dart +++ b/lib/mine/gateway/gatewayDetail/gatewayDetail_state.dart @@ -9,6 +9,7 @@ class GatewayDetailState{ var map = Get.arguments; if (map['getewayItemData'] != null && map['getewayItemData'] != '') { getewayItemData.value = map['getewayItemData']; + changeGatewayNameController.text = getewayItemData.value.gatewayName!; } } diff --git a/lib/network/api.dart b/lib/network/api.dart index 4ca99134..22da0a6a 100755 --- a/lib/network/api.dart +++ b/lib/network/api.dart @@ -154,6 +154,7 @@ abstract class Api { final String transferGatewayConfirmURL = '/plug/transferPlugConfirm'; // 转移网关确认 final String transferGatewayURL = '/plug/transfer'; // 转移网关 + final String updateGatewayURL = '/gateway/update'; // 更新网关 final String getKeyDetailURL = '/key/get'; //获取单把钥匙详情信息 final String lockUserListURL = '/keyUser/listKeyUser'; //锁用户列表 diff --git a/lib/network/api_provider.dart b/lib/network/api_provider.dart index eafda028..272d2e28 100755 --- a/lib/network/api_provider.dart +++ b/lib/network/api_provider.dart @@ -1750,6 +1750,17 @@ class ApiProvider extends BaseProvider { 'gatewayId': gatewayId, })); + // 删除网关 + Future gatewayUpdate( + int gatewayId, + String gatewayName, + ) => post( + updateGatewayURL.toUrl, + jsonEncode({ + 'gatewayId': gatewayId, + 'gatewayName': gatewayName, + })); + // 转移网关确认 Future transferGatewayConfirmInfoData( String receiverUsername, String type, String countryCode) => diff --git a/lib/network/api_repository.dart b/lib/network/api_repository.dart index b3f34a41..c794a091 100755 --- a/lib/network/api_repository.dart +++ b/lib/network/api_repository.dart @@ -1925,6 +1925,15 @@ class ApiRepository { return LoginEntity.fromJson(res.body); } + // 网关 + Future gatewayUpdate({ + required int gatewayId, + required String gatewayName, + }) async { + final res = await apiProvider.gatewayUpdate(gatewayId, gatewayName); + return LoginEntity.fromJson(res.body); + } + // 转移网关确认 Future transferGatewayConfirmInfoData( {required String receiverUsername,