325 lines
10 KiB
C
325 lines
10 KiB
C
/*------------------------------------------------------------
|
|
(C) Copyright [2006-2008] Marvell International Ltd.
|
|
All Rights Reserved
|
|
------------------------------------------------------------*/
|
|
|
|
/*******************************************************************************
|
|
* MODULE HEADER FILE
|
|
********************************************************************************
|
|
* Title: USIM header file
|
|
*
|
|
* This file and the software in it is furnished under
|
|
* license and may only be used or copied in accordance with the terms of the
|
|
* license. The information in this file is furnished for informational use
|
|
* only, is subject to change without notice, and should not be construed as
|
|
* a commitment by Intel Corporation. Intel Corporation assumes no
|
|
* responsibility or liability for any errors or inaccuracies that may appear
|
|
* in this document or any software that may be provided in association with
|
|
* this document.
|
|
* Except as permitted by such license, no part of this document may be
|
|
* reproduced, stored in a retrieval system, or transmitted in any form or by
|
|
* any means without the express written consent of Intel Corporation.
|
|
*
|
|
* Title: USIM header file
|
|
*
|
|
* Filename: usim.h
|
|
*
|
|
* Target, platform: Common Platform, HAL platform
|
|
*
|
|
* Authors: Eilam Ben-Dror
|
|
*
|
|
* Description: This file is the USIM Driver header file.
|
|
*
|
|
* Last Updated:
|
|
*
|
|
* Notes:
|
|
*******************************************************************************/
|
|
|
|
#ifndef _USIM_H_
|
|
#define _USIM_H_
|
|
|
|
#include "global_types.h"
|
|
#include "usim_config.h"
|
|
|
|
|
|
/*----------- Global defines -------------------------------------------------*/
|
|
|
|
//
|
|
#define USIM_ALL_AVAILABLE_DATA 256 // 256 Bytes is the max length
|
|
|
|
/*----------- Global macro definitions ---------------------------------------*/
|
|
// Bitwise not for a byte:
|
|
#define USIM_BYTEWISE_NOT(b) (0xFF-(b))
|
|
|
|
//#define USIM_OP_FOR_SGIT 1
|
|
|
|
/*----------- Global type definitions ----------------------------------------*/
|
|
// Return Code definitions:
|
|
typedef enum
|
|
{
|
|
USIM_RC_OK = 1,
|
|
|
|
USIM_RC_INVALID_CARD = -100,
|
|
USIM_RC_GPIO_ERROR = -99,
|
|
USIM_RC_INTC_ERROR = -98,
|
|
USIM_RC_OSA_ERROR = -97,
|
|
USIM_RC_NULL_POINTER = -96,
|
|
USIM_RC_CARD_REMOVED = -95,
|
|
USIM_RC_CARD_CLOSED = -94,
|
|
USIM_RC_NOT_REGISTERED = -93,
|
|
USIM_RC_CARD_ALREADY_OPEN = -92,
|
|
USIM_RC_ATR_ERROR = -91,
|
|
USIM_RC_ATR_CHECK_FAILED = -90,
|
|
USIM_RC_PPS_ERROR = -89,
|
|
USIM_RC_ALREADY_BOUND = -88,
|
|
USIM_RC_SEND_ERROR = -87,
|
|
USIM_RC_RECEIVE_ERROR = -86,
|
|
USIM_RC_CARD_BUSY = -85,
|
|
USIM_RC_INVALID_DATA_LENGTH = -84,
|
|
USIM_RC_DMA_ERROR = -83
|
|
|
|
}USIM_ReturnCode;
|
|
|
|
|
|
// Command header:
|
|
//ICAT EXPORTED STRUCT
|
|
typedef struct
|
|
{
|
|
UINT8 instructionClass; // Class of instruction
|
|
UINT8 instructionCode; // Instruction code
|
|
UINT8 param1; // Instruction parameter 1
|
|
UINT8 param2; // Instruction parameter 2
|
|
UINT16 dataLength; // Number of bytes in the command data (0 - 255)
|
|
UINT16 expectDataLength;// Max number of data bytes expected in response (0 - 255).
|
|
|
|
}USIM_CommandHeader;
|
|
|
|
|
|
// Response Header:
|
|
//ICAT EXPORTED STRUCT
|
|
typedef struct
|
|
{
|
|
UINT8 status1; // Status byte 1
|
|
UINT8 status2; // Status byte 2
|
|
}USIM_ResponseHeader;
|
|
|
|
|
|
// Coding Convention
|
|
typedef enum
|
|
{
|
|
USIM_DIRECT = 0x3B,
|
|
USIM_INVERSE = 0x3F
|
|
}USIM_Coding;
|
|
|
|
// Transport Layer Protocol
|
|
//ICAT EXPORTED ENUM
|
|
typedef enum
|
|
{
|
|
USIM_T0 = 0x00,
|
|
USIM_T1 = 0x01
|
|
}USIM_Protocol;
|
|
|
|
|
|
// Card clock frequencies.
|
|
// Note: In order to avoid float type, the values are 10 times bigger than the
|
|
// used frequency.
|
|
typedef enum
|
|
{
|
|
USIM_2_4_MHz = 24, // used frequency
|
|
USIM_3_MHz = 30, // used frequency
|
|
USIM_3_4_MHz = 34, // used frequency
|
|
USIM_4_MHz = 40, // used frequency and indicated maximal frequency
|
|
USIM_4_8_MHz = 48, // used frequency
|
|
USIM_5_MHz = 50, // indicated maximal frequency
|
|
USIM_6_MHz = 60, // used frequency and indicated maximal frequency
|
|
USIM_7_5_MHz = 75, // indicated maximal frequency
|
|
USIM_8_MHz = 80, // used frequency and indicated maximal frequency
|
|
USIM_10_MHz = 100, // indicated maximal frequency
|
|
USIM_12_MHz = 120, // used frequency and indicated maximal frequency
|
|
USIM_15_MHz = 150, // indicated maximal frequency
|
|
USIM_16_MHz = 160, // indicated maximal frequency
|
|
USIM_20_MHz = 200 // indicated maximal frequency
|
|
}USIM_Frequency;
|
|
|
|
|
|
|
|
// Clock Stop States:
|
|
//ICAT EXPORTED ENUM
|
|
typedef enum
|
|
{
|
|
USIM_CLK_STOP_NOT_SUPPORTED = 0, // clock stop not supported
|
|
USIM_CLK_STOP_LOW, // preferred state for clock stop is low
|
|
USIM_CLK_STOP_HIGH, // preferred state for clock stop is high
|
|
USIM_CLK_STOP_ANY // no preference for stop state
|
|
|
|
}USIM_ClockState;
|
|
|
|
|
|
|
|
// Class of operating conditions:
|
|
//ICAT EXPORTED ENUM
|
|
typedef enum
|
|
{
|
|
USIM_CLASS_NULL = 0 ,
|
|
USIM_CLASS_A = 1, // class A supported, 5V
|
|
USIM_CLASS_B = 2, // class B supported, 3V
|
|
USIM_CLASS_C = 4 // class C supported, 1.8V
|
|
}USIM_Class;
|
|
|
|
|
|
// Error detection code:
|
|
typedef enum
|
|
{
|
|
USIM_LRC = 0,
|
|
USIM_CRC = 1
|
|
}USIM_ErrorCode;
|
|
|
|
|
|
|
|
typedef enum
|
|
{
|
|
USIM_CPU_MODE = 0,
|
|
USIM_DMA_MODE = 1
|
|
}USIM_MODE;
|
|
|
|
|
|
// ATR Information:
|
|
typedef struct
|
|
{
|
|
USIM_Frequency cardClock; // the used card's clock frequency * 10,in MHz
|
|
USIM_Frequency indCardClock;// max card clk frequency, as indicated in ATR
|
|
UINT16 conversionFactor; // clock rate conversion factor, F.
|
|
UINT16 indConversionFactor; // factor value indicated by the card, Fi.
|
|
UINT8 adjustmentFactor; // baud rate adjustment factor, D = {1,2,4,8,12,16,20,32}
|
|
UINT8 indAdjustmentFactor; // factor value indicated by the card, Di.
|
|
UINT8 extraGuardTime; // Extra guardtime parameter N = [0 - 255]
|
|
BOOL modeChangeable; // 0 - card can't change mode, 1 - card can change mode
|
|
USIM_Protocol protocol; // protocol to be used in specific mode
|
|
USIM_ClockState stopState; // clock stop state
|
|
USIM_Class cardClasses; // classes of operating conditions accepted by the card
|
|
USIM_Coding convention; // coding convention
|
|
UINT8 historicBytesNumber; // number of historical bytes (0 - 15)
|
|
UINT8 historicBytes [15]; // the historical bytes
|
|
UINT8 length; // the length of the ATR (in bytes)
|
|
// Information regarding only T=0 protocol:
|
|
UINT32 workWaitingTime; // work waiting time
|
|
// Information regarding only T=1 protocol:
|
|
UINT16 charWaitingTime; // character waiting time
|
|
UINT32 blockWaitingTime; // block waiting time
|
|
UINT8 infoFieldSize; // num of info bytes that the card can receive in a block
|
|
USIM_ErrorCode errorCode; // error detection code : LRC or CRC
|
|
UINT32 wdtTime; // time in uSec of maximum of timeout
|
|
}USIM_ATRInfo;
|
|
|
|
|
|
|
|
// Configuration structure definition:
|
|
|
|
//ICAT EXPORTED STRUCT
|
|
typedef struct
|
|
{
|
|
UINT8 clockRateFactorRef; // reference to a clock rate conversion factor, FI = {0,1,2,3,4,5,6, 9,10,11,12,13}
|
|
UINT8 baudRateFactorRef; // reference to a baud rate adjustment factor, DI = {1,2,3,4,5,6, 8,9}
|
|
UINT8 extraGuardTime; // Extra guardtime parameter N = [0 - 255]
|
|
USIM_Protocol protocol; // protocol to be used in specific mode
|
|
USIM_ClockState stopState; // clock stop state
|
|
|
|
// Information regarding only T=0 protocol:
|
|
UINT32 workWaitingTime; // work waiting time
|
|
|
|
// Information regarding only T=1 protocol:
|
|
UINT16 charWaitingTime; // character waiting time
|
|
UINT32 blockWaitingTime; // block waiting time
|
|
UINT8 infoFieldSize; // num of info bytes that the card can receive in a block
|
|
|
|
}USIM_Configuration;
|
|
|
|
|
|
|
|
|
|
// Card Control Status:
|
|
//ICAT EXPORTED ENUM
|
|
typedef enum
|
|
{
|
|
USIM_CARD_REMOVED = 0,
|
|
USIM_CARD_INSERTED,
|
|
USIM_CARD_ACTIVATED,
|
|
USIM_CARD_DEACTIVATED,
|
|
|
|
// additional definitions for indicating voltage class:
|
|
USIM_CARD_ACTIVE_CLASS_A, // 5V
|
|
USIM_CARD_ACTIVE_CLASS_B, // 3V
|
|
USIM_CARD_ACTIVE_CLASS_C // 1.8V
|
|
|
|
}USIM_ControlStatus;
|
|
|
|
|
|
// Card Status:
|
|
typedef struct
|
|
{
|
|
USIM_ControlStatus controlStatus;
|
|
BOOL activeReceiver;
|
|
BOOL activeTransmitter;
|
|
}USIM_Status;
|
|
|
|
|
|
// call back function for sending a response from the USIM Driver to the Manager:
|
|
typedef void (*USIM_CardResponseNotify)(USIM_ResponseHeader * header,
|
|
UINT16 dataLength, UINT8 * data);
|
|
|
|
|
|
// call back function for notifying the Manager that the card's status has changed:
|
|
typedef void (*USIM_ControlIndication)(USIM_ControlStatus status);
|
|
|
|
/*----------- Extern definition ----------------------------------------------*/
|
|
|
|
/*----------- Global variable declarations -----------------------------------*/
|
|
|
|
/*----------- Global constant definitions ------------------------------------*/
|
|
|
|
/*----------- Global function prototypes -------------------------------------*/
|
|
USIM_ReturnCode USIMCommandSend
|
|
(USIM_Card card, USIM_CommandHeader * header, UINT8 * data);
|
|
|
|
USIM_ReturnCode USIMATRGet (USIM_Card card, USIM_ATRInfo * info);
|
|
|
|
USIM_ReturnCode USIMPhase1Init(void);
|
|
|
|
USIM_ReturnCode USIMPhase2Init(void);
|
|
|
|
SwVersion USIMVersionGet (void);
|
|
|
|
USIM_ReturnCode USIMOpen (USIM_Card card);
|
|
USIM_ReturnCode USIMClose (USIM_Card card);
|
|
|
|
USIM_ReturnCode USIMRegister (USIM_Card card,
|
|
USIM_CardResponseNotify responseFunc,
|
|
USIM_ControlIndication ctrlFunc);
|
|
|
|
USIM_ReturnCode USIMUnRegister (USIM_Card card);
|
|
|
|
USIM_ReturnCode USIMStatusGet (USIM_Card card, USIM_Status *status);
|
|
|
|
USIM_ReturnCode USIMClockStop (USIM_Card card);
|
|
|
|
void USIMRxTxModeSet ( USIM_Card card , USIM_MODE mode );
|
|
USIM_MODE USIMRxTxModeGet ( USIM_Card card );
|
|
|
|
void USIMRemove(USIM_Card card);
|
|
USIM_ReturnCode USIM_HwContReset(USIM_Card card);
|
|
#ifdef USIM_NO_ATR_PPS_DECODING
|
|
|
|
USIM_ReturnCode USIMConfigure (USIM_Card card, USIM_Configuration * config);
|
|
|
|
USIM_ReturnCode USIMReset (USIM_Card card, USIM_Class voltageClass);
|
|
|
|
USIM_ReturnCode USIMPPSSend (USIM_Card card, UINT8 length, UINT8 * data);
|
|
|
|
#endif /* USIM_NO_ATR_PPS_DECODING */
|
|
|
|
#ifndef _TAVOR_BOERNE_
|
|
//typedef UINT32 FmCallFuncType(Bool powerUpSim, Bool powerUpProtoStack);
|
|
//void USIMFlightModeReqBind(FmCallFuncType Func);
|
|
#endif
|
|
#endif /* _USIM_H_ */
|