-
Notifications
You must be signed in to change notification settings - Fork 315
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Old BLE devices not found after Android upgrade #223
Comments
Hello, Could you check the exact bytes of the packet, or use a sniffer? |
Hi, Thank you for your reply. I've used a sniffer to capture a packet. Wireshark does not indicate a problem and it's looking fine to me. But I'm not entirely sure what constitutes a valid packet. I noticed that when I start scanning on the iPhone the ADV_IND packets are interspersed with SCAN_REQ/SCAN_RSP packets. But if I start scanning on the Android phone, no such scan packets appear. So it seems that Android already ignores the initial ADV_IND packets. I've attached the dissection and bytes from Wireshark. Do you know whether there is any problem with it? |
I don't know if that matters, but I noticed an interesting thing. The MAC address that the device advertises with is public (34:15:13:d0:39:f9):
but in the advertising packet it says random and the MAC is inverted:
|
Also, the packet does not have a Complete Local name, so your filter in nRF Connect excludes it. |
The name is in the scan response, so it's properly found by at least the iOS version of nRF Connect. It also used to be found by the Android version. |
I also noticed that the address configuration seems contradictory. Do you know a tool that can 'fake' advertisement packets based on these bytes. I can then try to broadcast the captured bytes and slightly modify them to see whether I can get Android to accept them. |
You may use nRF Connect for Desktop with the Bluetooth LE app if you have a nRF52832 or nRF52840 DK. |
I used nRF Connect for Desktop and tried to mimic the packet as close as possible.
This packet is accepted directly by Android (resulting in SCAN_REQ/RSP packets) and discovered in nRF Connect for Android (and iOS). So it remains a bit a mystery why the original advertisement packet is ignored while a very similar packet is accepted. |
If you may modify the advertising packet on your device, try removing AD fields and check if any change makes it discoverable. Try changing the address type to random or changing it. |
Unfortunately, I can't modify the firmware of the device. But I did manage to recreate the exact advertising packet based on an nRF52832 and NCS. Yet, the original device does not show up on Android, while the nRF52832 device does show up. Scanning the nRF52832 results in SCAN_REQ/RSP packets in the air. Scanning the original device does not result in such packets. If some kind of communication issue would be the problem I would expect at least the SCAN_REQ packets from the Android device. So it seems the mystery is even bigger now. |
Did you compare all the bytes of the adv packet, including header and CRC? |
Yes, I did. Using the dissect from Wireshark as well as manually comparing the bytes. Only fields such as the timestamps and packet counter differ. |
Describe the bug
I've a BLE product that uses Bluetooth 4.3. After updating the Android OS to 13 the nRF Connect app no longer discovers this product. A newer product based on Bluetooth 5.0 is found just fine.
The iOS version of nRF Connect finds both the new and old product, so it seems there is no issue with the product itself.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
The product shows up in the list of scan results
Screenshots
I've added screenshots of both the Android and iOS version of nRF Connect scanning at the same time. Notice that the iOS version finds two devices, while the Android version finds one. The filters are configured the same.
Versions (please complete the following information):
The text was updated successfully, but these errors were encountered: