当前位置: 首页 > news >正文

蓝牙SDP协议概述

服务发现协议(SDP)

在这里插入图片描述
整个 SDP 是基于 C/S 架构,如下图:
在这里插入图片描述
总结起来,整个服务器应该包含如下结构(0 条或者多条记录):
在这里插入图片描述
服务类定义了这个服务记录中包含的属性;包括属性的id以及属性值的用法和格式
每个服务类都有个UUID
例如:
在这里插入图片描述

数据表示方法

SDP 定义了一种简单的机制来描述包含在属性 ID、属性 ID 范围和属性值中的数据,采用数据元(data element)表示,下面我们来看下数据元格式数据元包括两个部分:1)数据头(header field) 2)数据值(data field)
其中数据头又包括两个部分:1)数据类型描述符(type descriptor) 2)数据长度描述符(size descriptor)。
数据类型描述符占5位,含义如下:
在这里插入图片描述
数据长度描述符占3位:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

协议说明

SDP 是大端数据模式
在这里插入图片描述
在这里插入图片描述
Transaction ID:传输消息的 ID,request 放可以在 0x0000~0xffff 之间取任意值,但是 response要跟 request 一致,根据 TID 来区分是回应哪个 request

特殊参数说明:CONTINUATION STATE

它用于一次 response 不够把所有的 Data 传回去的情况。这时候需要将 response 分多次传输,
如果一次 response 足够了,Continuation State 为 1 个字节=0。
如果要分多次 response,需要重新 request,采用新的 transaction ID 和上一次 resposne 的
Continuation State,用以下流程说明。
情况一:不需要 Continuation State
A—>B 发送 SDP request,transaction ID 为 C
B—>A 发送 SDP respose,transaction ID 为 C。假设一次 resposne 可以返回所有数据,则
Continuation State 为 1 个字节=0。
情况二:需要 Continuation State
A—>B 发送 SDP request,transaction ID 为 C
B—>A 发送 SDP respose,transaction ID 为 C。假设一次 resposne 不够返回所有数据,这时
response 携带 Continuation State M
A—>B 发送 SDP request,transaction ID 为 D(必须与 C 不同),携带 Continuation State M
B—>A 发送 SDP respose,transaction ID 为 D。假设这次 resposne 还不够返回所有数据,这
时 response 携带 Continuation State N
A—>B 发送 SDP request,transaction ID 为 E,携带 Continuation State N
B—>A 发送 SDP respose,transaction ID 为 E。假设一次 resposne 返回的是最后的一部分数
据,则 Continuation State 为 1 个字节=0。
整个 request-response 的流程结束。

SERVICE SEARCH TRANSACTION

REQ:
在这里插入图片描述
ServiceSearchPattern:一般就是需要一个数据元代表 UUID,最多一次携带12个uuid
MaximumServiceRecordCount 是一个16位计数,指定响应此请求时要返回的最大服务记录句柄数。
SDP服务器不会返回超过指定值的句柄。如果匹配请求的服务记录超过N条,SDP服务器将决定在响应中返回哪些匹配的服务记录句柄。
范围:Ox0001-0xFFFF

RSP:
在这里插入图片描述
TotalServiceRecordCount是一个整数,包含与请求的服务搜索模式匹配的服务记录的数量。如果没有服务记录匹配请求的服务搜索模式,则该参数设置为0。N不应该大于SDP_SERVICE_SEARCH_REQ中指定的MaximumServiceRecordCount值。
当使用多个部分响应时,每个部分响应包含TotalServiceRecordCount的相同值。
范围:0 x0000-0xffff
CurrentServiceRecordCount是一个整数,表示下一个参数中包含的服务记录句柄的数量。如果没有与请求的服务搜索模式匹配的服务记录,则该参数设置为0。N不应该大于当前响应中指定的TotalServiceRecordCount值。
范围:Ox0000-0xFFFF
ServiceRecordHandleList,这个就是符合req中的uuid的服务句柄

SERVICE ATTR TRANSACTION

REQ:
在这里插入图片描述
ServiceRecordHandle:是service search获取到到句柄
MaximumAttributeByteCount:这个就是属性值数据的最大值,相当于规定了rsp中payload长度的最大值
AttributeIDList:是一个数据元素序列,其中列表中的每个元素要么是一个属性ID,要么是一个属性ID范围。每个属性ID被编码为一个16位无符号整数数据元素。每个属性ID范围被编码为32位无符号整数数据元素,其中高16位被解释为范围的开始属性ID,低16位被解释为范围的结束属性ID。AttributelDList中包含的属性ID应按升序排列,不允许任何属性ID值重复。注意:所有属性都可以通过指定范围0x0000到0xFFFF来请求。
RSP:
在这里插入图片描述
AttributeListByteCount:这个值代表rsp里AttributeList中参数的长度,它不能超过req中的MaximumAttributeByteCount
AttributeList:AttributeList是一个包含属性id和属性值的数据元素序列。序列中的第一个元素包含要返回的第一个属性的属性ID。序列中的第二个元素包含相应的属性值。列表中连续的元素对包含附加的属性ID和值对。只有在服务记录中具有非空值且其属性id在SDP_SERVICE_ATTR_REQ中指定的属性才包含在AttributeList中。服务记录中没有值的属性的AttributeList中既没有属性ID,也没有属性值。属性按照属性ID值的升序排列。

SERVICE SEARCH ATTRIBUTE TRANSACTION

REQ:
在这里插入图片描述
RSP:
在这里插入图片描述

相关文章:

  • 5.8线性动态规划2
  • gitkraken 使用教程
  • JS逆向-7881游戏平台Lb-Sign参数和Lb-Timestamp参数
  • 【SpringBoot】从环境准备到创建SpringBoot项目的全面解析.
  • 数据集-目标检测系列- 烟雾 检测数据集 smoke >> DataBall
  • 基础语法(二)
  • 视觉-语言基础模型作为高效的机器人模仿学习范式
  • Ubuntu 22.04(WSL2)使用 Docker 安装 Zipkin 和 Skywalking
  • 2025年“深圳杯”数学建模挑战赛C题国奖大佬万字思路助攻
  • Windows CMD通过adb检查触摸屏Linux驱动是否被编译
  • 【BYD_DM-i技术解析】
  • 浅谈装饰模式
  • 2025年全新 GPT 4.5 AI 大模型 国内免费调用
  • 阿里云CDN的源站配置:权重的详解
  • 坐席业绩可视化分析工具
  • ChatTempMail - AI驱动的免费临时邮箱服务
  • java-----------------多态
  • CommunityToolkit.Mvvm详解
  • LeRobot 项目部署运行逻辑(六)——visualize_dataset_html.py/visualize_dataset.py
  • Google的A2A和MCP什么关系
  • 面对非专业人士,科学家该如何提供建议
  • 长期对组织隐瞒真实年龄,广元市城发集团原董事韩治成被双开
  • 4月金融数据前瞻:受去年低基数因素影响,社融增量有望同比大幅多增
  • 毗邻三市人均GDP全部超过20万元,苏锡常是怎样做到的?
  • 两部门发布外汇领域行刑反向衔接案例,织密金融安全“防护网”
  • 首批18位!苏联籍抗日航空英烈信息更新