指南-Luat二次开发教程指南-功能开发教程-通话

本文档详细介绍了CAT1模块如Air720UG、Air724UG进行语音通话的实现流程,包括API接口、消息订阅、通话状态处理、拨号与挂断、设置麦克风增益等。同时,针对常见问题如无法拨打电话、紧急号码拨号行为进行了分析,并提供了相应的解决方案。此外,还提到了固件对VOLTE的支持情况以及不同运营商卡的通话功能支持列表。

通话

简介

对于只支持 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)

常见问题

  1. 打不了电话,确认能不能正常注册上网络,有没有欠费。确认是否开通VOLTE 功能, 只有开通 VOLTE 功能才能进行语音通话。固件是否支持VOLTE功能。
  2. 天线厂调试天线时,如何提供来电自动接听的软件
    ril.regUrc(“RING”,function()ril.request(“ATA”) end)
  3. audio.setMicGain()通话中设置mic增益,必须在通话建立以后设置
  4. 紧急号码拨号问题:
  • 常用紧急号码:报警求助 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. 通话过程中给对端播放音频文件。
    1.3 lua 从3032版本开始,已经支持通话过程中,给对端播放音频文件功能,接口如下:
    image.png
  2. CAT1是否支持视频通话?
    不支持
  3. 移动、电信,联通卡的通话功能支持情况列表
    固件是否支持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电信卡

相关资料以及购买链接

cc API说明

Air724UG开发板
Air724 开发板使用说明

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值