鸿蒙OpenHarmony【电话服务开发】子体系

打印 上一主题 下一主题

主题 1890|帖子 1890|积分 5670

概述

本指南简要介绍了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模块架构图

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传入的事件回调函数指针。
    1. // 定义Modem厂商库回调函数指针
    2. static struct HRilReport g_reportOps = {
    3.     OnCallReport,    // 通话相关业务回调函数
    4.     OnDataReport,    // 蜂窝数据相关业务回调函数
    5.     OnModemReport,   // Modem相关业务回调函数
    6.     OnNetworkReport, // 搜网相关业务回调函数
    7.     OnSimReport,     // SIM卡相关业务回调函数
    8.     OnSmsReport      // 短信相关业务回调函数
    9. };
    复制代码

  • 创建主线程g_reader,开启消息循环。
    1. pthread_attr_t t;
    2. pthread_attr_init(&t);
    3. pthread_attr_setdetachstate(&t, PTHREAD_CREATE_DETACHED);
    4. ret = pthread_create(&g_reader, &t, ReaderLoop, &t); // 创建线程
    复制代码

  • 在g_eventListeners线程用open()打开Modem装备节点,并创建g_reader线程循环读取处置处罚Modem上报的消息。
    1. g_fd = open(g_devicePath, O_RDWR); // 打开设备节点,入参g_devicePath是Modem设备节点
    2. pthread_attr_init(&attr);   
    3. pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);   
    4. ret = pthread_create(&g_eventListeners, &attr, EventListeners, NULL);
    复制代码

  • 返回业务请求接口的函数指针。
    1. // call模块业务请求接口结构体
    2. typedef struct {
    3.     // 获取呼叫列表
    4.     void (*GetCallList)(ReqDataInfo *requestInfo, const void *data, size_t dataLen);
    5.     // 拨打电话
    6.     void (*Dial)(ReqDataInfo *requestInfo, const void *data, size_t dataLen);
    7.     // 挂断电话
    8.     void (*Hangup)(ReqDataInfo *requestInfo, const void *data, size_t dataLen);
    9.     // 拒接来电
    10.     void (*Reject)(ReqDataInfo *requestInfo, const void *data, size_t dataLen);
    11.     // 接听来电
    12.     void (*Answer)(ReqDataInfo *requestInfo, const void *data, size_t dataLen);
    13. } HRilCallReq;
    14. // call模块回调函数指针
    15. static const HRilCallReq g_callReqOps = {
    16.     .GetCallList = ReqGetCallList, // 获取呼叫列表接口
    复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

花瓣小跑

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表