[BLE] CC2541的开启广播过程

来源:互联网 发布:sql查询语句实例 编辑:程序博客网 时间:2024/05/18 23:13

在应用层开启广播功能其实非常简单,只要把TRUE传给GAPRole_SetParameter函数中的GAPROLE_ADVERT_ENABLED就可以了。



进到GAPRole_SetParameter函数里看看GAP层到底做了什么事情才开关广播。



其中gapRole_AdvEnabled默认是TRUE


每次进到这个函数里,就会先把gapRole_AdvEnabled的值保存到oldAdvEnabled,再把新的状态写到gapRole_AdvEnabled。也就是这两句



而后它实际上是对oldAdvEnabled(旧的广播开关状态)和gapRole_AdvEnabled(新传入的广播开关状态)这两个变量进行了判断,

1)在广播状态下,想关闭广播----->关闭广播

2)在不广播的状态下,想开启广播--->开启广播


代码中并没有将另外两种情况编写进来,也就是

3)在广播状态下,还想开启广播

4)在不广播的状态下,还想关闭广播

协议栈把这两种情况划入了else的bleInvalidRange。


第2)种情况的开广播,调用了gapRole_TaskID任务中的START_ADVERTISING_EVT事件:



事件中调用GAP_MakeDiscoverableGAP_MakeDiscoverable即可开启广播,如果广播不成功,则会调用函数指针pGapRoles_AppCGs指向的回调函数,并且传入参数GAPROLE_ERROR,以此来通知应用层广播不成功。

那么调用的又是哪个回调函数呢?

追踪一下pGapRoles_AppCGs发现有个注册回调函数的函数



再追踪一下这个注册函数,发现在应用层的SBP_START_DEVICE_EVT事件中对此进行了注册


所以当广播开启不成功之后,会调用simpleBLEPeripheral_PeripheralCBs的回调函数




到此,广播过程就结束了。

0 0