Bluetooth SDP

1、 what is SDP?

      SDP(service discovery protocol:服务发现协议)。SDP协议让客户机的应用程序发现存在的服务器应用程序提供的服务以及这些服务的属性。

      SDP提供了一套SDP server和SDP client之间的通讯方法。 SDP server维护着一个服务条目列表,这个列表存放着SDP server对应的服务以及服务特性。每个服务条目对应一个单独的服务。SDP client可以通过发送请求得到SDP server维护的这个服务条目list。

      如果SDP client或者联系于client之上的应用程序决定使用某个service,则打开一个针对此服务的连接到服务提供者去使用此服务。SDP只是提供侦测service以及特性的方法,但不提供如何使用这些service的方法

     每个bluetooth device最多有一个SDP server。 如果某个device只作为client.则不需要拥有SDP server。而一个bluetooth device可以同时为SDP client和SDP server。

 

2、 SDP record

     SDP server维护的service条目包含在service record中,即每一个Service利用ServiceRecord来表示(具有唯一的32bit的Handle),每一个ServiceRecord由若干ServiceAttribute组成,如下图表示:    

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

其中,Attribute ID是由Assigned Value定义好的,例如Record Handle Attribute的ID为0x0000。


所以,我们可以把Service Record看成一个Attribute List。当Client来读取SDP server时,实际上就是获取这个Attribute List中的信息。

这里有个很好的SDP实例,如下:

Service Class ID List描述了Service的类型,如0x00000000代表SDP service。
Protocol Descriptior List 列出了可能使用这种Service的protocol。

注意:当SDP server添加或删除某个service时,不会主动提供给client.

 

 

3、 Data Element

     Data Element是在SDP中定义的一种数据结构,用来表示Service Attribute的Attribute Value域。每一个data element由Type+Size两部分组成。
1) Type的定义如下图:

2) Size的定义如下图:

3)举例:

 

4、 Service Class

     每一个Service都是Service Class的一个实例,即一个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 Data Format(大端)

1)PDU ID格式:

2)Transaction ID and ParameterLength:

 

7、 SDP的PDUs举例

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字节。
 

 

 

 

 

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Bluetooth是一种短距离无线通信技术,提供了低功耗和低成本的数据传输方式。为了实现这种技术,需要对Bluetooth的源码进行研究和学习。Bluetooth源码主要包含了协议栈、芯片驱动和应用层等几个方面。 首先,协议栈是Bluetooth源码的最底层,由物理层、链路层和协议层组成。物理层是指蓝牙无线通信的物理特性,链路层是对物理层进行协议处理,协议层则实现了各种蓝牙通信协议,如RFCOMM、L2CAP和SDP等,对于理解和掌握Bluetooth源码非常重要。 其次,芯片驱动是实现物理层和链路层之间接口的重要组成部分。通过对芯片驱动的研究和了解,可以深入理解Bluetooth的底层技术和实现方式。同样,在实际应用过程中,针对不同的芯片驱动进行适配和测试也是很重要的。 最后,应用层是Bluetooth源码中最直观的部分,包括了各种应用场景。相比底层的协议栈和芯片驱动,应用层更加直观和易于理解,可以让人们更好地理解Bluetooth的使用方式和实现原理。 总之,掌握Bluetooth源码有助于我们更深入地了解蓝牙技术和实现方式,并且对于蓝牙应用开发和适配也是非常有帮助的。 ### 回答2: Bluetooth是一种使用无线电波进行短距离通信的技术,它可以在设备之间传输数据。Bluetooth技术源码是指与Bluetooth相关的程序源代码,包括Bluetooth协议堆栈和应用程序等。简单来说,这些源码是将Bluetooth功能实现的代码。 Bluetooth协议堆栈源码包括多个层次,包括物理层、链路层、LMP层、L2CAP层、RFCOMM层等。这些层次共同实现了蓝牙通信的不同功能,比如广播、连接、数据传输等。每个层次都有自己的协议和接口,如果我们想要了解和修改蓝牙协议的行为,我们需要查看这些源码。 除了协议堆栈,蓝牙应用程序的源码也是非常重要的。这些应用程序可以实现蓝牙功能的不同方面,如文件传输、音频和视频传输等。通过研究这些应用程序的源码,我们可以了解应用程序如何使用蓝牙技术实现特定的功能。 总的来说,蓝牙源码对于开发者和研究人员来说都是非常有价值的。它们为我们提供了一个深入了解蓝牙技术工作原理的机会。作为开发者,我们可以使用蓝牙源码来创建自己的蓝牙应用程序或者修改协议堆栈源码以优化蓝牙通信。 ### 回答3: Bluetooth 是一种短距离无线通信技术,它能够在不同的设备之间进行通信,例如手机、电脑、耳机、汽车等等。其中,蓝牙源码是指蓝牙应用层协议栈和底层协议栈的程序代码。 蓝牙源码是由蓝牙 SIG(蓝牙特别兴趣小组)制定的规范进行开发的,它包含了多种协议,例如 L2CAP(逻辑链路层控制和适配协议)、RFCOMM(无线串口协议)、AVCTP(音频/视频控制传输协议)等等,以及一些应用层协议,例如 HFP(蓝牙耳机规范)、A2DP(蓝牙音频规范)等等。 在 Android 系统中,蓝牙源码包含在 Bluetooth 模块中,它由 Android 操作系统自带的 BlueZ 软件栈进行实现,可以通过 Android SDK 的 API 进行调用。蓝牙源码的实际实现涉及到了许多技术和算法,例如频率跳跃、链路管理、安全认证等等,同时还面临一些困难和挑战,例如不同设备的兼容性、距离限制和干扰等问题。 总之,蓝牙源码是实现蓝牙通信的关键程序代码,通过对它进行研究和开发,可以让不同设备之间更加便捷、稳定和安全地进行通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值