导语Apollo2_ble模块硬件由Apollo2(blehost)+em9304(blecontroller)构成。软件上,用于ARM的CordioStackandProfiles协议栈,这个协议栈又是基于WSF(WirelessSoftwareFoundation)构建的。Apollo2_ble协议栈使用的是蓝牙4.2标准。
什么是profile和service?profile,可以有多种翻译成,在蓝牙技术联盟规定的蓝牙4.2标准中,定义Bluetoothprofiles是用来构建蓝牙系统中应用于的互操作性的。[1]这个profile的定义就较为甚广,本文不做到明确叙述。
本文中的profile和service,都所指的是图1中GATT-BasedProfile/Services层的概念,也就是application层的概念。要讲这两者,首先说道一下GATT。
图1简陋BLE层次区分图图1是简陋的BLE层次区分,GATT(GenericAttributeProfile)是蓝牙中一种基于ATT协议(AttributeProtocol)的profile框架(framework)。ATT协议的想法,可以说道是为物联网服务的。在物联网时代,必须传感器收集各种信息,例如,温度,湿度,方位,电量等,ATT协议就将这些信息以属性(attribute)的形式传输到上层,以供加载或改动。
它规定了这些属性的格式,权限,加载方式等。而GATT就是将抽象化的ATT协议形象化,规定了一个标准化的关于这些属性如何加载改动的框架(framework)。到了明确的应用于场景,我们就可以根据GATT规定好的框架,来撰写对应的GATT-BasedProfile。
而每一个profile,只不过是各种services的子集。荐个例子,假如我们的应用于场景是一个可以测心率的手环,该手环除了测心率的功能,我们还必须它有测电量的功能。
这些有所不同的功能,只不过就是有所不同的services。蓝牙技术联盟早已通过了各种有所不同的GATTservices,详尽列表可以参见文献[2]。
这么多的services,并不是每一个我们都必须,所以,我们可以自己写出GATT-BasedProfile,将我们必须的services包括进去。如上面手环的例子,这个profile,就只包括了HeartRateservice和BatteryService。开始加到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转入该函数,寻找Initializeattributeserverdatabase代码段如图5:图5由图5由此可知,该profile早已加到了4个services。(留意,4个中不还包括GAP和GATT,这两个services是每个GATT-BasedProfile都必需加到的,代码中由函数SvcCoreAddGroup展开加到)分别是,测心率的(HeartRate),加载设备信息的(deviceinformation),测电量的(batteryservice)和测速率的(runningspeedandcadence)。现在假设我们要新的加到一个HID的service。则首先就要在start函数里面登记这个service,减少的代码如下:图6并且将对应的头文件都包括进去:图7svc_hid.h里面声明了SvcHidRegister和SvcHidAddGroup,而hid_api.h里面声明了函数HidAttsWriteCback。
并不是所有的service都必须登记读取消息传递函数,只有当Attributelist中的Attributesettings项经常出现ATTS_SET_WRITE_CBACK。或者ATTS_SET_READ_CBACK时才必须。以fit工程为事例,heartrate的Attributelist如下:图8最后一个attribute必须中用写出消息传递,因此在fitstart函数中才必须登记写出消息传递函数的入口。看我们的service是不是加到顺利,我们可以用手机关上蓝牙调试助手:图9右图10是未加到HIDservice时关上调试工具看见的服务列表,可以看到本来除了GAP(genericaccessprofile)和GATT(genericattributeprofile)外,有4个services,与我们在图5代码中所闻完全一致,图11是我们加到代码后再行关上测试工具看见的服务列表,可以看到HIDservice早已加到进来了。
本文来源:kaiyun·开云,kaiyun·开云(官方)app下载安装ios/安卓通用版/手机版-www.566264.com