[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit
Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/cp/ps/driver/inc/misc/drvs_uicc.h b/cp/ps/driver/inc/misc/drvs_uicc.h
new file mode 100644
index 0000000..34c5c37
--- /dev/null
+++ b/cp/ps/driver/inc/misc/drvs_uicc.h
@@ -0,0 +1,462 @@
+/*******************************************************************************
+ * Copyright (C) 2007, ZTE Corporation.
+ *
+ * File Name: uicc_api.h
+ * File Mark:
+ * Description: Provide UICC module Function prototype declaration
+* and type declaration.
+ * Others:
+ * Version: 1.0
+ * Author: wangxia
+ * Date: 2008-4-18
+ * History 1:
+ * Date:
+ * Version:
+ * Author:
+ * Modification:
+ * History 2:
+ ********************************************************************************/
+
+#ifndef _DRVS_UICC_H
+#define _DRVS_UICC_H
+
+/****************************************************************************
+* Include files
+****************************************************************************/
+#include "pub.h"
+
+/****************************************************************************
+* Macros
+****************************************************************************/
+//#define SOC_USIM
+
+#define DRV_UICC_NOF_CLASSES 5 /*!< The number of specified card classes (A,B,C,D & E) */
+/****************************************************************************
+* Types
+****************************************************************************/
+typedef enum
+{
+ DRV_UICC_TRANSFER_SUCCEEDED,
+ DRV_UICC_TRANSFER_FAILED
+} T_ZDrvUicc_ApduReselt;
+
+/**
+ * \enum T_ZDrvUicc_ResetResult
+ * Response cause for function \ref UICC_reset.
+ */
+typedef enum
+{
+ DRV_UICC_ACTIVATION_SUCCEEDED,
+ DRV_UICC_ACTIVATION_FAILED,
+ DRV_UICC_REJECT_CARD
+} T_ZDrvUicc_ResetResult;
+
+/**
+ * \enum T_ZDrvUicc_CloseResult
+ * Response cause for function \ref UICC_close.
+ */
+typedef enum
+{
+ DRV_UICC_DEACTIVATION_SUCCEEDED,
+ DRV_UICC_DEACTIVATION_FAILED,
+ DRV_UICC_ALREADY_DEACTIVATED
+} T_ZDrvUicc_CloseResult;
+
+/**
+ * \enum T_ZDrvUicc_SetInOutCallBack
+ * Response cause for callback function \ref UICC_set_inout_callback.
+ */
+typedef enum
+{
+ DRV_CALLBACK_FUNCTION_SET, /*!< Callback function registered. */
+ DRV_CALLBACK_NOT_AVAILABLE /*!< Callback function NOT registered (or not supported). */
+} T_ZDrvUicc_SetInOutCallBack;
+
+/**
+ * \enum T_ZDrvUicc_CardSelector
+ * Card selector.
+ */
+typedef enum
+{
+ DRV_UICC_PRIMARY_CARD,
+ DRV_UICC_SECONDARY_CARD_1,
+ DRV_UICC_SECONDARY_CARD_2
+} T_ZDrvUicc_CardSelector;
+
+/**
+ * \enum T_ZDrvUicc_CommandCase
+ * Command case indicator.
+ */
+typedef enum
+{
+ DRV_UICC_CMD_CASE_1, /*!< No Tx nor Tx command. */
+ DRV_UICC_CMD_CASE_2, /*!< Rx command. */
+ DRV_UICC_CMD_CASE_3, /*!< Tx command. */
+ DRV_UICC_CMD_CASE_4 /*!< Tx and Rx command. */
+} T_ZDrvUicc_CommandCase;
+
+/**
+ * \enum T_ZDrvUicc_ResetMode
+ * Reset indicator.
+ */
+typedef enum
+{
+ DRV_UICC_COLD_RESET, /*!< Cold Reset. */
+ DRV_UICC_WARM_RESET /*!< Warm Reset (reset with RST line only). */
+} T_ZDrvUicc_ResetMode;
+
+/**
+ * \enum T_ZDrvUicc_VoltageClass
+ * Voltage CLASS selector.
+ */
+typedef enum
+{
+ DRV_UICC_CLASS_A, /*!< 5v */
+ DRV_UICC_CLASS_B, /*!< 3v */
+ DRV_UICC_CLASS_C, /*!< 1.8v */
+ DRV_UICC_CLASS_D, /*!< RFU */
+ DRV_UICC_CLASS_E /*!< RFU */
+}T_ZDrvUicc_VoltageClass;
+
+/**
+ * \enum T_ZDrvUicc_ClockStopMode
+ * Clock stop level indicator.
+ */
+typedef enum
+{
+ DRV_UICC_CLOCK_STOP_ALLOWED, /*!< Clock Stop NOT allowed. */
+ DRV_UICC_NO_PREFERRED_LEVEL, /*!< Clock allowed, no preferred level requiered. */
+ DRV_UICC_HIGH_LEVEL_PREFERRED, /*!< Clock allowed, High level preferred. */
+ DRV_UICC_LOW_LEVEL_PREFERRED, /*!< Clock allowed, Low level preferred. */
+ DRV_UICC_CLOCK_STOP_NOT_ALLOWED,/*!< Clock Stop NOT allowed. */
+ DRV_UICC_CLOCK_STOP_ONLY_HIGH, /*!< Clock Stop NOT allowed, unless at High level. */
+ DRV_UICC_CLOCK_STOP_ONLY_LOW /*!< Clock Stop NOT allowed, unless at Low level. */
+}T_ZDrvUicc_ClockStopMode;
+
+/**
+ * \enum T_ZDrvUicc_Protocol
+ * Protocol selector.
+ */
+typedef enum
+{
+ DRV_UICC_T_0, /*!< T=0 Protocol. */
+ DRV_UICC_T_1 /*!< T=1 Protocol. */
+}T_ZDrvUicc_Protocol;
+
+/**
+ * \enum T_ZDrvUicc_ComConvention
+ * Communication convention indicator.
+ */
+typedef enum
+{
+ DRV_UICC_DIRECT, /*!< Direct communication convention. */
+ DRV_UICC_INVERSE /*!< Inverse communication convention. */
+}T_ZDrvUicc_ComConvention;
+
+/**
+ * \enum T_ZDrvUicc_CardAction
+ * Card In/Out indicator.
+ */
+typedef enum
+{
+ DRV_CARD_INSERTED,
+ DRV_CARD_REMOVED
+} T_ZDrvUicc_CardAction;
+/**
+ * \}
+ */
+
+
+ /**
+ * \struct T_ZDrvUicc_ApduHeader
+ * Structure holding the APDU command header.
+ */
+typedef struct
+{
+ UINT8 cla; /*!< Command CLAss. */
+ UINT8 ins; /*!< Command INStruction. */
+ UINT8 p1; /*!< Command Parameter. */
+ UINT8 p2; /*!< Command Parameter. */
+ UINT16 lc; /*!< Tx-size. */
+ UINT16 le; /*!< Rx-Size. */
+} T_ZDrvUicc_ApduHeader;
+
+
+/**
+ * \struct T_ZDrvUicc_ApduFooter
+ * Structure holding the APDU command response 'header'.
+ */
+typedef struct
+{
+ UINT16 luicc; /*!< Actual Rx-size recived. */
+ UINT8 sw1; /*!< Received Status Word SW1. */
+ UINT8 sw2; /*!< Received Status Word SW2. */
+} T_ZDrvUicc_ApduFooter;
+
+
+/**
+ * \enum T_ZDrvUicc_CardType
+ * card type.
+ */
+typedef enum
+{
+ DRV_UICC_CARD_TYPE_2G,
+ DRV_UICC_CARD_TYPE_3G,
+
+ UICC_MAX
+ }T_ZDrvUicc_CardType;
+
+
+
+/**
+ * \struct T_ZDrvUicc_VoltageControl
+ * Voltage control structure.
+ */
+typedef struct
+{
+ T_ZDrvUicc_VoltageClass used_voltage; /*!< Actual used voltage class/level. */
+ BOOL voltage_settled; /*!< Indicates if the voltages level has
+ been settled. This can only happen
+ if the card did indicate the voltage
+ capabilities in the ATR string. */
+} T_ZDrvUicc_VoltageControl;
+
+/**
+ * \struct T_ZDrvUicc_Characteristics
+ * Protocol characteristics structure.
+ */
+typedef struct
+{
+ T_ZDrvUicc_Protocol protocol; /*!< Protocol supported and used. */
+ UINT8 f_used; /*!< The used clock rate convention factor (F). */
+ UINT8 f_offered; /*!< The offered clock rate convention factor (F). */
+ UINT8 d_used; /*!< The used baud rate adjustment factor (D). */
+ UINT8 d_offered; /*!< The offered baud rate adjustment factor (D). */
+ T_ZDrvUicc_ComConvention com_convention; /*!< The supported and used communication convention. */
+} T_ZDrvUicc_Characteristics;
+
+/**
+ * \struct T_ZDrvUicc_ElectricalProfile
+ * Electrical Baseband characteristics structure.
+ */
+typedef struct
+{
+ BOOL class_supported; /*!< Indicates if the class is supported or not. */
+ UINT16 voltage_level; /*!< Holds the voltage level given in millivolts [mV]. E.g. 1800 is
+ equivalent to 1.8v). */
+ UINT16 max_current; /*!< The maximum allowed current consumption at this voltage_level
+ given in micro Ampere (uA). E.g. 15500 is equivalent to 15.5mA. */
+} T_ZDrvUicc_ElectricalProfile;
+
+/**
+ * \struct T_ZDrvUicc_ClockProfile
+ * Baseband Clock characteristics.
+ */
+typedef struct
+{
+ UINT8 min_clock_freq; /*!< The minimum clock frequency supported by the HW. */
+ UINT8 max_clock_freq; /*!< The maximum clock frequency supported by the HW. If only
+ one frequency is supported, the min. and max. values will
+ be identical. The frequency resolution is 0.1 MHz i.e. 21h
+ is equivalent to 3.3MHz. */
+}T_ZDrvUicc_ClockProfile;
+
+/**
+ * \struct T_ZDrvUicc_HwProfile
+ * Baseband Clock characteristics.
+ */
+typedef struct
+{
+ UINT8 nof_card_slots_supported;
+ /*!< Number of card reader slots supported by HW.\n
+ * 1: Only primary slot (uicc_primary_card)\n
+ * 2: Primary and ONE additional slot (uicc_secondary_card_1)\n
+ * 3: Primary and TWO additional slots (uicc_secondary_card_1 & uicc_secondary_card_2) */
+
+ UINT8 protocol_supported;
+ /*!< Protocols supported by the DRV_UICC Handler.\n
+ * b1: T=0 supported\n
+ * b2: T=1 supported\n
+ * b3: T=x supported\n
+ * E.g. 0x03 means that both T=0 and T=1 are supported */
+
+ T_ZDrvUicc_ElectricalProfile electrical_profile[DRV_UICC_NOF_CLASSES];
+ /*!< Holds the electrical profile of the specified classes - where
+ * the max. allowed current consumption is indicated for each class. */
+
+ T_ZDrvUicc_ClockProfile clock_profile;
+ /*!< Holds the minimum and maximum clock frequencies supported by the
+ * hardware. */
+
+ BOOL extended_length;
+ /*!< Indicates the driver support of the use of extended Lc/Le.\n
+ * TRUE: extended Lc/Le is supported by the driver. The max. Tx and
+ * Rx data sizes are 65,535 and 65,536 bytes respectively.\n
+ * FALSE: extended Lc/Le is NOT supported by the driver. The max. Tx
+ * and Rx data sizes are 255 and 256 bytes respectively.\n
+ * NOTE: this feature is currently NOT supported! */
+} T_ZDrvUicc_HwProfile;
+
+typedef enum {
+ CARD_INSERTED,
+ CARD_REMOVED
+} T_UICC_CARD_ACTION;
+
+typedef enum {
+ UICC_PRIMARY_CARD,
+ UICC_SECONDARY_CARD_1,
+ // UICC_SECONDARY_CARD_2
+} T_UICC_CARD_SELECTOR;
+
+typedef enum {
+ UICC_CARD, //0
+ VSIM_CARD, //3
+ UICC_VSIM_AUTO,
+ UICC_ESIM_CARD,
+ CLOUD_CARD, //1//1
+ SOFTSIM_CARD, //2//2
+ UICC_VSIM_MAX
+} T_UICC_CARD_TYPE;
+/****************************************************************************
+* Constants
+****************************************************************************/
+
+/****************************************************************************
+* Global Variables
+****************************************************************************/
+
+/****************************************************************************
+* Function Prototypes
+****************************************************************************/
+
+/*!
+ * Function used to exchange APDU with a card. The function will not return
+ * before the response APDU has beed received from the card or until the
+ * appropriate Working Timer has expired.
+ *
+ * \param card_selector (I) Indicates which card the requested command is meant for.
+ * \param command_case (I) Indicates which of the four command cases the current
+ * command belongs to.
+ * \param extended_length (I) Indicates the card support of the use of extended Lc/Le.
+ * The caller of this function has the responsibility of
+ * allocating the apdu_data store correcesponding to the
+ * larger of Lc and Le.\n
+ * TRUE: extended Lc/Le is supported. The max. Tx and Rx
+ * data sizes are 65,535 and 65,536 bytes respectively.\n
+ * FALSE: extended Lc/Le is NOT supported. The max. Tx and Rx
+ * data sizes are 255 and 256 bytes respectively.
+ * \param c_apdu (I) The Command APDU containing: CLA, INS, P1, P2, Lc & Le.
+ * \param r_apdu (O) The Response APDU containing: Luicc, SW1 & SW2.
+ * \param apdu_data (I/O) I: Holds Lc Tx-data to be sent to the card.
+ * O: Holds Luicc Rx-data received from the card.
+ * \return The result of the APDU command execution.
+ */
+
+extern T_ZDrvUicc_ApduReselt zDrvUicc_TransportApdu(T_ZDrvUicc_CardSelector card_selector,
+ T_ZDrvUicc_CommandCase command_case,
+ BOOL extended_length,
+ T_ZDrvUicc_ApduHeader c_apdu,
+ T_ZDrvUicc_ApduFooter *r_apdu_ptr,
+ UINT8 *apdu_data_ptr);
+
+
+/*!
+ * Function used to reset the card. The function will not return until the reset
+ * has been successfully carried out i.e. ATR string has been received or if no
+ * response to the reset is received i.e. IWT times out.
+ * \param card_selector (I) Indicates which card needs to be activated/reset.
+ * \return The outcome of the activation handling.
+ */
+ extern T_ZDrvUicc_ResetResult zDrvUicc_ResetCard(T_ZDrvUicc_CardSelector card_selector);
+
+
+/*!
+ * Function used to deactivat a given card.
+ * \param card_selector (I) Indicates which card needs to be deactivated.
+ * \return The deactivation result.
+ */
+ extern T_ZDrvUicc_CloseResult zDrvUicc_Close(T_ZDrvUicc_CardSelector card_selector);
+
+/*!
+ * Function for Informing the DRV_UICC Handler of the card characteristics of the current used card.
+ * \param card_selector (I) Indicates which card the characteristics are valid for.
+ * \param clock_stop_mode (I) Holds the Clock Stop capabilities indicated by the card.
+ * \param min_clock_freq (I) Holds the minimum acceptable clock frequency for the
+ * card/application. The frequency resolution is 0.1 MHz
+ * i.e. 21h is equivalent to 3.3MHz.
+ * \return None.
+ */
+ extern VOID zDrvUicc_CardCharacteristics(T_ZDrvUicc_CardSelector card_selector,
+ T_ZDrvUicc_ClockStopMode clock_stop_mode,
+ UINT8 min_clock_freq);
+/*!
+ * Returns an overview of the static profile of the HW related interface.
+ * \return The static characteristics (e.g. number of card slots, voltage
+ * levels, max. current cunsumption, supported transmission protocols
+ * etc.
+ */
+ extern T_ZDrvUicc_HwProfile zDrvUicc_HwProfile(VOID);
+
+/*!
+ * Used for initializing the callback function used when the in/out state of the
+ * card changes.
+ * \param inout_call_back (I) Pointer to the function to be invoked when the
+ * in/out state changes. The parameter to the call
+ * back function shall indicated the related card
+ * reader and the IN or OUT action.
+ * \return The outcome of the requested action.
+ */
+ extern T_ZDrvUicc_SetInOutCallBack zDrvUicc_SetInOutCallBack( VOID (*inout_call_back)(T_ZDrvUicc_CardAction card_action, T_ZDrvUicc_CardSelector card_selector));
+ /*!
+ * Used for initializing the callback function used when the in/out state of the
+ * card changes.
+ * \param
+ * \return The outcome of the requested action.
+ */
+ extern T_ZDrvUicc_SetInOutCallBack zDrvUicc_UninstallInOutCallBack(VOID);
+
+/*!
+ * Function used to obtain the ATR string of the current operated card. If no card
+ * is active (or if data is not available) the number of characters returned will
+ * be set to zero.
+ * \param atr Pointer to the store in which the ATR string should be located.
+ * \return Number of ATR characters.
+ */
+ extern UINT8 zDrvUicc_GetAtr(T_ZDrvUicc_CardSelector card_selector, UINT8 *atr);
+
+
+extern VOID zDrvUicc_Highisr(VOID);
+
+extern void invoke_callback(T_UICC_CARD_ACTION card_action, T_UICC_CARD_SELECTOR card_selector);
+
+typedef void (*recoverCallback_func)(void);
+void uicc_setRecover_callback(recoverCallback_func func);
+
+typedef UINT8 (*simStatuCallback_func)(void);
+void uicc_getSimStatu_callback(simStatuCallback_func func);
+#define UICC_SIM_PLUGIN 0x11
+#define UICC_SIM_PLUGOUT 0x10
+
+typedef void (*hotplugCallback_func)(UINT32);
+
+void uicc_set_hotplugCallback(hotplugCallback_func func);
+
+typedef void (*simSwitchCallback_fun)(void);
+void uicc_setUsimSwitch_callback(simSwitchCallback_fun func);
+
+SINT32 uiccramlog_Printf(const VOID *pFormat, ...);
+
+extern SINT32 ramlog_Printf(UINT16 nModNo, const VOID *pFormat, ...);
+
+#ifdef UICC_ENABLE_REALTIME_PRINT
+#define zDrvUiccRamlog_PRINTF(nModNo, s...) uiccramlog_Printf(s)
+#else
+#ifdef _USE_RAMLOG
+#define zDrvUiccRamlog_PRINTF(nModNo, s...) ramlog_Printf(nModNo, s)
+#endif
+#endif
+
+#endif /* _DRVSUICC_H */
+/** \} */
+ /* End of file. */
+