1.关于服务与特征值的简述
之前说到蓝⽛的连接过程,那蓝⽛连接之后具体是如何传数据的呢。这⾥做⼀下简要说明。
蓝⽛4.0是以参数来进⾏数据传输的,即服务端定好⼀个参数,客户端可以对这个参数进⾏读,写,通知等操作,这个东西我们称之为特征值(characteristic),
但⼀个参数不够我们⽤,⽐如我们这个特征值是电量的值,另⼀个特征值是设备读取的温度值。那这时候会有多个特征值,并且我们还会对它们分类,分出来的类我们称之为服务(service)。
⼀个设备可以有多个服务,每⼀个服务可以包含多个特征值。为了⽅便操作,每个特征值都有他的属性,例如长度(size),权限(permission),值(value),描述(descriptor),如下图。
2.ATT与GATT
我们刚才介绍服务与特征值,那具体我们是怎么去实现的呢.
蓝⽛4.0版本推出了低功耗规范,引⼊了两个核⼼协议:ATT(Attribute Protocol)和GATT(Generic Attribute Protocol).这两个协议主要⽬标是BLE,但是也可以运⾏在传统蓝⽛上(BR/EDR)。
ATT主要是规定了\"属性\"的定义,GATT则是将这些\"属性\"包装成我们上⾯所讲的服务、特征值等。
那我们是怎么搭建起来我们的服务的呢?
⼤概可以概述为,由⼀个个属性搭建起来的东西。如下图,每⼀个属性就会告诉使⽤者说,我是什么,我带有什么,你能对我做什么,即描述,值,权限序号属性1属性2
描述
我是 服务A的开头我是 特征值1的开头
权限只读只读
服务号0001
特征值1的值放在属性3⾥特征值1的值类型特征值1的值权限0关闭………
服务号0002
值
属性3属性4属性5属性6属性7属性8
我是 特征值1的值
我是 特征值1的特殊操作
我是 特征值2的开头我是 特征值2的值
我是 特征值2的特殊操作
我是 服务B的开头
/读写只读/读写只读
上图是⼀个简单的表述,真正的属性表如下图。
Handle
…
Type
…0x2800
Permission
…
Value
…E0:FF(2 bytes)
39
(GATT Primary Service
UUID)
0x2803
Read
(0xFFE0 = simple keys service custom UUID)
10:29:00:E1:FF(5 byte)
(0xFFE1 = Simple keys value custom UUID)
Read
(0x0029 = handle 41)
(0x10 = characteristic properties :notify only)
00(1 byte)
(none)
(value indicates states of keys)
00:00(2 byte)
Read andWrite
(value indicates whether notifications orindications are enabled)
A1:DD(2 byte)
Read
(0xDDA1 = Other Service custom UUID)
40
(GATT CharacteristicDeclaration UUID)
0xFFE1
41
(simple keys state)
0x2902
42
(GATT Client Characteristic
Configuration UUID)
0x2800
43
(GATT Primary Service
UUID)
属性的定义是这样的
Handle
Handle: 其实上⾯那张属性表,在程序⾥只是⼀个数组⽽已,所以Handle这个值其实我们是不需要专门去存的,他只是⼀个索引⽽已。Type:属性的类型,也即UUID ,蓝⽛标准组织已经对UUID进⾏了分类。
Type
Permission
Value
如上表中,服务的Type就是0X2800,所以每到⼀个服务,就会有⼀个Type类型为0x2800的属性出现。 ⽽特征值Declaration 的Type就是0x2803。⾄于特征值Value的Type可以是⽤户⾃定义的。Permission:属性的访问权限,⼀般有Read、Write、 notifications、 indicationsValue:属性的值 最长可达512字节
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务