设备连接稳定性
This commit is contained in:
parent
383fed4966
commit
02d2dcdbf7
Binary file not shown.
@ -24,6 +24,7 @@ public class BluetoothDeviceScript : MonoBehaviour
|
|||||||
public Action<string, byte[]> PeripheralReceivedWriteDataAction;
|
public Action<string, byte[]> PeripheralReceivedWriteDataAction;
|
||||||
public Action<string> ConnectedPeripheralAction;
|
public Action<string> ConnectedPeripheralAction;
|
||||||
public Action<string> ConnectedDisconnectPeripheralAction { get; set; }
|
public Action<string> ConnectedDisconnectPeripheralAction { get; set; }
|
||||||
|
public Action<string,string> ConnectErrorAction { get; set; }
|
||||||
public Action<string> DisconnectedPeripheralAction;
|
public Action<string> DisconnectedPeripheralAction;
|
||||||
public Action<string> DeviceBleStatusDisconnectedAction;
|
public Action<string> DeviceBleStatusDisconnectedAction;
|
||||||
public Action<string, string> DiscoveredServiceAction;
|
public Action<string, string> DiscoveredServiceAction;
|
||||||
@ -53,10 +54,11 @@ public class BluetoothDeviceScript : MonoBehaviour
|
|||||||
void Update ()
|
void Update ()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
const string connectionError = "ConnectionError";
|
||||||
const string deviceInitializedString = "Initialized";
|
const string deviceInitializedString = "Initialized";
|
||||||
const string deviceDeInitializedString = "DeInitialized";
|
const string deviceDeInitializedString = "DeInitialized";
|
||||||
const string deviceErrorString = "Error";
|
const string deviceErrorString = "Error";
|
||||||
|
const string deviceConnectErrorString = "ConnectionError";
|
||||||
const string deviceServiceAdded = "ServiceAdded";
|
const string deviceServiceAdded = "ServiceAdded";
|
||||||
const string deviceStartedAdvertising = "StartedAdvertising";
|
const string deviceStartedAdvertising = "StartedAdvertising";
|
||||||
const string deviceStoppedAdvertising = "StoppedAdvertising";
|
const string deviceStoppedAdvertising = "StoppedAdvertising";
|
||||||
@ -77,6 +79,7 @@ public class BluetoothDeviceScript : MonoBehaviour
|
|||||||
|
|
||||||
public void OnBluetoothMessage (string message)
|
public void OnBluetoothMessage (string message)
|
||||||
{
|
{
|
||||||
|
Debug.Log(message);
|
||||||
if (message != null)
|
if (message != null)
|
||||||
{
|
{
|
||||||
char[] delim = new char[] { '~' };
|
char[] delim = new char[] { '~' };
|
||||||
@ -242,6 +245,10 @@ public class BluetoothDeviceScript : MonoBehaviour
|
|||||||
DisconnectedPeripheralAction(parts[1]);
|
DisconnectedPeripheralAction(parts[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (message.Length > connectionError.Length && message.Substring(0,connectionError.Length) == connectionError){
|
||||||
|
if (ConnectErrorAction != null)
|
||||||
|
ConnectErrorAction(parts[1], parts[2]);
|
||||||
|
}
|
||||||
else if (message.Length >= deviceDiscoveredService.Length && message.Substring (0, deviceDiscoveredService.Length) == deviceDiscoveredService)
|
else if (message.Length >= deviceDiscoveredService.Length && message.Substring (0, deviceDiscoveredService.Length) == deviceDiscoveredService)
|
||||||
{
|
{
|
||||||
if (parts.Length >= 3 && DiscoveredServiceAction != null)
|
if (parts.Length >= 3 && DiscoveredServiceAction != null)
|
||||||
|
|||||||
@ -604,7 +604,7 @@ public class BluetoothLEHardwareInterface
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ConnectToPeripheral (string name, Action<string> connectAction, Action<string, string> serviceAction, Action<string, string, string> characteristicAction, Action<string> disconnectAction = null)
|
public static void ConnectToPeripheral (string name, Action<string> connectAction, Action<string, string> serviceAction, Action<string, string, string> characteristicAction, Action<string> disconnectAction = null, Action<string,string> errorAction = null)
|
||||||
{
|
{
|
||||||
|
|
||||||
#if !UNITY_EDITOR_OSX || !EXPERIMENTAL_MACOS_EDITOR
|
#if !UNITY_EDITOR_OSX || !EXPERIMENTAL_MACOS_EDITOR
|
||||||
@ -618,6 +618,7 @@ public class BluetoothLEHardwareInterface
|
|||||||
bluetoothDeviceScript.DiscoveredCharacteristicAction = characteristicAction;
|
bluetoothDeviceScript.DiscoveredCharacteristicAction = characteristicAction;
|
||||||
bluetoothDeviceScript.ConnectedDisconnectPeripheralAction = disconnectAction;
|
bluetoothDeviceScript.ConnectedDisconnectPeripheralAction = disconnectAction;
|
||||||
bluetoothDeviceScript.DeviceBleStatusDisconnectedAction = disconnectAction;
|
bluetoothDeviceScript.DeviceBleStatusDisconnectedAction = disconnectAction;
|
||||||
|
bluetoothDeviceScript.ConnectErrorAction = errorAction;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if EXPERIMENTAL_MACOS_EDITOR && (UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX)
|
#if EXPERIMENTAL_MACOS_EDITOR && (UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX)
|
||||||
|
|||||||
@ -106,6 +106,7 @@ namespace Assets.Scripts.Devices.Ble
|
|||||||
|
|
||||||
if (response.Error != null)
|
if (response.Error != null)
|
||||||
{
|
{
|
||||||
|
this.State = DeviceState.Disconnected;
|
||||||
if (response.Error.Code == WclBleErrors.WCL_E_BLUETOOTH_LE_DEVICE_NOT_FOUND)
|
if (response.Error.Code == WclBleErrors.WCL_E_BLUETOOTH_LE_DEVICE_NOT_FOUND)
|
||||||
{
|
{
|
||||||
Debug.Log("未找到设备");
|
Debug.Log("未找到设备");
|
||||||
|
|||||||
@ -9,6 +9,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.Timers;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace Assets.Scripts.Ble
|
namespace Assets.Scripts.Ble
|
||||||
@ -210,30 +211,41 @@ namespace Assets.Scripts.Ble
|
|||||||
|
|
||||||
List<BleServiceInfo> servicelist = new List<BleServiceInfo>();
|
List<BleServiceInfo> servicelist = new List<BleServiceInfo>();
|
||||||
List<BleCharacteristicInfo> characteristilist = new List<BleCharacteristicInfo>();
|
List<BleCharacteristicInfo> characteristilist = new List<BleCharacteristicInfo>();
|
||||||
|
|
||||||
public void ConnectPeripheral(BlePeripheralInfo info, Action<IBleWinHwInterface, BlePeripheralInfo, BleResponse> callback)
|
public void ConnectPeripheral(BlePeripheralInfo info, Action<IBleWinHwInterface, BlePeripheralInfo, BleResponse> callback)
|
||||||
{
|
{
|
||||||
if (!this.callbacks.ContainsKey(info))
|
var exsit = this.callbacks.Where(c => c.Key.Address == info.Address).Any();
|
||||||
|
if (!exsit)
|
||||||
{
|
{
|
||||||
this.callbacks.Add(info, callback);
|
this.callbacks.Add(info, callback);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var obj = this.callbacks.Where(c => c.Key.Address == info.Address).FirstOrDefault();
|
||||||
|
this.callbacks.Remove(obj.Key);
|
||||||
|
this.callbacks.Add(info, callback);
|
||||||
|
}
|
||||||
Debug.Log("try connect device" + info.Name + this.callbacks.Count.ToString());
|
Debug.Log("try connect device" + info.Name + this.callbacks.Count.ToString());
|
||||||
|
var self = this;
|
||||||
if (this.callbacks.Count == 1)
|
if (this.callbacks.Count == 1)
|
||||||
{
|
{
|
||||||
BleResponse s = new BleResponse();
|
|
||||||
s.IsSuccess = true;
|
|
||||||
s.Error = null;
|
|
||||||
var self = this;
|
|
||||||
BluetoothLEHardwareInterface.ConnectToPeripheral(info.Address, (address) =>
|
BluetoothLEHardwareInterface.ConnectToPeripheral(info.Address, (address) =>
|
||||||
{
|
{
|
||||||
|
BleResponse s = new BleResponse
|
||||||
|
{
|
||||||
|
IsSuccess = true,
|
||||||
|
Error = null
|
||||||
|
};
|
||||||
callback?.Invoke(self, info, s);
|
callback?.Invoke(self, info, s);
|
||||||
this.callbacks.Remove(info);
|
this.callbacks.Remove(info);
|
||||||
Debug.Log("连接成功!"+info.Name);
|
Debug.Log("连接成功!" + info.Name);
|
||||||
if (this.callbacks.Any())
|
if (this.callbacks.Any())
|
||||||
{
|
{
|
||||||
this.ConnectPeripheral(this.callbacks.First().Key, this.callbacks.First().Value);
|
this.ConnectPeripheral(this.callbacks.First().Key, this.callbacks.First().Value);
|
||||||
}
|
}
|
||||||
}, (address, service) =>
|
}, (address, service) =>
|
||||||
{
|
{
|
||||||
|
Debug.Log("发现服务");
|
||||||
ServicesDiscovered(address, service);
|
ServicesDiscovered(address, service);
|
||||||
}, (address, service, characteristic) =>
|
}, (address, service, characteristic) =>
|
||||||
{
|
{
|
||||||
@ -242,9 +254,25 @@ namespace Assets.Scripts.Ble
|
|||||||
{
|
{
|
||||||
Debug.Log("disconnect device:" + address);
|
Debug.Log("disconnect device:" + address);
|
||||||
PeripheralDisconnected(address, info);
|
PeripheralDisconnected(address, info);
|
||||||
});
|
},
|
||||||
|
(address, error) =>
|
||||||
|
{
|
||||||
|
BleResponse s = new BleResponse
|
||||||
|
{
|
||||||
|
IsSuccess = false,
|
||||||
|
Error = new BleHwInterfaceError(error)
|
||||||
|
};
|
||||||
|
callback?.Invoke(self, info, s);
|
||||||
|
this.callbacks.Remove(info);
|
||||||
|
if (this.callbacks.Any())
|
||||||
|
{
|
||||||
|
this.ConnectPeripheral(this.callbacks.First().Key, this.callbacks.First().Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#region 私有方法
|
#region 私有方法
|
||||||
//服务发现
|
//服务发现
|
||||||
private void ServicesDiscovered(string address, string service)
|
private void ServicesDiscovered(string address, string service)
|
||||||
@ -305,7 +333,7 @@ namespace Assets.Scripts.Ble
|
|||||||
}
|
}
|
||||||
|
|
||||||
var characteristicsDiscoveredCallback = characteristicsDiscoveredCallbacks.Where(c => c.Key.MatchAddress(address));
|
var characteristicsDiscoveredCallback = characteristicsDiscoveredCallbacks.Where(c => c.Key.MatchAddress(address));
|
||||||
if (serviceCallback.Any())
|
if (characteristicsDiscoveredCallback.Any())
|
||||||
{
|
{
|
||||||
characteristicsDiscoveredCallbacks.Remove(characteristicsDiscoveredCallback.First().Key);
|
characteristicsDiscoveredCallbacks.Remove(characteristicsDiscoveredCallback.First().Key);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user