This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Reconnecting in central mode

I am developing an application on nRF52 wich simultaneously acts as a central and peripheral and I am using the Peer Manager to manage bonding. The central needs to stay connected with a few already bonded peripherals which can occasionally get out or reach and disconnect. Therefore, if not all peripherals are connected, a scanning will be constantly running. The application parses all received advertising reports and first filter them out based on the Manufacturing specific data and then on the Flags. And here it comes the question - how do I filter out the advertising reports further and distinguish the ones coming from devices which have already got a valid bond with this particular central? Does the Peer Manager or the ID Manager provide this functionality or the application needs to keep track on that based on for instance peer addresses?

Parents
  • Hi GT,

    Yes, you can manually check the address of the advertiser when you receive advertising and compare to the list of device connected/paired.

    But the esier way is to let the radio filter out advertising packets for you automatically. You can do that by providing a whitelist to the softdevice when doing scanning. The list of paired device can be acquired by calling pm_whitelist_get(). You will have address and IRK of the devices paired, and you can do selective scanning based on this list.

    Please have a look at the scan_start() function in main.c in ble_app_hrs_c project in our SDK.

  • Hello Hung, Thanks for the useful information! I managed to implement whitelisting for the central and now the application receives only advertising packages from whitelisted devices. However, another problem just showed up - sd_ble_gap_connect() returns NRF_ERROR_INVALID_PARAM when the whitelist is enabled. If the whitelist is disabled, the central can connect and communicate with a peripheral. Another nNF51 device is used as a peripheral and it uses BLE_GAP_ADDR_TYPE_RANDOM_STATIC which I believe is causing this behavior. However, the peripherals are using the DEVICEADDR[0] and DEVICEADDR[1] to set the address on power up.

    Does the whitelisting supports with BLE_GAP_ADDR_TYPE_RANDOM_STATIC or it requires BLE_GAP_ADDR_TYPE_PUBLIC or BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE?

Reply
  • Hello Hung, Thanks for the useful information! I managed to implement whitelisting for the central and now the application receives only advertising packages from whitelisted devices. However, another problem just showed up - sd_ble_gap_connect() returns NRF_ERROR_INVALID_PARAM when the whitelist is enabled. If the whitelist is disabled, the central can connect and communicate with a peripheral. Another nNF51 device is used as a peripheral and it uses BLE_GAP_ADDR_TYPE_RANDOM_STATIC which I believe is causing this behavior. However, the peripherals are using the DEVICEADDR[0] and DEVICEADDR[1] to set the address on power up.

    Does the whitelisting supports with BLE_GAP_ADDR_TYPE_RANDOM_STATIC or it requires BLE_GAP_ADDR_TYPE_PUBLIC or BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE?

Children
No Data
Related