零. 概述

本文章主要讲下电话免提协议HFP(Hands-Free Profile)Call waiting notification,Three-Way Call Handling,Response and Hold,

Enhanced Call Control Mechanisms Feature.就是一下HFP feature中的NO.11和NO.12以及NO.19和NO.21b,主要是应用在三方通话中,是可选feature

Android 实现三方通话代码 手机三方通话功能_Android 实现三方通话代码

一. 声明

本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:

Android 实现三方通话代码 手机三方通话功能_蓝牙三方通话_02

第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。

第二篇: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)。

Android 实现三方通话代码 手机三方通话功能_Hands-Free_03

-------------------------------------------------------------------------------------------------------------------------


Github代码:https://github.com/sj15712795029/bluetooth_stack

蓝牙学习目录

--------------------------------------------------------------------------------------------------------------------------

二. Call waiting notification

Android 实现三方通话代码 手机三方通话功能_蓝牙电话协议_04

The HF may issue the AT+CCWA command to enable the “Call Waiting notification” function in the AG. Once the “Call Waiting notification” is enabled, the AG shall send the corresponding +CCWA unsolicited result code to the HF whenever an incoming call is waiting during an ongoing call. It is always assumed that the “call waiting” service is already active in the network.

AT+CCWA=1 àenable call waiting notification

AT+CCWA=0 àdisable call waiting notification

如果使能后,在通话中再来电AG就会自动发送过来 +CCWA:xxx

比如+CCWA: "10086",129

Android 实现三方通话代码 手机三方通话功能_蓝牙电话协议_05

三. Three-Way Call Handling

Android 实现三方通话代码 手机三方通话功能_蓝牙电话协议_06

此部分就是当三方通话出现的情况下,HF给AG的操纵AT command,格式为AT+CHLD=xx

xx的具体说明在AT+CHILD=?的地方已经说明,但是要说明一点就是idx是CLCC问询回来

四. Response and Hold

Android 实现三方通话代码 手机三方通话功能_蓝牙三方通话_07

4.1 Query Response and Hold Status

The HF shall execute this procedure to query the status of the “Response and Hold” state of the AG.

Android 实现三方通话代码 手机三方通话功能_Android 实现三方通话代码_08

如果AG在response或者hold状态,那么就会返回+BTRH:0,如果没有在response或者hold状态,那么只会返回OK

4.2 Put an Incoming Call on Hold from HF

Android 实现三方通话代码 手机三方通话功能_蓝牙HFP_09

从HF端把incoming call状态设置成hold状态

4.3 Put an Incoming Call on Hold from AG

Android 实现三方通话代码 手机三方通话功能_蓝牙三方通话_10

从AG端把电话设置成hold状态

4.4 Accept a Held Incoming Call from HF

Android 实现三方通话代码 手机三方通话功能_蓝牙HFP_11

从HF端接听hold接听hold状态的手机

4.5 Accept a Held Incoming Call from AG

Android 实现三方通话代码 手机三方通话功能_蓝牙HFP_12

从AG端接听hold状态的电话

4.6 Reject a Held Incoming Call from HF

Android 实现三方通话代码 手机三方通话功能_Android 实现三方通话代码_13

从HF端拒绝hold状态的电话

4.7 Reject a Held Incoming Call from AG

Android 实现三方通话代码 手机三方通话功能_Hands-Free_14

从AG端拒接hold状态的电话

4.8 held Incoming Call Terminated by Caller

Android 实现三方通话代码 手机三方通话功能_蓝牙HFP_15

打电话的人直接挂掉电话

五. Enhanced Call Control Mechanisms

Android 实现三方通话代码 手机三方通话功能_Hands-Free_16

此部分同样用到三方通话的AT command,AT+CHLD,详细请参照前面小节