1.概念

    SDP协议让客户机的应用程序发现存在的服务器应用程序提供的服务以及这些服务的属性。SDP只提供发现服务的机制,不提供使用这些服务的方法。每个蓝牙设备都需要一个SDP Service,只做Client的蓝牙设备除外。

2.ServiceRecord
    每一个Service利用ServiceRecord来表示(具有唯一的32bit的Handle),每一个ServiceRecord由若干ServiceAttribute组成,由下图表示:

每一个ServiceAttribute的结构由下图所示:

    
Attribute ID是由Assigned Value定义好的,例如Record Handle Attribute的ID为0x0000。
正因为SDP Record由许多Attribute组成,所以,可以把Record看成AtributeList,这在后面的SDP resposne中会常用到。
设备通过SDP request来访问这些record的相关信息。这里有个很好的SDP实例,如下:
Service Class ID List描述了Service的类型,如0x00000000代表SDP service
Protocol Descriptior List 列出了可能使用这种Service的protocol
 
3.Data Element
Data Element是在SDP中定义的一种数据结构,用来表示ServiceAttribute的Value域。每一个data element由Type+Size两部分组成。
Type的定义如下图:

Size的定义如下图:

几个Data Element的例子:

4.Service Class

    每一个Service都是ServiceClass的一个实例,一个Service Record就是一个Service Class的实例,Service Class可以表示一个Record里的所有Attribute。每一个Service Class有一个ID,包含在ServiceClassIDList这个Attribute的value里,称之为UUID。
 
5.UUID
   一个全局惟一的标识符,128bit。为了节省存储和传输开销,UUID的一些位已经固定,出现了16bit和32bit的两种UUID。这些不同bit的UUID可以相互转化,如下式:

6.SDP的数据单元格式(SDU)
    传输时都是以Big-Endian的形式,数据格式如下:

PUD ID有如下几种定义:

Transaction ID和Length定义如下:
7.SDP中的PDU
(1)Error PDU

(2)SDP_ServiceSearchRequest PDU

 ServiceSearchPattern由UUID组成,每个UUID由data lement组成。MaximumServiceRecordCount用来指定返回的Service Records Handles的最大个数,由于该参数为2字节,所以其取值区间就是0x0001~0xffff。由于一个ServiceSearchPattern相匹配的Service Records Handles可能有多个,所以指定该参数非常的有必要。
 
(3)SDP_ServiceSearchResponse PDU

TotalServiceRecordCount用来表示匹配的Service Record个数,最大为65535(而且不能够大于MaximumServiceRecordCount),如果没有配置的Service Record,则其值为0。

CurrentServiceRecordCount用来表示当前PDU中返回的Service Record Handle的个数。

ServiceRecordHandleList包含了当前PDU中返回的所有Service Record 的Handles,每一个Handle用一个32bit的数据来表示,所以该参数的长度就是4×CurrentServiceRecordCount字节。

(4)SDP_ServiceAttributeRequest PDU

ServiceREcordHandle是通过SDP_ServiceSearchResponse获取到的特定的Service的Service Record Handle。

参数MaximumAttributeByCount用来指定返回Attribute Value的最大总长度,以字节为单位。

第三个参数AttributeIDList用来指定一组AttributeIDList,可以是几个AttributeID,以可以是一个ID Range,如果是前者,则长度为16位,如果为后者,则长度为32位。

(5) SDP_ServiceAttributeResponse PDU

AttributeListByteCount用来表示Package中包含的数据的总长度,该值应该是小于SDP_ServiceSearchRequest中的MaxmumAttributeByteCount的一个值。

第二个参数AttributeLists是Service Record Attribute 的列表项,每一项包含了Attribute ID和Attribute Value两部分。

(6)SDP_ServiceSearchAttributeRequest PDU

ServiceSearchPattern和SDP_ServiceSearchRequest中完全一样。

第二个参数MaxmumAttributeByteCount用来指定返回Attribute Value的最大总长度,以字节为单位。

第三个参数AttributeIDList用来指定一组AttributeIDList,可以是几个AttributeID,以可以是一个ID Range,如果是前者,则长度为16位,如果为后者,则长度为32位。

(7)SDP_ServiceSearchAttributeResponse PDU

AttributeListByteCount用来表示Package中包含的数据的总长度,该值应该是小于SDP_ServiceSearchRequest中的MaxmumAttributeByteCount的一个值。

第二个参数AttributeLists是Service Record Attribute 的列表项,每一项包含了Attribute ID和Attribute Value两部分。

8.一些Attributes

两种attribute每个service record都有:1.ServiceRecordHandle (attribute ID 0x00002).ServiceClassIDList (attribute ID 0x00001)

(1)ServiceRecordHandle Attribute

(2)ServiceClassIDList Attribute

(3)ServiceRecordState Attribute

(4)ServiceID Attribute


其余很多Attribute参考SPEC。

 

蓝牙的SDP协议总结的更多相关文章

  1. 蓝牙SDP协议概述

    之前写了一篇 bluedroid对于sdp的实现的源码分析   ,他其实对于sdp 协议本身的分析并不多,而是侧重于 sdp 处于Android bluedroid 架构中的代码流程,这篇文章,是针对 ...

  2. SDP协议译稿(Part 1)

    本文的翻译内容是基于Bluetooth Core Spec 2.1+EDR 协议中对SDP的描述,很多都是个人的理解,难免有疏漏,有争议或者疑问的地方,欢迎在此留言进行探讨. 2. Overview ...

  3. SDP协议分析

    一.SDP协议介绍 SDP 完全是一种会话描述格式 ― 它不属于传输协议 ― 它只使用不同的适当的传输协议,包括会话通知协议(SAP).会话初始协议(SIP).实时流协议(RTSP).MIME 扩展协 ...

  4. SDP协议

    会话描述协议(SDP)为会话通知.会话邀请和其它形式的多媒体会话初始化等目的提供了多媒体会话描述.它只是用来描述,而不是一种传输协议.举例,在SIP协议的Message Header的Content- ...

  5. [转] SDP协议

    [转] SDP协议 http://blog.csdn.net/dxpqxb/article/details/18706471 1.SDP协议概述 SDP(Session Description Pro ...

  6. ZT 蓝牙的AVCTP协议笔记

    蓝牙的AVCTP协议笔记 (2013-07-31 08:52:41) 转载▼ 标签: bluetooth avctp command response 分类: Bluetooth 1.概述     A ...

  7. ZT 蓝牙的AVDTP协议笔记

    我的电子杂烩饭 http://blog.sina.com.cn/wuchuchu2012 [订阅][手机订阅] 首页 博文目录 图片 关于我 个人资料 Tifnan Qing 微博 加好友 发纸条 写 ...

  8. SDP协议简述

    SDP协议也是文本协议,只需要按照协议本身的格式填充.SDP协议格式即详细信息如下: 会话描述 格式及举例 v=(protocol version) v=0 o=(owner/creator and ...

  9. (转)SDP协议概述

    1 简介 SDP 完全是一种会话描述格式, 它不属于传输协议. 它使用不同的适当的传输协议,包括会话通知协议(SAP).会话初始协议(SIP). 实时流协议(RTSP).MIME 扩展协议的电子邮件以 ...

随机推荐

  1. Fragment基础讲解

    //新建一个碎片public class LeftFragment extends Fragment { @Override public View onCreateView(LayoutInflat ...

  2. mysql指定某行或者某列的排序

    方法: 通过desc: 都无法实现: 方法一: select sp.productid,sp.productname,ss.sku from sp_product sp inner join sku_ ...

  3. 在Windows下利用Eclipse调试FFmpeg

    目录 [隐藏]  1 环境与软件 2 第一步:安装MinGW 3 第二步:配置编译环境 4 第三步:配置SDL 5 第四步:编译 5.1 编译faac 5.2 编译fdk-aac 5.3 编译x264 ...

  4. HTML-Audio/Video

    简介: 容器:不论是音频还是视频文件,实际上都是容器文件: 视频文件包含了音频轨道.视频轨道和其他一些元数据: 视频文件播放时,音频轨道和视频轨道是绑定在一起:元数据包含了该视频的封面.子标题.字幕等 ...

  5. Playmaker Input篇教程之PlayMaker菜单概述

    Playmaker Input篇教程之PlayMaker菜单概述 Playmaker InputPlayMaker菜单概述 Playmaker插件被导入游戏项目以后,会自动为Unity编辑器添加一个名 ...

  6. Unity中制作游戏的快照游戏支持玩家拍快照

    Unity中制作游戏的快照游戏支持玩家拍快照 有些游戏支持玩家“拍快照”,也就是将游戏的精彩瞬间以图片的形式记录下来的功能.这个功能比较有趣,而且以后的用途也会很广,为此本节打算介绍:截取矩形区域内游 ...

  7. Oracle 使用小计(2)

    1.时间转换 1.1 字符串转时间 今天需要写SQL语句更新数据库的时间,按照SQL Server的习惯写成 UPDATE TABLE A ’ WHERE ORDER_ID = ‘A12345678’ ...

  8. BZOJ3807 : Neerc2011 Lanes

    左右与右左是两个独立的问题 设f[i]表示i时刻左右车道减少一条的答案 g[i]表示i时刻右左车道增加一条的答案 ans=min(f[i]+g[i+r]) 计算f[i]: 首先暴力计算出f[m+1], ...

  9. HDU 2579 (记忆化BFS搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2579 题目大意:走迷宫.对于障碍点,只有当前(dep+1)%k才能走,问最少时间. 解题思路: 只有 ...

  10. CentOS6.4 内核优化

    vi /etc/sysctl.conf net.ipv4.tcp_syncookies = net.ipv4.tcp_tw_reuse = net.ipv4.tcp_tw_recycle = net. ...