HFP(hands free profle)

zj-studyrecoding / 2023-07-18 / 原文

HFP蓝牙免提协议:

1. 角色:

 AG(audio gateway):音频网关,相当于手机

 HF(hand free): 免提端,相当于耳机

  

2. 支持的feature:

  

  

  支持的codec:

  

3. 连接管理(Connection management)

 3.1 SLC(service level connect establishment)服务级连接的建立

   SLC就是一些AT指令的交互,交互完后,SLC就建立成功了。

   前提:SLC建立前必须存在HFP基于RFCOMM的server channel的连接,有了这个连接才能在HF和AG间交互AT command。

   SLC连接过程:

   3.1.1 支持的feature交换(Supported features exchange):

       a. HF发送AT+BRSF=<HF supported features>告诉AG它支持的feature

     b. AG会发送+BRSF告诉HF它支持的feature

     这样HF和AG都知道了对方都支持的feature。

   3.1.2 codec协商(Codec Negotiation):

     a. 如果HF支持Codec Negotiation feature,并且通过+BRSF知道了AG也支持Codec Negotiation feature

     b. HF发送AT+BAC=<HF available codecs>指令告诉AG它自己可用的codec(包括msbc、cvsd)
   3.1.3 AG指示器(AG Indicators):
     Indicators包括:service, call, or call setup
     在检索AG支持的feature后,HF将要确定AG支持的indicators,以及这些indicators 的顺序
     a. HF发送AT+CIND=?指令来检索AG支持的indicators,以及这些indicators 的顺序
     b. HF发送 AT+CIND?来检索当前的indicators的状态
     c. HF发送AT+CMER指令来开启 "Indicators status update",相当于打开了总开关,AG会回应OK
     d. 当AG中indicators的值有改变,AG将发送 +CIEV告诉HF他的indicators的值改变了
     e. 如果HF和AG都支持“Call waiting and 3-way calling” feature,HF将发送AT+CHLD=?命令来检索AG是如何支持call hold and multiparty services
   3.1.4 HF指示器(HF Indicators)

       a. 如果HF和AG都支持HF Indicator feature,HF将发送AT+BIND=<HFsupported HF indicators>指令通知AG它支持的Indicators,AG会回应OK

     b. HF发送AT+BIND=?来获取AG支持的HF indicators,AG会发送+BIND告诉HF它支持的HF indicators,并跟着OK

     c. 在HF接收到AG支持的HF indicators后,HF将发送AT+BIND?命令来确定开启哪些HF indicators。AG将用+BIND来响应,并跟着OK

     d. 之后,只要HF的indicators改变,他都将发送AT+BIEV指令到AG   

   3.1.5 结束SLC(End of Service Level Connection):

    

 3.2 SLC释放(Service Level Connection Release)

   释放了SLC会导致RFCOMM和audio connect连接被移除。

   a. HF或AG的用户请求将发起SLC释放

   b. 禁用HF或AG的蓝牙功能将发起SLC释放

   c. 如果在AG呼出电话期间执行了“Audio Connection transfer towards the AG”,AG将发起SLC释放,当通话通断后,AG将尝试重新建立SLC

4.手机状态信息(Phone status information

 4.1 注册状态的传递(Transfer of Registration Status)

     a. HF发送AT+CMER命令来开启AG的“Registration status update”功能,相当于打开总开关。

   b. HF发送AT+BIA命令来使能/失能单个的indicator,相当于小开关

   c. 如果总开关打开了,并且对应的indicator的小开关打开了。当AG中对应的registration status发生了变化,AG将发送+CIEV: …告诉HF其变化的值

 4.2 信号强度指示的传递(Transfer of Signal Strength Indication)

     a. HF发送AT+CMER命令来开启AG的“Registration status update”功能,相当于打开总开关。

   b. HF发送AT+BIA命令来使能/失能单个的indicator,相当于小开关

   c. 如果总开关打开了,并且对应的indicator的小开关打开了。当AG中对应的signal strength发生了变化,AG将发送+CIEV: <Signal strength Ind>,<Value>告诉HF其变化的值

 4.3 漫游指示的传递(Transfer of Roaming Status Indication)

     a. HF发送AT+CMER命令来开启AG的“Registration status update”功能,相当于打开总开关。

   b. HF发送AT+BIA命令来使能/失能单个的indicator,相当于小开关

   c. 如果总开关打开了,并且对应的indicator的小开关打开了。当AG中对应的roaming status发生了变化,AG将发送+CIEV: <RoamingInd>,<Value>告诉HF其变化的值

 4.4 电量指示的传递(Transfer of Battery Level Indication)

     a. HF发送AT+CMER命令来开启AG的“Registration status update”功能,相当于打开总开关。

   b. HF发送AT+BIA命令来使能/失能单个的indicator,相当于小开关

   c. 如果总开关打开了,并且对应的indicator的小开关打开了。当AG中对应的battery level发生了变化,AG将发送+CIEV: <Battery level Ind>,<Value>告诉HF其变化的值

 4.5 查询运营商(Query of Operator Selection)

     a. HF发送AT+COPS=3,0命令来设置名称格式为长字母、数字(为了用户能看懂)

   b. 在内部事件或用户发起的操作,HF发送AT+COPS?命令AG当前的运营商

   c. AG将发送+COPS: <mode>, 0, <operator>来告诉HF当前的运营商

 4.6 扩展音频网关错误码(Extended Audio Gateway Error Codes)

       执行这个过程来使能/失能AG的错误码。

   a. HF发送AT+CMEE=<n>命令来使能/失能AG的错误码

   b. 每当由于AT命令而导致与AG功能有关的错误时,AG应向HF发送+CME error: <err>响应

 4.7 呼叫转移,呼叫建立和呼叫保持状态(Transfer of Call, Call Setup and Call Held Status)

   a. HF发送AT+CMER命令来开启AG的“Registration status update”功能,相当于打开总开关。

   b. AT+BIA命令对Call, Call Setup, or Held Call indicators没有效果

   c. 当AG中对应的Call、Call Setup、 Held Call发生了变化,AG将发送+CIEV告诉HF其变化的值

5. 音频连接处理(Audio Connection handling)

5.1 Audio Connection set up

 

5.2 Audio Connection release

 

5.3 Codec Connection set up