📄 usim_drv.h
字号:
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* usim_drv.h
*
* Project:
* --------
* Maui_Software
*
* Description:
* ------------
* Header file of USIM driver
*
* Author:
* -------
* -------
*
****************************************************************************
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
#ifndef _USIM_DRV_H_
#define _USIM_DRV_H_
#ifdef __USIM_DRV__
typedef enum{
USIM_DIRECT,
USIM_INVERSE
}usim_dir_enum;
typedef enum{
PPSS = 0, // initial character 0xFF
PPS0 = 1, // format character 0x1x
PPS1 = 2, // indicate the baudrate F, D
PCK = 3, // exclusive-or PPSS to PCK should be null
PPS_LEN = 4
}usim_pts_enum;
#define usim_protocol_enum sim_protocol_phy_enum
#define usim_speed_enum sim_speed_enum
#define usim_clock_stop_enum sim_clock_stop_enum
#define usim_power_enum sim_power_enum
typedef enum{
ERR_INVALID_BLOCK,
ERR_TIMEOUT
}usim_err_enum;
typedef enum{
USIM_RESET_NEGOTIABLE, // type 1
USIM_RESET_SPECIFIC // type 2
}usim_reset_type_enum;
typedef enum{
IDLE_STATE,
ACTIVATION_STATE,
ATR_STATE,
PTS_STATE,
MAIN_CMD_READY_STATE,
CMD_TX_STATE,
//CMD_RX_HEADER_STATE,
CMD_RX_BLOCK_REC_STATE,
//CMD_RX_S_BLOCK_STATE,
CMD_RX_STATE,
CLK_STOPPING_STATE,
CLK_STOPPED_STATE,
DEACTIVATION_STATE
}usim_main_state_enum;
typedef enum{
EVENT_TX = 0x1,
EVENT_RX = 0x2,
EVENT_OV = 0x4,
EVENT_TOUT = 0x8,
EVENT_TXERR = 0x10,
EVENT_NATR = 0x20,
EVENT_OFF = 0x40,
EVENT_T0END = 0x80,
EVENT_RXERR = 0x100,
EVENT_T1END = 0x200,
EVENT_EDCERR = 0x400
}usim_event_type_enum;
typedef enum{
USIM_NO_ERROR = 0,
// expected status
USIM_WAITING_EVENT = 1, // initial wait event status
USIM_BLOCK_REC = 2, // successfully received a complete block
USIM_POWER_OFF = 3, // successfully powered off
USIM_ATR_REC = 4, // successfully reveived all ATR
USIM_S_BLOCK_REC = 5, // successfully reveived S RESP
// error status
USIM_NO_INSERT = -1,
USIM_VOLT_NOT_SUPPORT = -2,
USIM_NO_ATR = -3,
USIM_TS_INVALID = -4,
USIM_ATR_ERR = -5,
USIM_INVALID_ATR = -6,
USIM_PTS_FAIL = -7,
USIM_RX_INVALID = -8, // EDC error or parity error
USIM_BWT_TIMEOUT = -9,
USIM_DATA_ABORT = -10,
USIM_DEACTIVATED = -11,
USIM_S_BLOCK_FAIL = -12,
USIM_INVALID_WRST = -13,
USIM_GPT_TIMEOUT = -14
}usim_status_enum;
typedef enum{
USIM_CMD_READY,
I_BLOCK_RX,
I_BLOCK_TX,
I_BLOCK_M0_RX,
I_BLOCK_M0_TX,
I_BLOCK_M1_RX,
I_BLOCK_M1_TX,
R_BLOCK_RX,
R_BLOCK_TX,
S_BlOCK_REQ_RX,
S_BlOCK_REQ_TX,
S_BlOCK_RESP_RX,
S_BlOCK_RESP_TX
}usim_cmd_state_enum;
typedef enum{
T1_NAD_INDEX = 0,
T1_PCB_INDEX = 1,
T1_LEN_INDEX = 2,
T1_INF_INDEX = 3,
T1_EDC_INDEX = 4
}usim_t1_header_index_enum;
// definitions
#define SELECT_PW_RETRY 3
#define SELECT_DIR_RETRY 2
#define ATR_RETRY 3
#define INVALID_RETRY 3
#define RESYNC_RETRY 3
#define IFS_RETRY 2
#define USIM_IFSD_MAX 0xFE
#define FI_DEFAULT 372
#define DI_DEFAULT 1
#define INIT_WWT_T0 (9600+400) // etu (initial work waiting time) +400 to cover some slow card
#define TOUT_OFFSET 0x10 // apply a offset to all timeout settings (4*16 = 64 etu)
#define BGT_T1 22 // etu (block guard time)
#define NAD 0 // node address byte
#define SIM_DEFAULT_TOUT_VALUE 0x983
#define SIM_CMD_TOUT_VALUE 0x1400
// coding of PCB for I-block (0xxxxxxx)
#define PCB_I_BIT8 0x80 // I-block must be 0, others(R,S) are 1
#define PCB_I_SEQ 0x40 // sequence number
#define PCB_I_M 0x20 // chaining more data bit(M)
#define PCB_I_RFU 0x1F // RFU should be zero
// coding of PCB for R-block (100xxxxx)
#define PCB_R_N1 0x90
#define PCB_R_N0 0x80
#define PCB_R_BIT7 0x40 // R: 0, S:1, use to distinguish R-block with S-block
#define PCB_R_SEQ 0x10 // sequence number
#define PCB_R_STATUS 0x0f // 0: error free, 1:EDC or parity error, 2: other errors
#define PCB_R_STATUS_EDC_ERR 0x1
#define PCB_R_STATUS_OTHER_ERR 0x2
#define PCB_R_STATUS_OK 0x0
#define PCB_R_DEFAULT 0xe0
// coding of PCB for S-block (11xxxxxx)
#define PCB_S_DEFAULT 0xc0
#define PCB_S_RESP 0x20 // 1: a response, 0: a request
#define PCB_S_ID 0x1f
#define LEN_MIN_T1 0
#define LEN_MAX_T1 254
#define USIM_IFSC_DEFAULT 32
#define USIM_IFSD_DEFAULT 32
#define USIM_CWT_DEFAULT 8203 // (11 + 1>>13) etu
#define USIM_BWT_DEFAULT 15360 // (1<<4)*960
#define USIM_POW_CLASS_MSK 0x3f // TAi bit 1~6
#define USIM_PTS_PS1_MSK 0x10
#define USIM_PTS_PS0_T1 0x1 // select T1 protocol
#define USIM_NAD_DEFAULT 0x0
#define USIM_EVENT 0x1
#define ATR_TA1_372_5 0x11
#define ATR_TA1_372_4 0x01
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -