我目前正在尝试从Windows 10中的蓝牙LE获取广告包。
我正在开发通用Windows应用程序,因此我使用的JavaScript包含以下代码:
// Create and initialize a new watcher instance.
var watcher = new Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisementWatcher();
watcher.signalStrengthFilter.inRangeThresholdInDBm = -126;
watcher.signalStrengthFilter.outOfRangeThresholdInDBm = -126;
watcher.signalStrengthFilter.outOfRangeTimeout = 60000;
watcher.signalStrengthFilter.samplingInterval = 0;
watcher.scanningMode = 1;
watcher.addEventListener("received", onAdvertisementReceived, false);
这些是我获取最多BLE ADV数据包的设置。
在我的场景中,我有一个BLE转发器每秒发送一个ADV数据包,我可以使用WireShark在linux机器上验证。
奇怪的是,我没有使用Windows应用程序获得所有这些ADV数据包。
我会得到15-20个数据包,然后在获得其他数据包之前有30-60秒暂停。
所有设备(windows-machine,linux-machine和ble-transponder)都在1米半径范围内。所以我认为我应该像在Linux机器上那样在Windows机器上获得相同的数据包,但我不这样做。这是为什么?我的设置是错误还是有更好的获取ADV数据包的方法?
提前谢谢。
答案 0 :(得分:1)
在BLE Scan Interval Windows 10查看我的回答。
基本上,Windows指示BLE控制器扫描18.125 ms然后再睡眠100 ms。这就是你没有得到所有数据包的原因。