当前位置:网站首页>ble HCI 流控机制
ble HCI 流控机制
2022-07-04 15:24:00 【千年缘】
HCI 有两种流控机制
- packet-based - 基于数据包的个数来控制收发
- data-block-based - 基于数据长度来控制收发
BR/EDR 默认使用 packet-based,可用 HCI_Write_Flow_Control_Mode command 设置,而 BLE 只支持 packet-based
一、Host to Controller data flow control
初始时,Host 通过 HCI_LE_Read_Buffer_Size 命令获取 Controller 中每个 ACL buffer 的大小,以及 ACL buffer 的个数,该个数即允许 Host 向 Controller 连续发送 ACL 包的个数
当 Host 向 Controller 发送一个 ACL 包后,允许发包个数减 1,当允许发包个数为 0 时,则不能再向 Controller 发送
当 Controller 处理完一个 ACL 包后,如已将数据发给对端设备,Controller 释放 ACL buffer 空间,并向 Host 发送 HCI_Number_Of_Completed_Packets event,此时允许发包个数加 1,Host 又可以继续向 Controller 发送了
如果 Controller 同时处理完多个 ACL 包,Controller 释放多个 ACL buffer 空间,HCI_Number_Of_Completed_Packets event 中会有多个连接释放的 ACL buffer 个数,此时允许发包个数增值为所有连接释放的 ACL buffer 个数总和
二、Controller to Host data flow control
Controller 向 Host 方向的流控默认是关闭的,可以通过 HCI_Set_Controller_To_Host_Flow_Control cmd 打开或关闭
机制与 Host to Controller 相似,初始时,Host 通过 HCI_Host_Buffer_Size cmd 告知 Controller 自己每个 ACL buffer 的大小,以及 ACL buffer 的个数,该个数即允许 Controller 向 Host 连续发送 ACL 包的个数
当 Controller 向 Host 发送一个 ACL 包后,允许发包个数减 1,当允许发包个数为 0 时,则不能再向 Host 发送
当 Host 处理完一个 ACL 包后,如已将数据发给上层协议处理,Host 释放 ACL buffer 空间,并向 Controller 发送 HCI_Host_Number_Of_Completed_Packets command,此时允许发包个数加 1,Controller 又可以继续向 Host 发送了
如果 Host 同时处理完多个 ACL 包,Host 释放多个 ACL buffer 空间,HCI_Host_Number_Of_Completed_Packets command 中会有多个连接释放的 ACL buffer 个数,此时允许发包个数增值为所有连接释放的 ACL buffer 个数总和
HCI_Host_Number_Of_Completed_Packets cmd 是一个特殊的 cmd,它不受流控控制,Host 可以在任何时刻向 Controller 发送,且也没有相应的 event 生成
三、command flow control
当 Host 向 Controller 发送 command 后,Controller 会向 Host 返回 HCI_Command_Complete event 或 HCI_Command_Status event,这两个 event 中都有参数 num_of_allowed_command_packet, 这个参数即是 Host 可以向 Controller 连续发送 command 的个数
在初始时或者后续任何时刻,Controller 都可以向 Host 发送 Command Opcode=0x0000 的 HCI_Command_Status event 或 HCI_Command_Status event,用以告知 Host 此时允许连续发送 command 的个数
边栏推荐
- 2022年国内云管平台厂商哪家好?为什么?
- Visual studio 2019 (localdb) mssqllocaldb SQL Server 2014 database version is 852 and cannot be opened. This server supports 782
- 整理混乱的头文件,我用include what you use
- Four point probe Industry Research Report - market status analysis and development prospect prediction
- How to "use" Perl modules in directories that are not in @inc- How do I 'use' a Perl module in a directory not in @INC?
- 智慧物流园区供应链管理系统解决方案:数智化供应链赋能物流运输行业供应链新模式
- 同构图与异构图CYPHER-TASK设计与TASK锁机制
- 中信证券网上开户安全吗 开户收费吗
- Sql实现Split
- C# 服务器日志模块
猜你喜欢
Smart Logistics Park supply chain management system solution: digital intelligent supply chain enables a new supply chain model for the logistics transportation industry
Detailed process of DC-2 range construction and penetration practice (DC range Series)
MVC模式和三层架构
Transformer中position encoding实践
NoSQL之readis配置与优化(终章)
GO开发:如何利用Go单例模式保障流媒体高并发的安全性?
从数数开始
照明行业S2B2B解决方案:高效赋能产业供应链,提升企业经济效益
一图看懂ThreadLocal
~89 deformation translation
随机推荐
中银证券网上开户安全吗?
Readis configuration and optimization of NoSQL (final chapter)
MD5加密的两种方式
C# 实现 FFT 正反变换 和 频域滤波
GO开发:如何利用Go单例模式保障流媒体高并发的安全性?
Cypher task design and task locking mechanism of isomorphic and heterogeneous graphs
嵌入式软件架构设计-函数调用
Go语言循环语句(第10课下)
世界环境日 | 周大福用心服务推动减碳环保
Sequence diagram data modeling and industrial chain analysis
Can you really use MySQL explain?
Embedded software architecture design - function call
How to "use" Perl modules in directories that are not in @inc- How do I 'use' a Perl module in a directory not in @INC?
Pytorch deep learning quick start tutorial
MVC模式和三层架构
Lv166 turned over
对人胜率84%,DeepMind AI首次在西洋陆军棋中达到人类专家水平
detectron2安装方法
网页游戏引擎
Go micro tutorial - Chapter 2 go micro V3 using gin and etcd