|
|
|
@ -259,180 +259,119 @@ class BleManager extends GetxService { |
|
|
|
|
|
|
|
/// 设置BLE事件监听 |
|
|
|
void _setupBleListener() { |
|
|
|
//Logger.info('lxm--_setupBleListener被调用,开始设置BLE事件监听'); |
|
|
|
_statusSubscription?.cancel(); |
|
|
|
_dataSubscription?.cancel(); |
|
|
|
|
|
|
|
try { |
|
|
|
Logger.info('lxm--开始监听BLE状态更新流'); |
|
|
|
// 监听BLE状态更新 |
|
|
|
_statusSubscription = _bleService.onStatusUpdated.listen( |
|
|
|
(event) { |
|
|
|
Logger.info('lxm--收到BLE状态更新事件: $event'); |
|
|
|
if (event is Map) { |
|
|
|
Logger.info('lxm--事件是Map类型,开始处理'); |
|
|
|
// 处理连接状态更新 |
|
|
|
if (event['type'] == 'connectionStateChanged') { |
|
|
|
Logger.info('lxm--处理连接状态变化事件'); |
|
|
|
final state = event['state'] as int; |
|
|
|
final oldState = _connectionState.value; |
|
|
|
_connectionState.value = state; |
|
|
|
|
|
|
|
Logger.d('BleManager', '🔄 BLE状态更新: $oldState → $state'); |
|
|
|
Logger.d('BleManager', '📡 通知监听器状态变化: ${_connectionState.value}'); |
|
|
|
|
|
|
|
// 连接状态转换 |
|
|
|
if (state == BleConnectionState.connected) { |
|
|
|
Logger.info('lxm--BLE设备已连接'); |
|
|
|
_isConnected.value = true; |
|
|
|
|
|
|
|
// 设备信息(含唤醒状态)由 HomeController.fetchDeviceInfo() 统一查询 |
|
|
|
} else if (state == BleConnectionState.disconnected || |
|
|
|
state == BleConnectionState.error) { |
|
|
|
Logger.info('lxm--BLE设备已断开或发生错误'); |
|
|
|
_isConnected.value = false; |
|
|
|
_awaitingCodecOpen = false; |
|
|
|
_awaitingCodecClose = false; |
|
|
|
_isCodecActive.value = false; |
|
|
|
_voiceWakeupSupported.value = false; |
|
|
|
_voiceWakeupEnabled.value = true; |
|
|
|
Logger.info('[VoiceWakeup] 断开连接,重置 supported=false, enabled=true'); |
|
|
|
Logger.info('lxm--断开连接时重置设备信息为0'); |
|
|
|
_updateDeviceInfoIfNeeded( |
|
|
|
batteryLevel: 0, |
|
|
|
leftEarBattery: 0, |
|
|
|
rightEarBattery: 0, |
|
|
|
caseBattery: 0, |
|
|
|
leftEarCharging: false, |
|
|
|
rightEarCharging: false, |
|
|
|
caseCharging: false, |
|
|
|
firmwareVersion: '', |
|
|
|
firmwareProductId: '', |
|
|
|
firmwareProductColor: '', |
|
|
|
wakeupLeftVersion: '', |
|
|
|
wakeupRightVersion: '', |
|
|
|
); |
|
|
|
// 断开连接时不清除设备信息,保留最后的电量信息 |
|
|
|
// 只有在需要完全清除设备时才重置信息 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (event['type'] == 'wakeupVoiceUpgradeProgress') { |
|
|
|
// 唤醒语音升级进度 |
|
|
|
Logger.info('lxm--处理唤醒语音升级进度事件: $event'); |
|
|
|
_wakeupVoiceUpgradeProgress.value = |
|
|
|
event['progress'] as int? ?? 0; |
|
|
|
_wakeupVoiceUpgradeStatus.value = 1; // 升级中 |
|
|
|
Logger.info( |
|
|
|
'lxm--唤醒语音升级进度: ${_wakeupVoiceUpgradeProgress.value}%'); |
|
|
|
} |
|
|
|
if (event['type'] == 'wakeupVoiceUpgradeSuccess') { |
|
|
|
// 唤醒语音升级状态 |
|
|
|
Logger.info('lxm--处理唤醒语音升级状态事件: $event'); |
|
|
|
_wakeupVoiceUpgradeStatus.value = 2; // 升级成功 |
|
|
|
Logger.info('lxm--唤醒语音升级状态: ${_wakeupVoiceUpgradeStatus.value}'); |
|
|
|
if (event is! Map) return; |
|
|
|
|
|
|
|
if (event['type'] == 'connectionStateChanged') { |
|
|
|
final state = event['state'] as int; |
|
|
|
final oldState = _connectionState.value; |
|
|
|
_connectionState.value = state; |
|
|
|
Logger.i('BleManager', 'BLE状态更新: $oldState → $state'); |
|
|
|
|
|
|
|
if (state == BleConnectionState.connected) { |
|
|
|
_isConnected.value = true; |
|
|
|
} else if (state == BleConnectionState.disconnected || |
|
|
|
state == BleConnectionState.error) { |
|
|
|
_isConnected.value = false; |
|
|
|
_awaitingCodecOpen = false; |
|
|
|
_awaitingCodecClose = false; |
|
|
|
_isCodecActive.value = false; |
|
|
|
_voiceWakeupSupported.value = false; |
|
|
|
_voiceWakeupEnabled.value = true; |
|
|
|
Logger.i('BleManager', |
|
|
|
'[VoiceWakeup] 断开连接,重置 supported=false, enabled=true'); |
|
|
|
_updateDeviceInfoIfNeeded( |
|
|
|
batteryLevel: 0, |
|
|
|
leftEarBattery: 0, |
|
|
|
rightEarBattery: 0, |
|
|
|
caseBattery: 0, |
|
|
|
leftEarCharging: false, |
|
|
|
rightEarCharging: false, |
|
|
|
caseCharging: false, |
|
|
|
firmwareVersion: '', |
|
|
|
firmwareProductId: '', |
|
|
|
firmwareProductColor: '', |
|
|
|
wakeupLeftVersion: '', |
|
|
|
wakeupRightVersion: '', |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (event['type'] == 'wakeupVoiceUpgradeFailure') { |
|
|
|
// 唤醒语音升级状态 |
|
|
|
Logger.info('lxm--处理唤醒语音升级状态事件: $event'); |
|
|
|
_wakeupVoiceUpgradeStatus.value = 3; // 升级失败 |
|
|
|
Logger.info('lxm--唤醒语音升级状态: ${_wakeupVoiceUpgradeStatus.value}'); |
|
|
|
} |
|
|
|
if (event['type'] == 'wakeupVoiceUpgradeProgress') { |
|
|
|
_wakeupVoiceUpgradeProgress.value = event['progress'] as int? ?? 0; |
|
|
|
_wakeupVoiceUpgradeStatus.value = 1; |
|
|
|
} |
|
|
|
if (event['type'] == 'wakeupVoiceUpgradeSuccess') { |
|
|
|
_wakeupVoiceUpgradeStatus.value = 2; |
|
|
|
Logger.i('BleManager', '唤醒语音升级成功'); |
|
|
|
} |
|
|
|
|
|
|
|
Logger.info('lxm--准备调用_processDeviceInfo处理设备信息'); |
|
|
|
// 处理设备信息 |
|
|
|
_processDeviceInfo(event); |
|
|
|
} else { |
|
|
|
Logger.info('lxm--事件不是Map类型: ${event.runtimeType}'); |
|
|
|
if (event['type'] == 'wakeupVoiceUpgradeFailure') { |
|
|
|
_wakeupVoiceUpgradeStatus.value = 3; |
|
|
|
Logger.w('BleManager', '唤醒语音升级失败'); |
|
|
|
} |
|
|
|
|
|
|
|
_processDeviceInfo(event); |
|
|
|
}, |
|
|
|
onError: (error) { |
|
|
|
Logger.error('lxm--BLE状态事件流错误: $error'); |
|
|
|
Logger.e('BleManager', 'BLE状态事件流错误: $error'); |
|
|
|
}, |
|
|
|
); |
|
|
|
|
|
|
|
Logger.info('lxm--BLE状态监听器设置完成'); |
|
|
|
// 监听BLE数据流 |
|
|
|
} catch (e) { |
|
|
|
Logger.error('lxm--设置BLE事件监听器失败: ${e.toString()}'); |
|
|
|
Logger.e('BleManager', '设置BLE事件监听器失败: ${e.toString()}'); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// 处理来自原生层的设备信息 |
|
|
|
void _processDeviceInfo(Map<dynamic, dynamic> event) { |
|
|
|
try { |
|
|
|
Logger.info('lxm--_processDeviceInfo被调用'); |
|
|
|
Logger.info('lxm--接收到的事件数据: $event'); |
|
|
|
|
|
|
|
// 检查是否是设备信息响应 |
|
|
|
if (event.containsKey('command') && event.containsKey('success')) { |
|
|
|
Logger.info('lxm--事件包含command和success字段'); |
|
|
|
final bool success = event['success'] as bool; |
|
|
|
Logger.info('lxm--命令执行成功状态: $success'); |
|
|
|
|
|
|
|
if (!success) { |
|
|
|
Logger.warning('lxm--设备命令执行失败: ${event['command']}'); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (!event.containsKey('command') || !event.containsKey('success')) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// 根据命令类型处理不同信息 |
|
|
|
final command = event['command']; |
|
|
|
Logger.info('lxm--命令类型: $command (${command.runtimeType})'); |
|
|
|
|
|
|
|
if (command is int) { |
|
|
|
Logger.info('lxm--基于命令ID处理: $command'); |
|
|
|
// 基于命令ID处理 |
|
|
|
_processDeviceInfoByCommandId(command, event); |
|
|
|
} else if (command is String) { |
|
|
|
Logger.info('lxm--基于命令名称处理: $command'); |
|
|
|
// 基于命令名称处理 |
|
|
|
_processDeviceInfoByCommandName(command, event); |
|
|
|
} else { |
|
|
|
Logger.warning('lxm--未知的命令类型: ${command.runtimeType}'); |
|
|
|
} |
|
|
|
final bool success = event['success'] as bool; |
|
|
|
if (!success) { |
|
|
|
Logger.w('BleManager', '设备命令执行失败: ${event['command']}'); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
final command = event['command']; |
|
|
|
if (command is int) { |
|
|
|
_processDeviceInfoByCommandId(command, event); |
|
|
|
} else if (command is String) { |
|
|
|
_processDeviceInfoByCommandName(command, event); |
|
|
|
} else { |
|
|
|
Logger.info('lxm--事件不包含command或success字段,跳过处理'); |
|
|
|
Logger.info('lxm--事件包含的键: ${event.keys.toList()}'); |
|
|
|
Logger.w('BleManager', '未知的命令类型: ${command.runtimeType}'); |
|
|
|
} |
|
|
|
} catch (e) { |
|
|
|
Logger.error('lxm--处理设备信息异常: ${e.toString()}'); |
|
|
|
Logger.error('lxm--异常堆栈: ${StackTrace.current}'); |
|
|
|
} catch (e, s) { |
|
|
|
Logger.e('BleManager', '处理设备信息异常: $e', e, s); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// 根据命令ID处理设备信息 |
|
|
|
void _processDeviceInfoByCommandId( |
|
|
|
int commandId, Map<dynamic, dynamic> data) { |
|
|
|
Logger.info('lxm--_processDeviceInfoByCommandId被调用,命令ID: $commandId'); |
|
|
|
Logger.info('lxm--命令数据: $data'); |
|
|
|
|
|
|
|
switch (commandId) { |
|
|
|
case BleCommands.GET_VERSION: |
|
|
|
Logger.info('lxm--处理版本信息命令'); |
|
|
|
_updateVersionInfoFromData(data); |
|
|
|
break; |
|
|
|
case BleCommands.GET_PRODUCT_ID: |
|
|
|
Logger.info('lxm--处理产品ID命令'); |
|
|
|
_updateProductIdFromData(data); |
|
|
|
break; |
|
|
|
case BleCommands.GET_PRODUCT_COLOR: |
|
|
|
Logger.info('lxm--处理产品颜色命令(暂未实现)'); |
|
|
|
break; |
|
|
|
case BleCommands.GET_BATTERY_INFO: |
|
|
|
Logger.info('lxm--处理电池信息命令,准备调用_updateBatteryInfoFromData'); |
|
|
|
_updateBatteryInfoFromData(data); |
|
|
|
Logger.info('lxm--电池信息处理完成'); |
|
|
|
break; |
|
|
|
case BleCommands.CONTROL_CODEC: |
|
|
|
Logger.info('lxm--处理编解码控制命令'); |
|
|
|
// 处理通话状态 |
|
|
|
print(" CONTROL_CODEC: $commandId,$data"); |
|
|
|
|
|
|
|
final bool codecSuccess = _isCodecControlSuccess(data); |
|
|
|
if (_awaitingCodecOpen) { |
|
|
|
//如果正在等待打开编解码器 |
|
|
|
_isCodecActive.value = codecSuccess; // 只在等待打开时更新状态 |
|
|
|
_isCodecActive.value = codecSuccess; |
|
|
|
_awaitingCodecOpen = false; |
|
|
|
} else if (_awaitingCodecClose) { |
|
|
|
if (codecSuccess) { |
|
|
|
@ -440,31 +379,21 @@ class BleManager extends GetxService { |
|
|
|
} |
|
|
|
_awaitingCodecClose = false; |
|
|
|
} |
|
|
|
|
|
|
|
if (codecSuccess) { |
|
|
|
print("lxm--编解码控制成功 (rawData 第二字节非 0)"); |
|
|
|
Logger.info('lxm--编解码控制成功 (rawData 第二字节非 0)'); |
|
|
|
} else { |
|
|
|
print("lxm--编解码控制失败 (rawData 为 [162, 0] 或无法解析)"); |
|
|
|
Logger.warning('lxm--编解码控制失败 (rawData 为 [162, 0] 或无法解析)'); |
|
|
|
if (!codecSuccess) { |
|
|
|
Logger.w('BleManager', '编解码控制失败'); |
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
case BleCommands.GET_WAKEUP_VERSION: |
|
|
|
Logger.info('lxm--处理唤醒语音版本命令'); |
|
|
|
_updateWakeupVersionFromData(data); |
|
|
|
break; |
|
|
|
case BleCommands.GET_VOICE_WAKEUP_STATUS: |
|
|
|
Logger.info('[VoiceWakeup] 收到查询响应(0x14), data: $data'); |
|
|
|
_updateVoiceWakeupStatusFromData(data); |
|
|
|
break; |
|
|
|
case BleCommands.SET_VOICE_WAKEUP_STATUS: |
|
|
|
Logger.info('[VoiceWakeup] 收到设置响应(0x15), data: $data'); |
|
|
|
_updateVoiceWakeupSetResultFromData(data); |
|
|
|
break; |
|
|
|
default: |
|
|
|
Logger.warning('lxm--未处理的命令ID: $commandId,数据: $data'); |
|
|
|
print(" 未处理的命令ID: $commandId,$data"); |
|
|
|
Logger.w('BleManager', '未处理的命令ID: $commandId'); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -484,82 +413,46 @@ class BleManager extends GetxService { |
|
|
|
case 'productColor': |
|
|
|
break; |
|
|
|
case 'Error': |
|
|
|
print(" Error: $commandName,$data"); |
|
|
|
Logger.w('BleManager', '收到 Error 命令'); |
|
|
|
break; |
|
|
|
default: |
|
|
|
print(" 未处理的命令名称: $commandName,$data"); |
|
|
|
Logger.info('未处理的命令名称: $commandName'); |
|
|
|
Logger.w('BleManager', '未处理的命令名称: $commandName'); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// 更新电池信息 |
|
|
|
void _updateBatteryInfoFromData(Map<dynamic, dynamic> data) { |
|
|
|
try { |
|
|
|
Logger.info('lxm--_updateBatteryInfoFromData被调用'); |
|
|
|
Logger.info('lxm--接收到的原始数据: $data'); |
|
|
|
|
|
|
|
// 确保数据中包含电池信息 |
|
|
|
if (!data.containsKey('leftEarBattery') || |
|
|
|
!data.containsKey('rightEarBattery') || |
|
|
|
!data.containsKey('caseBattery')) { |
|
|
|
Logger.warning('lxm--电池信息数据不完整,缺少必要字段'); |
|
|
|
Logger.warning('lxm--数据包含的键: ${data.keys.toList()}'); |
|
|
|
Logger.w('BleManager', '电池信息数据不完整'); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
Logger.info('lxm--原始电池数据解析:'); |
|
|
|
Logger.info( |
|
|
|
'lxm-- leftEarBattery原始值: ${data['leftEarBattery']} (类型: ${data['leftEarBattery'].runtimeType})'); |
|
|
|
Logger.info( |
|
|
|
'lxm-- rightEarBattery原始值: ${data['rightEarBattery']} (类型: ${data['rightEarBattery'].runtimeType})'); |
|
|
|
Logger.info( |
|
|
|
'lxm-- caseBattery原始值: ${data['caseBattery']} (类型: ${data['caseBattery'].runtimeType})'); |
|
|
|
Logger.info( |
|
|
|
'lxm-- leftEarCharging原始值: ${data['leftEarCharging']} (类型: ${data['leftEarCharging'].runtimeType})'); |
|
|
|
Logger.info( |
|
|
|
'lxm-- rightEarCharging原始值: ${data['rightEarCharging']} (类型: ${data['rightEarCharging'].runtimeType})'); |
|
|
|
Logger.info( |
|
|
|
'lxm-- caseCharging原始值: ${data['caseCharging']} (类型: ${data['caseCharging'].runtimeType})'); |
|
|
|
Logger.info( |
|
|
|
'lxm-- batteryLevel原始值: ${data['batteryLevel']} (类型: ${data['batteryLevel']?.runtimeType})'); |
|
|
|
|
|
|
|
// 提取电池信息 |
|
|
|
final int leftBattery = (data['leftEarBattery'] as int? ?? 0) == 127 |
|
|
|
? -1 // 特殊值127转换为-1 |
|
|
|
? -1 |
|
|
|
: (data['leftEarBattery'] as int? ?? 0) > 100 |
|
|
|
? 0 // 大于100的值重置为0 |
|
|
|
: (data['leftEarBattery'] as int? ?? 0); // 正常值 |
|
|
|
? 0 |
|
|
|
: (data['leftEarBattery'] as int? ?? 0); |
|
|
|
|
|
|
|
final int rightBattery = (data['rightEarBattery'] as int? ?? 0) == 127 |
|
|
|
? -1 // 特殊值127转换为-1 |
|
|
|
? -1 |
|
|
|
: (data['rightEarBattery'] as int? ?? 0) > 100 |
|
|
|
? 0 // 大于100的值重置为0 |
|
|
|
: (data['rightEarBattery'] as int? ?? 0); // 正常值 |
|
|
|
? 0 |
|
|
|
: (data['rightEarBattery'] as int? ?? 0); |
|
|
|
|
|
|
|
final int caseBattery = (data['caseBattery'] as int? ?? 0) == 127 |
|
|
|
? -1 // 特殊值127转换为-1 |
|
|
|
? -1 |
|
|
|
: (data['caseBattery'] as int? ?? 0) > 100 |
|
|
|
? 0 // 大于100的值重置为0 |
|
|
|
: (data['caseBattery'] as int? ?? 0); // 正常值 |
|
|
|
? 0 |
|
|
|
: (data['caseBattery'] as int? ?? 0); |
|
|
|
final bool leftCharging = data['leftEarCharging'] as bool? ?? false; |
|
|
|
final bool rightCharging = data['rightEarCharging'] as bool? ?? false; |
|
|
|
final bool caseCharging = data['caseCharging'] as bool? ?? false; |
|
|
|
|
|
|
|
// 获取整体电量(原生层使用左耳电量作为主要指示) |
|
|
|
final int overallBattery = data['batteryLevel'] as int? ?? leftBattery; |
|
|
|
|
|
|
|
Logger.info('lxm--处理后的电池数据:'); |
|
|
|
Logger.info('lxm-- leftBattery: $leftBattery'); |
|
|
|
Logger.info('lxm-- rightBattery: $rightBattery'); |
|
|
|
Logger.info('lxm-- caseBattery: $caseBattery'); |
|
|
|
Logger.info('lxm-- leftCharging: $leftCharging'); |
|
|
|
Logger.info('lxm-- rightCharging: $rightCharging'); |
|
|
|
Logger.info('lxm-- caseCharging: $caseCharging'); |
|
|
|
Logger.info('lxm-- overallBattery: $overallBattery'); |
|
|
|
|
|
|
|
Logger.info('lxm--准备调用_updateDeviceInfoIfNeeded'); |
|
|
|
|
|
|
|
// 更新设备信息 |
|
|
|
_updateDeviceInfoIfNeeded( |
|
|
|
batteryLevel: overallBattery, |
|
|
|
leftEarBattery: leftBattery, |
|
|
|
@ -569,12 +462,8 @@ class BleManager extends GetxService { |
|
|
|
rightEarCharging: rightCharging, |
|
|
|
caseCharging: caseCharging, |
|
|
|
); |
|
|
|
|
|
|
|
Logger.info( |
|
|
|
'lxm--设备电池信息已更新: 电量=$overallBattery%, 左耳=$leftBattery%, 右耳=$rightBattery%, 充电仓=$caseBattery%'); |
|
|
|
} catch (e) { |
|
|
|
Logger.error('lxm--更新电池信息失败: ${e.toString()}'); |
|
|
|
Logger.error('lxm--错误堆栈: ${StackTrace.current}'); |
|
|
|
} catch (e, s) { |
|
|
|
Logger.e('BleManager', '更新电池信息失败: $e', e, s); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -718,18 +607,8 @@ class BleManager extends GetxService { |
|
|
|
String? wakeupLeftVersion, |
|
|
|
String? wakeupRightVersion, |
|
|
|
}) { |
|
|
|
Logger.info('lxm--_updateDeviceInfoIfNeeded被调用'); |
|
|
|
Logger.info( |
|
|
|
'lxm--传入参数: batteryLevel=$batteryLevel, leftEarBattery=$leftEarBattery, rightEarBattery=$rightEarBattery, caseBattery=$caseBattery'); |
|
|
|
Logger.info( |
|
|
|
'lxm--充电状态: leftEarCharging=$leftEarCharging, rightEarCharging=$rightEarCharging, caseCharging=$caseCharging'); |
|
|
|
Logger.info('lxm--当前deviceInfo.value是否为null: ${deviceInfo.value == null}'); |
|
|
|
|
|
|
|
// 如果设备信息已存在,则更新 |
|
|
|
if (deviceInfo.value != null) { |
|
|
|
Logger.info('lxm--设备信息已存在,进行更新操作'); |
|
|
|
Logger.info('lxm--更新前的设备信息: ${deviceInfo.value}'); |
|
|
|
|
|
|
|
deviceInfo.value = deviceInfo.value!.copyWith( |
|
|
|
batteryLevel: batteryLevel ?? deviceInfo.value?.batteryLevel, |
|
|
|
leftEarBattery: _getValidBatteryValue( |
|
|
|
@ -751,20 +630,17 @@ class BleManager extends GetxService { |
|
|
|
wakeupRightVersion: |
|
|
|
wakeupRightVersion ?? deviceInfo.value!.wakeupRightVersion, |
|
|
|
); |
|
|
|
|
|
|
|
Logger.info('lxm--更新后的设备信息: ${deviceInfo.value}'); |
|
|
|
} |
|
|
|
// 创建设备信息 |
|
|
|
// 如果设备信息不存在,但有地址和名称,则创建新的设备信息 |
|
|
|
else if (deviceInfo.value == null && |
|
|
|
_isConnected.value && |
|
|
|
(firmwareVersion != null || batteryLevel != null)) { |
|
|
|
Logger.info('lxm--设备信息不存在,创建新的设备信息对象'); |
|
|
|
// 使用保存的设备信息创建新的DeviceInfo对象 |
|
|
|
String deviceAddress = currentDeviceAddress ?? ""; |
|
|
|
String deviceName = _currentDeviceName ?? ""; |
|
|
|
|
|
|
|
Logger.info('lxm--创建新的设备信息对象: address=$deviceAddress, name=$deviceName'); |
|
|
|
Logger.i('BleManager', |
|
|
|
'创建新的设备信息对象: address=$deviceAddress, name=$deviceName'); |
|
|
|
deviceInfo.value = DeviceInfo( |
|
|
|
address: deviceAddress, |
|
|
|
name: deviceName, |
|
|
|
@ -781,11 +657,6 @@ class BleManager extends GetxService { |
|
|
|
wakeupLeftVersion: wakeupLeftVersion ?? '', |
|
|
|
wakeupRightVersion: wakeupRightVersion ?? '', |
|
|
|
); |
|
|
|
|
|
|
|
Logger.info('lxm--新创建的设备信息: ${deviceInfo.value}'); |
|
|
|
} else { |
|
|
|
Logger.info( |
|
|
|
'lxm--不满足更新条件: deviceInfo.value == null: ${deviceInfo.value == null}, _isConnected.value: ${_isConnected.value}, firmwareVersion: $firmwareVersion, batteryLevel: $batteryLevel'); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -1053,7 +924,7 @@ class BleManager extends GetxService { |
|
|
|
); |
|
|
|
stsCmei = matchedDevice.cmei; |
|
|
|
} catch (_) {} |
|
|
|
Logger.info('lxm--当前设备 CMEI: $stsCmei (MAC=$mac)'); |
|
|
|
Logger.i('BleManager', '当前设备 CMEI: $stsCmei (MAC=$mac)'); |
|
|
|
|
|
|
|
final config = <String, dynamic>{ |
|
|
|
// STS 模式路由 |
|
|
|
@ -1139,35 +1010,17 @@ class BleManager extends GetxService { |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
Logger.info('lxm--准备调用AgentService.startAgentService启动BLE服务'); |
|
|
|
final result = await AgentService.startAgentService(config); |
|
|
|
Logger.info('lxm--AgentService.startAgentService调用结果: $result'); |
|
|
|
Logger.i('BleManager', 'AgentService.startAgentService 结果: $result'); |
|
|
|
|
|
|
|
if (result) { |
|
|
|
Logger.info('lxm--BLE服务启动成功'); |
|
|
|
|
|
|
|
// 添加延迟以等待设备连接 |
|
|
|
Logger.info('lxm--等待2秒让设备连接'); |
|
|
|
//await Future.delayed(const Duration(seconds: 2)); |
|
|
|
|
|
|
|
// 检查连接状态 |
|
|
|
Logger.info('lxm--检查设备连接状态'); |
|
|
|
final isConnected = await _bleService.isConnected(); |
|
|
|
Logger.info('lxm--设备连接状态检查结果: $isConnected'); |
|
|
|
if (isConnected) { |
|
|
|
Logger.info('lxm--设备已连接,更新连接状态'); |
|
|
|
_isConnected.value = true; |
|
|
|
_connectionState.value = BleConnectionState.connected; |
|
|
|
|
|
|
|
// 如果设备信息存在,则获取详细信息 |
|
|
|
Logger.info('lxm--准备获取设备详细信息'); |
|
|
|
if (deviceInfo.value != null) { |
|
|
|
// 获取详细设备信息 |
|
|
|
// fetchDeviceInfo(); |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
Logger.error('BLE服务启动失败'); |
|
|
|
Logger.e('BleManager', 'BLE服务启动失败'); |
|
|
|
} |
|
|
|
|
|
|
|
return result; |
|
|
|
|