蓝牙 SDP服务查询协议
2.1 SDP CLIENT-SERVER ARCHITECTURE
SDP 客户端-服务端 架构
我们如何知道哪个设备是client哪个设备时server呢?
比如拿耳机和手机举例,如果耳机和手机都支持server和client,那么就要看L2CAP的CID了,比如耳机先发起SDP L2CAP连接,那么这个通道CID耳机设备作为client,被连的手机设备作为server。
4.2 PROTOCOL DATA UNIT FORMAT
协议数据包格式
PDU(protocol data unit)是指协议数据单元,也就是client往server发的包的类型,TID类似于每个包的一个标识id,比如client发起请求TID是0,那么client收到server的响应的TID也应该是0。
4.7.1 SDP_SERVICE_SEARCH_ATTR_REQ PDU
MaximumAttributeByteCount
这个是指响应该请求时返回属性数据最大字节数N,如果超过规定字节数N,则需要分包
比如下面N=0x0500(1280字节,大端字节序)
下面响应的AttributeLists数据包大小没有超过N,那么ContinuationState=0(无需分包)
译文:
MaximumAttributeByteCount 指定响应该请求时返回的属性数据的最大字节数。 SDP 服务器在响应 PDU 中返回的属性数据不得超过 N 个字节。 如果请求的属性需要多于N个字节,SDP 服务器决定如何对列表进行分段。 在这种情况下,客户端可以通过发出包含在先前响应 PDU 中返回的连续状态的请求来请求每个连续段。 在需要多个响应PDU来返回属性数据的情况下,MaximumAttributeByteCount指定每个响应PDU中包含的属性数据部分的最大大小。 范围:0x0007 至 0xFFFF
ContinuationState
指是否分包
译文:
ContinuationState 由 8 位计数 N 组成,表示字节数
连续状态信息,后面是 N 字节的连续信息。 如果当前响应已完成,则此参数由值为 0 的单个字节组成。如果给出部分响应,则可以在后续请求中提供 ContinuationState 参数以检索响应的其余部分。
如果生成部分响应,则响应可以任意分段为多个 PDU(受到 AttributeListByteCount 参数的允许值范围的约束)。 部分响应中的属性不需要完全位于单个 PDU 内。
4.7.2 SDP_SERVICE_SEARCH_ATTR_RSP PDU
AttributeListsByteCount
译文:
AttributeListsByteCount 包含 AttributeLists 参数中字节数的计数。 N 绝不能大于 SDP_SERVICE_SEARCH_ATTR_REQ 中指定的 MaximumAttributeByteCount 值。
范围:0x0002 至 0xFFFF
参考链接
Bluetooth Core Specification v5.3
https://www.bluetooth.com/specifications/specs/
Assigned_Numbers
https://www.bluetooth.com/specifications/specs/assigned-numbers/