1. telephony分层结构图

在OpenHarmony中,telephony分层结构图如下:

img

telephony中各个部件介绍如下:

部件名称 组件职责
call_manager 通话管理
主要管理CS(Circuit Switch,电路交换)、IMS(IP Multimedia Subsystem,IP多媒体子系统)和OTT(over the top,OTT解决方案)三种类型的通话,负责申请通话所需要的音视频资源,并处理多路通话时产生的各种冲突。通话管理主要分为UI交互、服务管理、系统通话管理、通话音频管理、通话视频管理和蓝牙通话管理六大模块。
cellular_call 蜂窝通话
提供基于运营商网络的基础通话实现,包含基于2G/3G的CS(Circuit Switch,电路交换)通话和基于4G/5G的IMS(IP Multimedia Subsystem,IP多媒体子系统)通话,包含VoLTE/ VoWIFI/ VoNR语音、视频、会议,支持CS和IMS通话之间的域选控制和切换,支持紧急通话。
cellular_data 蜂窝数据
提供蜂窝数据联网能力,包括蜂窝数据开启和关闭、蜂窝数据异常检测与恢复、蜂窝数据状态管理、蜂窝数据漫游管理、APN管理、网络管理交互等功能。蜂窝数据模块作为电话子系统可裁剪部件,依赖于core_service核心服务、ril_adapter。
sms_mms 短彩信
提供短信收发和彩信编解码功能,主要功能有GSM/CDMA短信收发、短信PDU(Protocol data unit,协议数据单元)编解码、Wap Push接收处理 、小区广播接收、彩信通知、 彩信编解码和SIM卡短信记录增删改查等。
state_registry 状态注册
提供各种消息事件的订阅以及取消订阅的能力。事件类型包括网络状态变化、信号强度变化、小区信息变化、蜂窝数据连接状态变化、通话状态变化等等。
telephony_data 蜂窝数据存储
提供电话服务子系统中的SIM卡、短彩信、APN、SIM卡账户等模块持久化数据存储,提供DataAbility访问接口。
core_service 蜂窝通信核心服务
提供SIM卡服务、搜网服务和RIL管理,以及获取RIL Adapter服务。
通过HDI实现与RIL Adapter进行通信;通过发布订阅,来实现与各功能模块的通信。
ims_service IMS服务(闭源部件)
提供IMS服务注册,IMS通话,IMS短信相关API实现,通过HDF与RIL Adapter Ext进行通信
ril_adapter RIL适配
提供厂商库加载,业务接口实现以及事件调度管理。主要用于屏蔽不同Modem厂商硬件差异,为上层提供统一的接口,通过注册HDF服务与上层接口通讯。
ril_adapter_ext RIL适配扩展(闭源部件)
提供蜂窝通信的RIL扩展接口,用于各个Modem厂商进行差异化能力扩展。

2. ims分层结构图

4G/5G通话由ims_service实现。

ims_service实现ims服务注册,ims通话,ims短信等业务。

img

图中的ims_serviceril_adapter_ext需要开发者自己来适配,在OpenHarmony中没有该部分。
IMS的适配通常是由厂商来适配。

img

以通话为例,ims通话流程图如下

img

3. android分层结构图

简单介绍下anroid中ims结构图

在android中,IMS在CS通话的基础上增加了telephony/ims net/ims vendor/ims 和ims相关的media模块。

其中:

telephony/ims:主要包括了对外接口ImsPhone,通话管理中心ImsPhoneCallTracker,某一路通话ImsPhoneCall,某一路通话连接ImsPhoneConnection。需要实现的提供IMS相关服务的ImsService。

net/ims:主要包括提供了IMS services API的ImsManager,以及ImsManager创建的负责处理 IMS语音和视频通话连接的ImsCall。

vendor/ims:主要包括了ImsService的实现类,提供ims相关的服务。负责和modem和media打交道,这一模块由各个芯片厂商定制,所以各个芯片厂商的实现方式都不同。但都有一个实现 ImsService的类。

img

4. android的IMS框架

在android系统中,IMS框架图如下

img

5. 打电话流程图

在OpenHarmony中,拨打电话的流程如下

img

可以看到,在cellular_call中,根据通话类型来区分CS通话和IMS通话。
其中CS通话部分OpenHarmony中已经实现。
而IMS部分,在OpenHarmony中是缺失的,这就是开发者需要补齐的部分。

6. 通话流程

  • 主叫:

Application->cellular_call->core_service->RIL->Modem->基站

  • 被叫:

基站->Modem->RIL->core_service->cellular_call->Application

img

7. cellular_call(蜂窝通话)

在CellularCallService::Dial()中判断CS通话和IMS通话

img

在IMSControl中转换号码格式,判断号码是否为MMI

img

判断Modem的状态

img

填充参数,转到CellularCallConnectionIMS

img

填充ImsCallInfo结构体,调用IMS服务

img

ImsCallClient中调用ImsCallProxy

img

调用IMS服务

img

8. ims_service(ims服务)(厂商实现)

该模块由芯片厂商实现,提供ims服务注册,ims通话(4G通话和5G通话),ims短信相关接口实现。

ims_service通过HDF,与ril_adapter_ext部件通信(厂商实现)。

ims_service示例代码如下

base/telephony/cellular_call/vendor/ims/

img

ims_service需要实现的接口如下

img

比如ims_service需要实现打电话的接口,在ims_call_stub.cpp中映射

img

ImsCallStub中会转到ImsCall中

img

ImsCall中的Dial接口,需要厂商去实现

img

9. ril_adapter_ext(ril适配扩展)(厂商实现)

可以参考base/telephony/ril_adapter的实现方式,厂商实现自己的ril_adapter_ext库

img

  • 对于上层来说,call_namager和cellular_call来说,4G通话和5G通话是一样的。

  • 上层不感知4G和5G通话,上层只感知CS通话和IMS通话。

  • 4G通话和5G通话的区别,在ims_service和ril_adapter_ext里面,在ims和ril中去判断走4G通话还是5G通话

  • VoNR(Voice over New Radio),是VoLTE(Voice over LTE)的演进版本。相比于VoLTE,VoNR除了空口变成了NR之外,其他IMS相关的基本架构和流程与VoLTE并无大的变化。

  • 在VoNR业务中,空口承载有三条,IMS信令承载、IMS voice承载和IMS video承载。而为了支撑VoNR+所增加的业务需求,新增了一条承载,称为IMS DC(即Data Chennel)。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐