From 5b23ca7ed3409135c6f5d9aa8712976bc1aae998 Mon Sep 17 00:00:00 2001 From: FantasyTeddy Date: Fri, 5 Jun 2026 14:51:34 +0200 Subject: [PATCH] Rename "Xamarin" to "Mobile" --- README.md | 2 +- ... IServiceCollectionExtensionsForMobile.cs} | 32 +-- ...ceInfo.cs => MobileBluetoothDeviceInfo.cs} | 7 +- ....cs => MobilePoweredUpBluetoothAdapter.cs} | 266 +++++++++--------- ...MobilePoweredUpBluetoothCharacteristic.cs} | 100 ++++--- ...e.cs => MobilePoweredUpBluetoothDevice.cs} | 98 +++---- ....cs => MobilePoweredUpBluetoothService.cs} | 88 +++--- 7 files changed, 295 insertions(+), 298 deletions(-) rename src/SharpBrick.PoweredUp.Mobile/{IServiceCollectionExtensionsForXamarin.cs => IServiceCollectionExtensionsForMobile.cs} (54%) rename src/SharpBrick.PoweredUp.Mobile/{XamarinBluetoothDeviceInfo.cs => MobileBluetoothDeviceInfo.cs} (84%) rename src/SharpBrick.PoweredUp.Mobile/{XamarinPoweredUpBluetoothAdapter.cs => MobilePoweredUpBluetoothAdapter.cs} (82%) rename src/SharpBrick.PoweredUp.Mobile/{XamarinPoweredUpBluetoothCharacteristic.cs => MobilePoweredUpBluetoothCharacteristic.cs} (81%) rename src/SharpBrick.PoweredUp.Mobile/{XamarinPoweredUpBluetoothDevice.cs => MobilePoweredUpBluetoothDevice.cs} (76%) rename src/SharpBrick.PoweredUp.Mobile/{XamarinPoweredUpBluetoothService.cs => MobilePoweredUpBluetoothService.cs} (73%) diff --git a/README.md b/README.md index 98fd9ba..04deef2 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ SharpBrick.PoweredUp is a .NET implementation of the Bluetooth Low Energy Protoc - **Virtual Port Creation**: Combine multiple devices of the same type into a virtual combined port. This allows synchronous access to multiple devices using the same message (e.g. using two motors for driving). - **Deployment Model Verification**: The SDK includes a model builder and a verification method to ensure that the wired devies are correctly reflecting the expectations in the program. - **Tools**: The `poweredup` CLI includes a device list feature, enumerating the metadata properties of the LEGO Wireless Protocol. -- **Support for multiple Bluetooth Stacks**: Use either Microsoft WinRT, BlueGiga Bluetooth (Silicon's Lab BlueGiga-adapter, for example BLED112) or Xamarin using BLE.Plugin to talk to your Lego hubs. +- **Support for multiple Bluetooth Stacks**: Use either Microsoft WinRT, BlueGiga Bluetooth (Silicon's Lab BlueGiga-adapter, for example BLED112) or MAUI using [Plugin.BLE](https://github.com/dotnet-bluetooth-le/dotnet-bluetooth-le) to talk to your Lego hubs. # Examples diff --git a/src/SharpBrick.PoweredUp.Mobile/IServiceCollectionExtensionsForXamarin.cs b/src/SharpBrick.PoweredUp.Mobile/IServiceCollectionExtensionsForMobile.cs similarity index 54% rename from src/SharpBrick.PoweredUp.Mobile/IServiceCollectionExtensionsForXamarin.cs rename to src/SharpBrick.PoweredUp.Mobile/IServiceCollectionExtensionsForMobile.cs index 7ba75a6..84dc926 100644 --- a/src/SharpBrick.PoweredUp.Mobile/IServiceCollectionExtensionsForXamarin.cs +++ b/src/SharpBrick.PoweredUp.Mobile/IServiceCollectionExtensionsForMobile.cs @@ -1,16 +1,16 @@ -using Microsoft.Extensions.DependencyInjection; -using Plugin.BLE; -using Plugin.BLE.Abstractions.Contracts; -using SharpBrick.PoweredUp.Bluetooth; - -namespace SharpBrick.PoweredUp.Mobile -{ - public static class IServiceCollectionExtensionsForXamarin - { - public static IServiceCollection AddXamarinBluetooth(this IServiceCollection self, INativeDeviceInfoProvider deviceInfoProvider) - => self - .AddSingleton(CrossBluetoothLE.Current) - .AddSingleton(deviceInfoProvider) - .AddSingleton(); - } -} +using Microsoft.Extensions.DependencyInjection; +using Plugin.BLE; +using Plugin.BLE.Abstractions.Contracts; +using SharpBrick.PoweredUp.Bluetooth; + +namespace SharpBrick.PoweredUp.Mobile +{ + public static class IServiceCollectionExtensionsForMobile + { + public static IServiceCollection AddMobileBluetooth(this IServiceCollection self, INativeDeviceInfoProvider deviceInfoProvider) + => self + .AddSingleton(CrossBluetoothLE.Current) + .AddSingleton(deviceInfoProvider) + .AddSingleton(); + } +} diff --git a/src/SharpBrick.PoweredUp.Mobile/XamarinBluetoothDeviceInfo.cs b/src/SharpBrick.PoweredUp.Mobile/MobileBluetoothDeviceInfo.cs similarity index 84% rename from src/SharpBrick.PoweredUp.Mobile/XamarinBluetoothDeviceInfo.cs rename to src/SharpBrick.PoweredUp.Mobile/MobileBluetoothDeviceInfo.cs index 2908540..be73e6d 100644 --- a/src/SharpBrick.PoweredUp.Mobile/XamarinBluetoothDeviceInfo.cs +++ b/src/SharpBrick.PoweredUp.Mobile/MobileBluetoothDeviceInfo.cs @@ -1,11 +1,10 @@ using System; -using System.Runtime.InteropServices; using SharpBrick.PoweredUp.Bluetooth; using SharpBrick.PoweredUp.Utils; namespace SharpBrick.PoweredUp.Mobile { - public class XamarinBluetoothDeviceInfo : IPoweredUpBluetoothDeviceInfo, IPoweredUpBluetoothDeviceInfoWithMacAddress + public class MobileBluetoothDeviceInfo : IPoweredUpBluetoothDeviceInfo, IPoweredUpBluetoothDeviceInfoWithMacAddress { private string _deviceIdentifier; @@ -29,9 +28,9 @@ public string DeviceIdentifier public bool Equals(IPoweredUpBluetoothDeviceInfo other) { - if (other != null && other is XamarinBluetoothDeviceInfo otherXamarin) + if (other != null && other is MobileBluetoothDeviceInfo otherDeviceInfo) { - return this.DeviceIdentifier == otherXamarin.DeviceIdentifier; + return this.DeviceIdentifier == otherDeviceInfo.DeviceIdentifier; } else { diff --git a/src/SharpBrick.PoweredUp.Mobile/XamarinPoweredUpBluetoothAdapter.cs b/src/SharpBrick.PoweredUp.Mobile/MobilePoweredUpBluetoothAdapter.cs similarity index 82% rename from src/SharpBrick.PoweredUp.Mobile/XamarinPoweredUpBluetoothAdapter.cs rename to src/SharpBrick.PoweredUp.Mobile/MobilePoweredUpBluetoothAdapter.cs index 9f15b0e..e6c9870 100644 --- a/src/SharpBrick.PoweredUp.Mobile/XamarinPoweredUpBluetoothAdapter.cs +++ b/src/SharpBrick.PoweredUp.Mobile/MobilePoweredUpBluetoothAdapter.cs @@ -1,133 +1,133 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Plugin.BLE.Abstractions; -using Plugin.BLE.Abstractions.Contracts; -using Plugin.BLE.Abstractions.EventArgs; -using SharpBrick.PoweredUp.Bluetooth; - -namespace SharpBrick.PoweredUp.Mobile -{ - public class XamarinPoweredUpBluetoothAdapter : IPoweredUpBluetoothAdapter - { - private readonly IAdapter _bluetoothAdapter; - private readonly INativeDeviceInfoProvider _deviceInfoProvider; - private readonly Dictionary _discoveredDevices = new Dictionary(); - - public XamarinPoweredUpBluetoothAdapter(IBluetoothLE bluetooth, INativeDeviceInfoProvider deviceInfoProvider) - { - _bluetoothAdapter = bluetooth.Adapter; - _deviceInfoProvider = deviceInfoProvider; - } - - public void Discover(Func discoveryHandler, CancellationToken cancellationToken = default) - { - _bluetoothAdapter.ScanMode = ScanMode.Balanced; - - _bluetoothAdapter.DeviceDiscovered += ReceivedHandler; - - cancellationToken.Register(async () => - { - await _bluetoothAdapter.StopScanningForDevicesAsync().ConfigureAwait(false); - _bluetoothAdapter.DeviceDiscovered -= ReceivedHandler; - }); - - _bluetoothAdapter.StartScanningForDevicesAsync(new Guid[] { new Guid(PoweredUpBluetoothConstants.LegoHubService) }, DeviceFilter, false).ConfigureAwait(false); - - async void ReceivedHandler(object sender, DeviceEventArgs args) - { - var info = new XamarinBluetoothDeviceInfo(); - - var advertisementRecord = args.Device.AdvertisementRecords.FirstOrDefault(x => x.Type == AdvertisementRecordType.ManufacturerSpecificData); - - if (advertisementRecord?.Data?.Length > 0) - { - var data = advertisementRecord.Data.ToList(); - data.RemoveRange(0, 2); - info.ManufacturerData = data.ToArray(); - - var nativeDeviceInfo = _deviceInfoProvider.GetNativeDeviceInfo(args.Device.NativeDevice); - - info.Name = args.Device.Name; - info.DeviceIdentifier = nativeDeviceInfo.DeviceIdentifier; - - AddInternalDevice(args.Device, info); - await discoveryHandler(info).ConfigureAwait(false); - } - } - } - - private void AddInternalDevice(IDevice device, XamarinBluetoothDeviceInfo info) - { - if (!_discoveredDevices.ContainsKey(info.DeviceIdentifier)) - { - _discoveredDevices.Add(info.DeviceIdentifier, device); - } - else - { - _discoveredDevices[info.DeviceIdentifier] = device; - } - } - - private bool DeviceFilter(IDevice arg) - { - if (arg == null) - { - return false; - } - - var manufacturerData = arg.AdvertisementRecords.FirstOrDefault(x => x.Type == AdvertisementRecordType.ManufacturerSpecificData); - - if (manufacturerData?.Data == null || manufacturerData.Data.Length < 8) - { - return false; - } - - // https://lego.github.io/lego-ble-wireless-protocol-docs/index.html#advertising - // Length and Data Type Name seems to be already trimmed away - // Manufacturer ID should be 0x0397 but seems in little endian encoding. I found no notice for this in the documentation except in version number encoding - - return manufacturerData.Data[0] == 0x97 && manufacturerData.Data[1] == 0x03; - } - - public async Task GetDeviceAsync(IPoweredUpBluetoothDeviceInfo bluetoothDeviceInfo) - { - var deviceId = (bluetoothDeviceInfo is XamarinBluetoothDeviceInfo local) ? local.DeviceIdentifier : throw new ArgumentException("DeviceInfo not created by adapter", nameof(bluetoothDeviceInfo)); - - if (!_discoveredDevices.ContainsKey(deviceId)) - { - CancellationTokenSource cts = new CancellationTokenSource(10000); - - // trigger scan for 10 seconds - Discover((deviceInfo) => - { - return Task.Run(() => - { - cts.Cancel(false); - }); - - }, cts.Token); - - // 60 seconds will be ignored here, because the cancelation will happen after 10 seconds - await Task.Delay(60000, cts.Token).ContinueWith(task => { }); - - if (!_discoveredDevices.ContainsKey(deviceId)) - { - throw new NotSupportedException("Given bt address does not belong to a discovered device"); - } - } - - return new XamarinPoweredUpBluetoothDevice(_discoveredDevices[deviceId], _bluetoothAdapter); - } - - public Task CreateDeviceInfoByKnownStateAsync(object state) - => Task.FromResult(state switch - { - ulong address => new XamarinBluetoothDeviceInfo() { DeviceIdentifier = address.ToString() }, - string id => new XamarinBluetoothDeviceInfo() { DeviceIdentifier = id }, - _ => null, - }); - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Plugin.BLE.Abstractions; +using Plugin.BLE.Abstractions.Contracts; +using Plugin.BLE.Abstractions.EventArgs; +using SharpBrick.PoweredUp.Bluetooth; + +namespace SharpBrick.PoweredUp.Mobile +{ + public class MobilePoweredUpBluetoothAdapter : IPoweredUpBluetoothAdapter + { + private readonly IAdapter _bluetoothAdapter; + private readonly INativeDeviceInfoProvider _deviceInfoProvider; + private readonly Dictionary _discoveredDevices = new Dictionary(); + + public MobilePoweredUpBluetoothAdapter(IBluetoothLE bluetooth, INativeDeviceInfoProvider deviceInfoProvider) + { + _bluetoothAdapter = bluetooth.Adapter; + _deviceInfoProvider = deviceInfoProvider; + } + + public void Discover(Func discoveryHandler, CancellationToken cancellationToken = default) + { + _bluetoothAdapter.ScanMode = ScanMode.Balanced; + + _bluetoothAdapter.DeviceDiscovered += ReceivedHandler; + + cancellationToken.Register(async () => + { + await _bluetoothAdapter.StopScanningForDevicesAsync().ConfigureAwait(false); + _bluetoothAdapter.DeviceDiscovered -= ReceivedHandler; + }); + + _bluetoothAdapter.StartScanningForDevicesAsync(new Guid[] { new Guid(PoweredUpBluetoothConstants.LegoHubService) }, DeviceFilter, false).ConfigureAwait(false); + + async void ReceivedHandler(object sender, DeviceEventArgs args) + { + var info = new MobileBluetoothDeviceInfo(); + + var advertisementRecord = args.Device.AdvertisementRecords.FirstOrDefault(x => x.Type == AdvertisementRecordType.ManufacturerSpecificData); + + if (advertisementRecord?.Data?.Length > 0) + { + var data = advertisementRecord.Data.ToList(); + data.RemoveRange(0, 2); + info.ManufacturerData = data.ToArray(); + + var nativeDeviceInfo = _deviceInfoProvider.GetNativeDeviceInfo(args.Device.NativeDevice); + + info.Name = args.Device.Name; + info.DeviceIdentifier = nativeDeviceInfo.DeviceIdentifier; + + AddInternalDevice(args.Device, info); + await discoveryHandler(info).ConfigureAwait(false); + } + } + } + + private void AddInternalDevice(IDevice device, MobileBluetoothDeviceInfo info) + { + if (!_discoveredDevices.ContainsKey(info.DeviceIdentifier)) + { + _discoveredDevices.Add(info.DeviceIdentifier, device); + } + else + { + _discoveredDevices[info.DeviceIdentifier] = device; + } + } + + private bool DeviceFilter(IDevice arg) + { + if (arg == null) + { + return false; + } + + var manufacturerData = arg.AdvertisementRecords.FirstOrDefault(x => x.Type == AdvertisementRecordType.ManufacturerSpecificData); + + if (manufacturerData?.Data == null || manufacturerData.Data.Length < 8) + { + return false; + } + + // https://lego.github.io/lego-ble-wireless-protocol-docs/index.html#advertising + // Length and Data Type Name seems to be already trimmed away + // Manufacturer ID should be 0x0397 but seems in little endian encoding. I found no notice for this in the documentation except in version number encoding + + return manufacturerData.Data[0] == 0x97 && manufacturerData.Data[1] == 0x03; + } + + public async Task GetDeviceAsync(IPoweredUpBluetoothDeviceInfo bluetoothDeviceInfo) + { + var deviceId = (bluetoothDeviceInfo is MobileBluetoothDeviceInfo local) ? local.DeviceIdentifier : throw new ArgumentException("DeviceInfo not created by adapter", nameof(bluetoothDeviceInfo)); + + if (!_discoveredDevices.ContainsKey(deviceId)) + { + CancellationTokenSource cts = new CancellationTokenSource(10000); + + // trigger scan for 10 seconds + Discover((deviceInfo) => + { + return Task.Run(() => + { + cts.Cancel(false); + }); + + }, cts.Token); + + // 60 seconds will be ignored here, because the cancelation will happen after 10 seconds + await Task.Delay(60000, cts.Token).ContinueWith(task => { }); + + if (!_discoveredDevices.ContainsKey(deviceId)) + { + throw new NotSupportedException("Given bt address does not belong to a discovered device"); + } + } + + return new MobilePoweredUpBluetoothDevice(_discoveredDevices[deviceId], _bluetoothAdapter); + } + + public Task CreateDeviceInfoByKnownStateAsync(object state) + => Task.FromResult(state switch + { + ulong address => new MobileBluetoothDeviceInfo() { DeviceIdentifier = address.ToString() }, + string id => new MobileBluetoothDeviceInfo() { DeviceIdentifier = id }, + _ => null, + }); + } +} diff --git a/src/SharpBrick.PoweredUp.Mobile/XamarinPoweredUpBluetoothCharacteristic.cs b/src/SharpBrick.PoweredUp.Mobile/MobilePoweredUpBluetoothCharacteristic.cs similarity index 81% rename from src/SharpBrick.PoweredUp.Mobile/XamarinPoweredUpBluetoothCharacteristic.cs rename to src/SharpBrick.PoweredUp.Mobile/MobilePoweredUpBluetoothCharacteristic.cs index 3eb806c..0b26950 100644 --- a/src/SharpBrick.PoweredUp.Mobile/XamarinPoweredUpBluetoothCharacteristic.cs +++ b/src/SharpBrick.PoweredUp.Mobile/MobilePoweredUpBluetoothCharacteristic.cs @@ -1,51 +1,49 @@ -using System; -using System.Threading; -using System.Threading.Tasks; -using Plugin.BLE.Abstractions; -using Plugin.BLE.Abstractions.Contracts; -using Plugin.BLE.Abstractions.EventArgs; -using SharpBrick.PoweredUp.Bluetooth; - -namespace SharpBrick.PoweredUp.Mobile -{ - public class XamarinPoweredUpBluetoothCharacteristic : IPoweredUpBluetoothCharacteristic - { - private readonly ICharacteristic _characteristic; - - public Guid Uuid => _characteristic.Id; - - public XamarinPoweredUpBluetoothCharacteristic(ICharacteristic characteristic) - { - _characteristic = characteristic; - } - - public async Task NotifyValueChangeAsync(Func notificationHandler) - { - if (notificationHandler is null) - { - throw new ArgumentNullException(nameof(notificationHandler)); - } - - _characteristic.ValueUpdated += ValueUpdatedHandler; - - void ValueUpdatedHandler(object sender, CharacteristicUpdatedEventArgs e) - { - notificationHandler(e.Characteristic.Value); - } - - await _characteristic.StartUpdatesAsync(); - - return true; - } - - public async Task WriteValueAsync(byte[] data) - { - if (data is null) - { - throw new ArgumentNullException(nameof(data)); - } - - return await _characteristic.WriteAsync(data) == 0; - } - } -} +using System; +using System.Threading.Tasks; +using Plugin.BLE.Abstractions.Contracts; +using Plugin.BLE.Abstractions.EventArgs; +using SharpBrick.PoweredUp.Bluetooth; + +namespace SharpBrick.PoweredUp.Mobile +{ + public class MobilePoweredUpBluetoothCharacteristic : IPoweredUpBluetoothCharacteristic + { + private readonly ICharacteristic _characteristic; + + public Guid Uuid => _characteristic.Id; + + public MobilePoweredUpBluetoothCharacteristic(ICharacteristic characteristic) + { + _characteristic = characteristic; + } + + public async Task NotifyValueChangeAsync(Func notificationHandler) + { + if (notificationHandler is null) + { + throw new ArgumentNullException(nameof(notificationHandler)); + } + + _characteristic.ValueUpdated += ValueUpdatedHandler; + + void ValueUpdatedHandler(object sender, CharacteristicUpdatedEventArgs e) + { + notificationHandler(e.Characteristic.Value); + } + + await _characteristic.StartUpdatesAsync(); + + return true; + } + + public async Task WriteValueAsync(byte[] data) + { + if (data is null) + { + throw new ArgumentNullException(nameof(data)); + } + + return await _characteristic.WriteAsync(data) == 0; + } + } +} diff --git a/src/SharpBrick.PoweredUp.Mobile/XamarinPoweredUpBluetoothDevice.cs b/src/SharpBrick.PoweredUp.Mobile/MobilePoweredUpBluetoothDevice.cs similarity index 76% rename from src/SharpBrick.PoweredUp.Mobile/XamarinPoweredUpBluetoothDevice.cs rename to src/SharpBrick.PoweredUp.Mobile/MobilePoweredUpBluetoothDevice.cs index e479dfe..009b716 100644 --- a/src/SharpBrick.PoweredUp.Mobile/XamarinPoweredUpBluetoothDevice.cs +++ b/src/SharpBrick.PoweredUp.Mobile/MobilePoweredUpBluetoothDevice.cs @@ -1,49 +1,49 @@ -using System; -using System.Linq; -using System.Threading.Tasks; -using Plugin.BLE.Abstractions; -using Plugin.BLE.Abstractions.Contracts; -using SharpBrick.PoweredUp.Bluetooth; - -namespace SharpBrick.PoweredUp.Mobile -{ - public class XamarinPoweredUpBluetoothDevice : IPoweredUpBluetoothDevice - { - private IDevice _device; - private IAdapter _adapter; - - public string Name => this._device.Name; - - public XamarinPoweredUpBluetoothDevice(IDevice device, IAdapter bluetoothAdapter) - { - this._device = device; - this._adapter = bluetoothAdapter; - } - - #region IDisposible - - ~XamarinPoweredUpBluetoothDevice() => Dispose(false); - - public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } - - protected virtual void Dispose(bool disposing) - { - _device?.Dispose(); - _device = null; - _adapter = null; - } - - #endregion - - public async Task GetServiceAsync(Guid serviceId) - { - await _adapter.ConnectToDeviceAsync(_device, new ConnectParameters(true, true)).ConfigureAwait(false); - - if (!_adapter.ConnectedDevices.Contains(_device)) return null; - - var service = await _device.GetServiceAsync(serviceId).ConfigureAwait(false); - - return new XamarinPoweredUpBluetoothService(service); - } - } -} +using System; +using System.Linq; +using System.Threading.Tasks; +using Plugin.BLE.Abstractions; +using Plugin.BLE.Abstractions.Contracts; +using SharpBrick.PoweredUp.Bluetooth; + +namespace SharpBrick.PoweredUp.Mobile +{ + public class MobilePoweredUpBluetoothDevice : IPoweredUpBluetoothDevice + { + private IDevice _device; + private IAdapter _adapter; + + public string Name => this._device.Name; + + public MobilePoweredUpBluetoothDevice(IDevice device, IAdapter bluetoothAdapter) + { + this._device = device; + this._adapter = bluetoothAdapter; + } + + #region IDisposible + + ~MobilePoweredUpBluetoothDevice() => Dispose(false); + + public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } + + protected virtual void Dispose(bool disposing) + { + _device?.Dispose(); + _device = null; + _adapter = null; + } + + #endregion + + public async Task GetServiceAsync(Guid serviceId) + { + await _adapter.ConnectToDeviceAsync(_device, new ConnectParameters(true, true)).ConfigureAwait(false); + + if (!_adapter.ConnectedDevices.Contains(_device)) return null; + + var service = await _device.GetServiceAsync(serviceId).ConfigureAwait(false); + + return new MobilePoweredUpBluetoothService(service); + } + } +} diff --git a/src/SharpBrick.PoweredUp.Mobile/XamarinPoweredUpBluetoothService.cs b/src/SharpBrick.PoweredUp.Mobile/MobilePoweredUpBluetoothService.cs similarity index 73% rename from src/SharpBrick.PoweredUp.Mobile/XamarinPoweredUpBluetoothService.cs rename to src/SharpBrick.PoweredUp.Mobile/MobilePoweredUpBluetoothService.cs index 3d3c409..c916228 100644 --- a/src/SharpBrick.PoweredUp.Mobile/XamarinPoweredUpBluetoothService.cs +++ b/src/SharpBrick.PoweredUp.Mobile/MobilePoweredUpBluetoothService.cs @@ -1,44 +1,44 @@ -using System; -using System.Threading.Tasks; -using Plugin.BLE.Abstractions.Contracts; -using SharpBrick.PoweredUp.Bluetooth; - -namespace SharpBrick.PoweredUp.Mobile -{ - public class XamarinPoweredUpBluetoothService : IPoweredUpBluetoothService - { - private IService _service; - - public Guid Uuid => _service.Id; - - public XamarinPoweredUpBluetoothService(IService service) - { - _service = service ?? throw new ArgumentNullException(nameof(service)); - } - - #region IDisposable - - ~XamarinPoweredUpBluetoothService() => Dispose(false); - - public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } - - protected virtual void Dispose(bool disposing) - { - _service.Dispose(); - _service = null; - } - - #endregion - - public async Task GetCharacteristicAsync(Guid guid) - { - var characteristic = await _service.GetCharacteristicAsync(guid); - - if (characteristic == null) return null; - - // await characteristic.StartUpdatesAsync(); - return new XamarinPoweredUpBluetoothCharacteristic(characteristic); - - } - } -} +using System; +using System.Threading.Tasks; +using Plugin.BLE.Abstractions.Contracts; +using SharpBrick.PoweredUp.Bluetooth; + +namespace SharpBrick.PoweredUp.Mobile +{ + public class MobilePoweredUpBluetoothService : IPoweredUpBluetoothService + { + private IService _service; + + public Guid Uuid => _service.Id; + + public MobilePoweredUpBluetoothService(IService service) + { + _service = service ?? throw new ArgumentNullException(nameof(service)); + } + + #region IDisposable + + ~MobilePoweredUpBluetoothService() => Dispose(false); + + public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } + + protected virtual void Dispose(bool disposing) + { + _service.Dispose(); + _service = null; + } + + #endregion + + public async Task GetCharacteristicAsync(Guid guid) + { + var characteristic = await _service.GetCharacteristicAsync(guid); + + if (characteristic == null) return null; + + // await characteristic.StartUpdatesAsync(); + return new MobilePoweredUpBluetoothCharacteristic(characteristic); + + } + } +}