蓝牙RFCOMM协议概述

RFCOMM概述

概念

RFCOMM 协议提供了对 L2CAP 协议上的串行端口的模拟。该协议基于 ETSI 标准 GSM 07.10。

RFCOMM 采用与 TS07.10 相同的字节序列方式。所有二进制数字都按照从低位到高位的顺序,从左至右读。

在这里插入图片描述

两个使用RFCOMM通信的蓝牙设备可以打开多个仿真串行端口。RFCOMM支持多达60个开放仿真端口;但是,设备中可以使用的端口数量是特定于实现的。数据链路连接标识符(Data Link Connection Identifier, DLCI)在GSM 07.10中用于标识客户端和服务器应用程序之间正在进行的连接。dcl由6位表示,但它的可用值范围是2…61;在GSM 07.10中,DLCI 0是专用的控制通道,DLCI 1由于服务器通道的概念而无法使用,保留了dcls 62-63。DLCI在两个设备之间的一个RFCoMM会话中是唯一的。(这将在第2.3.2节中进一步解释)考虑到客户端和服务器应用程序可能驻留在RFcoMM会话的两端,其中任何一方的客户端都相互独立地建立连接,因此划分了DLCI值空间

RFCOMM帧格式

RFCOMM支持SABM,UA,DM,DISC,UIH五种帧

在这里插入图片描述
Q:RFCOMM 的 initiator 跟 responser 是什么意思?
A:建立连接的设备(通过在 DLCI 0 上发送 SABM 命令)称为 initiator,响应的设备(通过在 DLCI 0 上发送 UA 响应)称为 responder。
这里有一个注意的点,就是每个一定要 DLC0 的通道上发送的 SABM 帧才能定义角色,在其他 RFCOMM server channel 上发送的不算,一旦定义角色,在断开之前都一直遵循这个角色!

Address Field

在这里插入图片描述
EA Field
这部分在蓝牙 RFCOMM 协议中一直为 1

C/R Field

  1. 对于(SABM,UA,DM,DISC)帧,这些统称为命令帧,initiator 发送给 responder,
    C/R=1,response 相应 initiator C/R 也为 1。
  2. 对于(SABM,UA,DM,DISC)帧,这些统称为命令帧,response 发送给 initiator
    C/R 为 0,initiator 响应给 responder,C/R=0.
  3. 对于 UIH 帧,这个称为数据帧,initiator 发送给 responder,C/R=1,response
    发送给 initiator C/R 为 0.
    在这里插入图片描述
    D Field(它与server channel共同组成DCL1)
    initiator 自己的 D=1,responder 自己的 D=0,所以如果在 DLCI 已经建立连接后,后续 initiator 连接 responder 某一个 profile 的时候(比如 HFP),那么应该是 DCLI=0+ server chanel<<1,如果是 responder 连接 initiator 的某一个 profile,那么应该是 DCLI=1+ server channel<<1后续交互封包的 UIH 的 DCLI 一直不变

server channle
就是上层profile的rfcomm channel

Control Field

Control Field 是 1 个 byte 的数据, 主要是标示 RFCOMM frame type 是什么,
我们来截取 GSM 07.10 一个图示,截图如下:
在这里插入图片描述
P/F 是 Poll/Final 位,在 Commands 中,被称为 P(poll)位;而在 Responses中则被称为 F(final)位,总结下:

  1. 对于(SABM,UA,DM,DISC)帧,这些统称为命令帧,command 跟 response 都设置为 1 就好。
    2)对于 UIH 帧,除了给对方 credit 设置为 1 外,UIH user 帧以及 UIH 多路控制帧都设置为 0

SABM:异步平衡模式设置指令 SABM 命令可以用在异步平衡模式下,并且它的控制字段只能有一个字节。设备通过首先发送 UA 应答来确认接收到 SABM 命令,DLC 发送和接收状态变量都必须设定为 0。用大白话讲就是连接命令UA:未加编号的确认应答。 UA 应答用在设备对接收到 SABM 和 DISC 后的确认应答

DM:断开连接模式应答。DM 应答是用来报告设备从数据链路逻辑地断开连接这么一种状态的。在断开模式下,不支持任何命令,直到收到了 SABM 命令,然后停止断开模式。在断开模式下,接收到了 DISC 命令,则要向对方发送一个 DM 应答。

DISC:断开连接指令。用 DISC 命令可以用来结束一个正在运行或者刚刚开始的模式。它就是通知一方另一方悬置操作,设备必须假定一个逻辑断开模式。在执行这个命令之前,接收设备要通过发送 UA 应答来确认接受 DISC 命令。在DLCI0 中 DISC 命令的发送也和其他的 DLCI 具有同意的意思。

UIH:带头校验的未编号信息命令和应答。用 UIH 命令/应答可以通过不影响V(S)或 V®变量来相互发送信息。UIH 是用在传输一些信息的完整性没有它要在正确的 DLCI 上传输重要的情况下的。 FCS 只在地址和控制字段进行计算。UIH,用于对差错码要求不是很高的场合,如语音。

Length Indicator Field

在这里插入图片描述
L1 到 L7 位表示数据字段的长度,其默认值为 31 字节。同样,它可以根据 EA位进行扩展。当 EA=0 时,它接下来的字节如下表表示就可以表示 15 个数字。

information field

仅UIH帧有这个

FCS Field

帧校验序列(FCS)根据不同帧类型在不同域集上进行运算.下面列出需要进行帧运算的字段:
对于 SABM、DISC、UA、DM 帧:在地址、控制和长度标志字段上进行运算;
对于 UIH 帧:在地址和控制字段上进行运算。

多路控制通道的控制命令

多路控制通道主要在 DLCI=0 发送的,主要用来控制 RFCOMM 的连接,来协商一些参数,主要基于 UIH control frame 来发送

发送 UIH 给对方 credit card,在这里又回牵扯到一个知识点,credit,如果 UIH 是在 signaling 通道发送,并且 P/F=0 那么就是普通的 user 数据,如果 P/F=1,那么就是给对方 credit,credit给对方 10,那么在我们不补充的情况下,对方只能发送 10 包 rfcomm 数据,同样道理,对方也会给我们 credit

Remote Port Negotiation Command (RPN)
Remote Line Status Command (RLS)
DLC Parameter Negotiation (PN)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/80344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[工具]B站缓存工具箱 (By 郭逍遥)

&#x1f4cc; 项目简介 B站缓存工具箱是一个多功能的B站缓存工具&#xff0c;包含视频下载、缓存重载、文件合并及系统设置四大核心功能。基于yutto开发&#xff0c;采用图形化界面操作&#xff0c;极大简化B站资源获取与管理流程。 工具可以直接将原本缓存的视频读取&#…

算法训练营第十三天|226.翻转二叉树、101. 对称二叉树、 104.二叉树的最大深度、111.二叉树的最小深度

递归 递归三部曲&#xff1a; 1.确定参数和返回值2.确定终止条件3.确定单层逻辑 226.翻转二叉树 题目 思路与解法 第一想法&#xff1a; 递归&#xff0c;对每个结点进行反转 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, le…

sunset:Solstice靶场

sunset:Solstice https://www.vulnhub.com/entry/sunset-solstice,499/ 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.244 3&#xff…

AZScreenRecorder最新版:功能强大、操作简便的手机录屏软件

AZScreenRecorder最新版是一款功能强大的手机录屏软件&#xff0c;专为安卓设备设计。它无需ROOT权限&#xff0c;支持无限录制时长&#xff0c;操作简单&#xff0c;录制过程中可以随时暂停&#xff0c;满足不同用户的个性化录屏需求。此外&#xff0c;用户还可以自定义分辨率…

模块自动导入的小工具

import { ref, reactive, onMounted } from vue import { useRoute, useRouter } from vue-router项目里很多文件都需要引入这些公共库&#xff0c;比较繁琐&#xff0c;使用一个小工具可以自动导入&#xff0c;就不需要在每个文件里面都写这些导入的代码了。 通过命令行下载安…

【读书笔记】《编码:隐匿在计算机软硬件背后的语言》01 逻辑与开关

【读书笔记】《编码&#xff1a;隐匿在计算机软硬件背后的语言》01 逻辑与开关 前言01 逻辑与开关 前言 我是一名光学工程专业研二的学生&#xff0c;目前正处于找工作的阶段&#xff0c;根据往年师兄师姐找工作的情况&#xff0c;在西安这个城市不出意外我能找到的应该就是嵌入…

TXT编码转换工具iconv

iconv.exe是实现TXT编码转换的命令行工具&#xff0c;支持几百种编码格式的转换&#xff0c;利用它可以在自主开发程序上实现TXT文档编码的自动转换。 一、命令参数格式 Usage: iconv [-c] [-s] [-f fromcode] [-t tocode] [file ...] or: iconv -l 二、转换的示例 将UTF-8…

软考中级数据库备考-上午篇

背景 新工作主要做大数据平台&#xff0c;考一个软考中级数据库系统工程师&#xff0c;补足一下基础知识。 基础知识 1.计算机硬件基础知识 正确答案:C 正确答案:D 正确答案:C 正确答案&#xff1a;BC 正确答案&#xff1a;B 正确答案:D 正确答案:A DMA建立内存与外设的直接…

AtCoder AT_abc405_d ABC405D - Escape Route

前言 BFS 算法在 AtCoder 比赛中还是会考的&#xff0c;因为不常练习导致没想到&#xff0c;不仅错误 TLE 了很多&#xff0c;还影响了心态&#xff0c;3 发罚时后才 AC。 思路 首先&#xff0c;我们把所有位置和出口的距离算出来&#xff08;用 BFS&#xff09;&#xff0c…

【计算机视觉】目标检测:yoloV1~yoloV11项目论文及对比

以下是 YOLO (You Only Look Once) 系列模型从 V1 到 V11 的详细介绍和项目地址&#xff08;截至2024年7月&#xff09;。YOLO 是目标检测领域的里程碑模型&#xff0c;以其 实时性 和 高精度 著称&#xff0c;广泛应用于自动驾驶、安防监控、工业检测等领域。 YOLOv1 (2016) …

推荐系统架构设计

1.分析用户行为数据​&#xff1a;​ 收集用户的活跃时间、点击行为、浏览历史等数据。​分析用户的活跃模式&#xff0c;确定用户最活跃的时间段。​kafka flink 数据库 分析用户行为并存储 2. 预生成推荐内容​&#xff1a;​ 在用户活跃时间之前&#xff0c;预先生成推荐…

BERT类模型

1. BERT类模型是否需要处理 [CLS] 或池化&#xff1f; 那首先搞懂 [CLS] 和池化 &#xff08;1&#xff09;[CLS] 的作用 BERT 的输入格式中&#xff0c;每个序列的开头会添加一个特殊的 [CLS] Token&#xff08;Classification Token&#xff09;。它的设计初衷是为分类任务…

我的世界云端服务器具体是指什么?

我的世界云端服务器是指一种基于互联网的多人游戏服务器&#xff0c;将游戏服务器运行在云平台上&#xff0c;而不是在本地计算机中&#xff0c;这使用户不需要考虑自身电脑的性能和网络稳定性&#xff0c;只需要通过网络连接到云端服务器&#xff0c;就可以享受到顺畅的游戏体…

软考(信息系统运行管理员)

第一章 信息系统运维概述 1.1 信息系统概述 信息的含义和类型 信息的含义&#xff1a; 一般&#xff1a;人们关心的事情的消息或知识。香农&#xff08;信息论创始人&#xff09;&#xff1a;用来减少随机不确定性的东西&#xff08;标志着信息科学进入定量研究阶段&#xff…

Unity基础学习(九)输入系统全解析:鼠标、键盘与轴控制

目录 一、Input类 1. 鼠标输入 2. 键盘输入 3. 默认轴输入 &#xff08;1&#xff09; 基础参数 &#xff08;2&#xff09;按键绑定参数 &#xff08;3&#xff09;输入响应参数 &#xff08;4&#xff09;输入类型与设备参数 &#xff08;5&#xff09;不同类型轴的参…

VBA将PDF文档内容逐行写入Excel

VBA是无法直接读取PDF文档的&#xff0c;但结合上期我给大家介绍了PDF转换工具xpdf-tools-4.05&#xff0c;先利用它将PDF文档转换为TXT文档&#xff0c;然后再将TXT的内容写入Excel&#xff0c;这样就间接实现了将PDF文档的内容导入Excel的操作。下面的代码将向大家演示如何实…

Spring Boot之MCP Client开发全介绍

Spring AI MCP(模型上下文协议,Model Context Protocol)客户端启动器为 Spring Boot 应用程序中的 MCP 客户端功能提供了自动配置支持。它支持同步和异步两种客户端实现方式,并提供了多种传输选项。 MCP 客户端启动器提供以下功能: 多客户端实例管理 支持管理多个客户端实…

[题解]2023CCPC黑龙江省赛 - Folder

来源&#xff1a;F.Folder - Codeforces题意&#xff1a;给定由 n ( 1 ≤ n ≤ 1 0 5 ) n(1\le n\le 10^5) n(1≤n≤105)个结点组成的树&#xff0c;每次操作可将一棵子树接到其他结点上。求将树转换为一棵斜树的最小操作次数。关键词&#xff1a;思维(签到)题解&#xff1a;斜…

string[字符串中第一个的唯一字符][蓝桥杯]

使用哈希表解决 class Solution { public:int firstUniqChar(string s) {int arr[26];for(int i0;i<s.size();i){arr[s[i]-a];}for(int i0;i<s.size();i){if(arr[s[i]-a]1)return i;}return -1;} };

【深度学习-Day 8】让数据说话:Python 可视化双雄 Matplotlib 与 Seaborn 教程

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…