# Remote SIM

**Detailed Description**

This section contains APIs related to Remote SIM operations.

- *group* Telematics\_remote\_sim

    - Enums

- enum CardErrorCause

    - Defines the card error cause, sent to the modem by the SIM provider

*Values:*

- enumerator INVALID

    - Card error cause value will not be passed to modem

- enumerator UNKNOWN\_ERROR

    - Unknown error

- enumerator NO\_LINK\_ESTABLISHED

    - No link was established

- enumerator COMMAND\_TIMEOUT

    - Command timeout

- enumerator POWER\_DOWN

    - Error due to a card power down

- class IRemoteSimListener : public [telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[IServiceStatusListener](https://docs.qualcomm.com/doc/80-PF458-2/topic/class_a00049.html#_CPPv4N5telux6common22IServiceStatusListenerE)

    - A listener class for getting remote SIM notifications.

The methods in listener can be invoked from multiple different threads. The implementation should be thread safe.

Public Functions

- inline virtual void onApduTransfer(const unsigned int id, const std::vector&lt;uint8\_t&gt; &apdu)

    - This function is called when the modem wants to transmit a command APDU.

- Parameters:

    - - **id** – **[in]** Identifier for a command and response APDU pair
- **apdu** – **[in]** APDU request sent to the control point (max size = 261, per ETSI TS 102 221, section 10.1.4)

- inline virtual void onCardConnect()

    - This function is called when the modem wants to establish a connection.

- inline virtual void onCardDisconnect()

    - This function is called when the modem wants to tear down a connection.

- inline virtual void onCardPowerUp()

    - This function is called when the modem wants to power up the card.

- inline virtual void onCardPowerDown()

    - This function is called when the modem wants to power down the card.

- inline virtual void onCardReset()

    - This function is called when the modem wants to warm reset the card.

- inline virtual ~IRemoteSimListener()

    - Destructor of [IRemoteSimListener](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#a00741)

- class IRemoteSimManager

    - [IRemoteSimManager](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#a00742) provides APIs for remote SIM related operations. This allows a device to use a SIM card on another device for its WWAN modem functionality. The SIM provider service is the endpoint that interfaces with the SIM card (e.g. over bluetooth) and sends/receives data to the other endpoint, the modem. The modem sends requests to the SIM provider service to interact with the SIM card (e.g. power up, transmit APDU, etc.), and is notified of events (e.g. card errors, resets, etc.). This API is used by the SIM provider endpoint to provide a SIM card to the modem.

Public Functions

- virtual bool isSubsystemReady() = 0

    - Checks the status of remote SIM subsystem and returns the result.

Deprecated Use [IRemoteSimManager::getServiceStatus()](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#a00742_1ad2c26641e7b86c1731a639ebcea82cf0) API.

- Returns:

    - True if remote SIM subsystem is ready for service otherwise false.

- virtual std::future&lt;bool&gt; onSubsystemReady() = 0

    - Wait for remote SIM subsystem to be ready.

Deprecated Use InitResponseCb in [PhoneFactory::getRemoteSimManager](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#a00736_1a7ca39bd2f229c8a8ee2344a8b1d40421) instead, to get notified about subsystem readiness.

- Returns:

    - A future that caller can wait on to be notified when remote SIM subsystem is ready.

- virtual [telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[ServiceStatus](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6common13ServiceStatusE) getServiceStatus() = 0

    - This status indicates whether the [IRemoteSimManager](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#a00742) object is in a usable state.

- Returns:

    - SERVICE\_AVAILABLE - If Remote Sim Manager is ready for service. SERVICE\_UNAVAILABLE - If Remote Sim Manager is temporarily unavailable. SERVICE\_FAILED - If Remote Sim Manager encountered an irrecoverable failure.

- virtual [telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[Status](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6common6StatusE) sendReset([telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-2/topic/typedef_a00236_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) callback = nullptr) = 0

    - Send reset command to the modem to reset state variables.

- Parameters:

    - **callback** – **[out]** Callback function pointer to get the response of sendReset.

- Returns:

    - Status of sendReset i.e. success or suitable status code.

- virtual [telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[Status](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6common6StatusE) sendConnectionAvailable([telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-2/topic/typedef_a00236_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) callback = nullptr) = 0

    - Send connection available event to the modem.

- Parameters:

    - **callback** – **[out]** Callback function pointer to get the response.

- Returns:

    - Status of sendConnectionAvailable i.e. success or suitable status code.

- virtual [telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[Status](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6common6StatusE) sendConnectionUnavailable([telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-2/topic/typedef_a00236_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) callback = nullptr) = 0

    - Send connection unavailable event to the modem.

- Parameters:

    - **callback** – **[out]** Callback function pointer to get the response.

- Returns:

    - Status of sendConnectionUnavailable i.e. success or suitable status code.

- virtual [telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[Status](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6common6StatusE) sendCardReset(const std::vector&lt;uint8\_t&gt; &atr, [telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-2/topic/typedef_a00236_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) callback = nullptr) = 0

    - Send card reset event to the modem.

- Parameters:

    - - **atr** – **[in]** Answer to Reset bytes (max size = 32, per ISO/IEC 7816-3:2006 section 8.1).
- **callback** – **[out]** Callback function pointer to get the response of sendCardReset.

- Returns:

    - Status of sendCardReset i.e. success or suitable status code.

- virtual [telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[Status](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6common6StatusE) sendCardError(const [CardErrorCause](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux3tel14CardErrorCauseE) cause = [CardErrorCause](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux3tel14CardErrorCauseE)::[INVALID](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux3tel14CardErrorCause7INVALIDE), [telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-2/topic/typedef_a00236_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) callback = nullptr) = 0

    - Send card error event to the modem.

- Parameters:

    - - **cause** – **[in]** Card Error cause.
- **callback** – **[out]** Callback function pointer to get the response of sendCardError.

- Returns:

    - Status of sendCardError i.e. success or suitable status code.

- virtual [telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[Status](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6common6StatusE) sendCardInserted(const std::vector&lt;uint8\_t&gt; &atr, [telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-2/topic/typedef_a00236_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) callback = nullptr) = 0

    - Send card inserted event to the modem.

- Parameters:

    - - **atr** – **[in]** Answer to Reset bytes (max size = 32, per ISO/IEC 7816-3:2006 section 8.1).
- **callback** – **[out]** Callback function pointer to get the response of sendCardInserted.

- Returns:

    - Status of sendCardInserted i.e. success or suitable status code.

- virtual [telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[Status](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6common6StatusE) sendCardRemoved([telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-2/topic/typedef_a00236_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) callback = nullptr) = 0

    - Send card removed event to the modem.

- Parameters:

    - **callback** – **[out]** Callback function pointer to get the response of sendCardRemoved.

- Returns:

    - Status of sendCardRemoved i.e. success or suitable status code.

- virtual [telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[Status](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6common6StatusE) sendCardWakeup([telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-2/topic/typedef_a00236_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) callback = nullptr) = 0

    - Send card wakeup event to the modem.

- Parameters:

    - **callback** – **[out]** Callback function pointer to get the response of sendCardWakeup.

- Returns:

    - Status of sendCardWakeup i.e. success or suitable status code.

- virtual [telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[Status](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6common6StatusE) sendApdu(const unsigned int id, const std::vector&lt;uint8\_t&gt; &apdu, const bool isSuccess = true, const unsigned int totalSize = 0, const unsigned int offset = 0, [telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[ResponseCallback](https://docs.qualcomm.com/doc/80-PF458-2/topic/typedef_a00236_1a8f614f0a0eeca90c94dad1967ca93bcd.html#_CPPv4N5telux6common16ResponseCallbackE) callback = nullptr) = 0

    - Sends an APDU message to the modem, in response to a previous APDU sent by the modem.

- Parameters:

    - - **id** – **[in]** Identifier for command and response APDU pair.
- **apdu** – **[in]** Response APDU (max size = 1024).
- **isSuccess** – **[in]** Whether APDU transaction completed successfully.
- **totalSize** – **[in]** Total length of the APDU message (used when the response is larger than 1024 bytes and must be passed in multiple segments).
- **offset** – **[in]** Offset of this APDU segment in the original message.
- **callback** – **[out]** Callback function pointer to get the response of sendApdu.

- Returns:

    - Status of sendApdu i.e. success or suitable status code.

- virtual [telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[Status](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6common6StatusE) registerListener(std::weak\_ptr&lt;[IRemoteSimListener](https://docs.qualcomm.com/doc/80-PF458-2/topic/class_a00741.html#_CPPv4N5telux3tel18IRemoteSimListenerE)&gt; listener) = 0

    - Register a listener for specific updates from the modem.

- Parameters:

    - **listener** – **[in]** Pointer of [IRemoteSimListener](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#a00741) object that processes the notification

- Returns:

    - Status of registerListener i.e success or suitable status code.

- virtual [telux](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv45telux)::[common](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6commonE)::[Status](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6common6StatusE) deregisterListener(std::weak\_ptr&lt;[IRemoteSimListener](https://docs.qualcomm.com/doc/80-PF458-2/topic/class_a00741.html#_CPPv4N5telux3tel18IRemoteSimListenerE)&gt; listener) = 0

    - Deregister the previously added listener.

- Parameters:

    - **listener** – **[in]** Previously registered [IRemoteSimListener](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#a00741) that needs to be deregistered

- Returns:

    - Status of deregisterListener success or suitable status code

- virtual int getSlotId() = 0

    - Get associated slot ID for the RemoteSimManager

- Returns:

    - The slot ID associated with this [IRemoteSimManager](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#a00742)

- inline virtual ~IRemoteSimManager()

    - Destructor of [IRemoteSimManager](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#a00742)

Last Published: Apr 14, 2026

[Previous Topic
telux::tel::IServingSystemListener](https://docs.qualcomm.com/bundle/publicresource/80-PF458-2/topics/serving_system.md) [Next Topic
Supplementary services](https://docs.qualcomm.com/bundle/publicresource/80-PF458-2/topics/supplementary_services.md)