Bluetooth技术学习笔记 ——HFP之Call

1. 来电

若收到来电,AG会一直给HF重复发送RING alerts,直到接通电话,或者拒接电话。

HF在收到RING alerts后,开始响铃。铃声根据实际情况而定,或AG设置的铃声,或HF自带的铃声。

AG SDP或+BRSF消息表明AG支持“In-band ring tone”,则AG需要将铃声发送给HF。

(1)HF接电话 —— In-band ring

  • 前提条件:AG与HF已存在SLC连接。若不存在,则AG需先发起SLC连接建立。
  • AG在已建立的音频连接上发送铃声。
  • 流程图:

在这里插入图片描述
(2)HF接电话 ——No In-band ring

  • 前提条件:AG与HF已存在SLC连接。若不存在,则AG需先发起SLC连接建立。
  • 若音频连接不存在,则AG需要在HF接电话之后,开始建立音频连接。
  • 流程图:

在这里插入图片描述
(3)AG接电话

  • 前提条件:① AG与HF已存在SLC连接;②响铃可按(1)(2)两种方式。
  • 流程图:
    在这里插入图片描述

(4)HF拒接电话

  • HF可以在任何时候拒接电话。
  • 流程图:
    在这里插入图片描述

(5)AG拒接电话

  • AG在UI界面拒绝电话,或者因其它原因挂断电话。
  • 流程图:
    在这里插入图片描述
2. 打电话

(1)HF发起打电话,电话号码来自HF

  • HF向AG发送ATDdd…dd;命令;
  • AG根据HF提供的电话号码,发起打电话,并向HF发送+CIEVcallsetup=2
  • AG一旦收到了远端设备响铃的消息,则向HF发送+CIEVcallsetup=3;若网络不支持给AG发送远端设备响铃的消息,则AG可能不会发送该消息。
  • 流程图:
    在这里插入图片描述

(2)HF发起打电话,电话号码来自AG内存卡

  • HF给AG发送ATD>Nan…;命令;
  • AG根据存储在内存卡Nan…;中的号码,发起打电话,并向HF发送+CIEVcallsetup=2
  • AG一旦收到了远端设备响铃的消息,则向HF发送+CIEVcallsetup=3
  • 流程图:
    在这里插入图片描述

(3)HF发起打电话,电话号码为AG最近一次拨打的号码

  • HF给AG发送AT+BLDN命令;
  • AG根据最近一次拨打的号码,发起打电话,并向HF发送+CIEVcallsetup=2
  • 流程图:
    在这里插入图片描述
3. 三方通信

以下描述的前提是:已存在一个通话。

(1)Three-Way Calling — Call Waiting Notification

  • 前提:已使能Call Waiting Notification
  • 若AG收到了第三方来电,则向HF发送来电等待通知**+CCWA**,和**+CIEV**结果码,callsetup=1
  • 若HF拒绝了电话,则向AG发送AT+CHLD=0
  • 若HF想把一个正在等待接入的电话加入到电话会议中,需要先发送 AT+CHLD=2命令,再发送AT+CHLD=3命令。
  • 流程图:
    在这里插入图片描述

(2)Three-Way Calls – Third Party Call Placed from the HF

  • 流程图:
    在这里插入图片描述
     
  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CIME文件是CESM(Community Earth System Model)的配置文件,其中包含了模拟实验的各种配置信息。可以使用Java的IO流读取CIME文件,并解析其中的各项配置信息。 以下是一个简单的Java代码示例,演示了如何读取CIME文件并获取其中的配置信息: ```java import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class CIMEParser { public static void main(String[] args) { String fileName = "cesm.cfg"; // CIME文件名 BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(fileName)); String line = null; while ((line = reader.readLine()) != null) { // 解析CIME文件中的每一行 if (line.startsWith("CESM_BLDN")) { String[] parts = line.split("="); String cesmBuildName = parts[1].trim(); System.out.println("CESM build name: " + cesmBuildName); } else if (line.startsWith("RUN_STARTDATE")) { String[] parts = line.split("="); String startDate = parts[1].trim(); System.out.println("Simluation start date: " + startDate); } // 解析其他配置信息... } } catch (IOException e) { e.printStackTrace(); } finally { try { if (reader != null) { reader.close(); } } catch (IOException e) { e.printStackTrace(); } } } } ``` 在上面的代码中,我们使用BufferedReader和FileReader两个类来读取CIME文件中的每一行。然后,我们使用String类的startsWith()和split()方法来解析每一行,获取其中的配置信息。在这个示例中,我们只是获取了CESM构建名称和模拟开始日期,你可以根据需要获取其他配置信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值