Android源码中,hardware/ril目录中包含着Android的telephony底层源码。这个目录下包含着三个子目录,下面是对三个子目录的具体分析。 一、目录hardware/ril/include分析: 只有一个头文件ril.h包含在此目录下。ril.h中定义了76个如下类型的宏:RIL_REQUEST_XXX ,这些宏代表着客户进程可以向Android telephony发送的命令,包括SIM卡相关的功能,打电话,发短信,网络信号查询等。 二、目录hardware/ril/libril分析: 本目录下代码负责与客户进程进行交互。在接收客户进程命令后,调用相应函数进行处理,然后将命令响应结果传回客户进程。在收到来自网络端的事件后,也传给客户进程。 文件ril_commands.h:列出了telephony可以接收的命令;每个命令对应的处理函数;以及命令响应的处理函数。 文件ril_unsol_commands.h:列出了telephony可以接收的事件类型;对每个事件的处理函数; 文件ril_event.h/cpp:处理与事件源(端口,modem等)相关的功能。ril_event_loop监视所有注册的事件源,当某事件源有数据到来时,相应事件源的回调函数被触发(firePending -> ev->func()) 在Android系统中,Telephony模块是负责处理手机通信功能的核心组件。硬件抽象层(HAL)下的`hardware/ril`目录包含了实现这些功能的底层源码。这个目录主要分为三个子目录,分别是`include`、`libril`和`reference-ril`。 1. **目录`hardware/ril/include`分析**: - 在`include`目录下,关键的头文件是`ril.h`,它定义了76个`RIL_REQUEST_XXX`宏,这些宏代表了客户端(如电话应用)能够向Android Telephony服务发送的不同命令。这些命令涵盖了SIM卡操作、通话、短信以及网络状态查询等一系列功能。 2. **目录`hardware/ril/libril`分析**: - `libril`目录中的代码处理与客户端之间的通信。当接收到客户端的命令,它调用相应的处理函数进行处理,并将结果返回给客户端。同时,当接收到网络端的事件时,也会传递给客户端。 - `ril_commands.h`列出所有可接收的命令,每个命令对应的处理函数以及响应处理函数。 - `ril_unsol_commands.h`定义了Telephony能接收的事件类型,以及每个事件的处理函数。 - `ril_event.h/cpp`处理与事件源(如端口或Modem)相关的功能。`ril_event_loop`监控所有注册的事件源,当事件源有数据到来时,触发相应的回调函数(`firePending -> ev->func()`)。 - `ril.cpp`中,`RIL_register`打开监听端口接收客户端命令,`listenCallback`在连接建立时被调用,`processCommandsCallback`处理客户端的命令请求,`dispatch`系列函数执行具体命令处理,`RIL_onUnsolicitedResponse`和`RIL_onRequestComplete`分别处理网络端的事件和命令响应,而`response`系列函数则封装这些响应并转发给客户端。 3. **目录`hardware/ril/reference-ril`分析**: - `reference-ril`目录的代码主要与Modem交互。`reference-ril.c`是核心文件,`onRequest`函数将`RIL_REQUEST_XXX`请求转化为AT命令发送给Modem,等待响应后通过`RIL_onRequestComplete`发送给客户端。`onUnsolicited`函数处理Modem收到的网络事件,如信号变化、来电和短信,然后通过`RIL_onUnsolicitedResponse`传递给客户端。 - `atchannel.c`文件提供了与Modem进行读写的实现,读写操作分别由主线程和读取线程处理,确保了数据传输的效率和同步。 Android Telephony模块通过`hardware/ril`实现了与Modem的通信,并为上层应用程序提供了一套标准的API接口,使得应用程序可以方便地执行各种电话和网络相关的操作。`libril`层作为中间件,协调客户端和Modem间的通信,而`reference-ril`则是实际与Modem硬件交互的实现。这个层次化的架构设计使得Android的Telephony功能既具有良好的可扩展性,又保证了与不同硬件平台的兼容性。
- zhuchenkun2014-03-08不错的资料,对于ril的介绍很详细。
- 粉丝: 1
- 资源: 12
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- RTP Payload Format for Scalable Video Coding
- 移树机模型sw16可编辑全套技术开发资料100%好用.zip
- 小型桌面插四方针设备(含工程图sw12可编辑)全套技术开发资料100%好用.zip
- java项目,毕业设计-沁园健身房预约管理系统
- HTML CSS JavaScript 实现3D动态圣诞树网页效果
- ★单片机串口实现字符串命令解析-使用函数指针(类似哈希表)
- 自动驾驶横纵向控制,纵向采用pid控制,横向采用mpc控制,根据的是车辆二自由度车辆动力学模型,得到各矩阵之后在S函数里面进行编写,纵向参考百度Apollo纵向双环PID控制算法,横向参考百度Apol
- C# FPC上料机配套软件源码WPF
- 裂缝检测21-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- C++控制台应用中圣诞树图案绘制程序
- 电子秤实物量产资料 原理图和PCB文件及BOM,源码HEX 量产HX711电子秤采集模块全套资料 1.串口波特率19200; 2.上电后直接串口打印称重数据; 3.可以发指令校零传感器,读取称重数值
- java项目,毕业设计-时间管理系统
- 一个基于C#开发的上位机数据转换库.zipwinform
- C语言实现控制台打印圣诞树程序详解
- CC工具箱Arcgispro版
- A星算法 A*算法 自己研究编写的Matlab路径规划算法 Astar算法走迷宫 可自行设置起始点,目标点,自由更地图 - 可以和人工势场法融合 动态障碍物(默认