SlideShare a Scribd company logo
Android RIL - Radio Interface Layer


              Lifu Zhang


        Elektrobit Wireless(2011)




                                    Android RIL - Radio Interface Layer
                                                                          1 / 35
Outline

1   Android Telephony
    Big Picture
    Porting Work
    Interacton between Framework and Local Service
    Ril Initilize

2   Vender RIL
    Example I: Signal Strength
    Example II: Voice Call
    Experiences when IMPL telephony features

3   Data Connection

4   Reference


                                          Android RIL - Radio Interface Layer
                                                                                2 / 35
Terms



RIL Daemon: The RIL daemon initializes the Vendor RIL, processes
all communication from Android telephony services, and dispatches
calls to the Vendor RIL as solicited commands.
Vendor RIL: The radio-specific Vendor RIL of ril.h that processes all
communication with radio hardware and dispatches calls to the RIL
Daemon (rild) through unsolicited commands.




                                            Android RIL - Radio Interface Layer
                                                                                  3 / 35
Architechture of Android Telephony

The telephony is based on these items, layout layer by layer
    Android Services, activities, call settings
         Service “isms”
         Dialer application
         Other Telephony settings and operations
    The com.android.internal.phone interface
    PhoneFactory, PhoneProxy, CDMAPhone, GSMPhone
    RIL.java
    ril-daemon
    vender ril



                                                   Android RIL - Radio Interface Layer
                                                                                         4 / 35
Arch




       Android RIL - Radio Interface Layer
                                             5 / 35
Files in System



                                     Binary:
Source:
                                         /system/framework/
    com.android.telephony
                                         framework.jar
    com.android.internal.telephony
                                         /system/bin/rild
    com.android.phone
                                         /system/lib/libril.so
    hardware/ril
                                         /system/lib/lib(vender)-ril.so




                                               Android RIL - Radio Interface Layer
                                                                                     6 / 35
Our Job: libxxx-ril.so vender ril




The C Programming Language
Control the modem, by whatever means (using tty now)
Translate requests and data between framework and modem




                                        Android RIL - Radio Interface Layer
                                                                              7 / 35
Our
Job




      Android RIL - Radio Interface Layer
                                            8 / 35
Requests and Response - Async IPC


They are async, you don’t
have to response it
immediately.
All requests and response is
handled by the RIL.java,
then dispatched to upper
framework
The ril daemon will use some
C++ code disamble the
Parcel, and pass void * data
to vender ril



                               Android RIL - Radio Interface Layer
                                                                     9 / 35
The Requests



requests is comming from the framework, packed as Parcel, trasfered
on local socket, dispatched by rild, and handled by vender ril.
request id: What do you want to do
request token: just a token, using when response it
request data: e.g. when sending sms, you have to specify address,
text in the data




                                            Android RIL - Radio Interface Layer
                                                                                  10 / 35
The Response


the response is generated by vender ril, packed as Parcel, transfered
on local socket, dispatched by CommandInterface, and handled by
those who register its handler.
id: same as the requests id
error id: success or something wrong
data: data is in format specify by the request, and if no data
needed, it would be ’NULL’
special: Some response is not to a request, we call they unsolicited
responses.




                                            Android RIL - Radio Interface Layer
                                                                                  11 / 35
Ril initial sequence




                  Android RIL - Radio Interface Layer
                                                        12 / 35
Init Code I - Load RIL Library

     dlHandle = dlopen ( rilLibPath , RTLD_NOW ) ;

    if ( dlHandle == NULL ) {
         fprintf ( stderr , " dlopen failed : % s  n " , dlerror () ) ;
         exit ( -1) ;
    }

     R I L _ s t ar t Ev e nt Lo o p () ;
     rilInit = ( const R I L_ Ra d io F un ct i on s *(*) ( const struct RIL_Env * , int , char
          **) )
                dlsym ( dlHandle , " RIL_Init " ) ;
    if ( rilInit == NULL ) {
         fprintf ( stderr , " RIL_Init not defined or exported in % s  n " , rilLibPath ) ;
         exit ( -1) ;
    }
 // .. omitted code ..
     funcs = rilInit (& s_rilEnv , argc , rilArgv ) ;
     RIL_register ( funcs ) ;
done :
    while (1) {
        // sleep ( U I N T 3 2 _ M A X ) seems to return i m m e d i a t e l y on bionic
        sleep (0 x00ffffff ) ;
    }




                                                                       Android RIL - Radio Interface Layer
                                                                                                             13 / 35
Init Code II - Wait for device ready
for (;;) {
    fd = -1;
    while ( fd < 0) {
        if ( s_port > 0) {
             fd = s o c k e t _ l o o p b a c k _ c l i e n t ( s_port , SOCK_STREAM ) ;
        } else if ( s_device_socket ) {
             if (! strcmp ( s_device_path , " / dev / socket / qemud " ) ) {
                  /* .. CODE OMITTED .. Qemu - specific control socket */
             }
             else
                  fd = s o ck e t _ l o c a l _c l i e n t ( s_device_path ,
                                                                A NDR OI D_ SO CK ET _N AM ESP AC E_ FI LE SY ST EM ,
                                                                SOCK_STREAM ) ;
        } else if ( s_device_path != NULL ) {
             fd = open ( s_device_path , O_RDWR ) ;
             if ( fd >= 0 && i sS e ri al P or t De vi c e ( s_device_path ) ) {
                  /* set serial port acting in raw mode , CODE OMITTED .. */
                  tcsetattr ( fd , TCSANOW , & ios ) ;
             }
        }
        if ( fd < 0) {
             sleep (10) ;
        }
    }
      s_closed = 0;
      ret = at_open ( fd , onUnsolicited ) ;
      R I L _ r e q u e s t T i m e d C a l l b a c k ( initializeCallback , NULL , & TIMEVAL_0 ) ;
      // Give i n i t i a l i z e C a l l b a c k a chance to dispatched , since
      // we don ’t p r e s e n t l y have a c a n c e l l a t i o n m e c h a n i s m
      sleep (1) ;
      waitForClose () ;
}


                                                                                   Android RIL - Radio Interface Layer
                                                                                                                         14 / 35
The Vender RIL



In this sections, we’ll have some examples about how the vender ril
works.
    The Vender RIL and RIL Daemon is interact with
    RIL RadioFunctions and RIL Env facility.
    The Vender RIL is the very part of system that handle radio
    operations.




                                               Android RIL - Radio Interface Layer
                                                                                     15 / 35
The RIL Enviroment and RIL Radio Functions

typedef void (* RIL_RequestFunc ) ( int request , void * data ,
                                                size_t datalen , RIL_Token t ) ;
typedef RIL_RadioState (* R I L _ R a d i o S t a t e R e q u e s t ) () ;
typedef int (* RIL_Supports ) ( int requestCode ) ;
typedef void (* RIL_Cancel ) ( RIL_Token t ) ;
typedef void (* R IL_T ime dCa llb ack ) ( void * param ) ;
typedef const char * (* RIL_GetVersion ) ( void ) ;
typedef struct {
      int version ;
      R IL _R equestFunc onRequest ;
      R I L _ R a d i o S t a t e R e q u e s t onStateRequest ;
      RIL_Supports supports ;
      RIL_Cancel onCancel ;
      RIL_ GetVersion getVersion ;
} R I L _ R a d io Fu n ct i on s ;


struct RIL_Env {
    void (* On Req ues tCo mple te ) ( RIL_Token t , RIL_Errno e ,
          void * response , size_t responselen ) ;
    void (* O n U n s o l i c i t e d R e s p o n s e ) ( int unsolResponse ,
          const void * data ,
          size_t datalen ) ;
    void (* R e q u e s t T i m e d C a l l b a c k ) ( R IL_ Tim edCa llb ack callback ,
          void * param ,
          const struct timeval * relativeTime ) ;
};




                                                                              Android RIL - Radio Interface Layer
                                                                                                                    16 / 35
NOTES




functions in RIL Env is used by vender ril, and RIL RadioFunctions
is used by rild
The vender rilementation is in the same process space as ril-daemon
onComplete is re-enterable, (will block by a mutex if called by
multi-thread in same time)




                                            Android RIL - Radio Interface Layer
                                                                                  17 / 35
Operation to the modem




                  Android RIL - Radio Interface Layer
                                                        18 / 35
Summary: Threads in rild process space



rild main thread: parse argc, argv, open ril library, create event loop,
some timed call back is run in this thread.
rild event loop: handle requests from upper layer, and call
OnRequests of vender ril.
vender reader loop: read data comming from modem, packed as
response/unsol response.




                                              Android RIL - Radio Interface Layer
                                                                                    19 / 35
Example I: Signal Strength Query/Report


   The framework may query current signal strength(case I), and
   when modem detect a signal change, ril should report this
   event(case II).
For Case I:                            For Case II:
    Send ’AT+CSQ’ command                    The reader loop recieve
                                             ’+CSQxxxx’
    Waiting for response
                                             Parse the at command string
    Parse response, pack data into           pack data into
    RIL CDMA SignalStrength                  RIL CDMA SignalStrength
    OnRequestComplete                        OnUnsolicitedResponse




                                              Android RIL - Radio Interface Layer
                                                                                    20 / 35
Example I: Signal Strength Report - Code
static void onUnsolicited ( const char *s , const char * sms_pdu )
{
// this is the function called when r e a d e r l o o p found an unsol modem command
// .. omitted code ..
      } else if ( strStartsWith (s , " ^ HRSSILVL : " ) ) {
          // handle signals here
          onHrssiChanged ( s ) ;
      }
  // .. omitted code ..
}

static void onHrssiChanged ( const char * s )
{
    int sigStrength ;
    int err ;
    char * membak = strdup ( s ) ;
    char * ln = membak ;
    R I L _ S i gn a lS t re ng t h sigsth ;
    R I L _ S i gn a lS t re ng t h * sth = & sigsth ;
     err = at_tok_start (& ln ) ;
     if ( err ) goto error ;
     err = at_tok_nextint (& ln , & sigStrength ) ;
     if ( err ) goto error ;
     h w _ c o n v e r t S i g n a l S t r e n g h ( sigStrength , sth ) ; // will do data c o n v e r t i o n
     R I L _ o n U n s o l i c i t e d R e s p o n s e ( RIL_UNSOL_SIGNAL_STRENGTH , sth , sizeof (* sth ) ) ;
     free ( membak ) ;
     return ;
error :
    free ( membak ) ;
    LOGE ( " Unsol Signal Strength command error : % s " , s ) ;
    return ;
}
                                                             Android RIL - Radio Interface Layer
                                                                                                                 21 / 35
Example I: Signal Strength Query - Code
                   R IL _S i gn a l S t r e ng t h sth ;
                   int err = h w _ g e t S i g n a l S t r e n g t h (& sth ) ;
                   if (! err ) {
                       R I L _ o n R e q u e s t C o m p l e t e (t , RIL_E_SUCCESS , & sth , sizeof ( sth ) )
                                 ;
                   } else {
                       R I L _ o n R e q u e s t C o m p l e t e (t , RIL_E_GENERIC_FAILURE , NULL , 0) ;
                   }


SS query     int h w _ g e t S i g n a l S t r e n g t h ( R IL _ S i g na lS t r e n g t h * sth )
             {
                 int err = 0;
For Huawei       ATResponse * p_response ;

modem              err = a t _ s e n d _ c o m m a n d _ s i n g l e l i n e ( " AT ^ HDRCSQ " , " ^ HDRCSQ " , &
                          p_response ) ;
                   char * line = p_response - > p_intermediates - > line ;
with               do {
                        int hwhdr ;
adaptation              if ( err < 0 || p_response - > success == 0) break ;
                        err = at_tok_start (& line ) ;
                        if ( err ) break ;
                        err = at _tok_nex tint (& line , & hwhdr ) ;
                        if ( err ) break ;
                        h w _ c o n v e r t S i g n a l S t r e n g h ( hwhdr , sth ) ;
                   } while (0) ;

                    at_res po ns e_ free ( p_response ) ;
                    return err ;
             }



                                                                          Android RIL - Radio Interface Layer
                                                                                                                    22 / 35
Dial a Number


When the java framework wanna dial a number, it will send a
request to rild:
    ID : RIL REQUEST DIAL (value=10, int)
    Data: RIL Dial :{
         address: char *, the address we’ll dialing, e.g. 13xxxxxxxx
         clir: int, loop TS27.007 7.7 +CLIR, I don’t know what’s this.
         uusInfo: RIL UUS Info *, NULL or Pointer to User-User Signaling
         Information
    }




                                                 Android RIL - Radio Interface Layer
                                                                                       23 / 35
What Shall I Do? Make the Call!

    p_dial = ( RIL_Dial *) data ;
    switch ( p_dial - > clir ) {
            case 1: clir = " I " ; break ; /* i n v o c a t i o n */
            case 2: clir = " i " ; break ; /* s u p p r e s s i o n */
            default :
            case 0: clir = " " ; break ;                   /* s u b s c r i p t i o n default */
    }
    ret = sendDialCommand ( p_dial - > address , clir ) ;
    R I L _ o n R e q u e s t C o m p l e t e (t , ( RIL_Errno ) ret , NULL , 0) ;


static int sendDialCommand ( const char * number , const char * clir )
{
    int ret ;
    if ( isInCall () ) { // forbide call in call o p e r a t i o n
         ret = R I L _ E _ G E N E R I C _ F A I L U R E ;
    } else { /* Not in call , us AT + CDV */
         char * cmd ;
         asprintf (& cmd , " AT + CDV % s % s ; " , number , clir ) ;
         ret = at_send_command ( cmd , NULL ) ;
         free ( cmd ) ;
    }
    if ( ret ) {
         return R I L _ E _ G E N E R I C _ F A I L U R E ;
    } else {
         return RIL_E_SUCCESS ;
    }
}




                                                                                      Android RIL - Radio Interface Layer
                                                                                                                            24 / 35
What’s Your Call Status?
RIL_Call ** hw_getValidCalls ( void )
{
// .. omited code ..
     err = a t _ s e n d _ c o m m a n d _ m u l t i l i n e ( " AT + CLCC " , " + CLCC : " , & p_response ) ;
     // .. omited code ..
     atline = p_response - > p_intermediates ;
     while ( atline != NULL ) {
          err = r i l c a l lF r o m C l c c L in e ( p_callbuf , atline - > line ) ;
          if (! err ) {
               RIL_Call * curCall ;
               curCall = ( typeof ( curCall ) ) malloc ( sizeof (* curCall ) ) ;
               memcpy ( curCall , p_callbuf , sizeof (* p_callbuf ) ) ;
               pp_calls [ nValidCalls ] = curCall ;
                ++ nValidCalls ;
            } else {
                ebDebug ( " failed to parse one clcc line " ) ;
            }
           atline = atline - > p_next ;
      }
      // .. omitted code ..
}


    pp_calls = hw_getValidCalls () ;
// .. omitted code ..
       R I L _ o n R e q u e s t C o m p l e t e (t , RIL_E_SUCCESS , pp_calls ,
                 nValidCalls * sizeof (* pp_calls ) ) ;
// .. omitted code ..




                                                                                   Android RIL - Radio Interface Layer
                                                                                                                         25 / 35
Incoming Transmission

When the call state changed, i.e., under these situation: ring,
dialing, connectiong established, or hang-up, the ril damon should
simply give a ’CALL STATE CHANGED’ unsol response.
   else if ( strStartsWith (s , " + CRING : " )
                  || strStartsWith (s , " RING " )
                  || strStartsWith (s , " NO CARRIER " )
                  || strStartsWith (s , " + CCWA " )
                  || strStartsWith (s , " ^ ORIG " )
                  || strStartsWith (s , " ^ CONN " )
                  || strStartsWith (s , " ^ CEND " )
   ) {
       RIL_onUnsolicitedResponse (
           R IL _ U N SO L _ RE S P ON S E _C A L L _S T A TE _ C HA N G ED ,
           NULL , 0) ;
         if ( strStartsWith (s , " ^ CONN " ) ) {
              onCallStart () ;
         } else if ( strStartsWith (s , " ^ CEND " ) ) {
              onCallEnd () ;
         } else if ( strStartsWith (s , " + CRING : " ) || strStartsWith (s , " RING " ) ) {
              R I L _ o n U n s o l i c i t e d R e s p o n s e ( RIL_UNSOL_CALL_RING , &
                        s_StandardSingalInfo , sizeof ( s _ S t a n d a r d S i n g a l I n f o ) ) ;
         }




                                                                                Android RIL - Radio Interface Layer
                                                                                                                      26 / 35
Expansion: 3rd Party Voice Call(CDMA)


Always, we will make call with multiple persons, this kind of action
in CDMA/EVDO is little bit different between GSM/WCDMA.
There is a action named ’FLASH’:
    If the flash command come without params, it’ll hang the current
    call.
    If the flash come with a phone number, it’ll connected to that
    phone.(and hold other calls)
    If the flash come without params, and there is holding calls, it will
    rejoin them, and make a 3rd party call.




                                                 Android RIL - Radio Interface Layer
                                                                                       27 / 35
Expansion: 3rd Party Voice Call(CDMA),
                    Implements

The hw flash(const char *) method will send flash command to
modem.
static void cdmaFlash ( void * param )
{
    int err ;
    err = hw_flash ( " " ) ;
}
static void requestCdmaFlash ( void * data , size_t datalen , RIL_Token t )
{
    int err ;
    const char * flashstr = ( const char *) data ;
      err = hw_flash ( flashstr ) ;
      if ( err ) {
           goto error ;
      }
     static const struct timeval FlashWait = {5 , 0};
     R I L _ r e q u e s t T i m e d C a l l b a c k ( cdmaFlash , NULL , & FlashWait ) ;
// .. omitted code ..
}




                                                                                   Android RIL - Radio Interface Layer
                                                                                                                         28 / 35
SMS



Android java framework will pack all sms text as pdu byte array,
and will take over the long sms partition work.
The vender ril has to do:
    Translate pdu to the format modem could regconize.
    Pack the text data from modem to ril pdu format.
    Handle the storage/deletion work for sms on sim/ruim card




                                              Android RIL - Radio Interface Layer
                                                                                    29 / 35
Call Forward and Call Waiting



Opensource android CDMA Telephony framework doesn’t surpport
these action.
It’s simple to add impl code to java framework and settings app
refer to gsm system.
For China Telecom, you have to make cvoice calls with special
number to register these service.




                                           Android RIL - Radio Interface Layer
                                                                                 30 / 35
Main Flow for Data Connection




                     Android RIL - Radio Interface Layer
                                                           31 / 35
CDMA Data conn Establish




                  Android RIL - Radio Interface Layer
                                                        32 / 35
GSM Data conn Establish




                  Android RIL - Radio Interface Layer
                                                        33 / 35
NOTES




A modem always have two channel to operate, when established a
ppp link, one channel will be hold for ppp.
pppd will create interface, set dns/ip or dhcp them.




                                            Android RIL - Radio Interface Layer
                                                                                  34 / 35
Reference




An Android Website
Android RIL on SlideShare
Androi RIL on EVDO/CDMA




                                  Android RIL - Radio Interface Layer
                                                                        35 / 35

More Related Content

What's hot

Aidl service
Aidl serviceAidl service
Aidl service
Anjan Debnath
 
How to implement a simple dalvik virtual machine
How to implement a simple dalvik virtual machineHow to implement a simple dalvik virtual machine
How to implement a simple dalvik virtual machine
Chun-Yu Wang
 
Understanding the Android System Server
Understanding the Android System ServerUnderstanding the Android System Server
Understanding the Android System Server
Opersys inc.
 
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
Nanik Tolaram
 
Android Internals
Android InternalsAndroid Internals
Android Internals
Opersys inc.
 
Learning AOSP - Android Booting Process
Learning AOSP - Android Booting ProcessLearning AOSP - Android Booting Process
Learning AOSP - Android Booting Process
Nanik Tolaram
 
Porting Android
Porting AndroidPorting Android
Porting Android
Opersys inc.
 
Hacking Android OS
Hacking Android OSHacking Android OS
Hacking Android OS
Jimmy Software
 
Inter-process communication of Android
Inter-process communication of AndroidInter-process communication of Android
Inter-process communication of Android
Tetsuyuki Kobayashi
 
Calling VoWiFi... The Next Mobile Operator Service is here...
Calling VoWiFi... The Next Mobile Operator Service is here... Calling VoWiFi... The Next Mobile Operator Service is here...
Calling VoWiFi... The Next Mobile Operator Service is here...
Cisco Canada
 
Android AIDL Concept
Android AIDL ConceptAndroid AIDL Concept
Android AIDL Concept
Charile Tsai
 
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...Customizing AOSP For Different Embedded Devices And Integration at Applicatio...
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...
ijafrc
 
Android JNI
Android JNIAndroid JNI
Android JNI
Siva Ramakrishna kv
 
Introduction to Android Window System
Introduction to Android Window SystemIntroduction to Android Window System
Introduction to Android Window System
National Cheng Kung University
 
Understanding the Dalvik Virtual Machine
Understanding the Dalvik Virtual MachineUnderstanding the Dalvik Virtual Machine
Understanding the Dalvik Virtual Machine
National Cheng Kung University
 
Learning AOSP - Android Linux Device Driver
Learning AOSP - Android Linux Device DriverLearning AOSP - Android Linux Device Driver
Learning AOSP - Android Linux Device Driver
Nanik Tolaram
 
Binder: Android IPC
Binder: Android IPCBinder: Android IPC
Binder: Android IPC
Shaul Rosenzwieg
 
Android booting sequece and setup and debugging
Android booting sequece and setup and debuggingAndroid booting sequece and setup and debugging
Android booting sequece and setup and debuggingUtkarsh Mankad
 
Android Booting Scenarios
Android Booting ScenariosAndroid Booting Scenarios

What's hot (20)

Aidl service
Aidl serviceAidl service
Aidl service
 
How to implement a simple dalvik virtual machine
How to implement a simple dalvik virtual machineHow to implement a simple dalvik virtual machine
How to implement a simple dalvik virtual machine
 
Android presentation
Android presentationAndroid presentation
Android presentation
 
Understanding the Android System Server
Understanding the Android System ServerUnderstanding the Android System Server
Understanding the Android System Server
 
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
 
Android Internals
Android InternalsAndroid Internals
Android Internals
 
Learning AOSP - Android Booting Process
Learning AOSP - Android Booting ProcessLearning AOSP - Android Booting Process
Learning AOSP - Android Booting Process
 
Porting Android
Porting AndroidPorting Android
Porting Android
 
Hacking Android OS
Hacking Android OSHacking Android OS
Hacking Android OS
 
Inter-process communication of Android
Inter-process communication of AndroidInter-process communication of Android
Inter-process communication of Android
 
Calling VoWiFi... The Next Mobile Operator Service is here...
Calling VoWiFi... The Next Mobile Operator Service is here... Calling VoWiFi... The Next Mobile Operator Service is here...
Calling VoWiFi... The Next Mobile Operator Service is here...
 
Android AIDL Concept
Android AIDL ConceptAndroid AIDL Concept
Android AIDL Concept
 
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...Customizing AOSP For Different Embedded Devices And Integration at Applicatio...
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...
 
Android JNI
Android JNIAndroid JNI
Android JNI
 
Introduction to Android Window System
Introduction to Android Window SystemIntroduction to Android Window System
Introduction to Android Window System
 
Understanding the Dalvik Virtual Machine
Understanding the Dalvik Virtual MachineUnderstanding the Dalvik Virtual Machine
Understanding the Dalvik Virtual Machine
 
Learning AOSP - Android Linux Device Driver
Learning AOSP - Android Linux Device DriverLearning AOSP - Android Linux Device Driver
Learning AOSP - Android Linux Device Driver
 
Binder: Android IPC
Binder: Android IPCBinder: Android IPC
Binder: Android IPC
 
Android booting sequece and setup and debugging
Android booting sequece and setup and debuggingAndroid booting sequece and setup and debugging
Android booting sequece and setup and debugging
 
Android Booting Scenarios
Android Booting ScenariosAndroid Booting Scenarios
Android Booting Scenarios
 

Similar to RIL and Android Telephony

Troopers TelcoSec day 2019 - Modmobtools internals
Troopers TelcoSec day 2019 - Modmobtools internalsTroopers TelcoSec day 2019 - Modmobtools internals
Troopers TelcoSec day 2019 - Modmobtools internals
📡 Sebastien Dudek
 
Beerump 2018 - Modmobmap
Beerump 2018 - ModmobmapBeerump 2018 - Modmobmap
Beerump 2018 - Modmobmap
📡 Sebastien Dudek
 
Android - Phone Calls
Android - Phone CallsAndroid - Phone Calls
Android - Phone Calls
Yong Heui Cho
 
Android OS Porting: Introduction
Android OS Porting: IntroductionAndroid OS Porting: Introduction
Android OS Porting: Introduction
Jollen Chen
 
War Field Spying Robot with Fire Fighting Alarm.
War Field Spying Robot with Fire Fighting Alarm.War Field Spying Robot with Fire Fighting Alarm.
War Field Spying Robot with Fire Fighting Alarm.
vansh_raheja
 
Linux on System z debugging with Valgrind
Linux on System z debugging with ValgrindLinux on System z debugging with Valgrind
Linux on System z debugging with Valgrind
IBM India Smarter Computing
 
PLUG code generation tool
PLUG code generation toolPLUG code generation tool
PLUG code generation tool
Emmanuel Fuchs
 
Introduction to Remote Procedure Call
Introduction to Remote Procedure CallIntroduction to Remote Procedure Call
Introduction to Remote Procedure CallAbdelrahman Al-Ogail
 
Introduction to C++ Remote Procedure Call (RPC)
Introduction to C++ Remote Procedure Call (RPC)Introduction to C++ Remote Procedure Call (RPC)
Introduction to C++ Remote Procedure Call (RPC)Abdelrahman Al-Ogail
 
International Journal of Engineering Research and Development (IJERD)
International Journal of Engineering Research and Development (IJERD)International Journal of Engineering Research and Development (IJERD)
International Journal of Engineering Research and Development (IJERD)
IJERD Editor
 
Ir da in_linux_presentation
Ir da in_linux_presentationIr da in_linux_presentation
Ir da in_linux_presentationAnshuman Biswal
 
Tailoring Redis Modules For Your Users’ Needs
Tailoring Redis Modules For Your Users’ NeedsTailoring Redis Modules For Your Users’ Needs
Tailoring Redis Modules For Your Users’ Needs
Redis Labs
 
Nxll12 zone based firewall
Nxll12 zone based firewallNxll12 zone based firewall
Nxll12 zone based firewall
Netwax Lab
 
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
CODE BLUE
 
Surveillance Robot for Military Application Using ARM
Surveillance Robot for Military Application Using ARMSurveillance Robot for Military Application Using ARM
Surveillance Robot for Military Application Using ARM
IJTET Journal
 
UNIT V - The OMG way-system object model Notes.ppt
UNIT V - The OMG way-system object model Notes.pptUNIT V - The OMG way-system object model Notes.ppt
UNIT V - The OMG way-system object model Notes.ppt
AsmitSilhare1
 
Radio frequency identification system
Radio frequency identification systemRadio frequency identification system
Radio frequency identification systemAminu Bugaje
 
Fire fighting robot remotely operated by android applications
Fire fighting robot remotely operated by android applicationsFire fighting robot remotely operated by android applications
Fire fighting robot remotely operated by android applications
Edgefxkits & Solutions
 
Rumba presentation at FEC2
Rumba presentation at FEC2Rumba presentation at FEC2
Rumba presentation at FEC2
ARCFIRE ICT
 

Similar to RIL and Android Telephony (20)

Troopers TelcoSec day 2019 - Modmobtools internals
Troopers TelcoSec day 2019 - Modmobtools internalsTroopers TelcoSec day 2019 - Modmobtools internals
Troopers TelcoSec day 2019 - Modmobtools internals
 
Beerump 2018 - Modmobmap
Beerump 2018 - ModmobmapBeerump 2018 - Modmobmap
Beerump 2018 - Modmobmap
 
Android - Phone Calls
Android - Phone CallsAndroid - Phone Calls
Android - Phone Calls
 
Android OS Porting: Introduction
Android OS Porting: IntroductionAndroid OS Porting: Introduction
Android OS Porting: Introduction
 
War Field Spying Robot with Fire Fighting Alarm.
War Field Spying Robot with Fire Fighting Alarm.War Field Spying Robot with Fire Fighting Alarm.
War Field Spying Robot with Fire Fighting Alarm.
 
Linux on System z debugging with Valgrind
Linux on System z debugging with ValgrindLinux on System z debugging with Valgrind
Linux on System z debugging with Valgrind
 
PLUG code generation tool
PLUG code generation toolPLUG code generation tool
PLUG code generation tool
 
Introduction to Remote Procedure Call
Introduction to Remote Procedure CallIntroduction to Remote Procedure Call
Introduction to Remote Procedure Call
 
Introduction to C++ Remote Procedure Call (RPC)
Introduction to C++ Remote Procedure Call (RPC)Introduction to C++ Remote Procedure Call (RPC)
Introduction to C++ Remote Procedure Call (RPC)
 
Np unit2
Np unit2Np unit2
Np unit2
 
International Journal of Engineering Research and Development (IJERD)
International Journal of Engineering Research and Development (IJERD)International Journal of Engineering Research and Development (IJERD)
International Journal of Engineering Research and Development (IJERD)
 
Ir da in_linux_presentation
Ir da in_linux_presentationIr da in_linux_presentation
Ir da in_linux_presentation
 
Tailoring Redis Modules For Your Users’ Needs
Tailoring Redis Modules For Your Users’ NeedsTailoring Redis Modules For Your Users’ Needs
Tailoring Redis Modules For Your Users’ Needs
 
Nxll12 zone based firewall
Nxll12 zone based firewallNxll12 zone based firewall
Nxll12 zone based firewall
 
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
 
Surveillance Robot for Military Application Using ARM
Surveillance Robot for Military Application Using ARMSurveillance Robot for Military Application Using ARM
Surveillance Robot for Military Application Using ARM
 
UNIT V - The OMG way-system object model Notes.ppt
UNIT V - The OMG way-system object model Notes.pptUNIT V - The OMG way-system object model Notes.ppt
UNIT V - The OMG way-system object model Notes.ppt
 
Radio frequency identification system
Radio frequency identification systemRadio frequency identification system
Radio frequency identification system
 
Fire fighting robot remotely operated by android applications
Fire fighting robot remotely operated by android applicationsFire fighting robot remotely operated by android applications
Fire fighting robot remotely operated by android applications
 
Rumba presentation at FEC2
Rumba presentation at FEC2Rumba presentation at FEC2
Rumba presentation at FEC2
 

Recently uploaded

UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Jeffrey Haguewood
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 

Recently uploaded (20)

UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 

RIL and Android Telephony

  • 1. Android RIL - Radio Interface Layer Lifu Zhang Elektrobit Wireless(2011) Android RIL - Radio Interface Layer 1 / 35
  • 2. Outline 1 Android Telephony Big Picture Porting Work Interacton between Framework and Local Service Ril Initilize 2 Vender RIL Example I: Signal Strength Example II: Voice Call Experiences when IMPL telephony features 3 Data Connection 4 Reference Android RIL - Radio Interface Layer 2 / 35
  • 3. Terms RIL Daemon: The RIL daemon initializes the Vendor RIL, processes all communication from Android telephony services, and dispatches calls to the Vendor RIL as solicited commands. Vendor RIL: The radio-specific Vendor RIL of ril.h that processes all communication with radio hardware and dispatches calls to the RIL Daemon (rild) through unsolicited commands. Android RIL - Radio Interface Layer 3 / 35
  • 4. Architechture of Android Telephony The telephony is based on these items, layout layer by layer Android Services, activities, call settings Service “isms” Dialer application Other Telephony settings and operations The com.android.internal.phone interface PhoneFactory, PhoneProxy, CDMAPhone, GSMPhone RIL.java ril-daemon vender ril Android RIL - Radio Interface Layer 4 / 35
  • 5. Arch Android RIL - Radio Interface Layer 5 / 35
  • 6. Files in System Binary: Source: /system/framework/ com.android.telephony framework.jar com.android.internal.telephony /system/bin/rild com.android.phone /system/lib/libril.so hardware/ril /system/lib/lib(vender)-ril.so Android RIL - Radio Interface Layer 6 / 35
  • 7. Our Job: libxxx-ril.so vender ril The C Programming Language Control the modem, by whatever means (using tty now) Translate requests and data between framework and modem Android RIL - Radio Interface Layer 7 / 35
  • 8. Our Job Android RIL - Radio Interface Layer 8 / 35
  • 9. Requests and Response - Async IPC They are async, you don’t have to response it immediately. All requests and response is handled by the RIL.java, then dispatched to upper framework The ril daemon will use some C++ code disamble the Parcel, and pass void * data to vender ril Android RIL - Radio Interface Layer 9 / 35
  • 10. The Requests requests is comming from the framework, packed as Parcel, trasfered on local socket, dispatched by rild, and handled by vender ril. request id: What do you want to do request token: just a token, using when response it request data: e.g. when sending sms, you have to specify address, text in the data Android RIL - Radio Interface Layer 10 / 35
  • 11. The Response the response is generated by vender ril, packed as Parcel, transfered on local socket, dispatched by CommandInterface, and handled by those who register its handler. id: same as the requests id error id: success or something wrong data: data is in format specify by the request, and if no data needed, it would be ’NULL’ special: Some response is not to a request, we call they unsolicited responses. Android RIL - Radio Interface Layer 11 / 35
  • 12. Ril initial sequence Android RIL - Radio Interface Layer 12 / 35
  • 13. Init Code I - Load RIL Library dlHandle = dlopen ( rilLibPath , RTLD_NOW ) ; if ( dlHandle == NULL ) { fprintf ( stderr , " dlopen failed : % s n " , dlerror () ) ; exit ( -1) ; } R I L _ s t ar t Ev e nt Lo o p () ; rilInit = ( const R I L_ Ra d io F un ct i on s *(*) ( const struct RIL_Env * , int , char **) ) dlsym ( dlHandle , " RIL_Init " ) ; if ( rilInit == NULL ) { fprintf ( stderr , " RIL_Init not defined or exported in % s n " , rilLibPath ) ; exit ( -1) ; } // .. omitted code .. funcs = rilInit (& s_rilEnv , argc , rilArgv ) ; RIL_register ( funcs ) ; done : while (1) { // sleep ( U I N T 3 2 _ M A X ) seems to return i m m e d i a t e l y on bionic sleep (0 x00ffffff ) ; } Android RIL - Radio Interface Layer 13 / 35
  • 14. Init Code II - Wait for device ready for (;;) { fd = -1; while ( fd < 0) { if ( s_port > 0) { fd = s o c k e t _ l o o p b a c k _ c l i e n t ( s_port , SOCK_STREAM ) ; } else if ( s_device_socket ) { if (! strcmp ( s_device_path , " / dev / socket / qemud " ) ) { /* .. CODE OMITTED .. Qemu - specific control socket */ } else fd = s o ck e t _ l o c a l _c l i e n t ( s_device_path , A NDR OI D_ SO CK ET _N AM ESP AC E_ FI LE SY ST EM , SOCK_STREAM ) ; } else if ( s_device_path != NULL ) { fd = open ( s_device_path , O_RDWR ) ; if ( fd >= 0 && i sS e ri al P or t De vi c e ( s_device_path ) ) { /* set serial port acting in raw mode , CODE OMITTED .. */ tcsetattr ( fd , TCSANOW , & ios ) ; } } if ( fd < 0) { sleep (10) ; } } s_closed = 0; ret = at_open ( fd , onUnsolicited ) ; R I L _ r e q u e s t T i m e d C a l l b a c k ( initializeCallback , NULL , & TIMEVAL_0 ) ; // Give i n i t i a l i z e C a l l b a c k a chance to dispatched , since // we don ’t p r e s e n t l y have a c a n c e l l a t i o n m e c h a n i s m sleep (1) ; waitForClose () ; } Android RIL - Radio Interface Layer 14 / 35
  • 15. The Vender RIL In this sections, we’ll have some examples about how the vender ril works. The Vender RIL and RIL Daemon is interact with RIL RadioFunctions and RIL Env facility. The Vender RIL is the very part of system that handle radio operations. Android RIL - Radio Interface Layer 15 / 35
  • 16. The RIL Enviroment and RIL Radio Functions typedef void (* RIL_RequestFunc ) ( int request , void * data , size_t datalen , RIL_Token t ) ; typedef RIL_RadioState (* R I L _ R a d i o S t a t e R e q u e s t ) () ; typedef int (* RIL_Supports ) ( int requestCode ) ; typedef void (* RIL_Cancel ) ( RIL_Token t ) ; typedef void (* R IL_T ime dCa llb ack ) ( void * param ) ; typedef const char * (* RIL_GetVersion ) ( void ) ; typedef struct { int version ; R IL _R equestFunc onRequest ; R I L _ R a d i o S t a t e R e q u e s t onStateRequest ; RIL_Supports supports ; RIL_Cancel onCancel ; RIL_ GetVersion getVersion ; } R I L _ R a d io Fu n ct i on s ; struct RIL_Env { void (* On Req ues tCo mple te ) ( RIL_Token t , RIL_Errno e , void * response , size_t responselen ) ; void (* O n U n s o l i c i t e d R e s p o n s e ) ( int unsolResponse , const void * data , size_t datalen ) ; void (* R e q u e s t T i m e d C a l l b a c k ) ( R IL_ Tim edCa llb ack callback , void * param , const struct timeval * relativeTime ) ; }; Android RIL - Radio Interface Layer 16 / 35
  • 17. NOTES functions in RIL Env is used by vender ril, and RIL RadioFunctions is used by rild The vender rilementation is in the same process space as ril-daemon onComplete is re-enterable, (will block by a mutex if called by multi-thread in same time) Android RIL - Radio Interface Layer 17 / 35
  • 18. Operation to the modem Android RIL - Radio Interface Layer 18 / 35
  • 19. Summary: Threads in rild process space rild main thread: parse argc, argv, open ril library, create event loop, some timed call back is run in this thread. rild event loop: handle requests from upper layer, and call OnRequests of vender ril. vender reader loop: read data comming from modem, packed as response/unsol response. Android RIL - Radio Interface Layer 19 / 35
  • 20. Example I: Signal Strength Query/Report The framework may query current signal strength(case I), and when modem detect a signal change, ril should report this event(case II). For Case I: For Case II: Send ’AT+CSQ’ command The reader loop recieve ’+CSQxxxx’ Waiting for response Parse the at command string Parse response, pack data into pack data into RIL CDMA SignalStrength RIL CDMA SignalStrength OnRequestComplete OnUnsolicitedResponse Android RIL - Radio Interface Layer 20 / 35
  • 21. Example I: Signal Strength Report - Code static void onUnsolicited ( const char *s , const char * sms_pdu ) { // this is the function called when r e a d e r l o o p found an unsol modem command // .. omitted code .. } else if ( strStartsWith (s , " ^ HRSSILVL : " ) ) { // handle signals here onHrssiChanged ( s ) ; } // .. omitted code .. } static void onHrssiChanged ( const char * s ) { int sigStrength ; int err ; char * membak = strdup ( s ) ; char * ln = membak ; R I L _ S i gn a lS t re ng t h sigsth ; R I L _ S i gn a lS t re ng t h * sth = & sigsth ; err = at_tok_start (& ln ) ; if ( err ) goto error ; err = at_tok_nextint (& ln , & sigStrength ) ; if ( err ) goto error ; h w _ c o n v e r t S i g n a l S t r e n g h ( sigStrength , sth ) ; // will do data c o n v e r t i o n R I L _ o n U n s o l i c i t e d R e s p o n s e ( RIL_UNSOL_SIGNAL_STRENGTH , sth , sizeof (* sth ) ) ; free ( membak ) ; return ; error : free ( membak ) ; LOGE ( " Unsol Signal Strength command error : % s " , s ) ; return ; } Android RIL - Radio Interface Layer 21 / 35
  • 22. Example I: Signal Strength Query - Code R IL _S i gn a l S t r e ng t h sth ; int err = h w _ g e t S i g n a l S t r e n g t h (& sth ) ; if (! err ) { R I L _ o n R e q u e s t C o m p l e t e (t , RIL_E_SUCCESS , & sth , sizeof ( sth ) ) ; } else { R I L _ o n R e q u e s t C o m p l e t e (t , RIL_E_GENERIC_FAILURE , NULL , 0) ; } SS query int h w _ g e t S i g n a l S t r e n g t h ( R IL _ S i g na lS t r e n g t h * sth ) { int err = 0; For Huawei ATResponse * p_response ; modem err = a t _ s e n d _ c o m m a n d _ s i n g l e l i n e ( " AT ^ HDRCSQ " , " ^ HDRCSQ " , & p_response ) ; char * line = p_response - > p_intermediates - > line ; with do { int hwhdr ; adaptation if ( err < 0 || p_response - > success == 0) break ; err = at_tok_start (& line ) ; if ( err ) break ; err = at _tok_nex tint (& line , & hwhdr ) ; if ( err ) break ; h w _ c o n v e r t S i g n a l S t r e n g h ( hwhdr , sth ) ; } while (0) ; at_res po ns e_ free ( p_response ) ; return err ; } Android RIL - Radio Interface Layer 22 / 35
  • 23. Dial a Number When the java framework wanna dial a number, it will send a request to rild: ID : RIL REQUEST DIAL (value=10, int) Data: RIL Dial :{ address: char *, the address we’ll dialing, e.g. 13xxxxxxxx clir: int, loop TS27.007 7.7 +CLIR, I don’t know what’s this. uusInfo: RIL UUS Info *, NULL or Pointer to User-User Signaling Information } Android RIL - Radio Interface Layer 23 / 35
  • 24. What Shall I Do? Make the Call! p_dial = ( RIL_Dial *) data ; switch ( p_dial - > clir ) { case 1: clir = " I " ; break ; /* i n v o c a t i o n */ case 2: clir = " i " ; break ; /* s u p p r e s s i o n */ default : case 0: clir = " " ; break ; /* s u b s c r i p t i o n default */ } ret = sendDialCommand ( p_dial - > address , clir ) ; R I L _ o n R e q u e s t C o m p l e t e (t , ( RIL_Errno ) ret , NULL , 0) ; static int sendDialCommand ( const char * number , const char * clir ) { int ret ; if ( isInCall () ) { // forbide call in call o p e r a t i o n ret = R I L _ E _ G E N E R I C _ F A I L U R E ; } else { /* Not in call , us AT + CDV */ char * cmd ; asprintf (& cmd , " AT + CDV % s % s ; " , number , clir ) ; ret = at_send_command ( cmd , NULL ) ; free ( cmd ) ; } if ( ret ) { return R I L _ E _ G E N E R I C _ F A I L U R E ; } else { return RIL_E_SUCCESS ; } } Android RIL - Radio Interface Layer 24 / 35
  • 25. What’s Your Call Status? RIL_Call ** hw_getValidCalls ( void ) { // .. omited code .. err = a t _ s e n d _ c o m m a n d _ m u l t i l i n e ( " AT + CLCC " , " + CLCC : " , & p_response ) ; // .. omited code .. atline = p_response - > p_intermediates ; while ( atline != NULL ) { err = r i l c a l lF r o m C l c c L in e ( p_callbuf , atline - > line ) ; if (! err ) { RIL_Call * curCall ; curCall = ( typeof ( curCall ) ) malloc ( sizeof (* curCall ) ) ; memcpy ( curCall , p_callbuf , sizeof (* p_callbuf ) ) ; pp_calls [ nValidCalls ] = curCall ; ++ nValidCalls ; } else { ebDebug ( " failed to parse one clcc line " ) ; } atline = atline - > p_next ; } // .. omitted code .. } pp_calls = hw_getValidCalls () ; // .. omitted code .. R I L _ o n R e q u e s t C o m p l e t e (t , RIL_E_SUCCESS , pp_calls , nValidCalls * sizeof (* pp_calls ) ) ; // .. omitted code .. Android RIL - Radio Interface Layer 25 / 35
  • 26. Incoming Transmission When the call state changed, i.e., under these situation: ring, dialing, connectiong established, or hang-up, the ril damon should simply give a ’CALL STATE CHANGED’ unsol response. else if ( strStartsWith (s , " + CRING : " ) || strStartsWith (s , " RING " ) || strStartsWith (s , " NO CARRIER " ) || strStartsWith (s , " + CCWA " ) || strStartsWith (s , " ^ ORIG " ) || strStartsWith (s , " ^ CONN " ) || strStartsWith (s , " ^ CEND " ) ) { RIL_onUnsolicitedResponse ( R IL _ U N SO L _ RE S P ON S E _C A L L _S T A TE _ C HA N G ED , NULL , 0) ; if ( strStartsWith (s , " ^ CONN " ) ) { onCallStart () ; } else if ( strStartsWith (s , " ^ CEND " ) ) { onCallEnd () ; } else if ( strStartsWith (s , " + CRING : " ) || strStartsWith (s , " RING " ) ) { R I L _ o n U n s o l i c i t e d R e s p o n s e ( RIL_UNSOL_CALL_RING , & s_StandardSingalInfo , sizeof ( s _ S t a n d a r d S i n g a l I n f o ) ) ; } Android RIL - Radio Interface Layer 26 / 35
  • 27. Expansion: 3rd Party Voice Call(CDMA) Always, we will make call with multiple persons, this kind of action in CDMA/EVDO is little bit different between GSM/WCDMA. There is a action named ’FLASH’: If the flash command come without params, it’ll hang the current call. If the flash come with a phone number, it’ll connected to that phone.(and hold other calls) If the flash come without params, and there is holding calls, it will rejoin them, and make a 3rd party call. Android RIL - Radio Interface Layer 27 / 35
  • 28. Expansion: 3rd Party Voice Call(CDMA), Implements The hw flash(const char *) method will send flash command to modem. static void cdmaFlash ( void * param ) { int err ; err = hw_flash ( " " ) ; } static void requestCdmaFlash ( void * data , size_t datalen , RIL_Token t ) { int err ; const char * flashstr = ( const char *) data ; err = hw_flash ( flashstr ) ; if ( err ) { goto error ; } static const struct timeval FlashWait = {5 , 0}; R I L _ r e q u e s t T i m e d C a l l b a c k ( cdmaFlash , NULL , & FlashWait ) ; // .. omitted code .. } Android RIL - Radio Interface Layer 28 / 35
  • 29. SMS Android java framework will pack all sms text as pdu byte array, and will take over the long sms partition work. The vender ril has to do: Translate pdu to the format modem could regconize. Pack the text data from modem to ril pdu format. Handle the storage/deletion work for sms on sim/ruim card Android RIL - Radio Interface Layer 29 / 35
  • 30. Call Forward and Call Waiting Opensource android CDMA Telephony framework doesn’t surpport these action. It’s simple to add impl code to java framework and settings app refer to gsm system. For China Telecom, you have to make cvoice calls with special number to register these service. Android RIL - Radio Interface Layer 30 / 35
  • 31. Main Flow for Data Connection Android RIL - Radio Interface Layer 31 / 35
  • 32. CDMA Data conn Establish Android RIL - Radio Interface Layer 32 / 35
  • 33. GSM Data conn Establish Android RIL - Radio Interface Layer 33 / 35
  • 34. NOTES A modem always have two channel to operate, when established a ppp link, one channel will be hold for ppp. pppd will create interface, set dns/ip or dhcp them. Android RIL - Radio Interface Layer 34 / 35
  • 35. Reference An Android Website Android RIL on SlideShare Androi RIL on EVDO/CDMA Android RIL - Radio Interface Layer 35 / 35