blob: 7923b142f6acfbb6e96b05344ce3287fc9b9b06a [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.sim;
import android.hardware.radio.sim.CardPowerState;
import android.hardware.radio.sim.CarrierRestrictions;
import android.hardware.radio.sim.CdmaSubscriptionSource;
import android.hardware.radio.sim.IRadioSimIndication;
import android.hardware.radio.sim.IRadioSimResponse;
import android.hardware.radio.sim.IccIo;
import android.hardware.radio.sim.ImsiEncryptionInfo;
import android.hardware.radio.sim.PersoSubstate;
import android.hardware.radio.sim.PhonebookRecordInfo;
import android.hardware.radio.sim.SelectUiccSub;
import android.hardware.radio.sim.SimApdu;
import android.hardware.radio.sim.SimLockMultiSimPolicy;
/**
* This interface is used by telephony and telecom to talk to cellular radio for SIM 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 IRadioSimResponse and IRadioSimIndication.
*/
@VintfStability
oneway interface IRadioSim {
/**
* Whether uiccApplications are enabled or disabled.
* By default uiccApplications must be enabled, unless enableUiccApplications() with enable
* being false is called.
*
* @param serial Serial number of request.
*
* Response function is IRadioSimResponse.areUiccApplicationsEnabledResponse()
*/
void areUiccApplicationsEnabled(in int serial);
/**
* Supplies old ICC PIN2 and new PIN2.
*
* @param serial Serial number of request.
* @param oldPin2 Old pin2 value
* @param newPin2 New pin2 value
* @param aid AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value.
*
* Response function is IRadioSimResponse.changeIccPin2ForAppResponse()
*/
void changeIccPin2ForApp(in int serial, in String oldPin2, in String newPin2, in String aid);
/**
* Supplies old ICC PIN and new PIN.
*
* @param serial Serial number of request.
* @param oldPin Old pin value
* @param newPin New pin value
* @param aid AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value.
*
* Response function is IRadioSimResponse.changeIccPinForAppResponse()
*/
void changeIccPinForApp(in int serial, in String oldPin, in String newPin, in String aid);
/**
* Enable or disable UiccApplications on the SIM. If disabled:
* - Modem will not register on any network.
* - SIM must be PRESENT, and the IccId of the SIM must still be accessible.
* - The corresponding modem stack is still functional, e.g. able to make emergency calls or
* do network scan.
* By default if this API is not called, the uiccApplications must be enabled automatically.
* It must work for both single SIM and DSDS cases for UX consistency.
* The preference is per SIM, and must be remembered over power cycle, modem reboot, or SIM
* insertion / unplug.
*
* @param serial Serial number of request.
* @param enable true if to enable uiccApplications, false to disable.
*
* Response function is IRadioSimResponse.enableUiccApplicationsResponse()
*/
void enableUiccApplications(in int serial, in boolean enable);
/**
* Get carrier restrictions.
*
* @param serial Serial number of request.
*
* Response function is IRadioSimResponse.getAllowedCarriersResponse()
*/
void getAllowedCarriers(in int serial);
/**
* Request the device MDN / H_SID / H_NID. The request is only allowed when CDMA subscription
* is available. When CDMA subscription is changed, application layer must re-issue the request
* to update the subscription information.
*
* @param serial Serial number of request.
*
* Response function is IRadioSimResponse.getCdmaSubscriptionResponse()
*/
void getCdmaSubscription(in int serial);
/**
* Request to query the location where the CDMA subscription shall be retrieved.
*
* @param serial Serial number of request.
*
* Response function is IRadioSimResponse.getCdmaSubscriptionSourceResponse()
*/
void getCdmaSubscriptionSource(in int serial);
/**
* Query the status of a facility lock state
*
* @param serial Serial number of request.
* @param facility is the facility string code from TS 27.007 7.4
* (eg "AO" for BAOC, "SC" for SIM lock)
* @param password is the password, or "" if not required
* @param serviceClass is the TS 27.007 service class bit vector of services to query
* @param appId is AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value.
* This is only applicable in the case of Fixed Dialing Numbers (FDN) requests.
*
* Response function is IRadioSimResponse.getFacilityLockForAppResponse()
*/
void getFacilityLockForApp(in int serial, in String facility, in String password,
in int serviceClass, in String appId);
/**
* Requests status of the ICC card
*
* @param serial Serial number of request.
*
* Response function is IRadioSimResponse.getIccCardStatusResponse()
*/
void getIccCardStatus(in int serial);
/**
* Get the SIM IMSI. Only valid when radio state is "RADIO_STATE_ON"
*
* @param serial Serial number of request.
* @param aid AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value.
*
* Response function is IRadioSimResponse.getImsiForAppResponse()
*/
void getImsiForApp(in int serial, in String aid);
/**
* Get the phonebook capacity.
*
* @param serial Serial number of request.
*
* Response function is IRadioSimResponse.getSimPhonebookCapacityResponse()
*/
void getSimPhonebookCapacity(in int serial);
/**
* Get the local and global phonebook records from the SIM card.
* This should be called again after a simPhonebookChanged notification is received.
* The phonebook records are received via IRadioSimIndication.simPhonebookRecordsReceived()
*
* @param serial Serial number of request.
*
* Response function is IRadioSimResponse.getSimPhonebookRecordsResponse()
*/
void getSimPhonebookRecords(in int serial);
/**
* Close a previously opened logical channel. This command reflects TS 27.007
* "close logical channel" operation (+CCHC).
*
* @param serial Serial number of request.
* @param channelId session id of the logical channel (+CCHC).
*
* Response function is IRadioSimResponse.iccCloseLogicalChannelResponse()
*/
void iccCloseLogicalChannel(in int serial, in int channelId);
/**
* Request ICC I/O operation. This is similar to the TS 27.007 "restricted SIM" operation where
* it assumes all of the EF selection must be done by the callee. Arguments and responses that
* are unused for certain values of "command" must be ignored or set to empty string.
* Note that IccIo has a "PIN2" field which may be empty string, or may specify a PIN2 for
* operations that require a PIN2 (eg updating FDN records).
*
* @param serial Serial number of request.
* @param iccIo IccIo
*
* Response function is IRadioSimResponse.iccIoForAppResponse()
*/
void iccIoForApp(in int serial, in IccIo iccIo);
/**
* Open a new logical channel and select the given application. This command
* reflects TS 27.007 "open logical channel" operation (+CCHO).
*
* For MEP-A(Multiple enabled profile), only dedicated port 0 is ISDR selectable.
* e.g., Port0 - for ISDR access and Port1/Port2 - the currently active ports/subscriptions.
* Port 0 should be transparent to AP and iccLogicalChannel API should remain the same.
* Even if the ISDR request comes over port1 or port2, Modem would just internally convert the
* portID to port0 and add the real port index as the payload of MANAGE_CHANNEL command.
*
* @param serial Serial number of request.
* @param aid AID value, See ETSI 102.221 and 101.220.
* @param p2 P2 value, described in ISO 7816-4. Ignore if equal to RadioConst:P2_CONSTANT_NO_P2
*
* Response function is IRadioSimResponse.iccOpenLogicalChannelResponse()
*/
void iccOpenLogicalChannel(in int serial, in String aid, in int p2);
/**
* Request APDU exchange on the basic channel. This command reflects TS 27.007
* "generic SIM access" operation (+CSIM). The modem must ensure proper function of GSM/CDMA,
* and filter commands appropriately. It must filter channel management and SELECT by DF
* name commands. "sessionid" field must be ignored.
*
* @param serial Serial number of request.
* @param message SimApdu to be sent
*
* Response function is IRadioSimResponse.iccTransmitApduBasicChannelResponse()
*/
void iccTransmitApduBasicChannel(in int serial, in SimApdu message);
/**
* Exchange APDUs with a UICC over a previously opened logical channel. This command reflects
* TS 27.007 "generic logical channel access" operation (+CGLA). The modem must filter channel
* management and SELECT by DF name commands.
*
* @param serial Serial number of request.
* @param message SimApdu to be sent
*
* Response function is IRadioSimResponse.iccTransmitApduLogicalChannelResponse()
*/
void iccTransmitApduLogicalChannel(in int serial, in SimApdu message);
/**
* Indicates that the StkService is running and is ready to receive unsolicited stk commands.
*
* @param serial Serial number of request.
*
* Response function is IRadioSimResponse.reportStkServiceIsRunningResponse()
*/
void reportStkServiceIsRunning(in int serial);
/**
* Returns the response of SIM Authentication through Radio challenge request.
*
* @param serial Serial number of request.
* @param authContext P2 value of authentication command, see P2 parameter in
* 3GPP TS 31.102 7.1.2
* @param authData the challenge string in Base64 format, see 3GPP TS 31.102 7.1.2
* @param aid AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value
*
* Response function is IRadioSimResponse.requestIccSimAuthenticationResponse()
*/
void requestIccSimAuthentication(
in int serial, in int authContext, in String authData, in String aid);
/**
* 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().
*/
void responseAcknowledgement();
/**
* Requests to send a SAT/USAT envelope command to SIM.
* The SAT/USAT envelope command refers to 3GPP TS 11.14 and 3GPP TS 31.111
*
* @param serial Serial number of request.
* @param contents SAT/USAT command in hexadecimal format string starting with command tag
*
* Response function is IRadioSimResponse.sendEnvelopeResponse()
*/
void sendEnvelope(in int serial, in String contents);
/**
* Requests to send a SAT/USAT envelope command to SIM. The SAT/USAT envelope command refers to
* 3GPP TS 11.14 and 3GPP TS 31.111. This request has one difference from sendEnvelope():
* The SW1 and SW2 status bytes from the UICC response are returned along with the response
* data, using the same structure as iccIOForApp(). The implementation must perform normal
* processing of a '91XX' response in SW1/SW2 to retrieve the pending proactive command and
* send it as an unsolicited response, as sendEnvelope() does.
*
* @param serial Serial number of request.
* @param contents SAT/USAT command in hexadecimal format starting with command tag
*
* Response function is IRadioSimResponse.sendEnvelopeWithStatusResponse()
*/
void sendEnvelopeWithStatus(in int serial, in String contents);
/**
* Requests to send a terminal response to SIM for a received proactive command
*
* @param serial Serial number of request.
* @param contents SAT/USAT response in hexadecimal format string starting with
* first byte of response data
*
* Response function is IRadioSimResponse.sendTerminalResponseResponseToSim()
*/
void sendTerminalResponseToSim(in int serial, in String contents);
/**
* Set carrier restrictions. Expected modem behavior:
* If never receives this command:
* - Must allow all carriers
* Receives this command:
* - Only allow carriers specified in carriers. The restriction persists across power cycles
* and FDR. If a present SIM is allowed, modem must not reload the SIM. If a present SIM is
* *not* allowed, modem must detach from the registered network and only keep emergency
* service, and notify Android SIM refresh reset with new SIM state being
* CardState:RESTRICTED. Emergency service must be enabled.
*
* @param serial Serial number of request.
* @param carriers CarrierRestrictions consisting allowed and excluded carriers
* @param multiSimPolicy Policy to be used for devices with multiple SIMs.
*
* Response function is IRadioSimResponse.setAllowedCarriersResponse()
*/
void setAllowedCarriers(in int serial, in CarrierRestrictions carriers,
in SimLockMultiSimPolicy multiSimPolicy);
/**
* Provide Carrier specific information to the modem that must be used to encrypt the IMSI and
* IMPI. Sent by the framework during boot, carrier switch and everytime the framework receives
* a new certificate.
*
* @param serial Serial number of request.
* @param imsiEncryptionInfo ImsiEncryptionInfo
*
* Response function is IRadioSimResponse.setCarrierInfoForImsiEncryptionResponse()
*/
void setCarrierInfoForImsiEncryption(in int serial, in ImsiEncryptionInfo imsiEncryptionInfo);
/**
* Request to set the location where the CDMA subscription shall be retrieved
*
* @param serial Serial number of request.
* @param cdmaSub CdmaSubscriptionSource
*
* Response function is IRadioSimResponse.setCdmaSubscriptionSourceResponse()
*/
void setCdmaSubscriptionSource(in int serial, in CdmaSubscriptionSource cdmaSub);
/**
* Enable/disable one facility lock
*
* @param serial Serial number of request.
* @param facility is the facility string code from TS 27.007 7.4 (eg "AO" for BAOC)
* @param lockState false for "unlock" and true for "lock"
* @param password is the password
* @param serviceClass is string representation of decimal TS 27.007 service class bit vector.
* Eg, the string "1" means "set this facility for voice services"
* @param appId is AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value.
* This is only applicable in the case of Fixed Dialing Numbers (FDN) requests.
*
* Response function is IRadioSimResponse.setFacilityLockForAppResponse()
*/
void setFacilityLockForApp(in int serial, in String facility, in boolean lockState,
in String password, in int serviceClass, in String appId);
/**
* Set response functions for SIM radio requests and indications.
*
* @param radioSimResponse Object containing response functions
* @param radioSimIndication Object containing radio indications
*/
void setResponseFunctions(
in IRadioSimResponse radioSimResponse, in IRadioSimIndication radioSimIndication);
/**
* Set SIM card power state. Request is used to power off or power on the card. It should not
* generate a CardState.CARDSTATE_ABSENT indication, since the SIM is still physically inserted.
* When SIM card is in POWER_UP_PASS_THROUGH, the modem does not send any command to it (for
* example SELECT of MF, or TERMINAL CAPABILITY), and the SIM card is controlled completely by
* Telephony sending APDUs directly. The SIM card state must be RIL_CARDSTATE_PRESENT and the
* number of card apps will be 0. No new error code is generated. Emergency calls are supported
* in the same way as if the SIM card is absent. Pass-through mode is valid only for the
* specific card session where it is activated, and normal behavior occurs at the next SIM
* initialization, unless POWER_UP_PASS_THROUGH is requested again.
* The device is required to power down the SIM card before it can switch the mode between
* POWER_UP and POWER_UP_PASS_THROUGH. At device power up, the SIM interface is powered up
* automatically. Each subsequent request to this method is processed only after the completion
* of the previous one.
* When the SIM is in POWER_DOWN, the modem should send an empty vector of AppStatus in
* CardStatus.applications. If a SIM in the POWER_DOWN state is removed and a new SIM is
* inserted, the new SIM should be in POWER_UP mode by default. If the device is turned off or
* restarted while the SIM is in POWER_DOWN, then the SIM should turn on normally in POWER_UP
* mode when the device turns back on.
*
* @param serial Serial number of request
* @param powerUp POWER_DOWN if powering down the SIM card
* POWER_UP if powering up the SIM card
* POWER_UP_PASS_THROUGH if powering up the SIM card in pass through mode
*
* Response function is IRadioSimResponse.setSimCardPowerResponse()
*/
void setSimCardPower(in int serial, in CardPowerState powerUp);
/**
* Selection/de-selection of a subscription from a SIM card
*
* @param serial Serial number of request.
* @param uiccSub SelectUiccSub
*
* Response function is IRadioSimResponse.setUiccSubscriptionResponse()
*/
void setUiccSubscription(in int serial, in SelectUiccSub uiccSub);
/**
* Supplies ICC PIN2. Only called following operation where SIM_PIN2 was returned as a failure
* from a previous operation.
*
* @param serial Serial number of request.
* @param pin2 PIN2 value
* @param aid AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value.
*
* Response function is IRadioSimResponse.supplyIccPin2ForAppResponse()
*/
void supplyIccPin2ForApp(in int serial, in String pin2, in String aid);
/**
* Supplies ICC PIN. Only called if CardStatus has AppState.PIN state
*
* @param serial Serial number of request.
* @param pin PIN value
* @param aid AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value.
*
* Response function is IRadioSimResponse.supplyIccPinForAppResponse()
*/
void supplyIccPinForApp(in int serial, in String pin, in String aid);
/**
* Supplies ICC PUK2 and new PIN2.
*
* @param serial Serial number of request.
* @param puk2 PUK2 value
* @param pin2 New PIN2 value
* @param aid AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value.
*
* Response function is IRadioSimResponse.supplyIccPuk2ForAppResponse()
*/
void supplyIccPuk2ForApp(in int serial, in String puk2, in String pin2, in String aid);
/**
* Supplies ICC PUK and new PIN.
*
* @param serial Serial number of request.
* @param puk PUK value
* @param pin New PIN value
* @param aid AID value, See ETSI 102.221 8.1 and 101.220 4, empty string if no value.
*
* Response function is IRadioSimResponse.supplyIccPukForAppResponse()
*/
void supplyIccPukForApp(in int serial, in String puk, in String pin, in String aid);
/**
* Request that deactivates one category of device personalization. Device personalization
* generally binds the device so it can only be used on one carrier or even one carrier subnet
* (See TS 22.022). When the user has gained the rights to unbind the device (at the end of a
* contract period or other event), the controlKey will be delivered to either the user for
* manual entry or to a carrier app on the device for automatic entry.
*
* @param serial Serial number of request.
* @param persoType SIM personalization type.
* @param controlKey the unlock code for removing persoType personalization from this device
*
* Response function is IRadioSimResponse.supplySimDepersonalizationResponse()
*/
void supplySimDepersonalization(
in int serial, in PersoSubstate persoType, in String controlKey);
/**
* Insert, delete or update a phonebook record on the SIM card. If the index of recordInfo is 0,
* the phonebook record will be added to global or local phonebook, and global phonebook has
* higher priority than local phonebook. If the fields in the recordInfo are all empty except
* for the index, the phonebook record specified by the index will be deleted. The indication
* simPhonebookChanged will be called after every successful call of updateSimPhonebookRecords.
*
* @param serial Serial number of request.
* @param recordInfo Details of the record to insert, delete or update.
*
* Response function is IRadioSimResponse.updateSimPhonebookRecordsResponse()
*/
void updateSimPhonebookRecords(in int serial, in PhonebookRecordInfo recordInfo);
}