参考:RFCOMM_SPEC_V12
DLCI:Data Link Connection,下行链路连接
1. RFCOMM帧

(1)帧类型:

  • Set Asynchronous Balanced Mode (SABM) command:异步平衡模式设置指令
  • Unnumbered Acknowledgement (UA) response:未加编号的确认响应
  • Disconnected Mode (DM) response:断开连接模式响应
  • Disconnect (DISC) command:断开连接指令
  • Unnumbered information with header check (UIH) command and response:携带头校验的未编号信息命令和响应

(2)帧结构:

  • Flag:L2CAP和RFCOMM之间交换的标志字段。
2. RFCOMM命令

在两个复用器之间,使用DLCI 0传输控制命令,RFCOMM支持的命令如下:

  • Test Command (Test):测试命令
  • Flow Control On Command (Fcon):打开流控命令
  • Flow Control Off Command (Fcoff):关闭流控命令
  • Modem Status Command (MSC):Modem状态命令
  • Remote Port Negotiation Command (RPN):远程端口协桑命令
  • Remote Line Status (RLS):远程连线状态
  • DLC parameter negotiation (PN):DLC参数协商
  • Non Supported Command Response (NSC):不支持命令类型响应。无论何时收到了不支持的命令,则发送NSC命令。
3. 复用器启动和关闭过程

任何时候,配对的设备之间最多存在一个RFCOMM会话。当建立一个新的DLC时,初始化建立的一方必须检查是否已经存在RFCOMM会话,如果已存在,则在此会话上建立新的DLC。一个会话由两个端点的蓝牙地址决定。

(1)启动过程:正在打开两个设备间的第一个仿真串口连接的设备负责建立多路复用控制信道,包括:

  • 利用L2CAP服务原语,与对端RFCOMM实体建立L2CAP信道。
  • 通过在DLCI 0上发送SABM命令启动RFCOMM多路复用器,并且等待对等实体的UA响应。

(2)关闭过程:正在关闭会话上最后一条DLC的设备负责关闭相关的L2CAP信道。在关闭L2CAP信道之前,设备可以在DLCI 0上发送DISC命令来关闭最后一个连接,其它的设备需要使用UA来响应DISC。

(3)链路丢失处理:若收到L2CAP链路丢失通知,则本地RFCOMM实体将向每个激活的DLC端口端口或代理实体发送连接丢失通知,并释放RFCOMM会话相关的所有资源。

4. 系统参数

  • Maximum Frame Size (N1):最大帧长度
  • Acknowledgement Timer (T1):用于P/F位设为1的帧超时(SABM、DISC)。通常T1的取值范围为10 ~ 60s。然而,为了启动一个新的DLC(DLC>0)而发送一个SABM,T1的取值范围为60 ~ 300s。
  • Response Timer for Multiplexer Control Channel (T2):用于DLCI 0控制命令超时,命令在UIH帧中发送。

RFCOMM依赖于底层提供可靠的传输,若定时器超时,默认操作是关闭复用器会话。

5. DLCI分配

考虑到RFCOMM会话两端都可能存在客户端和服务器应用,以及各客户端独立地建立建立,将DLCI值域用RFCOMM服务信道和方向位进行划分。

  • D:进行初始化的设备设定为1,另一方设定为0。
  • 给RFCOMM服务接口上注册的服务应用分配一个服务信道号,取值范围为1~30,服务信道号被寄存在服务发现数据库中。
  • DLCI由D和服务信道共同决定,初始化方的DLCI取值为3,5,7,…,61,非初始化方的DLCI取值为2,4,6…,60。
6. 复用器控制命令

在相应的DLC建立之前,一些与特定DLCI相关的多路复用器控制命令可以在DLCI 0上进行交换。

  • 当收到断开连接(DISC)命令时,或本地端关闭DLC,DLC的相关状态重置为默认值。
  • 若收到与未开放的DLCI相关的多路复用器控制命令,发送断开模式(DM)命令进行响应。
  • RFCOMM不允许在一个帧内包含多个复用器控制消息。

(1)RPN:远程端口协商命令

  • 在新的DLC开放或任何端口设置改变前,使用该命令。
  • 在RFCOMM中,该命令必须识别并响应。

(2)RLS:远程连线状态命令

  • 该命令用于指示远程端口连线状态
  • 在RFCOMM中,该命令必须识别并响应。

(3)PN:DLC参数协商命令

  • 在RFCOMM会话上的第一个DLC建立前,至少使用一次DLC参数协商命令,且发起方需要尝试着开启流控。
  • DLC建立后,PN请求的响应端可以拒绝任何参数的改变,可在响应中携带当前参数。
7. 流控

(1)L2CAP流控:L2CAP流控依赖链路控制器启动和停止流控机制或基于每个L2CAP信道的流控机制。

(2)端口仿真实体流控

  • 对于DTE设备,一些端口驱动器需要通过它们所仿真的API来定义流控服务。应用可以要求一些特殊的流控机制(如XON/XOFF,RTS/CTS),并希望由端口驱动器处理。
  • 对于DCE设备,端口驱动器可能需要在非RFCOMM的通信路径上执行流控机制,即RS-232端口。
  • 若RFCOMM有自己的流控机制,端口驱动器不需要执行应用层要求的流控机制。

端口驱动器流控仿真基本原则:

  • 端口驱动器不会单独依赖于应用所请求的机制,可以结合使用不同的流控机制。
  • 端口驱动器必须意识到应用所要求的流控机制,并且在硬件流控和软件流控上看起来像有线一样。
  • 若应用通过端口驱动器接口设置了流控机制并调用了该机制,则端口驱动器的处理必须看起来和有线一样。

(3)基于Credit的流控

基于信用流控的使用需要服从之前的协商。

基于信用的流控基于单个DLC提供流控。RFCOMM会话的设备端都需要知道在DLC缓存溢出前,对端设备能接收多少帧。一个正在发送的实体可以发送与其DLC所含信用相等的帧数。如果信用为0,则发送者必须停止发送并等待可用的信用。

  • 初始化DLC协商
  • DLC操作

Bluetooth技术学习笔记 ——RFCOMM(2)相关推荐

  1. Bluetooth技术学习笔记 ——GAP

    佛系学习,想学就学,不想学就不学. core_v5.0 vol 3. Part C GAP:Generic access profile,通用访问协议,定义了基本过程,包括设备发现,链路管理,配置,安 ...

  2. Bluetooth技术学习笔记 ——HFP控制功能之连接管理

    参考:HFP_v1.7.1 SLC:Service Level Connection,服务级连接 AG:Audio Gateway,音频网关 HF,hands-free,免提 Service Leve ...

  3. Bluetooth技术学习笔记 ——蓝牙核心系统架构

    参考:蓝牙协议 core_v5.0 PALs:Protocol Adaptation Layers ,协议适配层. AMPs:Alternate MAC/PHYs. L2CAP:Logical Lin ...

  4. Bluetooth技术学习笔记 ——HFP之Call

    1. 来电 若收到来电,AG会一直给HF重复发送RING alerts,直到接通电话,或者拒接电话. HF在收到RING alerts后,开始响铃.铃声根据实际情况而定,或AG设置的铃声,或HF自带的 ...

  5. Bluetooth技术学习笔记 ——LE广播、扫描、连接参数设置

    core_v5.0 vol 2. Part E 1. 广播参数设置 (1)广播间隔说明 Advertising_Interval_Min ≤ Advertising_Interval_Max 当Adv ...

  6. java mvc框架代码_JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码)

    原标题:JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码) JavaEE体系结构包括四层,从上到下分别是应用层.Web层.业务层.持久层.Struts和SpringMVC是Web层的 ...

  7. 小五思科技术学习笔记之SSH

    下面介绍一下相关概念: SSH的概念: SSH的英文全称为Secure Shell,SSH使用TCP的22号端口,其目的是要在非安全的网络上提供安全的远程登陆和其他安全的网络服务, 为什么要使用SSH ...

  8. ssm 转发请求_千呼万唤!阿里内部终于把这份SSM框架技术学习笔记分享出来了...

    SSM SSM(Spring+SpringMVC+MyBatis)框架集由Spring.MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容).常作为数据源较简单的web项 ...

  9. 知识图谱技术学习笔记

    知识图谱技术学习笔记 从一开始的Google搜索,到现在的聊天机器人.大数据风控.证券投资.智能医疗.自适应教育.推荐系统,无一不跟知识图谱相关.它在技术领域的热度也在逐年上升. 本文以通俗易懂的方式 ...

  10. SpringBoot整合第三方技术学习笔记(自用)

    SpringBoot整合第三方技术学习笔记 搬运黑马视频配套笔记 KF-4.数据层解决方案 KF-4-1.SQL 回忆一下之前做SSMP整合的时候数据层解决方案涉及到了哪些技术?MySQL数据库与My ...

最新文章

  1. 2022-2028年中国丁晴橡胶行业市场深度分析及投资规划分析报告
  2. hdu2102 水搜索
  3. Linux vim多文件切换
  4. 交换机与路由器主要功能的区别和联系
  5. Android QEMU 高速管道
  6. 8.Using Categorical Data with One Hot Encoding
  7. 线性代数分块矩阵求逆矩阵_单位矩阵属性(AI = A)| 使用Python的线性代数
  8. Wordpress空间和域名的备份
  9. Initializing Java Tooling 30% 停住不动了
  10. nyoj 269 VF 动规
  11. EasyConnect下载-百度云盘
  12. Schlumberger Drilling Office v4.0 1CD(综合钻井工程设计软件)
  13. 什么是MySQL索引?
  14. 爬取相关机构电话号码及地址
  15. Mac安装Royal TSX
  16. [教程分享]锐族MP3刷固件教程
  17. java计算乘地铁费用_Java_地铁购票系统
  18. [Clickhouse 入门到精通]-单机安装部署
  19. catia v5r18 百度云_catia v5r18 64位免费版 附带安装教程
  20. matlab中tgn,TGN/EE介导的囊泡运输与GDI1协同调控根毛中ROP2 GTPase的动态定位的机理研究...

热门文章

  1. python生成excel文件报扩展名错误_在python中打开扩展名为.xls的文本文件时出错
  2. java选课系统代码_ssm+jsp开发java学生信息与选课系统(优化界面)
  3. jqGrid设置三级表头和表头合并
  4. 基本共射放大电路的动态分析
  5. 微信自动跳转默认浏览器 微信扫一扫直接打开外部浏览器
  6. 【IDE】【WebStorm】html排版设置head和body缩进
  7. 小胜靠智、大胜靠德、永胜靠和
  8. C / C++ function - rand
  9. 史上最傻java代码记录
  10. grep、cut、sed、awk