解决设备连接问题

This commit is contained in:
lishuo 2022-07-19 18:46:01 +08:00
parent 629e27f5cd
commit 63987511e7
3 changed files with 22 additions and 21 deletions

View File

@ -36,7 +36,7 @@ namespace Assets.Scripts.Devices.Ble
{
//移除到3s没有扫描到的设备
var now = DateTime.Now;
var needRemove = discoveredDevices.Where(c => (now - c.Value.LastActiveTime).TotalSeconds >= 3 && c.Value.State != Ant.DeviceState.Connected).ToList();
var needRemove = discoveredDevices.Where(c => (now - c.Value.LastActiveTime).TotalSeconds > 5 && c.Value.State == Ant.DeviceState.Disconnected).ToList();
foreach (var item in needRemove)
{
discoveredDevices.Remove(item.Key);

View File

@ -1,16 +1,11 @@
using Assets.Scripts.Ble.Scan;
using Assets.Scripts.Ble.Win;
using Assets.Scripts.Devices.Ant;
using Assets.Scripts.Devices.Ble;
using Assets.Scripts.Devices.Ble.Interfaces;
using Assets.Scripts.Devices.Ble.Win;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Timers;
using UnityEngine;
namespace Assets.Scripts.Ble
@ -225,7 +220,7 @@ namespace Assets.Scripts.Ble
IsSuccess = true,
Error = null
};
//PeripheralDisconnected(address, info);//连接前断开
PeripheralDisconnected(address, info);//连接前断开
callback?.Invoke(self, info, s);
this.callbacks.Remove(info);
Debug.Log("连接成功!" + info.Name);
@ -244,7 +239,9 @@ namespace Assets.Scripts.Ble
{
var ble = new WinBlePeripheralInfo(address,string.Empty);
Debug.Log("disconnect device:" + address);
#if UNITY_IOS
peripheralDisconnectedEvent(this, ble, null, false);
#endif
PeripheralDisconnected(address, ble);
},
(address, error) =>
@ -254,8 +251,19 @@ namespace Assets.Scripts.Ble
IsSuccess = false,
Error = new BleHwInterfaceError(error)
};
callback?.Invoke(self, info, s);
this.callbacks.Remove(info);
var ble = new WinBlePeripheralInfo(address, string.Empty);
if (this.callbacks.Where(c => c.Key.MatchAddress(address)).Any())
{
var current = this.callbacks.Where(c => c.Key.MatchAddress(address)).FirstOrDefault();
current.Value?.Invoke(self, ble, s);
this.callbacks.Remove(current.Key);
}
else
{
peripheralDisconnectedEvent(this, ble, null, false);
}
if (this.callbacks.Any())
{
this.ConnectPeripheral(this.callbacks.First().Key, this.callbacks.First().Value);
@ -265,7 +273,7 @@ namespace Assets.Scripts.Ble
}
}
#region
#region
//服务发现
private void ServicesDiscovered(string address, string service)
{
@ -330,7 +338,7 @@ namespace Assets.Scripts.Ble
characteristicsDiscoveredCallbacks.Remove(characteristicsDiscoveredCallback.First().Key);
}
}
#endregion
#endregion
//设备断开连接
public void DisconnectPeripheral(BlePeripheralInfo peripheral, Action callback)

View File

@ -43,17 +43,10 @@ namespace Assets.Scripts.Devices.Ble
public void StartWatcher() {
var self = this;
if (statusEnum == WclBleManagerStatus.RadioOff)
BluetoothLEHardwareInterface.ScanForPeripheralsWithServices(ServiceUuids.GetServiceUuidList().ToArray(), null, (address, name, rssi, bytes) =>
{
BluetoothLEHardwareInterface.BluetoothEnable(true);
}
else
{
BluetoothLEHardwareInterface.ScanForPeripheralsWithServices(ServiceUuids.GetServiceUuidList().ToArray(), null, (address, name, rssi, bytes) =>
{
ScanInfoReceived?.Invoke(self, address, name, rssi, bytes);
}, true);
}
ScanInfoReceived?.Invoke(self, address, name, rssi, bytes);
}, true);
}
public void Initialize()
{