private static ulong FindAndSelectHub(IPoweredUpBluetoothAdapter poweredUpBluetoothAdapter) { ulong result = 0; var devices = new ConcurrentBag <(int key, ulong bluetoothAddresss, PoweredUpHubManufacturerData deviceType)>(); var cts = new CancellationTokenSource(); int idx = 1; Console.WriteLine("Scan Started. Please select the Hub (using a number keys or 'q' to terminate):"); poweredUpBluetoothAdapter.Discover(info => { if (devices.FirstOrDefault(kv => kv.bluetoothAddresss == info.BluetoothAddress) == default) { var deviceType = (PoweredUpHubManufacturerData)info.ManufacturerData[1]; devices.Add((idx, info.BluetoothAddress, deviceType)); Console.WriteLine($"{idx}: {(PoweredUpHubManufacturerData)info.ManufacturerData[1]} (with address {info.BluetoothAddress})"); idx++; } }, cts.Token); var input = Console.ReadLine(); cts.Cancel(); if (int.TryParse(input, out var key)) { var selected = devices.FirstOrDefault(kv => kv.key == key); result = selected.bluetoothAddresss; // default is 0 if (result != default) { Console.WriteLine($"Selected {selected.deviceType} with key {selected.key}"); } } return(result); }
public BluetoothKernel(IPoweredUpBluetoothAdapter bluetoothAdapter, ILogger <BluetoothKernel> logger = default) { _bluetoothAdapter = bluetoothAdapter ?? throw new ArgumentNullException(nameof(bluetoothAdapter)); _logger = logger; }
private static (IPoweredUpBluetoothDeviceInfo bluetoothDeviceInfo, SystemType systemType) FindAndSelectHub(IPoweredUpBluetoothAdapter poweredUpBluetoothAdapter) { IPoweredUpBluetoothDeviceInfo resultDeviceInfo = default; SystemType resultSystemType = default; var devices = new ConcurrentBag <(int key, IPoweredUpBluetoothDeviceInfo bluetoothDeviceInfo, PoweredUpHubManufacturerData deviceType)>(); var cts = new CancellationTokenSource(); int idx = 1; Console.WriteLine("Scan Started. Please select the Hub (using a number keys or 'q' to terminate):"); poweredUpBluetoothAdapter.Discover(info => { if (devices.FirstOrDefault(kv => kv.bluetoothDeviceInfo.Equals(info)) == default) { var deviceType = (PoweredUpHubManufacturerData)info.ManufacturerData[1]; devices.Add((idx, info, deviceType)); var text = (info is IPoweredUpBluetoothDeviceInfoWithMacAddress mac) ? mac.ToIdentificationString() : "not revealed"; Console.WriteLine($"{idx}: {(PoweredUpHubManufacturerData)info.ManufacturerData[1]} (with address {text})"); idx++; } return(Task.CompletedTask); }, cts.Token); var input = Console.ReadLine(); cts.Cancel(); if (int.TryParse(input, out var key)) { var selected = devices.FirstOrDefault(kv => kv.key == key); resultDeviceInfo = selected.bluetoothDeviceInfo; resultSystemType = (SystemType)selected.deviceType; if (resultDeviceInfo != default) { Console.WriteLine($"Selected {selected.deviceType} with key {selected.key}"); } } return(resultDeviceInfo, resultSystemType); }