【BT 协议】HFP 协议

2023-11-07

原文链接:https://blog.csdn.net/shichaog/article/details/52123439

HFP(Hands-free Profile),让蓝牙设备可以控制电话,如接听、挂断、拒接、语音拨号等,拒接、语音拨号要视蓝牙耳机及电话是否支持。

目前HFP的使用场景有车载蓝牙,耳机和PDA,定义了AG和HFP两种角色。
AG(Audio Gate)音频网关—音频设备输入输出网关
HF(Hands Free)免提—该设备作为音频网关的远程音频输入/输出机制,并可提供若干遥控功能。

在车载蓝牙中,手机侧是AG,车载蓝牙侧是HF,在android源代码中,将AG侧称为HFP/AG,将HF侧称为HFPClient/HF。

回到上面错误,该信息源于将现有手机平台设置成HF而出现的错误,有两个关键字RFCOMM和AT。

HF协议栈


这里写图片描述
[Hands-Free Profile 1.7.1 Bluetooth ® Profile Specification]
上图是源码Bluetooth官网关于HFP的定义文档,该文档中可以看出有RFCOMM和AT CMD这两个部分,RFCOMM是AG和HF通信的虚拟串口,AT是Attention命令集合。 各种profile的解释见http://blog.csdn.net/shichaog/article/details/51931898–[蓝牙 bluetooth-之一 ]

HFP feature和procedure


名词意义

  • LMP link: Link Manager (LM) level link over which only Link Manager Protocol (LMP) commands are conveyed
  • RFCOMM connection:虚拟串口通道存在
  • Service Level Connection:同步的部分协议栈高层协议,HFP协议层指的是RFCOMM connection,和AG同步。
  • Service Level Connection initialization:AT命令集执行 responses specified by the profile necessary to synchronize the state of the HF with that of the AG.
  • Service Level Connection establishment:the combined process of establishing the RFCOMM connection, as well as the necessary device synchronization using Service Level Connection initialization.
  • Synchronous Connection:为全双工音频链接的SCO或者eSCO逻辑link。
  • Audio Connection:包括音频通路的同步链接
  • incoming call:表示由Phone Network到AG的通话。
  • outgoing call:表示由AG到Phone Network的通话。

这里写图片描述

Baseband,LMP,L2CAP是OSI模型的Layer1和Layer2层。RFCOMM是蓝牙串口,SDP是服务发现协议。Hands-Free control层基于AT命令实现控制。audio port是AG音频通道,audio driver是HF侧的音频驱动。音频有两种格式CVSD和SBC。

  • CVSD: pcm: 8kHz, 16 bits, 1 channel.
    compression ratio: 16 (controller encoding)
    insert ratio: 8
    pcm data rate= 16kB/s =8K*16/8
    CVSD data rate=8kB/s =16kB/s* 8/16
    air data: CVSD
  • mSBC: pcm 16kHz, 16 bits, 1 channel.
    compression ratio: 4 (host encoding: 240->60)
    pcm data rate= 32kB/s
    mSBC data rate=8kB/s = 32kB/s / 4
    air data: transparent data (mSBC)

AG和HF需要支持的功能

(M,必须,O可选)

 
 
 
 
  • 1

这里写图片描述

这里写图片描述

HF control通信流程

Service Level Connection

AG和HF均可以通过内部或者用户事件发起Service Level连接建立。Service Level Connection建立的前提是RFCOMM已经建立。同样RFCOMM的建立发起者可以是AG或者HF。
The RFCOMM connection establishment shall be performed as described in Section 7.3 of
Generic Access Profile [5] and Section 3 of Serial Port Profile [6].

  • 支持能力交换
    首先HF发送AT+BRSF=< HF supported features >给AG,目的是首先通知AG其具有的能力,其次接收AG返回的其自身的BRSF能力。
  • Codec协商
    如果HF支持Codec Negotiation特征,其会查看AG返回的BRSF中是否也支持该特性,如果都支持该特性,则HF将发送AT+BAC=< HF available codecs >命令给AG以告知其可用的codec。
  • AG Indicator
    HF从AG接收到的BRSF,可以知道AG支持的Indicator,并按顺序拍好,这是因为根据3GPP 27.007规范,AG可以支持Hands-Free不支持的profile。HF使用AT+CIND=?测试命令接收AG支持的indicator以及它们的次序。
    当HF获得必须的Indicator和它们的次序,它将通过AT+CIND?命令取得AG端正在使用indicator的状态。
    当HF取得AG的indicator后,HF会使用AT+CMER使能AG的indicator状态跟新功能,AG会返回OK作为应答。当service,call或者call建立状态发生时,AG将发送和indicator相关的+CIEV结果码给HF。HF根据收到的+CIEV码来跟新其自身内部的indicator。
    AG侧会一直保持indicator状态跟新功能使能直到收到AT+CMER指示其关闭或者HF和AG端的Service Level Connection连接断开。
    当HF使能AG的indicator状态跟新,如果AG和HF都支持呼叫等待(Call waiting)和3方通信(3-way calling)。HF将发送AT+CHLD=?测试命令取得AG是如何支持这种功能的。如果HF或者AG其中之一不支持三方通信,AT+CHLD=?命令不会被发送。
  • HF Indicator
    如果HF支持HF indicator,其会查看AG是否支持HF indicator。
    如果HF和AG支持HF indicator特性,HF将发送AT+BIND=< HF supported HF indicators >通知HF侧支持的indicator,AG以OK应答。
    当AG接收到HF告知的HF indicator特性,HF将发送AT+BIND=?请求AG侧支持的HF indicator。AG将会以+BIND和以OK结尾的应答。
    当HF接收到AG支持的HF indicator,HF将会发送AT+BIND?命令确定HF目前使能的HF indicator。AG将会一次或多次以+BIND应答和以OK结尾的应答。
    至此HF可能发送AT+BIEV命令告知AG其使能的HF indicator发生变化。
    AG可以使用+BIND使能或者禁止任何HF indicator。\
  • End of Service Level Connection
    HF需要知道Service Level Connection被完全建立,这可以通过以下几个方式:
  • 当且仅当AG通过+BRSF命令告知HF其支持的HF indicator,在HF收到AG通过AT+BIND?命令发来的其支持的HF indicator可认为完全建立。
  • 当且仅当SDP服务发现AH和AG双方均支持“Call waiting and 3-way calling”,在HFAG通过AT+CHLD命令发来的其对呼叫等待和多方电话的支持,对这种情况,HF indicator不要设置该比特位,AG也不要在+BRSF命令中设置该比特位。
  • 在HF使用AT+CMER命令成功使能了“Indicator status update”功能,对这种情况SDP服务不应该设置“Call waiting and 3-way calling”比特位。
    如果HF收到AG通过indicator指示当前有电话时,HF查询AG的接听和保持状态来判断是否是未接听电话。
    同样AG侧Service Level Connection完全建立也有几种情况:
  • 当且仅当HF indicator在HF被设置且AG侧支持的indicator已经通过+BRSF命令应答,则AG以+BIND加OK结尾的命令应答其使能的HF indicator时可认为Service Level Connection完全建立。
  • 当且仅当“Call waiting and 3-way calling”比特在HF和AG的SDP服务中被置位,在AG通过+CHLD加OK结尾命令成功响应其对呼叫保持和多方电话支持时SLC会被完全建立。对这种情况,+BRSF不应该设置该HF indicator比特位。
  • 在AG成功响应AT+CMER命令。

这一过程如下图:
这里写图片描述
AT命令见http://blog.csdn.net/shichaog/article/details/52126415 [蓝牙之九-AT命令]

连接丢失恢复

在蓝牙连接丢失时,HF侧会主动重连AG。但当Service Level Connect被用命令主动断开连接时,AG和HF将会在接收到重连命令后等待一个确定时间再重连。

电话建立保持的传输

AT+CMER命令使能了AG侧的“Call Status indicator update”功能。

音频连接建立

HF和AG可以根据用户动作或者内部事件建立音频连接,AH和AG也许需要内部动作来路由,更改采样率,帧/或者音频通路采样对齐。正式点的说法是音频连接建立:

  • HF在接听电话中能够初始化音频连接建立
  • HF在无电话时能初始化音频连接建立
  • HG在接听电话中能够初始化音频连接建立
  • HG在无电话时能初始化音频连接建立
    音频连接建立过程总是意味着同步连接(Synchronous Connection)建立,并且同步连接和已经建立的SLC是相关的。
    该过程的一个先决条件是,AG和HF之间需要存在SLC,如果不存在则将会先建立这个连接。
    发起者和接收者都将通知新音频连接已经存在。

由AG发起的音频连接建立

当AG侧发起音频连接时,它将初始化编解码器连接建立过程。
这里写图片描述

HF侧发起音频连接

对于两边都支持编解码器协商特性的场景,由HF发起的建立音频连接将会触发AG确立编解码器连接。这是必须的,因为只有AG知道编解码格式。
这里写图片描述
当HF发起音频编解码连接建立时,其将发送AT命令AT+BCC给AG。AG在启动编解码建立过程时会发送OK应答,如果不启动编解码时会发送ERROR应答。

编解码连接建立

尽管AG和HF都可以发起建立音频连接,但是编解码和同步连接建立只能有AG侧建立(除非其中一个设备是legacy设备)。
仅当HF通知AG其支持Codec Negotiation时,AG才会通过当前的SLC发送AT+BAC命令发起Codec Connection。AG会根据HF对AT+BAC的应答来选择合适的Codec connection。

AG将会通知HF在建立Synchronous Connection前使用哪个codec ID。
这里写图片描述

AG将会发送未经请求的命令+BCS=< Codec ID>给HF。HF将以AT+BCS=< Codec ID>命令响应,只要该ID是支持的,ID将会和AG发来的未经请求的命令是一样的。但是如果ID不支持,HF将以AT+BAC和其可用的codec作为应答。
如果AG收到的AT+BCS命令的ID和之前其发送的一样,则会发送OK应答,否则发送ERROR。如果AG发送命令+BCS后没有收到AT+BCS而是AT+BAC,这一过程将会结束但是AG在重新选择codec ID后会重新这一过程。
在发送OK响应后,AG将会根据ID打开相应设置的同步连接,而HF在发送AT+BCS=< Codec ID>命令后也能够接收同步连接建立请求。
在同步连接建立完成后,codec 连接建立也完成。+BCS命令是对这次和后续连接codec选择。
如果(e)SCO link无法建立,AG将会重启启动Codec Connection建立过程。在Codec connection建立连接之前,CVSD编码将被启用。

可选的codec跟新

对AG和HF都支持Codec Negotiaton特性的SLC场景。HF可以发送AT+BAC通知AG可选codec的动态变化。如果AG已经发起Codec Connection建立过程,HF将会发起AT+BAC命令以响应AG的未经请求的+BCS命令的codec不可用的情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【BT 协议】HFP 协议 的相关文章

随机推荐

  • PyGame基础语法

    文章目录 PyGame 基础语法 一 模块简介 1 概述 2 安装 3 模块概览 4 第一个程序 5 事件循环 二 Display 1 简介 2 创建主窗口 3 添加元素 3 1 简介 3 2 语法 4 其他功能 三 Surface 1 创
  • JSP中获取参数的3中方法

    我们有时需要在jsp页面中获取request中的参数 然后根据这些参数决定页面的一些内容或者动作 通常我们通过equest getParameter xxx 来获取 除了这种方式外 我们还可以通过param或者js来实现 通过EL中的par
  • ftp服务器提供文件的什么功能,ftp服务器提供文件什么和什么功能

    ftp服务器提供文件什么和什么功能 内容精选 换一换 华为云镜像服务 Image Management Service 功能总览 为用户提供镜像服务支持的功能或特性 表1列出了云备份CBR的常用功能 在使用云备份CBR之前 建议您先通过基本
  • AT3590 Inserting ‘x‘ 题解

    本题是一道双指针的模拟题 题意 给你一个字符串 s s s 你可以在 s s s 的任意位置插入 x x
  • 好的习惯----程序员成长之路(from老大邮件)

    对于好程序员 有很多好的习惯 为什么要把这个习惯放在第一个呢 有很多人如果阅读过 高效能人士的七个习惯 其中第一个习惯就是积极主动 如果从这个角度来看 我把解决解决每一个问题放在首位从理论上是完全没问题的 但我要说说我们程序员独特的地方 所
  • [4G+5G专题-133]: 部署 - 4G/5G常见的室内部署方案

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 121554032 目录 第1章 概述
  • 总结】python sklearn模型中random_state参数的意义

    这是在决策树CART模型时 遇到的 random state 是为了固定随机状态的 主要用在随机数据集 数据集的随机划分 设置决策树模型参数 设置随机森林模型参数 random state 取值大小可以是任意一个整数 在调参缓解 只要保证其
  • 基于Docker的JMeter分布式压测实战讲解

    一个JMeter实例可能无法产生足够的负载来对你的应用程序进行压力测试 如本网站所示 一个JMeter实例将能够控制许多其他的远程JMeter实例 并对你的应用程序产生更大的负载 JMeter使用Java RMI 远程方法调用 来与分布式网
  • 即将离开CSDN,转其他平台

    CSDN的几大作死操作 1 同质化太特么严重了 博客抄来抄去的 内容审核形同虚设 经常搜一个问题 从第一条到最后一条都是一模一样的内容 2 资源付费 资源付费本身是没有任何问题的 但是CSDN里面有几个有用的资源 很多大家花了钱一下载 发现
  • windows凭据密码怎么查看_管理Windows访问凭证,快速访问局域网上的共享资源

    内部网访问其他电脑的共享资源 基本上需要输入访问对方电脑资源允许的账号和密码 在第一次的访问中选择保存凭据后 以后访问就不要输入相应的账号和密码了 但也会出现因修改相关的访问密码或者取消了访问账号的改变 这样就会出现凭据失效的情况 下面介绍
  • 类似-Xms、-Xmn这些参数的含义:

    类似 Xms Xmn这些参数的含义 答 堆内存分配 JVM初始分配的内存由 Xms指定 默认是物理内存的1 64 JVM最大分配的内存由 Xmx指定 默认是物理内存的1 4 默认空余堆内存小于40 时 JVM就会增大堆直到 Xmx的最大限制
  • Python通过ARIMA模型进行时间序列分析预测

    ARIMA模型预测 时间序列分析预测就是在已有的和时间有关的数据序列的基础上构建其数据模型并预测其未来的数据 例如航空公司的一年内每日乘客数量 某个地区的人流量 这些数据往往具有周期性的规律 如下图所示 有的数据呈现出简单的周期性循环 有的
  • Linux嵌入式学习---c语言之循环结构

    Linux嵌入式学习 c语言之循环结构 一 while语句循环 1 1一般形式 1 2累加求和 二 do while语句循环 2 1do while语句一般形式 2 2do while语句特点 三 for语句循环 3 1for语句的一般形式
  • vue-resource请求数据的使用方法

    vue resource vue js关于客户端请求数据的官方插件 使用vue resource请求数据的步骤 1 安装vue resource插件 记得添加 save 若安装淘宝镜像用cnpm npm install vue resour
  • [蓝桥杯2023初赛] 整数删除

    给定一个长度为 N 的整数数列 A1 A2 AN 你要重复以下操作 K 次 每次选择数列中最小的整数 如果最小值不止一个 选择最靠前的 将其删除 并把与它相邻的整数加上被删除的数值 输出 K 次操作后的序列 输入格式 第一行包含两个整数 N
  • vscode:visual studio code 调试php

    简介 php是动态语言没有调试器的话排错起来很是麻烦 vscode可以说是程序员的福音 启动速度快 插件越来越多 跨平台 现在说一下vscode上调试php文件 所需文件 xampp 集成服务器 vscode Xdebug php debu
  • Rightware的Kanzi界面很快你的全液晶汽车仪表盘

    锋影 e mail 174176320 qq com 这是一个屏幕在行动的Kanzi UI编辑器 这是说 汽车仪表板没有显著在过去的几十年里发展公平 不知怎么的 我觉得喜欢的东西是会改变的 但什么也没做 至少在一个大的方式 当日产GTR天际
  • 面试必问的Spring IoC与Spring AOP面试题,你能get到几问?

    Spring IoC Q1 IoC 是什么 Q2 IoC 容器初始化过程 Q3 依赖注入的实现方法有哪些 Q4 依赖注入的相关注解 Q5 依赖注入的过程 Q6 Bean 的生命周期 Q7 Bean 的作用范围 Q8 如何通过 XML 方式创
  • (含源码)「自然语言处理(NLP)」RoBERTa&&XLNet&&语言模型&&问答系统训练

    来源 AINLPer 微信公众号 每日更新 编辑 ShuYini 校稿 ShuYini 时间 2020 07 27 引言 本次内容主要包括 稳健优化Bert模型 RoBERTa 自回归预训练模型 XLNet 无监督多任务学习语言模型 生成预
  • 【BT 协议】HFP 协议

    原文链接 https blog csdn net shichaog article details 52123439 HFP Hands free Profile 让蓝牙设备可以控制电话 如接听 挂断 拒接 语音拨号等 拒接 语音拨号要视蓝