蓝牙btsnoop log,HFP协议连接流程详解,以及RFCOMM连接和常用AT指令

article/2025/6/19 10:56:34

HFP(Hands-Free):蓝牙免提协议,两个角色AG,HF端,AG端通常是手机设备,HF免提端一般为耳机车载等,hfp的连接首先要进行SDP,然后建立RFCOMM,然后SLC连接完成,HFP正式建立成功

inbandring tone:同步响铃功能,支持inbandring在电话响铃时会直接建立sco,通过sco播放手机端铃声,不支持inbandring则只会发ring给到耳机,播放自带铃声 叮叮叮~

SCO:区别于ACL,sco是另一条物理链路,用来同步传输实时语音数据

  1. HFP两个角色,音频网关AG端,HF免提端,在配对认证完成后L2CAP发起SDP,AG端去问询对端设备HF端支持的版本和features

  1. HFP建立连接需要在RFCOMM连接的基础上,L2CAP先发起RFCOMM的连接

3.RFCOMM帧类型:RFCOMM基于GSM TS 07.10,这是一种由GSM手机使用的一种非对称协议,可以将多个数据流复用到同一个物理串行电缆上。RFCOMM是对称的,使用TS 07.10特征帧和命令的子集通过L2CAP发送TS 07.10帧。TS 07.10的一些功能适用于蓝牙。

RFCOMM使用帧进行通信,RFCOMM帧作为L2CAP数据包中的有效负载数据。有五种不同的帧类型:

• SABM—Start Asynchronous Balanced Mode (startup command). 设置异步平衡模式

• UA—Unnumbered Acknowledgement (response when connected). 未编号的确认信息

• DISC—Disconnect (disconnect command). 断开连接

• DM—Disconnected Mode (response to a command when disconnected). 断开连接模式

• UIH—Unnumbered Information with Header check. 未编号的带校验头的信息

SABM, UA, DM和 DISC是底层的控制帧,RFCOMM使用信道,每个信道有一个数据连接链路标识(DLCI),UIH帧上的 DLCI = 0时用作发送控制信息, DLCI≠0时用作发送数据。

RFCOMM详细介绍:原文链接:https://blog.csdn.net/cmax098/article/details/117416460

4.RFCOMM第一个控制帧是SABM,之后对端UA响应,UIH进行参数协商,然后第二帧SABM进行数据链路的连接,然后RFCOMM建立完成

5.基于RFCOMM的连接,HFP进行AT指令的交互,首先是AT+BRSF,HF端告诉AG端支持哪些features

EC and/or NR function: Supported (echo canceling and noise reduction functions)

AG端回声消除和噪音减弱, 可以通过AT+NREC= 0关闭

Call waiting or 3-way calling: Supported 三方电话

CLI presentation capability: Supported CLIP来电显示

Voice recognition activation: Supported 语音识别

Remote volume control: Supported 通话音量调节

Enhanced call status: Supported 电话状态

Enhanced call control: Not Supported

Codec negotiation: Supported 编码协商

HF Indicators: Supported

eSCO S4: Supported

6.+BRSF AG端回复HFP所支持features

Three-way calling: Supported

EC and/or NR function: Supported

Voice recognition function: Supported

In-band ring tone capability: Not Supported 同步响铃功能

Attach a number to a voice tag: Not Supported

Ability to reject a call: Supported

Enhanced call status: Supported

Enhanced call control: Not Supported

Extended error result codes: Supported

Codec negotiation: Supported

HF Indicators: Supported

eSCO S4: Supported

7.AT+BAC = 1,2. 通话sco支持的编码,cvsd 8k,msbc 16k

8.AT+CIND=? AT Command: Get supported indicators, 问询AG支持各种指示灯状态下的值范围

Indicators Supported

Call Status indicator:Values it can take: 0,1

Call Setup indicator:Range of values it can take: 0-3

Service availability indicator:Range of values it can take: 0-1

Signal indicator:Range of values it can take: 0-5

Roaming indicator:Values it can take: 0,1

Battery charge indicator:Range of values it can take: 0-5

Call Held indicator:Range of values it can take: 0-2

9.AT+CIND=? AT Command: Get indicators' status 问询当前AG端当前各个指示灯状态值

Indicator's Status

Call Status: No calls in progress

Call Setup: Not currently in call set up

Service availability: No service. No Home/Roam network available.

Signal indicator: Signal strength level 0

Roaming indicator: Roaming is not active

Battery charge indicator: Level 2

Call Held indicator: No calls held

10.AT+CMER=3, 0, 0, 1.Activates "indicator status reporting" 激活AG端通话状态报告

11.AT+CHLD=?.Retrieve "Three way calling" Info 获取AG端三方电话信息

12.AT+BIND = …,HF 告知 AG 其支持指示器特性

13.AT+BIND=? ,HF 向 AG 询问 AG 所支持的HF指示器信息

以上指令交互完成后,HFP SLC(service level connection)建立完成,HFP连接完成

14.其它常用AT指令

AT+NREC = 0 关闭回声消除和噪音减弱

AT+BIEV = *,* HF端蓝牙电量

AT+VGS = 12 (0-15) HF端speaker音量等级

AT+VGM = 12 (0-15) HF端mic送花音量等级

AT+CLIP = 1 开启来电显示

AT+CCWA = 1 AT Command: Enable call waiting notification

ATA 接听电话

AT+CHUP 挂断电话

AT+BCS = 2 sco编码协商时选择第二个编码msbc

.......

15.AG端ciev状态值

+CIEV:1,0 挂断电话或无活跃的通话

+CIEV:1,1 接听电话

+CIEV:2,0 当前没有等待的电话需要处理

+CIEV:2,2 拨打电话

+CIEV:2,3 已拨通

....

16.sco通话的建立流程

先AT+BCS进行编码协商

Command: HCI_Enhanced_Setup_Synchronous_Connection

Event: HCI_Synchronous_Connection_Complete

端开的话看对应连接的Connection_Handle


http://chatgpt.dhexx.cn/article/r5kDATTa.shtml

相关文章

蓝牙协议HFP(Hands-Free Profile)电话免提协议 Connection management 连接管理HFP SLC 的建立跟释放

零. 概述 本文章主要讲下电话免提协议HFP(Hands-Free Profile)Connection management。包括connection establishment 跟connection realease,那connection establishment又会涉及到HFP SLC的建立过程。 本节讲解的内容就是一下HFP fea…

蓝牙A2DP和HFP编解码

一、A2DP A2DP全名是(Advanced Audio Distribution Profile) 蓝牙音频传输模型协定,提供通过蓝牙连接传输音频流的能力,比如手机播放音乐,蓝牙耳机通过蓝牙连接听歌。 mp3和flac音频编码都是在PCM音频编码基础上二次编…

Rockchip安卓11.0 16k wbs msbc HFP PCM语音通话支持

Rockchip安卓11.0 16k wbs/msbc HFP PCM语音通话支持 调试平台: 安卓11.0, rk3328, 博通ap6212芯片, HFP 8K已经调通的情况下. SDK修改支持16k wbs/msbc HFP PCM语音注意点如下: 1. bluedroid(system/bt) 博通方案中, ESCO_DATA_PATH_PCM 为1代表蓝牙芯片作为pcm master, 6…

蓝牙电话之HFP-电话音频

蓝牙电话之HFP协议中的电话音频 蓝牙技术通信的内容多种多样,其中音频部分包含媒体音频和电话音频。 媒体音频:播放蓝牙音乐的数据,这种音频对质量要求高,数据发送有重传机制,从而以l2cap的数据形式走ACL链路。编码方…

VSCode 按下tab键自动补全功能失效

问题描述:标签自动补全插件已经安装,某天按下tab键自动补全标签的功能突然失效了。解决方法: 1、找到路径 file > Preferences >settings 2、搜索tabs,选择Extensions里面的Emmet,将复选框的√打上就ok啦!

javascript 按下回车键触发input表单的切换(enter键代替tab键功能)

本来是想用js代码去模拟键盘按下来实现该功能&#xff0c;但是没有实现到。后来想到一种比较笨的方法。局限性是只能这些表单元素只能在同个层面下才能切换。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><m…

sublime text3 tab键功能失效

选择首选项 -> 快捷键设置 出现下面编辑页 在右边添加下面一些设置&#xff08;记得要用逗号与前面内容分开&#xff09;&#xff1a; { "keys": ["tab"], "command": "reindent", "context":[{ "key": "…

计算机键盘上的2个定位键,电脑键盘上Tab 键的神奇之处!(用途详解)

下面通过实例来详细解释下&#xff1a; 假设“D:\cfan”路径下&#xff0c;有文件夹&#xff1a; a、 ab &#xff0c;有文件&#xff1a; abc.txt &#xff0c; ac.txt 。依次点击“开始→运行”输入“cmd”&#xff0c;按下回车打开命令提示符。先输入“D:”&#xff0c;回车…

微型计算机上的tab作用,TAB键有什么用处

Tab键对大家来说都是比较熟悉吧。比如写文章时开头要空两格就可用这个键。但是它还有什么特殊功能呢&#xff0c;不一定是大家都知道的。下面小编来详细的介绍下几种tab键的常见功能 tab键作用一&#xff1a;改变焦点 聚焦到下一个按钮&#xff0c;输入框或者链接等。例如&…

计算机键盘上的tab键是什么键,电脑Tab键有什么用处

电脑Tab键有什么用处 Tab键对大家来说都是比较熟悉吧。比如写文章时开头要空两格就可用这个键。但是它还有什么特殊功能呢&#xff0c;不一定是大家都知道的。下面小编来详细的介绍下几种tab键的常见用处&#xff1a; tab键作用一&#xff1a;改变焦点 聚焦到下一个按钮&#x…

电脑Tab键有什么功能?6个实用功能总结!

我最近对电脑的键盘很有兴趣&#xff0c;想了解一下各个键有什么特殊的用法。今天正好看到Tab键&#xff0c;想问下大家知道电脑的Tab键有什么比较好用的功能吗&#xff1f; 在电脑键盘上&#xff0c;Tab键是一个常见的键&#xff0c;它具有多种功能和用途。无论是在文本处理、…

tab键功能

tab 键可以实现命令及路径等补全&#xff0c;提高输入效率&#xff0c;避免出错 tab键可以命令补全&#xff0c;还有路径、文件名补全。 命令补全&#xff1a; 在Linux命令行下&#xff0c;输入字符后&#xff0c;按两次Tab键&#xff0c;shell就会列出以这些字符打头的所有…

计算机键盘上的tab键是什么键,键盘Tab键有什么作用?

Tab键——跳格键&#xff0c;大家都比较熟悉了吧&#xff0c;但是到底它有什么特殊的使用功能&#xff0c;却未必是大家都知道的哦。今天就将Tab键的几种使用功能进行了整理&#xff0c;大家可以参考学习学习。 1、跳格。当我们在网页输入表单的时候&#xff0c;在一个输入控件…

电脑Tab键有什么用

Tab键对大家来说都是比较熟悉吧。比如写文章时开头要空两格就可用这个键。但是它还有什么特殊功能呢&#xff0c;不一定是大家都知道的。下面我来详细的介绍下几种tab键的常见用处&#xff1a; tab键作用一&#xff1a;改变焦点 聚焦到下一个按钮&#xff0c;输入框或者链接等…

电脑Tab键有什么功能?分享Tab键的6个妙用

Tab键tabulator key 的缩写&#xff0c;意思是跳格键。基本用法是可以用来绘制无边框的表格&#xff0c;还可以在单词间留下间隔&#xff0c;一般等于八个空格的长度。但是您知道电脑Tab键有什么功能吗&#xff1f;以下一些关于Tab键的使用和功能的介绍&#xff0c;希望这些可以…

matlab EOF程序

% eof第一模态图用变量eof的第一列&#xff0c;以此类推&#xff1b;相应的时间系数用pc第一行 clear clcx [2 6 1 5 2;9 4 0 5 4;12 2 55 9 10;4 55 78 2 13]; %原始数据&#xff0c;列为站点或格点&#xff0c;行为时间序列上的值 x(1,:) x(1,:) - mean(x(1,:)); x(…

C语言——EOF的用法——while(scanf(“%d“,num)!=EOF)

简介&#xff1a; EOF是一个计算机术语&#xff0c;为End Of File的缩写&#xff0c;在操作系统中表示资料源无更多的资料可读取。资料源通常称为档案或串流。通常在文本的最后存在此字符表示资料结束。、 概念&#xff1a; 在C语言中&#xff0c;或更精确地说成C标准函数库中…

cat << EOF 什么意思?

cat <<EOF 什么意思&#xff1f; cat命令表示查看&#xff0c;而cat <<EOF命令表示将进行输入&#xff0c;直到以EOF终止符来结束输入&#xff08;最后的新行&#xff09;。EOF必须写在一行的头部&#xff0c;前面不能有制表符或者空格。如果结束符EOF前面有制表符…

【C语言中的EOF】零基础看懂EOF如何使用while(scanf(“%d %d”,a,b)感叹号=EOF)

&#x1f31f;前言 ✨如今我们努力奔跑&#xff0c;不过是为了追上那个曾经被寄予厚望的自己&#xff01; 【&#x1f47b;&#x1f47b;&#x1f47b;大家好&#xff0c;我是姜姜爱柚子&#xff0c;将在这里分享所学所得&#xff0c;如果有不正确的地方&#xff0c;希望大家多…

c语言中eof的作用,eof在c语言中表示什么

eof在c语言中表示文件结束符。在while循环中以EOF作为文件结束标志&#xff0c;这种以EOF作为文件结束标志的文件&#xff0c;必须是文本文件。在文本文件中&#xff0c;数据都是以字符的ASCII码值的形式存放的。 在C语言中&#xff0c;或更精确地说成C标准函数库中表示文件结束…