《电子技术应用》
您所在的位置:首页 > 通信与网络 > 设计应用 > OBEX在蓝牙开发中的应用
OBEX在蓝牙开发中的应用
摘要: 介绍下OBEX协议的特点及应用,从对象模型和会话协议两个方面详细分析OBEX协议,然后针对OBEX在蓝牙开发中的典型应用,介绍下其在OPP和PBAP上的适配和绑定。
关键词: 蓝牙 OBEX PBAP OPP
Abstract:
Key words :

OBEX是信息交换应用中用处甚广的协议,它起源于红外,但又不局限于具体的传输方式,可以在蓝牙、USB、UART等传输接口上应用。OBEX是蓝牙应用中的基础协议,很多剖面都是在OBEX的基础上实现的,本文首先介绍下OBEX协议的特点及应用,从对象模型和会话协议两个方面详细分析OBEX协议,然后针对OBEX在蓝牙开发中的典型应用,介绍下其在OPPPBAP上的适配和绑定。


OBEX协议简述

OBEX(Object Exchange)协议将点对点设备间的信息交互应用以面向对象的方式分解为数据+操作,把数据柔性抽象为对象来描述,同时定义一种信息交互方式规范操作。OBEX协议的两个关键部分便是定义了对象模型和会话方式,对象模型依据应用而定,定义了Header描述对象的一个方面,Header的集合便是一个完整的对象。会话采用请求-响应方式,客户端发起请求,服务器端给与响应。下面从对象模型和会话协议上详细解析下OBEX协议。


对象模型

对象模型是对对象本身的抽象描述,它定义了Header的概念,一个Header描述对象的一个方面。对象模型是一系列Header的集合体,依据应用而定,因为OBEX是很多应用的基础协议,所以这里的应用包括底层信息交互操作及其之上的应用。对象模型可以认为是对象和应用之间的载体,因为它一方面描述了对象信息,另一方面又满足具体应用的可操作性。

下面对Header举个例子。比如文件传输应用,将文件抽象为对象模型时,需要的Header有文件名称Name、文件数据长度DataLength、文件类型Type,可能还会有Application specific Header即具体应用相关的Header,比如定义MASK选定文件数据只包含某些属性。

Header的形式为ID+Value,ID为单字节,它定义了Value类及其表示格式,Bit7和Bit6指定了Value值的格式,如ID==0x01则表示Name,格式为两字节长度+以0x00结尾的字符串数据的方式,当文件名为test.txt时,Header即为01 00 0b 't' 'e' 's' 't' '.' 't' 'x' 't' 00。ID作为Value的一种描述,就像Header只是对象的一种描述一样,这种定义方式大大扩展了OBEX的Header空间。


会话协议

OBEX会话协议定义了请求-响应形式的会话式操作,定义发起请求的一端为客户端,给与响应的为服务器端,OBEX应用便是在客户端和服务器端的一系列请求-响应会话中完成的。OBEX以“操作符”的方式来定义请求,以“回应符”的方式定义响应。操作符包括:连接CONNECT(0x80)、断开连接DISCONNECT(0x81)、发送PUT(0x02,0x82)、索取GET(0x03,0x83)、设置路径SETPATH(0x85)、中止当前会话ABORT(0xff);回应符有0x90-继续、0xA0-成功和其他表示错误原因的回应符。

OBEX是个严谨的协议,其会话协议的设计实现首先遵从一问一答的会话方式,如果在没有应答之前发送下一个请求会造成服务器端拒绝该请求;其次客户端和服务器端都定义了一系列状态表示会话进程及进行状态的跳转,比如当前进行的PUT操作,当操作符为0x02,服务器端给与回应符0x90之后,客户端这时不能进行GET操作,必须等到发完了最后一包即操作符为0x82,服务器端给与回应符0xA0之后才能发起GET请求,否则GET请求会被服务器端视为错误的请求而给与错误回应。


OBEX在PBAP中的应用

PBAP(PhoneBook Access Profile)是专门为蓝牙车载设备自动下载手机内的电话本和呼叫日志而定义的一套协议,它将电话本和呼叫日志定义成特定的对象模型,定义了五种文件-Local Phone电话本、Sim卡电话本、Dialed Call、Missed Call、Received Call,文件类型Type和文件名Name均固定,如SIM卡的电话本文件类型为"x-bt/phonebook",文件名为"SIM1/telecom/pb.vcf"。

PBAP在OBEX上的适配非常简单,客户端(车载设备)向服务器端(手机)发起连接请求时指定Target为796135f0-f0c5-11d8-0966-0800200c9a66(十六进制),表示OBEX连接的目的是PBAP应用,建立连接后,客户端发起GET命令,请求类型为"x-bt/phonebook",名称为"SIM1/telecom/pb.vcf"的文件,便能下载SIM卡中的电话本。PABP可以通过一个Application Specific Header设置电话本数据即VCARD中含有的属性,一般设置为含有VERSION-版本、N名字、TEL电话号码,PHOTO之类的数据量很大但无用的属性便可以过滤掉,从而减少了传输数据量,加快了下载速度。


相比较于没有得到普及的IrMC电话本同步,PBAP只提供下载功能,而没有动态更新的功能,从而不用定义特别的命令,在OBEX之上采用GET命令便能实现,正因其简单,所以被大多数手机厂商所接受得到了大量的应用。


OBEX在OPP中的应用

OPP(Object Push Profile)对象推送协议,是蓝牙在OBEX协议的基础上定义实现的一个专属协议,它做为一个手动传输协议,用于资源在设备间的共享传输。OPP的应用加入了人为的选择操作,大大扩展了共享对象的选择空间,可以选择音乐、电影、文档、图片或者一条电话号码手动PUSH到目标机。

OPP中的对象采用File的形式封装,FileName Header后缀有.mp3、.mov、.doc、.jpg、.vcf等,对应在Type Header上都有相应的MIME类型,数据在PUT请求中分段传输,目标机根据Type判断对象属性从而进行相应的操作,比如当类型为"text/x-vcard"时,便能判断出PUSH的对象为vCard形式的电话本条目,从而可以根据vCard规范提取出人名,电话号码等属性。


结语

OBEX定义了对象模型以描述各种数据,同时定义请求响应的会话方式,将点对点设备的信息交互应用统一起来,本文阐述了OBEX的思想,并针对OBEX在蓝牙中的应用,以PBAP、OPP为例讲述了以OBEX为基础的蓝牙协议的绑定实现,对采用OBEX做蓝牙开发的工程师具有很好的指导意义。

此内容为AET网站原创,未经授权禁止转载。