blob: 01dc771fc9253566e9d19bdabd18c7b42973f3c9 [file] [log] [blame]
/*-----------------------------------------------------------------------------------------------*/
/**
@file ql_ms_sim.h
@brief subscriber identity module service API, support Dual Sim Dual Active(DSDA).
*/
/*-----------------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------------------
Copyright (c) 2021 Quectel Wireless Solution, Co., Ltd. All Rights Reserved.
Quectel Wireless Solution Proprietary and Confidential.
-------------------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------------------
EDIT HISTORY
This section contains comments describing changes made to the file.
Notice that changes are listed in reverse chronological order.
$Header: $
when who what, where, why
-------- --- ----------------------------------------------------------
20200720 solomon.cui Created .
-------------------------------------------------------------------------------------------------*/
#ifndef __QL_MS_SIM_H__
#define __QL_MS_SIM_H__
#ifdef __cplusplus
extern "C" {
#endif
#include "ql_type.h"
#include "ql_sim.h"
typedef void (*ql_ms_sim_card_status_cb_f)(int sim_id, ql_sim_card_info_t *p_info);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Initializes SIM service.
@note You must call this function before other functions can be used in this module.
@return Whether the SIM service was intialized successfully.
@retval QL_ERR_OK successful.
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
@retval Other error code defined by ql_type.h.
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_init(void);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Deinitializes SIM service.
@return Whether the SIM service was deintialized successfully.
@retval QL_ERR_OK successful.
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
@retval Other error code defined by ql_type.h.
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_deinit(void);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Gets the IMSI (for 3GPP) or IMSI_M (for 3GPP2) from the SIM in ASCII form.
@param [in] sim_id sim_id to be used.
@param [in] app_type Application type.
@param [out] imsi Buffer to fill IMSI data.
@param [in] imsi_len Buffer length.
@return Whether the IMSI was successfully obtained.
@retval QL_ERR_OK successful.
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
@retval Other error code defined by ql_type.h.
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_get_imsi(int sim_id, QL_SIM_APP_TYPE_E app_type, char *imsi, int imsi_len);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Retrieves the Integrated Circuit Card ID (ICCID) stored on the card.
@param [in] sim_id sim_id to be used.
@param [out] iccid Buffer to fill ICCID data.
@param [in] iccid_len Buffer length.
@return Whether the ICCID was successfully obtained.
@retval QL_ERR_OK successful.
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
@retval Other error code defined by ql_type.h.
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_get_iccid(int sim_id, char *iccid, int iccid_len);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Retrieves the device phone number stored on the card.
@param [in] sim_id sim_id to be used.
@param [in] app_type Application type.
@param [out] phone_num Buffer to fill phone number.
@param [in] phone_num_len Buffer length.
@return Whether the phone number was successfully retrieved.
@retval QL_ERR_OK successful
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry
@retval Other error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_get_phone_num(int sim_id, QL_SIM_APP_TYPE_E app_type,
char *phone_num, int phone_num_len);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Retrieves the preferred operators stored on the card.
@param [in] sim_id sim_id to be used.
@param [in] list Buffer to hold operators
@note This function is only supported by 3GPP applications.
@return Whether the preferred operators were successfully retrieved.
@retval QL_ERR_OK successful
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry
@retval Other error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_get_operators(int sim_id, ql_sim_operator_list_t *list);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Enables the PIN on an application.
@param [in] sim_id sim_id to be used.
@param [in] app_type Application type.
@param [in] pin PIN to be used.
@param [in] pin_value PIN value. NULL terminated.
@return Whether the PIN was successfully enabled.
@retval QL_ERR_OK successful.
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
@retval Other error code defined by ql_type.h.
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_enable_pin(int sim_id, QL_SIM_APP_TYPE_E app_type,
QL_SIM_PIN_E pin, const char *pin_value);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Disables the PIN on an application.
@param [in] sim_id sim_id to be used.
@param [in] app_type Application type.
@param [in] pin PIN to be used.
@param [in] pin_value PIN value. NULL terminated.
@return Whether the PIN was successfully disabled.
@retval QL_ERR_OK successful.
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
@retval Other error code defined by ql_type.h.
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_disable_pin(int sim_id, QL_SIM_APP_TYPE_E app_type,
QL_SIM_PIN_E pin, const char *pin_value);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Verifies the PIN value of an application.
@param [in] sim_id sim_id to be used.
@param [in] app_type Application type.
@param [in] pin PIN to be used.
@param [in] pin_value PIN value. NULL terminated.
@note PIN must be enabled before calling this function.
@return Whether the PIN was successfully verified.
@retval QL_ERR_OK successful.
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
@retval Other error code defined by ql_type.h.
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_verify_pin(int sim_id, QL_SIM_APP_TYPE_E app_type,
QL_SIM_PIN_E pin, const char *pin_value);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Changes the PIN value of an application.
@param [in] sim_id sim_id to be used.
@param [in] app_type Application type.
@param [in] pin PIN to be used.
@param [in] old_pin_value Old PIN value. NULL terminated.
@param [in] new_pin_value New PIN value. NULL terminated.
@return Whether the PIN was successfully changed.
@retval QL_ERR_OK successful.
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
@retval Other error code defined by ql_type.h.
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_change_pin(int sim_id, QL_SIM_APP_TYPE_E app_type,
QL_SIM_PIN_E pin, const char *old_pin_value, const char *new_pin_value);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Unblocks a blocked PIN using the PUK code.
@param [in] sim_id sim_id to be used.
@param [in] app_type Application type.
@param [in] pin PIN to be used.
@param [in] puk_value PUK value. NULL terminated.
@param [in] pin_value New PIN value. NULL terminated.
@note The user must pass PUK1 to unblock PIN1 or PUK2 to unblock PIN2.
@return Whether the PIN was successfully unblocked.
@retval QL_ERR_OK successful.
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
@retval Other error code defined by ql_type.h.
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_unblock_pin(int sim_id, QL_SIM_APP_TYPE_E app_type,
QL_SIM_PIN_E pin, const char *puk_value, const char *pin_value);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Retrieves the card info stored on a card.
@param [in] sim_id sim_id to be used.
@param [out] p_info Pointer of ql_ms_sim_card_info_t.
@return Whether the card info was successfully retrieved.
@retval QL_ERR_OK successful.
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
@retval Other error code defined by ql_type.h.
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_get_card_info(int sim_id, ql_sim_card_info_t *p_info);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Reads data from a specific file on a specified application on the card.
@param [in] sim_id sim_id to be used.
@param [in] app_type Application type.
@param [inout] p_file Pointer of ql_ms_sim_file_t.
@return Whether the file was successfully read.
@retval QL_ERR_OK successful.
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
@retval Other error code defined by ql_type.h.
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_read_file(int sim_id, QL_SIM_APP_TYPE_E app_type, ql_sim_file_t *p_file);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Writes data to a specific file on a specified application on the card.
@param [in] sim_id sim_id to be used.
@param [in] app_type Application type.
@param [in] p_file Pointer of ql_ms_sim_file_t
@note The type of file is determined by the record number field,
which indicates a transparent file when zero and a record-based file otherwise.
@return Whether the file was successfully written.
@retval QL_ERR_OK successful.
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
@retval Other error code defined by ql_type.h.
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_write_file(int sim_id, QL_SIM_APP_TYPE_E app_type, ql_sim_file_t *p_file);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Retrieves the info of a specific file on a specified application on the card.
@param [in] sim_id sim_id to be used.
@param [in] app_type Application type.
@param [inout] p_info Pointer of ql_ms_sim_file_info_t.
@return Whether the file info was successfully retrieved.
@retval QL_ERR_OK successful.
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
@retval Other error code defined by ql_type.h.
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_get_file_info(int sim_id, QL_SIM_APP_TYPE_E app_type,
ql_sim_file_info_t *p_info);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Reads phone book on a specified application on the card.
@param [in] sim_id sim_id to be used.
@param [in] app_type Spplication type.
@param [in] pb_path Phone book path. NULL terminated.
@param [in] record_idx Record index to read. Starts from 1.
@param [out] p_record Pointer of ql_ms_sim_phone_book_record_t.
@return Whether the phone book record was successfully retrieved.
@retval QL_ERR_OK successful.
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
@retval Other error code defined by ql_type.h.
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_read_phone_book(int sim_id, QL_SIM_APP_TYPE_E app_type,
const char *pb_path, uint8_t record_idx,
ql_sim_phone_book_record_t *p_record);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Writes phone book on a specified application on the card.
@param [in] sim_id sim_id to be used.
@param [in] app_type Application type.
@param [in] pb_path Phone book path. NULL terminated.
@param [in] record_idx Record index to write. Starts from 1.
@param [in] p_record Pointer of ql_ms_sim_phone_book_record_t.
@note If p_record->name[0] = 0 and p_record->number[0] = 0, record will be deleted.
@return Whether the phone book record was successfully saved.
@retval QL_ERR_OK successful.
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
@retval Other error code defined by ql_type.h.
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_write_phone_book(int sim_id, QL_SIM_APP_TYPE_E app_type,
const char *pb_path, uint8_t record_idx,
ql_sim_phone_book_record_t *p_record);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Opens a logical channel on a UICC card.
@param [in] sim_id sim_id to be used.
@param [out] channel_id Channel opened.
@return Whether the logical channel was successfully opened.
@retval QL_ERR_OK successful.
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
@retval Other error code defined by ql_type.h.
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_open_logical_channel(int sim_id, uint8_t *channel_id);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Closes a logical channel on a UICC card.
@param [in] sim_id sim_id to be used.
@param [in] channel_id Channel to be closed.
@return Whether the logical channel was successfully closed.
@retval QL_ERR_OK successful.
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
@retval Other error code defined by ql_type.h.
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_close_logical_channel(int sim_id, uint8_t channel_id);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Sends an APDU to the card.
@param [in] sim_id sim_id to be used.
@param [in] channel_id Channel to be used.
@param [inout] p_apdu Pointer of ql_ms_sim_apdu_t.
@note You must call ql_ms_sim_open_logical_channel before sending an APDU.
@return Whether the APDU was successfully sent.
@retval QL_ERR_OK successful.
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
@retval Other error code defined by ql_type.h.
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_send_apdu(int sim_id, uint8_t channel_id, ql_sim_apdu_t *p_apdu);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Sets SIM card status callback handler
@param [in] sim_id sim_id to be used.
@param[in] cb call back handler.
@return Whether the card status callback handler was successfully set.
@retval QL_ERR_OK successful.
@retval QL_ERR_SERVICE_NOT_READY service is not ready, need to retry.
@retval Other error code defined by ql_type.h.
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_set_card_status_cb(int sim_id, ql_ms_sim_card_status_cb_f cb);
/*-----------------------------------------------------------------------------------------------*/
/**
@brief Registration server error callback. Currently, only if the server exits abnormally,
the callback function will be executed, and the error code is QL_ERR_ABORTED;
@param[in] cb Callback function
@return
QL_ERR_OK - successful
Other - error code defined by ql_type.h
*/
/*-----------------------------------------------------------------------------------------------*/
int ql_ms_sim_set_service_error_cb(ql_sim_service_error_cb_f cb);
int ql_ms_sim_switch_slot(int sim_id, QL_SIM_PHY_SLOT_E phy_slot);
int ql_ms_sim_get_active_slots(int sim_id, ql_sim_active_slots_t *p_active_slots);
#ifdef __cplusplus
}
#endif
#endif