首页 > 其他分享 >蓝牙电话之HFP-AT命令集(转载)

蓝牙电话之HFP-AT命令集(转载)

时间:2023-12-01 17:22:05浏览次数:37  
标签:电话 AG HFP 蓝牙 指令 link 命令集 HF

https://blog.csdn.net/weixin_44260005/article/details/104880536

蓝牙电话之HFP-AT命令集

蓝牙HFP协议中的AT命令都是复用《3GPP 27.007》和《GSM 07.07》这两个协议规定的AT命令集中的一部分指令,本篇只对HFP相关的AT命令学习下。

AT命令在AG和HF之间的交互是建立于RFCOMM连接成功的基础上,也就是《蓝牙电话之HFP-连接》所讲的内容,还没看过HFP连接的,建议先了解连接的相关知识,这样更有助于对AT命令的理解。

AT命令的规则:

  • 一个命令行,只能代表一个AT命令
  • < cr > carriage return的简写,相当于回车键,ASCII码为 0x0D
  • < lf > NL line feed, new line的简写,相当于换行键,ASCII码为0x0A
  • HF -> AG发送AT命令格式:< AT command >< cr >
  • AG -> HF发送AT命令格式:< cr >< lf >OK< cr >< lf > 或 < cr >< lf >ERROR< cr >< lf > 或 < cr >< lf >< result code >< cr >< lf >

AG给HF发送result code的AT命令如果是消息回复,后面都得再回复一条OK消息,除非回复的是+CME ERROR消息,后面的参数代表失败的原因。

结合下面HFP协议连接过程中AT交互的HCI截图再次理解上述规则:

 AT命令的构造及交互规则大概就是这样,接下来我们详细分析AT命令的下发和接收的处理流程。

AT命令下发的触发点有两个:

  1. 上层应用主动下发操作指令,比如拨打、接听、挂断电话等
  2. 协议栈内部事件,比如HFP连接过程中建立Service Level
    Connection所需的AT交互

HF侧的应用层通过BluetoothHeadsetClient提供的相关接口将电话相关操作下发到协议栈,协议栈bluedroid再根据event构造成不同的AT指令数据,通过RFCOMM写入l2cap链路发送到AG端。详细时序图如下:

AT命令的接收和下发的流程正好是反方向,具体时序图如下:

 上层蓝牙电话应用application通过 AG_EVENT 和 AG_CALL_CHANGED 这两个广播来接收相关AT指令发送过来的信息。

AG_EVENT广播:包含的信息有信号状态、质量、漫游,手机电池电量,来电响铃功功能。

    /**
     * Intent sending updates of the Audio Gateway state.
     * Each extra is being sent only when value it
     * represents has been changed recently on AG.
     * <p>It can contain one or more of the following extras:
     * {@link #EXTRA_NETWORK_STATUS},
     * {@link #EXTRA_NETWORK_SIGNAL_STRENGTH},
     * {@link #EXTRA_NETWORK_ROAMING},
     * {@link #EXTRA_BATTERY_LEVEL},
     * {@link #EXTRA_OPERATOR_NAME},
     * {@link #EXTRA_VOICE_RECOGNITION},
     * {@link #EXTRA_IN_BAND_RING}</p>
     */
    public static final String ACTION_AG_EVENT =
            "android.bluetooth.headsetclient.profile.action.AG_EVENT";

AG_CALL_CHANGED广播:在有电话状态发生变化时就会上报。

    /**
     * Intent sent whenever state of a call changes.
     *
     * <p>It includes:
     * {@link #EXTRA_CALL},
     * with value of {@link BluetoothHeadsetClientCall} instance,
     * representing actual call state.</p>
     */
    public static final String ACTION_CALL_CHANGED =
            "android.bluetooth.headsetclient.profile.action.AG_CALL_CHANGED";

接下来对HFP中使用比较多的AT命令依次做个简单的分析

(1) AT+BRSF (Bluetooth Retrieve Supported Features)

构造格式:AT+BRSF=<HF侧支持的features>,HF侧将自己支持的features发送给AG侧后,AG端也得将它支持的features通过“+BRSF”发送给HF。

<HF侧支持的features>数据:int值,现在只有前10位有效,因此该features参数的范围是 0~1023。

(2) +BRSF(Bluetooth Retrieve Supported Features)

构造格式:+BRSF: <AG侧支持的features>

<AG侧支持的features>数据:int值,现在只有前12位有效,该features参数的范围是 0~4095。

 HF和AG侧的features具体取何值,需要根据本端蓝牙的实际情况来定,各家支持的features可能有差异。BRSF相关指令的交互如下:

 (3) AT+BAC(Bluetooth Available Codecs)

构造格式: AT+BAC=[< u1 >[,< u2 >[,…[,< un >]]]] (u1、u2是编码方式编号),HF侧告知AG侧支持哪些编码方式,CVSD和mSBC是强制要支持的。

该指令发送的前提条件是在BRSF交互中的双方都支持编码协商(Codec Negotiation)

 (4) AT+CIND(Standard indicator update AT command)

AT+CIND=?测试指令,HF获取AG侧支持的指示器索引值和范围。在发送其他关于指示器的相关指令(AT+CIND? 或 AT_CMER)前,该命令至少请求一次。

 

AT+CIND? 读指令,HF读取AG侧当前的指示器各个值。这两条指令的交互关系如下图:

 

(5) AT+CMER(Standard event reporting activation/deactivation AT command)

构造格式:AT+CMER=[< mode >[,< keyp >[,< disp >[,< ind > [,< bfr >]]]]],但是在HFP协议中只有< mode >=3和< ind >=(0,1)这两个参数有效。

AT+CMER=3,0,0,1,activates“indicator events reporting”,激活AG侧主动通知电话状态变化信息

AT+CMER=3,0,0,0,deactivates“indicator events reporting”,关闭通知

(6) AT+CHLD(Standard call hold and multiparty handling AT
command)

构造格式:AT+CHLD=< n >,< n >有这几个值可供选择:0,1,1< idx >,2,2< idx >,3,4和?。下表分别介绍了各个值代表的意思是什么:

 一般情况下CHLD的交互为:

(7) +CIEV(Standard “indicator events reporting” unsolicited result code)

构造格式:+CIEV: < ind >,< value >,指示当前的电话状态,< ind >参数只有在“AT+CIND=?”中定义的指示器才有效,并且第一个指示器的索引值是1。这样CIEV指令中的指示器索引值就会和CIND中定义的指示器索引值相差1(因为CIND中定义的指示器索引值是按照顺序从0开始保存的),这个需要区分开。

 (8) AT+CLIP和+CLIP

AT+CLIP(Standard “Calling Line Identification notification” activation AT command)

构造格式:AT+CLIP=(0,1),使能或关闭主叫号码显示通知,使能后AG侧在来电时通过“+CLIP”指令将当前来电的号码和类型发送到HF。

+CLIP(Standard “Calling Line Identification notification” unsolicited result code)

构造格式:+CLIP: < number >,type >[,< subaddr >,< satype >[,[< alpha >][,< CLI validity >]]] ,在HFP协议中只关心< number >和< type >这两个参数。

< number >来电号码;< type >来电类型,取值范围大概有三种区分国内和国际号码,具体请参考相关协议规定。

 (9) AT+CLCC和+CLCC

AT+CLCC(Standard list current calls command),HF请求当前的电话信息列表

+CLCC(Standard list current calls result code)

构造格式:+CLCC: < idx >,< dir >,< status >,< mode >,< mpty >,< number >,< type >,AG侧回复当前的电话信息列表。如果当前没有电话,AG侧也需回复OK指令,不然将电话信息以列表形式发送给HF。各个参数代表的含义如下:

  • < idx >:当前电话是第几路电话,从1开始计数
  • < dir >:电话方向,0代表往外拨打的电话outgoing;1代表来电incoming
  • < status >:电话状态
    0 = Active
    1 = Held
    2 = Dialing (outgoing calls only)
    3 = Alerting (outgoing calls only)
    4 = Incoming (incoming calls only)
    5 = Waiting (incoming calls only)
    6 = Call held by Response and Hold
  • < mode >:电话模式,0 (Voice), 1 (Data), 2 (FAX)
  • < mpty >:是否为多方通话的电话
    0 - this call is NOT a member of a multi-party (conference) call
    1 - this call IS a member of a multi-party (conference) call
  • < number >可选项,电话号码
  • < type >可选项,电话类型

     

我们就选择分析了上述在HFP协议中常用的一些AT指令。AT命令和蓝牙通话息息相关,蓝牙电话基本上都是通过AT交互才能实时地获取到AG侧的电话信息,从而更新电话应用界面的显示保证和手机上的通话状态保持一致。

对其他AT指令感兴趣的同学可以参考协议《HFP_v1.7.1.pdf》,《3GPP 27.007》和《GSM 07.07》

标签:电话,AG,HFP,蓝牙,指令,link,命令集,HF
From: https://www.cnblogs.com/bluestorm/p/17870540.html

相关文章

  • Realtek蓝牙Android10.0移植结束后的基本测试和常见问题分析
    基本测试主要包括配置检查和BT测试两大部分配置检查:为了进一步确保porting没有问题,在测试之前先确认fw以及config文件是否存在。adbshell到测试平台的根目录,检查测试平台的vendor/firmware/目录中rtlxxxx_fw以及rtlxxxx_config文件是否存在(xxxx为BTChip型号)......
  • Scene渲染命令集合(executeCommands)分析
    Scene渲染命令集合(executeCommands)分析前提条件://已经确定了渲染缓冲区:view.globeDepth.framebufferpassState.framebuffer=view.globeDepth.framebuffer1、简单流程,没有pick和后处理//一般性流程executeCommands(scene,passState){//更新相机us.update......
  • 蓝牙?
    一块磁铁,它有看不见的磁场一根线通过磁铁附近,会影起磁场振动,产生电磁波,就像用树枝敲打水面,产生水波纹断断续续的给电线通电,能就产生断断续续的电磁波二进制信号就可以通过这种形式发射出去至此,蓝牙信号的发射问题解决了在室外,立一些金属杆,这些金属杆能感受到电磁波的振动,把这......
  • Windows 11 中的蓝牙版本和配置文件支持
    Windows11支持哪些蓝牙版本?Windows11版本22H2,所有版本都支持蓝牙核心规范版本5.3。WindowsServer 没有 内置蓝牙无线技术支持。独立硬件供应商可能(IHV)提供第三方蓝牙驱动程序。哪些蓝牙配置文件在Windows11中具有内置支持?核心规范Windows11支持蓝牙核心规......
  • arch蓝牙无法连接
    title:arch蓝牙无法连接banner_img:https://cdn.studyinglover.com/pic/2023/08/a5e39db5abf0853e6c456728df8bd971.jpgdate:2023-8-1017:18:00tags:-踩坑arch蓝牙无法连接在arcchlinux成功安装并且已经安装蓝牙的相关包之后,在设置打开蓝牙发现需要先开启蓝牙。没啥......
  • lily58 分体键盘改蓝牙
    强烈建议直接买现成的nice!nano(很便宜) 不要自己去打板,焊接元器件太麻烦了固件连接链接:https://pan.baidu.com/s/1vw6BSnZ6jEhGcFcRSiMgYg提取码:eqcj将固件拖入板子的存储中即可,焊接好排针,和电池,插上键盘收工!可加入无线充电模块,此处就不展示了。 ......
  • 蓝牙 相关信息 模块信息
    ST代理-NBIOT无线模块-lora-nbz智能水表-5G工业网关模块-NB燃气表-利尔达科技集团(lierda.com)什么是BLE(BluetoothLowEnerge)?-知乎(zhihu.com)......
  • 蓝牙版本
    我的电脑运行哪个蓝牙版本?蓝牙配件有时需要满足最低的蓝牙规格(版本)要求,才能充分发挥功能。查看你电脑上的蓝牙版本在任务栏上的搜索框中,键入“设备管理器”,然后从结果列表中选择它。选择“蓝牙”旁边的箭头以将其展开。选择蓝牙无线收发器列表(你的蓝牙无线收发器可能只......
  • 基于恒玄WT250芯片的蓝牙辅听耳机方案调试总结
    前记在蓝牙辅听领域卷了几年之后。各种型号的蓝牙辅听器都做过。这次,客户需要一款性价比超高的蓝牙辅听器。经过成本以及功能考量的筛选。最终定下来使用wt250来做一款低成本的蓝牙辅听器。硬件部分wt250是一个低成本的芯片。该芯片有着功耗低,资源多等特点被很多蓝牙耳机厂商采......
  • 02-低功耗蓝牙学习
    原文链接:https://learn.adafruit.com/ble-hid-keyboard-buttons-with-circuitpython/understanding-ble一.了解两个基本概念1.GAP:全称GenericAccessProfile通用接口规范.功能描述:GAP模式下主要是处理广播和广告(广播主要是发送公共信息,广告则是低功耗蓝牙用于宣告......