Modem Call Control
The Modem Call Control (mcc) API functions of this API are provided by the modemService service.
IPC interfaces binding
Here's a code sample binding to modem services:
bindings: { clientExe.clientComponent.le_mcc -> modemService.le_mcc }
Starting a Call
To initiate a call, create a new call object with a destination telephone number calling the le_mcc_Create() function.
le_mcc_Start() must still initiate the call when ready.
The le_mcc_Start() function initiates a call attempt (it's asynchronous because it can take time for a call to connect). If function failed, the le_mcc_GetTerminationReason() API can be used to retrieve the terminal reason.
It's essential to register a handler function to get the call events. Use le_mcc_AddCallEventHandler() API to install that handler function. The handler will be called for all calls' events (incoming and outgoing).
The le_mcc_RemoveCallEventHandler() API uninstalls the handler function.
The following APIs can be used to manage incoming or outgoing calls:
- le_mcc_GetTerminationReason() - termination reason.
- le_mcc_GetPlatformSpecificTerminationCode() - let you get the platform specific termination code by retrieving the termination code from
le_mcc_CallRef_t
. Please refer to Platform specific error codes for platform specific termination code description. - le_mcc_IsConnected() - connection status.
- le_mcc_GetRemoteTel() - displays remote party telephone number associated with the call.
- le_mcc_HangUp() will disconnect this call.
When finished with the call object, call le_mcc_Delete() to free all the allocated resources associated with the object.
Multi-threading/multi-application behaviour: the callRef is linked to a specific client (i.e. connection with the mcc service). Each client will have its own callRef for a same call. That is, if a call event handler is registered by one thread but le_mcc_Create() is called by another thread, they will each get different call references for the same call. So, when multiple threads are being used to work with the same call, a comparison of the call references themselves can't be used to tell whether or not they refer to the same call.
Answering a call
Receiving calls is similar sending calls. Add a handler through le_mcc_AddCallEventHandler() to be notified of incoming calls.
To answer, call le_mcc_Answer(). To reject it, call le_mcc_HangUp().
Ending all calls
A special function can be used to hang-up all the ongoing calls: le_mcc_HangUpAll(). This function can be used to hang-up any calls that have been initiated through another client like AT commands.
Supplementary service
Calling Line Identification Restriction (CLIR) can be activated or deactivated by le_mcc_SetCallerIdRestrict() API. The status is independent for each call object reference. Status can be read with the le_mcc_GetCallerIdRestrict() API. If the status is not set, le_mcc_GetCallerIdRestrict() API returns LE_UNAVAILABLE. By default the CLIR status is not set.
Call waiting supplementary service can be activated or deactivated by le_mcc_SetCallWaitingService(). Its status can be given by le_mcc_GetCallWaitingService(). A call waiting can be answered using le_mcc_ActivateCall() API. This API is also used to activate an on hold call (current call is then placed on hold). An activated, waiting or on hold call can be released using le_mcc_HangUp() function. See 3GPP TS 02.83 / 22.083 for any details concerning call waiting / call hold supplementary services.
Sample codes
A sample code that implements a dialing call can be found in le_mccTest.c file (please refer to Sample code of Modem Call control page).
Copyright (C) Sierra Wireless Inc.