zoukankan      html  css  js  c++  java
  • 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

     
    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

    top-icon

    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
    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 — -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

     
     
  • 相关阅读:
    MYSQL-------安全等于<=>
    MYSQL-------转义简单说明
    Linux命令 sed
    长目录如何快速cd
    SQLAlchemy(增删改查)
    PostgreSQL主键约束混乱
    Python实现智能回复
    Python 腾讯云发送短信
    Python3 Twilio 发送短信
    Elasticsearch 多条件查询
  • 原文地址:https://www.cnblogs.com/ricks/p/9497336.html
Copyright © 2011-2022 走看看