蓝牙5学习笔记3-代码框架
蓝牙5学习笔记3-代码框架
入口函数代码片段:
App任务初始化函数一般需要做下列几件事情:
ICall_reqisterApp注册,必须首先调用
设置GAP层,例如广播间隔参数等
设置GAPRole,例如是否开启广播等,连接参数等
设置绑定管理器,例如是否开启绑定,,以及绑定模式。
添加Profile,并注册Profile回调函数
启动设备
其他硬件配置
App任务中的事件处理:
App初始化任务结束后,任务函数进入一个无线循环,不间断的作为一个独立的任务处理,永不退出,在在这个无线循环中,任务保持阻塞状态,等待RTOS事件触发。任务处理
当蓝牙协议栈通过触发一个RTOS任务,开始任务处理工程,任务处理一般分为三个部分。
协议栈消息,例如发送AttRsp确认消息,协议栈内部消息GATT_MSG_EVENT等。
RTOS消息列队,通过消息列队缓存的延期待执行的数据,例如缓存的Profile特征值的数据等。
自定义EVEVT,例如app自定义的周期性时间,每隔5s发送一次notify等。
任务间的消息:
蓝牙协议栈通过ICall将消息传递给应用程序任务。
发送到消息列队:
这些消息使用SimpleBLEPeripheral_enqueueMsg()函数入队。
任务内部事件:
在App任务内部,可以创建16个自定义事件,可以通过定时或其他方式来异步执行事件。
回调函数:
除了在任务循环中接收事件的方式运行,还有一项重要的处理方式是回调函数,协议栈中存在大量回调函数。
发送蓝牙数据:
发送蓝牙数据分为两种,一种是在central主机向从机发送数据,另一种是在peripher从机向主机发送数据。
主机向从机发送数据函数:GATT_WriteCharValue()
从机向主机发送数据函数:GATT_Notification()
接收蓝牙数据:
接收蓝牙数据也与发送一样分为两种。
从机接收主机发来的数据:对应主机的 GATT_WriteCharValue()函数。
主机接收从机发来的数据:对应从机的 GATT_Notification()函数。