【SDP协议】

news/2025/3/23 10:42:30/

SDP

  • 1.概念
    • 2术语
    • 2.1 SERVICE ATTRIBUTE
    • 2.3 UUID
  • 3 数据表示
    • 3.2 hci log
        • 4.4.4.3 PARTIAL RESPONSES AND CONTINUATION STATE
        • 4.4.4.4 ERROR HANDLING
        • 4.4.4.5 SERVICE SEARCH TRANSACTION
        • 4.4.4.6 SERVICE ATTRIBUTE TRANSACTION
        • 4.4.4.3 SERVICE SEARCH ATTRIBUTE TRANSACTION
          • 4.4.4.3.1 SDP_SERVICE_SEARCH_ATTR_REQ PDU
          • 4.4.4.3.2 SDP_SERVICE_SEARCH_ATTR_RSP PDU

1.概念

服务发现协议(SDP)为应用程序提供了一种方法来发现哪些服务可用,并确定这些可用服务的特征。整个 SDP 是基于 C/S 架构,架构图如下:
请添加图片描述

2术语

SDP 服务器所维护服务的所有信息都包含于一条服务记录中。该服务记录全部由一张服务属性表组成。如下图所示:
请添加图片描述

服务记录包括: 服务句柄 + 服务属性
服务记录句柄是一个32位数字,用于唯一标识SDP服务器中的每条服务记录。通常,每个句柄仅在每个SDP服务器内是唯一的。

2.1 SERVICE ATTRIBUTE

服务属性用于描述某一服务的一个特征。服务属性的实例如下:
请添加图片描述

服务属性 由两个组件组成:属性ID和属性值。
请添加图片描述
Attribute ID 是 1 个 16 位无符号整形的数字
Attribute Value:可变长度

2.3 UUID

UUID是一个通用唯一标识,UUID是一个128位值

Bluetooth_Base_UUID: 00000000-0000-1000-800000805f9b34fb

预分配范围中的UUID值具有表示为16位或32位值的别名。这些别名通常称为16位和32位Uuid,但每个别名实际上都表示128位UUID值.

16位或32位UUID转换成128为UUID:128_bit_value = 16_bit_value * 2 96  + Bluetooth_Base_UUID
128_bit_value = 32_bit_value * 2 96  + Bluetooth_Base_UUID

蓝牙中的UUID:https://www.bluetooth.com/specifications/assigned-numbers/service-discovery/

3 数据表示

SDP 定义了一种简单的机制来描述包含在属性 ID、属性 ID 范围和属性值中的数据,采用数据元(data element)表示。
数据元 包括两个部分: 1)数据头(header field) , 2)数据值(data field)
数据头 又包括两个部分: 数据类型描述符(type descriptor) 数据长度描述符(size descriptor)组成1byte.
数据描述符占字节的高5位,数据长度描述符栈字节的低3位

请添加图片描述数据类型描述符:

请添加图片描述
数据长度描述符:

请添加图片描述
数据类型描述符合数据长度举例如下:

请添加图片描述

3.2 hci log

请添加图片描述```java
35 03 19 12 00

35 = 0011 0101 数据类型描述符为:6 长度描述符为 5
03 长度
19 = 0001 1001 数据类型描述符为:3 长度描述符为1 (表示2字节UUID)


**35如下:**![请添加图片描述](https://img-blog.csdnimg.cn/a9d2ea1d90e14e939ec232c8223110a3.bmp)
![请添加图片描述](https://img-blog.csdnimg.cn/dd178e1adeaf417a8253516df75e6208.bmp)# 4 协议描述
## 4.1 数据格式
大端## 4.2 数据格式
![请添加图片描述](https://img-blog.csdnimg.cn/f9410a1a1a984389ba51e462cc808573.bmp)```java
数据格式:Header + Parameters
Header:PDUID + TransactionID + ParameterLengthTransID:传输消息的 ID,request 放可以在 0x0000~0xffff 之间取任意值,但是 response
要跟 request 一致
PLength:2字节

请添加图片描述

4.4.4.3 PARTIAL RESPONSES AND CONTINUATION STATE

4.4.4.4 ERROR HANDLING

4.4.4.5 SERVICE SEARCH TRANSACTION

4.4.4.6 SERVICE ATTRIBUTE TRANSACTION

4.4.4.3 SERVICE SEARCH ATTRIBUTE TRANSACTION

请添加图片描述
SDP_SERVICE_SEARCH_ATTR_REQ 事务综合 SDP_SERVICE_SEARCH_REQ 和 SDP_SERVICE_ATTR_REQ 二者功能于一个请求中。作为参数,它既包含服务搜索图,又包含 一 张 属 性 表 , 该 属 性 表 从 与 服 务 搜 索 图 匹 配 的 服 务 记 录 中 检 索 。
SDP_SERVICE_SEARCH_ATTR_REQ 及其应答与 SDP_ServiceSearch 和 SDP_ServiceAttribute 两
者相比,显得更复杂并且可能需要更多的字节。但是,使用 SDP_ServiceSearchAttributeRequest
可以减少总的 SDP 事务量,特别是当检索多条服务记录时。具体参数如下:

4.4.4.3.1 SDP_SERVICE_SEARCH_ATTR_REQ PDU
4.4.4.3.2 SDP_SERVICE_SEARCH_ATTR_RSP PDU

http://www.ppmy.cn/news/95450.html

相关文章

Django JWT验证

什么是JSON Web Token(JWT)? JSON Web Token,简称JWT,是一种开放标准(RFC 7519),用于在网络上传输信息,特别是在身份验证和授权方面。JWT是一串编码后的JSON格式字符串&…

C++数据结构:Python风格双向链表Pylist的实现

文章目录 前言一、目的二、代码详解1、Node类模板2、Pylist类构造3、内嵌迭代器4、Python风格insert方法5、Python风格append方法6、Python风格[]下标操作方法7、Python风格、 方法8、Python风格pop方法9、Python风格remove方法10、length、get方法 三、使用示例总结原创文章&a…

什么是web3 | 区块链web3.0人才

文章目录 一、Web31. 什么是web3?2. web3的dapp架构 二、区块链web3.0人才1. 区块链开发技术栈2. 欧易对人才的要求3. 如何成为一名合格的智能合约高级工程师4. web3各个赛道5. 链上数据分析师6. 一些案例 三、参考 一、Web3 1. 什么是web3? 20世纪90年…

Ubuntu下ESP-IDF的环境搭建

目录 1. 前期准备2. 安装ESP-IDF和esp-tools3. 下载子模块和工具链4. 编译HelloWorld工程 1. 前期准备 更新源 sudo apt-get update –y安装相关依赖 sudo apt-get install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache lib…

调用华为API实现身份证识别

调用华为API实现身份证识别 1、作者介绍2、调用华为API实现身份证识别2.1 算法介绍2.1.1OCR简介2.1.2身份证识别原理2.1.3身份证识别应用场景 2.2 调用华为API流程 3、代码实现3.1安装相关的包3.2代码复现3.3实验结果 1、作者介绍 雷千龙,男,西安工程大…

JavaScript 进阶 (一)

目录 作用域 局部作用域 函数作用域 块作用域 全局作用域 作用域链 JS垃圾回收机制 闭包 变量提升 函数进阶 函数提升 函数参数 箭头函数 基本语法 箭头函数参数 箭头函数this 解构赋值 数组解构 对象解构 遍历数组 forEach 方法(重点) …

C语言之网络编程(必背知识点)

一、认识网络 1、网络发展史 网络的来历_百度知道 ARPnetA--Internet--移动互联网--物联网 2、局域网和广域网 局域网(LAN) 局域网的缩写是LAN,local area network,顾名思义,是个本地的网络,只能实现小范围…

Linux:环境变量

否则就不会输出: 这只能临时生效,一旦重启linux后就会消失: 针对用户生效,在文件中的最后写上export 变量名变量值: 打开文件: 输入命令(保存):source .bashrc 因为是正对用户设置的变量&#…