零. 概述
本文章主要讲下电话免提协议HFP(Hands-Free Profile)Phone status information。包括Signal Strength(信号强度),Roaming Status(漫游状态),Battery Level(电量),Operator Selection(运营商),Transfer of Call, Call Setup and Call Held Status(电话状态)。
本节讲解的内容就是一下HFP feature中的NO.2
一. 声明
本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:
第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。
第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等
第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层(baseband),链路管理层(LMP)等
第四篇:传统蓝牙host介绍,主要介绍传统蓝牙的协议栈,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的协议吧。
第五篇:低功耗蓝牙controller介绍,主要介绍低功耗蓝牙芯片,包括物理层(PHY),链路层(LL)
第六篇:低功耗蓝牙host介绍,低功耗蓝牙协议栈的介绍,包括HCI,L2CAP,ATT,GATT,SM等
第七篇:蓝牙芯片介绍,主要介绍一些蓝牙芯片的初始化流程,基于HCI vendor command的扩展
第八篇:附录,主要介绍以上常用名词的介绍以及一些特殊流程的介绍等。
另外,开发板如下所示,对于想学习蓝牙协议栈的最好人手一套。以便更好的学习蓝牙协议栈,相信我,学完这一套视频你将拥有修改任何协议栈的能力(比如Linux下的bluez,Android下的bluedroid)。
-------------------------------------------------------------------------------------------------------------------------
CSDN学院链接(进入选择你想要学习的课程):https://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144
蓝牙交流扣扣群:970324688
Github代码:https://github.com/sj15712795029/bluetooth_stack
入手开发板:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.18.5aeb41f973iStr&id=622836061708
蓝牙学习目录:https://blog.csdn.net/XiaoXiaoPengBo/article/details/107727900
--------------------------------------------------------------------------------------------------------------------------
二. HFP Phone Status Information 介绍
本小节介绍内容如下:
Phone status information分为6个部分介绍,此6部分都是AT+CMER使能后, AG会发送消息+CIEV的消息过来的介绍。
但是会增加一个细节AT command,就是AT+BIA,那这个命令的作用就是active/deactive某一个indicator
说白了AT+CMER是全局使用,AT+BIA是局部使能。
比如:AT+CMER使能后,AT+BIA失能signal的indicator,那么signal的CIEV AG就不会主动发送了,AT+CMER我们前面已经做了介绍,下面就介绍下AT+BIA
AT+BIA (Bluetooth Indicators Activation)
Syntax: AT+BIA=[[<indrep 1>][,[<indrep 2>][,…[,[<indrep n>]]]]]]
举例:
假设有7个indicator,index是根据AT+CIND=?得到,使能全局是AT+BIA=1,1,1,1,1,1,1
失能全部AT+BIA=0,0,0,0,0,0,0
如果要失能第3个,可以写成这样AT+BIA=1,1,0,1,1,1,1
也可以写成这样AT+BIA=1,1,0,后续参数自动忽略,采用默认
2.1 Transfer of Signal Strength Indication
此就是手机的信号,AG会通过+CIEV发送给HF
在上一篇connection manager的时候已经介绍了index怎么获取以及取值多少,我们这里不再介绍index怎么获取,可以自行参考以前的文章,我们只是贴下value的范围,可以看到范围是0~5
2.2 Transfer of Roaming Status Indication
此就是手机的漫游,AG会通过+CIEV发送给HF
在上一篇connection manager的时候已经介绍了index怎么获取以及取值多少,我们这里不再介绍index怎么获取,可以自行参考以前的文章,我们只是贴下value的范围,可以看到只有两个值 0跟1,说白了就是有没有插手机卡,能不能入网
2.3 Transfer of Battery Level Indication of AG
此就是手机的电量,AG会通过+CIEV发送给HF
在上一篇connection manager的时候已经介绍了index怎么获取以及取值多少,我们这里不再介绍index怎么获取,可以自行参考以前的文章,我们只是贴下value的范围,可以看到范围是0~5
2.4 Query Operator Selection
此命令是问询手机的网络,比如”中国移动”
整个过程如下图所示:
• HF shall send AT+COPS=3,0 command to set name format to long alphanumeric. Long alphanumeric is defined as a maximum of 16 characters. The value of 3 as the first parameter indicates that this command is only affecting the format parameter (the second parameter). The second parameter, 0, is the value required to set the format to “long alphanumeric.”
• Upon an internal event or user-initiated action, HF shall send the AT+COPS? (Read) command to find the currently selected operator.
• AG shall respond with +COPS response indicating the currently selected operator. If no operator is selected, <format> and <operator> are omitted
2.5 Report Extended Audio Gateway Error Results Code
此部分是用来使能AG报告给HF更详细的错误
• The HF shall issue the AT+CMEE command to enable/disable the “Extended Audio Gateway Error Result Code” in the AG. The parameter <n> controls the activation/deactivation of the “Extended Error result code” notification.
• Whenever there is an error relating to the functionality of the AG as a result of AT command, the AG shall send +CME ERROR: <err> response to the HF.
如果有错误出现,那么AG会通过 +CME ERROR:<err>发送给HF,
详细的错误都有:
2.6 Transfer of Call Status
Call status我们在前面已经说明value的值,分别为:
会有几种case会更新call active
1)Incoming call,HF发送接听指令或者AG接听,都会触发
2) Outgoing call
以上两种情况是call value更新为1,下面三种call value变为0
1) HF主动发命令挂断
2) AG主动挂断
3) 通话中,突然没有信号
2.7 Transfer of Callsetup Status
有以下几个callsetup的value
1) Outgoing call
2) Incoming call
2.8 Indication of Status for Held Calls
在前面我们有介绍call held的value
一共有3个case,你只需要知道这三个case就行,后续介绍三方通话的feature的时候会重新详细说明
1) Call Held or Active/Held Position Swap
2) Held Call Release
3) Active Call Terminated/Call Remains Held