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