Windows Mobile 6.5 RIL Cellular Call and Data APIs
The Radio Interface Layer (RIL) in Windows Mobile 6.5 functioned as the architectural bridge between the operating system's telephony subsystem (CellCore) and the modem baseband hardware. By abstracting modem-specific AT commands and proprietary protocols into a standardized, event-driven C-language Application Programming Interface (API), the RIL enabled the OS to initiate voice calls, manage network connections, and transfer packet data reliably across diverse cellular chipsets.
Architectural Overview of the RIL
Windows Mobile 6.5 split cellular communications into two distinct layers:
- The RIL Driver (
RIL.dll): A system-provided dynamic link library running in user/kernel space that exposed client-facing APIs to upper-level services like the Telephony API (TAPI), the Connection Manager, and the Short Message Service (SMS) router. - The RIL Hardware Layer (OEM/Vendor RIL): A hardware-specific driver provided by the device manufacturer (OEM) or modem vendor (e.g., Qualcomm, TI). This component translated standardized RIL commands into the baseband processor's AT commands or proprietary Inter-Process Communication (IPC) primitives.
Communication followed an asynchronous request-response model using
notification callbacks. When a higher-level component requested an
action, the RIL API returned immediately with a tracking token
(HRIL), and the completion status was subsequently
delivered through an application-defined callback function.
Exposing Cellular Voice Call Functions
The RIL provided an explicit set of APIs to control circuit-switched voice calls:
- Call Initiation and Termination: Applications did
not interact directly with the serial port; instead, CellCore called
functions like
RIL_Dialto place outgoing voice or data calls, specifying parameters such as phone numbers and call types. Incoming calls were answered viaRIL_Answerand disconnected viaRIL_Hangup. - Call Management and Multiparty Calling: Advanced
features such as call holding, toggling, call transfers, and multiparty
(conference) calling were managed through
RIL_ManageCalls. This function mapped actions to standard GSM/CDMA supplementary service commands (likeAT+CHLD). - Unsolicited Notifications for Call State: The RIL
continuously monitored the modem for status changes. When an incoming
call arrived or call progress changed (e.g., ringing, connected, busy),
the RIL driver fired the
RIL_NOTIFY_CALLSTATEnotification. The OS processed the incomingRILCALLINFOstructure, which detailed call ID, direction, status, and caller ID (CLI).
Exposing Cellular Data Functions
Packet-switched connections (GPRS, EDGE, UMTS, HSDPA, and CDMA/EV-DO) were exposed through specific RIL contexts integrated with the Windows Mobile Connection Manager:
- Context Definition: Cellular data required defining
a Packet Data Protocol (PDP) context. The RIL exposed APIs such as
RIL_SetContextSysContextandRIL_AddContextto define Access Point Names (APNs), data compression, authentication types (PAP/CHAP), and PDP types (typically IP). - Context Activation: To establish a data session,
Connection Manager invoked
RIL_SetPacketContextStateto activate or deactivate the defined context. Once activated, the RIL driver coordinated with the network stack (often via a virtual serial port running PPP or an NDIS-based virtual network adapter) to route TCP/IP traffic between the Windows Mobile network stack and the baseband. - Network Registration and Data Metrics: The RIL
exposed
RIL_GetPacketNetworkRegistrationStatusand triggeredRIL_NOTIFY_PACKETNETWORKREGISTRATIONSTATUSnotifications to keep the OS aware of packet service availability (GPRS/HSDPA attachment). Additional functions, such asRIL_GetSignalQuality, continuously relayed Received Signal Strength Indication (RSSI) metrics to determine whether data connectivity was viable.