支持蓝牙可用状态变更。搜索不到设备自动停止当前线程。
This commit is contained in:
parent
dd474f1f61
commit
734893ff83
@ -308,7 +308,7 @@ RectTransform:
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 30, y: -169}
|
||||
m_SizeDelta: {x: 85, y: 20}
|
||||
m_SizeDelta: {x: 205.19348, y: 20}
|
||||
m_Pivot: {x: 0, y: 1}
|
||||
--- !u!222 &615180660641507081
|
||||
CanvasRenderer:
|
||||
|
||||
@ -939,7 +939,7 @@ RectTransform:
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 136, y: -72}
|
||||
m_SizeDelta: {x: 85, y: 20}
|
||||
m_SizeDelta: {x: 251.36475, y: 20}
|
||||
m_Pivot: {x: 0, y: 1}
|
||||
--- !u!222 &6939795344602196707
|
||||
CanvasRenderer:
|
||||
|
||||
@ -435,7 +435,7 @@ MonoBehaviour:
|
||||
m_ChildForceExpandWidth: 1
|
||||
m_ChildForceExpandHeight: 1
|
||||
m_ChildControlWidth: 0
|
||||
m_ChildControlHeight: 0
|
||||
m_ChildControlHeight: 1
|
||||
m_ChildScaleWidth: 0
|
||||
m_ChildScaleHeight: 0
|
||||
--- !u!114 &2674253312174825381
|
||||
@ -1275,12 +1275,12 @@ PrefabInstance:
|
||||
- target: {fileID: 5329299856310536127, guid: 6b94e789d6585a04dbdc04c8a7cf97b2,
|
||||
type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 1
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5329299856310536127, guid: 6b94e789d6585a04dbdc04c8a7cf97b2,
|
||||
type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 1
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5329299856310536127, guid: 6b94e789d6585a04dbdc04c8a7cf97b2,
|
||||
type: 3}
|
||||
@ -1290,7 +1290,7 @@ PrefabInstance:
|
||||
- target: {fileID: 5329299856310536127, guid: 6b94e789d6585a04dbdc04c8a7cf97b2,
|
||||
type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: -9
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8688565590564084001, guid: 6b94e789d6585a04dbdc04c8a7cf97b2,
|
||||
type: 3}
|
||||
|
||||
@ -21,7 +21,7 @@ namespace Assets.Scripts.Devices.Ant
|
||||
//自动连接
|
||||
if (DeviceCache.Exist(device2))
|
||||
{
|
||||
Debug.Log("自动连接" + device2.DeviceNumber);
|
||||
//Debug.Log("自动连接" + device2.DeviceNumber);
|
||||
device2.Connect();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
using Assets.Scripts.Ble;
|
||||
using Assets.Scripts.Ble.HeartRate;
|
||||
using Assets.Scripts.Ble.Service;
|
||||
using Assets.Scripts.Ble.Win;
|
||||
using Assets.Scripts.Devices.Ant;
|
||||
using Assets.Scripts.Devices.Ble.Characteristic;
|
||||
using Assets.Scripts.Devices.Ble.Interfaces;
|
||||
@ -51,9 +52,13 @@ namespace Assets.Scripts.Devices.Ble
|
||||
|
||||
private void HwInterface_PeripheralDisconnectedEvent(BleWinHwInterface hwInterface, BlePeripheralInfo peripheral, BleResponse response, bool manualDisconnect)
|
||||
{
|
||||
if (!peripheral.MatchAddress(this.peripheralInfo.Address))
|
||||
{
|
||||
return;
|
||||
}
|
||||
Debug.Log("disconnected event");
|
||||
if (this.State != DeviceState.Disconnected)
|
||||
{
|
||||
//Debug.Log("111111111111111111111111111111111111111111111111111111111111");
|
||||
this.State = DeviceState.Disconnected;
|
||||
|
||||
if (!manualDisconnect)
|
||||
@ -98,8 +103,17 @@ namespace Assets.Scripts.Devices.Ble
|
||||
hwInterface.DiscoverServices(this.peripheralInfo, ServicesDiscoveredAction);//, this.ServicesDiscoveredAction);
|
||||
return;
|
||||
}
|
||||
|
||||
this.State = DeviceState.Disconnected;
|
||||
|
||||
if (response.Error != null)
|
||||
{
|
||||
if (response.Error.Code == WclBleErrors.WCL_E_BLUETOOTH_LE_DEVICE_NOT_FOUND)
|
||||
{
|
||||
Debug.Log("未找到设备");
|
||||
App.MainDeviceAdapter.ClearDevice(this.peripheralInfo.Address);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void Disconnect()
|
||||
@ -107,12 +121,21 @@ namespace Assets.Scripts.Devices.Ble
|
||||
if (this.State != DeviceState.Disconnected)
|
||||
{
|
||||
Debug.Log("断开设备" + this.Name);
|
||||
|
||||
//App.MainDeviceAdapter.PrintStatus();
|
||||
|
||||
|
||||
this.hwInterface.DisconnectPeripheral(this.peripheralInfo, () => {
|
||||
//App.MainDeviceAdapter.PrintStatus();
|
||||
|
||||
this.State = DeviceState.Disconnected;
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void ServicesDiscoveredAction(BleWinHwInterface hwInterface, BlePeripheralInfo sender, BleResponse<List<BleServiceInfo>> response)
|
||||
{
|
||||
//Debug.Log("搜索service");
|
||||
@ -166,83 +189,15 @@ namespace Assets.Scripts.Devices.Ble
|
||||
//}
|
||||
//this.AddService(service, null);
|
||||
// }
|
||||
//}
|
||||
//}
|
||||
|
||||
private void CreateFtmsService(BleServiceInfo serviceInfo)
|
||||
{
|
||||
this.hwInterface.DiscoverCharacteristic(serviceInfo, (hwInterface, bleServiceInfo, response) =>
|
||||
{
|
||||
if (this.CheckPendingServiceCharacteristicsResponse(serviceInfo, response))
|
||||
{
|
||||
this.CreateFtmsService(serviceInfo, response);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void CreateFtmsService(BleServiceInfo serviceInfo, BleResponse<List<BleCharacteristicInfo>> response)
|
||||
{
|
||||
BleService service;
|
||||
//if (response.Data.Any((BleCharacteristicInfo characteristicInfo) => characteristicInfo.MatchGuid(BleApi.Characteristics.CycleOpsFtmsSystemWeight)))
|
||||
//{
|
||||
//service = new CycleOpsFtmsService(serviceInfo, base.Settings, this.hwInterface, new ServiceStateChanged(this.ServiceStateChanged), new ServiceCapabilitiesUpdated(this.ServiceCapabilitiesUpdated));
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
//FixType fixType = FixType.FtmsFeature7ByteResponse;
|
||||
//if (this.IsWattbike())
|
||||
//{
|
||||
// fixType |= FixType.WattbikeFeatureInconsistency;
|
||||
//}
|
||||
//service = new FtmsService(serviceInfo, base.Settings, this.hwInterface, new ServiceStateChanged(this.ServiceStateChanged), new ServiceCapabilitiesUpdated(this.ServiceCapabilitiesUpdated), fixType);
|
||||
//service = new Ftms.FtmsService(serviceInfo, hwInterface);
|
||||
//}
|
||||
//this.AddService(service, response);
|
||||
}
|
||||
|
||||
|
||||
private void CreateCyclingPowerService(BleServiceInfo serviceInfo)
|
||||
{
|
||||
this.pendingServices.Add(serviceInfo);
|
||||
this.hwInterface.DiscoverCharacteristic(serviceInfo, (hwInterface, service, response) =>
|
||||
{
|
||||
if (this.CheckPendingServiceCharacteristicsResponse(serviceInfo, response))
|
||||
{
|
||||
this.CreateCyclingPowerService(serviceInfo, response);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void CreateCyclingPowerService(BleServiceInfo serviceInfo, BleResponse<List<BleCharacteristicInfo>> response)
|
||||
{
|
||||
//BleService service = null;
|
||||
//if (response.Data.Any((BleCharacteristicInfo characteristicInfo) => characteristicInfo.MatchGuid(ServiceUuids.Characteristics.WahooControlPoint)))
|
||||
//{
|
||||
// //service = new WahooService(serviceInfo, base.Settings, this.hwInterface, new ServiceStateChanged(this.ServiceStateChanged), new ServiceCapabilitiesUpdated(this.ServiceCapabilitiesUpdated), fixType);
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// service = new CyclingPowerService(serviceInfo, this.hwInterface);
|
||||
// this.AddService(service, response);
|
||||
//}
|
||||
}
|
||||
|
||||
private void AddService(BleService service, BleResponse<List<BleCharacteristicInfo>> scanCharacteristicsResponse = null)
|
||||
{
|
||||
if (service == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
this.services.Add(service);
|
||||
service.DiscoverCharacteristics(scanCharacteristicsResponse);
|
||||
}
|
||||
|
||||
private bool CheckPendingServiceCharacteristicsResponse(BleServiceInfo serviceInfo, BleResponse bleResponse)
|
||||
protected bool CheckPendingServiceCharacteristicsResponse(BleServiceInfo serviceInfo, BleResponse bleResponse)
|
||||
{
|
||||
if (bleResponse.IsSuccess)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
this.pendingServices.Remove(serviceInfo);
|
||||
//this.pendingServices.Remove(serviceInfo);
|
||||
this.CheckAndSetConnectionStatus();
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -21,6 +21,21 @@ namespace Assets.Scripts.Devices.Ble
|
||||
public BleDeviceAdapter()
|
||||
{
|
||||
hwInterface = BleWinHwInterface.GetInterface();
|
||||
|
||||
hwInterface.BluetoothStateChangedEvent += HwInterface_BluetoothStateChangedEvent;
|
||||
}
|
||||
|
||||
private void HwInterface_BluetoothStateChangedEvent(BleWinHwInterface hwInterface, BleState bleState)
|
||||
{
|
||||
//Debug.Log("22222222222222" + bleState);
|
||||
if(bleState == BleState.Off)
|
||||
{
|
||||
discoveredDevices.Clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.StartScan();
|
||||
}
|
||||
}
|
||||
|
||||
public override IEnumerable<AbstractDevice> GetDevices()
|
||||
@ -39,7 +54,7 @@ namespace Assets.Scripts.Devices.Ble
|
||||
}
|
||||
|
||||
public override void StartScan()
|
||||
{
|
||||
{
|
||||
hwInterface.StartScan((device) =>
|
||||
{
|
||||
if (!discoveredDevices.ContainsKey(device.Peripheral.Address))
|
||||
@ -123,14 +138,19 @@ namespace Assets.Scripts.Devices.Ble
|
||||
/// <summary>
|
||||
/// 清除未连接的设备
|
||||
/// </summary>
|
||||
public void ClearDevice()
|
||||
public void ClearDevice(string address)
|
||||
{
|
||||
var list = discoveredDevices.ToList();
|
||||
foreach (var item in list)
|
||||
{
|
||||
if(item.Value.State == Ant.DeviceState.Disconnected)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(address) && item.Key != address)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
hwInterface.pCache.Remove(item.Key);
|
||||
item.Value.Dispose();
|
||||
discoveredDevices.Remove(item.Key);
|
||||
}
|
||||
}
|
||||
|
||||
@ -36,9 +36,13 @@ namespace Assets.Scripts.Devices.Ble.Characteristic
|
||||
|
||||
public void HandleAttributeReceived(byte[] data)
|
||||
{
|
||||
if(data.Length < 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
BatteryLevelValue = (int)data[0];
|
||||
|
||||
Debug.Log($"电量:{ BatteryLevelValue }");
|
||||
//Debug.Log($"电量:{ BatteryLevelValue }");
|
||||
}
|
||||
|
||||
public void SetUnavailable()
|
||||
|
||||
@ -20,7 +20,7 @@ namespace Assets.Scripts.Devices.Ble.Characteristic
|
||||
public void HandleAttributeReceived(byte[] data)
|
||||
{
|
||||
//throw new NotImplementedException();
|
||||
Debug.Log(Encoding.UTF8.GetString(data));
|
||||
//Debug.Log(Encoding.UTF8.GetString(data));
|
||||
}
|
||||
|
||||
public void SetUnavailable()
|
||||
|
||||
@ -20,7 +20,7 @@ namespace Assets.Scripts.Devices.Ble.Characteristic
|
||||
public void HandleAttributeReceived(byte[] data)
|
||||
{
|
||||
//throw new NotImplementedException();
|
||||
Debug.Log($"model number:\t{ Encoding.UTF8.GetString(data) }");
|
||||
//Debug.Log($"model number:\t{ Encoding.UTF8.GetString(data) }");
|
||||
}
|
||||
|
||||
public void SetUnavailable()
|
||||
|
||||
@ -56,7 +56,7 @@ namespace Assets.Scripts.Devices.Ble.Devices
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log(item.GetType() + "服务可用");
|
||||
//Debug.Log(item.GetType() + "服务可用");
|
||||
|
||||
GetBatteryLevel(ccc);
|
||||
}
|
||||
|
||||
@ -51,6 +51,10 @@ namespace Assets.Scripts.Devices.Ble.Devices
|
||||
{
|
||||
hwInterface.DiscoverCharacteristic(service, (hwInterface, service1, response) =>
|
||||
{
|
||||
if(!base.CheckPendingServiceCharacteristicsResponse(service1, response))
|
||||
{
|
||||
return;
|
||||
}
|
||||
foreach (var character in response.Data)
|
||||
{
|
||||
if (character.MatchGuid(ServiceUuids.Characteristics.TacxFecRead))
|
||||
|
||||
@ -225,20 +225,22 @@ namespace Assets.Scripts.Ble
|
||||
//{
|
||||
int num = gattClient.Connect();
|
||||
Debug.Log("连接设备返回" + num);
|
||||
|
||||
|
||||
//});
|
||||
}
|
||||
|
||||
internal void DisconnectPeripheral(BlePeripheralInfo peripheral, Action callback)
|
||||
{
|
||||
var gattThread = this.wclBleMainThread.GetGattThread(peripheral);
|
||||
if(gattThread != null)
|
||||
if(gattThread != null && gattThread.CanLoadWork)
|
||||
{
|
||||
this.callbacks.Remove(peripheral);
|
||||
this.servicesCallbacks.Remove(peripheral);
|
||||
this.characteristicNotificationCallbacks.Remove(peripheral);
|
||||
|
||||
this.disconnectedCallback.Add(peripheral, callback);
|
||||
gattThread.Discounect();
|
||||
gattThread.Discounect();
|
||||
}
|
||||
}
|
||||
|
||||
@ -255,6 +257,7 @@ namespace Assets.Scripts.Ble
|
||||
|
||||
public void StartScan(Action<BleAdvertisementInfo> discoveredCallBack)
|
||||
{
|
||||
pCache.Clear();
|
||||
_discoveredCallback = discoveredCallBack;
|
||||
this.wclBleMainThread.StartWatcher();
|
||||
}
|
||||
@ -288,15 +291,17 @@ namespace Assets.Scripts.Ble
|
||||
|
||||
private void GattDisconnected(WclBleGattThread gattClient, BleResponse response)
|
||||
{
|
||||
Debug.Log("gatt disconnected");
|
||||
|
||||
Debug.Log($"gatt disconnected { gattClient.Peripheral.Name }");
|
||||
|
||||
this.callbacks.Remove(gattClient.Peripheral);
|
||||
this.servicesCallbacks.Remove(gattClient.Peripheral);
|
||||
this.characteristicNotificationCallbacks.Remove(gattClient.Peripheral);
|
||||
//App.MainDeviceAdapter.PrintStatus();
|
||||
|
||||
var manualDisconnect = disconnectedCallback.ContainsKey(gattClient.Peripheral);
|
||||
this.peripheralDisconnectedEvent(this, gattClient.Peripheral, response, manualDisconnect);
|
||||
|
||||
//App.MainDeviceAdapter.PrintStatus();
|
||||
if (disconnectedCallback.ContainsKey(gattClient.Peripheral))
|
||||
{
|
||||
disconnectedCallback[gattClient.Peripheral].Invoke();
|
||||
@ -304,7 +309,8 @@ namespace Assets.Scripts.Ble
|
||||
}
|
||||
//this.pCache.Remove(gattClient.Peripheral.Address);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
private void GattServicesDiscovered(WclBleGattThread gattClient, BleResponse<List<BleServiceInfo>> response)
|
||||
{
|
||||
@ -324,7 +330,7 @@ namespace Assets.Scripts.Ble
|
||||
|
||||
private void GattCharacteristicsDiscovered(WclBleGattThread gattClient, BleServiceInfo service, BleResponse<List<BleCharacteristicInfo>> response)
|
||||
{
|
||||
Debug.Log("characteristics discovered");
|
||||
//Debug.Log("characteristics discovered");
|
||||
|
||||
if (this.characteristicsDiscoveredCallbacks.ContainsKey(service))
|
||||
{
|
||||
|
||||
10
Assets/Scripts/Devices/Ble/Win/GattThreadStopped.cs
Normal file
10
Assets/Scripts/Devices/Ble/Win/GattThreadStopped.cs
Normal file
@ -0,0 +1,10 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Assets.Scripts.Devices.Ble.Win
|
||||
{
|
||||
internal delegate void GattThreadStopped(WclBleMainThread thread, WclBleGattThread gatt);
|
||||
}
|
||||
11
Assets/Scripts/Devices/Ble/Win/GattThreadStopped.cs.meta
Normal file
11
Assets/Scripts/Devices/Ble/Win/GattThreadStopped.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9ea66f9d6ac61144a97caaaa882a2cb9
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -194,7 +194,7 @@ namespace Assets.Scripts.Ble.Win
|
||||
{
|
||||
try
|
||||
{
|
||||
Debug.Log("onconnected");
|
||||
Debug.Log($"wclbleGattClient onconnected { error }");
|
||||
WclBleGattClient.GattConnectionChanged connected = this.Connected;
|
||||
if (connected != null)
|
||||
{
|
||||
|
||||
@ -170,23 +170,24 @@ namespace Assets.Scripts.Devices.Ble.Win
|
||||
private ManualResetEvent sEvent;
|
||||
private AutoResetEvent aEvent;
|
||||
private ManualResetEvent tEvent;
|
||||
internal WclBleGattThread(BlePeripheralInfo bleDevice, IntPtr radio)
|
||||
internal WclBleGattThread(BlePeripheralInfo bleDevice, IntPtr radio, WclBleGattThread.WclBleGattThreadStoppedCallback stopCallback)
|
||||
{
|
||||
this.Peripheral = bleDevice;
|
||||
this.rPtr = radio;
|
||||
_bleDevice = bleDevice;
|
||||
this.address = long.Parse(_bleDevice.Address, System.Globalization.NumberStyles.HexNumber);
|
||||
this.threadStoppedCallback = stopCallback;
|
||||
}
|
||||
|
||||
private void ThreadProc()
|
||||
{
|
||||
this.SetUpWorkerThread();
|
||||
//this.sEvent.Set();
|
||||
//this.DoWorkerLoop();
|
||||
//private void ThreadProc()
|
||||
// {
|
||||
// this.SetUpWorkerThread();
|
||||
// //this.sEvent.Set();
|
||||
// //this.DoWorkerLoop();
|
||||
|
||||
//this.CleanUpWorkerThread();
|
||||
//this.InternalCleanUp();
|
||||
}
|
||||
// //this.CleanUpWorkerThread();
|
||||
// //this.InternalCleanUp();
|
||||
//}
|
||||
|
||||
protected override void CleanUpWorkerThread()
|
||||
{
|
||||
@ -194,7 +195,10 @@ namespace Assets.Scripts.Devices.Ble.Win
|
||||
base.ProcessPendingAPCMessages();
|
||||
this.gatt.Dispose();
|
||||
this.gatt = null;
|
||||
}
|
||||
|
||||
this.threadStoppedCallback?.Invoke(this);
|
||||
|
||||
}
|
||||
|
||||
protected override void SetUpWorkerThread()
|
||||
{
|
||||
@ -305,8 +309,13 @@ namespace Assets.Scripts.Devices.Ble.Win
|
||||
}
|
||||
BleResponse response = new BleResponse
|
||||
{
|
||||
IsSuccess = WclBleErrors.IsSuccessCode(error)
|
||||
};
|
||||
IsSuccess = WclBleErrors.IsSuccessCode(error),
|
||||
|
||||
};
|
||||
if (!response.IsSuccess)
|
||||
{
|
||||
response.Error = new BleHwInterfaceError(error, "", "");
|
||||
}
|
||||
//Loom.QueueOnMainThread(() =>
|
||||
//{
|
||||
this.gattConnected?.Invoke(this, response);
|
||||
@ -508,6 +517,8 @@ namespace Assets.Scripts.Devices.Ble.Win
|
||||
|
||||
this.gattCharacteristicWrote?.Invoke(this, characteristic, response);
|
||||
}
|
||||
private WclBleGattThread.WclBleGattThreadStoppedCallback threadStoppedCallback;
|
||||
public delegate void WclBleGattThreadStoppedCallback(WclBleGattThread clientThread);
|
||||
|
||||
private class WinBleCharacteristicInfo : BleCharacteristicInfo
|
||||
{
|
||||
|
||||
@ -28,6 +28,19 @@ namespace Assets.Scripts.Devices.Ble.Win
|
||||
}
|
||||
}
|
||||
|
||||
private GattThreadStopped gattThreadStopped;
|
||||
public event GattThreadStopped GattThreadStopped
|
||||
{
|
||||
add
|
||||
{
|
||||
this.gattThreadStopped += value;
|
||||
}
|
||||
remove
|
||||
{
|
||||
this.gattThreadStopped -= value;
|
||||
}
|
||||
}
|
||||
|
||||
private WclBleManager wclBleManager;
|
||||
private WclBleWatcher wclWatcher;
|
||||
private readonly object locker = new object();
|
||||
@ -107,7 +120,7 @@ namespace Assets.Scripts.Devices.Ble.Win
|
||||
});
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
public override bool Stop()
|
||||
{
|
||||
Debug.Log("停止thread");
|
||||
foreach (var item in this.gattClients.Values)
|
||||
@ -116,6 +129,8 @@ namespace Assets.Scripts.Devices.Ble.Win
|
||||
}
|
||||
|
||||
wclBleManager.Dispose();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public string Test()
|
||||
@ -153,13 +168,33 @@ namespace Assets.Scripts.Devices.Ble.Win
|
||||
throw new ArgumentException("gatt thread 已经创建");
|
||||
}
|
||||
|
||||
WclBleGattThread wclBleGattThread = new WclBleGattThread(info, this.wclBleManager.Radio);
|
||||
WclBleGattThread wclBleGattThread = new WclBleGattThread(info, this.wclBleManager.Radio, this.GattThreadStoppedCallback);
|
||||
this.gattClients[info] = wclBleGattThread;
|
||||
|
||||
return wclBleGattThread;
|
||||
}
|
||||
}
|
||||
|
||||
private void GattThreadStoppedCallback(WclBleGattThread gattThread)
|
||||
{
|
||||
Debug.Log("stop callback");
|
||||
bool flag = false;
|
||||
object obj = this.locker;
|
||||
lock (obj)
|
||||
{
|
||||
|
||||
if (this.gattClients.ContainsKey(gattThread.Peripheral))
|
||||
{
|
||||
this.gattClients.Remove(gattThread.Peripheral);
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
if (flag)
|
||||
{
|
||||
this.gattThreadStopped?.Invoke(this, gattThread);
|
||||
}
|
||||
}
|
||||
|
||||
public event WclBleMainThread.WclAdvertisementPacketDelegate ScanInfoReceived
|
||||
{
|
||||
add
|
||||
|
||||
@ -5,6 +5,7 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Assets.Scripts.Devices.Ble.Win
|
||||
{
|
||||
@ -16,6 +17,7 @@ namespace Assets.Scripts.Devices.Ble.Win
|
||||
{
|
||||
get
|
||||
{
|
||||
//Debug.Log($"{ this.started }, { this.IsTerminating }");
|
||||
return this.started || this.IsTerminating;
|
||||
}
|
||||
}
|
||||
@ -36,6 +38,7 @@ namespace Assets.Scripts.Devices.Ble.Win
|
||||
{
|
||||
get
|
||||
{
|
||||
//Debug.Log($"{ this.IsRunning }, { this.IsTerminating }");
|
||||
return this.IsRunning && !this.IsTerminating;
|
||||
}
|
||||
}
|
||||
|
||||
@ -76,15 +76,36 @@ namespace Assets.Scripts.Devices
|
||||
/// <summary>
|
||||
/// 清除未连接的设备
|
||||
/// </summary>
|
||||
public void ClearDevice()
|
||||
public void ClearDevice(string address="")
|
||||
{
|
||||
Debug.Log($"clear device {address}");
|
||||
foreach (var item in adapters)
|
||||
{
|
||||
if(item is BleDeviceAdapter)
|
||||
{
|
||||
(item as BleDeviceAdapter).ClearDevice();
|
||||
(item as BleDeviceAdapter).ClearDevice(address);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void PrintStatus()
|
||||
{
|
||||
var str = "----------------------------\r\n";
|
||||
var devices = App.MainDeviceAdapter.GetDevices().ToList();
|
||||
foreach (var item in devices)
|
||||
{
|
||||
if (item.Sensor != SensorType.Trainer)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (item.Network != NetworkType.BLE)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
str += item.Name + $"{ item.State }\r\n";
|
||||
}
|
||||
str += "---------------------------\r\n";
|
||||
Debug.Log(str);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -32,4 +32,17 @@ public static class PFConstants
|
||||
return Application.persistentDataPath;
|
||||
}
|
||||
}
|
||||
|
||||
public static string LogFolder
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!Directory.Exists(Application.persistentDataPath + "/Logs/"))
|
||||
{
|
||||
Directory.CreateDirectory(Application.persistentDataPath + "/Logs/");
|
||||
}
|
||||
|
||||
return Application.persistentDataPath + "/Logs/";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
38
Assets/Scripts/Scenes/BaseScene.cs
Normal file
38
Assets/Scripts/Scenes/BaseScene.cs
Normal file
@ -0,0 +1,38 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Assets.Scripts.Scenes
|
||||
{
|
||||
public abstract class BaseScene: MonoBehaviour
|
||||
{
|
||||
protected virtual void Awake()
|
||||
{
|
||||
Debug.Log("base scene awake");
|
||||
Application.logMessageReceived += Application_logMessageReceived;
|
||||
}
|
||||
|
||||
private void Application_logMessageReceived(string condition, string stackTrace, LogType type)
|
||||
{
|
||||
//Debug.Log("application log");
|
||||
if (type == LogType.Error || type == LogType.Exception)
|
||||
{
|
||||
string log = $"time:{ System.DateTime.Now.ToString() }\r\n";
|
||||
log += $"type:{ type }\r\n";
|
||||
log += $"msg:{ condition }\r\n";
|
||||
log += $"stack trace:{ stackTrace }\r\n";
|
||||
System.IO.File.AppendAllText($"{PFConstants.LogFolder}\\{ System.DateTime.Now.ToString("yyyy-MM-dd") }.txt", log);
|
||||
|
||||
//Debug.Log(PFConstants.LogFolder);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnApplicationQuit()
|
||||
{
|
||||
App.MainDeviceAdapter.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/Scripts/Scenes/BaseScene.cs.meta
Normal file
11
Assets/Scripts/Scenes/BaseScene.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6e959496c1867434a9491c1416cb1c68
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,5 +1,6 @@
|
||||
using Assets.Scripts;
|
||||
using Assets.Scripts.Devices.Ant;
|
||||
using Assets.Scripts.Scenes;
|
||||
using Assets.Scripts.UI.Prefab.Device;
|
||||
using Mapbox.Examples;
|
||||
using System.Collections;
|
||||
@ -8,32 +9,20 @@ using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class MainController : MonoBehaviour
|
||||
public class MainController : BaseScene
|
||||
{
|
||||
[SerializeField]GameObject root;
|
||||
private Text Version;
|
||||
private void Awake()
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
|
||||
Version = this.transform.Find("GameObject").Find("Version").GetComponent<Text>();
|
||||
Version.text = "V"+App.AppVersion;
|
||||
DeviceCache.Init(PFConstants.DeviceCacheFolder);
|
||||
Loom.Initialize();
|
||||
//AntConnector.Instance((device2) => {
|
||||
// if (device2.State == DeviceState.Disconnected)
|
||||
// {
|
||||
// //Debug.Log($"探索到新的设备{ device2.DeviceNumber }");
|
||||
// //自动连接
|
||||
// if (DeviceCache.Exist(device2))
|
||||
// {
|
||||
// Debug.Log("自动连接" + device2.DeviceNumber);
|
||||
// device2.Connect();
|
||||
// }
|
||||
// }
|
||||
//}, Debug.Log);
|
||||
App.MainDeviceAdapter.StartScan();
|
||||
|
||||
|
||||
//Debug.Log(Application.dataPath);
|
||||
App.MainDeviceAdapter.StartScan();
|
||||
}
|
||||
|
||||
// Start is called before the first frame update
|
||||
@ -76,6 +65,8 @@ public class MainController : MonoBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
@ -87,9 +78,4 @@ public class MainController : MonoBehaviour
|
||||
var result = await ConfigHelper.userApi.Login("13115011550", "laozhong", "");
|
||||
App.CurrentUser = result.data;
|
||||
}
|
||||
|
||||
private void OnApplicationQuit()
|
||||
{
|
||||
App.MainDeviceAdapter.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
@ -48,7 +48,7 @@ public class DeviceItem : Selectable, IEventSystemHandler, IPointerClickHandler
|
||||
{
|
||||
signal.enabled = false;
|
||||
}
|
||||
SetSignal();
|
||||
SetSignal();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -251,15 +251,16 @@ public class DeviceView : MonoBehaviour
|
||||
connectionPanel.SetActive(false);
|
||||
logo.sprite = sprite1;
|
||||
|
||||
title.text = connectedDevice.Name;
|
||||
//title.text = connectedDevice.Name;
|
||||
if (connectedDevice.Network == NetworkType.BLE)
|
||||
{
|
||||
noDevice.enabled = false;
|
||||
//noDevice.enabled = false;
|
||||
noDevice.text = connectedDevice.Name;
|
||||
}
|
||||
else
|
||||
{
|
||||
noDevice.enabled = true;
|
||||
noDevice.text = connectedDevice.DeviceNumber.ToString();
|
||||
//noDevice.enabled = true;
|
||||
noDevice.text = connectedDevice.Name +" "+ connectedDevice.DeviceNumber.ToString();
|
||||
}
|
||||
searchState.text = "Connecting...";
|
||||
|
||||
@ -287,15 +288,16 @@ public class DeviceView : MonoBehaviour
|
||||
|
||||
logo.sprite = sprite3;
|
||||
|
||||
title.text = connectedDevice.Name;
|
||||
//title.text = connectedDevice.Name;
|
||||
if (connectedDevice.Network == NetworkType.BLE)
|
||||
{
|
||||
noDevice.enabled = false;
|
||||
//noDevice.enabled = false;
|
||||
noDevice.text = connectedDevice.Name;
|
||||
}
|
||||
else
|
||||
{
|
||||
noDevice.enabled = true;
|
||||
noDevice.text = connectedDevice.DeviceNumber.ToString();
|
||||
//noDevice.enabled = true;
|
||||
noDevice.text = connectedDevice.Name +" "+ connectedDevice.DeviceNumber.ToString();
|
||||
}
|
||||
noDevice.color = Color.white;
|
||||
|
||||
|
||||
@ -264,7 +264,7 @@ public class EditUserController : PFUIPanel
|
||||
|
||||
void SetDayDropdown()
|
||||
{
|
||||
Debug.Log(mDayDropdown.SelectedItem);
|
||||
//Debug.Log(mDayDropdown.SelectedItem);
|
||||
|
||||
|
||||
mDayDropdown.ClearOptions();
|
||||
|
||||
@ -18,7 +18,7 @@ PlayerSettings:
|
||||
cursorHotspot: {x: 0, y: 0}
|
||||
m_SplashScreenBackgroundColor: {r: 0.20784314, g: 0.20784314, b: 0.2627451, a: 1}
|
||||
m_ShowUnitySplashScreen: 1
|
||||
m_ShowUnitySplashLogo: 0
|
||||
m_ShowUnitySplashLogo: 1
|
||||
m_SplashScreenOverlayOpacity: 1
|
||||
m_SplashScreenAnimation: 1
|
||||
m_SplashScreenLogoStyle: 1
|
||||
@ -43,6 +43,12 @@ PlayerSettings:
|
||||
- logo: {fileID: 21300000, guid: e5cb6c21d2f3d0746ad3437ddd022558, type: 3}
|
||||
duration: 2
|
||||
m_VirtualRealitySplashScreen: {fileID: 0}
|
||||
m_ShowUnitySplashAds: 0
|
||||
m_AdsAndroidGameId:
|
||||
m_AdsIosGameId:
|
||||
m_ShowSplashAdsSlogan: 0
|
||||
m_SloganImage: {fileID: 0}
|
||||
m_SloganHeight: 150
|
||||
m_HolographicTrackingLossScreen: {fileID: 0}
|
||||
defaultScreenWidth: 1024
|
||||
defaultScreenHeight: 768
|
||||
@ -113,17 +119,21 @@ PlayerSettings:
|
||||
switchNVNShaderPoolsGranularity: 33554432
|
||||
switchNVNDefaultPoolsGranularity: 16777216
|
||||
switchNVNOtherPoolsGranularity: 16777216
|
||||
switchNVNMaxPublicTextureIDCount: 0
|
||||
switchNVNMaxPublicSamplerIDCount: 0
|
||||
stadiaPresentMode: 0
|
||||
stadiaTargetFramerate: 0
|
||||
vulkanNumSwapchainBuffers: 3
|
||||
vulkanEnableSetSRGBWrite: 0
|
||||
vulkanEnableLateAcquireNextImage: 0
|
||||
useSecurityBuild: 0
|
||||
m_SupportedAspectRatios:
|
||||
4:3: 1
|
||||
5:4: 1
|
||||
16:10: 1
|
||||
16:9: 1
|
||||
Others: 1
|
||||
bundleVersion: 1.0.0
|
||||
bundleVersion: 1.1.0
|
||||
preloadedAssets: []
|
||||
metroInputSource: 0
|
||||
wsaTransparentSwapchain: 0
|
||||
@ -230,6 +240,7 @@ PlayerSettings:
|
||||
metalEditorSupport: 1
|
||||
metalAPIValidation: 1
|
||||
iOSRenderExtraFrameOnPause: 0
|
||||
iosCopyPluginsCodeInsteadOfSymlink: 0
|
||||
appleDeveloperTeamID:
|
||||
iOSManualSigningProvisioningProfileID:
|
||||
tvOSManualSigningProvisioningProfileID:
|
||||
@ -328,6 +339,7 @@ PlayerSettings:
|
||||
- m_BuildTarget: WebGL
|
||||
m_StaticBatching: 0
|
||||
m_DynamicBatching: 0
|
||||
m_BuildTargetEncrypting: []
|
||||
m_BuildTargetGraphicsJobs:
|
||||
- m_BuildTarget: MacStandaloneSupport
|
||||
m_GraphicsJobs: 0
|
||||
@ -556,6 +568,7 @@ PlayerSettings:
|
||||
ps4ShareFilePath:
|
||||
ps4ShareOverlayImagePath:
|
||||
ps4PrivacyGuardImagePath:
|
||||
ps4ExtraSceSysFile:
|
||||
ps4NPtitleDatPath:
|
||||
ps4RemotePlayKeyAssignment: -1
|
||||
ps4RemotePlayKeyMappingDir:
|
||||
@ -598,6 +611,8 @@ PlayerSettings:
|
||||
ps4disableAutoHideSplash: 0
|
||||
ps4videoRecordingFeaturesUsed: 0
|
||||
ps4contentSearchFeaturesUsed: 0
|
||||
ps4CompatibilityPS5: 0
|
||||
ps4GPU800MHz: 1
|
||||
ps4attribEyeToEyeDistanceSettingVR: 0
|
||||
ps4IncludedModules: []
|
||||
ps4attribVROutputEnabled: 0
|
||||
@ -633,6 +648,7 @@ PlayerSettings:
|
||||
additionalIl2CppArgs:
|
||||
scriptingRuntimeVersion: 1
|
||||
gcIncremental: 0
|
||||
assemblyVersionValidation: 1
|
||||
gcWBarrierValidation: 0
|
||||
apiCompatibilityLevelPerPlatform:
|
||||
Standalone: 3
|
||||
@ -683,6 +699,7 @@ PlayerSettings:
|
||||
XboxOneCapability: []
|
||||
XboxOneGameRating: {}
|
||||
XboxOneIsContentPackage: 0
|
||||
XboxOneEnhancedXboxCompatibilityMode: 0
|
||||
XboxOneEnableGPUVariability: 1
|
||||
XboxOneSockets: {}
|
||||
XboxOneSplashScreen: {fileID: 0}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user