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