蓝牙学习笔记之OBEX_PBAP协议(九)

目录

OBEX_PBAP协议概览

OBEX协议简介

Obex对象模型(Object Model)

Obex标题(Headers)

标题描述(Header descriptions)

Obex会话协议(Session Protocol)

请求格式

回复格式

PBAP协议简介

Pbap对象和格式

对象类型

对象实体

PBAP特征

PBAP功能举例

PullPhoneBook Function

OBEX_PBAP协议数据分析


OBEX_PBAP协议概览

我首先对下面两个将要介绍的协议做一个宏观是的介绍,先来看一下在整个协议栈中的结构:

蓝牙学习笔记之OBEX_PBAP协议(九)_第1张图片

从上图中我们可以看到,最上层的是应用在此处为pbap,往下则是vcard的数据格式处理层,在往下是obex协议,它为上层的应用提供数据交互的接口;之后则是rfcomm和sdp,他们分别提供服务发现和模拟串口的功能,具体去看相关协议;最后则是l2cap和hci层,他们为上层协议,提供了一个统一的数据传输通道。

所以我们想要学习pbap,首先得学习obex协议,pbap的数据都包含在obex参数的包体中,后面对数据分析的时候我们将会看到。

OBEX协议简介

SIG的使用的OBEX是基于IrDA obex,它其实是一个红外通讯协议,是一种紧凑、高效的二进制协议,可以让各种设备以一种简单二自然的方式交换数据。

OBEX由两个主要部分组成:一个表示对象的模型(和描述对象的信息),以及一个会话协议,为设备之间的“对话”提供一个结构。

Obex对象模型(Object Model)

对象模型解决了对象如何由OBEX表示的问题。模型必须处理被传输的对象和对象的信息。它通过将各个部分组合成一系列的标题来实现这一点。标题是描述对象的某些方面的实体,例如名称、长度、描述性文本或对象主体本身。

  • Obex标题(Headers)

每个标题由两部分组成:标题标识(HI,header ID)和标题值(HV,header value)。标题标识由一个字节组成,其描述如下表所示:

高两位(bits 6-7)是Header Encoding,他指明了标题内容的数据格式,如下图所示:

低六位(bits 0-6)是头标识(header ID),指定标题的类型如下图:​​​​​​

蓝牙学习笔记之OBEX_PBAP协议(九)_第2张图片

 

  • 标题描述(Header descriptions)

针对每一个类型的介绍大家去看《IrDA Object Exchange Protocol V13》的第2.2节,内容较多,我就不一一介绍了,这个文档在我的网盘链接中有,自己去下载。

Obex会话协议(Session Protocol)

Obex的会话也是基于请求(request)/回复(response)模型。

  • 请求格式

请求包的数据格式如下图:

Opcode的类型定义以及详细介绍在《IrDA Object Exchange Protocol V13》的第3.3节,包括每一中类型具体的数据格式。每种类型具体的该使用哪些header则由上层的profile如pbap决定。

  • 回复格式

回复包的数据格式如下图:

Response cod的类型定义以及详细介绍在《IrDA Object Exchange Protocol V13》的第3.2.1节,

 

PBAP协议简介

PBAP定义了用于检索电话本对象的设备所使用的协议和程序。它基于客户机-服务器交互模型,客户端设备从服务器设备中提取电话本对象。客户端只能获取对象,而不能修改服务器的对象。

Pbap对象和格式

  • 对象类型

Pbab定义了六种对象类型:

  1. PB联系人电话本
  2. ICH来电历史记录
  3. OCH拨出历史记录
  4. MCH未接电话历史记录
  5. CCH组合历史记录,即来电、拨出和未接全部记录
  6. SPD快速拨号,比如可以指定按键1为某联系人的快速拨号按键
  7. FAV最爱联系人

上述在手机虚拟文件系统中的结构图如下图:

蓝牙学习笔记之OBEX_PBAP协议(九)_第3张图片

如需要访问pb则在请求包中需指定其对象的位置(telecom/pb.vcf),该参数会在header ID=Name中指定。

  • 对象实体

所谓对象实体可以是某个联系人,一个对象实体中会包含类似下表中一个或多个的信息,这里我只是贴了一部分,在《rfc2426.vCardMIMEDirectoryProfile》的第3章和《vCard The Electronic Business Card Version 2.1》第2章都有详细的介绍。大家有兴趣可以去了解一下,这两份文档都可以在我的网盘链接中找到。

蓝牙学习笔记之OBEX_PBAP协议(九)_第4张图片

下面我们举一个实例,如下图所示的,每一个实体都是由BEGIN:VCARD开始,并由END:VCARD结束,中间包含了VERSION、FN、N等属性:

蓝牙学习笔记之OBEX_PBAP协议(九)_第5张图片

 

 

PBAP特征

Pbap的特征指定了可以进行哪些操作,以及每个操作中有可以获取或者设置哪些信息。对于符合本规范的设备,它应遵守下列实施要求表,现在的蓝牙pbap支持前两个特性:

蓝牙学习笔记之OBEX_PBAP协议(九)_第6张图片

Pbab协议列举了上表中前两个特性Download和Browsing映射的功能:

蓝牙学习笔记之OBEX_PBAP协议(九)_第7张图片

 

 

PBAP功能举例

上节我们列举了四种功能PullPhoneBook、SetPhoneBook、PullvCardListing、PullvCardEntry,下面将对这四种功能中PullPhoneBook的操作流程以及会话的数据格式做一个简述,更详细或其他功能介绍的内容在《PBAP_v1.2.1》第5章,大家有兴趣可以去深入了解。

  • ​​​​​​​PullPhoneBook Function

其会话格式也是建立在OBEX会话协议的基础上,分为请求包和回复包。

请求包的格式如下:

蓝牙学习笔记之OBEX_PBAP协议(九)_第8张图片

回复包的格式如下:

蓝牙学习笔记之OBEX_PBAP协议(九)_第9张图片

Field域参数的描述参考《IrDA Object Exchange Protocol V13》,该文档我已经放在我的网盘链接中,需要自己去下载。

Header阈:

  1. Connction ID:在连接建立期间接收的连接ID,用于标识某个连接。具体请参阅OBEX规范。
  2. Name:名称应该包含PSE的虚拟文件夹架构中的绝对路径,附加的是一个电话簿对象的文件表示的名称,如想要获取pb的数据,则需要指定虚拟文件路径(名称)为:telecom/pb.vcf
  3. Type:类型用于指示要接收的对象的类型,在pbab的协议中,其的内容为:x-bt/phonebook
  4. Application Parameters:一个可扩展标头,在《》PBAP_v1.2.1》的第5.1.4节,有对扩展项目的详细介绍

OBEX_PBAP协议数据分析

上面我们对两个协议的内容都做了一下简单的介绍,下面我们将对OBEX_PBAP完整的一次建立和通讯过程的数据进行分析。

以下蓝色为HCI部分、绿色为L2CAP部分、黄色部分为RFCOMM部分,紫色为OBEX部分数据,红色为PBAP部分数据,这里我只针对OBEX和PBAP协议进行解析,如果你对其他协议有兴趣,可以去看我的其他协议的数据分析。

 

1、Phone Book Client Equipment (PCE):connect

00000010 00000010 00100000 00100011 00000000 00011111 00000000 01000001 00000000 10011101 11111111 00110101 01111000 10000000 00000000 00011010 00010000 00000000 00000001 11110100 01000110 00000000 00010011 01111001 01100001 00110101 11110000 11110000 11000101 00010001 11011000 00001001 01100110 00001000 00000000 00100000 00001100 10011010 01100110 10010100

此包格式在《IrDA Object Exchange Protocol V13》第3.3.1节。

OBEX

Packet Status:1Final Packet,该位描述在《Ir OBEX》第3.1节)

Opcode:00000000x00connect,该位描述在《Ir OBEX》第3.3节)

Length:00000000 000110100x001a数据长度为26

OBEX Version:00010000 obex的版本为0x10

RFA:0000000(留作将来使用)

Flags:0(当为request是,该位无作用)

Maximum Packet Length:00000001 111101000x01f4,包的最大长度为500

Header:Target

Header Encoding:01Byte Sequence,该位描述在《Ir OBEX》第2.1节)

Header ID:0001100x06Target,该位描述在《Ir OBEX》第2.1节)

Length:00000000 000100110x0013,此header的数据长度为19

Target:01111001 01100001 00110101 11110000 11110000 11000101 00010001 11011000 00001001 01100110 00001000 00000000 00100000 00001100 10011010 01100110128 bituuid,代表pbap,在《PBAP_v1.2.1》第6.4节有描述)

2、Phone Book Client Equipment (PCE):connect

00000010 00000010 00100000 00100011 00000000 00011111 00000000 01000001 00000000 10011101 11111111 00110101 01111000 10000000 00000000 00011010 00010000 00000000 00000001 11110100 01000110 00000000 00010011 01111001 01100001 00110101 11110000 11110000 11000101 00010001 11011000 00001001 01100110 00001000 00000000 00100000 00001100 10011010 01100110 10010100

同上。

3、Phone Book Server Equipment (PSE) :OK

00000010 00000010 00100000 00101000 00000000 00100100 00000000 01001100 00000000 10011111 11111111 00111111 00000100 10100000 00000000 00011111 00010000 00000000 00000001 11110100 11001011 00000000 00000000 00000000 00000001 01001010 00000000 00010011 01111001 01100001 00110101 11110000 11110000 11000101 00010001 11011000 00001001 01100110 00001000 00000000 00100000 00001100 10011010 01100110 01001110

此包格式在《IrDA Object Exchange Protocol V13》第3.3.1节。

OBEX

Packet Status:1Final Packet

Response Code:01000000x20success

Length:00000000 000111110x001f数据长度为31

OBEX Version:00010000 obex的版本为0x10

RFA:0000000(留作将来使用)

Flags:0(支持LrLMP复用,《Ir OBEX》第3.3.1.2节有描述)

Maximum Packet Length:00000001 111101000x01f4,包的最大长度为500

Header:Connection ID

Header Encoding:114 Byte

Header ID:0010110x0bConnection ID

Connection ID:00000000 00000000 00000000 000000010x00000001,连接   标识为1

Header:Who

Header Encoding:01Byte Sequence

Header ID:0010100x0aWho

Length:00000000 000100110x0013,此header的数据长度为19

Target:01111001 01100001 00110101 11110000 11110000 11000101 00010001      11011000 00001001 01100110 00001000 00000000 00100000 00001100 10011010 01100110128 bituuid,代表pbap

 

篇幅原因,上面我只举了前两个协议交互例子进行分析,后续的协议的log以及数据分析,以及相关资料,请到我的博客<蓝牙学习笔记(序)>最下面的网盘链接中下载!​​​​​​​

你可能感兴趣的:(蓝牙协议栈)