蓝牙5学习笔记3-代码框架

蓝牙5学习笔记3-代码框架

入口函数代码片段:

主要见图片,main函数执行时需要创建多个任务,包括协议栈任务,GAPRole任务,app任务,以及用户自定义的其他任务。
蓝牙5学习笔记3-代码框架蓝牙5学习笔记3-代码框架
蓝牙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()函数。