导语
apollo2_ble模块硬件由apollo2(ble host)+ em9304(ble controller)组成。软件上,使用arm的cordio stack and profiles协议栈,这个协议栈又是基于wsf(wireless software foundation)实现的。
apollo2_ble协议栈采用的是蓝牙4.2标准。
什么是profile和service?
profile,可以有多种翻译,在蓝牙技术联盟规定的蓝牙4.2标准中,定义bluetooth profiles是用来实现蓝牙系统中应用的互操作性的。[1]这个profile的定义就比较广,本文不做具体描述。本文中的profile和service,都指的是图1中gatt-based profile/services层的概念,也就是application层的概念。
要谈这两者,首先说一下gatt。
图1 简易ble层次划分图
图1是简易的ble层次划分,gatt(generic attribute profile)是蓝牙中一种基于att协议(attribute protocol)的profile框架(framework)。att协议的初衷,可以说是为物联网服务的。在物联网时代,需要传感器采集各种信息,例如,温度,湿度,位置,电量等,att协议就将这些信息以属性(attribute)的形式传输到上层,以供读取或修改。它规定了这些属性的格式,权限,读取方式等。而gatt就是将抽象的att协议具体化,规定了一个通用的关于这些属性如何读取修改的框架(framework)。到了具体的应用场景,我们就可以根据gatt规定好的框架,来编写对应的gatt-based profile。而每一个profile,其实是各种services的集合。
举个例子,假如我们的应用场景是一个可以测心率的手环,该手环除了测心率的功能,我们还需要它有测电量的功能。这些不同的功能,其实就是不同的services。蓝牙技术联盟已经通过了各种不同的gatt services,详细列表可以参看文献[2]。这么多的services,并不是每一个我们都需要,所以,我们可以自己写gatt-based profile,将我们需要的services包含进来。如上面手环的例子,这个profile,就只包含了heart rate service和battery service。
开始添加service
现在可以开始在apollo2_ble的sdk中添加我们想要的service了。
本文以fit工程为例。
打开工程后,整个工程的main函数入口在src目录下。(本文的编译环境用的是keil)图2是打开没有移植freertos系统的工程目录,假如移植了freertos,也是同样在src目录下,只是freertos系统的main函数入口在freertos_fit.c文件中,但具体的线程对应的代码在radio_task.c中,直接到对应线程的c文件中查看即可。
图2
图3
在main函数或者对应线程中找到函数fitstart()
图4
进入该函数,找到initialize attribute server database代码段如图5:
图5
由图5可知,该profile已经添加了4个services。(注意,4个中不包括gap和gatt,这两个services是每个gatt-based profile都必须添加的,代码中由函数svccoreaddgroup进行添加)分别是,测心率的(heart rate),读取设备信息的(device information),测电量的(battery service)和测速率的(running speed and cadence)。
现在假设我们要新添加一个hid的service。则首先就要在start函数里面注册这个service,增加的代码如下:
图6
并且将对应的头文件都包含进来:
图7
svc_hid.h里面声明了svchidregister和svchidaddgroup,而hid_api.h里面声明了函数hidattswritecback。
并不是所有的service都需要注册读写回调函数,只有当attribute list中的attribute settings项出现atts_set_write_cback。
或者atts_set_read_cback时才需要。
以fit工程为例,heart rate的attribute list如下:
图8
最后一个attribute需要用到写回调,因此在fitstart函数中才需要注册写回调函数的入口。
看我们的service有没有添加成功,我们可以用手机打开蓝牙调试助手:
图9
下图10是未添加hid service时打开调试工具看到的服务列表,可以看见本来除了gap(generic access profile)和gatt(generic attribute profile)外,有4个services,与我们在图5代码中所见一致,图11是我们添加代码后再打开测试工具看到的服务列表,可以看见hid service已经添加进去了。
图10
图11
参考文献:
[1] bluetooth specification version 4.2 [vol 1, part a] page 97
[2] bluetooth
文章来源:润欣科技fortune微信公众号
供应聚氨酯高压发泡机
关注这些种植要点,栽培的芋头既高产又优质
l供应各种规格的 来电订购 玻璃纤维窗纱 隐形窗纱
观赏鱼里的四大“美人”鱼,真漂亮!/观赏鱼世界(中小型/灯科)
海马汽车卖房更名押宝8S上演绝地求生
在Apollo2_ble 中添加一个service
和福顺焖锅加盟投资回报大
冲孔铝单板加工
养殖户注意!七月份,各地进入高温期,水产养殖病害进入高发期,养殖户要提前做好病害防控措施
四川蝶阀 法兰式蝶阀 沃特斯阀门
苹果推送iOS12.3.2:iPhone 8 Plus独享
宁夏加气块供应商--宁夏值得信赖的加气块厂商--
浙工大全日制夜大怎么上
进口商品超市加盟 万国码头贴心帮扶投资无忧
639 琥珀核桃仁 干果坚果炒货类食品批发 包装类
可以代替破碎锤开采硬石头的机器雨湖
西湖区幼教班|蒙氏早教|蒙台梭利培训中心
艾森尼克RO膜怎么加盟?加盟流程是怎样的?
抖音 iDS-2DE7223IX-A/S1 海康威视E系列200万人脸抓拍红外球型摄像机
北京高价收购资和信商通卡收购福卡收购中欣银宝通卡