|
Introduction
|
|
The Article explains about the building blocks of Android telephony and how it works.
|
|
Android telephony 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.
|
|
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
|
|
|
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
|
|
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
|
|
|
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
D/AT ( 1814): MUX[primary]: AT< OK
|
|
|
|