蓝牙白名单(Whitelist)功能说明与配置指南

白名单用于过滤蓝牙设备的扫描和连接请求,可分别应用于从机(广播者)和主机(扫描/发起者)角色。

从机(广播者):设置白名单后,可仅响应白名单内设备的扫描请求,并仅允许这些设备发起连接。

主机(扫描/发起者):设置白名单后,扫描和连接操作将仅针对白名单内的设备进行。


一、从机白名单相关函数及配置

1. 函数接口

bStatus_t LL_ClearWhiteList(void);                         // 清空白名单
bStatus_t LL_AddWhiteListDevice(uint8 addrType, uint8 *devAddr);   // 添加设备到白名单
bStatus_t LL_RemoveWhiteListDevice(uint8 addrType, uint8 *devAddr); // 从白名单移除设备

2. 地址类型(addrType)取值

ADDRTYPE_PUBLIC (0x00) —— 公网地址(BD_ADDR)

ADDRTYPE_STATIC (0x01) —— 静态地址

ADDRTYPE_PRIVATE_NONRESOLVE (0x02) —— 不可解析私有地址

ADDRTYPE_PRIVATE_RESOLVE (0x03) —— 可解析私有地址

3. 过滤策略(GAPRole 参数)
通过 GAPRole_SetParameter 设置广播过滤策略(需先添加白名单):

uint8 filter_policy = GAP_FILTER_POLICY_WHITE_CON;  // 允许任意设备扫描,仅允许白名单设备连接
GAPRole_SetParameter(GAPROLE_ADV_FILTER_POLICY, sizeof(uint8), &filter_policy);

策略可选值:

GAP_FILTER_POLICY_ALL (0x00) —— 允许任意设备扫描和连接(默认)

GAP_FILTER_POLICY_WHITE_SCAN (0x01) —— 仅白名单设备可扫描,任意设备可连接

GAP_FILTER_POLICY_WHITE_CON (0x02) —— 任意设备可扫描,仅白名单设备可连接

GAP_FILTER_POLICY_WHITE (0x03) —— 仅白名单设备可扫描和连接

4. 配置示例(通常在 Peripheral_Init 中)

uint8 mac0[6] = {0x02, 0x02, 0x03, 0xE4, 0xC2, 0x84}; // 目标设备 MAC(小端)
uint8 macType = 0;                                    // 地址类型(公网)
uint8 filter_policy = GAP_FILTER_POLICY_WHITE_CON;

LL_AddWhiteListDevice(macType, mac0);
GAPRole_SetParameter(GAPROLE_ADV_FILTER_POLICY, sizeof(uint8), &filter_policy);

验证技巧:在不启用白名单时先让主从正常连接,连接后通过从机获取对端设备的 MAC 地址和类型,以确认您填入的 mac0 和 macType 是否正确。

二、主机白名单相关配置(以 WCH 例程为例)

1. 宏开关

#define DEFAULT_DISCOVERY_WHITE_LIST   FALSE   // 扫描时是否仅使用白名单
#define DEFAULT_LINK_WHITE_LIST        FALSE   // 连接时是否仅使用白名单

需将它们设为 TRUE 以启用对应白名单过滤。

2. 添加白名单设备(用法与从机相同)

uint8 mac0[6] = {0x02, 0x02, 0x03, 0xE4, 0xC2, 0x84};
uint8 macType = 0;
LL_AddWhiteListDevice(macType, mac0);

主机启动扫描或发起连接时,若对应的白名单宏已开启,则只会与白名单中的设备交互。

posted on 2023-01-12 13:34  WCH蓝牙应用分享  阅读(1841)  评论(0)    收藏  举报