blob: 0c2b51d2aa48d8f85d712409691328ae395ff965 [file] [log] [blame]
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.hardware.radio.voice;
import android.hardware.radio.voice.CallForwardInfo;
import android.hardware.radio.voice.Dial;
import android.hardware.radio.voice.EmergencyCallRouting;
import android.hardware.radio.voice.IRadioVoiceIndication;
import android.hardware.radio.voice.IRadioVoiceResponse;
import android.hardware.radio.voice.TtyMode;
/**
* This interface is used by telephony and telecom to talk to cellular radio for voice APIs.
* All the functions have minimum one parameter:
* serial: which corresponds to serial no. of request. Serial numbers must only be memorized for the
* duration of a method call. If clients provide colliding serials (including passing the same
* serial to different methods), multiple responses (one for each method call) must still be served.
* setResponseFunctions must work with IRadioVoiceResponse and IRadioVoiceIndication.
* @hide
*/
@VintfStability
oneway interface IRadioVoice {
/**
* Answer incoming call. Must not be called for WAITING calls.
* switchWaitingOrHoldingAndActive() must be used in this case instead
*
* @param serial Serial number of request.
*
* Response function is IRadioVoiceResponse.acceptCallResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void acceptCall(in int serial);
/**
* Cancel the current USSD session if one exists.
*
* @param serial Serial number of request.
*
* Response function is IRadioVoiceResponse.cancelPendingUssdResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void cancelPendingUssd(in int serial);
/**
* Conference holding and active (like AT+CHLD=3)
*
* @param serial Serial number of request.
*
* Response function is IRadioVoiceResponse.conferenceResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void conference(in int serial);
/**
* Initiate voice call. This method is never used for supplementary service codes.
*
* @param serial Serial number of request.
* @param dialInfo Dial struct
*
* Response function is IRadioVoiceResponse.dialResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void dial(in int serial, in Dial dialInfo);
/**
* Initiate emergency voice call, with zero or more emergency service category(s), zero or
* more emergency Uniform Resource Names (URN), and routing information for handling the call.
* Android uses this request to make its emergency call instead of using IRadio.dial if the
* 'address' in the 'dialInfo' field is identified as an emergency number by Android.
*
* In multi-sim scenario, if the emergency number is from a specific subscription, this radio
* request can still be sent out on the other subscription as long as routing is set to
* EmergencyNumberRouting#EMERGENCY. This radio request will not be sent on an inactive
* (PIN/PUK locked) subscription unless both subscriptions are PIN/PUK locked. In this case,
* the request will be sent on the primary subscription.
*
* Some countries or carriers require some emergency numbers that must be handled with normal
* call routing if possible or emergency routing. 1) if the 'routing' field is specified as
* EmergencyNumberRouting#NORMAL, the implementation must try the full radio service to use
* normal call routing to handle the call; if service cannot support normal routing, the
* implementation must use emergency routing to handle the call. 2) if 'routing' is specified
* as EmergencyNumberRouting#EMERGENCY, the implementation must use emergency routing to handle
* the call. 3) if 'routing' is specified as EmergencyNumberRouting#UNKNOWN, Android does not
* know how to handle the call.
*
* If the dialed emergency number does not have a specified emergency service category, the
* 'categories' field is set to EmergencyServiceCategory#UNSPECIFIED; if the dialed emergency
* number does not have specified emergency Uniform Resource Names, the 'urns' field is set to
* an empty list. If the underlying technology used to request emergency services does not
* support the emergency service category or emergency uniform resource names, the field
* 'categories' or 'urns' may be ignored.
*
* In the scenarios that the 'address' in the 'dialInfo' field has other functions besides the
* emergency number function, if the 'hasKnownUserIntentEmergency' field is true, the user's
* intent for this dial request is emergency call, and the modem must treat this as an actual
* emergency dial; if the 'hasKnownUserIntentEmergency' field is false, Android does not know
* user's intent for this call.
*
* If 'isTesting' is true, this request is for testing purpose, and must not be sent to a real
* emergency service; otherwise it's for a real emergency call request.
*
* Reference: 3gpp 22.101, Section 10 - Emergency Calls;
* 3gpp 23.167, Section 6 - Functional description;
* 3gpp 24.503, Section 5.1.6.8.1 - General;
* RFC 5031
*
* @param serial Serial number of request.
* @param dialInfo the same Dial information used by IRadioVoice.dial.
* @param categories bitfield<EmergencyServiceCategory> the Emergency Service Category(s)
* of the call.
* @param urns the emergency Uniform Resource Names (URN)
* @param routing EmergencyCallRouting the emergency call routing information.
* @param hasKnownUserIntentEmergency Flag indicating if user's intent for the emergency call
* is known.
* @param isTesting Flag indicating if this request is for testing purpose.
*
* Response function is IRadioVoiceResponse.emergencyDialResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void emergencyDial(in int serial, in Dial dialInfo, in int categories, in String[] urns,
in EmergencyCallRouting routing, in boolean hasKnownUserIntentEmergency,
in boolean isTesting);
/**
* Request the radio's system selection module to exit emergency callback mode. Radio must not
* respond with SUCCESS until the modem has completely exited from Emergency Callback Mode.
*
* @param serial Serial number of request.
*
* Response function is IRadioVoiceResponse.exitEmergencyCallbackModeResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void exitEmergencyCallbackMode(in int serial);
/**
* Connects the two calls and disconnects the subscriber from both calls.
*
* @param serial Serial number of request.
*
* Response function is IRadioVoiceResponse.explicitCallTransferResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void explicitCallTransfer(in int serial);
/**
* Request call forward status.
*
* @param serial Serial number of request.
* @param callInfo CallForwardInfo
*
* Response function is IRadioVoiceResponse.getCallForwardStatusResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void getCallForwardStatus(in int serial, in CallForwardInfo callInfo);
/**
* Query current call waiting state
*
* @param serial Serial number of request.
* @param serviceClass Service class is the TS 27.007 service class to query
*
* Response function is IRadioVoiceResponse.getCallWaitingResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void getCallWaiting(in int serial, in int serviceClass);
/**
* Queries the status of the CLIP supplementary service (for MMI code "*#30#")
*
* @param serial Serial number of request.
*
* Response function is IRadioVoiceResponse.getClipResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void getClip(in int serial);
/**
* Gets current CLIR status
*
* @param serial Serial number of request.
*
* Response function is IRadioVoiceResponse.getClirResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void getClir(in int serial);
/**
* Requests current call list
*
* @param serial Serial number of request.
*
* Response function is IRadioVoiceResponse.getCurrentCallsResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void getCurrentCalls(in int serial);
/**
* Requests the failure cause code for the most recently terminated call.
*
* @param serial Serial number of request.
*
* Response function is IRadioVoiceResponse.getLastCallFailCauseResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void getLastCallFailCause(in int serial);
/**
* Queries the current state of the uplink mute setting
*
* @param serial Serial number of request.
*
* Response function is IRadioVoiceResponse.getMuteResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void getMute(in int serial);
/**
* Request the setting of preferred voice privacy mode.
*
* @param serial Serial number of request.
*
* Response function is IRadioVoiceResponse.getPreferredVoicePrivacyResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void getPreferredVoicePrivacy(in int serial);
/**
* Request the setting of TTY mode
*
* @param serial Serial number of request.
*
* Response function is IRadioVoiceResponse.getTtyModeResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void getTtyMode(in int serial);
/**
* When STK application gets stkCallSetup(), the call actually has been initialized by the
* mobile device already. (We could see the call has been in the 'call list'). STK application
* needs to accept/reject the call according to user operations.
*
* @param serial Serial number of request.
* @param accept true = accept the call setup, false = reject the call setup
*
* Response function is IRadioVoiceResponse.handleStkCallSetupRequestFromSimResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void handleStkCallSetupRequestFromSim(in int serial, in boolean accept);
/**
* Hang up a specific line (like AT+CHLD=1x). After this HANGUP request returns, Radio must
* show the connection is NOT active anymore in next getCurrentCalls() query.
*
* @param serial Serial number of request.
* @param gsmIndex Connection index (value of 'x' in CHLD above)
*
* Response function is IRadioVoiceResponse.hangupResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void hangup(in int serial, in int gsmIndex);
/**
* Hang up waiting or held (like AT+CHLD=1). After this HANGUP request returns, Radio must show
* the connection is NOT active anymore in next getCurrentCalls() query.
*
* @param serial Serial number of request.
*
* Response function is IRadioVoiceResponse.hangupForegroundResumeBackgroundResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void hangupForegroundResumeBackground(in int serial);
/**
* Hang up waiting or held (like AT+CHLD=0). After this HANGUP request returns, Radio must show
* the connection is NOT active anymore in next getCurrentCalls() query.
*
* @param serial Serial number of request.
*
* Response function is IRadioVoiceResponse.hangupWaitingOrBackgroundResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void hangupWaitingOrBackground(in int serial);
/**
* Query current Voice NR enable state
*
* @param serial Serial number of request.
*
* Response function is IRadioVoiceResponse.isVoNrEnabledResponse()
*
* This is available when android.hardware.telephony.ims is defined.
*/
void isVoNrEnabled(in int serial);
/**
* Send UDUB (user determined user busy) to ringing or waiting call answer)
*
* @param serial Serial number of request.
*
* Response function is IRadioVoiceResponse.rejectCallResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void rejectCall(in int serial);
/**
* When response type received from a radio indication or radio response is
* RadioIndicationType:UNSOLICITED_ACK_EXP or RadioResponseType:SOLICITED_ACK_EXP respectively,
* acknowledge the receipt of those messages by sending responseAcknowledgement().
*
* This is available when android.hardware.telephony.calling is defined.
*/
void responseAcknowledgement();
/**
* Send DTMF string
*
* @param serial Serial number of request.
* @param dtmf DTMF string
* @param on DTMF ON length in milliseconds, or 0 to use default
* @param off is the DTMF OFF length in milliseconds, or 0 to use default
*
* Response function is IRadioVoiceResponse.sendBurstDtmfResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void sendBurstDtmf(in int serial, in String dtmf, in int on, in int off);
/**
* Send FLASH command
*
* @param serial Serial number of request.
* @param featureCode String associated with Flash command
*
* Response function is IRadioVoiceResponse.sendCdmaFeatureCodeResponse()
*
* This is available when android.hardware.telephony.cdma is defined.
*/
void sendCdmaFeatureCode(in int serial, in String featureCode);
/**
* Send a DTMF tone. If the implementation is currently playing a tone requested via
* startDtmf(), that tone must be cancelled and the new tone must be played instead.
*
* @param serial Serial number of request.
* @param s string with single char having one of 12 values: 0-9, *, #
*
* Response function is IRadioVoiceResponse.sendDtmfResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void sendDtmf(in int serial, in String s);
/**
* Send a USSD message. If a USSD session already exists, the message must be sent in the
* context of that session. Otherwise, a new session must be created. The network reply must be
* reported via unsolOnUssd.
*
* Only one USSD session must exist at a time, and the session is assumed to exist until:
* a) The android system invokes cancelUssd()
* b) The implementation sends a unsolOnUssd() with a type code of
* "0" (USSD-Notify/no further action) or "2" (session terminated)
*
* @param serial Serial number of request.
* @param ussd string containing the USSD request in UTF-8 format
*
* Response function is IRadioVoiceResponse.sendUssdResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void sendUssd(in int serial, in String ussd);
/**
* Separate a party from a multiparty call placing the multiparty call (less the specified
* party) on hold and leaving the specified party as the only other member of the current
* (active) call. Like AT+CHLD=2x.
*
* See TS 22.084 1.3.8.2 (iii)
* TS 22.030 6.5.5 "Entering "2X followed by send"
* TS 27.007 "AT+CHLD=2x"
*
* @param serial Serial number of request.
* @param gsmIndex contains Connection index (value of 'x' in CHLD above)
*
* Response function is IRadioVoiceResponse.separateConnectionResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void separateConnection(in int serial, in int gsmIndex);
/**
* Configure call forward rule
*
* @param serial Serial number of request.
* @param callInfo CallForwardInfo
*
* Response function is IRadioVoiceResponse.setCallForwardResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void setCallForward(in int serial, in CallForwardInfo callInfo);
/**
* Configure current call waiting state
*
* @param serial Serial number of request.
* @param enable is false for "disabled" and true for "enabled"
* @param serviceClass is the TS 27.007 service class bit vector of services to modify
*
* Response function is IRadioVoiceResponse.setCallWaitingResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void setCallWaiting(in int serial, in boolean enable, in int serviceClass);
/**
* Set current CLIR status
*
* @param serial Serial number of request.
* @param status "n" parameter from TS 27.007 7.7
*
* Response function is IRadioVoiceResponse.setClirResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void setClir(in int serial, in int status);
/**
* Turn on or off uplink (microphone) mute. Must only be sent while voice call is active.
* Must always be reset to "disable mute" when a new voice call is initiated
*
* @param serial Serial number of request.
* @param enable true for "enable mute" and false for "disable mute"
*
* Response function is IRadioVoiceResponse.setMuteResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void setMute(in int serial, in boolean enable);
/**
* Request to set the preferred voice privacy mode used in voice scrambling.
*
* @param serial Serial number of request.
* @param enable false for Standard Privacy Mode (Public Long Code Mask)
* true for Enhanced Privacy Mode (Private Long Code Mask)
*
* Response function is IRadioVoiceResponse.setPreferredVoicePrivacyResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void setPreferredVoicePrivacy(in int serial, in boolean enable);
/**
* Set response functions for voice radio requests and indications.
*
* @param radioVoiceResponse Object containing response functions
* @param radioVoiceIndication Object containing radio indications
*
* This is available when android.hardware.telephony.calling is defined.
*/
void setResponseFunctions(in IRadioVoiceResponse radioVoiceResponse,
in IRadioVoiceIndication radioVoiceIndication);
/**
* Request to set the TTY mode
*
* @param serial Serial number of request.
* @param mode TtyMode
*
* Response function is IRadioVoiceResponse.setTtyModeResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void setTtyMode(in int serial, in TtyMode mode);
/**
* Set Voice NR enable state
*
* @param serial Serial number of request.
* @param enable true for "enable vonr" and false for "disable vonr"
*
* Response function is IRadioVoiceResponse.setVoNrEnabledResponse()
*
* This is available when android.hardware.telephony.ims is defined.
*/
void setVoNrEnabled(in int serial, in boolean enable);
/**
* Start playing a DTMF tone. Continue playing DTMF tone until stopDtmf is received. If a
* startDtmf() is received while a tone is currently playing, it must cancel the previous tone
* and play the new one.
*
* @param serial Serial number of request.
* @param s string having a single character with one of 12 values: 0-9,*,#
*
* Response function is IRadioVoiceResponse.startDtmfResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void startDtmf(in int serial, in String s);
/**
* Stop playing a currently playing DTMF tone.
*
* @param serial Serial number of request.
*
* Response function is IRadioVoiceResponse.stopDtmfResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void stopDtmf(in int serial);
/**
* Switch waiting or holding call and active call (like AT+CHLD=2).
* Call transitions must happen as shown below.
* BEFORE AFTER
* Call 1 Call 2 Call 1 Call 2
* ACTIVE HOLDING HOLDING ACTIVE
* ACTIVE WAITING HOLDING ACTIVE
* HOLDING WAITING HOLDING ACTIVE
* ACTIVE IDLE HOLDING IDLE
* IDLE IDLE IDLE IDLE
*
* @param serial Serial number of request.
*
* Response function is IRadioVoiceResponse.switchWaitingOrHoldingAndActiveResponse()
*
* This is available when android.hardware.telephony.calling is defined.
*/
void switchWaitingOrHoldingAndActive(in int serial);
}