传统蓝牙SDP数据元介绍(SDP data element)

零. 概述

本文章主要对SDP 数据元(SDP data element)来做大概的说明,让你了解SDP交互过程中数据元格式的解析

一. 声明

本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:

第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。

第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等

第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层(baseband),链路管理层(LMP)等

第四篇:传统蓝牙host介绍,主要介绍传统蓝牙的协议栈,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的协议吧。

第五篇:低功耗蓝牙controller介绍,主要介绍低功耗蓝牙芯片,包括物理层(PHY),链路层(LL)

第六篇:低功耗蓝牙host介绍,低功耗蓝牙协议栈的介绍,包括HCI,L2CAP,ATT,GATT,SM等

第七篇:蓝牙芯片介绍,主要介绍一些蓝牙芯片的初始化流程,基于HCI vendor command的扩展

第八篇:附录,主要介绍以上常用名词的介绍以及一些特殊流程的介绍等。

另外,开发板如下所示,对于想学习蓝牙协议栈的最好人手一套。以便更好的学习蓝牙协议栈,相信我,学完这一套视频你将拥有修改任何协议栈的能力(比如Linux下的bluez,Android下的bluedroid)。

------------------------------------------------------------------------------------------------------------------------------------------

CSDN学院链接(进入选择你想要学习的课程):https://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144

蓝牙交流扣扣群:970324688

Github代码:https://github.com/sj15712795029/bluetooth_stack

入手开发板:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.18.5aeb41f973iStr&id=622836061708

蓝牙学习目录:https://blog.csdn.net/XiaoXiaoPengBo/article/details/107727900

------------------------------------------------------------------------------------------------------------------------------------------

二.数据表示方法

SDP定义了一种简单的机制来描述包含在属性ID、属性ID范围和属性值中的数据,采用数据元(data element)表示,下面我们来看下数据元格式.

数据元包括两个部分:1)数据头(header field) 2)数据值(data field)

其中数据头又包括两个部分:1)数据类型描述符(type descriptor) 2)数据长度描述符(size descriptor)。

其中,数据元类型由 5 位长的类型描述符代表。数据元头包含在数据元报文头首字节的最高 5 位中。如图:

传统蓝牙SDP数据元介绍(SDP data element)_第1张图片

数据元长度描述符由一个后面紧跟 0 、8 、16 、或 32 位的 3 位尺寸索引字表示。该尺寸索引字包含于数据元头首字节的最低位中。该尺寸索引编码如下.

传统蓝牙SDP数据元介绍(SDP data element)_第2张图片

可能看这个又是一脸懵逼,我们来举几个例子:

例1):

传统蓝牙SDP数据元介绍(SDP data element)_第3张图片

可以看到type是0,size也是0,对应上面的type跟size,截图如下

传统蓝牙SDP数据元介绍(SDP data element)_第4张图片

也就是什么数据都没有,是null type

例2):

传统蓝牙SDP数据元介绍(SDP data element)_第5张图片

对应的type是2,size是1,截图如下:

传统蓝牙SDP数据元介绍(SDP data element)_第6张图片

传统蓝牙SDP数据元介绍(SDP data element)_第7张图片

所以后面就有2bye的有符号16bit数据

例3):

传统蓝牙SDP数据元介绍(SDP data element)_第8张图片

Type是4,size是5

传统蓝牙SDP数据元介绍(SDP data element)_第9张图片

传统蓝牙SDP数据元介绍(SDP data element)_第10张图片

意思就是是string类型,但是长度在下一个8位数据中,可以看到长度表示3,所以后面有3个byte的string类型

以上都是core文档中举的例子,我们来分析一个raw data,达到举一反三的作用

例4):增加点难度

0x19 0x11 0x0D(hex数据)

0x19 = 00011001b ->高5bit是00011b也就是0x03 低3bit是001b也就是0x01

传统蓝牙SDP数据元介绍(SDP data element)_第11张图片

传统蓝牙SDP数据元介绍(SDP data element)_第12张图片

也就是标示是2个byte的UUID,UUID为0x110D

也就是A2DP Profile

看Ellisys分析如下,跟我们的分析完全一致

传统蓝牙SDP数据元介绍(SDP data element)_第13张图片

 

 

你可能感兴趣的:(蓝牙协议剖析,蓝牙协议栈精讲,SDP,数据元,data,element,SDP,element)