Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1365946
  • 博文数量: 860
  • 博客积分: 425
  • 博客等级: 下士
  • 技术积分: 1464
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-20 19:57
个人简介

对技术执着

文章分类

全部博文(860)

文章存档

2019年(16)

2018年(12)

2015年(732)

2013年(85)

2012年(15)

我的朋友

分类: Android平台

2019-01-10 10:26:29

通俗地说吧,Server(服务器)就是数据中心,Client(客户端)就是访问数据者。特别说明,它与主/从设备是独立的概念:一个主设备既可以充当Server,又可以充当Client;从设备亦然 

Server首先将一个服务按“属性/句柄/数值/描述”这种格式予以组织,然后调用API函数GATTServApp_RegisterService将服务数据进行注册。举个实例吧,设提供一个电池电量服务字节,它允许Client读取,数据为一个8比特无符号数(0~100%),它的组织如下:02 25 00 19 2A, 这5个数据(小端格式)分别是:0x02=只读属性,0x0025=句柄;0x2A19=服务UUID。 

句柄(Handle)就是服务数据在数据中心的地址,当所有的服务数据组织起来后,它总得有个先后顺序,某个服务的位置就是它的句柄。还是上面的类比,如果想去图书馆借阅《现代操作系统》,需要查明该书在哪一层楼,哪个房间,这就是该书的Handle

大致分三类:

1. 读取服务的值,需要知道服务的UUID或者Handle;

2. 写服务的值,需要知道服务的Handle;

3. 写服务描述符,需要知道该Descriptor的Handle。 

根据服务的UUID调用API函数GATT_ReadUsingCharUUID 协议栈会返回该服务的Handle。特别注意的是,一个服务的DescriptorHandle总是该服务的Handle+1如电池电量服务的Handle是0x0025,那么它的Descriptor的Handle是0x0026 

蓝牙通信中,Server不能直接访问(读/写)Client,但是可以通知(NotificationClient,通知的前提是Client通过写Descriptor使能通知功能。例如,某Server发现电池电量已经低于安全阀值,它可以调用GATT_Notification通知所有已连接的Client,但是Client接收后如何处理是它自己的事情。 

阅读(873) | 评论(0) | 转发(0) |
0

上一篇:BLE-ANCS协议介绍

下一篇:BLE设备地址

给主人留下些什么吧!~~