Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5001930
  • 博文数量: 1193
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 14351
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
  • 认证徽章:
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1193)

文章存档

2019年(169)

2018年(81)

2017年(80)

2016年(70)

2015年(52)

2014年(41)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: Android平台

2019-07-11 20:02:24

通俗地说吧,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接收后如何处理是它自己的事情。 

阅读(3018) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册