/// <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(); } }
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(); }
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>(); }
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(); }
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(); }
/// <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); }
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)); }
internal BluetoothLEScanOptions(BluetoothLEAdvertisementFilter filter) { _platformFilter = filter; }
public BluetoothLEScanOptions() { _platformFilter = new BluetoothLEAdvertisementFilter(); }