OBEX作为一种基础协议,以对象模型封装信息数据,以会话协议规范传输应用,在以信息传输为底层实现的各项应用中得到了广泛的应用。在蓝牙技术的开发应用中,OBEX是很多应用剖面的底层协议,在其基础上封装实现了不同蓝牙剖面应用,大大拓展了蓝牙技术的应用领域,所以有必要深入研究并剖析OBEX协议。文中从对象模型和会话协议两个方面详细介绍了OBEX协议,并解析了其在蓝牙OPP、PBAP上的绑定实现。
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请求会被服务器端视为错误的请求而给与错误回应。
PBAP(PhoneBook Access Profile)是专门为蓝牙车载设备自动下载手机内的电话本和呼叫日志而定义的一套协议,它将电话本和呼叫日志定义成特定的对象模型,定义了五种文件-Local Phone电话本、SIM卡电话本、Dialed Call、Missed Call、Received Call,文件类型Type和文件名Name均固定,如SIM卡的电话本文件类型为"x-^/phonebook",文件名为"SIM1/telecom/pb.vcf"。
PBAP在OBEX上的适配非常简单,客户端(车载设备)向服务器端(手机)发起连接请求时指定Target为796135f0-f0c5-11d8-0966-0800200c9a66(十六进制),表示OBEX连接的目的是PBAP应用,建立连接后,客户端发起GET命令,请求类型为"x-^/phonebook",名称为"SIM1/telecom/pb.vcf"的文件,便能下载SIM卡中的电话本。PABP可以通过一个Application Specific Header设置电话本数据即VCARD中含有的属性,一般设置为含有VERSION-版本、N名字、TEL电话号码,PHOTO之类的数据量很大但无用的属性便可以过滤掉,从而减少了传输数据量,加快了下载速度。
相比较于没有得到普及的IrMC电话本同步,PBAP只提供下载功能,而没有动态更新的功能,从而不用定义特别的命令,在OBEX之上采用GET命令便能实现,正因其简单,所以被大多数手机厂商所接受得到了大量的应用。
维库电子通,电子知识,一查百通!
已收录词条48237个