FreeCalypso > hg > freecalypso-sw
view gsm-fw/g23m-gsm/sim/sim.h @ 983:7166c8311b0d
tfc139 reworked to support both ARM and Thumb entry
author | Mychaela Falconia <falcon@ivan.Harhan.ORG> |
---|---|
date | Thu, 10 Dec 2015 08:07:47 +0000 |
parents | ec6e503c1fc7 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | Project : GSM-PS (6302) | Modul : SIM +----------------------------------------------------------------------------- | Copyright 2002 Texas Instruments Berlin, AG | All rights reserved. | | This file is confidential and a trade secret of Texas | Instruments Berlin, AG | The receipt of or possession of this file does not convey | any rights to reproduce or disclose its contents or to | manufacture, use, or sell anything it may describe, in | whole, or in part, without the specific written consent of | Texas Instruments Berlin, AG. +----------------------------------------------------------------------------- | Purpose : Definitions for the Protocol Stack Entity | SIM Application. +----------------------------------------------------------------------------- */ #ifndef SIM_H #define SIM_H #include <stdlib.h> #include <stdio.h> #ifdef TI_PS_HCOMM_CHANGE #include "cl_hComm_handle.h" #endif /*==== CONSTANTS ==================================================*/ #if defined (_SIMULATION_) #define SIM_TOOLKIT #endif #ifdef SIM_TOOLKIT #if defined (FF_WAP) OR defined (_SIMULATION_) #define FF_SAT_C #endif /* FF_WAP */ #endif /* SIM_TOOLKIT */ #ifdef FF_SAT_E #include "dti.h" #endif #ifdef TI_PS_OP_VSI_NO_CALL_ID #define TIMER_START(C,I,T) vsi_t_start_nc(I,T) #define TIMER_PSTART(C,I,T,R) vsi_t_pstart_nc(I,T,R) #define TIMER_STOP(C,I) vsi_t_stop_nc(I) #define TIMER_STATUS(C,I,T) vsi_t_status_nc(I,T) #define SUSPEND_SELF(C,T) vsi_t_sleep_nc(T) #define SYSTEM_TIME(C,T) vsi_t_time_nc(T) #else /* TI_PS_OP_VSI_NO_CALL_ID */ #define TIMER_START(C,I,T) vsi_t_start(C,I,T) #define TIMER_PSTART(C,I,T,R) vsi_t_pstart(C,I,T,R) #define TIMER_STOP(C,I) vsi_t_stop(C,I) #define TIMER_STATUS(C,I,T) vsi_t_status(C,I,T) #define SUSPEND_SELF(C,T) vsi_t_sleep(C,T) #define SYSTEM_TIME(C,T) vsi_t_time(C,T) #endif /* TI_PS_OP_VSI_NO_CALL_ID */ /* * To read 255 bytes the SIM driver shall not append SW1, SW2 * to the end of the data. To be backward compatible, the * following define is used. One of both definitions must be used * depending on the SIM driver capabilities. */ //#define SIM_TI_DRV_X_BYTES 2 // SIM driver adds SW1, SW2 to response! #define SIM_TI_DRV_X_BYTES 0 // SIM driver does not add SW1, SW2 to response! #define NO_ALLOCATED 0 #define ALLOCATED 1 #define ALLOCATED_AND_DEACTIVATED 2 #define ALLOCATED_AND_ACTIVATED 3 #define NO_BDN_SIM 0 #define BDN_ENABLED 1 #define BDN_DISABLED 2 #define NO_FDN_SIM 0 #define FDN_ENABLED 1 #define FDN_DISABLED 2 #define ABSOLUT_READING 0 #define SIM_TPDU_HEADER_LEN 5 /* parameterblocks */ /* #define MAX_IMSI 9 moved to SAP SIM */ #define MAX_KC_N (MAX_KC+1) /* = 9 (SAP SIM) */ /* #define MAX_PREF_PLMN 96 moved to SAP SIM */ #define MAX_BCCH_INFO 16 #define MAX_ACCESS_CONTROL 2 #define MAX_FORB_PLMN 12 #define MAX_LOC_INFO 11 #define MAX_SIM_CHARGE 2 #define MAX_OP_MODE 1 #define MAX_PIN 8 #define MAX_UNBLOCKING_KEY 8 #define MAX_ICC_IDENTIF 10 #define VFY_CHV1 1 // verify PIN 1 #define VFY_CHV2 2 // verify PIN 2 #define UNBL_CHV1 0 // unblock PIN 1 #define UNBL_CHV2 2 // unblock PIN 2 /* * Access conditions */ #define LRP_NONE 0 #define LRP_PIN_1 (PHASE_2_PIN_1) // 1 #define LRP_PIN_2 (PHASE_2_PIN_2) // 2 #define LRP_PUK_1 (PHASE_2_PUK_1) // 3 #define LRP_PUK_2 (PHASE_2_PUK_2) // 4 #define LRP_NEVER 5 #define PIN_1 LRP_PIN_1 #define PIN_2 LRP_PIN_2 #define ALWAYS LRP_NONE #define NEVER 0xF #define PIN_1_OR_2 10 #define ACCESS_READ 0 #define ACCESS_UPDATE 1 #define ACCESS_INCREASE 2 #define ACCESS_REHABILITATE 3 #define ACCESS_INVALIDATE 4 #define LINEAR_FIXED 1 #define SIM_TIMER 0 /* #ifdef SIM_TOOLKIT #define MAX_SAT_TIMER 8 #define NUM_OF_SIM_TIMERS (MAX_SAT_TIMER + 1) #else #define NUM_OF_SIM_TIMERS 1 #endif */ #ifdef FF_SAT_E /* * timer definitions * index 0 app_sim_timeout() * index 1..8 SAT timer * index 9 BIP timer */ #define MAX_SAT_TIMER 8 #define NUM_OF_SIM_TIMERS (MAX_SAT_TIMER + 2) #define SIM_BIP_TIMER (MAX_SAT_TIMER + 1) /* * states of DTI connection */ #define SIM_DTI_CONNECTION_CLOSED 1 #define SIM_DTI_CONNECTION_BIND 2 #define SIM_DTI_CONNECTION_SETUP 3 #define SIM_DTI_CONNECTION_OPEN 4 /* * states of DTI RX direction */ #define SIM_DTI_RX_IDLE 5 #define SIM_DTI_RX_READY 6 /* * states of DTI TX direction */ #define SIM_DTI_TX_IDLE 7 #define SIM_DTI_TX_READY 8 /* * states of BIP channel */ #define SIM_BIP_CLOSED 9 #define SIM_BIP_OPEN 10 #define SIM_BIP_CONNECTED 11 /* * states of BIP RX direction */ #define SIM_BIP_RX_IDLE 12 #define SIM_BIP_RX_DATA 13 /* * states of BIP TX direction */ #define SIM_BIP_TX_IDLE 14 #define SIM_BIP_TX_STORE 15 #define SIM_BIP_TX_SEND 16 /* * states of BIP release timer */ #define SIM_BIP_TIMER_DISCONNECTED 18 #define SIM_BIP_TIMER_NOT_USED 19 #define SIM_BIP_TIMER_SUSPENDED 20 #define SIM_BIP_TIMER_STOPPED 21 #define SIM_BIP_TIMER_START 22 /* * CCD analysis states */ #define SIM_CCD_OK 23 #define SIM_CCD_RETURN 24 #define SIM_CCD_DISCARD 25 /* * initial state for connection qualifier (no status change requested) */ #define SIM_DTI_CONN_OFF 0 /* * maximum nuber of bytes in Channel Data element in Termina Response message * message structure: * Command Details: 5 bytes * Device Identities: 4 bytes * Result: 3 bytes (without additional result) * Channel Data: 3 bytes overhead * Channel Data Length: 3 bytes * --------- * 18 bytes * maximum length for any data sent to SIM is 255! */ #define SIM_TERM_RESP_MAX_CHANNEL_DATA (255 - 18) /* * transmit descriptor size */ #define SIM_BIP_TX_DESC_SIZE (100 - sizeof(T_desc2)) /* * qualifier bits of SEND DATA message */ #define SIM_QLF_SEND_DATA_1 0x01 /* * Definition whether a shared CCD buffer shall be used */ #define SHARED_CCD_BUF #elif defined (SIM_TOOLKIT) /* else if FF_SAT_E */ #define MAX_SAT_TIMER 8 #define NUM_OF_SIM_TIMERS (MAX_SAT_TIMER + 2) #else /* SIM_TOOLKIT */ #define NUM_OF_SIM_TIMERS 2 #endif #define SLEEP_TIMER (NUM_OF_SIM_TIMERS - 1) #define MAX_STK_LENGTH 80 #ifdef TI_PS_UICC_CHIPSET_15 #define UICC_READER_ID 0x01 #endif /* These are the only two peer second level standard defined DF's supported now. When more second level DF's are getting handled, this macro needs to be adapted */ #define SIM_IS_PEER_LEVEL2_DF(df1,df2) \ ((df1 EQ SIM_DF_MEXE AND df2 EQ SIM_DF_SOLSA) || \ (df1 EQ SIM_DF_SOLSA AND df2 EQ SIM_DF_MEXE) ) /* These are the only three second level standard defined DF's supported now. When more second level DF's are getting handled, this macro needs to be adapted */ #define SIM_IS_DF_LEVEL2_UNDER_DF_LEVEL1(df_level2, df_level1) \ ((df_level2 EQ SIM_DF_MEXE AND \ (df_level1 EQ SIM_DF_GSM || df_level1 EQ SIM_DF_1800)) || \ (df_level2 EQ SIM_DF_SOLSA AND \ (df_level1 EQ SIM_DF_GSM || df_level1 EQ SIM_DF_1800)) || \ (df_level2 EQ SIM_DF_GRAPHICS AND df_level1 EQ SIM_DF_TELECOM) ) #define SIM_SYNC_AWAIT_MM_READ 1 #define SIM_SYNC_AWAIT_MMI_READ 2 /* +********************************************************************+ | Moved from sim_stk.c - for CQ 34109 under feature flag SIM_TOOLKIT | +********************************************************************+ */ #ifdef SIM_TOOLKIT #define STK_REFRESH 0x01 #define STK_MORE_TIME 0x02 #define STK_POLL_INTERVALL 0x03 #define STK_POLLING_OFF 0x04 #define STK_SETUP_EVENT_LIST 0x05 #define STK_SET_UP_CALL 0x10 #define STK_SEND_SS 0x11 #define STK_SEND_USSD 0x12 #define STK_SEND_SMS 0x13 #define STK_SEND_DTMF 0x14 #define STK_LAUNCH_BROWSER 0x15 #define STK_PLAY_TONE 0x20 #define STK_DISPLAY_TEXT 0x21 #define STK_GET_INKEY 0x22 #define STK_GET_INPUT 0x23 #define STK_SELECT_ITEM 0x24 #define STK_SET_UP_MENU 0x25 #define STK_PROVIDE_LOCAL_INFO 0x26 #define STK_TIMER_MANAGEMENT 0x27 #define STK_SETUP_IDLE_TEXT 0x28 #define STK_RUN_AT_CMD 0x34 #define STK_LANGUAGE_NOTIFICATION 0x35 #ifdef FF_SAT_E #define STK_OPEN_CHANNEL 0x40 #define STK_CLOSE_CHANNEL 0x41 #define STK_RECEIVE_DATA 0x42 #define STK_SEND_DATA 0x43 #define STK_GET_CHANNEL_STAT 0x44 #endif /* FF_SAT_E */ #define STK_COMPREHENSION_REQUIRED 0x80 #define STK_COMMAND_DETAILS_TAG 0x01 #define STK_COMMAND_DETAILS_LEN 3 #define STK_DEVICE_IDENTITY_TAG 0x02 #define STK_DEVICE_IDENTITY_LEN 2 #define STK_RESULT_TAG 0x03 #define STK_DURATION_TAG 0x04 #define STK_DURATION_LEN 2 #define STK_ALPHA_IDENTITY_TAG 0x05 #define STK_ALPHA_IDENTITY_LEN 1 #define STK_FILE_LIST_TAG 0x12 #define STK_FILE_LIST_LEN 1 #define STK_EVENT_LIST_TAG 0x19 #define STK_EVENT_LIST_LEN 1 #define STK_ICON_IDENTITY_TAG 0x1E #define STK_ICON_IDENTITY_LEN 2 #define STK_TIMER_ID_TAG 0x24 #define STK_TIMER_ID_LEN 1 #define STK_TIMER_VALUE_TAG 0x25 #define STK_TIMER_VALUE_LEN 3 #define STK_CHANNEL_DATA_TAG 0x36 #define STK_CHANNEL_DATA_LEN 1 #define STK_CHANNEL_DATA_LGTH_TAG 0x37 #define STK_CHANNEL_DATA_LGTH_LEN 1 #define STK_PROACTIVE_SIM_COMMAND_TAG 0xD0 #define STK_TIMER_EXPIRATION_TAG 0xD7 #define STK_RES_SUCCESS 0x00 #define STK_RES_SUCC_PART_COMPR 0x01 #define STK_RES_SUCC_MISS_INFO 0x02 #define STK_RES_SUCC_ADD_EF_READ 0x03 #define STK_RES_SUCC_SESSION_END 0x10 #define STK_RES_BUSY_ME 0x20 #define STK_RES_BUSY_NW 0x21 #define STK_RES_BUSY_TIMER_STATE 0x24 #define STK_RES_ERR_NO_SUPPORT 0x30 #define STK_RES_ERR_CMD_TYPE 0x31 #define STK_RES_ERR_CMD_DATA 0x32 #define STK_RES_ERR_CMD_NR 0x33 #define STK_RES_ERR_MISS_VALUE 0x36 #define STK_RES_EXT_DEF 0x00 #define STK_RES_EXT_BUSY_CALL 0x02 #define STK_RES_EXT_NO_SERVICE 0x04 #define STK_RES_SUCC_LIMITED_SERVICE 0x06 #define STK_MAX_EXP_TAG 12 /* >= any max_tag entry */ #define item_of(_x_) (sizeof(_x_)/sizeof(_x_[0])) #define BCD2INT(_x_) ((_x_&0xF)*10+(_x_>>4)) #define INT2BCD(_x_) (((_x_%10)<<4)|((_x_/10)&0xF)) #define STK_TP12_CLASS_E (SAT_TP12_OPEN_CHANNEL | SAT_TP12_CLOSE_CHANNEL\ | SAT_TP12_RECEIVE_DATA | SAT_TP12_SEND_DATA\ | SAT_TP12_GET_CHANNEL_STAT) /* * Added for the purpose of checking service mode got from Common Library */ #define NO_SERVICE (0x0) /* no service available */ #define LIMITED_SERVICE (0x1) /* Limited service available */ #define FULL_SERVICE (0x2) /* Full service available */ #endif /* SIM_TOOLKIT */ #ifdef GPRS /* * provision of PCM definition as long as they are missing in L1 */ #ifndef EF_LOCGPRS_ID #define EF_LOCGPRS_ID "LOCGPRS" /* Location Inf. (GPRS) */ typedef struct EFlocgprs /* GPRS Location information */ { UBYTE ptmsi[4]; UBYTE ptmsi_signature[3]; UBYTE rai[6]; UBYTE ra_status; } EF_LOCGPRS; #define SIZE_EF_LOCGPRS sizeof (EF_LOCGPRS) #define NR_EF_LOCGPRS 1 #endif #ifndef EF_KCGPRS_ID #define EF_KCGPRS_ID "KCGPRS" /* Ciphering Key (GPRS) */ typedef struct EFkcgprs /* GPRS Ciphering key */ { UBYTE kc[8]; UBYTE cksn; } EF_KCGPRS; #define SIZE_EF_KCGPRS sizeof (EF_KCGPRS) #define NR_EF_KCGPRS 1 #endif #ifndef EF_IMSIGPRS_ID #define EF_IMSIGPRS_ID "IMSIGPRS" /* IMSI check for GPRS */ typedef struct EFimsigprs /* International Subscriber Id */ { UBYTE len; UBYTE IMSI[8]; } EF_IMSIGPRS; #define SIZE_EF_IMSIGPRS sizeof (EF_IMSIGPRS) #define NR_EF_IMSIGPRS 1 #endif #endif /*==== TYPES ======================================================*/ /* CHIPCARD RESPONSES */ typedef struct { UBYTE filler1[4]; UBYTE fileid[2]; UBYTE filler1a[6]; UBYTE length; UBYTE characteristics; UBYTE filler2[4]; UBYTE pinstatus; UBYTE unbstatus; UBYTE pin2status; UBYTE unb2status; UBYTE sw1, sw2; // needed by SIM_GetResponse() } T_DIR_STATUS; #define SIM_MIN_DMF_ST_LEN 22 // Mimimum length for response of SELECT MF/DF typedef struct { UBYTE filler1[2]; UBYTE field_size [2]; UBYTE filler2[4]; UBYTE access_1; UBYTE access_2; UBYTE access_3; UBYTE file_status; UBYTE filler4; UBYTE field_type; UBYTE record_length; UBYTE sw1, sw2; // needed by SIM_GetResponse() } T_FIELD_STATUS; #define SIM_MIN_EF_ST_LEN 15 // Minimum length for response of SELECT EF typedef struct { UBYTE sres[4]; UBYTE kc[8]; UBYTE sw1, sw2; // needed by SIM_GetResponse() } T_SRES_KC; #define SIM_GSM_ALG_LEN 12 // Minimum length for response of RUN GSM ALG typedef struct { BYTE res_incr[3]; } T_RES_INCR; typedef struct { // format of SAT timer value, given in UBYTE hour; // hours, UBYTE minute; // minutes and UBYTE second; // seconds. Coding as for SCTS (GSM 03.40) UBYTE active; // TRUE, if timer is running } T_SAT_TIMER; #ifdef FF_SAT_E /* * struct to transfer IP addresses and UDP ports between UDP and SIM */ typedef struct { UBYTE src_ip[4]; /* source IP address in network byte order */ UBYTE des_ip[4]; /* destination IP address in network byte order */ UBYTE src_port[2]; /* source UDP port in network byte order */ UBYTE des_port[2]; /* destination UDP port in network byte order */ } T_SRC_DES; #endif /* FF_SAT_E */ /* * Used for requesting location information from RR */ typedef struct { UBYTE stk_class; UBYTE stk_subclass; UBYTE stk_type; UBYTE stk_length; UBYTE stk_parameter [MAX_STK_LENGTH]; } stk_data_type; #if defined (SIM_TOOLKIT) typedef struct { UBYTE response[256]; stk_data_type stk_data; } T_STK_POLL_DATA; /* * Used for the processing of SIM Refresh in stk_proactive_polling() and * stk_sim_refresh_user_res() */ typedef struct { UBYTE *tag2; /* File List. 3rd Tag in STK command */ SHORT fl_len; /* File List Length */ UBYTE *p_cmd; /* STK command */ SHORT cmd_len; /* STK command length */ UBYTE res_code [2] ; T_SIM_TOOLKIT_IND *sig_ptr; }T_CONTEXT_SWITCH; #endif typedef struct { // General SIM Variables ULONG flags; // contains several flags for internal handling USHORT act_directory; // last selected directory USHORT act_field; // last selected elementary field T_TIME status_time; // status poll time USHORT act_length; // actual file or record length USHORT sim_data_len; // response data len USHORT dir_status_len; // size of directory status information USHORT remove_error; // provides error code for SIM Remove UBYTE sim_phase; // sim card phase UBYTE last_requested_pin_no; // last requested pin number UBYTE act_access; // actual access condition UBYTE max_record; // records of actual file UBYTE field_type; // of the last selected record UBYTE sw1; // last status code SW1 from SIM UBYTE sw2; // last status code SW2 from SIM // SIM Toolkit Variables #ifdef SIM_TOOLKIT UBYTE sync_awaited; /* Stores entities from which SYNC_REQ is awaited */ UBYTE file_change_resp; // tracks response to FILE CHANGE T_CONTEXT_SWITCH *context_switch_ptr; // Allows handling of SIM Refresh from different threads SHORT proactive_sim_data_len; USHORT stk_resp_len; UBYTE stk_response[16]; // save TERMINAL RESPONSE UBYTE stk_profile[MAX_STK_PRF]; UBYTE trmst[MAX_TRMST]; // Terminal Support Table USHORT cell_identity; T_loc_info location_info; T_SAT_TIMER timer[MAX_SAT_TIMER]; UBYTE sat_session; /* SAT session started */ UBYTE ext_sat_cmd; /* indicator for external SAT commands */ UBYTE term_resp_sent; /* indicator if Terminal Response was sent */ UBYTE idle_polling; /* poll SIM in idle mode */ UBYTE chk_sat_avail; /* check SAT command to be fetched */ #ifdef FF_SAT_E UBYTE dti_connection_state; /* state of DTI connection */ UBYTE dti_rx_state; /* state of DTI reception */ UBYTE dti_tx_state; /* state of DTI transmission */ UBYTE event_data_avail; /* Data available event */ UBYTE bip_ch_id; /* BIP channel identifier */ UBYTE bip_suspend; /* BIP suspension state */ UBYTE bip_state; /* state of BIP channel */ UBYTE bip_rx_state; /* state of BIP reception */ UBYTE bip_tx_state; /* state of BIP transmission */ UBYTE bip_timer_state; /* state of BIP release timer */ UBYTE bip_general_result; /* general result code for on demand link */ UBYTE bip_add_info_result; /* additional information for on demand link */ UBYTE con_type; /* connection type */ USHORT received_data_pos; /* start of not yet delivered data */ DTI_HANDLE hDTI; /* DTILIB handle */ T_TIME bip_release_time; /* BIP release time */ ULONG link_id; /* DTI link identifer */ T_desc_list2 data_to_send; /* DTI data to send */ T_desc_list2 prev_data_to_send; /* last values of DTI data to send */ T_desc_list2 received_data; /* received DTI data */ T_SRC_DES udp_parameters; /* ports and IP addresses for UDP */ T_SIM_DTI_REQ* sim_dti_req; /* storage of SIM_DTI_REQ primitive */ T_SIM_BIP_REQ* sim_bip_req; /* storage of SIM_BIP_REQ primitive */ T_SIM_BIP_CONFIG_REQ* sim_bip_config_req; /* storage of SIM_BIP_CONFIG_REQ primitive */ T_cmd_details bip_rx_cmd_details; /* command details for RX */ T_cmd_details bip_tx_cmd_details; /* command details for TX */ BUF_cmd_prms bip_cmd_prms; /* parameter buffer for RX and TX */ #endif /* FF_SAT_E */ UBYTE cust_mode; /* Customer mode, rcvd in SIM_ACTIVATE_REQ */ UBYTE user_confirmation_expected; /* confirmation for SIM REFRESH expected */ #endif /* SIM_TOOLKIT */ // Windows Simulation Variables #if defined (_SIMULATION_) USHORT mode; #ifdef FF_DUAL_SIM UBYTE simu_sim_num; #endif /*FF_DUAL_SIM*/ #endif /* _SIMULATION_ */ #ifdef FF_DUAL_SIM UBYTE SIM_Selection; USHORT sim_num; #endif /*FF_DUAL_SIM*/ } T_SIM_DATA; typedef struct { UBYTE invers; UBYTE atr_size; UBYTE atr_data[MAX_SIM_ATR]; } T_SIM_CARD; #if defined (SIM_TOOLKIT) typedef struct // simple TERMINAL RESPONSE without parameters { UBYTE cmd_tag; // command details tag UBYTE cmd_len; // command details length = 3 UBYTE cmd_nr; // command reference number UBYTE cmd_type; // command type UBYTE cmd_qulf; // command qualifier UBYTE dev_tag; // device identities tag UBYTE dev_len; // device identities length = 2 UBYTE dev_src; // source device identity UBYTE dev_dest; // destination device identity UBYTE res_tag; // result length tag UBYTE res_len; // result length UBYTE res_gnrl; // general result UBYTE res_add_info[1]; // additional information on result } T_SIM_TRSP_SIMPLE; #define SAT_TRSP_HEADER 9 #define SAT_TRSP_MIN_RES 12 #endif /* * FLAGS * * The SIM entity contains several flags. To save RAM all flags * are handled in a bit array. * * The following Macros are used * * SIM_SET_FLAG (bit) sets the corresponding bit * SIM_CLEAR_FLAG (bit) clears the corresponding bit * SIM_IS_FLAG_SET (bit) checks whether the corresponding bit is set * SIM_IS_FLAG_CLEARED (bit) checks whether the corresponding bit is cleared * */ #define SIM_SET_FLAG(bit) (sim_data.flags |= (1UL<<bit)) #define SIM_CLEAR_FLAG(bit) (sim_data.flags &= ~(1UL<<bit)) #define SIM_IS_FLAG_SET(bit) (sim_data.flags & (1UL<<bit)) #define SIM_IS_FLAG_CLEARED(bit) ((sim_data.flags & (1UL<<bit)) EQ 0) /* * The following flags are defined: * * ADN_SUPPORT_BY_SIM (bit 0) * 1 The current SIM supports ADN * 0 The current SIM doesn't support ADN */ #define ADN_SUPPORT_BY_SIM 0 /* * FDN_SUPPORT_BY_SIM (bit 1) * 1 The current SIM supports FDN * 0 The current SIM doesn't support FDN */ #define FDN_SUPPORT_BY_SIM 1 /* * BDN_SUPPORT_BY_SIM (bit 2) * 1 The current SIM supports BDN * 0 The current SIM doesn't support BDN */ #define BDN_SUPPORT_BY_SIM 2 /* * FDN_SUPPORT_BY_MMI (bit 3) * 1 The current MMI supports FDN * 0 The current MMI doesn't support FDN */ #define FDN_SUPPORT_BY_MMI 3 /* * BDN_SUPPORT_BY_SIM (bit 4) * 1 The current MMI supports BDN * 0 The current MMI doesn't support BDN */ #define BDN_SUPPORT_BY_MMI 4 /* * CC_WITH_STK (bit 5) * 1 The current MMI supports Call Control with SIM Toolkit * 0 The current MMI supports Call Control with SIM Toolkit */ #define CC_WITH_STK 5 /* * SERVICE_2_SUPPORT (bit 6) * 1 The current SIM supports service 2 (FDN) * 0 The current SIM supports service 2 (FDN) */ #define SERVICE_2_SUPPORT 6 /* * SERVICE_3_SUPPORT (bit 7) * 1 The current SIM supports service 3 (ADN) * 0 The current SIM supports service 3 (ADN) */ #define SERVICE_3_SUPPORT 7 /* * SERVICE_4_SUPPORT (bit 8) * 1 The current SIM supports service 4 (SMS Status) * 0 The current SIM supports service 4 (SMS Status) */ #define SERVICE_4_SUPPORT 8 /* * SERVICE_7_SUPPORT (bit 9) * 1 The current SIM supports service 7 (Preferred PLMN) * 0 The current SIM supports service 7 (Preferred PLMN) */ #define SERVICE_7_SUPPORT 9 /* * SERVICE_26_SUPPORT (bit 10) * 1 The current SIM supports service 26 (Data Download via SMS) * 0 The current SIM supports service 26 (Data Download via SMS) */ #define SERVICE_26_SUPPORT 10 /* * SERVICE_31_SUPPORT (bit 11) * 1 The current SIM supports service 31 (BDN) * 0 The current SIM supports service 31 (BDN) */ #define SERVICE_31_SUPPORT 11 /* * GSM_DATAFIELD (bit 12) * 1 The initial directory is DF 900 * 0 The initial directory is DF 1800 */ #define GSM_DATAFIELD 12 /* * SIM_INSERT (bit 13) * 1 SIM is inserted * 0 SIM is not inserted */ #define SIM_INSERT 13 /* * MM_KNOWS_FROM_SIM (bit 14) * 1 MM knows from the SIM card content * 0 MM doesn't know from the SIM card content */ #define MM_KNOWS_FROM_SIM 14 /* * SIM_PIN_FLAG (bit 15) * 1 PIN entering is needed * 0 PIN entering is not needed */ #define SIM_PIN_FLAG 15 /* * PRO_ACTIVE_SIM (bit 16) * 1 The current SIM supports SIM Toolkit * 0 The current SIM doesn't support SIM Toolkit */ #define PRO_ACTIVE_SIM 16 /* * ACTIVATION_STARTED (bit 17) * 1 Activation started by MMI * 0 Activation started by SIM driver */ #define ACTIVATION_STARTED 17 /* * CALL_ACTIVE (bit 18) * 1 A call is active * 0 No call is active */ #define CALL_ACTIVE 18 /* * SERVICE_1_SUPPORT (bit 19) * 1 The current SIM supports service 1 (CHV1 disabling) * 0 The current SIM doesn't support service 1 */ #define SERVICE_1_SUPPORT 19 /* * SERVICE_35_SUPPORT (bit 20) * 1 The current SIM supports service 35 (SM Status Report Storage) * 0 The current SIM doesn't support service 35 */ #define SERVICE_35_SUPPORT 20 /* * SERVICE_39_SUPPORT (bit 21) * 1 Image files (icons) may exist on the SIM * 0 no Image files exist on the SIM */ #define DF_GRAPHICS_EXISTENT 21 /* * SERVICE_40_SUPPORT (bit 21) * 1 SOLSA files may exist on the SIM * 0 no SOLSA files exist on the SIM */ #define DF_SOLSA_EXISTENT 22 /* * SERVICE_38_SUPPORT (bit 23) * 1 The current SIM supports service 38 (GPRS Storage) * 0 The current SIM doesn't support service X */ #define SERVICE_38_SUPPORT 23 #ifdef REL99 /* * SERVICE_43_SUPPORT (bit 26) * 1 The current SIM supports service 43 (user controlled PLMN Selector with Access Technology) * 0 The current SIM supports service 43 (user controlled PLMN Selector with Access Technology) */ #define SERVICE_43_SUPPORT 26 /* * SERVICE_44_SUPPORT (bit 27) * 1 The current SIM supports service 44 (Operator controlled PLMN Selector with Access Technology) * 0 The current SIM supports service 44 (Operator controlled PLMN Selector with Access Technology) */ #define SERVICE_44_SUPPORT 27 #endif /* REL99 */ /* * SERVICE_41_SUPPORT (bit 22) * 1 ORANGE files may exist on the SIM * 0 no ORANGE files exist on the SIM */ #define DF_ORANGE_EXISTENT 25 /* * Handling of SIM retry failure * 1 SIM driver cannot recover from a communication problem even * after several retries of the last SIM command; SIM reset is * required * 0 normal */ #define DRV_FAILED_RETRY 29 /* * Handling of Poll Interval * 1 MS uses Test SIM or Test Network, Polling not restarted * 0 normal, the last SIM access of any prcedure restarts Polling * Setting 1 is compliant with test case 27.22.4.6 of GSM 11.10-4, * Setting 0 is compliant with clause 11.2.1/11.2.8 in GSM 11.11 */ #define TEST_MODE_POLLING 30 /* * Recognition of Test SIM * 1 Bit 8 of Byte 1 of EF(AD) indicates a Test SIM * 0 Bit 8 of Byte 1 of EF(AD) does not indicate a Test SIM * This can be used to control the behaviour of the SIM Entity */ #define TEST_SIM_INSERTED 31 /*==== EXPORT =====================================================*/ #ifdef FF_SAT_E /* * CCD decode buffer */ #ifdef OPTION_MULTITHREAD #define _decodedMsg _ENTITY_PREFIXED(_decodedMsg) #endif /* OPTION_MULTITHREAD */ #ifdef SHARED_CCD_BUF #define CCD_START _decodedMsg = ccd_begin(); #define CCD_END ccd_end(); #else /* SHARED_CCD_BUF */ #define CCD_START #define CCD_END #endif /* else SHARED_CCD_BUF */ #ifdef SIM_PEI_C #ifdef SHARED_CCD_BUF GLOBAL UBYTE* _decodedMsg; #else /* SHARED_CCD_BUF */ GLOBAL UBYTE _decodedMsg[MAX_MSTRUCT_LEN_SAT]; #endif /* else SHARED_CCD_BUF */ #else /* SIM_PEI_C */ #ifdef SHARED_CCD_BUF EXTERN UBYTE* _decodedMsg; #else /* SHARED_CCD_BUF */ EXTERN UBYTE _decodedMsg[MAX_MSTRUCT_LEN_SAT]; #endif /* else SHARED_CCD_BUF */ #endif /* else SIM_PEI_C */ #endif /* FF_SAT_E */ /* * Prototypes SIM Driver */ GLOBAL void SIM_Init (void (*insert)(T_SIM_CARD * p_atr), void (*remove)(void)); GLOBAL void SIM_Initialize (void); GLOBAL USHORT SIM_Register (void (*insert)(T_SIM_CARD * p_atr), void (*remove)(void)); GLOBAL USHORT SIM_Reset (T_SIM_CARD * p_atr); #ifdef _SIMULATION_ #define SIM_Restart SIM_Reset #else GLOBAL USHORT SIM_Restart (T_SIM_CARD * p_atr); #endif GLOBAL void SIM_PowerOff (void); #ifdef FF_DUAL_SIM GLOBAL USHORT SIM_SwitchDualSIM (UBYTE sim_num); GLOBAL USHORT SIM_GetSIM (void); #endif /*FF_DUAL_SIM*/ GLOBAL USHORT SIM_ChangeCHV (UBYTE * result, UBYTE * oldCHV, UBYTE * newCHV, UBYTE chvType, USHORT * size); GLOBAL USHORT SIM_DisableCHV (UBYTE * result, UBYTE * CHV, USHORT * size); GLOBAL USHORT SIM_EnableCHV (UBYTE * result, UBYTE * CHV, USHORT * size); GLOBAL USHORT SIM_GetResponse (UBYTE * result, USHORT len, USHORT * size); GLOBAL USHORT SIM_Increase (UBYTE * result, UBYTE * dat, USHORT * size); GLOBAL USHORT SIM_Invalidate (UBYTE * result, USHORT * size); GLOBAL USHORT SIM_ReadBinary (UBYTE * result, USHORT offset, USHORT len, USHORT * size); GLOBAL USHORT SIM_ReadRecord (UBYTE * result, UBYTE mode, UBYTE recNum, USHORT len, USHORT * size); GLOBAL USHORT SIM_Rehabilitate (UBYTE * result, USHORT * size); GLOBAL USHORT SIM_RunGSMAlgo (UBYTE * result, UBYTE * rand, USHORT * size); GLOBAL USHORT SIM_Select (USHORT id, UBYTE * dat, USHORT * size); GLOBAL USHORT SIM_Status (UBYTE * result, USHORT * size); GLOBAL USHORT SIM_Status_Extended (UBYTE * result, USHORT len, USHORT * size); GLOBAL USHORT SIM_UnblockCHV (UBYTE * result, UBYTE * unblockCHV, UBYTE * newCHV, UBYTE chvType, USHORT * size); GLOBAL USHORT SIM_UpdateBinary (UBYTE * result, UBYTE * dat, USHORT offset, USHORT len, USHORT * size); GLOBAL USHORT SIM_UpdateRecord (UBYTE * result, UBYTE * dat, UBYTE mode, UBYTE recNum, USHORT len, USHORT * size); GLOBAL USHORT SIM_VerifyCHV (UBYTE * result, UBYTE * chv, UBYTE chvType, USHORT * size); GLOBAL USHORT SIM_TerminalResponse (UBYTE * result, UBYTE * dat, USHORT len, USHORT * size); GLOBAL USHORT SIM_TerminalProfile (UBYTE * result, UBYTE * data, USHORT length, USHORT * size); GLOBAL USHORT SIM_Fetch (UBYTE * result, USHORT length, USHORT * size); GLOBAL USHORT SIM_Envelope (UBYTE * result, UBYTE * dat, USHORT len, USHORT * size); GLOBAL USHORT SIM_XchTPDU (UBYTE * dat, USHORT trxLen, UBYTE * result, USHORT rcvLen, USHORT * rcvSize); GLOBAL void SIM_lock_cr17689(void); /* force driver version supporting ATR provision */ /* * Prototypes Wrapping Functions */ GLOBAL UBYTE FKT_check_pin_count (UBYTE count); GLOBAL USHORT FKT_convert_error (USHORT sw1sw2, USHORT size); GLOBAL USHORT FKT_ChangeCHV (UBYTE * old_pin, UBYTE * new_pin, UBYTE pin_id); GLOBAL USHORT FKT_DisableCHV (UBYTE * pin); GLOBAL USHORT FKT_EnableCHV (UBYTE * pin); #ifndef TI_PS_UICC_CHIPSET_15 GLOBAL USHORT FKT_GetResponse (UBYTE * data, USHORT len); #endif GLOBAL USHORT FKT_Increase (UBYTE * data); GLOBAL USHORT FKT_Invalidate (void); GLOBAL USHORT FKT_ReadBinary (UBYTE * data, USHORT offset, USHORT len); GLOBAL USHORT FKT_ReadRecord (UBYTE * data, UBYTE mode, USHORT record, USHORT length); GLOBAL USHORT FKT_Rehabilitate (void); GLOBAL USHORT FKT_RunGSMAlgo (UBYTE * rand, UBYTE * data, USHORT len); GLOBAL USHORT FKT_Select (USHORT id, BOOL path_info_present, T_path_info * path_info_ptr, UBYTE * data, USHORT len); GLOBAL USHORT FKT_UnblockCHV (UBYTE * unblockCHV, UBYTE * new_CHV, UBYTE chvType); GLOBAL USHORT FKT_UpdateBinary (UBYTE * data, USHORT length, USHORT offset); GLOBAL USHORT FKT_UpdateRecord (UBYTE * data, USHORT length, UBYTE mode, USHORT record); GLOBAL USHORT FKT_VerifyCHV (UBYTE * pin, UBYTE pin_id); GLOBAL USHORT FKT_Status (UBYTE * pin_cnt, UBYTE * pin2_cnt, UBYTE * puk_cnt, UBYTE * puk2_cnt); GLOBAL USHORT FKT_TerminalResponse (UBYTE * data, USHORT length); GLOBAL USHORT FKT_TerminalProfile (UBYTE * data, USHORT length); GLOBAL USHORT FKT_Fetch (UBYTE * cmd, USHORT length); GLOBAL USHORT FKT_Envelope (UBYTE * data_out, UBYTE * data_in, USHORT in_length, USHORT out_length); /* * Prototypes Application */ GLOBAL void app_init_sim_data (void); GLOBAL void app_sim_read_req (T_SIM_READ_REQ * sim_read_req); GLOBAL void app_sim_read_record_req (T_SIM_READ_RECORD_REQ * sim_read_record_req); GLOBAL void app_sim_update_req (T_SIM_UPDATE_REQ * sim_update_req); GLOBAL void app_sim_update_record_req(T_SIM_UPDATE_RECORD_REQ * sim_update_record_req); GLOBAL void app_sim_increment_req (T_SIM_INCREMENT_REQ * sim_increment_req); GLOBAL void app_sim_verify_pin_req (T_SIM_VERIFY_PIN_REQ * sim_verify_pin_req); GLOBAL UBYTE app_sim_mm_insert_ind (T_SIM_MMI_INSERT_IND * sim_mmi_insert_ind); GLOBAL void app_sim_mmi_insert_ind (T_SIM_MMI_INSERT_IND * sim_mmi_insert_ind, UBYTE func); GLOBAL void app_sim_sms_insert_ind (void); GLOBAL void app_sim_change_pin_req (T_SIM_CHANGE_PIN_REQ * sim_change_pin_req); GLOBAL void app_sim_disable_pin_req (T_SIM_DISABLE_PIN_REQ * sim_disable_pin_req); GLOBAL void app_sim_enable_pin_req (T_SIM_ENABLE_PIN_REQ * sim_enable_pin_req); GLOBAL void app_sim_unblock_req (T_SIM_UNBLOCK_REQ * sim_unblock_req); GLOBAL void app_sim_auth_req (T_SIM_AUTHENTICATION_REQ * sim_authentication_req); #ifndef TI_PS_UICC_CHIPSET_15 GLOBAL void app_sim_insert (T_SIM_CARD *p_atr); #endif /*!TI_PS_UICC_CHIPSET_15*/ GLOBAL void app_sim_remove (void); GLOBAL void app_sim_timeout (U16 timer); GLOBAL void app_sim_mm_update_req (T_SIM_MM_UPDATE_REQ * sim_mm_update_req); GLOBAL void app_sim_sync_req (T_SIM_SYNC_REQ * sim_sync_req); GLOBAL void app_sim_activate_req (T_SIM_ACTIVATE_REQ * sim_activate_req); GLOBAL void app_sim_access_req (T_SIM_ACCESS_REQ * sim_access_req); GLOBAL void app_sim_read_parameters (void); GLOBAL void app_sim_phase (void); GLOBAL void app_sim_card_error (USHORT error); GLOBAL UBYTE app_sim_check_service (UBYTE nr, UBYTE * serv_table); GLOBAL void app_perform_profile_download (void); GLOBAL UBYTE app_fdn_bdn_procedures (T_SIM_MMI_INSERT_IND * sim_mmi_insert_ind); GLOBAL UBYTE app_check_imsi_loci_validation (void); GLOBAL UBYTE app_bdn_capability_request (void); GLOBAL UBYTE app_fdn_capability_request (void); GLOBAL UBYTE app_rehabilitate_imsi_loci (void); GLOBAL UBYTE app_get_fdn_status (void); GLOBAL void app_start_status_timer (BOOL condx); GLOBAL BOOL app_check_access_conditions (UBYTE proc, T_FIELD_STATUS *field_status); #define SERVICE(n,p) app_sim_check_service(n,p) EXTERN T_SIM_DATA sim_data; /* * These Functions are only temporary valid and should replaced as soon as possible */ EXTERN UBYTE get_network_meas (UBYTE * chan_list); EXTERN UBYTE get_bcch_chan_list (stk_data_type * out_stk_data); #ifdef SIM_TOOLKIT #ifdef TI_PS_FF_AT_P_CMD_CUST GLOBAL void stk_sim_refresh_user_res (T_SIM_REFRESH_USER_RES * sim_refresh_user_res); #endif /* TI_PS_FF_AT_P_CMD_CUST */ GLOBAL void stk_check_tp (UBYTE *out_prf, UBYTE *in_prf, USHORT len); GLOBAL void stk_perform_profile_download (void); GLOBAL void stk_proactive_polling (void); GLOBAL void stk_stop_all_sat_timers (void); GLOBAL void stk_init_sim_data (void); #ifdef FF_SAT_E GLOBAL void stk_dti_connection_opened (void); GLOBAL void stk_dti_connection_closed (void); GLOBAL void stk_dti_data_received (T_DTI2_DATA_IND* dti_data_ind); GLOBAL void stk_dti_tx_buffer_full (void); GLOBAL void stk_dti_tx_buffer_ready (void); GLOBAL UBYTE stk_dti_bip_send_data (T_sdu* message); GLOBAL void stk_udp_bind_cnf (T_UDP_BIND_CNF* udp_bind_cnf); GLOBAL void stk_udp_closeport_cnf (T_UDP_CLOSEPORT_CNF* udp_closeport_cnf); GLOBAL void stk_udp_error_ind (T_UDP_ERROR_IND* udp_error_ind); GLOBAL void stk_udp_shutdown_ind (T_UDP_SHUTDOWN_IND* udp_shutdown_ind); GLOBAL void stk_sim_dti_req (T_SIM_DTI_REQ* sim_dti_req); GLOBAL void stk_sim_bip_req (T_SIM_BIP_REQ* sim_bip_req); GLOBAL void stk_sim_bip_config_req (T_SIM_BIP_CONFIG_REQ* sim_bip_config_req); GLOBAL void stk_sim_eventlist_req (T_SIM_EVENTLIST_REQ* sim_eventlist_req); #endif /* FF_SAT_E */ GLOBAL void stk_sim_toolkit_res (T_SIM_TOOLKIT_RES * sim_toolkit_res); GLOBAL void stk_sim_toolkit_req (T_SIM_TOOLKIT_REQ * sim_toolkit_req); GLOBAL void stk_file_update_res (T_SIM_FILE_UPDATE_RES * file_update_res); GLOBAL void stk_timeout (USHORT index); #endif /* SIM_TOOLKIT */ #if defined (GPRS) GLOBAL void gprs_gmm_insert_ind (T_SIM_MM_INSERT_IND *sim_mm_insert_ind); GLOBAL void gprs_sim_gmm_update_req (T_SIM_GMM_UPDATE_REQ *sim_gmm_update_req); GLOBAL BOOL gprs_check_pcm_data (T_imsi_field *sim_imsi); #endif /* * for test cases only */ #if defined _SIMULATION_ && defined FF_SAT_E EXTERN USHORT csf_sim_pei_timeout (USHORT index); #endif /* _SIMULATION &&_FF_SAT_E */ /* * If all entities are linked into one module this definitions * prefixes the global data with the enity name */ #ifdef TI_PS_HCOMM_CHANGE #ifdef OPTION_MULTITHREAD #ifdef FF_SAT_E #define hCommUDP _ENTITY_PREFIXED(hCommUDP) #endif /* FF_SAT_E */ #if defined (GPRS) #define hCommGMM _ENTITY_PREFIXED(hCommGMM) #endif /* GPRS */ #endif /* OPTION_MULTITHREAD */ #ifdef FF_SAT_E EXTERN T_HANDLE hCommUDP; /* UDP Communication */ #endif /* FF_SAT_E */ #if defined (GPRS) #define GMM hCommGMM EXTERN T_HANDLE hCommGMM; /* SMS Communication */ #endif /* GPRS */ EXTERN T_HANDLE sim_handle; #else #ifdef OPTION_MULTITHREAD #define hCommSMS _ENTITY_PREFIXED(hCommSMS) #define hCommMM _ENTITY_PREFIXED(hCommMM) #define hCommMMI _ENTITY_PREFIXED(hCommMMI) #ifdef FF_SAT_E #define hCommUDP _ENTITY_PREFIXED(hCommUDP) #endif /* FF_SAT_E */ #ifdef _SIMULATION_ #define hCommSIM _ENTITY_PREFIXED(hCommSIM) #endif #if defined (GPRS) #define hCommGMM _ENTITY_PREFIXED(hCommGMM) #endif /* GPRS */ #endif /* OPTION_MULTITHREAD */ EXTERN T_HANDLE hCommMM; /* MM Communication */ EXTERN T_HANDLE hCommMMI; /* MMI Communication */ EXTERN T_HANDLE hCommSMS; /* SMS Communication */ #ifdef FF_SAT_E EXTERN T_HANDLE hCommUDP; /* UDP Communication */ #endif /* FF_SAT_E */ #ifdef _SIMULATION_ EXTERN T_HANDLE hCommSIM; /* TEST CASES: TAP Communication */ #endif #if defined (GPRS) #define GMM hCommGMM EXTERN T_HANDLE hCommGMM; /* SMS Communication */ #endif /* GPRS */ EXTERN T_HANDLE sim_handle; #endif /* TI_PS_HCOMM_CHANGE */ #endif /* !SIM_H */