通话控制
========

作者:闫国梁

最后更新时间:2020年7月7日

通话语音
--------

对于只支持 4G 的 CAT1模块(Air720UG、Air724UG)而言,需要用本命令打开
VOLTE 功能才能进行语音通话。而 Air720UH 模块支持 4G 和 2G,而 2G
支持语音通话,所以不需要打开 VOLTE 就可以进行语音通话。 ## AT模式 ###
发起呼叫:ATD 执行命令,用于发出语音呼叫,呼叫号码长度不超过20位。
语法规则:

+-----+-------------+-------------------------------------------------+
| 命  | 语法        | 返回和说明                                      |
| 令  |             |                                                 |
| 类  |             |                                                 |
| 型  |             |                                                 |
+=====+=============+=================================================+
| 执  | ATD;        | 命令成功,则返回:OK                            |
| 行  |             | 如果                                            |
| 命  |             | 成功建立连接,则返回:CONNECT如果没检测到拨号音 |
| 令  |             | dial tone(并且当 ATX2 or ATX4 时): NO          |
|     |             | DIALTONEIf busy(并且当 ATX3 or ATX4):           |
|     |             | BUSY通话被挂断或建立失败: NO                    |
|     |             | CARRIER如果被叫无应答: NO ANSWER               |
+-----+-------------+-------------------------------------------------+
|     | ATD         | 数据呼叫成功,则返回:                          |
+-----+-------------+-------------------------------------------------+

参数定义:

+------+----------+------+------------------------------------------+
| 参数 | 定义     | 取值 | 对取值的说明                             |
+======+==========+======+==========================================+
|      | 呼叫号码 |      | 由以下字符组成:0-9, \* , #, +, A, B, C  |
|      |          |      | 注:拨 112 可以建立紧急呼叫,不需要 SIM  |
|      |          |      | 卡。                                     |
+------+----------+------+------------------------------------------+

举例:

+-------------+----------+--------------------------------------------+
| 命令(→)   | 实例     | 解释和说明                                 |
| /返回(←)  |          |                                            |
+=============+==========+============================================+
| →           | AT+SE    | 打开VOLTE功能                              |
|             | TVOLTE=1 |                                            |
+-------------+----------+--------------------------------------------+
| ←           | OK       | 注:对于只支持4G的CAT1模块(Air720UG、     |
|             |          | Air724UG)而言,需要用 AT+SETVOLTE=1       |
|             |          | 命令打开 VOLTE 功能才能进行语音通话。而    |
|             |          | Air720UH 模块支持 4G 和 2G,所以不需要打开 |
|             |          | VOLTE 就可以进行语音通 话                  |
+-------------+----------+--------------------------------------------+
| →           | ATD1316  | 语音                                       |
|             | 23***98; | 呼叫号码131623\ **98(**\ 是为了保护隐私, |
|             |          | 将实际数字隐去,实际操作时要如实输入号码) |
+-------------+----------+--------------------------------------------+
| ←           | OK       | 对方接听电话                               |
|             | CONNECT  |                                            |
+-------------+----------+--------------------------------------------+
| →           | AT+CHUP  | 模块主动挂断通话                           |
+-------------+----------+--------------------------------------------+
| ←           | OK       | 返回OK                                     |
+-------------+----------+--------------------------------------------+

**6.3**\ 接听来电:\ **ATA**
有只有一个来电(RING)时,输入该命令接听来电。当有更多的来电时,请使用
AT+CHLD命令接听新的来电。 语法规则:

======== ==== ==========
命令类型 语法 返回和说明
======== ==== ==========
执行命令 ATA  OK
======== ==== ==========

举例:

+---------------------+------+---------------------------------------+
| 命令(→)/返回(←) | 实例 | 解释和说明                            |
+=====================+======+=======================================+
| ←(URC)            | RING | 有RING上报,表示有来电。 注:RING     |
|                     |      | 是一个URC命令(Unsolicited Result     |
|                     |      | Code )                               |
+---------------------+------+---------------------------------------+
| →                   | ATA  | 模块接听来电                          |
+---------------------+------+---------------------------------------+
| ←                   | OK   | 返回OK,说明接听来电成功              |
+---------------------+------+---------------------------------------+

挂断通话:ATH
~~~~~~~~~~~~~

通话过程中,输入执行命令会挂断所有电话,包括当前通话(active)、等待通话(waiting)和挂起通话(holding)。
语法规则:

======== ==== ==========
命令类型 语法 返回和说明
======== ==== ==========
执行命令 ATH  OK
======== ==== ==========

举例:

=================== ==== ========================
命令(→)/返回(←) 实例 解释和说明
=================== ==== ========================
←(URC)            RING 有RING上报,表示有来电。
→                   ATA  模块接听来电
←                   OK   建立通话
→                   ATH  挂断通话
←                   OK   OK
=================== ==== ========================

挂断通话:AT+CHUP
~~~~~~~~~~~~~~~~~

通话过程中,输入执行命令会挂断所有电话,包括当前通话(active)、等待通话(waiting)和挂起通话(holding)。
作用与 ATH 相同。 语法规则:

======== ======= ==========
命令类型 语法    返回和说明
======== ======= ==========
执行命令 AT+CHUP OK
======== ======= ==========

列出所有当前的呼叫:AT+CLCC
~~~~~~~~~~~~~~~~~~~~~~~~~~~

语法规则:

======== ==== ====
命令类型 语法 返回
======== ==== ====
======== ==== ====

\| 执行命令 \| AT+CLCC \| [+CLCC:,

.. raw:: html

   <dir>

,,,[,,[,]][+CLCC:,

.. raw:: html

   <dir>

,,,[,,[,]][…]]] \| \| 测试命令 \| AT+CLCC=? \| OK \|

参数定义:

+------+-------------+------+---------------------------------------+
| 参数 | 定义        | 取值 | 对取值的说明                          |
+======+=============+======+=======================================+
|      | 呼叫识别 id | -    | 整数型;请参考3GPP TS22.030中第       |
|      |             |      | 4.5.5.1                               |
|      |             |      | 节中描述,此参数可在+CHLD命令中被使用 |
+------+-------------+------+---------------------------------------+

\|

.. raw:: html

   <dir>

| 呼叫方向 \| 0 \| 移动发起的呼叫(MO 呼叫) \|
|  \| \| 1 \| 移动终止的呼叫(MT 呼叫) \|
|  \| 呼叫状态 \| 0 \| active \|
|  \| \| 1 \| held \|
|  \| \| 2 \| dialing(MO 呼叫) \|
|  \| \| 3 \| alerting(MO 呼叫) \|
|  \| \| 4 \| incoming(MT 呼叫) \|
|  \| \| 5 \| waiting(MT 呼叫) \|
|  \| \| 7 \| released(by network) \|
|  \| 承载/电信业务 \| 0 \| 语音 \|
|  \| \| 1 \| 数据 \|
|  \| \| 2 \| 传真 \|
|  \| 该呼叫是否属于多方呼叫 \| 0 \| 不属于 \|
|  \| \| 1 \| 属于 \|
|  \| 对方号码 \| - \| 字符串类型,需加双引号。电话号码格式符合 定义 \|
|  \| 呼叫号码类型,具体请参考 3GPPTS 24008 10.5.4.7 部分 \| 129 \|
  未知类型 \|
|  \| \| 145 \| 国际号码 \|
|  \| \| 161 \| 国内号码 \|
|  \| \| 177 \| 特殊的网络号码 \|
|  \| 对应的电话簿中姓名 \| - \| 字符型 \|

举例:

+---------------------+----------------------+----------------------+
| 命令(→)/返回(←) | 实例                 | 解释和说明           |
+=====================+======================+======================+
| →                   | ATD10086;            | 语音呼叫号码10086    |
+---------------------+----------------------+----------------------+
| ←                   | OK                   |                      |
+---------------------+----------------------+----------------------+
| →                   | AT+CLCC              | 对方接听             |
|                     |                      | 电话前查询下通话情况 |
+---------------------+----------------------+----------------------+
| ←                   | +CLCC:               | =2                   |
|                     | 1,0,                 | 表示                 |
|                     | 2,0,0,“10086”,129,"" | 拨号中,对方尚未接听 |
|                     | OK                   |                      |
+---------------------+----------------------+----------------------+
| ←                   | CONNECT              | 对方接听             |
+---------------------+----------------------+----------------------+
| →                   | AT+CLCC              | 此时再查询下通话状态 |
+---------------------+----------------------+----------------------+
| ←                   | +CLCC:               | = 0                  |
|                     | 1,0,                 | 表                   |
|                     | 0,0,0,“10086”,129,"" | 示电话接通并保持激活 |
+---------------------+----------------------+----------------------+
|                     | OK                   |                      |
+---------------------+----------------------+----------------------+
| →                   | AT+CHUP              | 挂电话               |
+---------------------+----------------------+----------------------+
| ←                   | OK                   |                      |
+---------------------+----------------------+----------------------+
| →                   | AT+CLCC              | 显示通话状态         |
+---------------------+----------------------+----------------------+
| ←                   | OK                   | 只有                 |
|                     |                      | 一个OK,表示没有通话 |
+---------------------+----------------------+----------------------+

呼叫保持和多方通话:AT+CHLD
~~~~~~~~~~~~~~~~~~~~~~~~~~~

使用该指令,可以控制
TA的附加业务:呼叫保持和多方通话。呼叫能被保持,恢复,释放和加入多方通话。

语法规则:

======== ========= ====================
命令类型 语法      返回
======== ========= ====================
设置命令 AT+CHLD=  OK
测试命令 AT+CHLD=? +CHLD: (取值列表) OK
======== ========= ====================

语法规则:

+------+--------+------+--------------------------------------------+
| 参数 | 定义   | 取值 | 对取值的说明                               |
+======+========+======+============================================+
|      | 整数型 | 0    | 释放所有已保持的呼叫或者                   |
|      |        |      | 为等待中的呼叫设置用户决定用户忙(UDUB)条件 |
+------+--------+------+--------------------------------------------+
|      |        | 1    | 如果存在当前呼叫,释放所有                 |
|      |        |      | 当前呼叫并接听另外一个已保持或等待中的呼叫 |
+------+--------+------+--------------------------------------------+
|      |        | 1X   | 释放当前某一特定的呼叫X                    |
+------+--------+------+--------------------------------------------+
|      |        | 2    | 如果存在当前呼叫,保持所有                 |
|      |        |      | 当前呼叫并接听另外一个已保持或等待中的呼叫 |
+------+--------+------+--------------------------------------------+
|      |        | 2X   | 保持除呼叫 X 外的所有当前呼叫              |
+------+--------+------+--------------------------------------------+
|      |        | 3    | 将一个被保持(held)的通话                 |
|      |        |      | 加入到活跃(active)通话中(建立多方通话) |
+------+--------+------+--------------------------------------------+

举例:

+---------+-----------------------------+-----------------------------+
| 命令    | 实例                        | 解释和说明                  |
| (→)/  |                             |                             |
| 返      |                             |                             |
| 回(←) |                             |                             |
+=========+=============================+=============================+
| →       | AT+CCWA=1,1                 |                             |
+---------+-----------------------------+-----------------------------+
| ←       | OK                          |                             |
+---------+-----------------------------+-----------------------------+
| →       | ATD137******98;             | 呼叫137******98             |
+---------+-----------------------------+-----------------------------+
| ←       | OK                          |                             |
+---------+-----------------------------+-----------------------------+
| ←       | CONNECT                     | 对方                        |
| (URC) |                             | 接听,通话建立,双方通话中  |
+---------+-----------------------------+-----------------------------+
| ←       | +CCWA: “13601*****97”,129,1 | 有又一个电                  |
| (URC) |                             | 话进来,此时会有如此URC上报 |
+---------+-----------------------------+-----------------------------+
| →       | AT+CHLD=2                   | HOLD第一                    |
|         |                             | 路(+CLCC中id=1),接通第二路 |
|         |                             | (+CLCC中id=2)               |
+---------+-----------------------------+-----------------------------+
| ←       | OK                          |                             |
+---------+-----------------------------+-----------------------------+
| →       | AT+CLCC                     | 查询下当前所有当前通话      |
+---------+-----------------------------+-----------------------------+
| ←       | +CLCC:                      | 第一路                      |
|         | 1,0,1,0,0,“137******98”,129 | 第三个参数即=1,表示被保持  |
|         | +CLCC:                      | 第二路=0,表示正处激活状态  |
|         | 2,1,0,0,                    |                             |
|         | 0,“13601*****97”,128,“TEST” |                             |
|         | OK                          |                             |
+---------+-----------------------------+-----------------------------+
| →       | AT+CHLD=21                  | 切回到第一路                |
+---------+-----------------------------+-----------------------------+
| ←       | OK                          |                             |
+---------+-----------------------------+-----------------------------+
| →       | AT+CHLD=3                   | 建立三方通话(前            |
|         |                             | 提为:SIM卡已经开通此功能) |
+---------+-----------------------------+-----------------------------+
| ←       | OK                          |                             |
+---------+-----------------------------+-----------------------------+
| →       | AT+CHLD=11                  | 释放第一路                  |
+---------+-----------------------------+-----------------------------+
| ←       | OK                          |                             |
+---------+-----------------------------+-----------------------------+

产生 DTMF 音:AT+VTS
~~~~~~~~~~~~~~~~~~~~

DTMF(Double Tone Multiple
Frequency,双音多频),用来在电话建立以后拨打分机号码或自动语音服务。
语法规则:

======== ==================== =============================
命令类型 语法                 返回和说明
======== ==================== =============================
设置命令 AT+VTS=或 AT+VTS=[,] OK
测试命令 AT+VTS=?             +VTS:(取值列表),(取值列表) OK
======== ==================== =============================

参数定义:

+-------+------+---+---------------------------------------------------+
| 参数  | 定义 | 取 | 对取值的说明                                     |
|       |      | 值 |                                                  |
+=======+======+===+===================================================+
|       | 单个 |   | 单个 ASCII 字符,不需要双引号””。范围如下 0-9,    |
|       | DTMF |   | #,*, A-D。DTMF 持续时间定义如下:                 |
|       |      |   | 如果AT+VTS=,则持续时间通过命令+VTD               |
|       |      |   | 来设置;如果AT+VTS=,,则持续时间通过定义          |
+-------+------+---+---------------------------------------------------+
|       | 持续 | 1 | tone 的持续时间,以1/10 秒为单位                  |
|       | 时间 | ~ |                                                   |
|       |      | 1 |                                                   |
|       |      | 0 |                                                   |
+-------+------+---+---------------------------------------------------+

举例:

+----------------------+----------------------+----------------------+
| 命令(→)/ 返回(←) | 实例                 | 解释和说明           |
+======================+======================+======================+
| →                    | AT+VTS=?             |                      |
+----------------------+----------------------+----------------------+
| ←                    | +VTS:                |                      |
|                      | (0-9                 |                      |
|                      | ,*,#,A,B,C,D),(1-10) |                      |
|                      | OK                   |                      |
+----------------------+----------------------+----------------------+
| 以下的例子           |                      |                      |
| 是拨打总机接通后,再 |                      |                      |
| 用DTMF拨打分机109:  |                      |                      |
+----------------------+----------------------+----------------------+
| →                    | ATD10086;            | 拨打10086            |
+----------------------+----------------------+----------------------+
| ←                    | OK CONNECT           | 接通                 |
+----------------------+----------------------+----------------------+
| →                    | AT+VTS=2             | 选择自               |
|                      |                      | 动语音服务中的2服务  |
+----------------------+----------------------+----------------------+
| ←                    | OK                   |                      |
+----------------------+----------------------+----------------------+

DTMF TONE 周期:AT+VTD
~~~~~~~~~~~~~~~~~~~~~~

语法规则:

======== ======== ====================
命令类型 语法     返回
======== ======== ====================
设置命令 AT+VTD=  OK
查询命令 AT+VTD?  +VTD: OK
测试命令 AT+VTD=? + VTD: (取值列表) OK
======== ======== ====================

参数定义:

==== ========== ==== ==============================
参数 定义       取值 对取值的说明
==== ========== ==== ==============================
\    Tone的长度 1~10 以1/10 秒为单位的tone 持续时间
==== ========== ==== ==============================

LUAT模式
--------

模块功能:通话管理 ### cc.anyCallExist()\ `¶ <#ccanycallexist>`__
是否存在通话

-  参数

无

-  返回值

bool result 存在通话返回true,否则返回false

-  例子

::

   result = cc.anyCallExist()

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

cc.getState(num)\ `¶ <#ccgetstatenum>`__
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

查询某个号码的通话状态

-  参数 \| 传入值类型 \| 释义 \| \| — \| — \| \| string \| num 查询号码
   \|

-  返回值

number state 通话状态,状态值参考本模块Fields定义

-  例子

::

   state = cc.getState('10086')

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

cc.dial(num, delay)\ `¶ <#ccdialnum-delay>`__
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

呼出电话

-  参数 \| 传入值类型 \| 释义 \| \| — \| — \| \| string \| num 呼出号码
   \| \| number \| **可选参数,默认为\ ``0``**\ ,delay
   延时delay毫秒后,才发起呼叫 \|

-  返回值

bool
result,true表示允许发送at命令拨号并且发送at,false表示不允许at命令拨号

-  例子

::

   cc.dial('10086')

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

cc.hangUp(num)\ `¶ <#cchangupnum>`__
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

挂断通话

-  参数 \| 传入值类型 \| 释义 \| \| — \| — \| \| string \| num
   号码,若指定号码通话状态不对 则直接退出
   不会执行挂断,若挂断时会挂断所有电话 \|

-  返回值

nil

-  例子

::

   cc.hangUp('10086')

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

cc.accept(num)\ `¶ <#ccacceptnum>`__
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

接听电话

-  参数 \| 传入值类型 \| 释义 \| \| — \| — \| \| string \| num
   号码,若指定号码通话状态不对 则直接退出 不会接通 \|

-  返回值

nil

-  例子

::

   cc.accept('10086')

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

cc.transVoice(data, loop, downLinkPlay)\ `¶ <#cctransvoicedata-loop-downlinkplay>`__
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

通话中发送声音到对端,必须是12.2K AMR格式

-  参数 \| 传入值类型 \| 释义 \| \| — \| — \| \| string \| data 12.2K
   AMR格式的数据 \| \| bool \| **可选参数,默认为\ ``nil``**\ ,loop
   是否循环发送,true为循环,其余为不循环 \| \| bool \|
   **可选参数,默认为\ ``nil``**\ ,downLinkPlay
   声音是否在本端播放,true为播放,其余为不播放 \|

-  返回值

bool result true为成功,false为失败

-  例子

::

   cc.transVoice("#!AMR\010\060*********")
   cc.transVoice("#!AMR\010\060*********",true)
   cc.transVoice("#!AMR\010\060*********",true,true)

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

cc.dtmfDetect(enable, sens)\ `¶ <#ccdtmfdetectenable-sens>`__
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

设置dtmf检测是否使能以及灵敏度

-  参数 \| 传入值类型 \| 释义 \| \| — \| — \| \| bool \|
   **可选参数,默认为\ ``nil``**\ ,enable
   true使能,false或者nil为不使能 \| \| number \|
   **可选参数,默认为\ ``3``**\ ,sens 灵敏度,最灵敏为1 \|

-  返回值

nil

-  例子

::

   cc.dtmfDetect(true)

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

cc.sendDtmf(str, playtime, intvl)\ `¶ <#ccsenddtmfstr-playtime-intvl>`__
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

发送dtmf到对端

-  参数 \| 传入值类型 \| 释义 \| \| — \| — \| \| string \| str
   dtmf字符串,仅支持数字、ABCD*# \| \| number \|
   **可选参数,默认为\ ``100``**\ ,playtime 每个dtmf播放时间,单位毫秒
   \| \| number \| **可选参数,默认为\ ``100``**\ ,intvl
   两个dtmf间隔,单位毫秒 \|

-  返回值

nil

-  例子

::

   cc.sendDtmf("123")