android蓝牙hfp协议分析(一)--hfp协议交互流程

本文详细介绍了蓝牙HFP协议的交互流程,从SDP服务搜索、RFCOMM连接到Service Level Connection和SCO链路的建立。重点讨论了AT指令在建立SLC连接中的作用,包括支持能力交换、Codec协商、AG Indicator和HF Indicator的功能及状态更新。通过对HFP协议的深入理解,为后续的源代码分析提供了基础。
摘要由CSDN通过智能技术生成

右图是hfp协议所处的位置,hfp(heads-free-profile)可以让蓝牙设备控制电话,如接听,挂断,拒接,语音拨号等,我们看到如果要使用hfp协议,需要两个设备之间进行hfp连接,而hfp底层又是依赖RFCOMM,SDP,所以进行hfp连接前,需要进行RFCOMM的连接,以及sdp服务搜索,后面还有进行service level connection,最后才进行sco链路的连接

在hfp协议中,定义了音频网关和免提组件两个角色

AG–该设备为音频(特别是手机)的输入/输出网关。

HF–该设备作为音频网关的远程音频输入/输出机制,并可提供若干遥控功能

右图就是hfp的连接流程,可以看到和我上面介绍的流程一样,先进行sdp服务发现协议,发送hfp协议,然后进行RFCOMM协议连接,这样双方蓝牙设备就可以发送AT指令进行交互了,第三部分就是通过AT指令进行交互来进行Service Level Connection这个procedure了,最后创建SCO连接,就完成了hfp协议的连接,在这其中,AT指令交互建立SLC连接是重点

右图就是Service Level Connection建立连接的AT指令交互过程,当这整个交互过程完成后,就完成了SLC的建立,其中的AT指令代表的含义,接下来会介绍

右图是SLC连接发送AT指令所代表的含义:

AG和HF均可以通过内部或者用户事件发起Service Level连接建立。Service Level Connection建立的前提是RFCOMM已经建立。同样RFCOMM的建立发起者可以是AG或者HF

下面来具体解析下,AT指令功能的含义:

    支持能力交换

    首先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。

这里我们对hfp协议的连接就有了一个初步的认识,根据hfp协议的spec,一步一步的介绍了hfp协议连接的流程,为我们后面进行hfp协议连接源代码的分析奠定了一个很好的基础,后面我们接着说

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识分享小达人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值