蓝牙attribute protocol
2016-06-06 15:48
274 查看
一条attribute包括type,
handle,value以及permission。
Type用128bit的UUID定义。为了减少存储和传输消耗,对于一部分经常用的UUID,官方定义了一个规则,以16位或32位形式存储和传输,它们都是基于BluetoothBase
UUID:
00000000-0000-1000-8000-00805F9B34FB。16位或32位UUID转化为128位的格式如下:
128_bit_value = 16_bit_value * 296
+ Bluetooth_Base_UUID//存储和传输的是112位到97位
128_bit_value = 32_bit_value * 296
+ Bluetooth_Base_UUID //存储和传输的是128位到97位
对于私有的UUID,存储和传输的是128位。
Handle:是访问attribute value的唯一方法,两个字节,最小值为0x0001,
最大值为0Xffff,不能为0x0000。
Value:以字节为基本单位,有些attribute的长度是固定的,有些则是不固定的。
Permission:
Access permission: readable, writeable,readable and writeable.
Encryption permission: required or notrequired.
Authentication permission: required ornot required.:访问attribute的时候,如果required,那么需要建立一条authenticated
link,无论是response还是notification和indication。
Authorization permission: required ornot required.
后面三种permission是access
permission的辅助。
Control-point attribute:不能读,可以写或notify,indicate。这一类attribute基本是在给定的步骤完成之后用于激活一个功能。如高通的SPC值。
ATT_MTU,双方交换ATT_MTU。一条attribute的value如果比ATT_MTU长,这样的attribute称为long
attribute,要读这样的long attribute,在读完第一条之后,需要使用read
blob的方法获取剩余的attribute value。
ATT协议是sequential protocol,意思是如果client发送了request,那么必须等到收到response,才能发送下一条ATT
request,但可以发command。如果server发送了indication,那么必须等到收到confirmation,server才能发送下一条indication,但可以发notification。一句话,request和response必须一一匹配,indication和confirmation必须一一匹配。一对request/response或indication/confirmation称为一个transaction。
ATT PDU:
Opcode:一个字节,bit7指示是否有authentication
signature。Bit6指示该操作是否为command。Bit5-0位为method。
Attribute parameter:是method而定。
Authentication signature:如果bit7为1,则加12字节的签名,如果为0,则为0字节。Method按照method
type分,有request,response,indication,confirmation,
command,notify。Request和response为一对,indication和confirmation为一对,command和notify单独使用,无需回复。
按功能分,则主要有:find,read,write,command,notification,indication和confirmation。
Find information:输入start和end
handle,返回format指示attribute
type的format是16bit还是128bit,再加上attribute
handle和attribute type pair。注意,一条response中只有一种format。
Find by type value:
通过type和value匹配来返回handles
informationlist。通常用于group attribute。不怎么理解???Handle
information的结构为found attribute handle和group
end handle。
Read by type request:根据type匹配来读取handle-value
pair.
Read request:
根据handle来读取attribute
value。
Read blob type:
根据handle和offset来读剩余的attributevalue。
Read multiple request:根据handle组来读取attribute
value。需要匹配到组里所有的handle且都允许被读,才能获取attribute
value。每个handle对应的attribute长度必须为已知的固定值,这样才能解析返回的attribute
value组。
Read by group type request:
根据group type匹配来读取handle-group
endhandle-attribute value组。
Write request:根据handle写attribute
value。
Write command:根据handle写attribute
value,不需要返回response。
Write signed command:根据handle写attribute
value,request中带authenticationsignature。
Prepare write request:告诉server接收了之后暂存以便之后写入。Request包含handle,offset,value。Offset是指一条attribute中,部分写入的attribute的offset。需要response。可以多条Prepare
write request,可以不同的handle。
Execute write request:通知server将之前接收到的prepare
write request的attribute value进行写入操作。
Notification:server通知client,包含handle和value,
client不需要回复server。如果是long
attribute,那么需要client通过Read
Blog将剩余的attribute value读回来。
Indication:server指示client,包含handle和value,需要client的confirmation回复。如果是long
attribute,那么需要client通过Read
Blog将剩余的attribute value读回来。
Confirmation:只需要Opcode就行了。
一条attribute包括type,
handle,value以及permission。
Type用128bit的UUID定义。为了减少存储和传输消耗,对于一部分经常用的UUID,官方定义了一个规则,以16位或32位形式存储和传输,它们都是基于BluetoothBase
UUID:
00000000-0000-1000-8000-00805F9B34FB。16位或32位UUID转化为128位的格式如下:
128_bit_value = 16_bit_value * 296
+ Bluetooth_Base_UUID//存储和传输的是112位到97位
128_bit_value = 32_bit_value * 296
+ Bluetooth_Base_UUID //存储和传输的是128位到97位
对于私有的UUID,存储和传输的是128位。
Handle:是访问attribute value的唯一方法,两个字节,最小值为0x0001,
最大值为0Xffff,不能为0x0000。
Value:以字节为基本单位,有些attribute的长度是固定的,有些则是不固定的。
Permission:
Access permission: readable, writeable,readable and writeable.
Encryption permission: required or notrequired.
Authentication permission: required ornot required.:访问attribute的时候,如果required,那么需要建立一条authenticated
link,无论是response还是notification和indication。
Authorization permission: required ornot required.
后面三种permission是access
permission的辅助。
Control-point attribute:不能读,可以写或notify,indicate。这一类attribute基本是在给定的步骤完成之后用于激活一个功能。如高通的SPC值。
ATT_MTU,双方交换ATT_MTU。一条attribute的value如果比ATT_MTU长,这样的attribute称为long
attribute,要读这样的long attribute,在读完第一条之后,需要使用read
blob的方法获取剩余的attribute value。
ATT协议是sequential protocol,意思是如果client发送了request,那么必须等到收到response,才能发送下一条ATT
request,但可以发command。如果server发送了indication,那么必须等到收到confirmation,server才能发送下一条indication,但可以发notification。一句话,request和response必须一一匹配,indication和confirmation必须一一匹配。一对request/response或indication/confirmation称为一个transaction。
ATT PDU:
Opcode:一个字节,bit7指示是否有authentication
signature。Bit6指示该操作是否为command。Bit5-0位为method。
Attribute parameter:是method而定。
Authentication signature:如果bit7为1,则加12字节的签名,如果为0,则为0字节。Method按照method
type分,有request,response,indication,confirmation,
command,notify。Request和response为一对,indication和confirmation为一对,command和notify单独使用,无需回复。
按功能分,则主要有:find,read,write,command,notification,indication和confirmation。
Find information:输入start和end
handle,返回format指示attribute
type的format是16bit还是128bit,再加上attribute
handle和attribute type pair。注意,一条response中只有一种format。
Find by type value:
通过type和value匹配来返回handles
informationlist。通常用于group attribute。不怎么理解???Handle
information的结构为found attribute handle和group
end handle。
Read by type request:根据type匹配来读取handle-value
pair.
Read request:
根据handle来读取attribute
value。
Read blob type:
根据handle和offset来读剩余的attributevalue。
Read multiple request:根据handle组来读取attribute
value。需要匹配到组里所有的handle且都允许被读,才能获取attribute
value。每个handle对应的attribute长度必须为已知的固定值,这样才能解析返回的attribute
value组。
Read by group type request:
根据group type匹配来读取handle-group
endhandle-attribute value组。
Write request:根据handle写attribute
value。
Write command:根据handle写attribute
value,不需要返回response。
Write signed command:根据handle写attribute
value,request中带authenticationsignature。
Prepare write request:告诉server接收了之后暂存以便之后写入。Request包含handle,offset,value。Offset是指一条attribute中,部分写入的attribute的offset。需要response。可以多条Prepare
write request,可以不同的handle。
Execute write request:通知server将之前接收到的prepare
write request的attribute value进行写入操作。
Notification:server通知client,包含handle和value,
client不需要回复server。如果是long
attribute,那么需要client通过Read
Blog将剩余的attribute value读回来。
Indication:server指示client,包含handle和value,需要client的confirmation回复。如果是long
attribute,那么需要client通过Read
Blog将剩余的attribute value读回来。
Confirmation:只需要Opcode就行了。
相关文章推荐
- Windows系统中使用C#编写蓝牙通信程序的简单实例
- android通过蓝牙接收文件打开时无法自动选择合适的应用程序
- Android开发中编写蓝牙相关功能的核心代码讲解
- Android系统中的蓝牙连接程序编写实例教程
- Android设备间实现蓝牙(Bluetooth)共享上网
- Android提高之蓝牙隐藏API探秘
- Android编程之蓝牙测试实例
- Android提高之蓝牙传感应用实例
- Android Bluetooth蓝牙技术使用流程详解
- Android Bluetooth蓝牙技术初体验
- Android 蓝牙防丢实现(一)
- Win10如何使用蓝牙传输文件?Win10使用蓝牙传输文件的方法
- 蓝牙与红外传输
- 蓝牙-信息时代的黑马
- 玩转Blueteeth Chat蓝牙交友
- SyncML在蓝牙车载免提装置中的应用
- 手机指令大全,需要可以看看
- 蓝牙英文-译文
- ***工具