1.主机端
开启白名单的选项在之前章节的扫描参数里:
我们需要更改为:
关于扫描策略:
BLE_GAP_SCAN_FP_ACCEPT_ALL:接收所有的广播包,除去广播地址不是指向该设备的定向广播。
BLE_GAP_SCAN_FP_WHITELIST:接收在白名单里所有的广播,除去广播地址不是指向该设备的定向广播。
BLE_GAP_SCAN_FP_ALL_NOT_RESOLVED_DIRECTED:接收所有的广播包,包含定向广播包。这里如果广播MAC地址是私密地址,这里是无法被解析的。
BLE_GAP_SCAN_FP_WHITELIST_NOT_RESOLVED_DIRECTED:接收白名单里所有的广播包,包含定向广播包。这里如果广播MAC地址是私密地址,这里是无法被解析的。
这里设置为扫描白名单的选项后,我们怎么去设置白名单呢?
开启这个选项后,在协议栈扫描相关初始化完成后,会由协议栈给我们一个设置白名单回调事件,我们需要在这个事件中设置白名单:
在回调函数中设置:
注意,当白名单里面有多个成员时,p_peer_addr 应该是一个结构体数组指针。这里的len成员要根据实际情况设置:
可以看到,白名单成员数量不能超过:
这里是8。 然后就是扫描到白名单里面的成员后的处理:
相较于前几章我们可以看到每种事件保存数据的结构体都很分明:
2.从机端
和上一章相同,略。
3.实际现象
注意,过滤和白名单扫描有本质区别:
开启过滤时,其实仍然是扫描所有设备,扫描到符合过滤规则的设备时,触发的是:
NRF_BLE_SCAN_EVT_FILTER_MATCH
而扫描到不符合过滤规则的设备时,触发的是:
NRF_BLE_SCAN_EVT_NOT_FOUND
而开启白名单扫描是改变的扫描模式,这种情况下,一旦设置成功,只会在扫描到白名单设备时触发:
NRF_BLE_SCAN_EVT_WHITELIST_ADV_REPORT
而不再会有其他事件。
最后
以上就是炙热月饼最近收集整理的关于从零开始的nrf52832蓝牙开发(7)--广播与扫描白名单1.主机端2.从机端3.实际现象 的全部内容,更多相关从零开始内容请搜索靠谱客的其他文章。
发表评论 取消回复