using Assets.Scripts.Ble; using Assets.Scripts.Devices.Ant; using Assets.Scripts.Devices.Ble; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; namespace Assets.Scripts.Devices { public sealed class MainDeviceAdapter : IDisposable { private List adapters = new List(); public MainDeviceAdapter() { #if UNITY_IOS || UNITY_ANDROID this.CreateBleAdapter(); #else this.CreateBleAdapter(); this.CreateAntAdapter(); #endif } private void CreateAntAdapter() { adapters.Add(new AntDeviceAdapter()); } private void CreateBleAdapter() { #if UNITY_IOS || UNITY_ANDROID adapters.Add(new BleDeviceAdapter(BleMobileInterface.GetInterface())); #else adapters.Add(new BleDeviceAdapter(BleWinHwInterface.GetInterface())); #endif } public void StartScan() { adapters.ForEach(item => { item.StartScan(); }); } public void StopScan() { adapters.ForEach(item => { item.StopScan(); }); } public DeviceAdapterState GetState(ConnectionInterface connectionInterface) { var adapter = adapters.FirstOrDefault(a => a.Interface == connectionInterface); if(adapter != null) { //Debug.Log("bbbbbb " + (adapter.GetState().ToString())); return adapter.GetState(); } return DeviceAdapterState.Unavailable; } public IEnumerable GetDevices() { var result = new List(); foreach (var item in adapters) { result.AddRange(item.GetDevices()); } return result; } public void Dispose() { //throw new NotImplementedException(); foreach (var item in adapters) { item.Dispose(); } } /// /// 清除未连接的设备 /// public void ClearDevice(string address="") { Debug.Log($"clear device {address}"); foreach (var item in adapters) { if(item is BleDeviceAdapter) { (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); } public BleDeviceAdapter GetBleDeviceAdapter() { foreach (var item in adapters) { var bleadapter = (BleDeviceAdapter)item; if (bleadapter != null) { return bleadapter; } } return null; } } }