蓝⽛服务,特性,描述符,属性条⽬
⼀个Profile中可包含⼀个或者多个服务;
⼀个服务可包含⼀个或者多个特性(逻辑上的集合);
⼀个特性⾄少包含两个属性条⽬:⼀个⽤于声明,其他⽤于存储属性值。
⼀个属性条⽬包含 handler、type、permissions、uuid
⼀、profile(简介)
profile是⼀个⼤家经常见到的英⽂单词,但是总感觉领会不到这个词的内涵。Profile,英⽂本义就是脸的侧⾯轮廓,这⾥⼤家⼀定要注意,脸的轮廓不等于脸本⾝(脸本⾝是⾮常复杂和细致的),但profile本⾝是对脸的⼀种抽象,描述和定义,蓝⽛核⼼规范其实也是使⽤profile这个引申意义⽽已,换句话说,蓝⽛的profile跟英⽂字典中的profile是同⼀个意思,意义基本接近。要定义蓝⽛,必须要有⼀个规范,这就是蓝⽛核⼼规范V4.2/V5.0/V5.1……蓝⽛规范⾮常复杂和庞⼤,⼤部分蓝⽛设备只实现了蓝⽛规范中很少⼀部分,那么没有实现的这些规范对这个蓝⽛设备来说能不能称为规范?当然不能!所谓规范或者规格,就是强制的,就必须实现。针对这种情况,profile可以很好地应对。我们把蓝⽛某部分规范称为profile,这个profile如果设备要实现它,那么它就是强制的;如果设备不⽤它,也没关系,这就是profile。基于此,我们可以把profile翻译成⼦规范或者条件规范或者剖⾯规范。 “蓝⽛规范包含很多⼦规范”,这句话⽤中⽂说问题不是很⼤,但是你把它翻译成英⽂,那就难了!这就是英⽂需要⽤profile的原因(⽽不是spec),以及为什么profile在规范中出现的如此频繁。
⼀个profile⽂件可以包含⼀个或者多个服务,⼀个profile⽂件包含需要的服务的信息或者为对等设备如何交互的配置⽂件的选项信息。设备的GAP和GATT的⾓⾊都可能在数据的交换过程中改变,因此,这个⽂件应该包含⼴播的种类、所使⽤的连接间隔、所需的安全等级等信息。
需要注意的是: ⼀个profile中的属性表不能包含另⼀个属性表。
⼆、Service(服务)
⼀个服务包含⼀个或多个特性,这些特性是逻辑上相关的集合体。
GATT服务⼀般包含⼏块具有相关的功能,⽐如特定传感器的读取和设置,⼈机接⼝的输⼊输出。组织具有相关的特性到服务中既实⽤⼜有效,因为它使得逻辑上和⽤户数据上的边界变得更加清晰,同时它也有助于不同应⽤程序间代码的重⽤。GATT基于蓝⽛技术联盟(SIG)官⽅⽽设计,SIG建议根据它们的规范设计⾃⼰的profile。
在蓝⽛规格中,每⼀个具体的蓝⽛应⽤是由多个service组成的,⽽每⼀个service⼜是由多个characteristic组成的
三、Characteristic(特征数据)
Characteristic 特征值,BLE 主从机的通信均是通过 Characteristic 来实现,可以理解为⼀个标签,通过这个标签可以获取或者写⼊想要的内容。
对特征的定义和描述。是Characteristic通信实现的细节。
其中特性中的属性条⽬有两种:属性值或描述符。任何在特性中的属性条⽬不是定义为属性值就是为描述符。
属性值:包含 特征的声明(Characteristic Declaration)条⽬、特征的值(Characteristic Value)条⽬
⼀个特性⾄少包含2个属性条⽬(也即属性值必须要有,⽽描述符根据需要可选):⼀个属性条⽬⽤于声明(Characteristic Declaration),⼀个属性条⽬⽤于存放特性的值(Characteristic Value)。
描述符:包含 特征的客户配置(Client Characteristic Configuration)条⽬、特征的⽤户描述(Characteristic User Description)条⽬描述符是⼀个额外的属性以提供更多特性的信息,它提供⼀个⼈类可识别的特性描述的实例。
然⽽,有⼀个特别的描述符值得特别地提起:客户端特性配置描述符(Client Characteristic Configuration Descriptor,CCCD),它的UUID是0x2902,这个描述符是给任何⽀持通知或指⽰功能的特性额外增加的。 在CCCD中写⼊“1”使能通知功能,写⼊“2”使能指⽰功能,写⼊“0”同时禁⽌通知和指⽰功能。
如果属性值的许可(permissions)含有通知或通知时,特性中的属性中需要有客户端特性配置描述符(
CCCD)条⽬。⽤户描述(Characteristic User Description)条⽬可有可⽆的。
⼀个特性中的属性条⽬之间的关系:Characteristic Declaration 条⽬中只是说明property 属性, ⽽Characteristic Value条⽬则直接指明了这个值能被“允许” ⼲嘛。Client Characteristic Configuration条⽬ 才是真正说明我这个值是可以被“notify”的,配置成开启/禁⽌通知,Characteristic Declaration条⽬ 只是说明属性。总之,1(Characteristic Declaration)条⽬ 以只是”Declare“ ⼀下⽽已,具体做事的还是后⾯的2、3条⽬。
四、属性条⽬
属性的定义是这样的
Handle Type Permission Value
1、句柄(Handle)profile是什么意思中文翻译
Handle: 其实上⾯那张属性表,在程序⾥只是⼀个数组⽽已,所以Handle这个值其实我们是不需要专门去存的,他只是⼀个索引⽽已。
这是基本的属性条⽬在表中的索引。每个属性都有⼀个独⼀的句柄
2、类型(type)
Type:属性的类型,也即UUID ,蓝⽛标准组织已经对UUID进⾏了分类。
如上表中,服务的Type就是0X2800,所以每到⼀个服务,就会有⼀个Type类型为0x2800的属性出现。
⽽特征值Declaration 的Type就是0x2803。⾄于特征值Value的Type可以是⽤户⾃定义的。
·这个⽤来说明属性条⽬数据代表的意思。经常是作为UUID(universal unique Ididentifier)的。这其中的⼀些是Bluetooth-SIG定义的⼀些是⽤户的。
3、许可(permissions)
Permission:属性的访问权限,⼀般有Read、Write、 notifications、 indications。这个会强制⼀个GATT客户端设备是否和怎样访问属性条⽬的值。
4、值(Value)
Value:属性的值 最长可达512字节
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论