通话
简介
对于只支持 4G 的 CAT1模块(Air720UG、Air724UG)而言,需要用本命令打开 VOLTE 功能才能进行语音通话。而 Air720UH 模块支持 4G 和 2G,而 2G 支持语音通话,所以不需要打开 VOLTE 就可以进行语音通话。
API说明
cc的API在luat lib有做封装,建议直接用lib的API接口。
API接口 | 描述 |
---|---|
cc.anyCallExist() | 是否存在通话 |
cc.getState(num) | 查询某个号码的通话状态 |
cc.dial(num, delay) | 呼出电话 |
cc.hangUp(num) | 挂断通话 |
cc.accept(num) | 接听电话 |
cc.transVoice(data, loop, downLinkPlay) | 通话中发送声音到对端,必须是12.2K AMR格式 |
cc.dtmfDetect(enable, sens) | 设置dtmf检测是否使能以及灵敏度 |
cc.sendDtmf(str, playtime, intvl) | 发送dtmf到对端 |
audio.setMicGain(mode,level) | 设置mic增益等级 |
详细的API介绍见cc API章节
实现流程
-
订阅消息的回调函数
通过sys.subscribe()订阅客户需要处理的消息的回调函数。 -
来电处理
来电会上报CALL_INCOMING消息,我们这里只需要处理上面CALL_INCOMING注册的回调函数就可以了。 -
接通来电
通过调用cc.accept()来接通电话。 -
电话接通
电话接通时会上报CALL_CONNECTED消息,我们这里只需要处理上面CALL_CONNECTED注册的回调函数就可以了。 -
主动挂断电话
主动挂断电话通过调用cc.hangUp()来实现。 -
通话结束
通话结束后会有CALL_DISCONNECTED消息上报,我们这里只需要处理上面CALL_DISCONNECTED注册的回调函数就可以了。 -
拨打电话
拨打电话通过调用cc.dial()来实现。 -
设置mic增益等级
通过audio.setMicGain()接口设置通话中mic增益,且必须在通话建立以后设置。
示例
相关实例程序在脚本库的demo\call下,这里主要是大概讲了一下主要流程,其它细节部分可以下载demo研究完整的代码。
订阅消息
这里由于一些事件是通过消息驱动处理的,所有我们订阅需要处理的消息,这里我们订阅了,网络注册消息,来电,接通,结束消息。
sys.subscribe("NET_STATE_REGISTERED",ready)
sys.subscribe("CALL_INCOMING",incoming)
sys.subscribe("CALL_CONNECTED",connected)
sys.subscribe("CALL_DISCONNECTED",disconnected)
接通来电
这里通过注册按键的方式来接通电话的,这个注册了POWER_KEY_IND按键消息,当收到我们按下键的消息后,这里就会调用cc.accept()来接通电话。
sys.subscribe("POWER_KEY_IND",function() audio.stop(function() cc.accept(num) end) end)
挂断电话
这个是在接通电话的处理函数中,开机了一个定时器,通话110秒后,通过调用cc.hangUp()主动挂断电话。
local function connected(num)
log.info("testCall.connected")
--110秒之后主动结束通话
sys.timerStart(cc.hangUp,110000,num)
end
拨打电话
这里是在收到网络注册NET_STATE_REGISTERED的消息后,启动了一个定时去10秒后通过调用cc.dial()来拨打电话。
--- “通话功能模块准备就绪””消息处理函数
-- @return 无
local function ready()
log.info("tesCall.ready")
--呼叫10086
sys.timerStart(cc.dial,10000,"10086")
end
设置mic增益等级
audio.setMicGain(mode,level)通话中设置mic增益,必须在通话建立以后设置,mode表示增益类型:这里设置为"call",level表示增益等级,取值为0-7。
audio.setMicGain("call",7)
常见问题
- 打不了电话,确认能不能正常注册上网络,有没有欠费。确认是否开通VOLTE 功能, 只有开通 VOLTE 功能才能进行语音通话。固件是否支持VOLTE功能。
- 天线厂调试天线时,如何提供来电自动接听的软件
ril.regUrc(“RING”,function()ril.request(“ATA”) end) - audio.setMicGain()通话中设置mic增益,必须在通话建立以后设置
- 紧急号码拨号问题:
-
常用紧急号码:报警求助 110 ,火警119 ,医疗救护 120 ,交通事故 122
-
拨号流程: 移动卡注册时拨打110号码时是走的正常号码呼叫,VOLTE正常能正常接通;电信卡注册时网络是提供了一个紧急号码列表给终端,110在其列表里面,所以拨打110时终端走的是紧急呼叫,网络又实际不支持,所以会CSFB TO 2G尝试,所以打不通。而加上区号走的是正常号码呼叫流程,在LTE下可以呼叫成功。
-
具体实测数据如下:
724开发板测试4G情况,720UH开发板测试2G情况,110,119,120,122情况应该一样,这里没有全部拨打,下面列举的是实际测试过的情况。
卡 | 网络 | 紧急号码是否加区号 | 是否可以成功呼叫紧急号码 | 成功或失败的原因 |
---|---|---|---|---|
不插卡 | 2G | 加区号 | 112打不通,110,119,120,122打不通 | 只能拨打紧急号码 |
不插卡 | 2G | 不加区号 | 112打通语音提示,110,119,120,122打通语音提示 | 属于紧急号码可以打通 |
不插卡 | 4G | 加区号 | 112打不通,110,119,120,122打不通 | 4G网络不支持紧急拨号 |
不插卡 | 4G | 不加区号 | 112打不通,110,119,120,122打不通 | 4G网络不支持紧急拨号 |
移动卡 | 2G | 加区号 | 112提示号码不存在,110可以正常打通 | 112加区号当不存在号码处理,110当普通号码处理 |
移动卡 | 2G | 不加区号 | 112打通语音提示,110可以正常打通 | 属于紧急号码可以打通 |
移动卡 | 4G | 加区号 | 112打不通,110可以正常打通 | 112加区号当不存在号码处理,110当普通号码处理 |
移动卡 | 4G | 不加区号 | 112打不通,110,119,120可以正常打通 | 112当不存在号码处理,110,119,120当普通号码处理 |
联通卡 | 2G | 加区号 | 112提示号码不存在,110可以正常打通 | 112加区号当不存在号码处理,110当普通号码处理 |
联通卡 | 2G | 不加区号 | 112打通语音提示,110可以正常打通 | 属于紧急号码可以打通 |
联通卡 | 4G | 加区号 | 112打不通,110可以正常打通 | 112加区号当不存在号码处理,110当普通号码处理 |
联通卡 | 4G | 不加区号 | 112打不通,110可以正常打通 | 112当不存在号码处理,110当普通号码处理 |
电信卡 | 2G | 加区号 | 112提示号码不存在,110可以正常打通 | 112加区号当不存在号码处理,110当普通号码处理 |
电信卡 | 2G | 不加区号 | 112打通语音提示,110打通语音提示 | 属于紧急号码可以打通 |
电信卡 | 4G | 加区号 | 112提示号码不存在,110可以正常打通 | 112加区号当不存在号码处理,110当普通号码处理 |
电信卡 | 4G | 不加区号 | 112打不通,110打不通 | 当紧急号码处理,4G网络不支持紧急拨号 |
- 通话过程中给对端播放音频文件。
1.3 lua 从3032版本开始,已经支持通话过程中,给对端播放音频文件功能,接口如下:
- CAT1是否支持视频通话?
不支持 - 移动、电信,联通卡的通话功能支持情况列表
固件是否支持VOLTE可以通过固件名称判断,带有NOVOLTE标志的,说明不支持VOLET。也可以通过AT口发送AT+SETVOLTE?查询,0 表示关闭VOLET,1表示打开VOLET功能。
模块 | 卡 | 固件是否支持VOLTE | 是否支持通话功能 |
---|---|---|---|
720UH | 移动卡 | 是 | 是 |
720UH | 移动卡 | 否 | 是 |
720UH | 联通卡 | 是 | 是 |
720UH | 联通卡 | 否 | 是 |
720UH | 电信卡 | 是 | 是 |
720UH | 电信卡 | 否 | 是 |
724UG | 移动卡 | 是 | 是,卡要开通VOLTE功能 |
724UG | 移动卡 | 否 | 否 |
724UG | 联通卡 | 是 | 是,卡要开通VOLTE功能 |
724UG | 联通卡 | 否 | 否 |
724UG | 电信卡 | 是 | 是,卡要开通VOLTE功能 |
724UG | 电信卡 | 否 | 否 |