为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板【淘宝链接:思度科技CSR开发板】。
技术交流QQ群号:743434463
开发板会员QQ群号:725398389(凭订单号入群,赠PPT、项目源码、视频教程)
——————————正文分割线———————————–
#1. 引言
公司的新项目需要CSR8675支持iOS APP调节音量、设置EQ等功能。由于这些功能不属于任何已公开的蓝牙GATT服务,因此定制一个全新的GATT server成了必不可少的工作。
本文章介绍了GATT server的基本概念,并给出了用CSR8675创建GATT server的简单示例。
#2. 了解GATT server
网上有很多基本概念的介绍,本文不展开,推荐阅读如下链接:
有几个重点概念需要提一下,如下:
可以看到,应用程序处于最上层。往下一层是属性协议,再往下是逻辑链接控制访问协议,最后到达控制器。
CSR8675的server开发只涉及到应用层和属性协议,L2CAP和controller由固件完成,对二次开发人员是封闭的。
GATT可配置为如下两种角色:
- Client: 命令、请求发起方
- server: 命令、请求接收方
上图中,电脑为请求发起方,即为client,传感器为请求应答方,即为server。对我们的产品而言,手机即为client,音箱即为server。
相同的传感器硬件,启用不同的server,即可支持不同的功能。一般的server profile结构如下:
从图上可以看出,server profile结构有一些主要特征:
- 一个server profile可包含多个server
- server可以引用多个别的server
- 每个server包含多个特征
- 每个特征包含属性、值和描述信息
具体到产品,当用户需要在iOS APP上修改音箱的EQ设置时,手机和CSR8675之间有如下交互:
- 手机通过LE L2CAP连接获取CSR8675所支持的服务列表
- 从服务列表中找到手机和CSR8675事先约定好的服务
- 找到服务中包含的EQ设置的特征值
- 修改EQ设置
- 修改成功后,CSR8675返回修改成功通知,否则返回修改失败
CSR8675能提供的服务类型分三种:
- 蓝牙联盟组织已采用的服务。如DIS(设备信息服务)、BAS(电池服务)等。官方链接:GATT规格。
- 蓝牙成员专属的服务。这些规格由蓝牙成员自行制定,提供自定义的服务,有16位的UUID,需要向蓝牙联盟组织付费购买。官方链接:成员16位UUID。
- 自定义的服务。这些规格可以由任何人自行制定和实施,提供自定义的服务,有128位UUID,不需要付费购买。这种服务的优点是免费,缺点是可能碰巧与别人制定的服务有着相同的UUID,影响到双方产品的使用。
新建一个自定义的的服务,即是本文的目标。
#3. 新建一个server
在创建一个新的server之前,先来看一下CSR8675的GATT系统架构,如下: