Beispiel #1
0
 /// <summary>
 /// Creates a new instance.
 /// </summary>
 /// <param name="logger">Optional logger for debug messages.</param>
 public HubWatcher(ILogger logger = null)
 {
     this.logger       = logger;
     pendingAddresses  = new List <BluetoothAddress>();
     watcher           = new AdvertisementWatcher(BLEConnection.ServiceUuid);
     watcher.Received += Watcher_Received;
 }
Beispiel #2
0
            Task <(Advertisement advertisement, BluetoothAddress address)> GetDeviceInfoAsync()
            {
                var source = new TaskCompletionSource <(Advertisement, BluetoothAddress)>();

                var watcher = new AdvertisementWatcher(bootloaderServiceUuid);

                watcher.Received += (s, e) => {
                    source.TrySetResult((e.Advertisement, e.Address));
                    watcher.Stop();
                };

                watcher.Stopped += (s, e) => {
                    if (e.Error != AdvertisementWatcherError.None)
                    {
                        source.TrySetException(new AdvertismentWatcherException(e.Error));
                    }
                    else
                    {
                        source.TrySetCanceled();
                    }
                };

                watcher.Start();

                return(source.Task);
            }
Beispiel #3
0
 /// <summary>
 /// Creates a new instance.
 /// </summary>
 /// <param name="hubType">The type of hub to match.</param>
 /// <param name="logger">Optional logger for debugging.</param>
 public HubWatcher(HubType hubType, ILogger logger = null)
 {
     if (!Enum.IsDefined(typeof(HubType), hubType))
     {
         throw new ArgumentOutOfRangeException(nameof(hubType));
     }
     manfuacturerData  = new byte[] { 0x00, 0x00, 0x00, 0x10, (byte)hubType, 0x02 };
     watcher           = new AdvertisementWatcher(BLEConnection.ServiceUuid);
     watcher.Received += Watcher_Received;
     this.logger       = logger;
     ads = new Dictionary <BluetoothAddress, AdvertisementReceivedEventArgs>();
 }
Beispiel #4
0
        static void Main(string[] args)
        {
            var reset = new AutoResetEvent(false);

            // var watcher = DeviceInfo.CreateWatcher();
            // watcher.Added += (s, d) => Console.WriteLine($"Added: {d.Name} @ {d.Address} ({d.Id})");
            // watcher.Updated += (s, d) => Console.WriteLine($"Updated: {d.Id}");
            // watcher.Removed += (s, d) => Console.WriteLine($"Removed: {d.Id}");
            // watcher.EnumerationCompleted += (s, e) => Console.WriteLine("Enumeration completed");
            // watcher.Stopped += (s, e) => reset.Set();

            // note: we can't receive BLE advertisements while regular bluetooth watcher is scanning
            // (scanning == started but EnumerationCompleted has not fired)
            var adWatcher = new AdvertisementWatcher();

            adWatcher.Received += (s, e) => Console.WriteLine($"Advertisement: {PrettyPrint(e)}");
            adWatcher.Stopped  += (s, e) => reset.Set();

            while (true)
            {
                Console.WriteLine("Press W to start device watcher, A to start BLE advertisement watcher or Q to quit");
                Action stop;
                var    key = Console.ReadKey(true);
                switch (key.Key)
                {
                // case ConsoleKey.W:
                //     Console.WriteLine("Starting device watcher");
                //     watcher.Start();
                //     stop = () => watcher.Stop();
                //     break;
                case ConsoleKey.A:
                    Console.WriteLine("Starting BLE advertisement watcher");
                    adWatcher.Start();
                    stop = () => adWatcher.Stop();
                    break;

                case ConsoleKey.Q:
                    Console.WriteLine("Bye");
                    return;

                default:
                    continue;
                }
                Console.WriteLine("Press key to stop.");
                Console.ReadKey(true);
                Console.WriteLine("Stopping...");
                stop();
                reset.WaitOne();
                Console.WriteLine("Stopped.");
            }
        }