noble-winrt
noble-winrt copied to clipboard
Filtering service uuids in parameters for startScanning() is not reliable.
The noble lib allows you to provide two parameters to startScanning() (an array of service uuids, and a boolean for allow duplicates).
This binding does not discover anything when an array of service ids is passed?
It looks like it works when the array only contains one item?
This might be miscoded. Instead of matching any of the service uuids, it might be trying to match only advertisements which contain ALL of them. I do not have a device that broadcasts moret than 1 service uuid, so unable to confirm.
Regardless it does not work with more than one service uuid. noble_uwp and other bindings do.
@pursual You're right currently we pass the service uuids as filter to the AdvertismentWatcher.
The alternative would be to watch for all and filter the advertisement manually once we receive it.
If anyone wants to provide a PR for this the steps would be:
- remove the advertisment filter https://github.com/Timeular/noble-winrt/blob/master/src/ble_manager.cc#L119-L127
- save
serviceUUIDs
in a class fieldmAdvertiementServiceUUIDs
(similar tomAllowDuplicates
) - check if the received advertisement's serviceUUIDs contain any of the saved
mAdvertiementServiceUUIDs
https://github.com/Timeular/noble-winrt/blob/master/src/ble_manager.cc#L139
Fixed in https://github.com/tony-gutierrez/noble-winrt/tree/servicefilter which is based off of https://github.com/fido-alliance/noble-winrt