根据文档《FREQ BLE SDK User Guide V1.0.5》和《Fr801xH 如何构建系统》说明知道,FR801xH SDK包含以下组件:
l BLE 5.0 协议栈和常见 Profile
l BLE SIG Mesh 协议栈
l 多个中间件组件
l 非抢占式操作系统
l 保持链接睡眠和关机睡眠调用接口
l 多种外设驱动
l 调试函数和错误处理
l 系统常用辅助函数
其中协议栈部分、OSAL以库的形式提供,类似TI BLE协议栈。
本例程dev1.0/ble_simple_peripheral新建了2个profile,分别为simple_profile_service服务和speaker_service服务。下面来进行代码分析,固化128K ROM里的BootLoader会引导进入库里定义好的三个弱函数(应用层需要重写功能定义):
i. user_custom_parameters
ii. user_entry_before_ble_init
iii. user_entry_after_ble_init
作用文档里有涉及,不赘述。当进入启动代码platform/app_boot_vectors.s后Reset_Handler上电初始化,最终进入跟用户打交道的user_entry_after_ble_init函数,先开启两个用户任务按键和音频处理分支:
之后就开始添加ATT 数据库,这是本文重点。蓝牙设备名称、MAC地址、安全特性参数等设置完成,就开始新建profile:
// Adding services to database
sp_gatt_add_service(); //创建Simple Profile
speaker_gatt_add_service(); //创建Speaker profile
如上图所市,2个profile分别为:simple_profile_service(0x0000fff0-0000-1000-8000-00805f9b34fb)和speaker_profil(0x0000d0ff-0000-1000-8000-00805f9b34fb),以simple_profile为例:
在ATT属性组添加service声明、特征声明、特征值、特征描述符、特征CCC配置(可选)等:
声明了5个特征0xfff1~0xfff5:
Profile描述定义simple_profile_att_table属性数组,同时要定义一个特征操作访问函数包括读写处理函数,其中有读回调sp_gatt_read_cb和写回调sp_gatt_write_cb:
最后调用gatt_api.h协议栈API(gatt_add_service)来添加进数据库,到此一个用户profile新建并成功进入ATT属性组了。整个关键函数结构如下:
在手机nRF connect上读写就会触发刚才两个对应回调函数,比如给特征值1写入0x1122,central和peripheral提示如下:
作者: 南霁云, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-1821704.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论