第4章 RILC运行机制
4.1 RILC运行机制
RILC代码重点在于:hardware/ril/libril(Runtime运行环境的源文件)、hardware/ril/reference-ril.so、hardware/ril/rild这三个目录下的C/C++代码文件。
Rilc运行在UserLibraries系统运行库中的HAL层,它使用HAL Stub运行结构。最关键的为Runtime对外提供Proxy代理接口,Stub向Runtime提供Operations操作函数,Runtime向Stub提供Callback函数。
RILC运行机制主要围绕libRIL与Reference-RIL相互调用,从而完成solicited和unsolicited消息处理机制,包括两个过程:启动和运行。
启动过程:rild完成;
运行核心:LibRIL和Reference-RIL消息交互。
RILC运行机制
LibRIL为Reference-RIL实现了RIL请求转换成AT命令,并执行AT命令逻辑。
LibRIL提供了Reference-RIL的proxy代理接口。RILJ基于Socket网络连接完成solicited和unsolicited消息和LibRIL进行交互,最终交给Reference-RIL进行处理。
Reference-RIL和modem之间通过串口进行通信,主要用于AT命令执行。
4.1.1 rild.c的main函数
第一章所说的main函数,它整体负责启动rilc。关键职责是建立LibRIL和Reference-RIL的一种相互协调的能力。
LibRIL中有指向Reference-RIL中funcs结构体的指针。
Reference-RIL中有指向LibRIL中s_rilEnv结构体(Runtime)的指针。
4.1.2 LibRIL目录结构
hardware/ril/libril
Android.mk
Ril_commands.h //定义了LibRIL接收到RILJ发出的solicited请求消息所对应的调用函数和返回调用函数。
Ril.cpp //建立Runtime框架;
Ril_event.cpp //实现基于ril_event双向链表操作函数;
Ril_event.h //定义ril_event事件的结构定义;
Ril_ex.h
Ril_unsol_commands.h //定义了unsolicited消息返回函数的调用。
……
1)LibRIL以ril.cpp代码为核心,其他代码协助他完成LibRIL Runtime的启动和运行,LibRIl Runtime的两个作用:
1、与RILJ基于socket交互;
2、与Reference-RIL基于函数调用的交互。
2)结构体RIL_env定义了三个指向函数的指针。
3)结构体RIL_RadioFunctions:当LibRIL接收到RILJ发起的solicited请求后,其他5个指向函数的指针会调用Reference-RIL提供给funcs中对应请求函数。