3.2.6 通话控制 ============== 作者:闫国梁 最后更新时间: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 ,,,[,,[,]][+CLCC:, .. raw:: html ,,,[,,[,]][…]]] \| \| 测试命令 \| AT+CLCC=? \| OK \| 参数定义: +------+-------------+------+---------------------------------------+ | 参数 | 定义 | 取值 | 对取值的说明 | +======+=============+======+=======================================+ | | 呼叫识别 id | - | 整数型;请参考3GPP TS22.030中第 | | | | | 4.5.5.1 | | | | | 节中描述,此参数可在+CHLD命令中被使用 | +------+-------------+------+---------------------------------------+ \| .. raw:: html | 呼叫方向 \| 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")