在 Windows 10 中获取 BLE 广告包
Getting BLE advertisement packets in Windows 10
我目前正在尝试从 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 数据包,我可以在 linux-机器上用 WireShark 验证它。
奇怪的是,我没有通过 Windows 应用程序获得所有这些 ADV 数据包。
我会收到 15-20 个数据包,然后在收到其他数据包之前有 30-60 秒的暂停。
所有设备(windows-机器、linux-机器和蓝牙转发器)都在 1 米半径内。所以我认为我应该在 windows-机器上获得与在 linux-机器上相同的数据包,但我没有。这是为什么?是我的设置错误还是有更好的获取 ADV 数据包的方法?
提前致谢。
在 查看我的回答。
基本上,Windows 指示 BLE 控制器扫描 18.125 毫秒,然后休眠 100 毫秒。这就是为什么你没有得到所有数据包的原因。
我目前正在尝试从 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 数据包,我可以在 linux-机器上用 WireShark 验证它。
奇怪的是,我没有通过 Windows 应用程序获得所有这些 ADV 数据包。
我会收到 15-20 个数据包,然后在收到其他数据包之前有 30-60 秒的暂停。
所有设备(windows-机器、linux-机器和蓝牙转发器)都在 1 米半径内。所以我认为我应该在 windows-机器上获得与在 linux-机器上相同的数据包,但我没有。这是为什么?是我的设置错误还是有更好的获取 ADV 数据包的方法?
提前致谢。
在
基本上,Windows 指示 BLE 控制器扫描 18.125 毫秒,然后休眠 100 毫秒。这就是为什么你没有得到所有数据包的原因。