FreeCalypso > hg > tcs211-c139
diff g23m/condat/ms/src/aci/aci_pei.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/g23m/condat/ms/src/aci/aci_pei.c Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,2368 @@ +/* ++----------------------------------------------------------------------------- +| Project : +| Modul : ++----------------------------------------------------------------------------- +| 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 : This module implements the process body interface +| for the AT Command Interpreter. ++----------------------------------------------------------------------------- +*/ + +#ifndef ACI_PEI_C +#define ACI_PEI_C + +#include "aci_all.h" + +#include "ccdapi.h" +#include "cnf_aci.h" +#include "mon_aci.h" /* mouais... */ +#include "P_ACI.val" /* SKA 2002-09-02 for MAX_CMD_LEN */ +#include "line_edit.h" /* SKA 2002-09-02 */ +#include "aci_cmh.h" +#include "ati_cmd.h" +#include "aci_cmd.h" +#include "aci.h" +#include "aci_mem.h" + +#ifndef _SIMULATION_ +#include "rv_swe.h" +#ifdef RVM_GIL_SWE +#include "gil/gil_gpf.h" /* MMI_GIL_IND dispatch function */ +#endif /* RVM_GIL_SWE */ +#endif /* _SIMULATION_ */ + + +#include "psa.h" +#include "psa_cc.h" +#include "psa_mm.h" +#include "psa_sim.h" +#include "psa_mmi.h" +#include "psa_sms.h" +#include "aoc.h" +#include "phb.h" +#include "hl_audio_drv.h" + +#include "aci_lst.h" + +#ifdef DTI + #include "dti.h" /* functionality of the dti library */ + #include "dti_conn_mng.h" + #include "dti_cntrl_mng.h" +#endif + +#ifdef GPRS + #include "gprs.h" + #include "gaci_cmh.h" + #include "psa_gmm.h" + #include "psa_sm.h" + #include "psa_gppp.h" +#endif /* GPRS */ + +#ifdef UART +#include "psa_uart.h" +#include "cmh_uart.h" +#endif + +#ifdef FF_ATI + #include "aci_io.h" +#endif + +#ifdef FF_PSI +#include "psa_psi.h" +#include "cmh_psi.h" +#endif /*FF_PSI*/ + +#ifdef FAX_AND_DATA + #include "aci_fd.h" + #include "psa_ra.h" + #include "psa_l2r.h" +#ifdef FF_FAX + #include "psa_t30.h" +#endif +#endif + +#if defined (FF_WAP) || defined (FF_TCP_IP) || defined(FF_GPF_TCPIP)|| defined (FF_SAT_E) + #include "psa_ppp_w.h" +#endif +#if defined (CO_UDP_IP) || defined (FF_GPF_TCP_IP) + #include "psa_tcpip.h" +#endif /* defined (CO_UDP_IP) || defined(FF_GPF_TCPIP) */ + +#include "cmh.h" + +#ifdef SIM_TOOLKIT + #include "psa_sat.h" +#endif + +#ifdef MFW + #include "mfw_acie.h" +#endif + +#include "gdi.h" +#include "audio.h" +#include "rx.h" +#include "pwr.h" + + +#ifdef BT_ADAPTER + #include "bti.h" + #include "bti_aci.h" +#endif + +#ifdef FF_PKTIO + #include "psa_pktio.h" +#endif +#ifdef _SIMULATION_ + #include "ati_src_tst.h" +#endif + +#if defined FF_EOTD + #include "ati_src_lc.h" +#endif + +#ifdef DTI + #include "sap_dti.h" +#endif + +#include "psa_ss.h" +#ifdef FF_ESIM +#include "psa_aaa.h" /* esim */ +#endif + +#ifdef FF_MMI_RIV +EXTERN void acia_init(void); +#endif + +#ifdef _SIMULATION_ +#ifdef FF_ATI_BAT +#include "ati_bat.h" +#endif +#endif + + +/*==== DEFINE =====================================================*/ + +/*==== EXPORT =====================================================*/ + +GLOBAL UBYTE mode = 1; +/* + * instance data base + */ + +/*==== PRIVATE ====================================================*/ + +LOCAL const void pei_not_supported (void *data); + +/*==== VARIABLES ==================================================*/ +LOCAL BOOL first_access = TRUE; +LOCAL T_MONITOR aci_mon; + +/*==== FUNCTIONS ==================================================*/ + +#ifdef SMI + EXTERN T_PEI_RETURN _pei_init (void); + EXTERN T_PEI_RETURN _pei_primitive (T_PRIM *prim); + EXTERN T_PEI_RETURN _pei_exit (void); + EXTERN T_PEI_RETURN _pei_monitor (void ** monitor); + EXTERN T_PEI_RETURN _pei_config ( T_PEI_CONFIG inString ); +#endif /* SMI */ + EXTERN void tim_exec_timeout (USHORT index); + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : RLP_PEI | +| STATE : code ROUTINE : pei_not_supported | ++--------------------------------------------------------------------+ + + PURPOSE : An unsupported primitive is received. + +*/ + +LOCAL const void pei_not_supported (void *data) +{ + TRACE_FUNCTION ("pei_not_supported()"); + + PFREE (data); +} + +/* + * + * Use MAK_FUNC_0 for primitives which contains no SDU. + * + * Use MAK_FUNC_S for primitives which contains a SDU. + */ + +/* + * jumptable for the entity service access point. Contains + * the processing-function addresses and opcodes of + * request and response primitives. + * + */ +LOCAL const T_FUNC sim_table[] = { + MAK_FUNC_0( psa_sim_read_cnf, SIM_READ_CNF ), + MAK_FUNC_0( psa_sim_update_cnf, SIM_UPDATE_CNF ), + MAK_FUNC_0( psa_sim_read_record_cnf, SIM_READ_RECORD_CNF ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_0( psa_sim_update_record_cnf, SIM_UPDATE_RECORD_CNF ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_0( psa_sim_increment_cnf, SIM_INCREMENT_CNF ), + MAK_FUNC_0( psa_sim_verify_pin_cnf, SIM_VERIFY_PIN_CNF ), + MAK_FUNC_0( psa_sim_change_pin_cnf, SIM_CHANGE_PIN_CNF ), + MAK_FUNC_0( psa_sim_disable_pin_cnf, SIM_DISABLE_PIN_CNF ), + MAK_FUNC_0( psa_sim_enable_pin_cnf, SIM_ENABLE_PIN_CNF ), + MAK_FUNC_0( psa_sim_unblock_cnf, SIM_UNBLOCK_CNF ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_0( psa_sim_mmi_insert_ind, SIM_MMI_INSERT_IND ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_0( psa_sim_remove_ind, SIM_REMOVE_IND ), + MAK_FUNC_0( psa_sim_sync_cnf, SIM_SYNC_CNF ), + MAK_FUNC_0( psa_sim_activate_cnf, SIM_ACTIVATE_CNF ), + MAK_FUNC_N( pei_not_supported, 0 ),/*20*/ +#ifdef SIM_TOOLKIT + MAK_FUNC_0( psa_sim_toolkit_ind, SIM_TOOLKIT_IND ), + MAK_FUNC_0( psa_sim_toolkit_cnf, SIM_TOOLKIT_CNF ), +#else + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), +#endif + MAK_FUNC_0( psa_sim_activate_ind, SIM_ACTIVATE_IND ),/*23*/ + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_0( psa_sim_access_cnf, SIM_ACCESS_CNF ), +#ifdef SIM_TOOLKIT + MAK_FUNC_0( psa_sim_file_update_ind, SIM_FILE_UPDATE_IND ), +#else + MAK_FUNC_N( pei_not_supported, 0 ), +#endif + MAK_FUNC_N( pei_not_supported, 0 ),/* SIM_GMM_INSERT_IND */ +#ifdef FF_SAT_E + MAK_FUNC_0( psa_sim_dti_cnf, SIM_DTI_CNF ),/*28*/ + MAK_FUNC_0( psa_sim_bip_cnf, SIM_BIP_CNF ),/*29*/ + MAK_FUNC_0( psa_sim_bip_config_cnf, SIM_BIP_CONFIG_CNF ),/*30*/ + MAK_FUNC_0( psa_sim_dti_bip_ind, SIM_DTI_BIP_IND ),/*31*/ + MAK_FUNC_0( psa_sim_eventlist_cnf, SIM_EVENTLIST_CNF ),/*32*/ +#else + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), +#endif + MAK_FUNC_N( pei_not_supported, 0 ) /*33*/ +}; + +LOCAL const T_FUNC mmr_table[] = { + MAK_FUNC_0( psa_mmr_reg_cnf, MMR_REG_CNF ), + MAK_FUNC_0( psa_mmr_nreg_ind, MMR_NREG_IND ), + MAK_FUNC_0( psa_mmr_nreg_cnf, MMR_NREG_CNF ), + MAK_FUNC_0( psa_mmr_plmn_ind, MMR_PLMN_IND ), + MAK_FUNC_0( psa_mmr_info_ind, MMR_INFO_IND ), + MAK_FUNC_0( psa_mmr_ciphering_ind, MMR_CIPHERING_IND ), + MAK_FUNC_0( psa_mmr_ahplmn_ind, MMR_AHPLMN_IND ) +}; + +LOCAL const T_FUNC mncc_table[] = { + MAK_FUNC_0( psa_mncc_alert_ind, MNCC_ALERT_IND ), + MAK_FUNC_0( psa_mncc_call_proceed_ind, MNCC_CALL_PROCEED_IND ), + MAK_FUNC_0( psa_mncc_disconnect_ind, MNCC_DISCONNECT_IND ), + MAK_FUNC_0( psa_mncc_hold_cnf, MNCC_HOLD_CNF ), + MAK_FUNC_0( psa_mncc_modify_cnf, MNCC_MODIFY_CNF ), + MAK_FUNC_0( psa_mncc_modify_ind, MNCC_MODIFY_IND ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_0( psa_mncc_progress_ind, MNCC_PROGRESS_IND ), + MAK_FUNC_0( psa_mncc_reject_ind, MNCC_REJECT_IND ), + MAK_FUNC_0( psa_mncc_release_cnf, MNCC_RELEASE_CNF ), + MAK_FUNC_0( psa_mncc_release_ind, MNCC_RELEASE_IND ), + MAK_FUNC_0( psa_mncc_retrieve_cnf, MNCC_RETRIEVE_CNF ), + MAK_FUNC_0( psa_mncc_setup_cnf, MNCC_SETUP_CNF ), + MAK_FUNC_0( psa_mncc_setup_compl_ind, MNCC_SETUP_COMPL_IND ), + MAK_FUNC_0( psa_mncc_setup_ind, MNCC_SETUP_IND ), + MAK_FUNC_0( psa_mncc_start_dtmf_cnf, MNCC_START_DTMF_CNF ), + MAK_FUNC_0( psa_mncc_sync_ind, MNCC_SYNC_IND ), + MAK_FUNC_0( psa_mncc_user_ind, MNCC_USER_IND ), + MAK_FUNC_0( psa_mncc_facility_ind, MNCC_FACILITY_IND ), + MAK_FUNC_0( psa_mncc_bearer_cap_cnf, MNCC_BEARER_CAP_CNF ), + MAK_FUNC_0( psa_mncc_prompt_ind, MNCC_PROMPT_IND ), + MAK_FUNC_0( psa_mncc_recall_ind, MNCC_RECALL_IND ), + MAK_FUNC_0( psa_mncc_status_ind, MNCC_STATUS_IND ) +}; + +LOCAL const T_FUNC mnss_table[] = { + MAK_FUNC_0( psa_mnss_begin_ind, MNSS_BEGIN_IND ), + MAK_FUNC_0( psa_mnss_facility_ind, MNSS_FACILITY_IND ), + MAK_FUNC_0( psa_mnss_end_ind, MNSS_END_IND ) +}; + +LOCAL const T_FUNC mnsms_table[] = { + MAK_FUNC_0( psa_mnsms_delete_cnf, MNSMS_DELETE_CNF ), + MAK_FUNC_0( psa_mnsms_read_cnf, MNSMS_READ_CNF ), + MAK_FUNC_0( psa_mnsms_store_cnf, MNSMS_STORE_CNF ), + MAK_FUNC_0( psa_mnsms_submit_cnf, MNSMS_SUBMIT_CNF ), + MAK_FUNC_0( psa_mnsms_command_cnf, MNSMS_COMMAND_CNF ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_0( psa_mnsms_report_ind, MNSMS_REPORT_IND ), + MAK_FUNC_0( psa_mnsms_status_ind, MNSMS_STATUS_IND ), + MAK_FUNC_0( psa_mnsms_message_ind, MNSMS_MESSAGE_IND ), + MAK_FUNC_0( psa_mnsms_error_ind, MNSMS_ERROR_IND ), + MAK_FUNC_0( psa_mnsms_resume_cnf, MNSMS_RESUME_CNF ), + MAK_FUNC_0( psa_mnsms_query_cnf, MNSMS_QUERY_CNF ), +#ifdef GPRS + MAK_FUNC_0( psa_mnsms_mo_serv_cnf, MNSMS_MO_SERV_CNF ), +#else + MAK_FUNC_N( pei_not_supported, 0 ), +#endif /* GPRS */ +#ifdef SIM_PERS_OTA + MAK_FUNC_0( psa_mnsms_OTA_decode_ind, MNSMS_OTA_DECODE_IND ) +#else + MAK_FUNC_N( pei_not_supported, 0 ) + #endif +}; + +LOCAL const T_FUNC mmi_table[] = { + MAK_FUNC_0( psa_mmi_keypad_ind, MMI_KEYPAD_IND ), + MAK_FUNC_0( psa_mmi_cbch_ind, MMI_CBCH_IND ), + MAK_FUNC_0( psa_mmi_rxlev_ind, MMI_RXLEV_IND ), + MAK_FUNC_0( psa_mmi_battery_ind, MMI_BATTERY_IND ), +#ifdef SIM_TOOLKIT + MAK_FUNC_0( psa_sat_cbch_dnl_ind, MMI_SAT_CBCH_DWNLD_IND ), +#else + MAK_FUNC_N( pei_not_supported, 0 ), +#endif +#ifdef BTE_MOBILE + MAK_FUNC_0( psa_mmi_bt_cb_notify_ind, MMI_BT_CB_NOTIFY_IND ), +#else + MAK_FUNC_N( pei_not_supported, 0 ), +#endif +#ifdef RVM_GIL_SWE + MAK_FUNC_N( pei_not_supported, 0 ), /* RPD MSG ? */ + MAK_FUNC_0( gil_gpf_dispatch_message, MMI_GIL_IND ), +#else + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), +#endif /* RVM_GIL_SWE */ +#ifndef VOCODER_FUNC_INTERFACE + MAK_FUNC_0( psa_mmi_tch_vocoder_cfg_con, MMI_TCH_VOCODER_CFG_CON ) +#else + MAK_FUNC_N( pei_not_supported, 0 ) +#endif +}; + +#ifdef DTI +LOCAL const T_FUNC dti_dl_table[] = { + MAK_FUNC_0( dti_lib_dti_dti_connect_ind , DTI2_CONNECT_IND ), /* 7700x */ + MAK_FUNC_0( dti_lib_dti_dti_connect_cnf , DTI2_CONNECT_CNF ), /* 7701x */ + MAK_FUNC_0( dti_lib_dti_dti_disconnect_ind , DTI2_DISCONNECT_IND ), /* 7702x */ + MAK_FUNC_0( dti_lib_dti_dti_ready_ind , DTI2_READY_IND ), /* 7703x */ + MAK_FUNC_0( dti_lib_dti_dti_data_ind , DTI2_DATA_IND ), /* 7704x */ +#if defined (_SIMULATION_) + MAK_FUNC_S( dti_lib_dti_dti_data_test_ind , DTI2_DATA_TEST_IND ) +#else /* _SIMULATION_ */ + MAK_FUNC_N( pei_not_supported , 0) +#endif /* _SIMULATION_ */ +}; +#endif /* UART */ + +#ifdef FF_EM_MODE +LOCAL const T_FUNC em_table[] = { + MAK_FUNC_0( psa_em_sc_info_cnf, EM_SC_INFO_CNF ), /* 0x7E00 */ +#ifdef GPRS + MAK_FUNC_0( psa_em_sc_gprs_info_cnf, EM_SC_GPRS_INFO_CNF ), /* 0x7E01 */ +#else + MAK_FUNC_N( pei_not_supported, EM_SC_GPRS_INFO_CNF ), /* 0x7E01 */ +#endif /* GPRS */ + MAK_FUNC_0( psa_em_nc_info_cnf, EM_NC_INFO_CNF ), /* 0x7E02 */ + MAK_FUNC_0( psa_em_loc_pag_info_cnf, EM_LOC_PAG_INFO_CNF ), /* 0x7E03 */ + MAK_FUNC_0( psa_em_plmn_info_cnf, EM_PLMN_INFO_CNF ), /* 0x7E04 */ + MAK_FUNC_0( psa_em_cip_hop_dtx_info_cnf, EM_CIP_HOP_DTX_INFO_CNF ), /* 0x7E05 */ + MAK_FUNC_0( psa_em_power_info_cnf, EM_POWER_INFO_CNF ), /* 0x7E06 */ + MAK_FUNC_0( psa_em_identity_info_cnf, EM_IDENTITY_INFO_CNF ), /* 0x7E07 */ + MAK_FUNC_0( psa_em_sw_version_info_cnf, EM_SW_VERSION_INFO_CNF ), /* 0x7E08 */ + MAK_FUNC_N( pei_not_supported, 0 ), /* 0x7E09 */ + MAK_FUNC_N( pei_not_supported, 0 ), /* 0x7E0A */ + MAK_FUNC_0( em_event_trace_ind, EM_DATA_IND ), /* 0x7E0B */ + MAK_FUNC_N( pei_not_supported, 0 ), /* 0x7E0C */ + MAK_FUNC_N( pei_not_supported, 0 ), /* 0x7E0D */ + MAK_FUNC_N( pei_not_supported, 0 ), /* 0x7E0E */ + MAK_FUNC_N( pei_not_supported, 0 ), /* 0x7E0F */ + MAK_FUNC_N( pei_not_supported, 0 ), /* 0x7E10 */ + MAK_FUNC_N( pei_not_supported, 0 ), /* 0x7E11 */ + MAK_FUNC_N( pei_not_supported, 0 ), /* 0x7E12 */ + MAK_FUNC_N( pei_not_supported, 0 ), /* 0x7E13 */ + MAK_FUNC_N( pei_not_supported, 0 ), /* 0x7E14 */ + MAK_FUNC_N( pei_not_supported, 0 ), /* 0x7E15 */ + MAK_FUNC_N( pei_not_supported, 0 ), /* 0x7E16 */ +#ifdef GPRS + MAK_FUNC_0( psa_em_gmm_info_cnf, EM_GMM_INFO_CNF ), /* 0x7E17 */ /*GMM_INFO*/ + MAK_FUNC_0( psa_em_grlc_info_cnf, EM_GRLC_INFO_CNF ), /* 0x7E18 */ /*GRLC_INFO*/ +#else + MAK_FUNC_N( pei_not_supported, EM_GMM_INFO_CNF ), /* 0x7E17 */ + MAK_FUNC_N( pei_not_supported, EM_GRLC_INFO_CNF ), /* 0x7E18 */ +#endif /* GPRS */ + MAK_FUNC_0( psa_em_amr_info_cnf, EM_AMR_INFO_CNF ) /* 0x7E19 */ +}; +#endif /* FF_EM_MODE */ + +#ifdef FF_ATI +/* ES!! #if !defined (MFW) */ +LOCAL const T_FUNC aci_table[] = { + MAK_FUNC_0( aci_aci_cmd_req, ACI_CMD_REQ ), + MAK_FUNC_0( aci_aci_abort_req, ACI_ABORT_REQ ), +#ifdef BT_ADAPTER + MAK_FUNC_0( aci_aci_cmd_res , ACI_CMD_RES ), + MAK_FUNC_0( aci_aci_init_res , ACI_INIT_RES ), + MAK_FUNC_0( aci_aci_deinit_req , ACI_DEINIT_REQ ), + MAK_FUNC_0( aci_aci_open_port_req , ACI_OPEN_PORT_REQ ), + MAK_FUNC_0( aci_aci_close_port_req, ACI_CLOSE_PORT_REQ ), + MAK_FUNC_0( aci_aci_cmd_req_bt, ACI_CMD_REQ_BT ), + MAK_FUNC_0( aci_aci_cmd_res_bt, ACI_CMD_RES_BT ), + MAK_FUNC_0( aci_aci_abort_req_bt, ACI_ABORT_REQ_BT ), +#else + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), +#endif /* BT_ADAPTER */ + MAK_FUNC_0( aci_aci_trc_ind, ACI_TRC_IND ), + MAK_FUNC_0( aci_aci_ext_ind, ACI_EXT_IND ), +#ifdef FF_MMI_RIV + MAK_FUNC_0( aci_aci_riv_cmd_req, ACI_RIV_CMD_REQ ) +#else + MAK_FUNC_N( pei_not_supported, 0 ) +#endif /* FF_MMI_RIV */ +}; +/* ES!! #endif */ +#endif + +#ifdef FAX_AND_DATA + +LOCAL const T_FUNC ra_table[] = { + MAK_FUNC_N( pei_not_supported, 0 /* RA_READY_IND */), + MAK_FUNC_N( pei_not_supported, 0 /* RA_DATA_IND */), + MAK_FUNC_0( psa_ra_activate_cnf, RA_ACTIVATE_CNF ), + MAK_FUNC_0( psa_ra_deactivate_cnf, RA_DEACTIVATE_CNF ), + MAK_FUNC_N( pei_not_supported, 0 /* RA_BREAK_IND */) +#ifdef FF_FAX + , + MAK_FUNC_0( psa_ra_modify_cnf, RA_MODIFY_CNF ) +#endif +}; + +#ifdef DTI +LOCAL const T_FUNC l2r_table[] = { + MAK_FUNC_0( psa_l2r_activate_cnf, L2R_ACTIVATE_CNF ), + MAK_FUNC_0( psa_l2r_deactivate_cnf, L2R_DEACTIVATE_CNF ), + MAK_FUNC_0( psa_l2r_connect_cnf, L2R_CONNECT_CNF ), + MAK_FUNC_0( psa_l2r_connect_ind, L2R_CONNECT_IND ), + MAK_FUNC_0( psa_l2r_disc_cnf, L2R_DISC_CNF ), + MAK_FUNC_0( psa_l2r_disc_ind, L2R_DISC_IND ), + MAK_FUNC_N( pei_not_supported, 0 /* L2R_READY_IND */), + MAK_FUNC_N( pei_not_supported, 0 /* L2R_DATA_IND */), + MAK_FUNC_N( pei_not_supported, 0 /* L2R_BREAK_CNF */), + MAK_FUNC_N( pei_not_supported, 0 /* L2R_BREAK_IND */), + MAK_FUNC_N( psa_l2r_xid_ind, L2R_XID_IND ), + MAK_FUNC_0( psa_l2r_error_ind, L2R_ERROR_IND ), + MAK_FUNC_0( psa_l2r_reset_ind, L2R_RESET_IND ), + MAK_FUNC_0( psa_l2r_statistic_ind, L2R_STATISTIC_IND ), + MAK_FUNC_0( psa_l2r_dti_cnf, L2R_DTI_CNF ), + MAK_FUNC_0( psa_l2r_dti_ind, L2R_DTI_IND ) +}; + +#ifdef FF_FAX +LOCAL const T_FUNC t30_table[] = { + MAK_FUNC_0( psa_t30_cap_ind, T30_CAP_IND ), + MAK_FUNC_0( psa_t30_sgn_ind, T30_SGN_IND ), + MAK_FUNC_0( psa_t30_cmpl_ind, T30_CMPL_IND ), + MAK_FUNC_S( psa_t30_report_ind, T30_REPORT_IND ), + MAK_FUNC_0( psa_t30_error_ind, T30_ERROR_IND ), + MAK_FUNC_0( psa_t30_deactivate_cnf, T30_DEACTIVATE_CNF ), + MAK_FUNC_0( psa_t30_activate_cnf, T30_ACTIVATE_CNF ), + MAK_FUNC_0( psa_t30_preamble_ind, T30_PREAMBLE_IND ), + MAK_FUNC_0( psa_t30_dti_ind, T30_DTI_IND ), + MAK_FUNC_0( psa_t30_dti_cnf, T30_DTI_CNF ), + MAK_FUNC_0( psa_t30_phase_ind, T30_PHASE_IND ), + MAK_FUNC_0( psa_t30_eol_ind, T30_EOL_IND ), + MAK_FUNC_N( pei_not_supported, 0 ) +}; +#endif /* FF_FAX */ + +LOCAL const T_FUNC tra_table[] = { + MAK_FUNC_0( psa_tra_activate_cnf, TRA_ACTIVATE_CNF ), + MAK_FUNC_0( psa_tra_deactivate_cnf, TRA_DEACTIVATE_CNF ), + MAK_FUNC_0( psa_tra_dti_cnf, TRA_DTI_CNF ), + MAK_FUNC_0( psa_tra_dti_ind, TRA_DTI_IND ), +}; +#endif /* DTI */ +#endif /* FAX_AND_DATA */ + +#ifdef FF_GPF_TCPIP +LOCAL const T_FUNC tcpip_table[] = { + MAK_FUNC_0 (psa_tcpip_initialize_cnf, TCPIP_INITIALIZE_CNF ), /* 0x00 */ + MAK_FUNC_N (psa_tcpip_shutdown_cnf, TCPIP_SHUTDOWN_CNF ), /* 0x01 */ + MAK_FUNC_0 (psa_tcpip_ifconfig_cnf, TCPIP_IFCONFIG_CNF ), /* 0x02 */ + MAK_FUNC_0 (psa_tcpip_dti_cnf, TCPIP_DTI_CNF ) /* 0x03 */ +}; +#endif + +#ifdef CO_UDP_IP +LOCAL const T_FUNC udpa_table[] = { + MAK_FUNC_0( psa_udpa_dti_cnf, UDPA_DTI_CNF ), + MAK_FUNC_0( psa_udpa_dti_ind, UDPA_DTI_IND ), + MAK_FUNC_0( psa_udpa_config_cnf, UDPA_CONFIG_CNF ), +}; +LOCAL const T_FUNC ipa_table[] = { + MAK_FUNC_0( psa_ipa_dti_cnf, IPA_DTI_CNF ), + MAK_FUNC_0( psa_ipa_dti_ind, IPA_DTI_IND ), + MAK_FUNC_0( psa_ipa_config_cnf, IPA_CONFIG_CNF ), +}; +#endif /* CO_UDP_IP */ + +#ifdef FF_WAP +LOCAL const T_FUNC wap_table[] = { + MAK_FUNC_S( psa_wap_mmi_ind, WAP_MMI_IND ), + MAK_FUNC_S( psa_wap_mmi_req, WAP_MMI_REQ ), + MAK_FUNC_S( psa_wap_mmi_cnf, WAP_MMI_CNF ), + MAK_FUNC_0( psa_wap_dti_cnf, WAP_DTI_CNF ), + MAK_FUNC_0( psa_wap_dti_ind, WAP_DTI_IND ) +}; +#endif /* FF_WAP */ + +#ifdef FF_GPF_TCPIP +LOCAL const T_FUNC dcm_table[] = { + MAK_FUNC_0( psa_dcm_open_conn_req, DCM_OPEN_CONN_REQ ), /* 0x8000401c */ + MAK_FUNC_0( psa_dcm_close_conn_req, DCM_CLOSE_CONN_REQ ), /* 0x8001401c */ + MAK_FUNC_0( psa_dcm_get_current_conn_req , DCM_GET_CURRENT_CONN_REQ), /* 0x8002001c */ + MAK_FUNC_N( pei_not_supported, 0 ) +}; +#endif /* FF_GPF_TCPIP */ + +/*LOCAL const T_FUNC ppp_table[] = { + MAK_FUNC_0( psa_ppp_establish_cnf, PPP_ESTABLISH_CNF ), + MAK_FUNC_0( psa_ppp_terminate_ind, PPP_TERMINATE_IND ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_0( psa_ppp_dti_connected_ind, PPP_DTI_CONNECTED_IND ) +};*/ +#if defined (UART) AND defined (DTI) +LOCAL const T_FUNC uart_table[] = { + MAK_FUNC_0( psa_uart_parameters_cnf, UART_PARAMETERS_CNF ), /* 0x3400 */ + MAK_FUNC_0( psa_uart_parameters_ind, UART_PARAMETERS_IND ), /* 0x3401 */ + MAK_FUNC_0( psa_uart_dti_cnf, UART_DTI_CNF ), /* 0x3402 */ + MAK_FUNC_0( psa_uart_dti_ind, UART_DTI_IND ), /* 0x3403 */ + MAK_FUNC_0( psa_uart_disable_cnf, UART_DISABLE_CNF ), /* 0x3404 */ + MAK_FUNC_0( psa_uart_ring_cnf, UART_RING_CNF ), /* 0x3405 */ + MAK_FUNC_0( psa_uart_dcd_cnf, UART_DCD_CNF ), /* 0x3406 */ + MAK_FUNC_0( psa_uart_escape_cnf, UART_ESCAPE_CNF ), /* 0x3407 */ + MAK_FUNC_0( psa_uart_detected_ind, UART_DETECTED_IND ), /* 0x3408 */ + MAK_FUNC_0( psa_uart_error_ind, UART_ERROR_IND ), /* 0x3409 */ + MAK_FUNC_0( psa_uart_mux_start_cnf, UART_MUX_START_CNF ), + MAK_FUNC_0( psa_uart_mux_dlc_establish_ind, UART_MUX_DLC_ESTABLISH_IND), + MAK_FUNC_0( psa_uart_mux_dlc_release_ind, UART_MUX_DLC_RELEASE_IND ), + MAK_FUNC_N( pei_not_supported, 0 ), /* sleep ind */ + MAK_FUNC_N( pei_not_supported, 0 ), /* wake up ind */ + MAK_FUNC_0( psa_uart_mux_close_ind, UART_MUX_CLOSE_IND ), + MAK_FUNC_N( pei_not_supported, 0 ) +}; +#endif + +#ifdef GPRS +/* GMMREG */ +LOCAL const T_FUNC gmm_table[] = { + MAK_FUNC_0( psa_gmmreg_attach_cnf, GMMREG_ATTACH_CNF ), + MAK_FUNC_0( psa_gmmreg_attach_rej, GMMREG_ATTACH_REJ ), + MAK_FUNC_0( psa_gmmreg_detach_cnf, GMMREG_DETACH_CNF ), + MAK_FUNC_0( psa_gmmreg_detach_ind, GMMREG_DETACH_IND ), + MAK_FUNC_0( psa_gmmreg_plmn_ind, GMMREG_PLMN_IND ), + MAK_FUNC_0( psa_gmmreg_suspend_ind, GMMREG_SUSPEND_IND ), + MAK_FUNC_0( psa_gmmreg_resume_ind, GMMREG_RESUME_IND ), + MAK_FUNC_0( psa_gmmreg_info_ind, GMMREG_INFO_IND ), + MAK_FUNC_0( psa_gmmreg_ciphering_ind, GMMREG_CIPHERING_IND ), + MAK_FUNC_0( psa_gmmreg_ahplmn_ind, GMMREG_AHPLMN_IND ) +}; + +/* SMREG */ +LOCAL const T_FUNC sm_table[] = { + MAK_FUNC_0( psa_smreg_pdp_activate_cnf, SMREG_PDP_ACTIVATE_CNF ), + MAK_FUNC_0( psa_smreg_pdp_activate_rej, SMREG_PDP_ACTIVATE_REJ ), + MAK_FUNC_0( psa_smreg_pdp_activate_ind, SMREG_PDP_ACTIVATE_IND ), + MAK_FUNC_0( psa_smreg_pdp_deactivate_cnf, SMREG_PDP_DEACTIVATE_CNF ), + MAK_FUNC_0( psa_smreg_pdp_deactivate_ind, SMREG_PDP_DEACTIVATE_IND ), + MAK_FUNC_0( psa_smreg_pdp_modify_ind, SMREG_PDP_MODIFY_IND ) +}; + +/* SN */ +LOCAL const T_FUNC sndcp_table[] = { + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( psa_sn_count_cnf, SN_COUNT_CNF ), + MAK_FUNC_N( psa_sn_switch_cnf, SN_SWITCH_CNF ) +}; + +/* PPP */ +/*LOCAL const T_FUNC ppp_table[] = { + MAK_FUNC_0( psa_ppp_establish_cnf, PPP_ESTABLISH_CNF ), + MAK_FUNC_0( psa_ppp_terminate_ind, PPP_TERMINATE_IND ), + MAK_FUNC_0( psa_ppp_pdp_activate_ind, PPP_PDP_ACTIVATE_IND ), + MAK_FUNC_0( psa_ppp_modification_cnf, PPP_MODIFICATION_CNF ), + MAK_FUNC_0( psa_ppp_dti_connected_ind, PPP_DTI_CONNECTED_IND ) +};*/ + +#ifdef FF_PKTIO +LOCAL const T_FUNC mnpkt_table[] = { + MAK_FUNC_0( psa_pkt_connect_ind, PKT_CONNECT_IND ), + MAK_FUNC_0( psa_pkt_disconnect_ind, PKT_DISCONNECT_IND ), + MAK_FUNC_0( psa_pkt_dti_open_cnf, PKT_DTI_OPEN_CNF ), + MAK_FUNC_0( psa_pkt_modify_cnf, PKT_MODIFY_CNF ), + MAK_FUNC_0( psa_pkt_dti_close_cnf, PKT_DTI_CLOSE_CNF ), + MAK_FUNC_0( psa_pkt_dti_close_ind, PKT_DTI_CLOSE_IND ) +}; +#endif +#endif /* GPRS */ +#if defined (FF_PSI ) AND defined (DTI) +LOCAL const T_FUNC mnpsi_table[] = { + MAK_FUNC_0( psa_psi_conn_ind, PSI_CONN_IND ), + MAK_FUNC_0( psa_psi_disconn_ind, PSI_DISCONN_IND ), + MAK_FUNC_0( psa_psi_dti_open_cnf, PSI_DTI_OPEN_CNF ), + MAK_FUNC_0( psa_psi_dti_close_cnf, PSI_DTI_CLOSE_CNF ), + MAK_FUNC_0( psa_psi_dti_close_ind, PSI_DTI_CLOSE_IND ), + MAK_FUNC_0( psa_psi_setconf_cnf, PSI_SETCONF_CNF ), + MAK_FUNC_0( psa_psi_line_state_cnf, PSI_LINE_STATE_CNF ), + MAK_FUNC_0( psa_psi_line_state_ind, PSI_LINE_STATE_CNF ), + MAK_FUNC_0( psa_psi_close_cnf, PSI_CLOSE_CNF ) +#ifdef _SIMULATION_ + , + MAK_FUNC_0( psa_psi_conn_ind_test, PSI_CONN_IND_TEST) +#endif /*_SIMULATION_ */ +}; +#endif /*FF_PSI*/ +/* PPP */ + +#if defined FF_WAP || defined GPRS || defined FF_GPF_TCPIP || defined (FF_SAT_E) +LOCAL const T_FUNC ppp_table[] = { + MAK_FUNC_0( psa_ppp_establish_cnf, PPP_ESTABLISH_CNF ), + MAK_FUNC_0( psa_ppp_terminate_ind, PPP_TERMINATE_IND ), + MAK_FUNC_0( psa_ppp_pdp_activate_ind, PPP_PDP_ACTIVATE_IND ), + MAK_FUNC_0( psa_ppp_modification_cnf, PPP_MODIFICATION_CNF ), + MAK_FUNC_0( psa_ppp_dti_connected_ind, PPP_DTI_CONNECTED_IND ) +}; +#endif /* FF_WAP || GPRS || FF_GPF_TCPIP || FF_SAT_E */ + +#if defined FF_EOTD +LOCAL const T_FUNC mnlc_table[] = { + MAK_FUNC_0( psa_mnlc_sms_meas_cnf, MNLC_SMS_MEAS_CNF ) +}; +#endif /* FF_EOTD */ + +/* BTI */ +#ifdef BT_ADAPTER +LOCAL const T_FUNC btp_table[] = { + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_0( psa_btp_dti_ind, T30_DTI_IND ), + MAK_FUNC_0( psa_btp_dti_cnf, T30_DTI_CNF ) +}; +#endif /* BT_ADAPTER */ + +#if defined(FF_TCP_IP) || defined(FF_ESIM) +LOCAL const T_FUNC aaa_table[] = { + MAK_FUNC_0( psa_aaa_cmd_req, AAA_CMD_REQ ), + MAK_FUNC_0( psa_aaa_open_port_req, AAA_OPEN_PORT_REQ ), + MAK_FUNC_0( psa_aaa_close_port_req, AAA_CLOSE_PORT_REQ ), + MAK_FUNC_0( psa_aaa_dti_rsp, AAA_DTI_RES ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_0( psa_aaa_disconnect_rsp, AAA_DISCONNECT_RES ) +}; +#endif + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : RLP_PEI | +| STATE : code ROUTINE : pei_primitive | ++--------------------------------------------------------------------+ + + PURPOSE : Process protocol specific primitive. + +*/ + +LOCAL SHORT pei_primitive (void *ptr) +{ + T_PRIM *prim = ptr; +#ifdef SMI + T_PEI_RETURN subReturn = PEI_ERROR; +#endif + + /* + * + * ACI UPLINK + * | + * +-------------------------------v--------------------------------------+ + * | | + * | ACI | + * | | + * +--^----^-----^----^----^----^---^---^---^----^------^----^---^----^---+ + * | | | | | | | | | | | | | | + * SIM MMREG MNCC MNSS MNSMS MMI T30 L2R RA GMMREG SMREG PPP UART BTI DOWNLINK + * | | | | | | | | | | | | | | + * + */ + +#ifdef MFW + extern void mmeFlagHandler(void); + extern USHORT mfwMmeDrvFlag; +#endif + +/* TRACE_FUNCTION ("pei_primitive()");*/ +#ifdef MFW + if (mfwMmeDrvFlag) + mmeFlagHandler(); +#endif + + if (prim NEQ NULL) + { + ULONG opc = prim->custom.opc; + USHORT n; + const T_FUNC *table; +#ifdef FF_EM_MODE + /* This variable is only needed to extract information about the sending + entity. This is needed especially for testing purposes. + */ + T_sdu *em_prim_data; +#endif /* FF_EM_MODE */ + + VSI_PPM_REC ((T_PRIM_HEADER*)prim, __FILE__, __LINE__); + +#ifndef FF_EM_MODE + /* + * To ensure true msc directions for the engineering mode additional + * information (from which entity the prim is sent) must be provided + * before PTRACE_IN is called. + */ + PTRACE_IN (opc); +#endif /* FF_EM_MODE */ + +#ifdef MFW + /* + * MFW "checks" if it needs to handle primitves coming from below before they are + * potentially still to be handled by ACI + */ + if (aci_check_primitive (opc, (void*)(&(prim->data)))) + { + PFREE (P2D(prim)); + return PEI_OK; + } +#endif + + /* TRACE_EVENT_P1("opcode: %d", opc);*/ + switch (SAP_NR(opc)) + { +#ifdef FF_ATI +/* ES!! #if !defined (MFW) */ + case ACI_DL: + case ACI_UL: table = aci_table; n = TAB_SIZE (aci_table); break; +/* ES!! #endif */ +#endif + case SAP_NR(SIM_UL): table = sim_table; n = TAB_SIZE (sim_table); break; + case SAP_NR(MMREG_DL): table = mmr_table; n = TAB_SIZE (mmr_table); break; + case SAP_NR(MNCC_DL): table = mncc_table; n = TAB_SIZE (mncc_table); break; + case SAP_NR(MNSS_DL): table = mnss_table; n = TAB_SIZE (mnss_table); break; + case SAP_NR(MNSMS_DL): table = mnsms_table; n = TAB_SIZE (mnsms_table); break; +#if defined (FF_PKTIO) AND defined (DTI) + case SAP_NR(PKT_DL): table = mnpkt_table; n = TAB_SIZE (mnpkt_table); break; +#endif +#if defined (FF_PSI) AND defined (DTI) + case SAP_NR(PSI_DL): table = mnpsi_table; n = TAB_SIZE (mnpsi_table); break; +#endif /*FF_PSI*/ + +#ifdef DTI +#if defined(FF_TCP_IP) || defined(FF_ESIM) + case SAP_NR(AAA_DL): table = aaa_table; n = TAB_SIZE (aaa_table); break; +#endif +#endif + case MMI_DL: table = mmi_table; n = TAB_SIZE (mmi_table); break; +#ifdef DTI + case DTI2_DL: + { + table = dti_dl_table; n = TAB_SIZE (dti_dl_table); + /* + * to be able to distinguish DTI1/DTI2 opcodes, + * the ones for DTI2 start at 0x50 + */ + opc -= 0x50; + } + break; +#endif /* UART */ +#ifdef FF_EM_MODE + case EM_Dl: + table = em_table; n = TAB_SIZE (em_table); /*break;*/ + + em_prim_data = (T_sdu*) (((char*)&prim->data) + table->soff); + + /* + * The prim 'EM_DATA_IND' is ambiguous concerning the sending entity. + * Therefore additional information is provided here. + */ + if (opc EQ EM_DATA_IND_OPC) + { + switch (em_prim_data->l_buf) + { + case EM_L1: TRACE_PRIM_FROM("PL"); break; + case EM_DL: TRACE_PRIM_FROM("DL"); break; + case EM_MM: TRACE_PRIM_FROM("MM"); break; + case EM_CC: TRACE_PRIM_FROM("CC"); break; + case EM_SS: TRACE_PRIM_FROM("SS"); break; + case EM_SMS: TRACE_PRIM_FROM("SMS"); break; + case EM_SIM: TRACE_PRIM_FROM("SIM"); break; + default: break; + } + } + break; +#endif /* FF_EM_MODE */ + +#if defined (FAX_AND_DATA) AND defined (DTI) + case SAP_NR(RA_DL): table = ra_table; n = TAB_SIZE (ra_table); break; + case SAP_NR(L2R_DL): table = l2r_table; n = TAB_SIZE (l2r_table); break; +#ifdef FF_FAX + case SAP_NR(T30_DL): table = t30_table; n = TAB_SIZE (t30_table); break; +#endif + case SAP_NR(TRA_DL): table = tra_table; n = TAB_SIZE (tra_table); break; +#endif + +#ifdef FF_GPF_TCPIP + case SAP_NR(TCPIP_DL): table = tcpip_table; n = TAB_SIZE (tcpip_table); break; + case SAP_NR(DCM_DL): table = dcm_table; n = TAB_SIZE (dcm_table); break; +#endif + +#ifdef CO_UDP_IP + case SAP_NR(UDPA_DL): table = udpa_table; n = TAB_SIZE (udpa_table); break; + case SAP_NR(IPA_DL): table = ipa_table; n = TAB_SIZE (ipa_table); break; +#endif + +#ifdef FF_WAP + case SAP_NR(WAP_DL): table = wap_table; n = TAB_SIZE (wap_table); break; +#endif + +#if defined (FF_WAP) || defined (GPRS) || defined (FF_SAT_E) + case PPP_UL: table = ppp_table; n = TAB_SIZE (ppp_table); break; +#endif + +#ifdef GPRS + case GMMREG_DL: table = gmm_table; n = TAB_SIZE (gmm_table); break; + case SMREG_DL: table = sm_table; n = TAB_SIZE (sm_table); break; + case SN_DL: table = sndcp_table; n = TAB_SIZE (sndcp_table); break; +#endif /* GPRS */ + +#if defined (UART) AND defined (DTI) + case UART_UL: table = uart_table; n = TAB_SIZE (uart_table); break; +#endif /* UART */ +#ifdef BT_ADAPTER + /* BTI DL */ + case BTP_G: table = btp_table; n = TAB_SIZE (btp_table); break; +#endif /* BT_ADAPTER */ +#if defined FF_EOTD + case SAP_NR(MNLC_DL): table = mnlc_table; n = TAB_SIZE (mnlc_table); break; +#endif + + default: table = NULL; n = 0; break; + } + +#ifdef FF_EM_MODE + /* + * Only valid for the engineering mode as described above. + */ + PTRACE_IN (opc); +#endif /* FF_EM_MODE */ + + if (table NEQ NULL ) + { + if (PRIM_NR(opc) < n) + { + table += PRIM_NR(opc); +#ifdef PALLOC_TRANSITION + P_SDU(prim) = table->soff ? (T_sdu*) (((char*)&prim->data) + table->soff) : 0; +#ifndef NO_COPY_ROUTING + P_LEN(prim) = table->size + sizeof (T_PRIM_HEADER); +#endif /* NO_COPY_ROUTING */ +#endif /* PALLOC_TRANSITION */ + +#if !defined (SMI) AND !defined (MFW) + if (mode EQ 0 AND + table NEQ aci_table) + { + PSENDX (ACI, P2D(prim)); + } + else +#endif + { +#ifdef SMI + if (table->func EQ (T_VOID_FUNC) pei_not_supported) + { + subReturn = _pei_primitive (prim); + } + else +#endif + JUMP (table->func) (P2D(prim)); + } + } + else + { +#ifndef SMI + pei_not_supported (P2D(prim)); +#else + subReturn = _pei_primitive (prim); +#endif + } + return PEI_OK; + } +#ifdef SMI + else + { + subReturn = _pei_primitive (prim); + } +#endif + + /* + * Primitive is no GSM Primitive + * then forward to the environment + */ +#ifdef SMI + if (subReturn EQ PEI_ERROR) + { +#endif +#ifdef GSM_ONLY + PFREE (P2D(prim)) + return PEI_ERROR; +#else + if (opc & SYS_MASK) + vsi_c_primitive (VSI_CALLER prim); + else + { + PFREE (P2D(prim)); + return PEI_ERROR; + } +#endif +#ifdef SMI + } +#endif + } +#ifdef SMI + else + { + subReturn = _pei_primitive (prim); + } +#endif + + return PEI_OK; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_PEI | +| STATE : code ROUTINE : pei_init | ++--------------------------------------------------------------------+ + + PURPOSE : Initialize Protocol Stack Entity + +*/ +LOCAL SHORT pei_init (T_HANDLE handle) +{ +#ifdef FF_ATI +#ifdef UART + EXTERN void urt_init (void); +#endif +#endif + + aci_handle = handle; + + TRACE_FUNCTION ("pei_init()"); + + if (hCommSIM < VSI_OK) + { + if ((hCommSIM = vsi_c_open (VSI_CALLER SIM_NAME)) < VSI_OK) + return PEI_ERROR; + } +#ifdef FF_ESIM + if (hCommESIM < VSI_OK) /* open channel to ESIM entity */ + { + if ((hCommESIM = vsi_c_open (VSI_CALLER ESIM_NAME)) < VSI_OK) + return PEI_ERROR; + } +#endif + if (hCommMM < VSI_OK) + { + if ((hCommMM = vsi_c_open (VSI_CALLER MM_NAME)) < VSI_OK) + return PEI_ERROR; + } + + if (hCommCC < VSI_OK) + { + if ((hCommCC = vsi_c_open (VSI_CALLER CC_NAME)) < VSI_OK) + return PEI_ERROR; + } + + if (hCommSS < VSI_OK) + { + if ((hCommSS = vsi_c_open (VSI_CALLER SS_NAME)) < VSI_OK) + return PEI_ERROR; + } + + if (hCommSMS < VSI_OK) + { + if ((hCommSMS = vsi_c_open (VSI_CALLER SMS_NAME)) < VSI_OK) + return PEI_ERROR; + } + +#ifdef UART + if (hCommUART < VSI_OK) + { + if ((hCommUART = vsi_c_open (VSI_CALLER UART_NAME)) < VSI_OK) + return PEI_ERROR; + } +#endif + + if (hCommPL < VSI_OK) + { + if ((hCommPL = vsi_c_open (VSI_CALLER PL_NAME)) < VSI_OK) + return PEI_ERROR; + } + +#if defined FF_EOTD + if (hCommLC < VSI_OK) + { + if ((hCommLC = vsi_c_open (VSI_CALLER LC_NAME)) < VSI_OK) + return PEI_ERROR; + } +#endif + +#ifdef FF_TCP_IP +/*#ifndef _SIMULATION_*/ + if (hCommAAA < VSI_OK) + { + if ((hCommAAA = vsi_c_open (VSI_CALLER AAA_NAME)) < VSI_OK) + return PEI_ERROR; + } +/*#endif*/ +#endif + +#if defined FF_TRACE_OVER_MTST + if (hCommMTST < VSI_OK) + { + if ((hCommMTST = vsi_c_open (VSI_CALLER "MTST")) < VSI_OK) + return PEI_ERROR; + } +#endif + + if (hCommACI < VSI_OK) + { + if ((hCommACI = vsi_c_open (VSI_CALLER ACI_NAME)) < VSI_OK) + return PEI_ERROR; + } + +#ifdef FAX_AND_DATA +#ifndef USE_L1FD_FUNC_INTERFACE + if (hCommRA < VSI_OK) + { + if ((hCommRA = vsi_c_open (VSI_CALLER RA_NAME)) < VSI_OK) + return PEI_ERROR; + } +#endif + if (hCommL2R < VSI_OK) + { + if ((hCommL2R = vsi_c_open (VSI_CALLER L2R_NAME)) < VSI_OK) + return PEI_ERROR; + } + + if (hCommTRA < VSI_OK) + { + /* TRA_NAME i.e "L2R" on account of TRA being no real entity */ + if ((hCommTRA = vsi_c_open (VSI_CALLER TRA_NAME)) < VSI_OK) + return PEI_ERROR; + } + +#ifdef FF_FAX + if (hCommT30 < VSI_OK) + { + if ((hCommT30 = vsi_c_open (VSI_CALLER T30_NAME)) < VSI_OK) + return PEI_ERROR; + } +#endif /* FF_FAX */ +#endif /* FAX_AND_DATA */ + +#ifdef FF_GPF_TCPIP + if (hCommTCPIP < VSI_OK) + { + if ((hCommTCPIP = vsi_c_open (VSI_CALLER TCPIP_NAME)) < VSI_OK) + return PEI_ERROR; + } +#endif + +#if defined (CO_TCPIP_TESTAPP) || defined (CO_BAT_TESTAPP) + if (hCommAPP < VSI_OK) + { + if ((hCommAPP = vsi_c_open (VSI_CALLER APP_NAME)) < VSI_OK) + return PEI_ERROR; + } +#endif + +#ifdef CO_UDP_IP + if (hCommUDP < VSI_OK) + { + if ((hCommUDP = vsi_c_open (VSI_CALLER UDP_NAME)) < VSI_OK) + return PEI_ERROR; + } + if (hCommIP < VSI_OK) + { + if ((hCommIP = vsi_c_open (VSI_CALLER IP_NAME)) < VSI_OK) + return PEI_ERROR; + } +#endif + +#ifdef FF_WAP + if (hCommWAP < VSI_OK) + { + if ((hCommWAP = vsi_c_open (VSI_CALLER WAP_NAME)) < VSI_OK) + return PEI_ERROR; + } +#endif + +#if defined (FF_WAP) || defined (GPRS) || defined (FF_SAT_E) + if (hCommPPP < VSI_OK) + { + if ((hCommPPP = vsi_c_open (VSI_CALLER PPP_NAME)) < VSI_OK) + return PEI_ERROR; + } +#endif + +#ifdef FF_EM_MODE + if (hCommRR < VSI_OK) + { + if ((hCommRR = vsi_c_open (VSI_CALLER RR_NAME)) < VSI_OK) + return PEI_ERROR; + } +#endif /* FF_EM_MODE */ + +#if defined (GPRS) AND defined (DTI) + if (hCommGMM < VSI_OK) + { + if ((hCommGMM = vsi_c_open (VSI_CALLER GMM_NAME)) < VSI_OK) + return PEI_ERROR; + } + if (hCommSM < VSI_OK) + { + if ((hCommSM = vsi_c_open (VSI_CALLER SM_NAME)) < VSI_OK) + return PEI_ERROR; + } + if (hCommSNDCP < VSI_OK) + { + if ((hCommSNDCP = vsi_c_open (VSI_CALLER SNDCP_NAME)) < VSI_OK) + return PEI_ERROR; + } + +#ifdef FF_PKTIO + if (hCommPKTIO < VSI_OK) + { + if ((hCommPKTIO = vsi_c_open (VSI_CALLER PKTIO_NAME)) < VSI_OK) + { + TRACE_EVENT ("cannot open PKTIO"); + return PEI_ERROR; + } + } +#endif +#endif /* GPRS */ +#ifdef FF_PSI + if (hCommPSI < VSI_OK) + { + if ((hCommPSI = vsi_c_open (VSI_CALLER PSI_NAME)) < VSI_OK) + { + TRACE_EVENT ("cannot open PSI"); + return PEI_ERROR; + } + } +#endif /*FF_PSI*/ +#ifdef BT_ADAPTER + if (hCommBTI < VSI_OK) + { + if ((hCommBTI = vsi_c_open (VSI_CALLER BTI_NAME)) < VSI_OK) + return PEI_ERROR; + } +#endif /* BT_ADAPTER */ + +#ifdef FF_GPF_TCPIP + if (hCommDCM < VSI_OK) + { + if ((hCommDCM = vsi_c_open (VSI_CALLER DCM_NAME)) < VSI_OK) + return PEI_ERROR; + } +#endif /* FF_GPF_TCPIP */ + + if (hCommL1 < VSI_OK) + { + if ((hCommL1 = vsi_c_open (VSI_CALLER L1_NAME)) < VSI_OK) + return PEI_ERROR; + } + +#ifdef DTI +#ifdef _SIMULATION_ + /* + * initialize dtilib for this entity + */ + aci_hDTI = dti_init ( + 4, + handle, + DTI_DEFAULT_OPTIONS, + aci_pei_sig_callback + ); +#else + /* + * initialize dtilib for this entity + */ + aci_hDTI = dti_init ( + ACI_INSTANCES * UART_INSTANCES, + handle, + DTI_DEFAULT_OPTIONS, + aci_pei_sig_callback + ); +#endif +#endif /* DTI */ + +#ifdef DTI + if(aci_hDTI EQ NULL) + { + TRACE_EVENT ("ACI DTI handle is 0"); + return PEI_ERROR; + } +#endif + +#ifdef SMI + /* + * initialize the slim man machine interface + */ + if (_pei_init () EQ PEI_ERROR) + return PEI_ERROR; +#endif + +#ifdef ACI + audio_Init ( NULL ); +/* rx_Init( ) is not needed at the moment for ATI only version... + causes the software not to start because it needs CST stack to be started first... + rx_Init ( NULL ); */ + pwr_Init ( NULL ); +#endif + + + /* + * Initialize BT_ADAPTER + */ +#if defined(FF_ATI) && defined(BT_ADAPTER) + if (btiaci_init(aci_handle) EQ BTI_NAK) + return PEI_ERROR; + btiaci_at_init_req(); +#endif + +#ifdef FF_ATI + init_ati (); +#endif /* FF_ATI */ + +#ifdef UART + cmhUART_lst_init (); +#endif +#ifdef DTI + psaACI_Init(); + dti_cntrl_init(); +#endif +#if defined (FF_PSI) AND defined (DTI) + cmhPSI_lst_init(); +#endif /*FF_PSI*/ + /* + * initialize CMH's + */ + cmh_Init (); + cmh_Reset ( CMD_SRC_LCL, FALSE ); +#ifdef FF_ATI + cmh_Reset ( CMD_SRC_ATI_1, FALSE ); + cmh_Reset ( CMD_SRC_ATI_2, FALSE ); + cmh_Reset ( CMD_SRC_ATI_3, FALSE ); + cmh_Reset ( CMD_SRC_ATI_4, FALSE ); +#ifdef SIM_TOOLKIT + cmh_Reset ( CMD_SRC_ATI_5, FALSE ); +#endif /* SIM_TOOLKIT */ +#if defined FF_EOTD + cmh_Reset ( CMD_SRC_ATI_6, FALSE ); +#endif /* FF_EOTD */ +#endif /* FF_ATI */ + + /* + * initialize PSA's + */ +#if defined (SIM_TOOLKIT) + psaSAT_Init(); /* has to be done first! */ +#endif + psaSS_Init(); +#ifdef ACI + psaMMI_Init(); +#endif + psaCC_Init(); + psaMM_Init(); + psaSIM_Init(ACI_INIT_TYPE_ALL); + psaMMI_Init(); + psaSMS_Init(); + +#ifdef FAX_AND_DATA + psaRA_Init(); + psaL2R_Init(); +#ifdef FF_FAX + psaT30_Init(); +#endif /* FF_FAX */ +#endif /* FAX_AND_DATA */ + +#ifdef GPRS + psa_GPRSInit(); +#endif /* GPRS */ + +#if defined (FF_WAP) || defined (FF_TCP_IP) || defined(FF_GPF_TCPIP)|| defined (FF_SAT_E) + psaPPP_Init(); +#endif /* (FF_WAP) (FF_TCP_IP) (FF_GPF_TCPIP) (FF_SAT_E) */ + +#if defined(CO_UDP_IP) || defined(FF_GPF_TCPIP) + psaTCPIP_Init(); +#endif /* CO_UDP_IP || FF_GPF_TCPIP */ + +#if defined(FF_GPF_TCPIP) + dcm_init() ; +#endif /* FF_GPF_TCPIP */ + + +#ifdef AT_ADAPTER + psaBTI_Init(); +#endif /* AT_ADAPTER */ + + /* + * Initialize Message Coder Decoder + */ + ccd_init (); + /* + * Initialize the UART module + */ +#ifdef FF_ATI +#ifdef UART + urt_init (); +#endif + ati_cmd_init (); +#endif + + /* + * Initialize Advice of Charge Module + */ + aoc_init_calltable (); + + /* + * Initialize phonebook + */ +#ifdef TI_PS_FFS_PHB + pb_init (); +#else + phb_Init (); +#endif + rdlPrm_init(); + + /* The high level audio driver is initialised here */ + hl_audio_drv_init(); + +#if defined(_TARGET_) + cmhCC_rd_mode_FFS(AUTOM_REP_NOT_PRESENT,READ_RDLmode); /* read redial mode from FFS */ +#endif /* _TARGET_*/ + +#ifdef DTI +#ifdef _SIMULATION_ +#ifdef FF_ATI_BAT + ati_bat_reset(); +#endif + ati_src_tst_init( CMD_SRC_EXT ); +#endif +#endif + +#if defined FF_EOTD + ati_src_lc_init( CMD_SRC_EXT ); +#endif /* FF_EOTD */ + +#ifdef MFW + /* + * initialise ACI extension handler + * and start MMI Logic + */ + aci_ext_init (); + mmi_main (); +#endif + +#ifdef FF_MMI_RIV + acia_init(); +#endif + + return PEI_OK; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_PEI | +| STATE : code ROUTINE : pei_timeout | ++--------------------------------------------------------------------+ + + PURPOSE : Process timeout + +*/ + +LOCAL SHORT pei_timeout (USHORT index) +{ + tim_exec_timeout (index); + + return PEI_OK; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_PEI | +| STATE : code ROUTINE : mmi_pei_signal | ++--------------------------------------------------------------------+ + + PURPOSE : Functional interface to signal a primitive. + +*/ + +LOCAL SHORT pei_signal ( ULONG opc, void *primData ) +{ +#ifdef OPTION_SIGNAL +#ifndef _TMS470 + TRACE_FUNCTION ("pei_signal ()"); +#endif /* _TMS470 */ + + switch (opc) + { +#ifdef FF_MMI_RIV + case ACI_RIV_CMD_REQ: + aci_aci_riv_cmd_req ((T_ACI_RIV_CMD_REQ *) primData); + break; +#endif +#ifdef FAX_AND_DATA + case RA_ACTIVATE_CNF: + psa_ra_activate_cnf + ( + (T_RA_ACTIVATE_CNF *) primData + ); + break; + case RA_DEACTIVATE_CNF: + psa_ra_deactivate_cnf + ( + (T_RA_DEACTIVATE_CNF *) primData + ); + break; +#ifdef FF_FAX + case RA_MODIFY_CNF: + psa_ra_modify_cnf + ( + (T_RA_MODIFY_CNF *) primData + ); + break; +#endif /* FF_FAX */ +#endif /* FAX_AND_DATA */ + +#ifdef FF_ATI +/* ES!! #if !defined (MFW) */ + case ACI_CMD_REQ: + aci_aci_cmd_req + ( + (T_ACI_CMD_REQ *) primData + ); + break; + case ACI_ABORT_REQ: + aci_aci_abort_req + ( + (T_ACI_ABORT_REQ *) primData + ); + break; +#endif /* FF_ATI */ + } +#endif /* OPTION_SIGNAL */ + + return PEI_OK; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_PEI | +| STATE : code ROUTINE : pei_exit | ++--------------------------------------------------------------------+ + + PURPOSE : Close Resources and terminate + +*/ +LOCAL SHORT pei_exit (void) +{ + U8 i; + + TRACE_FUNCTION ("pei_exit()"); + + /* + * clean up communication + */ +#ifdef DTI + /* close all open dti channels */ + dti_cntrl_close_all_connections(); + + /* + * Shut down dtilib communication + */ + dti_deinit(aci_hDTI); +#endif + +#ifdef FF_TRACE_OVER_MTST + vsi_c_close (VSI_CALLER hCommMTST); + hCommMTST = VSI_ERROR; +#endif + + vsi_c_close (VSI_CALLER hCommSIM); + hCommSIM = VSI_ERROR; + + vsi_c_close (VSI_CALLER hCommSIM); + hCommSIM = VSI_ERROR; + + vsi_c_close (VSI_CALLER hCommMM); + hCommMM = VSI_ERROR; + + vsi_c_close (VSI_CALLER hCommCC); + hCommCC = VSI_ERROR; + +#ifdef FF_ESIM + vsi_c_close (VSI_CALLER hCommESIM); + hCommESIM = VSI_ERROR; +#endif + + vsi_c_close (VSI_CALLER hCommSS); + hCommSS = VSI_ERROR; + + vsi_c_close (VSI_CALLER hCommSMS); + hCommSMS = VSI_ERROR; + +#ifdef UART + vsi_c_close (VSI_CALLER hCommDTI); + hCommDTI = VSI_ERROR; + + vsi_c_close (VSI_CALLER hCommUART); + hCommUART = VSI_ERROR; +#endif +#ifdef FF_PSI + vsi_c_close (VSI_CALLER hCommPSI); + hCommPSI = VSI_ERROR; +#endif /*FF_PSI*/ +/*#if defined SMI */ +/* vsi_c_close (VSI_CALLER hCommSMI);*/ +/* hCommSMI = VSI_ERROR;*/ +/*#elif defined MFW */ +/* vsi_c_close (VSI_CALLER hCommMMI);*/ +/* hCommMMI = VSI_ERROR;*/ +/*#elif defined ACI*/ + vsi_c_close (VSI_CALLER hCommACI); + hCommACI = VSI_ERROR; +/*#endif*/ + + vsi_c_close (VSI_CALLER hCommPL); + hCommPL = VSI_ERROR; + +#if defined FF_EOTD + vsi_c_close (VSI_CALLER hCommLC); + hCommLC = VSI_ERROR; +#endif + +#ifdef FAX_AND_DATA +#ifndef USE_L1FD_FUNC_INTERFACE + vsi_c_close (VSI_CALLER hCommRA); + hCommRA = VSI_ERROR; +#endif + vsi_c_close (VSI_CALLER hCommL2R); + hCommL2R = VSI_ERROR; + + vsi_c_close (VSI_CALLER hCommTRA); + hCommTRA = VSI_ERROR; + +#ifdef FF_FAX + vsi_c_close (VSI_CALLER hCommT30); + hCommT30 = VSI_ERROR; +#endif /* FF_FAX */ +#endif /* FAX_AND_DATA */ + +#ifdef FF_GPF_TCPIP + vsi_c_close (VSI_CALLER hCommTCPIP); + hCommTCPIP = VSI_ERROR; +#endif + +#if defined (CO_TCPIP_TESTAPP) || defined (CO_BAT_TESTAPP) + vsi_c_close (VSI_CALLER hCommAPP); + hCommAPP = VSI_ERROR; +#endif + +#ifdef CO_UDP_IP + vsi_c_close (VSI_CALLER hCommUDP); + hCommUDP = VSI_ERROR; + vsi_c_close (VSI_CALLER hCommIP); + hCommIP = VSI_ERROR; +#endif + +#ifdef FF_WAP + vsi_c_close (VSI_CALLER hCommWAP); + hCommWAP = VSI_ERROR; +#endif + +#if defined (FF_WAP) || defined (GPRS) || defined (FF_SAT_E) + vsi_c_close (VSI_CALLER hCommPPP); + hCommPPP = VSI_ERROR; +#endif + +#ifdef GPRS + vsi_c_close (VSI_CALLER hCommGMM); + hCommGMM = VSI_ERROR; + + vsi_c_close (VSI_CALLER hCommSM); + hCommSM = VSI_ERROR; + + vsi_c_close (VSI_CALLER hCommSNDCP); + hCommSNDCP = VSI_ERROR; +#ifdef FF_PKTIO + vsi_c_close (VSI_CALLER hCommPKTIO); + hCommPKTIO = VSI_ERROR; +#endif +#endif /* GPRS */ + +#ifdef BT_ADAPTER + vsi_c_close (VSI_CALLER hCommBTI); + hCommBTI = VSI_ERROR; +#endif /* BT_ADAPTER */ + + vsi_c_close (VSI_CALLER hCommL1); + hCommL1 = VSI_ERROR; + +#ifdef SMI + _pei_exit (); +#endif + + /* + * deallocate all channels + * for non existing channels, this will just return + */ + #ifdef FF_ATI + for (i = 1; i < CMD_SRC_MAX; i++) + { + ati_finit(i); + } +#endif /* FF_ATI */ + + /* Free still occupied pointers in ccShrdPrm */ + for (i = 0; i < MAX_CALL_NR; i++) + { + if (ccShrdPrm.ctb[i] NEQ NULL) + { + psaCC_FreeCtbNtry (i); + } + } + + /* Deallocation of elements (2nd to last) in linked list PNN */ + while (mmShrdPrm.PNNLst.next NEQ NULL) + { + T_pnn_name *nextnext = mmShrdPrm.PNNLst.next->next; + ACI_MFREE (mmShrdPrm.PNNLst.next); + mmShrdPrm.PNNLst.next = nextnext; + } + +#ifdef DTI +#ifdef _SIMULATION_ + +#ifdef SIM_TOOLKIT + satShrdPrm.run_at_id = -1; +#endif /* SIM_TOOLKIT */ + + ati_src_tst_finit(); +#endif /* _SIMULATION_ */ +#endif /* DTI */ + +#if defined FF_EOTD + ati_src_lc_finit(); +#endif /* FF_EOTD */ + + rdlPrm_exit(); + +#ifdef UART + cmhUART_CleanComParameterList(); +#endif + + +#ifdef FF_PSI + cmhPSI_clean_all_elem(); + cmhPSI_CleanDcbParameterList(); +#endif + +#ifdef UART + cmhUART_lst_exit(); +#endif + + return PEI_OK; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_PEI | +| STATE : code ROUTINE : pei_config | ++--------------------------------------------------------------------+ + + PURPOSE : Dynamic Configuration + +*/ + +#if !defined (NCONFIG) + +LOCAL const KW_DATA kwtab[] = +{ + ACI_KEY_SEQUENCE, KEY_SEQUENCE, + ACI_KEY_PRESS, KEY_PRESS, + ACI_KEY_RELEASE, KEY_RELEASE, + ACI_START_AOC, START_AOC, + ACI_CPOL_MODE, CPOL_MODE, + ACI_CPOL_IDX2, CPOL_IDX2, + ACI_ATI_VIA_TIF, ATI_VIA_TIF, +/* new here*/ +#ifdef _SIMULATION_ + ACI_DATA_INPUT, DATA_INPUT, +#endif /* _SIMULATION_ */ + "", 0 +}; + +#endif + +#ifdef _SIMULATION_ + +#ifdef UART +EXTERN void cmhUART_startConnection (UBYTE srcId, + T_ACI_DEVICE_TYPE device_type); +#endif /* UART */ +EXTERN UBYTE uart_new_source (UBYTE device, UBYTE dlci); +EXTERN void uart_new_source_for_aci_src_tst( UBYTE src_id, UBYTE device, UBYTE dlci ); +#endif + +LOCAL SHORT pei_config (char *inString) +{ +#ifdef FF_ATI + BOOL alreadyCalled = FALSE; +#endif + +#if !defined (NCONFIG) + char *s = inString; + SHORT valno; + SHORT keyno; + char *keyw; + char *val[10]; + + TRACE_FUNCTION ("pei_config()"); + +#ifdef UART + if (!strcmp(inString, "UART_19200")) + { + cmhUART_SetDataRate((UBYTE) CMD_SRC_ATI, UART_IO_SPEED_19200); + return PEI_OK; + } +#endif + + if (!strcmp(inString, "ATI_TRC")) + { /* AT%CPRIM="MMI","CONFIG ATI_TRC" */ + EXTERN BOOL _g_ati_trc_enabled; + _g_ati_trc_enabled = TRUE; /* only switch on possible */ + return PEI_OK; + } + +#ifdef _SIMULATION_ + +#ifdef UART + if (!strcmp(inString, "START_DTI")) + { + int i; + UBYTE srcId; + + for (i=0;i<UART_INSTANCES;i++) + { + srcId = uart_new_source ((UBYTE)i, UART_DLCI_NOT_MULTIPLEXED); + cmhUART_startConnection (srcId, DEVICE_TYPE_URT); + } + return PEI_OK; + } + if(!strcmp(inString, "EXPAND_ATI_SRC_TST")) + { + UBYTE srcId = ati_src_tst_get_src_id( (UBYTE) CMD_SRC_EXT ); + + if ( srcId EQ DTI_MNG_ID_NOTPRESENT ) + return PEI_OK; + + uart_new_source_for_aci_src_tst( srcId, 0, NOT_PRESENT_8BIT ); + cmhUART_startConnection (srcId, DEVICE_TYPE_URT); + return PEI_OK; + } + + if(!strncmp(inString, "ADD_TST_SRC", 11)) /* parameter [UART] */ + { + char *end = inString + 11; + UBYTE srcId; + + srcId = ati_src_tst_get_src_id( (UBYTE) CMD_SRC_UNKNOWN ); + + if ( srcId EQ DTI_MNG_ID_NOTPRESENT ) + return PEI_OK; + + while ( *end EQ ' ' ) + end ++; + + if ( !strcmp( end, "UART")) + { + uart_new_source_for_aci_src_tst( srcId, srcId, NOT_PRESENT_8BIT ); + cmhUART_startConnection (srcId, DEVICE_TYPE_URT); + } + + if ( !strcmp( end, "UART_DP")) /* for dual port testing */ + { + static UBYTE device=0; /* lint: at least init to something */ + uart_new_source_for_aci_src_tst( srcId, device, UART_DLCI_NOT_MULTIPLEXED ); + cmhUART_startConnection (srcId, DEVICE_TYPE_URT); + device++; + } + + return PEI_OK; + } +#endif /* UART */ + +#ifdef DTI + if (!strcmp(inString, "STOP_SRC_TST")) + { +EXTERN void ati_src_tst_finit (void); + ati_src_tst_finit (); + } +#endif + +#if defined SMI OR defined MFW + if (!strcmp(inString, "CONC_SMS_TST")) + { +EXTERN void concSMS_InitForTesting(); + concSMS_InitForTesting(); + return PEI_OK; + } +#endif /*#if defined SMI OR defined MFW*/ + + if (!strcmp(inString, "ENABLE_VOCODER_TST")) + { +EXTERN void hl_audio_drv_initForTest(); + hl_audio_drv_initForTest(); + return PEI_OK; + } + +#endif /* _SIMULATION_ */ + +#ifdef GPRS + /* + * Class modification + * Author: ANS + * initial: 07-Nov-00 + */ + if(!strcmp(inString,"CLASS_CC")) + { + default_mobile_class = GMMREG_CLASS_CC; + return PEI_OK; + } + if(!strcmp(inString,"CLASS_CG")) + { + default_mobile_class = GMMREG_CLASS_CG; + return PEI_OK; + } + if(!strcmp(inString,"CLASS_BC")) + { + default_mobile_class = GMMREG_CLASS_BC; + return PEI_OK; + } + if(!strcmp(inString,"CLASS_BG")) + { + default_mobile_class = GMMREG_CLASS_BG; + return PEI_OK; + } + if(!strcmp(inString,"CLASS_B")) + { + default_mobile_class = GMMREG_CLASS_B; + return PEI_OK; + } + if(!strcmp(inString,"CLASS_A")) + { + default_mobile_class = GMMREG_CLASS_A; + return PEI_OK; + } + /* + * End Class modification + */ + + /* + * Attach mode modification + * Author: BRZ + * initial: 14-Apr-01 + */ + if(!strcmp(inString,"AUTO_ATTACH")) + { + automatic_attach_mode = CGAATT_ATTACH_MODE_AUTOMATIC; + return PEI_OK; + } + if(!strcmp(inString,"MAN_ATTACH")) + { + automatic_attach_mode = CGAATT_ATTACH_MODE_MANUAL; + return PEI_OK; + } + if(!strcmp(inString,"AUTO_DETACH")) + { + automatic_detach_mode = CGAATT_DETACH_MODE_ON; + return PEI_OK; + } + if(!strcmp(inString,"MAN_DETACH")) + { + automatic_detach_mode = CGAATT_DETACH_MODE_OFF; + return PEI_OK; + } + /* + * End Attach mode modification + */ +#endif + +#ifdef MFW + if (!strncmp("MFWMOB ",s,7)) + { + mfwExtIn(s+7); + return PEI_OK; + } +#endif + +#ifdef _SIMULATION_ +#ifdef MFW + /* + * Only for Windows: define several variants + * of SIM LOCK pcm content + */ + if (!strncmp("SIMLOCK",s,7)) + { + EXTERN UBYTE sim_lock_mode; + + sim_lock_mode = atoi (s+8); + return PEI_OK; + } +#endif +#endif + +#ifdef FF_TIMEZONE + /* + * simulate an incoming MMR_INFO_IND + */ + if (!strncmp("TIMEZONE_TEST",s,13)) + { + TRACE_EVENT ("pei_config() TIMEZONE_TEST"); + { + PALLOC (mmr_info_ind, MMR_INFO_IND); /* is freed in psa_mmr_info_ind */ + memcpy (mmr_info_ind, 0, sizeof (T_MMR_INFO_IND)); /* clear out all */ + memcpy (mmr_info_ind->short_name.text, "RFT", 3); /* pseudo short name */ + mmr_info_ind->short_name.v_name = 1; + mmr_info_ind->short_name.c_text = 3; + memcpy (mmr_info_ind->full_name.text, "Ramsch Fusch Tinneff", 20); /* pseudo long name */ + mmr_info_ind->full_name.v_name = 1; + mmr_info_ind->full_name.c_text = 20; + mmr_info_ind->ntz.v_tz = 1; + mmr_info_ind->ntz.tz = 0x19; /* simulate -2:45h away from GMT */ + mmr_info_ind->time.v_time = 1; + mmr_info_ind->time.day = 30; /* 30. February 2004 ;~) */ + mmr_info_ind->time.month = 02; + mmr_info_ind->time.year = 04; + mmr_info_ind->time.hour = 11; + mmr_info_ind->time.minute = 55; /* this stuff is really 5 before 12 */ + mmr_info_ind->time.second = 59; + mmr_info_ind->plmn.v_plmn = 1; + mmr_info_ind->plmn.mcc[0] = 0x02; + mmr_info_ind->plmn.mcc[1] = 0x06; + mmr_info_ind->plmn.mcc[2] = 0x02; + mmr_info_ind->plmn.mnc[0] = 0x00; + mmr_info_ind->plmn.mnc[1] = 0x01; + mmr_info_ind->plmn.mnc[2] = 0x0F; + + psa_mmr_info_ind(mmr_info_ind); + return PEI_OK; + } + } +#endif + + TRACE_EVENT_P1("pei_config() %s", s); + + tok_init(s); + + /* + * Parse next keyword and number of variables + */ + while ((valno = tok_next(&keyw,val)) NEQ TOK_EOCS) + { + switch ((keyno = tok_key((KW_DATA *)kwtab,keyw))) + { +#ifdef MFW + case KEY_SEQUENCE: + { + if (valno EQ 1) + { + mfw_keystroke (val[0]); + } + else + { + TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters"); + } + break; + } +#endif + +#ifdef MFW + case KEY_PRESS: + { + if (valno EQ 1) + { + mfw_keystroke_long (val[0], 1); + } + else + { + TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters"); + } + break; + } +#endif + +#ifdef MFW + case KEY_RELEASE: + { + if (valno EQ 1) + { + mfw_keystroke_long (val[0], 0); + } + else + { + TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters"); + } + break; + } +#endif + + case START_AOC: + { + T_FWD_CHG_ADVICE_INV charge; + T_chargingInformation * aoc_para; + + aoc_para = &charge.forwardChargeAdviceArg.chargingInformation; + + TRACE_EVENT ("Set AoC Parameter"); + + aoc_para->v_e1 = TRUE; + aoc_para->e1.c_e_val = 1; + aoc_para->e1.e_val[0] = 60; + aoc_para->v_e2 = TRUE; + aoc_para->e2.c_e_val = 1; + aoc_para->e2.e_val[0] = 140; + aoc_para->v_e3 = TRUE; + aoc_para->e3.c_e_val = 1; + aoc_para->e3.e_val[0] = 100; + aoc_para->v_e4 = TRUE; + aoc_para->e4.c_e_val = 1; + aoc_para->e4.e_val[0] = 250; + aoc_para->v_e5 = FALSE; + aoc_para->e5.c_e_val = 0; + aoc_para->e5.e_val[0] = 0; + aoc_para->v_e6 = FALSE; + aoc_para->e6.c_e_val = 0; + aoc_para->e6.e_val[0] = 0; + aoc_para->v_e7 = TRUE; + aoc_para->e7.c_e_val = 2; + aoc_para->e7.e_val[0] = 0x2; + aoc_para->e7.e_val[1] = 0x58; + + aoc_parameter(0, &charge); + aoc_info (0, AOC_START_AOC); + break; + } + +#ifdef _SIMULATION_ + case CPOL_MODE: + { +#ifdef FF_ATI + if (valno EQ 1) + { + cpolMode = atoi(val[0]); + } + else + { + TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters"); + } +#else + TRACE_ERROR ("[PEI_CONFIG]: AT Command Interpreter Not Supported"); +#endif + break; + } + + case CPOL_IDX2: + { +#ifdef FF_ATI + if (valno EQ 1) + { + cpolIdx2 = atoi(val[0]); + } + else + { + TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters"); + } +#else + TRACE_ERROR ("[PEI_CONFIG]: AT Command Interpreter Not Supported"); +#endif + break; + } +#endif + +#ifdef FF_ATI +#ifdef UART + case ATI_VIA_TIF: + { + EXTERN BOOL atiViaTif; + + if (valno EQ 1) + { + if (strcmp (val[0], "ON") EQ 0) + atiViaTif = TRUE; + else if (strcmp (val[0], "OFF") EQ 0) + atiViaTif = FALSE; + else + TRACE_ERROR ("[PEI_CONFIG]: Wrong Parameter Value"); + } + else + { + TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters"); + } + break; + } +#endif /* UART */ +#endif + + default: + { +#ifdef FF_ATI + if ( ( toupper ( inString[0] ) ) EQ 'A' AND + ( toupper ( inString[1] ) ) EQ 'T' ) + { + USHORT len = 0; + + /* + *--------------------------------------------------------- + * parsing algorithm is not suitable for transparent data + * transfer, call aciCommand only once + *--------------------------------------------------------- + */ + if (!alreadyCalled) + { + while (inString[len] NEQ ' ' AND inString[len] NEQ '\0') + len++; + + inString[len] = '\0'; + + ati_execute_config_cmd ((UBYTE*)inString, len); + } + + alreadyCalled = TRUE; + } + else +#endif + { +#ifdef SMI + return _pei_config (inString); +#else + TRACE_ERROR ("[PEI_CONFIG]: Illegal Keyword"); +#endif + } + break; + } + } + } +#endif + + return PEI_OK; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_PEI | +| STATE : code ROUTINE : pei_monitor | ++--------------------------------------------------------------------+ + + PURPOSE : Monitoring of physical Parameters + +*/ +LOCAL SHORT pei_monitor (void ** monitor) +{ + TRACE_FUNCTION ("pei_monitor()"); + +#ifdef SMI + _pei_monitor (monitor); +#else + aci_mon.version = VERSION_ACI; +#endif + + *monitor = &aci_mon; + + return PEI_OK; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-F&D (8411) MODULE : ACI_PEI | +| STATE : code ROUTINE : pei_create | ++--------------------------------------------------------------------+ + + PURPOSE : Create the Protocol Stack Entity + +*/ + +GLOBAL SHORT aci_pei_create (T_PEI_INFO **info) +{ + static const T_PEI_INFO pei_info = + { + ACI_NAME, + { + pei_init, + pei_exit, + pei_primitive, + pei_timeout, + pei_signal, + NULL, /* no run function */ + pei_config, + pei_monitor, + }, +#if defined (ACI) + 3072, /* Stack Size */ +#endif +#if defined (SMI) + 3072, /* Stack Size */ +#endif +#if defined (MFW) + 4096, /* Stack Size */ +#endif +#if defined (FF_MMI_RIV) + 3072, /* Stack Size */ +#endif + 20, /* Queue Entries */ +#if defined (ACI) + 100, /* Priority */ +#endif +#if defined (SMI) + 100, /* Priority */ +#endif +#if defined (MFW) + 100, /* Priority */ +#endif +#if defined (FF_MMI_RIV) + 100, /* Priority */ +#endif + + MAX_ACI_TIMER, /* number of timer */ + 0x03|PRIM_NO_SUSPEND /* flags */ + }; + + TRACE_FUNCTION ("pei_create()"); + + /* + * Close Resources if open + */ + + if (first_access) + first_access = FALSE; + else + pei_exit (); + + /* + * Export startup configuration data + */ + + *info = (T_PEI_INFO *)&pei_info; + + return PEI_OK; +} + + +#endif /* ACI_PEI_C */