Android RIL Architecture

不飞则已,一飞冲天;不鸣则已,一鸣惊人。这篇文章主要讲述Android RIL Architecture相关的知识,希望能为你提供帮助。

android RIL Architecture
 
by Gomathi Sankar
 
Introduction
 
The Article explains about the building blocks of Android telephony and how it works.
 
Android telephony architecture
 
Android RIL Architecture

文章图片
Android RIL Architecture
 
Application:  All the telephony related applications like Dialer, Call tracker, SMS, MMS, GPRS, Antenna signal indicator and etc, will come into this section. All these applications will be started during the android boot up. These applications will be tied up with the Android telephony framework services. The telephony framework provides APIs to access the Phone.
 
Framework services:  Telephony framework will be initialized and started during the system start up. All the queries from the application through API will directed to the Radio interface Layer of Android by these services. The service will keep tracking of all the unsolicited commands from the modem. Unsolicited commands are the commands initiated from the modem.
 
Radio Interface Layer:  It is the bridge between Android phone framework services and the hardware. In other words, it is the protocol stack for Telephone. The RIL consist of two primary components.
   
  1. RIL Daemon
  2. Vendor RIL
 
 
RIL Daemon
 
RILD will be initialized during the Android system start up. It will read the system property to find which library has to be used for Vendor RIL, provide the appropriate input for vendor RIL and finally calls RIL_Init function of Vendor RIL to map all the Vendor RIL functions to the upper layer. Each vendor RIL has RIL_Init function.
 
Vendor RIL
 
It is a library specific to each modem. In other words, we can call it as a driver to function the modem. The RIL daemon will call the RIL_Init function with the device location (eg: /dev/ttyS0). It will initiate the modem and returns theRIL_RadioFunctions structure contains the handles of radio functions
 
type structure {  intRIL_version;
RIL_RequestFunconRequest;
RIL_RadiostateRequestonStateRequest;
RIL_Supports supports;
RIL_CancelonCancel;
RIL_GetVersiongetVersion;
} RIL_RadioFunctions;
 
RIL_version  : Version of Android RIL
 
onRequest  : Call to Vendor RIL to make a RIL_REQUEST. It must be completed with a call to RIL_onRequestComplete().It will always be called from the same thread, so returning here implies that the radio is ready to process another command (whether or not the previous command has completed)
 
supports    : Return current radio state.RADIO_STATE_UNAVAILABLE should be the initial state
 
getVersion: Version of Vendor RIL
 
There are two forms of communications in Android RIL
 
Solicited Commands :
 
These are commands initiated from the upper layer. Like, Dialing/Send SMS are the solicited commands from the upper layer to the RIL. OnRequestis the function for sending the solicited commands from the upper layer
 
The following diagram describes the solicited call in Android
 
Android RIL Architecture

文章图片
Solicited call in Android
 
Each onRequest call should end with RIL_onRequestComplete. It is to send the response for the previous onRequest and to intimate we are ready for the next command. Refer ril.h for all the solicited commands
 
Unsolicited commands
Android RIL Architecture

文章图片
These are the commands initiated from the modem to the upper layer. Like, Receive Call /Receive SMS are the commands. The Vendor RIL has to continuously monitor the device for unsolicited command from the modem.
 
The following diagram describes the unsolicited call in Android
 
Android RIL Architecture

文章图片
Unsolicited call in Android
 
Implementation of Vendor RIL
 
Android is providing the basic vendor RIL with minimum feature set (reference-ril). It is good to start with that reference code. Compile the Vendor RIL as a shared library with the following style
 
libril-< companyname> -< RIL version> .so
 
libril - all the Vendor ril library should start with this
 
Vendor RIL Configuration  :
 
Replace the following line in the init.rc file
 
serviceril-daemon /system/bin/rild
 
with
 
serviceril-daemon /system/bin/rild -l /system/lib/libreference-ril.so a€” -d/dev/ttySx
 
Commands after "-" will be input for Vendor ril.
 
Here is sample log of Sending a SMS
 
D/SMS        ( 1962): SMS send size=0time=1319439322559
D/RILJ      ( 1962): [0312]> SEND_SMS
D/RIL        ( 1814): onRequest: SEND_SMS
D/AT          ( 1814): MUX[primary]: AT> AT+CMGS=14
D/AT          ( 1814): MUX[primary]: AT< >
D/AT          ( 1814): AT> 0001000a814978045948000002c834^Z
D/AT          ( 1814): MUX[primary]: AT< Q: 31,0
D/AT          ( 1814): MUX[primary]: AT< +CUSD: 0,”Your Last Call charge IS Rs  0.5000  AND CURRENT Balance IS  47.8770 AND EXP IS  25/09/21. Love Spl 6 Caller tunes for Jd
D/RILC      ( 1814): Unsolicited Response!!!
D/RILJ      ( 1962): [UNSL]< UNSOL_ON_USSD 0
D/AT          ( 1814): MUX[primary]: AT< “,15
D/AT          ( 1814): MUX[primary]: AT< +CMGS: 219
【Android RIL Architecture】D/AT          ( 1814): MUX[primary]: AT< OK
 
 

    推荐阅读