蓝牙的OBEX协议

摘要:
OBEX在蓝牙协议层中的位置如下图所示:2.ObjectModelOBEX定义了一个Objectmodel,以请求响应的形式交换数据。5.总结了OBEX协议用于蓝牙中的对象交换,该协议源于红外OBEX协议。OBEX协议规定客户端和服务器以请求-响应的形式进行通信,请求-响应有两种数据形式:请求和响应。常见的OBEX操作位(如Connect、disconnect、Put和Get)非常简单。

1.概述

    OBEX为Object Exchange,用于在蓝牙设备间传数据对象,来源于红外定义的协议,后被蓝牙采用。OBEX在蓝牙协议层中的位置如下图(在之前的OBEX版本中,OBEX是通过RFCOMM挂在L2CAP上的):

蓝牙的OBEX协议

2.Object Model

    OBEX定义了Object model来进行数据的交换,形式为Request-Response。OBEX定义了Headers来描述数据,结构如下:

<HI, the header ID> 1byte

<HV, the header value>  n byte

由HI和HV两部分组成。HI的最高两位表示这个Header的编码形式,低6位表示header的类型,HV表示数据实体。

高两位的编码如下:

蓝牙的OBEX协议
0x00和0x40两种后面会跟上2字节的length(length prefixed),表示的是整个Header的长度,包括HI和HV。

低6位的定义类型如下:

蓝牙的OBEX协议

提一下End-Of-Body,用来表示数据传输的最后一个data chunk。

3.Request和Response

    在OBEX的规定中,Client和Server通过request-response的形式来进行对话,交换的数据包含在这两种包中,分别定义如下:

(1)Request format

蓝牙的OBEX协议
参数opcode表示该request的类型,length表示整个request的字节数,最后跟着的是第2节中定义的各种Headers。

Opcode有如下几种形式:

蓝牙的OBEX协议

opcode的最高位称为Final bit,用来表示某一个request的最后一个packrt,这个在下面的例子中说明。

(2)Response format

蓝牙的OBEX协议
参数response code表示该response的类型,length表示整个request的字节数,最后跟着的是第2节中定义的各种Headers。

response code的最高位称为Final bit,用来表示可以继续传输数据,这个在下面的例子中说明,其有如下几种:

蓝牙的OBEX协议

4.几种常见的操作及其实例

(1)Connect

蓝牙的OBEX协议
一个Connect的实例:

蓝牙的OBEX协议
可以看出,rquest中带了两个Header,分别是Count和Length。

(2)Disconnect

蓝牙的OBEX协议
(3)Put

蓝牙的OBEX协议
一个Put的实例:

蓝牙的OBEX协议

在这个例子中,可以看出OpCode和Response code的final bit的作用。在client端,用Put命令发送数据时,如果不是最后一个packet,Final bit都是为0,最后一个packet时时置为1;在server端, 当接受到Final bit为0的client端的request时,response的final bit总是置为1,表示可以继续传输,当收到最后一个request时,发现client发过来的request置为1了,这时候response的final bit变为0。

5,总结

    OBEX协议在蓝牙中用于对象交换,来源于红外的OBEX协议。OBEX协议规定Client与Server之间以Request-Response的形式进行对话,有Request和response两种数据形式。常用的OBEX的操作位Connect,disconnect,Put,

Get等,操作十分简单。

免责声明:文章转载自《蓝牙的OBEX协议》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mongodb 系列 ~ journal日志畅谈Git查看与修改用户名、邮箱下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

文件下载之断点续传(客户端与服务端的实现)

原文:http://www.cnblogs.com/zhaopei/p/download.html 阅读目录   文件下载-服务端 使用a标签提供文件下载 使用Response.TransmitFile提供文件下载 其他方式文件下载 文件下载-客户端 直接下载 异步下载 断点续传 断点续传(服务端的支持) 多线程同时下载(分片下载) 前面讲了文件...

Win7/8双系统共用蓝牙鼠标

相信不少同学的电脑都是Windows7/8双系统,在双系统切换的时候普通的鼠标并不会因为系统改变而无法使用,而由于蓝牙是一对一传输,当系统连接蓝牙设备的时候,会随机生成一个link ID,Win7 和win8 会生成不同的linkID。因此每次配对都会改变其link ID,所以导致不同OS的蓝牙不能共用,即使是同一蓝牙芯片也不可以。解决方法:首先需要在两个...

Jmeter 正则表达式提取Response Headers,Response Body里的值

实践过程中遇到需要提取Response Headers,Response Body里的值 一、获取Response Body的值,这里采用json提取器形式 1、Response Body返回值,如下图,要获取ticket的值 2、新建json提取器,获取ticket的值 下图新建json提取器步骤 上图参数: names of createdVar...

Java开发小技巧(五):HttpClient工具类

前言 大多数Java应用程序都会通过HTTP协议来调用接口访问各种网络资源,JDK也提供了相应的HTTP工具包,但是使用起来不够方便灵活,所以我们可以利用Apache的HttpClient来封装一个具有访问HTTP协议基本功能的高效工具类,为后续开发使用提供方便。 文章要点: HttpClient使用流程 工具类封装 使用实例 HttpClient...

spring mvc Response header content type

Xml代码 <bean >      <property name="messageConverters">    <list>     <ref bean="mappingJacksonHttpMessageConverter" /><!-- json转换器 -->    </list&g...

Django的View(视图)

Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。 无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你当前项目目录下面。除此之外没有更多的要求了——可以说“...