zoukankan      html  css  js  c++  java
  • 蓝牙的OBEX协议

    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等,操作十分简单。

  • 相关阅读:
    第五章 数据的共享与保护
    实验6
    实验5
    实验4 类与对象2)
    实验三 类与对象
    实验2
    2018—3-21第二章程序例题(2)
    第二章思维导图
    2018—3-18C++第二章程序例题
    汇编实验九
  • 原文地址:https://www.cnblogs.com/senior-engineer/p/9842322.html
Copyright © 2011-2022 走看看