iOS_BluetoothDevice.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System;
  2. using System.Linq;
  3. using Plugin.BLE.Abstractions;
  4. using Plugin.BLE.Abstractions.Contracts;
  5. namespace InABox.Avalonia.Platform.iOS;
  6. public class iOS_BluetoothDevice(IDevice native) : IBluetoothDevice
  7. {
  8. public void Dispose()
  9. {
  10. Native.Dispose();
  11. }
  12. public IDevice Native { get; } = native;
  13. public string ID => Native.Id.ToString();
  14. public string Name => Native.Name;
  15. private Guid GuidFromDisplayOrderBytes(byte[] displayBytes)
  16. {
  17. if (displayBytes == null || displayBytes.Length != 16)
  18. throw new ArgumentException("Byte array must be exactly 16 bytes.", nameof(displayBytes));
  19. return new Guid(new byte[]
  20. {
  21. // Data1 (4 bytes, little-endian)
  22. displayBytes[3], displayBytes[2], displayBytes[1], displayBytes[0],
  23. // Data2 (2 bytes, little-endian)
  24. displayBytes[5], displayBytes[4],
  25. // Data3 (2 bytes, little-endian)
  26. displayBytes[7], displayBytes[6],
  27. // Data4 (8 bytes, as-is)
  28. displayBytes[8], displayBytes[9], displayBytes[10], displayBytes[11],
  29. displayBytes[12], displayBytes[13], displayBytes[14], displayBytes[15]
  30. });
  31. }
  32. public Guid[] AvailableServices => Native.AdvertisementRecords
  33. .Where(x => x.Type == AdvertisementRecordType.UuidsComplete128Bit)
  34. .Select(x => GuidFromDisplayOrderBytes(x.Data))
  35. .ToArray();
  36. public DateTime LastSeen { get; set; }
  37. public byte[]? ManufacturerData { get; set; }
  38. }