关于STM32WB的BLE HCI API获取白名单设备列表的技术疑问
解决STM32WB BLE白名单设备列表获取问题
由于STM32WB的BLE HCI API未提供读取当前白名单已存设备列表的原生接口,你可以通过本地维护白名单副本的方式实现重复添加判断,具体方案如下:
1. 定义本地白名单存储结构
根据hci_le_read_white_list_size()返回的硬件最大容量,定义数组或链表存储已添加的设备MAC地址:
#define MAX_WHITELIST_CAPACITY 8 // 替换为实际读取到的硬件最大容量 uint8_t local_whitelist[MAX_WHITELIST_CAPACITY][6]; uint8_t local_whitelist_count = 0;
2. 同步本地列表与硬件白名单状态
每次调用HCI白名单操作函数后,同步更新本地列表:
- 调用
hci_le_add_device_to_white_list()成功时,将目标设备MAC地址存入local_whitelist,并递增local_whitelist_count - 调用
hci_le_remove_device_from_white_list()成功时,从local_whitelist中删除对应MAC地址,并递减local_whitelist_count - 调用
hci_le_clear_white_list()成功时,清空local_whitelist并将local_whitelist_count置0
3. 实现重复添加判断逻辑
在调用硬件添加函数前,先遍历本地列表对比MAC地址:
bool is_device_in_whitelist(uint8_t *target_addr) { for (uint8_t i = 0; i < local_whitelist_count; i++) { if (memcmp(local_whitelist[i], target_addr, 6) == 0) { return true; } } return false; }
仅当该函数返回false时,再执行hci_le_add_device_to_white_list()操作。
额外注意事项
- 必须严格检查HCI操作的返回值:只有硬件操作成功时,才更新本地列表,避免本地与硬件状态不一致
- 若设备需要重启后保留白名单,需将本地列表数据持久化到Flash,重启后先恢复本地列表,再批量同步到硬件白名单
内容的提问来源于stack exchange,提问作者tomazj
相关产品推荐
相关产品推荐

