| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | 
							- using BluetoothLENet;
 
- using InABox.Core;
 
- namespace InABox.Avalonia.Platform.Desktop;
 
- public class Desktop_Bluetooth : IBluetooth, IDisposable
 
- {
 
-     public Logger? Logger { get; set; }
 
-     private BLE _adapter;
 
-     
 
-     public Action<IBluetoothDevice>? DeviceFound { get; set; }
 
-     public CoreObservableCollection<IBluetoothDevice> Devices { get; } = new();
 
-     public event EventHandler? Changed;
 
-     
 
-     public Desktop_Bluetooth()
 
-     {
 
-         Devices.CollectionChanged += (_,_) => Changed?.Invoke(this, EventArgs.Empty);
 
-         ResetAdapter();
 
-     }
 
-     private void ResetAdapter()
 
-     {
 
-         _adapter = new BLE();
 
-         _adapter.Changed += (_,_) =>
 
-         {
 
-             try
 
-             {
 
-                 var found = _adapter.Devices.Select(x => (x.MacAddress,x.ManufacturerData)).ToArray();
 
-                 var cache = Devices.OfType<Desktop_BluetoothDevice>().Select(x => (x.ID,x.ManufacturerData)).ToArray();
 
-                 if (found.Except(cache).Any() || cache.Except(found).Any())
 
-                 {
 
-                     var devices = _adapter.Devices
 
-                         .ToArray()
 
-                         .Select(x => new Desktop_BluetoothDevice(x))
 
-                         .ToArray();
 
-                     Console.WriteLine($"BLE:Found {devices.Length} devices");
 
-                     Devices.ReplaceRange(devices);
 
-                     Console.WriteLine($"BLE:Triggering Changed()");
 
-                     Changed?.Invoke(this, EventArgs.Empty);
 
-                 }
 
-                 else
 
-                     Changed?.Invoke(this, EventArgs.Empty);
 
-             }
 
-             catch (Exception e)
 
-             {
 
-                 Logger?.Send(LogType.Error, "", $"{e.Message}\n{e.StackTrace}");
 
-             }
 
-             
 
-         };
 
-     }
 
-     public async Task<bool> IsAvailable()
 
-     {
 
-         return await Task.FromResult(true);   
 
-     }
 
-     
 
-     public async Task<bool> StartScanningAsync(Guid configServiceId)
 
-     {
 
-         ResetAdapter();
 
-         if (await IsAvailable())
 
-             return await _adapter.StartScanningAsync(configServiceId);
 
-         return false;
 
-     }
 
-     public async Task<bool> StopScanningAsync()
 
-     {
 
-         if (await IsAvailable())
 
-             return await _adapter.StopScanningAsync();
 
-         return false;
 
-     }
 
-     public async Task<IConnectedBluetoothDevice?> Connect(IBluetoothDevice device)
 
-     {
 
-         if (await IsAvailable())
 
-         {
 
-             if (device is Desktop_BluetoothDevice d)
 
-             {
 
-                 var result = await _adapter.Connect(d.Device);
 
-                 if (result == ConnectDeviceResult.Ok)
 
-                     return new Desktop_ConnectedBluetoothDevice(d.Device);
 
-             }
 
-         }
 
-         return null;
 
-         
 
-     }
 
-     public async Task<bool> Disconnect(IConnectedBluetoothDevice device)
 
-     {
 
-         if (await IsAvailable())
 
-         {
 
-             if (device is Desktop_BluetoothDevice { Device: not null } d)
 
-             {
 
-                 _adapter.Disconnect(d.Device);
 
-                 await Task.Delay(1000);
 
-             }
 
-         }
 
-         return true;
 
-     }
 
-     public void Dispose()
 
-     {
 
-         foreach (var device in Devices)
 
-             device.Dispose();
 
-         Devices.Clear();
 
-     }
 
- }
 
 
  |