# Multi-SIM

**Detailed Description**

This section contains APIs related to Multi SIM DSDA Configuration.

- *group* Telematics\_multi\_sim

    - Typedefs

- using HighCapabilityCallback = std::function&lt;void(int slotId, [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)::[ErrorCode](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6common9ErrorCodeE) error)&gt;

    - This function is called in the response to requestHighCapability API.

The callback can be invoked from multiple different threads. The implementation should be thread safe.

- Param slotId:

    - **[in]** SIM corresponding to slot identifier has high capability.

- Param error:

    - **[in]** Return code which indicates whether the operation succeeded or not ErrorCode

- using SlotStatusCallback = std::function&lt;void(std::map&lt;[SlotId](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv46SlotId), SlotStatus&gt; slotStatus, [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)::[ErrorCode](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux6common9ErrorCodeE) error)&gt;

    - This function is called in response to requestSlotStatus API.

The callback can be invoked from multiple different threads. The implementation should be thread safe.

- Param slotStatus:

    - **[in]** list of slots status [SlotStatus](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#a00713)

- Param error:

    - **[in]** Return code which indicates whether the operation succeeded or not ErrorCode

Enums

- enum SlotState

    - Represents state of the physical SIM slot

*Values:*

- enumerator UNKNOWN

    - 

- enumerator INACTIVE

    - Slot is inactive

- enumerator ACTIVE

    - Slot is active

- struct SlotStatus

    - Represents status of a physical SIM slot

Public Members

- [SlotState](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux3tel9SlotStateE) slotState

    - State of the physical SIM slot

- [CardState](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux3tel9CardStateE) cardState

    - Status of the card in the physical slot

- [CardError](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv4N5telux3tel9CardErrorE) cardError

    - Indicates the reason for the card error, and is valid only when the card state is CARDSTATE\_ERROR.

- class IMultiSimManager

    - MultiSimManager allows to perform operation pertaining to devices which have more than one SIM/UICC card. Clients should check if the subsystem is ready before invoking any of the APIs as follows.

bool isReady = MultiSimManager-&gt;[isSubsystemReady()](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#a00714_1ad65e71882fe67a3cc26b4eb67a5e2b85);

Public Functions

- virtual bool isSubsystemReady() = 0

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

- Returns:

    - If true MultiSimManager is ready. Deprecated Use [IMultiSimManager::getServiceStatus()](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#a00714_1a2025cb4e7e8e4e62a65cf5daaa9a63d2) API.

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

    - Wait for Multi SIM subsystem to be ready.

- Returns:

    - A future that caller can wait on to be notified when Multi SIM subsystem is ready. Deprecated Use InitResponseCb in [PhoneFactory::getMultiSimManager](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#a00736_1af9ee1602d0989d6f6af4c3bd8c967772) instead, to get notified about subsystem readiness.

- 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 [IMultiSimManager](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#a00714) object is in a usable state.

- Returns:

    - SERVICE\_AVAILABLE - If MultiSim manager is ready for service. SERVICE\_UNAVAILABLE - If MultiSim manager is temporarily unavailable. SERVICE\_FAILED - If MultiSim 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) getSlotCount(int &count) = 0

    - Get SIM slot count. The count can be used to determine whether the device supports multi SIM.

- Parameters:

    - **count** – **[out]** Slot count.

- Returns:

    - Status of getSlotCount i.e. success or suitable error 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) requestHighCapability([HighCapabilityCallback](https://docs.qualcomm.com/doc/80-PF458-2/topic/typedef_a00040_1ga41f91dcac6a1ecf60521ee7313670a1a.html#_CPPv4N5telux3tel22HighCapabilityCallbackE) callback) = 0

    - Request to find out which SIM/slot is allowed to use advance Radio Technology like 5G at a time. For example SIM/slot with high capability may allowed to use RAT capabilities like 5G/4G/3G/2G while the SIM/slot with low capability may be allowed to use RAT capabilities like 4G/2G.

- Parameters:

    - **callback** – **[in]** Callback function to get the response of request high capability.

- Returns:

    - Status of requestHighCapability i.e. success or suitable error 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) setHighCapability(int slotId, [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

    - Set SIM/slot with high capability asynchronously. On dual SIM devices, only one SIM may be allowed to use advanced Radio technology like 5G at a time. This API sets the SIM/slot that should be allowed the highest RAT capability. The other SIM/slot will be given lower RAT capabilities. For example, SIM in slot1 will be allowed 2G/3G/4G/5G and the SIM in slot2 will be allowed only 2G/4G.

On platforms with Access control enabled, Caller needs to have TELUX\_TEL\_MULTISIM\_MGMT permission to invoke this API successfully.

- Parameters:

    - - **slotId** – **[in]** Slot set with high capablity.
- **callback** – **[in]** Callback function to get the response of set high capability request.

- Returns:

    - Status of setHighCapability i.e. success or suitable error 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) switchActiveSlot([SlotId](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv46SlotId) slotId, [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

    - Choose the physical SIM slot to be used by modem on Single-SIM TCU platforms. After switching the slot, only the SIM on chosen physical slot can be used for WWAN functionality.

On platforms with Access control enabled, Caller needs to have TELUX\_TEL\_MULTISIM\_MGMT permission to invoke this API successfully.

- Parameters:

    - - **slotId** – **[in]** physical slot to be made active
- **callback** – **[in]** Callback function to get the response of slot switch request

- Returns:

    - Status of switchActiveSlot i.e. success or suitable error 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) requestSlotStatus([SlotStatusCallback](https://docs.qualcomm.com/doc/80-PF458-2/topic/typedef_a00040_1ga52964602d27e7b0b5aec7761fd233a67.html#_CPPv4N5telux3tel18SlotStatusCallbackE) callback) = 0

    - Request the status of physical slots.

- Parameters:

    - **callback** – **[in]** Callback function to get the response of slot status request

- Returns:

    - Status of requestSlotStatus i.e. success or suitable error 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;[IMultiSimListener](https://docs.qualcomm.com/doc/80-PF458-2/topic/class_a00715.html#_CPPv4N5telux3tel17IMultiSimListenerE)&gt; listener) = 0

    - Register a listener for specific events in the Multi SIM subsystem.

- Parameters:

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

- Returns:

    - Status of registerListener i.e. success or suitable error 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;[IMultiSimListener](https://docs.qualcomm.com/doc/80-PF458-2/topic/class_a00715.html#_CPPv4N5telux3tel17IMultiSimListenerE)&gt; listener) = 0

    - Deregister the previously added listener.

- Parameters:

    - **listener** – **[in]** Pointer to [IMultiSimListener](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#a00715) object that needs to be deregistered.

- Returns:

    - Status of deregisterListener i.e. success or suitable error code.

- inline virtual ~IMultiSimManager()

    -

- class IMultiSimListener : 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)

    - Listener class for getting high capability change notification. The listener method can be invoked from multiple different threads. Client needs to make sure that implementation is thread-safe.

Public Functions

- inline virtual void onHighCapabilityChanged(int slotId)

    - This function is called whenever there is change in high capability for SIM/slot.

- Parameters:

    - **slotId** – **[in]** SIM corresponding to slot identifier has high capability now.

- inline virtual void onSlotStatusChanged(std::map&lt;[SlotId](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#_CPPv46SlotId), [SlotStatus](https://docs.qualcomm.com/doc/80-PF458-2/topic/struct_a00713.html#_CPPv4N5telux3tel10SlotStatusE)&gt; slotStatus)

    - This function is called whenever there is change in physical SIM slots status.

- Parameters:

    - **slotStatus** – **[in]** list of slots status [SlotStatus](https://docs.qualcomm.com/doc/80-PF458-2/topic/common.html#a00713)

- inline virtual ~IMultiSimListener()

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

Last Published: Apr 14, 2026

[Previous Topic
telux::tel::IImsSettingsListener](https://docs.qualcomm.com/bundle/publicresource/80-PF458-2/topics/ims_settings.md) [Next Topic
Subscription management](https://docs.qualcomm.com/bundle/publicresource/80-PF458-2/topics/subscription_management.md)