当前位置: 首页 > news >正文

蓝牙OBEX和PBAP协议概述

OBEX 全称为 Object Exchange,是对象交换协议,蓝牙的 OBEX 是 IrOBEX 的子集,其中对象是一个柔性概念,可以包括文件,诊断信息,电子商务卡片(Vcard),银行的存款,短信消息等等。Objects 在这里没有高级的技术含义,而是视你的应用而定。

对象模型回答了对象是如何在 OBEX 协议描述的。这个模型必须包括被传输的对
象和对对象的描述。为了做到这点,OBEX 定义了 Headers 的概念。
一个 Header 反映了对象的一个方面,例如名字、长度、描述文字或者对象本身。
例如,一个文件对象 demo.txt 会包含它的名字,一个类型标示为“text”,长
度和文件本身。
Headers 的构成
Headers 简单的由<Header ID>和<Header Value>组成,简称为<HI>和<HV>。
HI 由一个字节组成,指出了 Header 包含的内容以及它的格式。HV 包含了一个或
者多个字节,其结构由 HI 所决定。
所有的 Header 都是可选的,取决于设备的类型和事务的种类。你可以使用所有
的 Header,或者一些,或者没有。ID 可以使 Header 可解析以及与传输顺序无关,
也可以使不支持的 Header 被忽略掉。
HI 又可以分为两部分,高 2 位和低 6 位。高 2 位确定了 HI 的编码方式(见表二),
低 6 位确定了 HI 的意义(见表三)。
在这里插入图片描述
其中,0x4C也就是App.Parameter,是给OBEX的上层协议提供的,可以填一些上层应用的特定参数,是基于TLV结构的,tag和len都占用1个字节

OBEX请求和响应
request 和 response都是如下结构
在这里插入图片描述
request的opcode
在这里插入图片描述
response的opcode
在这里插入图片描述
OBEX 用于蓝牙的 opcode 格式
connect operation
在这里插入图片描述
个人理解,connect request的header中应该包含target header,说明要连接什么服务,connect response的header中应该包含connection id header,说明这个服务连接到了哪个id,之后的操作中需要使用这个id。

disconnect operation
put operation
get operation
abort operation
这几个都是一样的标准OBEX请求和响应格式
setpath operation
SetPath 操作用于切换对方的路径。通常使用一个 Name Header 用于指定对方路径名称。如果为空,则返回默认目录,通常为根目录
在这里插入图片描述

PBAP 概念
电话本访问协议 Phone Book Access Profile (PBAP)用于访问电话本对象(通
过 Vcard 形式),是基于客户端/服务器的模型,一般用于 client 从 server 下
载电话本。这个协议为为 HFP/SIM 协议设计。分为两个角色
Phone Book Server Equipment (PSE)
Phone Book Client Equipment (PCE)

在这里插入图片描述
在这里插入图片描述
可以看到两个架构在 OBEX 层以下稍微有点不同,V1.2 之前是 OBEX 直接走
RFCOMM,但是在 V1.2 后基于 GOEP 的版本,如果是 GOEP V2.0 以后那么走 L2CAP
ertm,如果是 1.1 版本,那么继续走 RFCOMM,对旧版本做兼容

只有当 PCE 跟 PSE 都在 SDP 中宣称 GOEP 2.0 或者更新的情况下数据走 L2CAP,
否则数据走 RFCOMM
PBAP 连接只是单向的,只能 PCE 去连接 PSE

建立PBAP连接
主要是target header 其中 796135f0-f0c5-11d8-0966-0800200c9a66 就是PBAP 的 UUID
连接响应格式如下:
在这里插入图片描述

phone book download feature
PullPhonebook 功能,整个流程是这样,PCE 连接了 PSE 的前提下,下载电话本,直到下载结束或者取消下载。
这个功能就是下载电话本的功能,用 OBEX Get 功能,参数如下:
在这里插入图片描述
Connection ID:这个是在 connection response 的时候获取到的参数
Single Response Mode:这个是在 GOEP 2.0 或者更新的版本必须要使用。
Single Response Mode Param:这个是在 GOEP 2.0 或者更新的版本必须要使用。
Name:要下载的电话本名称,是虚拟文件夹的绝对路径,比如你要下载手机中的所有的电话本,那么这个名字就是:telecom/pb.vcf,比如你要下载 SIM 卡中的电话本,这个名字就是:SIM1/telecom/pb.vcf,比如你要下载手机全部的通话记录,那么 name 就是:telecom/cch.vcf ,总之就是虚拟文件夹的绝对路径+.vcf 格式,另外这里要提下,编码方式是 unicode,也就是一个字符占用两个byte.
Type:类型,在 PBAP 中一直是 x-bt/phonebook
Application - PropertySelector:用于过滤返回 vcard 中属性,如果没有设置这个或者设置为 0,那么 vcard 中所有属性都会返回,另外,有几个属性会强制返回,不管你有没有设定,这个是区分 Vcard 版本,Vcard2.1 会强制返回VERSION ,N and TEL,Vcard3.0 会强制返回 VERSION, N, FN and TEL
Application - Format:vcard 格式,00是vcard2.1,01是vcard3.0
Application - MaxListCount:这个代表最大可以下载多少笔 vcard,设置为 0 可以获取到手机有多少笔 vcard.
Application - ListStartOffset:这个就是下载的开始偏移,如果你想从 50 笔开始下载,那么就设置为 50,如果你不设置或者设置为 0,那么默认从 0 开始

response的参数如下
在这里插入图片描述
其中 Body/End of Body 就是 vcard 数据

Phone Book Browsing feature
其中 SetPhonebook 就是进入 PBAP server 特定的虚拟文件夹
其中 PullvCardListing 就是下载 vCard 列表
其中 PullvCardEntry 就是下载特定的 vCard 数据

SetPhoneBook function是用OBEX的setpath请求,在应用参数中填上connect id和name(路径)就行了

PullvCardListing function
vcard list 是一组 xml 格式的对象,采用 utf-8 编码,vcard list 的 example
在这里插入图片描述
这个功能是下载 vCard 列表的功能,也是用的 OBEX 的 Get 封包,整个 request封包格式为:
在这里插入图片描述
Name:就是你要下载的虚拟文件夹路径
Type:固定为 x-bt/vcard-listing

PullvCardEntry function
这个就是根据 entry number 来下载特定 vcard 数据的功能,封包格式如下:
在这里插入图片描述
返回数据如下:
在这里插入图片描述

http://www.xdnf.cn/news/553663.html

相关文章:

  • 项目计划缺乏可行性,如何制定实际可行的计划?
  • 利用 SQL Server 作业实现异步任务处理,简化系统架构
  • 集成思想在算法(目标检测)中的体现
  • 芯片分享之AD5542性能介绍
  • docker 安装 Nacos
  • 从复杂度到有序:大模型专家系统的进化之路——深入解析层次化专家模式
  • Linux bash shell的循环命令for、while和until
  • 策略调度平台实现总结
  • MySQL基础关键_014_MySQL 练习题
  • KeepassXC (Win10) 打不开的解决方法
  • Nginx笔记
  • 开疆智能Profinet转RS485网关连接电磁流量计到西门子PLC配置案例
  • STM32--串口函数
  • 随机数种子seed和相关系数ρ
  • vue3 + echarts(5.6.0)实现渐变漏斗图
  • vue2实现【瀑布流布局】
  • 粤港澳编程题
  • 【HTML-2】HTML 标题标签:构建网页结构的基础
  • Tomcat配置详情
  • 解码数据语言:如何优雅的进行数仓字典建设?
  • C++:迭代器
  • C++数据结构——红黑树
  • 如何使用通义灵码辅助开发鸿蒙OS - AI编程助手提升效率
  • centos7配置静态ip 网关 DNS
  • 数据实时同步:inotify + rsync 实现数据实时同步
  • 《深入理解指针数组:创建与使用指南》
  • 【C/C++】static关键字的作用
  • 计算机图形学Games101笔记--几何
  • 计算机视觉与深度学习 | matlab实现ARIMA-WOA-CNN-LSTM时间序列预测(完整源码和数据)
  • VMD查看蛋白质-配体的分子动力学模拟轨迹