蓝牙通话HFP之实例-incoming call

蓝牙通话是蓝牙非常重要的功能之一,也是最为复杂的功能,涉及到的场景非常之多,尤其时三方通话的引入后,应用场景就会更加复杂了,这也是蓝牙开发中碰到问题最多的模块之一。之前的文章(https://blog.youkuaiyun.com/Jzj1234555/article/details/143019096)我介绍了蓝牙电话从A拨打远端电话的例子;今天这篇文章介绍从远端拨进来电话,并从HF端接听和拒绝电话的实例,还会涉及到带内铃声的介绍。

HFP Service Level connection establishment

在这里插入图片描述
这HFP服务建立的步骤如下:

  1. HF和AG协商各自支持哪些feature,HF发送AT+BRSF=<HF supported features>,AG则发送+BRSF=<AG supported features>。
  2. 如果步骤一的BRSF协商下来双方都支持Codec Negotiation ,则HF 发送AT+BAC=告知自己支持了哪些codec,最新HFP 1.9则支持了3种Codec:CVSD,mSBC,LC3,CVSD也就是窄带编码,采样率为8KHz;mSBC为宽带编码,采样率为16KHZ;LC3则为超宽带编码,采样率能到32KHZ。
  3. HF发送AT+CIND=?询问AG支持哪些指示器,AG则回复 +CIND: (“call”,(0,1)),(“callsetup”,(0-3)),(“service”,(0-1)),(“signal”,(0-5)),(“roam”,(0,1)),(“battchg”,(0-5)),(“callheld”,(0-2))。
  4. HF发送AT+CIND用以获取AG当前指示器的状态,AG则回复 +CIND: 0,0,1,5,0,5,0,代表的含义:(No call active,Not currently in call set up,Home/Roam network available,Signal Quality 5;Roaming is not active,Battery Charge Level 5,No calls held)。
  5. HF发送AT String: AT+CMER=3,0,0,1使能AG指示器的通知功能,也就是电话状态发送变化时,AG会主动发送CIEV通知HF。
  6. HF发送AT+CHLD=?获取AG支持哪些三方通话特性(前提时BRSF协商下来都支持三方通话),AG则回复:AT String: +CHLD: (0,1,2,3)。数值的具体含义见文章结尾。
  7. HF发送AT+BIND = <HF supported HF indicators>告知AG端他所支持的HF端的通用状态指示器。
  8. HF发送AT+BIND=?获取AG端支持哪些状态指示器,AG端则回复:+BIND: (1,2)。从https://www.bluetooth.com/specifications/assigned-numbers/获取到目前支持的HF Indicator就1,2两个值。1表示Enhanced Safety Enabled or Disabled;2表示: Remaining level of Battery;
  9. HF发送AT+BIND?用于获取AG端状态指示器是enable or disable,AG会回复两个AT命令:
    AT String: +BIND: 1,1\r\n ;AT String: +BIND: 2,1\r\n 表示Enhanced Safety Enabled和Remaining level of Battery Enabled。

实例空中包如下: 在这里插入图片描述

In-Band Ring

在带内铃声响起之前,AG和HF还需要做一些功能上的AT指令的交互,如下图:
在这里插入图片描述

  1. AT+NREC=0:噪声和回显的关闭
  2. +BSIR表示 BandRing tone打开
  3. AT+CCWA=1:通话等待指示功能打开
  4. AT Exchange: AT+BIA=1,1,0,0,0,0,1,Active AG端1,2,7状态指示器,也就是(Call,CallSetup,Callheld)。
  5. AT+CLIP=1:AG端电话号码通知功能打开
  6. +XAPL=iPhone,2:这个是苹果拓展的AT指令
  7. AT+VGS=10:HF端speaker的音量为10
  8. AT+BIEV=2,100:HF Indicator状态更新,剩余电量水平为100,也就是满电

当有电话拨进来的时候:
在这里插入图片描述

  1. AG发送+BCS:2 让HF选择mSBC codec,HF回复AT+BCS=2表示同意
  2. AG发送+CIEV: 2,1表示An incoming call process ongoing
  3. 接着AG发送RING表示需要手机发送带内铃声给HF
  4. AG发送+CLIP:xxxx,xxxx表示电话号码
  5. 接着AG发送eSCO Audio 数据包给HF,这里么有看到eSCO的建立流程,估计没有抓到。

HF Reject incoming call

在这里插入图片描述

  1. HF发送AT+CHUP给AG,通知其挂断电话
  2. AG断开eSCO链路
  3. AG发送+CIEV:2,0 告知HF: Not currently in call set up

HF Answer incoming call

在这里插入图片描述
接通电话也需要经过带内铃声,通知号码,紧接着只要HF发送:ATA就接通电话了。

附录:AT+CHLD:

0 = Releases all held calls or sets User Determined User Busy (UDUB) for a waiting call.

  • 1 = Releases all active calls (if any exist) and accepts the other (held or waiting) call.
  • 1 = Releases call with specified index ().
  • 2 = Places all active calls (if any exist) on hold and accepts the other (held or waiting) call.
  • 2 = Request private consultation mode with specified call (). (Place all calls on hold EXCEPT the call indicated by .)
  • 3 = Adds a held call to the conversation.
  • 4 = Connects the two calls and disconnects the subscriber from both calls (Explicit Call Transfer). Support for this value and its associated functionality is optional for the HF.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值