Example #1
0
        /// <summary>
        /// Initializes the singleton application object.  This is the first line of authored code
        /// executed, and as such is the logical equivalent of main() or WinMain().
        /// </summary>
        public NearbyDevices()
        {
            this.InitializeComponent();

            // Create and initialize a new watcher instance.
            watcher = new BluetoothLEAdvertisementWatcher();

            var filter = new BluetoothLEAdvertisementFilter();

            filter.Advertisement.ServiceUuids.Add(new Guid("{a3e68a83-4c4d-4778-bd0a-829fb434a7a1}"));

            watcher.ScanningMode = BluetoothLEScanningMode.Active;

            watcher.AdvertisementFilter.Advertisement = filter.Advertisement;


            /*
             * // Configuring the signal strength filter for proximity scenarios
             * // Configure the signal strength filter to only propagate events when in-range
             * // Please adjust these values if you cannot receive any advertisement
             * // Set the in-range threshold to -70dBm. This means advertisements with RSSI >= -70dBm
             * // will start to be considered "in-range".
             * watcher.SignalStrengthFilter.InRangeThresholdInDBm = -70;
             *
             * // Set the out-of-range threshold to -75dBm (give some buffer). Used in conjunction with OutOfRangeTimeout
             * // to determine when an advertisement is no longer considered "in-range"
             * watcher.SignalStrengthFilter.OutOfRangeThresholdInDBm = -75;
             *
             * // Set the out-of-range timeout to be 2 seconds. Used in conjunction with OutOfRangeThresholdInDBm
             * // to determine when an advertisement is no longer considered "in-range"
             * watcher.SignalStrengthFilter.OutOfRangeTimeout = TimeSpan.FromMilliseconds(2000);
             *
             * // By default, the sampling interval is set to zero, which means there is no sampling and all
             * // the advertisement received is returned in the Received event        */
        }
 public void UpdateAdvertisementFilter(BluetoothLEAdvertisementFilter filter)
 {
     advertisementWatcher.AdvertisementFilter = filter;
     if (AdvertisementWatcherStarted)
     {
         advertisementWatcher.Stop();
         Advertisements.Clear();
         advertisementWatcher.Start();
     }
 }
Example #3
0
        public void ApplyFilter()
        {
            var filter = new BluetoothLEAdvertisementFilter();

            if (SelectedDataSectionFilter != null)
            {
                filter.BytePatterns.Add(SelectedDataSectionFilter.GetBytePattern());
            }
            Context.UpdateAdvertisementFilter(filter);
        }
            public void Start()
            {
                BluetoothLEAdvertisementFilter blaf = new BluetoothLEAdvertisementFilter();


                BLEAdvWatcher           = new BluetoothLEAdvertisementWatcher();
                BLEAdvWatcher.Received += Bleaw_Received;
                System.Threading.Interlocked.Exchange(ref barrier, 0);

                BLEAdvWatcher.Start();
            }
Example #5
0
        private static void Main(string[] args)
        {
            Console.WriteLine("Configuring BLE advertisement filter...");
            BluetoothLEAdvertisementFilter filter = new BluetoothLEAdvertisementFilter();

            filter.Advertisement.DataSections.Add(new BluetoothLEAdvertisementDataSection(3, CryptographicBuffer.DecodeFromHexString("6FFD")));
            Console.WriteLine("Starting BLE advertisement watcher...");
            BluetoothLEAdvertisementWatcher watcher = new BluetoothLEAdvertisementWatcher(filter);

            watcher.Received += OnReceivedBleAdvertisement;
            watcher.Start();
            while (true)
            {
                //
            }
        }
 public AdvertiseObserver()
 {
     advertise = new BluetoothLEAdvertisement();
     advertise.ServiceUuids.Add(Profiles.Services.Button);
     advertiseFilter = new BluetoothLEAdvertisementFilter()
     {
         Advertisement = advertise
     };
     advertiseWatcher = new BluetoothLEAdvertisementWatcher()
     {
         AdvertisementFilter = advertiseFilter
     };
     advertiseWatcher.SignalStrengthFilter.SamplingInterval = interval;
     advertiseWatcher.Received += OnAdvertisementReceived;
     advertiseSubject           = new Subject <BluetoothLEAdvertisementReceivedEventArgs>();
 }
Example #7
0
        private async Task DoRequestLEScan(BluetoothLEScan scan)
        {
            var filter = new BluetoothLEAdvertisementFilter();

            if (watcher == null)
            {
                watcher           = new BluetoothLEAdvertisementWatcher(filter);
                watcher.Received += Watcher_Received;
            }
            else
            {
                watcher.AdvertisementFilter = filter;
            }

            watcher.Start();
        }
Example #8
0
        private static void GetTemp(int limit, int timeout)
        {
            var switchBotMeterThUuid = new Guid("cba20d00-224d-11e6-9fb8-0002a5d5c51b");

            var filter = new BluetoothLEAdvertisementFilter();

            filter.Advertisement = new BluetoothLEAdvertisement();
            filter.Advertisement.ServiceUuids.Add(switchBotMeterThUuid);

            var watcher        = new BluetoothLEAdvertisementWatcher(filter);
            var countdownEvent = new CountdownEvent(limit > 0 ? limit : 1);

            watcher.Received += (sender, args) =>
            {
                if (args.Advertisement.ServiceUuids.Contains(switchBotMeterThUuid))
                {
                    foreach (var ds in args.Advertisement.DataSections)
                    {
                        if (ds.DataType == 22 && ds.Data.Length == 8)
                        {
                            var    data     = ds.Data.ToArray(2, 6);
                            double temp     = ((data[3] & 0x0f) / 10.0 + (data[4] & 0x7f)) * ((data[4] & 0x80) != 0 ? 1 : -1);
                            int    humidity = data[5] & 0x7f;
                            int    battery  = data[2] & 0x7f;
                            Console.WriteLine($"{args.BluetoothAddress:X} {temp:f1} {humidity:d} {battery:d}");
                            if (limit > 0)
                            {
                                countdownEvent.Signal();
                            }
                        }
                    }
                }
            };
            watcher.ScanningMode = BluetoothLEScanningMode.Active;
            watcher.Start();
            if (timeout > 0)
            {
                countdownEvent.Wait(timeout * 1000);
            }
            else
            {
                countdownEvent.Wait();
            }
            watcher.Stop();
        }
Example #9
0
        /// <summary>
        /// Start Scan
        /// </summary>
        public bool Start()
        {
            Logger.Log("Start");

            //this.advWatcher = new BluetoothLEAdvertisementWatcher();

            //Experiment with using a filter directly in the watcher to try emulate Windows more closely
            var filter = new BluetoothLEAdvertisementFilter();

            filter.Advertisement.ServiceUuids.Add(Common.Gatt_Service_FIDO_GUID);

            this.advWatcher = new BluetoothLEAdvertisementWatcher(filter);

            // インターバルがゼロのままだと、CPU負荷が高くなりますので、適切な間隔(SDK サンプルでは 1秒)に指定しないと、アプリの動作に支障をきたすことになります。
            // If the interval remains zero, the CPU load will be high, so if you do not specify an appropriate interval (1 second in the SDK sample),
            // it will interfere with the operation of the application.
            this.advWatcher.SignalStrengthFilter.SamplingInterval = TimeSpan.FromMilliseconds(SamplingIntervalMilliseconds);

            // rssi >= -60のときスキャンする
            //this.advWatcher.SignalStrengthFilter.InRangeThresholdInDBm = -60;

            // パッシブスキャン/アクティブスキャン
            // スキャン応答のアドバタイズを併せて受信する場合=BluetoothLEScanningMode.Active
            // ActiveにするとBluetoothLEAdvertisementType.ScanResponseが取れるようになる。(スキャンレスポンスとは追加情報のこと)
            // ※電力消費量が大きくなり、またバックグラウンド モードでは使用できなくなるらしい

            // Passive scan / active scan
            // When receiving the advertisement of the scan response together = BluetoothLEScanningMode.Active
            // When set to Active, BluetoothLEAdvertisementType.ScanResponse can be obtained. (Scan response is additional information)
            // * It seems that power consumption will increase and it will not be available in background mode.

            //this.advWatcher.ScanningMode = BluetoothLEScanningMode.Active;
            this.advWatcher.ScanningMode = BluetoothLEScanningMode.Passive;

            // アドバタイズパケットの受信イベント | Advertisement packet reception event
            //this.advWatcher.Received += this.watcherReceived;
            this.advWatcher.Received += filteredWatcherReceived;

            // スキャン開始 | Start scanning
            this.advWatcher.Start();

            IsStarted = true;

            return(true);
        }
Example #10
0
        protected async override void OnNavigatedTo(NavigationEventArgs e)
        {
            await InitializeCameraAsync();

            // Create a watcher to find a BLE Device with name "corten" or "Nordic_HRM"
            //TODO: Make a filter with the Manufacturer Data/Device ID, not a LocalName string
            BluetoothLEAdvertisement _bleAdv1 = new BluetoothLEAdvertisement();

            _bleAdv1.LocalName = "corten";
            BluetoothLEAdvertisementFilter _bleAdvFilter1 = new BluetoothLEAdvertisementFilter();

            _bleAdvFilter1.Advertisement = _bleAdv1;
            bleWatch1 = new BluetoothLEAdvertisementWatcher(_bleAdvFilter1);

            bleWatch1.Received += BLEWatcher_Received;
            bleWatch1.Stopped  += BLEWatcher_Stopped;
            bleWatch1.Start();

            BluetoothLEAdvertisement _bleAdv2 = new BluetoothLEAdvertisement();

            _bleAdv2.LocalName = "Nordic_HRM";
            BluetoothLEAdvertisementFilter _bleAdvFilter2 = new BluetoothLEAdvertisementFilter();

            _bleAdvFilter2.Advertisement = _bleAdv2;
            bleWatch2 = new BluetoothLEAdvertisementWatcher(_bleAdvFilter2);

            bleWatch2.Received += BLEWatcher_Received;
            bleWatch2.Stopped  += BLEWatcher_Stopped;
            bleWatch2.Start();

            base.OnNavigatedTo(e);

            //   +=============================================+
            //   |   Bluetooth LE Connection Pop-Up Selection  |
            //   +=============================================+
            //
            //
            //DevicePicker picker = new DevicePicker();
            //picker.Filter.SupportedDeviceSelectors.Add(BluetoothLEDevice.GetDeviceSelectorFromPairingState(false));
            //picker.Filter.SupportedDeviceSelectors.Add(BluetoothLEDevice.GetDeviceSelectorFromPairingState(true));
            //picker.Show(new Rect(0, 0, 100, 500));
        }
Example #11
0
 internal BluetoothLEScanOptions(BluetoothLEAdvertisementFilter filter)
 {
     _platformFilter = filter;
 }
Example #12
0
 public BluetoothLEScanOptions()
 {
     _platformFilter = new BluetoothLEAdvertisementFilter();
 }