[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.              */

+