鸿蒙OpenHarmony【电话服务开发】子体系
概述本指南简要介绍了Modem厂商库的集成、初始化、业务请求响应和事件上报的方法,并通过通话业务的详细开发实例出现厂商库的适配开发过程,供不同Modem芯片的开发者参考,从而帮助其高效地实现电话相关业务功能的开发。
基本概念
[*]Telephony Service:电话服务子体系核心折务层。主要功能是初始化RIL管理类、SIM卡和搜网模块;获取RIL Adapter服务,通过注册回调服务,实现与RIL Adapter的通信功能;通过发布订阅,来实现与通话、短信等功能模块之间的通信。
[*]RIL Adapter:电话服务子体系RIL适配层。该层主要包罗厂商库加载,业务接口实现。用于屏蔽不同Modem厂商的硬件差别,为上层提供同一的接口,通过注册HDF服务与上层接口通信。
[*]HDF:硬件驱动框架(Hardware Driver Foundation)。用于提供同一外设访问本领和驱动开发、管理框架。
[*]hdc_std:OpenHarmony装备连接器(OpenHarmony Device Connector)。是OpenHarmony为开发职员提供的用于装备连接调试的下令行工具。
运作机制
图1 RIL Adapter模块架构图
https://i-blog.csdnimg.cn/direct/88a912e576094e57b722f6f37f0e7b09.png
RIL Adapter模块架构如图1所示,内部主要分为hril_hdf、hril和vendorlib三层。
[*]hril_hdf:RIL Adapter的唯一入口,主要负责Modem厂商库的加载。此中,modem_adapter实现了单一固件对不同Modem的适配。 其实现机制为:在加载Modem厂商库之前,从kernel获取Modem的装备型号,根据此型号加载对应的Modem厂商库。
[*]hril:OpenHarmony无线接口层(OpenHarmony Radio Interface Layer)。与Telephony Service交互的接口实现部门,实现了Telephony Service和vendorlib通信的功能,包罗SIM卡、搜网、蜂窝数据、蜂窝通话和短彩信等。
[*]vendorlib:Modem厂商库文件。不同的Modem厂商根据RIL Adapter提供的尺度化接口或ID,举行Modem厂商库的开发(vendorlib由Modem厂商提供)。
hril_hdf执行后,将动态加载vendorlib,vendorlib可以从hril_hdf中获取处置处罚响应和上报的函数指针,该过程竣事后,hril_hdf才可通过vendorlib与Modem通信。
约束与限制
规格限制:
需要装备厂商至少支持一个Modem,如果不支持任何Modem,无需实现厂商库接口。
电话服务开发引导
Modem厂商库初始化开发引导
场景介绍
Modem厂商库初始化是指在厂商库里实现const HRilOps *RilInitOps(const struct HRilReport *reportOps)函数,在该函数里处置处罚三个重要的功能:
[*]接收RIL Adapter事件回调的函数指针,当Modem有业务事件上报时,调用对应的函数指针,把事件上报给RIL Adapter。
[*]创建读取Modem装备节点的线程,在该线程里会循环地读取Modem上报的事件,并把接收的Modem信息解析为详细业务相关的事件举行上报。
[*]返回业务请求接口的函数指针给RIL Adapter。
接口说明
Modem厂商库初始化接口。
表1 Modem厂商库初始化接口功能介绍
接口名 描述 const HRilOps *RilInitOps(const struct HRilReport * reportOps) 接口功能:Modem厂商库运行的入口。 参数reportOps:RIL Adapter传入的事件回调函数指针。 返回值:业务请求接口的函数指针。 开发步骤
[*] RilInitOps接口中设置RIL Adapter传入的事件回调函数指针。
// 定义Modem厂商库回调函数指针
static struct HRilReport g_reportOps = {
OnCallReport, // 通话相关业务回调函数
OnDataReport, // 蜂窝数据相关业务回调函数
OnModemReport, // Modem相关业务回调函数
OnNetworkReport, // 搜网相关业务回调函数
OnSimReport, // SIM卡相关业务回调函数
OnSmsReport // 短信相关业务回调函数
};
[*] 创建主线程g_reader,开启消息循环。
pthread_attr_t t;
pthread_attr_init(&t);
pthread_attr_setdetachstate(&t, PTHREAD_CREATE_DETACHED);
ret = pthread_create(&g_reader, &t, ReaderLoop, &t); // 创建线程
[*] 在g_eventListeners线程用open()打开Modem装备节点,并创建g_reader线程循环读取处置处罚Modem上报的消息。
g_fd = open(g_devicePath, O_RDWR); // 打开设备节点,入参g_devicePath是Modem设备节点
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
ret = pthread_create(&g_eventListeners, &attr, EventListeners, NULL);
[*] 返回业务请求接口的函数指针。
// call模块业务请求接口结构体
typedef struct {
// 获取呼叫列表
void (*GetCallList)(ReqDataInfo *requestInfo, const void *data, size_t dataLen);
// 拨打电话
void (*Dial)(ReqDataInfo *requestInfo, const void *data, size_t dataLen);
// 挂断电话
void (*Hangup)(ReqDataInfo *requestInfo, const void *data, size_t dataLen);
// 拒接来电
void (*Reject)(ReqDataInfo *requestInfo, const void *data, size_t dataLen);
// 接听来电
void (*Answer)(ReqDataInfo *requestInfo, const void *data, size_t dataLen);
} HRilCallReq;
// call模块回调函数指针
static const HRilCallReq g_callReqOps = {
.GetCallList = ReqGetCallList, // 获取呼叫列表接口
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]