白名单的使用
客户提出这样的一个需求:SYD8811作为从机,只能够给指定的主机连接(只能够给制定mac地址设备连接)但是扫描功能不受限制,并且改功能还可以开关。
这个需求使用到了白名单的概念,经过研究之后发现SYD8811只有一个白名单,不能够做白名单列表,并且白名单还不能够单独对扫描请求和连接请求。
经过沟通,这里决定使用白名单,但是需要切换普通模式和白名单模式!
代码上使用到了KEY1和KEY2两个按键的中断:
因为White_List_Enable默认为0,所以上电后白名单是被关闭的,任何设备都能够扫描和连接8811.按下KEY1后白名单打开,只有指定的设备才能够连接和扫描。
这里修改了StartAdv函数的参数从void变成传入一个uint8_T的变量,该变量为0白名单失效,为一将会过滤掉非白名单的设备,白名单用gap_set_White_List来传入一个地址及其类型,为了方便测试,这里在连接上填充该地址结构体:
把上面的三个部分套起来后可得到如下的测试流程:
- 上电后先使用测试手机来连接一次SYD8811,然后断线,这时候地址就已经记录下来了
- 按下KEY1,等待GAP_EVT_ADV_END事件上报,注意:只有该事件上报重新广播后白名单的设置才能够生效。
- 这时候就可以看到只有刚才连接的手机才能够连接SYD8811,其他手机将不能够连接
注意:如果用手机来测试,要确保蓝牙的连接地址不变,首先不能够退出连接界面,并且测量时间不要太长,如果可以请用非手机设备来测试:
这时候可以看到只有之前连接的设备(在白名单的设备)才能够扫描成功:
本文源代码如下:
https://download.csdn.net/download/chengdong1314/33471958