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

从HCI和空口分析HFP通话和eSCO建立

背景

HFP作为经典蓝牙通话建立和断开的协商服务,通话数据则是通过eSCO链路进行传输,下面以手机和蓝牙耳机为例,结合HCI和空口分析从HFP连接建立,到AT命令协商会话,再到eSCO通话数据链路的建立 。

1:HFP连接建立

1:SDP发现HFP服务

在这里插入图片描述
从上面看到手机发起了HFP SDP查询,耳机支持HFP 1.8版本,server channel为1。

2:RFCOMM通道建立

在这里插入图片描述
从上图看到手机会去连接耳机的channel 1,然后建立起RFCOMM,HFP也是基于RFCOMM的连接,至此HFP连接建立成功。

2:HFP AT命令协商

首先要明确耳机作为HFP Client,手机则作为HFP AG(server),下面看一下手机和耳机通过AT命令都做了哪些协商
在这里插入图片描述
可以看到上图手机和耳机交换了很多AT命令,下面拿主要的AT命令解释一下:

AT命令解释
AT+BRSFEC and/or NR function: Supported 、Call waiting or 3-way calling: Supported,CLI presentation capability: Supported,Voice recognition activation: Supported,Remote volume control: Supported,Enhanced call status: Supported,Enhanced call control: Supported,Codec negotiation: Supported ,HF Indicators: Supported,eSCO S4: Supported就是协商HFP Client和HFP AG支持通话哪些feature,比如是否支持噪音和回显,是否支持三方通话,codec协商,音量控制等等
AT+BACSupported Codec: CVSD mSBC耳机告知手机目前支持的codec,1为cvsd,2为mSBC,也就是所谓的窄带和宽带两种codec,分别对应8khz和16khz采样率,hfp1.9支持了超宽带codec LC3,支持32khz采样率
+CINDMobile Termination Indicators (“call”,(0,1)),(“callsetup”,(0-3)),(“service”,(0-1)),(“signal”,(0-5)),(“roam”,(0,1)),(“battchg”,(0-5)),(“callheld”,(0-2))HFP AG告知HFP Client支持的指示器和范围,以及当前的状态,比如后面看到的+CIEV:1,1就是表示(“call”,1)
AT+CMER3,0,0,1简单的说就是使能和去能AG的indicator通知HF的能力,3,0,0,1是activates“indicator events reporting”,激活HFP AG主动通知HFP Client电话状态变化信息,表示手机可以通过+CIEV:xx:xx告知耳机,通话接通或断开等。如果是3,0,0,0则表示关闭AG通过indicator 通知HF的能力
AT+CHLD在这里插入图片描述这个有两种形式的命令: 1:AT+CHLD=? 表示HFP Client主动向HFP AG查询三方通话的一些特性;2:+CHLD 表示HFP AG上报HFP Client,当前三方通话的特性和状态。
AT+BIND在这里插入图片描述BIND是Bluetooth HF Indicators Feature的缩写,该命令用于HFP Client 向HFP AG告知自己支持哪些HF Indicators Feature,以及哪些被使能了。该指令只有在HFP Client和HFP AG在AT+BRSF时HF Indicators:supported才可以使用。
+BIND+BIND:1,1 +BIND:2,1Bluetooth HF Indicators Feature -->Indicator: enhanced Safety State: Enhanced Safety is Enabled; Indicator: Battery Level State: Remaining level of Battery 1
AT+NREC在这里插入图片描述关闭回音消除和噪音减少功能 Disable “Echo Canceling\Noise Reduction function”
AT+VGS15设置耳机speaker音量
AT+CCWA1Enable call waiting notification,打开通话等待通知功能
AT+BIA在这里插入图片描述indicator激活

经过上面的耳机和手机通过AT命令进行了基本情况协商之后,当手机开始拨号后,我们会看到如下AT命令:
在这里插入图片描述

  1. +BCS:2 表示手机选择mSBC codec作为数据的编码方式
  2. +CIEV 2,2 表示手机开始拨对方的号码
  3. +CIEV 2,3 表示对方已经响铃
  4. +CIEV 1,1 表示电话已经接通
  5. +CIEV 2,0 表示电话接通后,没有电话再拨进来

eSCO的建立:

eSCO的建立时间是当手机开始拨对方电话的时候就开始了:
在这里插入图片描述
从上图空口可以看到在CIEV:2,2,也是就手机拨对方电话的时候就通过LMP eSCO Link Request去和手机建立eSCO连接,如绿色框框。下面再看看这个命令有啥参数:
在这里插入图片描述
如上图,这里面主要有四个参数:

参数解释
TeSCO12 slots = 7.500 ms就是双向传输一个包的时间周期
WeSCO4 slots = 2.500 ms重传的窗口时间
eSCO Packet Type C->P2-EV3采用2M Ehanced voice 3数据格式传输
Packet Length C->P60 bytes单个包的字节数

再看一下电话接通后(+CIEV 1,1),eSCO在空中传输的数据:
在这里插入图片描述
从上图可以看到单向的两个数据包之间的时间间隔都是7.5ms,而且发生了一次重传:

在这里插入图片描述

从上图可以看到手机发送给耳机的2-EV3数据包进行了重传,重传窗口是2.5ms。


http://www.kler.cn/news/353745.html

相关文章:

  • 【进阶OpenCV】 (18)-- Dlib库 --人脸关键点定位
  • 如何高效解锁业务数据价值:多云时代应该怎么构建新一代数据平台架构
  • Allegro 小技巧
  • 二叉树与堆讲解
  • unity动态批处理
  • Spring Boot知识管理系统:安全与合规性
  • linux红帽基础命令
  • 【力扣热题100】3194. 最小元素和最大元素的最小平均值【Java】
  • mysql--数据表的操作
  • AI Weekly#1:过去一周重要的AI资讯汇总
  • 基于知识图谱的宁夏非遗问答系统
  • URL路径以及Tomcat本身引入的jar包会导致的 SpringMVC项目 404问题、Tomcat调试日志的开启及总结
  • Spring Boot: 构建高效中小型医院网站
  • C++初阶学习第七弹——string的模拟实现
  • 基于STM32的节能家庭管家系统设计
  • Spring AI Java程序员的AI之Spring AI(一)
  • 看《米小圈日记魔法》突破写作困境一点也不难!
  • 小红的行列式构造
  • Java微信支付接入(10)API V3 申请退款API
  • 深度学习500问——Chapter17:模型压缩及移动端部署(4)