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

蓝牙对象交换协议(OBEX) - 常见的opcode介绍

 零.声明

本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:

第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。

第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等

第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层(baseband),链路管理层(LMP)等

第四篇:传统蓝牙host介绍,主要介绍传统蓝牙的协议栈,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的协议吧。

第五篇:低功耗蓝牙controller介绍,主要介绍低功耗蓝牙芯片,包括物理层(PHY),链路层(LL)

第六篇:低功耗蓝牙host介绍,低功耗蓝牙协议栈的介绍,包括HCI,L2CAP,ATT,GATT,SM等

第七篇:蓝牙芯片介绍,主要介绍一些蓝牙芯片的初始化流程,基于HCI vendor command的扩展

第八篇:附录,主要介绍以上常用名词的介绍以及一些特殊流程的介绍等。

另外,开发板如下所示,对于想学习蓝牙协议栈的最好人手一套。以便更好的学习蓝牙协议栈,相信我,学完这一套视频你将拥有修改任何协议栈的能力(比如Linux下的bluez,Android下的bluedroid)。

-------------------------------------------------------------------------------------------------------------------------

蓝牙视频教程(跟韦东山老师合作):

https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.20.5aeb41f98e267j&id=693788592796

蓝牙交流扣扣群:765961169

Github代码:GitHub - sj15712795029/bluetooth_stack: 这是一个开源的双模蓝牙协议栈(bluetooth.stack)(btstack),可以运行在STM32,Linux.,包含HCI,L2CAP,SDP,RFCOMM,HFP,SPP,A2DP,AVRCP,AVDTP,AVCTP,OBEX,PBAP等协议,后续会继续维护,以达到商用的目的

入手开发板:https://shop220811498.taobao.com/category-1542116976.htm?spm=a1z10.5-c-s.w4010-22329603913.7.39ca7dbe2EA0K3&search=y&catName=%C0%B6%D1%C0%BF%AA%B7%A2%B0%E5#bd

蓝牙学习目录:一篇文章足够你学习蓝牙技术,提供史上最全的蓝牙技术(传统蓝牙/低功耗蓝牙)文章总结,文档下载总结(2020/12/11更新)_Wireless_Link的博客-CSDN博客_蓝牙eir

--------------------------------------------------------------------------------------------------------------------------

一. 常见的opcode

1. Connect Operation

Request以及response数据格式如下:

Opcode: 0x80就是connect的操作码,在上面的表中已经列出

connect packet length:连接请求的包长度(这个包的所有长度)

OBEX version number:OBEX版本信息

Flags:我们一般都设置为0

maximum OBEX packet length:OBEX最大封包大小,最大为0xffff,也就是64Kbyte-1

下面我们来看一个btsnoop加深下印象,后面我们再通过PBAP,MAP,OPP,FTP等协议来详细讲解obex connection的后续参数

1)connect的btsnoop

Raw data hex为:80 00 1A 13 00 02 80 46 00 13 79 61 35 F0 F0 C5 11 D8 09 66 08 00 20 0C 9A 66

80 -> connect opcode

00 1a -> packet length,也就是26

13 -> obex version,也就是V1.3

00 -> flag

02 80 -> maximum OBEX packet length即640byte

后续就是pbab的数据,等讲到pbap的时候再详细说

2)connect response的btsnoop

Raw data为:A0 00 1F 10 00 02 80 CB 00 00 00 01 4A 00 13 79 61 35 F0 F0 C5 11 D8 09 66 08

00 20 0C 9A 66

A0 -> Success,在上面的response的地方已经介绍

00 1F -> packet len,也就是31byte

10 -> obex版本,1.0

00 -> flag

02 80 -> maximum OBEX packet length即640byte

后续就是pbab的数据,等讲到pbap的时候再详细说

NOTED:我看SIG中又IRDA_SPEC_V20的版本,所以我把OBEX版本设置为V2.0,但是在Iphone报错,这点大家也可以注意下,我贴一个Btsnoop上来

2. Disonnect Operation

我个人觉得这个大概了解就行,不需要对这个操作来深入,因为我觉得在上层Profile中,如果想执行断开动作,那么我们只需要断开Profile对应的rfcomm channel就行,我们还是贴下格式:

3. Put Operation

4. Get Operation

Get操作从服务端返回一个对象。

Get操作的格式如下:

Byte 0

Bytes 1,2

Bytes 3 to n

0x03

包长度

一组Header

回应格式如下:

Byte 0

Bytes 1,2

Bytes 3 to n

Response Code

包长度

可选Header

关于Get操作更详细的用法将在文件传输部分作解释。

5. Abort Operation

Abort操作中断一个多包操作(例如发送一个大文件)。Abort操作可以包含描述中断原因的Description Header。

Abort操作的格式如下:

Byte 0

Bytes 1,2

Bytes 3 to n

0xFF

包长度

可选Header

Abort对应的应该是一个成功的操作(0xA0),指明这个操作已被接收并且服务端已经重新与客户端同步。如果返回的另外的值,客户端应该Disconnect。

6. SetPath Operation

SetPath操作用于切换对方的路径。通常使用一个Name Header用于指定对方路径名称。如果为空,则返回默认目录,通常为根目录

SetPath操作格式如下:

Byte 0

Bytes 1,2

Byte 3

Byte 4

Bytes 5 to n

0x85

包长度

Flags

Constants(常数)

可选Header

注:Flags可以设置Bit0Bit1Bit0表示退回到上一层目录;Bit1表示如果目录不存在就创建一个目录,否则返回一个错误

回应格式如下:

Byte 0

Bytes 1,2

Bytes 3 to n

ResponseCode

包长度

可选Response Header


http://www.mrgr.cn/news/16062.html

相关文章:

  • Python知识点:如何使用SQLAlchemy进行ORM(对象关系映射)
  • 如何扩展 WSL 2 虚拟硬盘的大小
  • 鸿蒙OS试题(2)
  • 技术风暴中的应急策略:开发团队如何应对突发故障与危机
  • 深度学习的基础_多层感知机的手动实现
  • 搜索引擎技术之网络爬虫(非常详细)零基础入门到精通,收藏这一篇就够了
  • UniaApp引入Iconfont
  • 微分方程(Blanchard Differential Equations 4th)中文版Section5.6
  • 如何在3D无序抓取中应用深度学习算法?
  • Leetcode 剑指 Offer II 093.最长的斐波那契子序列的长度
  • 数字乡村振兴智慧农业整体规划建设方案
  • 关于一个早期对电子辐射的小讨论
  • 学习资料销售平台小程序的设计
  • vue.js项目实战案例源码
  • 盘点免费且靠谱的AI大模型 API,统一封装,任性调用!
  • LeetCode题集-1- 两数之和
  • 鸿蒙Next-拉起支付宝的三种方式——教程
  • 容器编排工具的选择:Kubernetes(K8s)与 K3s 的权衡与实践|Kubernetes|K3s|容器编排|资源受限环境
  • 基于Hutool 判断 日期是否 跨日,月,天
  • XSS LABS 靶场初识