view src/g23m-gsm/sim/sim.h @ 303:f76436d19a7a default tip

!GPRS config: fix long-standing AT+COPS chance hanging bug There has been a long-standing bug in FreeCalypso going back years: sometimes in the AT command bring-up sequence of an ACI-only MS, the AT+COPS command would produce only a power scan followed by cessation of protocol stack activity (only L1 ADC traces), instead of the expected network search sequence. This behaviour was seen in different FC firmware versions going back to Citrine, and seemed to follow some law of chance, not reliably repeatable. This bug has been tracked down and found to be specific to !GPRS configuration, stemming from our TCS2/TCS3 hybrid and reconstruction of !GPRS support that was bitrotten in TCS3.2/LoCosto version. ACI module psa_mms.c, needed only for !GPRS, was missing in the TCS3 version and had to be pulled from TCS2 - but as it turns out, there is a new field in the MMR_REG_REQ primitive that needs to be set correctly, and that psa_mms.c module is the place where this initialization needed to be added.
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 08 Jun 2023 08:23:37 +0000
parents fa8dc04885d8
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 */