Cell Core and RIL Overview Cell Core Goals

  • Slides: 65
Download presentation
Cell. Core and RIL Overview

Cell. Core and RIL Overview

Cell. Core Goals § Improve key Win 32 APIs to seamlessly support digital cellular

Cell. Core Goals § Improve key Win 32 APIs to seamlessly support digital cellular v Focus on TAPI and Win 32 § Fortify Win 32 API deficiencies v How to handle SIM? SMS? WAP? GPRS? § Abstract the underlying cellular networks and hardware v v Developers should have one API for PDC, GSM or CDMA Hardware partners should have only one driver (RIL) § Enable innovation on top of new APIs v v v WAP Support “Push to talk” chat OTA SMS configuration

Telephony Architecture Applications / UI Logic Module Windows API Stinger Core API Core Provider

Telephony Architecture Applications / UI Logic Module Windows API Stinger Core API Core Provider HW Interface Radio Software Text Assisted TAPI TK UI Tool Kit SMS API WTP Router WTLS WDP Etc ATCI Ex. TAPI SIM API WDP Radio Interface Layer (RIL) Radio Stack Connection Manager Voice TAPI Data Etc Winsock TCP/IP Telephony SP PPP VSP

What is a RIL driver? § The “Radio Interface Layer” (RIL) driver is the

What is a RIL driver? § The “Radio Interface Layer” (RIL) driver is the interface between the system software and the radio stack. § The RIL driver services system requests for radio functionality (voice, data, SMS, etc. ), and notifies the system of changes in the radio state (coverage, signal strength, incoming calls, etc. ) § RIL contains all of the radio specific code. It must be custom written for each radio stack. § Microsoft provides a sample driver that works with several AT command based GSM radios stacks (Wave. Comm and Condat).

Radio Interface Layer § Easy partner integration § Flexible interface § Technology independent SIM

Radio Interface Layer § Easy partner integration § Flexible interface § Technology independent SIM Emergency Sting. TSP RIL Proxy WAP SMS Data Stack RIL Proxy VSP Interface (Device. IOControl) RIL Driver Interface (RS 232, Shared memory, Bluetooth) Radio Hardware

Virtual Serial Port § One serial port, one COM interface v v User virtual

Virtual Serial Port § One serial port, one COM interface v v User virtual serial port to multiplex control + data Difficult to implement, especially on GPRS § Single serial port, dual COM interface v Implements multiplexing in serial driver § Dual serial port, dual COM interface v Easier software integration, but added hardware requirement One UART, One COM One UART, Two COM SMS Router PPP SMS Router RIL VSP RIL PPP Two UART, Two COM SMS Router PPP RIL Serial Driver MUX Serial Driver Protocol Stack

Design Considerations § Must be capable of handling requests from multiple clients. § Must

Design Considerations § Must be capable of handling requests from multiple clients. § Must not block calling threads. Asynchronous. § Must have a mechanism for delivering notifications of network and radio events to interested clients. § Must have a mechanism for device specific function calls and notifications. Microsoft cannot anticipate all possible requirements. § Minimize number of threads to conserve memory.

RIL Proxy Microsoft supplied module Loaded separately by each RIL client. Maintains handles to

RIL Proxy Microsoft supplied module Loaded separately by each RIL client. Maintains handles to RIL driver for each client. Translates RIL_XXXX function to RIL_IOCTL_XXX calls into RIL_IOControl in RIL driver. § Example: RIL_Dial results in RIL_IOControl(Ih. Ril, IOCTL_RIL_DIAL, …) § Responsible for calling back into client processes for notifications and asynchronous RIL function results. § Filters out notifications the client is not interested in. § §

Notification Class § Clients register with the proxy to be notified of certain classes

Notification Class § Clients register with the proxy to be notified of certain classes of notifications § RIL driver generates notifications and sets “RILNotification. Cancel. Event” for each client. § Proxy uses IOCTL_RIL_GETNEXTNOTIFICATION to get next notification § The proxy calls the client’s notify or result callback function with the new notification data. #define #define #define RIL_NCLASS_FUNCRESULT RIL_NCLASS_CALLCTRL RIL_NCLASS_MESSAGE RIL_NCLASS_NETWORK RIL_NCLASS_SUPSERVICE RIL_NCLASS_PHONEBOOK RIL_NCLASS_SIMTOOLKIT RIL_NCLASS_MISC RIL_NCLASS_RADIOSTATE RIL_NCLASS_DEVSPECIFIC (0 x 0000) (0 x 00010000) (0 x 00020000) (0 x 00040000) (0 x 00080000) (0 x 00100000) (0 x 00200000) (0 x 00400000) (0 x 00800000) (0 x 80000000) // // // API call results Call control notifications Messaging notifications Network-related notifications Supplementary service notifications Phonebook notifications SIM Toolkit notifications Miscellaneous notifications Pertaining to Radio State OEM owned

Sample Driver Thread Model RIL_Dial 5551212 RIL_RESULT_OK ATD 5551212; RIL_RESULT_OK 0 0 ATD 5551212;

Sample Driver Thread Model RIL_Dial 5551212 RIL_RESULT_OK ATD 5551212; RIL_RESULT_OK 0 0 ATD 5551212; 0

Sample Driver Thread Model Continued Application / System calling thread § Enters driver from

Sample Driver Thread Model Continued Application / System calling thread § Enters driver from RIL Proxy via RIL_IOControl § Generate AT command § Places command on “Command Queue” § Does not block. § Returns < 0 HRESULT error or > 0 command ID of the queued command.

Sample Driver Thread Model Continued Command Thread § Waits for command to arrive on

Sample Driver Thread Model Continued Command Thread § Waits for command to arrive on command queue. § Writes AT command to serial port. § Waits for response in response queue. § Constructs notification object. § Places object in notification queue of each RIL handle. § Triggers “RILNotification. Cancel. Event” for each RIL handle to alert proxy of new notification.

Sample Driver Thread Model Continued Read. Thread § Waits for data to read on

Sample Driver Thread Model Continued Read. Thread § Waits for data to read on COM port. § Buffer up data until a complete response is received. § Checks to see if it is a command response or an unsolicited notification. § If it is a command response, place it in the response queue. § If it is a notification, place it in the notification queue for each RIL handle and trigger “RILNotification. Cancel. Event” for each RIL handle

Sample Driver Thread Model Continued Proxy Worker Thread § One for each RIL handle

Sample Driver Thread Model Continued Proxy Worker Thread § One for each RIL handle § Waits for “RILNotification. Cancel. Event” § Calls through RIL_IOControl with IOCTL_RIL_GETNEXTNOTIFICATION. § IOCTL_RIL_GETNEXTNOTIFICATION gets the next notification out of the queue and returns. § If the function result, call client function callback. § If unsolicited notification, call client notification callback (IF client is registered for this NCLASS).

RIL Driver Entry Points RIL_Init § Called by system during boot § Startup for

RIL Driver Entry Points RIL_Init § Called by system during boot § Startup for RIL driver. Creates worker threads, initializes global data structures, initialize COM ports, etc. § Kicks off thread to perform radio initialization § Sets “RILDrv_Present” event to inform the RIL Proxy that the driver was loaded and initialized successfully.

RIL Driver Entry Points RIL_Deinit § Called before driver is unloaded. § Perform cleanup

RIL Driver Entry Points RIL_Deinit § Called before driver is unloaded. § Perform cleanup § Clear “RILDrv_Present” event to inform the RIL Proxy that the driver was unloaded.

RIL Driver Entry Points RIL_Open § Called by proxy during RIL_Initialize § Prepare RIL

RIL Driver Entry Points RIL_Open § Called by proxy during RIL_Initialize § Prepare RIL for use by a new client RIL_Close § Called by proxy during RIL_Deinitialize § Free resources used by an old client RIL_Read, RIL_Write, RIL_Seek § Not used

RIL Driver Entry Points RIL_IOControl § Most of the RIL API passes through RIL_IOControl

RIL Driver Entry Points RIL_IOControl § Most of the RIL API passes through RIL_IOControl § Typically this is implemented as a large switch : case expression. switch (dw. Code)) { // RIL_Get. Subscriber. Numbers() case IOCTL_RIL_GETSUBSCRIBERNUMBERS: result = RILDrv_Get. Subscriber. Numbers(. . . ); break; // RIL_Get. Operator. List() case IOCTL_RIL_GETOPERATORLIST: result = RILDrv_Get. Operator. List(…); break; … }

Voice Applications / UI Logic Module Windows API Stinger Core API Core Provider HW

Voice Applications / UI Logic Module Windows API Stinger Core API Core Provider HW Interface Radio Software Text Assisted TAPI TK UI Tool Kit SMS API WTP Router WTLS WDP Etc ATCI Ex. TAPI SIM API WDP Radio Interface Layer (RIL) Radio Stack Connection Manager Voice TAPI Data Etc Winsock TCP/IP Telephony SP PPP VSP

Simple Voice Control – Assisted TAPI § Assisted TAPI is a simplified telephony interface

Simple Voice Control – Assisted TAPI § Assisted TAPI is a simplified telephony interface § Only one function: “Make a voice call” v tapi. Request. Make. Call(…. ) Assisted TAPI Connection Manager Voice TAPI Telephony Service Provider RIL Proxy Data Etc

Advanced Voice Control § TAPI is provides advanced telephony control v Dial, answer, hold,

Advanced Voice Control § TAPI is provides advanced telephony control v Dial, answer, hold, conference, forward, transfer, deflect, etc. § Ex. TAPI support additional cellular features v v Uses TAPI line. Dev. Specific function HSCSD, USSD, operator selection, call barring, etc. § Cellular TSP implements TAPI and Ex. TAPI calls Extended TAPI Telephony Service Provider RIL Proxy

Call Control Functions Function GSM Comments RIL_Dial D +FCLASS Dials a number RIL_Answer A

Call Control Functions Function GSM Comments RIL_Dial D +FCLASS Dials a number RIL_Answer A Answers an incoming call RIL_Hangup H End all voice and data calls (not GPRS) RIL_Send. DTMF +VTS Sends DTMF tones (e. g. during a call) RIL_Get. Call. List +CLCC Retrieves list of active calls and their status RIL_Manage. Calls +CHLD Changes call status (hold, conference, etc) RIL_Transfer. Call +CTFR Explicitly transfers a call RIL_Get. Line. Status +CPAS Gets line status RIL_Send. Flash Send CDMA hook flash

Call Control Notifications dw. Code lp. Data Comments RIL_NOTIFY_RING RILRINGINFO Structure Incoming call RIL_NOTIFY_CONNECT

Call Control Notifications dw. Code lp. Data Comments RIL_NOTIFY_RING RILRINGINFO Structure Incoming call RIL_NOTIFY_CONNECT RILCONNECTINFO Structure Call connected RIL_NOTIFY_DISCONNECT RIL_DISCINIT_* Constant Call disconnected RIL_NOTIFY_CALLSTATECHANGED <NULL> Call state of one or more calls may have changed

Phone Volume Functions Function GSM Comments RIL_Get. Audio. Gain +VGR +VGT Gets receive gain

Phone Volume Functions Function GSM Comments RIL_Get. Audio. Gain +VGR +VGT Gets receive gain of the audio device RIL_Set. Audio. Gain +VGR +VGT Sets receive gain of the audio device RIL_Get. Audio. Muting +CMUT Gets muting state RIL_Set. Audio. Muting +CMUT Sets muting state

Scenario - Voice Dial RIL API: RIL_Dial(h. Ril, "14255551212", RIL_CALLTYPE_VOICE, RIL_DIALOPT_NONE) Returns dw. Command.

Scenario - Voice Dial RIL API: RIL_Dial(h. Ril, "14255551212", RIL_CALLTYPE_VOICE, RIL_DIALOPT_NONE) Returns dw. Command. ID = 1 Com out: ATD 14255551212; <cr > ATD 14255551212; <cr> Com in: 0<cr ><lf> 0<cr><lf> Async result: dw. Command. ID=1 RIL_RESULT_OK p. Data = NULL Notification: RIL_NOTIFY_CONNECT p. Data = RIL_CALLTYPE_VOICE RIL API: RIL_Get. Call. List(h. Ril) Returns dw. Command. ID = 2 Com out: AT+CLCC<cr > AT+CLCC<cr> Com in: <cr ><lf>+CLCC: 1, 0, 2, 0, 0, "14255551212", 129<cr ><lf>0<cr cr> > <cr><lf>+CLCC: 1, 0, 2, 0, 0, "14255551212", 129<cr><lf>0< Async Result: dw. Command. ID=2 RIL_RESULT_OK p. Data = RILCALLINFO dw. ID = 1 dw. Direction = RIL_CALLDIR_OUTGOING dw. Status = RIL_CALLSTAT_DIALING dw. Type = RIL_CALLTYPE_VOICE dw. Multiparty = RIL_CALL_SINGLEPARTY ra. Address = "14255551212“ RIL API: RIL_Get. Call. List(h. Ril) Returns dw. Command. ID = 3 Com out: AT+CLCC<cr > AT+CLCC<cr> Com in: <cr ><lf>+CLCC: 1, 0, 0, "14255551212", 129<cr ><lf>0<cr cr> > <cr><lf>+CLCC: 1, 0, 0, "14255551212", 129<cr><lf>0< Async Result: dw. Command. ID=3 =3 RIL_RESULT_OK p. Data = RILCALLINFO dw. Command. ID dw. Status = RIL_CALLSTAT_ACTIVE Com in: 3<cr > 3<cr> Notification: RIL_NOTIFY_DISCONNECT p. Data = RIL_DISCINIT_REMOTE RIL API: RIL_Get. Call. List(h. Ril) Returns dw. Command. ID = 4 Com out: AT+CLCC<cr > AT+CLCC<cr> Com In: 0<cr > 0<cr> Async Result: dw. Command. ID=4 RIL_RESULT_OK p. Data = NULL

Scenario – Conference Call RIL API: RIL_Dial(h. Ril, "14255551212", RIL_CALLTYPE_VOICE, RIL_DIALOPT_NONE) Async result: RIL_RESULT_OK

Scenario – Conference Call RIL API: RIL_Dial(h. Ril, "14255551212", RIL_CALLTYPE_VOICE, RIL_DIALOPT_NONE) Async result: RIL_RESULT_OK p. Data = NULL Notification: RIL_NOTIFY_CONNECT p. Data = RIL_CALLTYPE_VOICE RIL API: RIL_Get. Call. List(h. Ril) Async Result: RIL_RESULT_OK p. Data = RILCALLINFO dw. ID = 1 RIL_CALLSTAT_ACTIVE "14255551212“ RIL_CALL_SINGLEPARTY RIL API: RIL_Manage. Calls RIL_CALLCMD_HOLDACTIVE_ACCEPTHELD Async result: RIL_RESULT_OK p. Data = NULL RIL_NOTIFY_CALLSTATECHANGED RIL API: RIL_Get. Call. List(h. Ril) Async Result: RIL_RESULT_OK p. Data = RILCALLINFO dw. ID = 1 RIL_CALLSTAT_ONHOLD "14255551212“ RIL_CALL_SINGLEPARTY RIL API: RIL_Dial(h. Ril, "17025550321", RIL_CALLTYPE_VOICE, RIL_DIALOPT_NONE) Async result: RIL_RESULT_OK p. Data = NULL Notification: RIL_NOTIFY_CONNECT p. Data = RIL_CALLTYPE_VOICE RIL API: RIL_Get. Call. List(h. Ril) Async Result: RIL_RESULT_OK p. Data = RILCALLINFO dw. ID = 1 RIL_CALLSTAT_ONHOLD "14255551212“ RIL_CALL_SINGLEPARTY dw. ID = 2 RIL_CALLSTAT_ACTIVE " 17025550321“ RIL_CALL_SINGLEPARTY RIL API: RIL_Manage. Calls RIL_CALLCMD_ADDHELDTOCONF Async result: RIL_RESULT_OK p. Data = NULL RIL_NOTIFY_CALLSTATECHANGED RIL API: RIL_Get. Call. List(h. Ril) Async Result: RIL_RESULT_OK p. Data = RILCALLINFO dw. ID = 1 RIL_CALLSTAT_ACTIVE "14255551212“RIL_CALL_MULTIPARTY dw. ID = 2 RIL_CALLSTAT_ACTIVE " 17025550321“RIL_CALL_MULTIPARTY

Supplemental Service Notifications dw. Code Lp. Data Comments RIL_NOTIFY_CALLERID ( RILREMOTEPARTYINFO * ) The

Supplemental Service Notifications dw. Code Lp. Data Comments RIL_NOTIFY_CALLERID ( RILREMOTEPARTYINFO * ) The remote address of the incoming call RIL_NOTIFY_DIALEDID ( RILREMOTEPARTYINFO * ) The destination address of the outgoing call RIL_NOTIFY_CALLWAITING ( RILCALLWAITINGINFO * ) Call waiting notification RIL_NOTIFY_SUPSERVICEDATA ( RILSUPSERVICEDATA * ) Incoming USSD message

Network Service Functions Function GSM Comments RIL_Get. Subscriber. Numbers +CNUM Gets list of assigned

Network Service Functions Function GSM Comments RIL_Get. Subscriber. Numbers +CNUM Gets list of assigned phone numbers RIL_Get. Operator. List +COPS Gets a list of available operators RIL_Get. Preferred. Operator. List +CPOL Gets a list of preferred operators RIL_Add. Preferred. Operator +CPOL Adds to the list of preferred operators RIL_Remove. Preferred. Operator +CPOL Removes from the list of preferred operators RIL_Get. Current. Operator +COPS Gets the operator currently registered RIL_Register. On. Network +COPS Register with a particular operator RIL_Unregister. From. Network +COPS Unregister current operator RIL_Get. Registration. Status +CREG Gets registration status RIL_Get. Current. Privacy. Status Gets the privacy status of the current system RIL_Get. GPRSAttached +CGATT Get GPRS Attach or Detach (used in Ozone only) RIL_Set. GPRSAttached +CGATT Set GPRS Attach or Detach (unused – auto attach is used instead) RIL_GPRSRegistration. Status +CGREG GPRS Network Registration Status RIL_Get. Current. System. Type Gets system type (GSM, IS 95 A, 1 XRTT, etc. )

Network Service Notifications dw. Code lp. Data Comments RIL_NOTIFY_SIGNALQUALITY RILSIGNALQUALITY Bit error rate is

Network Service Notifications dw. Code lp. Data Comments RIL_NOTIFY_SIGNALQUALITY RILSIGNALQUALITY Bit error rate is ignored RIL_NOTIFY_SYSTEMCHANGED (RIL_SYSTEMTYPE_) Constant Used for CDMA 1 XRTT coverage detection only RIL_NOTIFY_GPRSREGSTATUSCHANGED ( RIL_REGSTAT_ * ) Constant Sent with change in GPRS attach status RIL_NOTIFY_REGSTATUSCHANGED ( RIL_REGSTAT_ * ) Constant Sent with change in registration status

Supplemental Service Functions Function GSM Comments RIL_Set. Caller. IDSettings +CLIP Caller. ID settings RIL_Get.

Supplemental Service Functions Function GSM Comments RIL_Set. Caller. IDSettings +CLIP Caller. ID settings RIL_Get. Hide. IDSettings +CLIR Hides own number from recipient RIL_Set. Hide. IDStatus +CLIR Hides own number from recipient RIL_Get. Dialed. IDSettings +COLP Dialed number on an outgoing call RIL_Set. Dialed. IDSettings +COLP Dialed number on an outgoing call RIL_Get. Closed. Group. Settings +CCUG Closed user group settings RIL_Add. Call. Forwarding +CCFC Add a number to the call forwarding list RIL_Remove. Call. Forwarding +CCFC Remove a number from the call forwarding list RIL_Set. Call. Forward. Status +CCFC Enable/disable call forwarding RIL_Get. Call. Waiting. Settings +CCWA Call waiting settings RIL_Set. Call. Waiting. Status +CCWA Call waiting settings RIL_Cancel. Sup. Service. Data. Session +CUSD Cancel a USSD session RIL_Send. Sup. Service. Data +CUSD Send a USSD message

Circuit-Switched data § TAPI still used, but with “Data Mode” flag § PPP obtains

Circuit-Switched data § TAPI still used, but with “Data Mode” flag § PPP obtains COM handle to the virtual serial port Application Connection Manager Data Voice RAS Ex. TAPI Winsock Etc TCP/IP PPP TAPI Virtual Serial Port TSP RIL Hardware

GPRS Data § Again TAPI is used but with additional Dev. Config fields §

GPRS Data § Again TAPI is used but with additional Dev. Config fields § Looks like a quickly setup RAS conneciton Application Connection Manager Data Voice GPRS RAS Ex. TAPI Winsock TCP/IP PPP TAPI Virtual Serial Port TSP RIL Hardware

Connection Manager Applications / UI Logic Module Windows API Stinger Core API Core Provider

Connection Manager Applications / UI Logic Module Windows API Stinger Core API Core Provider HW Interface Radio Software Text Assisted TAPI TK UI Tool Kit SMS API WTP Router WTLS WDP Etc ATCI Ex. TAPI SIM API WDP Radio Interface Layer (RIL) Radio Stack Connection Manager Voice TAPI Data Etc Winsock TCP/IP Telephony SP PPP VSP

Connection Manager § Intelligent data connectivity v v Network based vs. Connection based Scheduled

Connection Manager § Intelligent data connectivity v v Network based vs. Connection based Scheduled Connections § Each CSP has connection criteria v v Error rate, cost, bandwidth, latency, connect time, etc. Can add CSPs to support new connection types § Planner arbitrates connection decisions v Pre-configurable by carrier/Corp IT Planner Connection Manager Voice RAS Proxy PPTP GPRS etc Connection Service Providers

Connection Manager § Common CSP examples v v ISP Corpnet Secure Tunnelling (PPTP) Proxy

Connection Manager § Common CSP examples v v ISP Corpnet Secure Tunnelling (PPTP) Proxy Internet Corpnet ISP Corpnet Tunnelling Proxy

GPRS Functions Function GSM Comments RIL_Get. GPRSContext. List +CGDCONT Get PDP Context RIL_Set. GPRSContext

GPRS Functions Function GSM Comments RIL_Get. GPRSContext. List +CGDCONT Get PDP Context RIL_Set. GPRSContext +CGDCONT Set PDP Context RIL_Get. Requested. Quality. Of. Service. List +CGQREQ Get Quality of Service (requested) RIL_Set. Requested. Quality. Of. Service +CGQREQ Set Quality of Service (requested) RIL_Delete. Requested. Quality. Of. Service +CGQREQ Delete Quality of Service (requested) RIL_Get. Minimum. Quality. Of. Service. List +CGQMIN Get Quality of Service Profile (Minimum Acceptable) RIL_Set. Minimum. Quality. Of. Service +CGQMIN Delete Quality of Service Profile (Minimum Acceptable) RIL_Get. GPRSContext. Activated. List +CGACT Get PDP Context activate or Deactivate RIL_Set. GPRSContext. Activated +CGACT Set PDP Context activate or Deactivate (should be NOOP, this should be handled during PPP negotiation) RIL_Enter. GPRSData. Mode D*99# Enter Data State

Data Calls § Applications can initiate data calls in two different ways. Conn. Mgr.

Data Calls § Applications can initiate data calls in two different ways. Conn. Mgr. Establish. Connection or Ras. Dial. § Conn. Mgr. Establish. Connection uses Ras. Dial internally. § Ras. Dial – uses TAPI line. Set. Dev. Config and line. Make. Call. § All of these API's are detailed in the Pockect PC and Smart Phone SDK.

Data Calls Continued § From RIL's perspective, all data calls are established in two

Data Calls Continued § From RIL's perspective, all data calls are established in two phases. § line. Set. Dev. Config is the first phase. This API results in potentially several RIL calls which configure data mode options. § In the second phase, the call is dialed. Here's the typical sequence of events. . .

GPRS Data Calls § For GPRS calls, Microsoft relies on the radio stack to

GPRS Data Calls § For GPRS calls, Microsoft relies on the radio stack to automatically GPRS attach whenever the device registers on the network. § Phase 1: line. Set. Dev. Config 1. RIL_Set. GPRSContext 2. RILDrv_Set. Requested. Quality. Of. Service - NOOP 3. RIL_Set. Minimum. Quality. Of. Service - NOOP 4. RILDrv_Set. GPRSContext. Activated - NOOP (PPP) § Phase 2: line. Make. Call 1. RILDrv_Enter. GPRSData. Mode – Dial ATD*99# 2. PPP negotiation will then activate the data context.

GPRS Data Calls Continued Hang. Up § Because RILDrv_Set. GPRSContext. Activated should use CMDOPT_NOOP,

GPRS Data Calls Continued Hang. Up § Because RILDrv_Set. GPRSContext. Activated should use CMDOPT_NOOP, Microsoft code never expects to deactivate a GPRS context using an AT command. § Instead, when the PPP server sees a link down from the client, the PPP server should deactivate the GPRS context.

CSD / 1 XRTT Data Calls For CSD/1 x data calls, the procedure is

CSD / 1 XRTT Data Calls For CSD/1 x data calls, the procedure is very similar. § Phase 1: line. Set. Dev. Config RILDrv_Set. Bearer. Service. Options AT+CBST. (can use CMDOPT_NOOP) § Phase 2: line. Make. Call - RILDrv_Dial § Hangup works like voice calls via RILDrv_Hangup.

Short Messaging Service Applications / UI Logic Module Windows API Stinger Core API Core

Short Messaging Service Applications / UI Logic Module Windows API Stinger Core API Core Provider HW Interface Radio Software Text Assisted TAPI TK UI Tool Kit SMS API WTP Router WTLS WDP Etc ATCI Ex. TAPI SIM API WDP Radio Interface Layer (RIL) Radio Stack Connection Manager Voice TAPI Data Etc Winsock TCP/IP Telephony SP PPP VSP

Short Messaging Service § Store receives all messages § Providers support different message types

Short Messaging Service § Store receives all messages § Providers support different message types v v v GSMText (with multipart) WDP (GSM 03. 40) Other custom types POP IMAP Inbox SMS Provisioning Router SMS API Router Text Providers WDP Etc RIL Hardware SMS Store

Messaging Functions Function GSM Comments RIL_Get. Msg. Service. Options +CSMS +CPMS +CMGF Gets messaging

Messaging Functions Function GSM Comments RIL_Get. Msg. Service. Options +CSMS +CPMS +CMGF Gets messaging service options RIL_Set. Msg. Service. Options +CSMS +CPMS +CMGF Sets messaging service options RIL_Get. Msg. Config +CSCA +CSMP +CSDH +CSCB Gets message configuration options RIL_Set. Msg. Config +CSCA +CSMP +CSDH +CSCB +CSAS Sets message configuration options RIL_Read. Msg +CMGR +CMGD Read (optionally delete) a message RIL_Delete. Msg +CMGD Delete a message RIL_Write. Msg +CMGW +CMGS +CMMS Writes (optionally send) a message RIL_Send. Msg +CMGS +CMSS +CMMS +CMGC Send a message RIL_Send. Msg. Acknowledgement +CMGS +CMSS +CMMS +CNMA Send a message ACK when requested by an incoming message

Messaging Notifications dw. Code lp. Data Comments RIL_NOTIFY_MESSAGE ( RILMESSAGE * ) Indicates a

Messaging Notifications dw. Code lp. Data Comments RIL_NOTIFY_MESSAGE ( RILMESSAGE * ) Indicates a new message RIL_NOTIFY_BCMESSAGE ( RILMESSAGE * ) Indicates a new broadcast message RIL_NOTIFY_STATUSMESSAGE ( RILMESSAGE * ) Indicates a new status message RIL_NOTIFY_MSGSTORED ( dw. Index ) Indicates a message has been stored RIL_NOTIFY_MSGDELETED ( dw. Index ) Indicates a message has been deleted RIL_NOTIFY_MSGSTORAGECHANGED RILMSGSTORAGEINFO Structure One of the message storage locations has been changed

SMS Messaging Inbox Voice Mail Indicator WAP Wakeup CEMAPI Provider Specific Get. Size Data

SMS Messaging Inbox Voice Mail Indicator WAP Wakeup CEMAPI Provider Specific Get. Size Data Provisioning Router WAP Stack SMS API Read Router SMS Store RILMESSAGE RIL_NOTIFY_MESSAGE - RILMESSAGE Recognize Get. Size Read RILMESSAGE Provider Specific Data WCMP WDP Text Notify RILMESSAGE RIL_NOTIFY_MESSAGE - RILMESSAGE RIL Radio Stack Status Raw

SMS Message Structure typedef struct rilmessage_tag { DWORD cb. Size; // @field structure size

SMS Message Structure typedef struct rilmessage_tag { DWORD cb. Size; // @field structure size in bytes DWORD dw. Params; // @field indicates valid parameters RILADDRESS ra. Svc. Ctr. Address; // @field service center address DWORD dw. Type; // @field type of message DWORD dw. Flags; // @field message flags union { // @field UNION MEMBER struct { // @field RIL_MSGTYPE_IN_DELIVER RILADDRESS ra. Orig. Address; // @field originating address DWORD dw. Protocol. ID; // @field message protocol RILMSGDCS rmd. Data. Coding; // @field data coding scheme SYSTEMTIME st. SCReceive. Time; // @field receive time (UTC) DWORD cb. Hdr. Length; // @field length of header in bytes DWORD cch. Msg. Length; // @field length of body in bytes BYTE rgb. Hdr[MAXLENGTH_HDR]; // @field header buffer BYTE rgb. Msg[MAXLENGTH_MSG]; // @field body buffer } msg. In. Deliver; // @field End RIL_MSGTYPE_IN_DELIVER … }; } RILMESSAGE, *LPRILMESSAGE;

SMS Message Structure Cont. typedef struct rilmessage_tag { DWORD cb. Size; // @field structure

SMS Message Structure Cont. typedef struct rilmessage_tag { DWORD cb. Size; // @field structure size in bytes DWORD dw. Params; // @field indicates valid parameters RILADDRESS ra. Svc. Ctr. Address; // @field service center address DWORD dw. Type; // @field type of message DWORD dw. Flags; // @field message flags … union { // @field UNION MEMBER struct { // @field RIL_MSGTYPE_OUT_SUBMIT RILADDRESS ra. Dest. Address; // @field destination address DWORD dw. Protocol. ID; // @field message protocol dw. Protocol. ID; RILMSGDCS rmd. Data. Coding; // @field data coding scheme DWORD dw. VPFormat; // @field format of VP (relative, absolute, etc) dw. VPFormat; SYSTEMTIME st. VP; // @field validity period st. VP; DWORD cb. Hdr. Length; // @field length of header in bytes cb. Hdr. Length; DWORD cch. Msg. Length; // @field length of body in bytes cch. Msg. Length; BYTE rgb. Hdr[MAXLENGTH_HDR]; // @field header buffer BYTE rgb. Msg[MAXLENGTH_MSG]; // @field body buffer } msg. Out. Submit; // @field End RIL_MSGTYPE_OUT_SUBMIT msg. Out. Submit; … }; } RILMESSAGE, *LPRILMESSAGE;

SIM API Applications / UI Logic Module Windows API Stinger Core API Core Provider

SIM API Applications / UI Logic Module Windows API Stinger Core API Core Provider HW Interface Radio Software Text Assisted TAPI TK UI Tool Kit SMS API WTP Router WTLS WDP Etc ATCI Ex. TAPI SIM API WDP Radio Interface Layer (RIL) Radio Stack Connection Manager Voice TAPI Data Etc Winsock TCP/IP Telephony SP PPP VSP

SIM Manager § § § SIM Access – Exposes a SIM API Protection –

SIM Manager § § § SIM Access – Exposes a SIM API Protection – Allows Concurrent Access to the SIM Card Security functions (e. g. SIM locking, call barring) Phonebook SIM record access Startup UI SMS Import Wizard SIM Manager RIL Hardware Voicemail App

Security Functions Function GSM Comments RIL_Get. User. Identity +CIMI Retrieve the customer’s mobile identity

Security Functions Function GSM Comments RIL_Get. User. Identity +CIMI Retrieve the customer’s mobile identity RIL_Unlock. Phone +CPIN Sends a pending password RIL_Change. Call. Barring. Password +CPIN +CPWD Changes the call barring password RIL_Change. Locking. Password +CPIN +CPWD Changes the locking password RIL_Get. Phone. Locked. State +CPIN Gets phone lock state (PIN, PUK, etc. ) RIL_Get. Call. Barring. Status +CLCK Gets call barring status RIL_Set. Call. Barring. Status +CLCK Sets call barring status RIL_Get. Locking. Status +CLCK Gets locking status (enabled or disabled) RIL_Set. Locking. Status +CLCK Sets locking status

Phonebook Functions Function GSM Comments RIL_Get. Phonebook. Options +CPBS Gets the phonebook options RIL_Set.

Phonebook Functions Function GSM Comments RIL_Get. Phonebook. Options +CPBS Gets the phonebook options RIL_Set. Phonebook. Options +CPBS Sets the phonebook location RIL_Delete. Phonebook. Entry +CPBW Deletes a phonebook entry RIL_Read. Phonebook. Entries +CPBR Get phonebook entry RIL_Write. Phonebook. Entry +CPBW Writes a phonebook entry

Phonebook Notifications dw. Code lp. Data Comments RIL_NOTIFY_PHONEBOOKENTRYSTORED dw. Index Phonebook entry has been

Phonebook Notifications dw. Code lp. Data Comments RIL_NOTIFY_PHONEBOOKENTRYSTORED dw. Index Phonebook entry has been added RIL_NOTIFY_PHONEBOOKENTRYDELETED dw. Index Phonebook entry has been deleted RIL_NOTIFY_PHONEBOOKSTORAGECHANGED (RIL_PBLOC *) Constant Phonebook storage location has been changed

Radio State Funtions Function GSM Comments RIL_Get. Radio. Presence Proxy Determined whether or not

Radio State Funtions Function GSM Comments RIL_Get. Radio. Presence Proxy Determined whether or not a radio module is present RIL_Get. Equipment. State +CFUN Manages phone state (power management) RIL_Set. Equipment. State +CFUN Manages phone state (power management) Radio State Notifications dw. Code lp. Data Comments RIL_NOTIFY_RADIOEQUIPTMENTSTATECHANGED <NULL> The radio power state has changed RIL_NOTIFY_RADIOPRESENCECHANGED <NULL> A radio module has been inserted or removed

Miscellaneous Function GSM Comments RIL_Get. Equipment. Info +CGMI +CGMM +CGMR +CGSN Retrieves information about

Miscellaneous Function GSM Comments RIL_Get. Equipment. Info +CGMI +CGMM +CGMR +CGSN Retrieves information about the phone equipment RIL_Get. Equipment. State +CFUN Manages phone state (power management) RIL_Send. Sim. Cmd +CSIM Sends unrestricted commands directly to a SIM RIL_Send. Restricted. Sim. Cmd +CRSM Sends a restricted set of commands to a SIM RIL_Get. Signal. Quality +CSQ Gets signal quality RIL_Get. Dev. Caps Retrieves the capabilities of the radio device RIL_Dev. Specific OEM owned

SIM Toolkit Applications / UI Logic Module Windows API Stinger Core API Core Provider

SIM Toolkit Applications / UI Logic Module Windows API Stinger Core API Core Provider HW Interface Radio Software Text Assisted TAPI TK UI Tool Kit SMS API WTP Router WTLS WDP Etc ATCI Ex. TAPI SIM API WDP Radio Interface Layer (RIL) Radio Stack Connection Manager Voice TAPI Data Etc Winsock TCP/IP Telephony SP PPP VSP

SIM Toolkit § Runs programs stored on the SIM Card v v Display text

SIM Toolkit § Runs programs stored on the SIM Card v v Display text with user input Send SMS Place a call Context sensitive help § Supports Class 2 Toolkit TK UI Tool Kit TAPI SMS API TSP SMS Router RIL

SIM Toolkit Functions Function GSM Comments RIL_Fetch. Sim. Toolkit. Cmd +CSIM Retrieves a proactive

SIM Toolkit Functions Function GSM Comments RIL_Fetch. Sim. Toolkit. Cmd +CSIM Retrieves a proactive toolkit command RIL_Get. Sim. Toolkit. Profile Retrieves a current profile for a profile download RIL_Set. Sim. Toolkit. Profile Sets current profile for a profile download RIL_Send. Sim. Toolkit. Cmd. Response +CSIM Sends a response to a proactive toolkit command RIL_Send. Sim. Toolkit. Envelope. Cmd +CSIM Sends an envelope command to the SIM RIL_Terminate. Sim. Toolkit. Session +CSIM Terminates a toolkit session

SIM Toolkit Notifications dw. Code lp. Data Comments RIL_NOTIFY_SIMTOOLKITCMD dw. Byte. Count Proactive SIM

SIM Toolkit Notifications dw. Code lp. Data Comments RIL_NOTIFY_SIMTOOLKITCMD dw. Byte. Count Proactive SIM command received RIL_NOTIFY_SIMTOOLKITCALLSETUP dw. Redial. Timeout Proactive SIM command to setup a call RIL_NOTIFY_SIMTOOLKITEVENT dw. Byte. Count Toolkit command was handled by the radio or radio sent a toolkit response to the SIM

Scenario – Sample Boot RIL_Init RIL_NOTIFY_RADIOEQUIPMENTSTATECHANGED RIL_Set. Equipment. State RIL_Set. Current. Address. Id RIL_Register.

Scenario – Sample Boot RIL_Init RIL_NOTIFY_RADIOEQUIPMENTSTATECHANGED RIL_Set. Equipment. State RIL_Set. Current. Address. Id RIL_Register. On. Network RIL_NOTIFY_RADIOEQUIPMENTSTATECHANGED RIL_Get. Dev. Caps RIL_Get. Equipment. State RIL_Get. Registration. Status RIL_Get. GPRSRegistration. Status RIL_Get. Current. Privacy. Status RIL_Get. Current. System. Type RIL_Get. Dev. Caps RIL_Set. Equipment. State RIL_NOTIFY_REGSTATUSCHANGED RIL_Get. Signal. Quality RIL_Get. Registration. Status RIL_Get. Subscriber. Numbers RIL_Get. Current. Operator RIL_Get. Sim. Record. Status RIL_Set. Audio. Gain RIL_Get. Sim. Record. Status RIL_Get. Audio. Muting RIL_Get. Sim. Record. Status RIL_READYSTATE_INITIALIZED RIL_RADIOSUPPORT_ON 0 RIL_READYSTATE_SIM RIL_READYSTATE_SMS RIL_READYSTATE_UNLOCKED RIL_CAPSTYPE_LOCKFACILITIES RIL_CAPSTYPE_SIGNALQUALITYIMPLEMENTATION RIL_CAPSTYPE_SIMSUPPORT RIL_EQSTATE_FULL RIL_REGSTAT_ATTEMPTING RIL_REGSTAT_HOME Operator Name String Operator Name Short Form Voice Mail Flag Call Forwarding Flag Voice Mail Number

Dial. Parser § Coupled with both RIL and Dialing applications § Access supplemental services

Dial. Parser § Coupled with both RIL and Dialing applications § Access supplemental services using a dial string v v Call forwarding, call waiting, call hold, etc. e. g. #31# +14259363938 <SEND> Dialer App Dialparser Assisted TAPI RIL Other Modules

Modem Link (ATCI) § § AT Command Interpreter (ATCI) Exposes an AT interface for

Modem Link (ATCI) § § AT Command Interpreter (ATCI) Exposes an AT interface for laptop dial-up Only V. 25 ter support, but architecture is extensible Laptop dialup using serial, Ir. DA, Ir. Dial, USB, Bluetooth ATCI Ex. TAPI Telephony SP Radio Interface Layer (RIL) VSP

Wireless Application Protocol Applications / UI Logic Module Windows API Stinger Core API Core

Wireless Application Protocol Applications / UI Logic Module Windows API Stinger Core API Core Provider HW Interface Radio Software Text Assisted TAPI TK UI Tool Kit SMS API WTP Router WTLS WDP Etc ATCI Ex. TAPI SIM API WDP Radio Interface Layer (RIL) Radio Stack Connection Manager Voice TAPI Data Etc Winsock TCP/IP Telephony SP PPP VSP

WAP § WTP: reliable transactions § WTLS: secure datagrams § WDP: unreliable datagrams over

WAP § WTP: reliable transactions § WTLS: secure datagrams § WDP: unreliable datagrams over many bearers PIE Browser WAP Other Clients HTTP Wireless Transaction Protocol Wireless Transport Layer Security Wireless Datagram Protocol SMS API Winsock Router TCP/IP RIL Hardware

Legal Disclaimer The presentation and this document (collectively, the “Materials”) are for informational purposes

Legal Disclaimer The presentation and this document (collectively, the “Materials”) are for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THE MATERIALS. Complying with all applicable copyright laws is the responsibility of the user. Without limiting the rights under copyright, no part of these Materials may be reproduced, stored in or introduced into a retrieval system, or transmitted in any form or by any means (electronic, mechanical, photocopying, recording, or otherwise), or for any purpose, without the express written permission of Microsoft Corporation. Microsoft may have patents, patent applications, trademarks, copyrights, or other intellectual property rights covering subject matter in these Materials. Except as expressly provided in any written license agreement from Microsoft, the furnishing of these materials does not give you any license to these patents, trademarks, copyrights, or other intellectual property. © 2003 Microsoft Corporation. All rights reserved. Microsoft is a registered trademark of Microsoft Corporation in the United States and/or other countries. The names of actual companies and products mentioned herein may be the trademarks of their respective owners.