从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。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C# 实操高并发分布式缓存解决方案

1. CAP 原则 CAP 原则也称为布鲁尔定理,由 Eric Brewer 在 2000 年提出,描述了分布式系统中的三个核心属性:一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tol…

【Linux】Linux常见指令及权限理解

1.ls指令 语法 : ls [ 选项 ][ 目录或文件 ] 功能 :对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。 常用选项: -a 列出目录下的所有文件,包括以 . 开头的隐含文…

Golang | Leetcode Golang题解之第492题构造矩形

题目: 题解: func constructRectangle(area int) []int {w : int(math.Sqrt(float64(area)))for area%w > 0 {w--}return []int{area / w, w} }

鸿蒙网络编程系列21-使用HttpRequest上传任意文件到服务端示例

1. 前述文件上传功能简介 在前述文章鸿蒙网络编程系列11-使用HttpRequest上传文件到服务端示例中,为简化起见,只描述了如何上传文本类型的文件到服务端,对文件的大小也有一定的限制,只能作为鸿蒙API演示使用,在实际开…

深度学习-24-基于keras的十大经典算法之残差网络ResNet

文章目录 1 残差网络(ResNet)1.1 ResNet简介1.2 ResNet结构2 模型应用2.1 加载数据2.2 构建模型SimpleResNet2.2.1 simple_resnet_block2.2.2 SimpleResNet2.2.3 实例化模型2.2.4 模型训练2.2.5 模型预测2.3 构建模型ResNet182.3.1 residual_block2.3.2 ResNet182.3.3 训练模型…

无人机之三维航迹规划篇

一、基本原理 飞行环境建模:在三维航迹规划中,首先需要对飞行环境进行建模。这包括对地形、障碍物、气象等因素进行准确的测量和分析,以获得可行的飞行路径。 飞行任务需求分析:根据无人机的任务需求,确定航迹规划的…

【进阶OpenCV】 (18)-- Dlib库 --人脸关键点定位

文章目录 人脸关键点定位一、作用二、原理三、代码实现1. 构造人脸检测器2. 载入模型(加载预测器)3. 获取关键点4. 显示图像5. 完整代码 总结 人脸关键点定位 在dlib库中,有shape_predictor_68_face_landmarks.dat预测器,这是一个…

从算盘到云计算:计算机发展的壮丽历程

早期的计算器 在计算机发展史上,早期的计算器起到了重要的作用。而其中最早的计算器便是算盘。算盘是古代中国人使用的一种计算工具,它由一根木棍和一些珠子组成。通过将珠子在木棍上移动,人们可以进行简单的加减乘除运算。虽然算盘的计算速…

[week1]Newstar Simple_encryption

找到源代码和加密后密文 a [0x47, 0x95, 0x34, 0x48, 0xA4, 0x1C, 0x35, 0x88, 0x64, 0x16, 0x88, 0x07, 0x14, 0x6A, 0x39, 0x12, 0xA2, 0x0A, 0x37, 0x5C, 0x07, 0x5A, 0x56, 0x60, 0x12, 0x76, 0x25, 0x12, 0x8E, 0x28] # 进行处理 for j in range(len(a)): …

【可答疑】基于51单片机的智能衣柜(含仿真、代码、报告、演示视频等)

✨哈喽大家好,这里是每天一杯冰美式oh,985电子本硕,大厂嵌入式在职0.3年,业余时间做做单片机小项目,有需要也可以提供就业指导(免费)~ 🐱‍🐉这是51单片机毕业设计100篇…

python基于图片内容识别的微信自动发送信息(对其中逻辑修改一些可以改为自动化回复)

1.内容基于python日常生活问题帮助 2.主要框架 import time from datetime import datetimeimport pyperclip import win32api import win32con import os import refrom Image_Content_Text_Recognition import ICTR from screenshot import img 上面是逻辑部分主要框架 i…

Axure重要元件二——内联框架

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:内联框架 课程内容:认识内联框架、基本嵌入 应用场景:表单、图片、文字嵌入式场景、交互应用 一、认识内联框架 内联框架的…

开源两个月,antflow后端项目全网获近100星

从六月初开源,转眼间AntFlow已经开源将近四个月了(前端比后端早了大约2个月,后端于8.18开源).(其实准备是重构以前开源版本.前年的时候我们已经将Vue2版的流程设计器开源了.后来由于疫情原因,没有再继续持续开发.)后来有一天再打开仓库的时候,发现虽然很久没有更新了,但是不断有…

如何在算家云搭建Video-Infinity(视频生成)

一、模型介绍 Video-Infinity是一个先进的视频生成模型,使用多个 GPU 快速生成长视频,无需额外训练。它能够基于用户提供的文本或图片提示,创造出高质量、多样化的视频内容。 二、模型搭建流程 1.大模型 Video-Infinity 一键使用 基础环境…

应用商店上新:MainConcept Transcoder和Live Streaming Software App

在Akamai云计算平台上运行工作负载的你也许还不知道,为了帮助用户更容易地找到并快速部署各类解决方案,Akamai提供了一个丰富的应用商店(Marketplace),其中包含各类经过验证,可以在Akamai云计算平台上轻松部…

MoeCTF 2024 ---Misc方向WP

安全杂项 signin 题目描述: xdsec的小伙伴们和参赛者来上课,碰巧这一天签到系统坏了,作为老师的你,要帮他们 教师代签。 特殊提醒:luo同学今天好像在宿舍打游戏,不想来上课,这是严重的缺勤行为…

react18中如何监听localstorage的变化获取最新的本地缓存

有时候业务中会需要监听缓存的变化,实时更新页面的内容获取发送接口请求。这就要我们来监听对localstorage的修改,实时响应变化!!一下方法同样实用于vue项目。 同一个项目中不同页面的实现 实现效果 代码分析 修改localstoare的…

「漏洞复现」英飞达医学影像存档与通信系统 WebUserLogin.asmx 信息泄露漏洞

0x01 免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删…

Redis中String类型常见的应用场景

目录 一. 缓存功能什么是缓存?Redis的工作原理热点数据的过期策略是什么? 二. 计数功能三. 会话(session)共享Session会话是用来解决什么问题的使用Redis集中管理Session 一. 缓存功能 什么是缓存? 缓存是一种用于存储数据的计算机硬件或软件组件. 缓存核心功能是加快数据…

Android上的AES加密

基础算法说明 https://www.youtube.com/watch?vlnKPoWZnNNM 虽然这个视频讲的非常详细,但是涉及到具体底层算法,大致流程 1. 将数据转成HEX或者byte array 2.将数据分层一块块等大小的数据 3.将数据和key 进行一次混合,加密之后的输出&…