From 34b5ef6c0a8f78f537cb5550cdf0aa15bf672db7 Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Sat, 27 Sep 2025 11:52:29 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/core/translations/language/zh_cn.dart | 2 +- lib/modules/pairing/controllers/pairing_controller.dart | 2 +- lib/modules/pairing/views/pairing_view.dart | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/core/translations/language/zh_cn.dart b/lib/core/translations/language/zh_cn.dart index aa5d27a9b..d41a69255 100644 --- a/lib/core/translations/language/zh_cn.dart +++ b/lib/core/translations/language/zh_cn.dart @@ -960,7 +960,7 @@ const Map zhCN = { "pairingSuccessRedirecting": "配对成功!即将跳转到主页...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "请确保连接的是Voitrans设备", + "ensureConnectedDeepSoundDevice": "当前使用设备:%s,请确保连接的是Voitrans支持的设备", "deviceAlreadyBoundToOtherAccount": "该设备已被其他账号绑定", "deviceAssociationFailed": "设备关联失败,请重试", "scanTimeoutEnsureDeviceNearby": "扫描超时,请确保设备在附近", diff --git a/lib/modules/pairing/controllers/pairing_controller.dart b/lib/modules/pairing/controllers/pairing_controller.dart index 60543dc64..e8c168807 100644 --- a/lib/modules/pairing/controllers/pairing_controller.dart +++ b/lib/modules/pairing/controllers/pairing_controller.dart @@ -837,7 +837,7 @@ class PairingController extends GetxController with WidgetsBindingObserver { } print( '获取到 deviceName: $deviceName address: ${device.address} uuids:$uuids'); - if (names.contains(deviceName)) { + if (names.any((name) => name.contains(deviceName))) { if (currentBleState == 2) { //已连接直接返回 return 9; diff --git a/lib/modules/pairing/views/pairing_view.dart b/lib/modules/pairing/views/pairing_view.dart index fcefe06a4..2a0a21ee5 100644 --- a/lib/modules/pairing/views/pairing_view.dart +++ b/lib/modules/pairing/views/pairing_view.dart @@ -492,7 +492,8 @@ class _PairingViewState extends State return 'connectDeepSoundViaSystemBluetooth' .tr; // 请先通过系统蓝牙连接Voitrans设备 case ErrorType.deviceNotMatch: - return 'ensureConnectedDeepSoundDevice'.tr; // 请确保连接的是Voitrans设备 + return 'ensureConnectedDeepSoundDevice'.tr.trArgs( + [controller.currentDevice?.name ?? '']); // 请确保连接的是Voitrans设备 case ErrorType.deviceBound: return 'deviceAlreadyBoundToOtherAccount'.tr; // 该设备已被其他账号绑定 case ErrorType.associationFailed: From aef32a14a0967a4e3892a360344c8b24cafeac5b Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Sat, 27 Sep 2025 15:01:31 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/pairing_controller.dart | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/lib/modules/pairing/controllers/pairing_controller.dart b/lib/modules/pairing/controllers/pairing_controller.dart index e8c168807..7f124c65f 100644 --- a/lib/modules/pairing/controllers/pairing_controller.dart +++ b/lib/modules/pairing/controllers/pairing_controller.dart @@ -95,6 +95,7 @@ class PairingController extends GetxController with WidgetsBindingObserver { // ========== 当前设备信息 ========== BluetoothDevice? _currentClassicDevice; + int? _verifiedDevicePid; String? _verifiedDeviceName; String? _verifiedDeviceAddress; TextEditingController codeInputController = TextEditingController(); @@ -861,6 +862,7 @@ class PairingController extends GetxController with WidgetsBindingObserver { String macFromHex = extractMacFromHex(hexData, device.address); if (macFromHex.isNotEmpty) { String code = ""; + _verifiedDevicePid = extractAndReverseBytesToInt(hexData, 6, 7); // 找到匹配的设备,提取授权码 if (Platform.isIOS) { // iOS设备,提取13-22字节的授权码 @@ -1010,7 +1012,14 @@ class PairingController extends GetxController with WidgetsBindingObserver { //确认绑定设备 void confirmBindDevice() async { + if (currentDevice == null) { + Logger.e(_tag, '当前设备为空!'); + _transition(PairingState.verifying); + return; + } + final response = await Api.binddevice({ + "pid": _verifiedDevicePid, "code": deviceCode.value, "devicename": currentDevice?.name, "devicemac": currentDevice?.address, // 使用 address 替代 deviceId @@ -1050,6 +1059,31 @@ class PairingController extends GetxController with WidgetsBindingObserver { .toUpperCase(); } + int extractAndReverseBytesToInt(String hex, int start, int end) { + List bytes = []; + // 将十六进制字符串解析为字节列表 + for (int i = 0; i < hex.length; i += 2) { + bytes.add(int.parse(hex.substring(i, i + 2), radix: 16)); + } + + // 截取指定范围的字节(包含end索引) + List slice = bytes.sublist(start, end + 1); + // 反转字节顺序 + List reversed = slice.toList(); + + String pid = reversed + .map((b) => b.toRadixString(16).padLeft(2, '0')) + .join() + .toUpperCase(); + Logger.i(_tag, 'liwei-------------- 解析道Pid $pid'); + // 将反转后的字节列表转换为整数 + int result = 0; + for (int b in reversed) { + result = (result << 8) | (b & 0xFF); // 按字节拼接成整数 + } + return result; + } + /// 用户点击授权码输入框 void onAutoCodeInputTap() async { // 调用BLE管理器的自动绑定方法