FreeCalypso > hg > fc-tourmaline
diff src/g23m-gsm/rr/rr_pei.c @ 1:fa8dc04885d8
src/g23m-*: import from Magnetite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:25:50 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/g23m-gsm/rr/rr_pei.c Fri Oct 16 06:25:50 2020 +0000 @@ -0,0 +1,1573 @@ + /* ++----------------------------------------------------------------------------- +| 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 defines the process body interface +| for the component RR of the mobile station ++----------------------------------------------------------------------------- +*/ + +#ifndef RR_PEI_C +#define RR_PEI_C + +#define ENTITY_RR + +/*==== INCLUDES ===================================================*/ + +#include <string.h> +#include <stdlib.h> +#include <stddef.h> /* offsetof */ +#include <stdio.h> /* sprintf */ +#include "typedefs.h" +#include "pcm.h" +#include "pconst.cdg" +#include "mconst.cdg" +#include "message.h" +#include "ccdapi.h" +#include "vsi.h" +#include "custom.h" +#include "gsm.h" +#include "prim.h" +#include "cnf_rr.h" +#include "tok.h" +#include "rr.h" +#include "rr_em.h" +#include "cl_shrd.h" + +#if !defined(_SIMULATION_) +#include "ffs/ffs.h" +#include "ffs_coat.h" +#endif /* !_SIMULATION_ */ + +/*==== EXPORT =====================================================*/ +/* + * several handles for communication with other entities + */ +#ifdef TI_PS_HCOMM_CHANGE +GLOBAL T_HANDLE rr_handle = VSI_ERROR; +#ifdef GPRS +GLOBAL T_HANDLE hCommGRR = VSI_ERROR; /* GRR Communication */ +#endif +#else /* for hCommHandles backward compatibility */ +GLOBAL T_HANDLE hCommDL = VSI_ERROR; +#if defined FF_EOTD +GLOBAL T_HANDLE hCommLC = VSI_ERROR; +GLOBAL T_HANDLE hCommRRLP = VSI_ERROR; +#endif /* FF_EOTD */ +GLOBAL T_HANDLE hCommMM = VSI_ERROR; +GLOBAL T_HANDLE hCommPL = VSI_ERROR; +GLOBAL T_HANDLE rr_handle = VSI_ERROR; +#ifdef GPRS +GLOBAL T_HANDLE hCommGRR = VSI_ERROR; /* GRR Communication */ +#endif +GLOBAL T_HANDLE hCommMMI = VSI_ERROR; /* EM Communication */ +#ifdef FF_WAP + GLOBAL T_HANDLE hCommWAP = VSI_ERROR; /* FMM-WAP Communication */ +#endif + +#endif /* TI_PS_HCOMM_CHANGE */ + + + +static UBYTE stop_reg = FALSE; + +GLOBAL T_RR_DATA rr_data_base; + +#ifdef TI_PS_FF_QUAD_BAND_SUPPORT +const UBYTE std_bands[12] = +#else +const UBYTE std_bands[8] = +#endif + { + BAND_GSM_900, /* std = 1 */ + BAND_GSM_900 | BAND_E_GSM, /* std = 2 */ + BAND_PCS_1900, /* std = 3 */ + BAND_DCS_1800, /* std = 4 */ + BAND_DUAL, /* std = 5 */ + BAND_DUAL_EXT, /* std = 6 */ + BAND_GSM_850, /* std = 7 */ + BAND_DUAL_US /* std = 8 */ +#ifdef TI_PS_FF_QUAD_BAND_SUPPORT + ,BAND_GSM_850 | BAND_DCS_1800, /* std = 9 */ + BAND_GSM_900 | BAND_E_GSM | BAND_PCS_1900, /* std = 10 */ + BAND_GSM_850 | BAND_GSM_900 | BAND_E_GSM | BAND_DCS_1800, /* std = 11 */ + BAND_GSM_850 | BAND_GSM_900 | BAND_E_GSM | BAND_PCS_1900 /* std = 12 */ +#endif + }; + +/*==== PRIVATE ====================================================*/ + +LOCAL void pei_not_supported (void *data); + +/*==== VARIABLES ==================================================*/ +#ifdef _SIMULATION_ +LOCAL BOOL first_access = TRUE; +#endif /* _SIMULATION_ */ + +/*==== FUNCTIONS ==================================================*/ + +LOCAL const T_FUNC dl_table[] = { + MAK_FUNC_0( dat_dl_establish_ind, DL_ESTABLISH_IND ), /* 0x80004003 */ + MAK_FUNC_0( dat_dl_establish_cnf, DL_ESTABLISH_CNF ), /* 0x80014003 */ + MAK_FUNC_0( dat_dl_release_ind, DL_RELEASE_IND ), /* 0x80024003 */ + MAK_FUNC_0( dat_dl_release_cnf, DL_RELEASE_CNF ), /* 0x80034003 */ + MAK_FUNC_S( for_dl_data_ind, DL_DATA_IND ), /* 0x80044003 */ +#if defined (REL99) && defined (TI_PS_FF_EMR) + MAK_FUNC_S( for_dl_short_unitdata_ind, DL_SHORT_UNITDATA_IND ), /* 0x80054003 */ +#else + MAK_FUNC_0( pei_not_supported, DL_DATA_CNF ), /* 0x80054003 */ +#endif +}; + +LOCAL const T_FUNC rr_table[] = { + MAK_FUNC_0( dat_rr_abort_req, RR_ABORT_REQ ), + MAK_FUNC_0( att_rr_activate_req, RR_ACTIVATE_REQ ), + MAK_FUNC_S( dat_rr_data_req, RR_DATA_REQ ), + MAK_FUNC_0( att_rr_deactivate_req, RR_DEACTIVATE_REQ ), + MAK_FUNC_S( dat_rr_establish_req, RR_ESTABLISH_REQ ), + MAK_FUNC_0( att_rr_sync_req, RR_SYNC_REQ ), + MAK_FUNC_0( att_rr_sync_hplmn_req, RR_SYNC_HPLMN_REQ ) +}; + +LOCAL const T_FUNC mph_table[] = { + MAK_FUNC_N( pei_not_supported, MPH_BCCH_IND ), + MAK_FUNC_0( att_mph_measurement_ind, MPH_MEASUREMENT_IND ), + MAK_FUNC_0( dat_mph_dedicated_cnf, MPH_DEDICATED_CNF ), + MAK_FUNC_0( dat_mph_dedicated_fail_cnf, MPH_DEDICATED_FAIL_CNF ), + MAK_FUNC_0( att_mph_error_ind, MPH_ERROR_IND ), + MAK_FUNC_0( dat_mph_emo_meas_ind, MPH_EMO_MEAS_IND ), + MAK_FUNC_0( dat_mph_paging_ind, MPH_PAGING_IND ), + MAK_FUNC_0( cs_mph_power_cnf, MPH_POWER_CNF ), + MAK_FUNC_0( cs_mph_bsic_cnf, MPH_BSIC_CNF ), + MAK_FUNC_S( for_mph_unitdata_ind, MPH_UNITDATA_IND ), + MAK_FUNC_0( dat_mph_random_access_cnf, MPH_RANDOM_ACCESS_CNF ), + MAK_FUNC_0( att_mph_sync_ind, MPH_SYNC_IND ), + MAK_FUNC_0( att_mph_meas_order_cnf, MPH_MEAS_ORDER_CNF ), +#ifdef GPRS + MAK_FUNC_0( att_mph_ext_meas_cnf, MPH_EXT_MEAS_CNF ), +#else + MAK_FUNC_N( pei_not_supported, 0 ), /* 0x0D */ +#endif +#if defined FF_EOTD + MAK_FUNC_0( att_mph_ncell_pos_ind, MPH_NCELL_POS_IND ), +#else + MAK_FUNC_N( pei_not_supported, 0 ), /* 0x0E */ +#endif /* FF_EOTD */ + MAK_FUNC_0( att_mph_stop_dedicated_cnf, MPH_STOP_DEDICATED_CNF), /* 0x0f */ +#ifdef GPRS + MAK_FUNC_0( att_mph_meas_rep_cnf, MPH_MEAS_REP_CNF ) +#else + MAK_FUNC_N( pei_not_supported, 0 ) /* 0x10 */ +#endif +#ifdef TI_PS_FF_QUAD_BAND_SUPPORT + , + MAK_FUNC_N( att_mph_init_rr_ind, MPH_INIT_RR_IND ) /* 0x11 */ +#endif + +}; + +#ifdef FF_EM_MODE +LOCAL const T_FUNC em_ul_table[] = { + MAK_FUNC_0( dat_em_sc_info_req, EM_SC_INFO_REQ ), /* 0x00*/ + MAK_FUNC_N( pei_not_supported, 0 ), /* 0x01*/ + MAK_FUNC_0( dat_em_nc_info_req, EM_NC_INFO_REQ ), /* 0x02*/ + MAK_FUNC_0( dat_em_loc_pag_info_req, EM_LOC_PAG_INFO_REQ ), /* 0x03*/ + MAK_FUNC_0( dat_em_plmn_info_req, EM_PLMN_INFO_REQ ), /* 0x04*/ + MAK_FUNC_0( dat_em_cip_hop_dtx_info_req, EM_CIP_HOP_DTX_INFO_REQ ), /* 0x05*/ + MAK_FUNC_0( dat_em_mobdata_power_info_req, EM_POWER_INFO_REQ ), /* 0x06*/ + MAK_FUNC_0( dat_em_mobdata_id_info_req, EM_IDENTITY_INFO_REQ ), /* 0x07*/ + MAK_FUNC_0( dat_em_mobdata_version_info_req,EM_SW_VERSION_INFO_REQ ), /* 0x08*/ + MAK_FUNC_N( pei_not_supported, 0 ), /* 0x09*/ + MAK_FUNC_N( pei_not_supported, 0 ), /* 0x0A*/ + MAK_FUNC_N( rr_em_rr_event_req, EM_RR_EVENT_REQ ), /* 0x0B*/ + MAK_FUNC_N (pei_not_supported, 0 ), /* 0x0C */ + MAK_FUNC_N (pei_not_supported, 0 ), /* 0x0D */ + MAK_FUNC_N (pei_not_supported, 0 ), /* 0x0E */ + MAK_FUNC_N (pei_not_supported, 0 ), /* 0x0F */ + MAK_FUNC_N (pei_not_supported, 0 ), /* 0x10 */ /*SIM - event*/ + MAK_FUNC_0( rr_em_pco_trace_req, EM_PCO_TRACE_REQ ), /* 0x11*/ /*PCO output*/ +#ifdef GPRS + MAK_FUNC_0 (dat_em_fmm_sc_info_req, EM_FMM_SC_INFO_REQ ), /* 0x12 */ + MAK_FUNC_N (pei_not_supported, 0 ), /* 0x13 */ + MAK_FUNC_0 (dat_em_fmm_nc_info_req, EM_FMM_NC_INFO_REQ ), /* 0x14 */ +#else /*GPRS*/ + MAK_FUNC_N (pei_not_supported, 0 ), /* 0x12 */ + MAK_FUNC_N (pei_not_supported, 0 ), /* 0x13 */ + MAK_FUNC_N (pei_not_supported, 0 ), /* 0x14 */ +#endif /*GPRS*/ + MAK_FUNC_N (pei_not_supported, 0 ), /* 0x15 */ + MAK_FUNC_N (pei_not_supported, 0 ), /* 0x16 */ + MAK_FUNC_N (pei_not_supported, 0 ), /* 0x17 */ + MAK_FUNC_N (pei_not_supported, 0 ), /* 0x18 */ + MAK_FUNC_0 (dat_em_amr_info_req, EM_AMR_INFO_REQ ) /* 0x19 */ +}; +#endif /* FF_EM_MODE */ + + +#if defined FF_EOTD +LOCAL const T_FUNC rrlc_table[] = { + MAK_FUNC_0( dat_rrlc_meas_req, RRLC_MEAS_REQ ) +}; + +LOCAL const T_FUNC rrrrlp_table[] = { + MAK_FUNC_S( dat_rrrrlp_data_req, RRRRLP_DATA_REQ ) +}; +#endif /* FF_EOTD */ + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : RR_PEI | +| STATE : code ROUTINE : pei_primitive | ++--------------------------------------------------------------------+ + + PURPOSE : Process protocol specific primitive. + +*/ + +LOCAL SHORT pei_primitive (void * ptr) +{ + T_PRIM *prim = ptr; + + /* + * | | | | + * RR EM RRLC RRRRLP UPLINK + * | | | | + * +-------v-------v-------v-------v------+ + * | | + * | RR | + * | | + * +----------^------------------^--------+ + * | | + * MPH DL DOWNLINK + * | | + * + */ + + TRACE_FUNCTION ("pei_primitive()"); + + /* + * On keypress may stop the registration timer + */ + if (stop_reg) + { + stop_reg = FALSE; + tim_reset_registration_timer (); + } + + if (prim NEQ NULL) + { + ULONG opc = prim->custom.opc; + USHORT n; + const T_FUNC *table; + GET_INSTANCE_DATA; + + VSI_PPM_REC ((T_PRIM_HEADER*)prim, __FILE__, __LINE__); + + PTRACE_IN (opc); + + switch (SAP_NR(opc)) + { + case SAP_NR(RR_UL) : table = rr_table; n = TAB_SIZE ( rr_table); break; + case SAP_NR(DL_DL) : table = dl_table; n = TAB_SIZE ( dl_table); break; + case SAP_NR(MPH_UL) : table = mph_table; n = TAB_SIZE ( mph_table); break; +#if defined FF_EOTD + case SAP_NR(RRLC_UL) : table = rrlc_table; n = TAB_SIZE ( rrlc_table); break; + case SAP_NR(RRRRLP_UL): table = rrrrlp_table; n = TAB_SIZE (rrrrlp_table); break; +#endif /* FF_EOTD */ + +#ifdef GPRS + case RRGRR_UL: gprs_get_table_n (&table, &n); break; +#endif /* GPRS */ + +#ifdef FF_EM_MODE + case EM_Ul: table = em_ul_table; n = TAB_SIZE (em_ul_table); break; +#endif /* FF_EM_MODE*/ + + default : table = NULL; n = 0; break; + } + + 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 */ + JUMP (table->func) (P2D(prim)); + + while (ENTITY_DATA->use_stored_entries) + { + ENTITY_DATA->use_stored_entries = FALSE; + srv_use_stored_prim (); + } + } +#if defined (REL99) && defined (TI_PS_FF_EMR) + else if (PRIM_NR(opc) EQ DL_SPD_PID ) + { + for_dl_short_unitdata_ind((T_DL_SHORT_UNITDATA_IND*) P2D(prim)); + } +#endif + else + { + pei_not_supported (P2D(prim)); + } + return PEI_OK; + } + + /* + * Primitive is no GSM Primitive + * then forward to the environment + */ + +#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 + } + return PEI_OK; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : RR_PEI | +| STATE : code ROUTINE : rr_pei_primitive | ++--------------------------------------------------------------------+ + + PURPOSE : used to restart a stored primitive. + +*/ +GLOBAL void rr_pei_primitive (T_PRIM * prim) +{ + pei_primitive (prim); +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : RR_PEI | +| STATE : code ROUTINE : wake_up_rr | ++--------------------------------------------------------------------+ + + PURPOSE : This function can be called from the MMI or keypad driver + to restart registration if in limited / no service condition. + +*/ +/*lint -esym(714,wake_up_rr) | Symbol not referenced */ +/*lint -esym(765,wake_up_rr) | external could be made static */ +GLOBAL void wake_up_rr (void) +{ + GET_INSTANCE_DATA; + T_TIME status = 0L; + + TRACE_FUNCTION ("wake_up_rr()"); + + switch (rr_data->ms_data.rr_service) + { + case NO_SERVICE: + case LIMITED_SERVICE: + if (rr_data->ms_data.reg_counter >= 12) + { + TIMER_STATUS (rr_handle, TREG, &status); + if (status) + { + stop_reg = TRUE; + vsi_c_awake (VSI_CALLER_SINGLE); + } + } + break; + } +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : RR_PEI | +| STATE : code ROUTINE : pei_not_supported | ++--------------------------------------------------------------------+ + + PURPOSE : An unsupported primitive is received. + +*/ + +static void pei_not_supported (void * data) +{ + TRACE_FUNCTION ("pei_not_supported()"); + + PFREE (data) +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : RR_PEI | +| STATE : code ROUTINE : pei_init | ++--------------------------------------------------------------------+ + + PURPOSE : Initialize Protocol Stack Entity + +*/ +LOCAL SHORT pei_init (T_HANDLE handle) +{ + GET_INSTANCE_DATA; + rr_handle = handle; + + TRACE_FUNCTION ("pei_init()"); + +#ifdef TI_PS_HCOMM_CHANGE + if (!cl_hcom_all_handles_open()) + { + return PEI_ERROR; + } + +#ifdef GPRS + if (hCommGRR < VSI_OK) + { + if ((hCommGRR = vsi_c_open (VSI_CALLER GRR_NAME)) < VSI_OK) + return PEI_ERROR; + } +#endif +#else /* for hCommHandles backward compatibility */ + if (hCommDL < VSI_OK) + { + if ((hCommDL = vsi_c_open (VSI_CALLER DL_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; + } + if (hCommRRLP < VSI_OK) + { + if ((hCommRRLP = vsi_c_open (VSI_CALLER RRLP_NAME)) < VSI_OK) + return PEI_ERROR; + } +#endif /* FF_EOTD */ + + if (hCommMM < VSI_OK) + { + if ((hCommMM = vsi_c_open (VSI_CALLER MM_NAME)) < VSI_OK) + return PEI_ERROR; + } + + if (hCommPL < VSI_OK) + { + if ((hCommPL = vsi_c_open (VSI_CALLER PL_NAME)) < VSI_OK) + return PEI_ERROR; + } + +#ifdef GPRS + if (hCommGRR < VSI_OK) + { + if ((hCommGRR = vsi_c_open (VSI_CALLER GRR_NAME)) < VSI_OK) + return PEI_ERROR; + } +#endif + +#ifdef FF_WAP /*FMM*/ + + if (hCommWAP < VSI_OK) + { + if ((hCommWAP = vsi_c_open (VSI_CALLER WAP_NAME)) < VSI_OK) + return PEI_ERROR; + } +#endif + + + if (hCommMMI < VSI_OK) + { + /* + * Open MMI (Layer 4) + */ + + if ((hCommMMI = vsi_c_open (VSI_CALLER ACI_NAME)) < VSI_OK) + return PEI_ERROR; + } +#endif /* TI_PS_HCOMM_CHANGE */ + rr_data->ms_data.multislot_class_configured = FALSE; + rr_data->ms_data.cmsp_configured = FALSE; + /* + * Initialize Condat Coder Decoder and + * processes + */ + +#if !defined(_SIMULATION_) + // TRACE_EVENT (rr_version()); + // SYST_TRACE (rr_version()); +#endif /* !_SIMULATION_ */ + + ccd_init (); + att_init_gsm_data (); + dat_init_rr_data (); + cs_init_process (); + pcm_Init (); + cl_shrd_init(rr_handle); + +#if defined(_SIMULATION_) + rr_csf_ms_cap (); + rr_csf_check_rfcap (TRUE); +#endif + +#ifdef GPRS + gprs_init_gprs_data (); +#endif + +#ifdef FF_EM_MODE + em_init_rr_event_trace(); + em_rr_sem_init(); + em_init_get_hchn (); +#endif /* FF_EM_MODE */ + + return PEI_OK; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : RR_PEI | +| STATE : code ROUTINE : pei_timeout | ++--------------------------------------------------------------------+ + + PURPOSE : Process timeout + +*/ + +LOCAL SHORT pei_timeout (USHORT index) +{ + GET_INSTANCE_DATA; + + TRACE_FUNCTION ("pei_timeout ()"); + + /* + * Handle Timeouts + */ + tim_exec_timeout (index); + + while (ENTITY_DATA->use_stored_entries) + { + ENTITY_DATA->use_stored_entries = FALSE; + srv_use_stored_prim (); + } + + return PEI_OK; +} + +#ifdef _SIMULATION_ +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : RR_PEI | +| STATE : code ROUTINE : pei_exit | ++--------------------------------------------------------------------+ + + PURPOSE : Close Resources and terminate + +*/ + +LOCAL SHORT pei_exit (void) +{ + TRACE_FUNCTION ("pei_exit()"); + + /* + * clean up communication + */ +#ifdef TI_PS_HCOMM_CHANGE +#else /* for hCommHandles backward compatibility */ + vsi_c_close (VSI_CALLER hCommDL); + hCommDL = VSI_ERROR; + +#if defined FF_EOTD + vsi_c_close (VSI_CALLER hCommLC); + hCommLC = VSI_ERROR; + + vsi_c_close (VSI_CALLER hCommRRLP); + hCommRRLP = VSI_ERROR; +#endif /* FF_EOTD */ + + vsi_c_close (VSI_CALLER hCommMM); + hCommMM = VSI_ERROR; + + vsi_c_close (VSI_CALLER hCommPL); + hCommPL = VSI_ERROR; + + vsi_c_close (VSI_CALLER hCommMMI); + hCommMMI = VSI_ERROR; + +#ifdef FF_WAP /*FFM*/ + vsi_c_close (VSI_CALLER hCommWAP); + hCommWAP = VSI_ERROR; +#endif +#endif /* TI_PS_HCOMM_CHANGE */ + +#ifdef FF_EM_MODE + em_rr_sem_exit(); +#endif /* FF_EM_MODE */ + + ccd_exit(); + cl_shrd_exit(); + + return PEI_OK; +} +#endif /* _SIMULATION_ */ + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : RR_PEI | +| STATE : code ROUTINE : pei_config | ++--------------------------------------------------------------------+ + + PURPOSE : Dynamic Configuration + +*/ + +#if !defined (NCONFIG) +LOCAL const KW_DATA kwtab[] = { +#ifdef OPTION_TIMER + RR_TIMER_SET, TIMER_SET, + RR_TIMER_RESET, TIMER_RESET, + RR_TIMER_SPEED_UP, TIMER_SPEED_UP, + RR_TIMER_SLOW_DOWN, TIMER_SLOW_DOWN, + RR_TIMER_SUPPRESS, TIMER_SUPPRESS, +#endif /* OPTION_TIMER */ + RR_TFAST_CS, TIM_FAST, + RR_TNORMAL_CS, TIM_NORMAL, + RR_FCR, FCR, + RR_SCR, SCR, + RR_DLE, DLE, + RR_FCA, FCA, + RR_FRL, FRL, + RR_FHO, FHO, + RR_IHO, IHO, + RR_NO_SYS_TIME, NO_SYS_TIME, + RR_GSM_OFFSET, GSM_OFFSET, + RR_DCS_OFFSET, DCS_OFFSET, + RR_CTO, CTO, + RR_NKC, NKC, + RR_RESTRICTED_BAND, ID_RESTRICTED_BAND, + RR_BL_CS, BL_CS, + RR_U_RXT, U_RXT, + RR_M_RXT, M_RXT, + RR_L_RXT, L_RXT, + RR_FBLS, FBLS, + RR_SHOW_BL, SHOW_BL, + RR_SHOW_WL, SHOW_WL, + RR_SET_NPS_DELAY, SET_NPS_DELAY, +#if defined (_SIMULATION_) + RR_MT_CALL_NAME, RR_MT_CALL, + RR_MT_SMS_0_NAME, RR_MT_SMS_0, + RR_MT_SMS_2_NAME, RR_MT_SMS_2, + RR_SRV_FULL_NAME, RR_SERVICE_FULL, + RR_SRV_LIM_NAME, RR_SERVICE_LIMITED, + RR_SRV_NO, RR_SERVICE_NO, + RR_PSEUDO_SYNC_HO, ID_PSEUDO_SYNC_HO, + RR_PCM, ID_PCM, + RR_DCS_PCLASS_3, DCS_PCLASS_3, +#endif /* _SIMULATION_ */ + RR_MULTISLOT_CLASS, ID_MULTISLOT_CLASS, + RR_CMSP, ID_CMSP, +#if !defined(_SIMULATION_) + RR_FFS_CHECK, ID_FFS_CHECK, +#endif +#if defined (_SIMULATION_FFS_) + RR_ERASE_WL, ERASE_WL, + RR_ERASE_BL, ERASE_BL, + RR_SHIELD, SHIELD, + RR_INIT_FFS, INIT_FFS, + RR_WRITE_FFS, WRITE_FFS, +#endif /* (_SIMULATION_FFS_)*/ + RR_SET_WL, SET_WL, + RR_SET_BL, SET_BL, + RR_SET_WL_REGION, SET_WL_REGION, + RR_SET_LAST_USED_SC, SET_LAST_USED_SC, + RR_SCS, SCS, + RR_SET_WL_PLMN, SET_WL_PLMN, + "", 0 + }; + +static const KW_DATA partab[] = { +#ifdef OPTION_TIMER + T3110_NAME, T3110, + T3122_NAME, T3122, + T3126_NAME, T3126, + TRESELECT_NAME, T_RESELECT, + TREG_NAME, TREG, + TABORT_NAME, TABORT, +#endif + "", 0 + }; +#endif /*!defined (NCONFIG)*/ +/* Implements Measure#36 */ +#if defined(NCONFIG) +#else /* NCONFIG */ +LOCAL SHORT pei_config (T_PEI_CONFIG inString) +{ + GET_INSTANCE_DATA; +#if !defined (NCONFIG) + #define NMAX_VAL 20 + { + char * s = inString; + SHORT valno; + char * keyw; + char * val [NMAX_VAL]; +#ifdef OPTION_TIMER + BOOL t_man = FALSE; + SHORT t_num = 0; + LONG t_val = 0; + +#endif +#if defined(_SIMULATION_FFS_) + UBYTE count = 0,index = 0,mcc[SIZE_MCC]; + SHORT mcc_val = 0; +#endif /* _SIMULATION_FFS */ + + TRACE_FUNCTION ("pei_config()"); + + TRACE_EVENT (s); + + tok_init(s); + + /* + * Parse next keyword and number of variables + */ + while ((valno = tok_next(&keyw,val)) NEQ TOK_EOCS) + { + switch ( tok_key((KW_DATA *)kwtab,keyw)) + { + case TOK_NOT_FOUND: + TRACE_ERROR ("[PEI_CONFIG]: Illegal Keyword"); + break; + + case FCR: /* fast cell reselection */ + TRACE_EVENT ("[PEI_CONFIG]: FAST CELL RESELECTION"); + rr_data->dyn_config.fcr = 1; + break; + + case SCS: + { + SHORT i = 0; + PALLOC (error_ind, MPH_ERROR_IND); + + TRACE_EVENT(" [PEI_CONFIG]: START CELL SELECTION"); + + for( i=0; i < 6; i++) + rr_data->nc_data[i].bcch_status = NON_DECODED; + /* + * Simulating Downlink Failure + */ + error_ind->cs = CS_DOWN_LINK_FAIL; + error_ind->arfcn = rr_data->nc_data[SC_INDEX].arfcn; + pei_primitive ((T_PRIM *)D2P(error_ind)); + } + break; + + case SCR: /* slow cell reselection */ + TRACE_EVENT ("[PEI_CONFIG]: SLOW CELL RESELECTION"); + rr_data->dyn_config.scr = 1; + break; + + + case DLE: /* downlink error */ + { + PALLOC (error_ind, MPH_ERROR_IND); + + TRACE_EVENT ("[PEI_CONFIG]: DOWNLINK ERROR"); + error_ind->cs = CS_DOWN_LINK_FAIL; + pei_primitive ((T_PRIM *)D2P(error_ind)); + } + break; + + case FRL: /* force radio link timeout */ + { + PALLOC (error_ind, MPH_ERROR_IND); + + TRACE_EVENT ("[PEI_CONFIG]: RADIO LINK ERROR"); + error_ind->cs = CS_RADIO_LINK_FAIL; + pei_primitive ((T_PRIM *)D2P(error_ind)); + } + break; + case FCA: /* failed channel assign */ + TRACE_EVENT ("[PEI_CONFIG]: FAILED CHANNEL ASSIGN"); + rr_data->dyn_config.fca = 1; + break; + + case FHO: /* forced handover */ + TRACE_EVENT ("[PEI_CONFIG]: FORCED HANDOVER"); + rr_data->dyn_config.fho = 1; + break; + + case IHO : /* Lock/Unlock the DUT to the cell it is already camping */ + TRACE_EVENT_P1("[PEI_CONFIG]: Lock/Unlock the DUT to the cell it is already camping : %s", val[0]); + rr_data->dyn_config.iho = atoi (val[0]); + break; + + case GSM_OFFSET: /* Offset for GSM channels */ + rr_data->dyn_config.gsm_offset = atoi (val[0]); + break; + + case DCS_OFFSET: /* Offset for DCS channels */ + rr_data->dyn_config.dcs_offset = atoi (val[0]); + break; + + case CTO: /* enable cell test operation mode */ + rr_data->cell_test_operation = TRUE; + break; + + case NKC: /* request to cipher when no ciphering key available */ + rr_data->dyn_config.nkc = TRUE; + break; + case BL_CS: /* Controls Black List search */ + if(valno) + { + valno = atoi (val[0]); + rr_data->dyn_config.bl_cs_en = valno ? 1 : 0; + TRACE_EVENT_P1("[PEI_CONFIG]: BL_CS : Black List search : %s", val[0]); + } + else + { + TRACE_ERROR ("[PEI_CONFIG]: BL_CS-Wrong Number of Parameters"); + } + break; + case U_RXT: /* Upper RxLev threshold Level*/ + if(valno>0 AND valno<=MAX_NUM_BANDS) + { + rr_csf_write_rxlev_thr( U_RXT, valno, val ); + } + else + { + TRACE_ERROR ("[PEI_CONFIG]: U_RXT-Wrong Number of Parameters"); + } + break; + case M_RXT: /* Medium threshold level*/ + if(valno>0 AND valno<=MAX_NUM_BANDS) + { + rr_csf_write_rxlev_thr( M_RXT, valno, val ); + } + else + { + TRACE_ERROR ("[PEI_CONFIG]: M_RXT-Wrong Number of Parameters"); + } + break; + case L_RXT: /* Lower threshold level*/ + if(valno>0 AND valno<=MAX_NUM_BANDS) + { + rr_csf_write_rxlev_thr( L_RXT, valno, val ); + } + else + { + TRACE_ERROR ("[PEI_CONFIG]: L_RXT-Wrong Number of Parameters"); + } + break; + case FBLS: /* Force Black List Search */ + if((GET_STATE(STATE_ATT) EQ ATT_IDLE) AND + (rr_data->ms_data.rr_service EQ FULL_SERVICE)) + { +#ifdef TI_PS_FF_QUAD_BAND_SUPPORT + if (rr_data->cs_data.region EQ BOTH_REGIONS) + { + if(srv_is_list_set(&rr_data->cs_data.black_list.list[EUROPEAN_REGION]) OR + srv_is_list_set(&rr_data->cs_data.black_list.list[AMERICAN_REGION])) + { + att_start_cell_selection(RR_ORIGINATED,CS_PARALLEL,BLACK_LIST_SEARCH_MODE); + } + else + TRACE_EVENT("Black List empty"); + } + else + { +#endif + if(srv_is_list_set( + &rr_data->cs_data.black_list.list[rr_data->cs_data.region])) + { + att_start_cell_selection(RR_ORIGINATED,CS_PARALLEL,BLACK_LIST_SEARCH_MODE); + } + else + TRACE_EVENT("Black List empty"); +#ifdef TI_PS_FF_QUAD_BAND_SUPPORT + } +#endif + } + break; + case ID_RESTRICTED_BAND: + rr_data->dyn_config.set_band = atoi (val[0]); + + switch (GET_STATE (STATE_ATT)) + { + case ATT_NULL: + case ATT_NO_SERVICE: + case ATT_CS1: + case ATT_CS2: + case ATT_CS3: + case ATT_IDLE: + rr_data->ms_data.rr_service = NO_SERVICE; + att_code_rr_abort_ind (RRCS_ABORT_CEL_SEL_FAIL); + SET_STATE (STATE_ATT, ATT_NO_SERVICE); + + rr_data->cs_data.scan_mode = CS_FIRST_SCAN_FIRST_ATTEMPT; + + att_reset_old_lai_rac(); + + cs_set_null (); + cs_set_all (); + cs_start_scan (); + /* + * initialise cell selection parameter + */ + rr_data->sc_data.selection_type = CELL_SELECTION; + rr_data->sc_data.mm_started = FALSE; + rr_data->sc_data.found_entries = 0; + att_init_cr_data(); + + SET_STATE (STATE_ATT, ATT_CS1); + + switch (rr_data->dyn_config.set_band) + { + case 0: + TRACE_EVENT ("[PEI_CONFIG]: Set band to default"); + break; + case 1: + TRACE_EVENT ("[PEI_CONFIG]: Set band to GSM 900"); + break; + case 2: + TRACE_EVENT ("[PEI_CONFIG]: Set band to DCS 1800"); + break; + } /* switch (rr_data->set_band) */ + } /* switch (GET_STATE (STATE_ATT)) */ + break; + + case NO_SYS_TIME: + rr_data->dyn_config.no_sys_time = TRUE; + break; + + case SET_LAST_USED_SC: + if(valno) + { + rr_data->cs_data.white_list.last_sc_arfcn = atoi (val[0]); + TRACE_EVENT_P1("LAST SC ARFCN = %x",rr_data->cs_data.white_list.last_sc_arfcn); + } + else + { + TRACE_ERROR ("[PEI_CONFIG]: LAST_USED_SC-Wrong Number of Parameters"); + } + break; + +#if defined (_SIMULATION_FFS_) + case INIT_FFS: + rr_csf_ffs_init(); + TRACE_EVENT_P1("LAST SC ARFCN = %x",rr_data->cs_data.white_list.last_sc_arfcn); + break; + + case WRITE_FFS: + { + rr_csf_write_black_list(&rr_data->cs_data.black_list.list[0]); + rr_csf_write_white_list(&rr_data->cs_data.white_list); + } + break; +#endif /* _SIMULATION_FFS_ */ + + +#ifdef OPTION_TIMER + case TIMER_SET: + if (valno EQ 2) + { + t_man = TRUE; + t_num = tok_key((KW_DATA *)partab,val[0]); + t_val = atoi(val[1]); + if (t_val < 0L) + t_val = 0L; + } + else + { + TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters"); + } + break; + case TIMER_RESET: + case TIMER_SUPPRESS: + if (valno EQ 1) + { + t_man = TRUE; /* Timermanipulation */ + t_num = tok_key((KW_DATA *)partab,val[0]); + t_val = 0L; + } + else + { + TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters"); + } + break; + case TIMER_SPEED_UP: + case TIMER_SLOW_DOWN: + if (valno EQ 2) + { + t_man = TRUE; + t_num = tok_key((KW_DATA *)partab,val[0]); + t_val = atoi(val[1]); + if (t_val <= 0L) + t_val = 1L; + } + else + { + TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters"); + } + break; + case TIM_FAST: + if(valno) + { + rr_data->dyn_config.tfast_cs_val = atoi(val[0])*60000; + TRACE_EVENT_P1("[PEI_CONFIG]TFAST_CS : %dms",rr_data->dyn_config.tfast_cs_val); + if(!rr_data->dyn_config.tfast_cs_val) + { + if(IS_TIMER_ACTIVE(T_FAST_CS)) + TIMERSTOP(T_FAST_CS); + } + } + else + { + TRACE_ERROR ("[PEI_CONFIG]: TFAST_CS-Wrong Number of Parameters"); + } + break; + case TIM_NORMAL: + if(valno) + { + rr_data->dyn_config.tnormal_cs_val = atoi(val[0])*60000; + TRACE_EVENT_P1("[PEI_CONFIG]TNORMAL_CS : %dms",rr_data->dyn_config.tnormal_cs_val); + if(!rr_data->dyn_config.tnormal_cs_val) + { + if(IS_TIMER_ACTIVE(T_NORMAL_CS)) + TIMERSTOP(T_NORMAL_CS); + } + } + else + { + TRACE_ERROR ("[PEI_CONFIG]: TNORMAL_CS-Wrong Number of Parameters"); + } + break; + + +#endif + +#if defined (_SIMULATION_) + case RR_MT_CALL: + /* + * Start mobile terminated call + * if simulation is enabled + */ + break; + case RR_MT_SMS_0: + /* + * Start mobile terminated SMS class 0 + * if simulation is enabled + */ + break; + case RR_MT_SMS_2: + /* + * Start mobile terminated SMS class 0 + * if simulation is enabled + */ + break; + case RR_SERVICE_FULL: + /* + * Set full service + * if simulation is enabled + */ + break; + case RR_SERVICE_LIMITED: + /* + * Set limited service + * if simulation is enabled + */ + break; + case RR_SERVICE_NO: + /* + * Set no service + * if simulation is enabled + */ + break; + case RR_MO_CONNECT: + break; + + case ID_PSEUDO_SYNC_HO: + if (valno) + { + if (atoi (val[0])) + rr_data->ms_data.rf_cap.ps = TRUE; + else + rr_data->ms_data.rf_cap.ps = FALSE; + TRACE_EVENT_P1 ("PSEUDO_SYNC_HO capability changed (%u)", + rr_data->ms_data.rf_cap.ps); + rr_csf_fit_capability (); + } + else + { + TRACE_ERROR("[PEI_CONFIG]: use CONFIG PSEUDO_SYNC_HO=<value>"); + } + break; + case DCS_PCLASS_3 : + TRACE_EVENT_P1("DCS_PCLASS_3 old [%d] -> new[3]", + rr_data->ms_data.rf_cap.rf_power.pow_class4[IDX_PWRCLASS_1800].pow_class); + rr_data->ms_data.rf_cap.rf_power.pow_class4[IDX_PWRCLASS_1800].pow_class = POWER_CLASS_3; + break; + case ID_PCM: /* sample: COMMAND ("RR CONFIG PCM=<MSCAP,0x0F,0xb7,0b10001010,0,0,0>") */ + if (valno) + { + UBYTE b[NMAX_VAL-1]; + UBYTE version,ok=1; + USHORT i,n=valno-1; + + if ( pcm_ReadFile ( val[0], n, b, &version) EQ PCM_OK) + { + for ( i = 0; i < n; ++i ) + { + UBYTE c,*p = val[i+1]; + int dig,z = 0; + UBYTE base; + + if ( p[0] EQ '0' ) + { + if ( p[1] EQ 'x' OR p[1] EQ 'X' ) { p += 2; base = 16; } else + if ( p[1] EQ 'b' OR p[1] EQ 'B' ) { p += 2; base = 2; } else + base = 8; + } + else + base = 10; + + while ( ok AND (c = *p++) != '\0' ) + { + if ( c >= '0' AND c <= '9' ) dig = c - '0'; else + if ( c >= 'A' AND c <= 'F' ) dig = c - 'A' + 10; else + if ( c >= 'a' AND c <= 'f' ) dig = c - 'a' + 10; else + { + ok = 0; + break; + } + + if ( base EQ 2 ) ok = dig >= 0 AND dig <= 1; else + if ( base EQ 8 ) ok = dig >= 0 AND dig <= 7; else + if ( base EQ 10 ) ok = dig >= 0 AND dig <= 9; else + if ( base EQ 16 ) ok = dig >= 0 AND dig <= 15; + + if ( ok ) + z = z * base + dig; + }; + + if ( ok ) + { + TRACE_EVENT_P4 ( "%s[%d]: 0x%02x -> 0x%02x", val[0], i, b[i], z ); + b[i] = z; + } + else + { + TRACE_EVENT_P1 ( "invalid number:%s", val[i+1] ); + break; + } + } + + if ( ok ) + { + if ( pcm_WriteFile ( val[0], n, b) EQ PCM_OK) + { + rr_csf_read_rfcap (); + rr_csf_fit_capability (); + rr_csf_read_imei (&rr_data->ms_data.imei); + rr_csf_ms_cap (); + + } + else + { + TRACE_EVENT ( "cannot perform PCM write action" ); + } + } + } + else + { + TRACE_EVENT ( "cannot perform PCM read action" ); + } + + TRACE_EVENT_P1 ( "PCM '%s' " , val[0] ); + } + else + { + TRACE_ERROR("[PEI_CONFIG]: use PCM=<value>"); + } + break; + +#endif /* _SIMULATION_ */ +#if defined(_SIMULATION_FFS_) + case SHIELD: + if(!valno) + { + memset(&rr_data->dyn_config.mcc_shield,0,sizeof(T_shield_mcc)); + } + else + { + rr_data->dyn_config.mcc_shield.enabled = TRUE; + if(valno > MAX_MCC_SHIELD) + { + TRACE_ERROR("max configurable mcc shield values are four"); + valno = MAX_MCC_SHIELD; + } + index = rr_data->dyn_config.mcc_shield.index; + for(count=0;count< valno;count++) + { + if(index >= MAX_MCC_SHIELD) + { + index = 0; + } + mcc_val = atoi(val[count]); + if(!mcc_val) + { + TRACE_ERROR("mcc value cannot be zero"); + } + else + { + mcc[0] = (mcc_val/100); + mcc[1] = (mcc_val/10)%10; + mcc[2] = (mcc_val % 10); + if(!rr_csf_mcc_present(mcc)) + { + memcpy(rr_data->dyn_config.mcc_shield.mcc[index],mcc,SIZE_MCC); + index++; + } + } + } + rr_data->dyn_config.mcc_shield.index = index; + + } + rr_csf_write_mcc_shield_to_ffs(); + break; +#endif /* defined(_SIMULATION_FFS_)*/ + case ID_MULTISLOT_CLASS: + if (valno EQ 1) + { + UBYTE ms = atoi (val[0]); + TRACE_EVENT_P1 ("MULTISLOT_CLASS changed (%u)", ms); + rr_data->ms_data.multislot_class_configured = TRUE; + rr_data->ms_data.rf_cap.rf_ms.gprs_ms_class = ms; +#ifdef GPRS +#ifdef REL99 + rr_data->ms_data.ra_cap.ra_cap_values.acc_cap.v_ms_struct = SUPPORTED; + rr_data->ms_data.ra_cap.ra_cap_values.acc_cap.ms_struct.gprs_struct.gprs_ms_class = ms; + if (rr_data->ms_data.ra_cap.c_ra_cap_r EQ MAX_ADD_RA_CAP) +#else + rr_data->ms_data.ra_cap.acc_cap.v_ms_struct = SUPPORTED; + rr_data->ms_data.ra_cap.acc_cap.ms_struct.gprs_struct.gprs_ms_class = ms; + if (rr_data->ms_data.ra_cap.v_ra_cap2) +#endif + { + /* + * zero means that the same value for multislot parameters as given + * in an earlier access capabilities field within this IE apply + * also here. + */ +#ifdef REL99 + rr_data->ms_data.ra_cap.ra_cap_r[0].ra_cap_values.acc_cap.v_ms_struct = FALSE; +#else + rr_data->ms_data.ra_cap.ra_cap2.acc_cap.v_ms_struct = FALSE; +#endif + } +#endif + } + else + { + TRACE_ERROR("[PEI_CONFIG]: use CONFIG MULTISLOT_CLASS=<value>"); + } + break; + case ID_CMSP: + if (valno EQ 1) + { + BOOL cmsp = atoi (val[0]); + if (cmsp) + cmsp = 1; /* boolean */ + TRACE_EVENT_P2 ("CMSP changed (%u->%u)", rr_data->ms_data.rf_cap.cmsp, cmsp); + rr_data->ms_data.cmsp_configured = TRUE; + rr_data->ms_data.rf_cap.cmsp = cmsp; + } + else + { + TRACE_ERROR("[PEI_CONFIG]: use CONFIG CMSP=<0|1>"); + } + break; +#if defined(_TARGET_) +#endif /* _TARGET_ */ +#if defined (_SIMULATION_FFS_) + case ERASE_WL: + /*lint -e655 (Warning -- bit-wise operation uses (compatible) enum's)*/ + cs_clear_white_list (CLR_WHITE_LIST_RAM | CLR_WHITE_LIST_SIM | CLR_WHITE_LIST_FFS); + /*lint +e655 (Warning -- bit-wise operation uses (compatible) enum's)*/ + break; + case ERASE_BL: + /*lint -e655 (Warning -- bit-wise operation uses (compatible) enum's)*/ + cs_clear_black_list (CLR_BLACK_LIST_RAM | CLR_BLACK_LIST_FFS); + /*lint +e655 (Warning -- bit-wise operation uses (compatible) enum's)*/ + break; +#endif /* _SIMULATION_FFS_ */ + case SHOW_BL: + /*lint -e655 (Warning -- bit-wise operation uses (compatible) enum's)*/ + srv_trace_black_list (); + /*lint +e655 (Warning -- bit-wise operation uses (compatible) enum's)*/ + break; + case SHOW_WL: + /*lint -e655 (Warning -- bit-wise operation uses (compatible) enum's)*/ + srv_trace_white_list (); + /*lint +e655 (Warning -- bit-wise operation uses (compatible) enum's)*/ + break; + case SET_WL: + if(valno < 2) + { + TRACE_ERROR("[PEI_CONFIG]: wrong Number of Parameters"); + } + else + { + UBYTE c_region; + USHORT c_arfcn; + UBYTE i; + + if(valno > 6) + valno = 6; /* 1 to 5 ARFCNs can be configured at a time */ + + c_region = atoi(val[0]); + if(cs_check_region(c_region)) + { + rr_data->cs_data.white_list.region = c_region; + + for(i=1;i<valno;i++) + { + c_arfcn = atoi(val[i]); + if(cs_check_arfcn_range(c_arfcn)) + { + srv_set_channel(&rr_data->cs_data.white_list.list,c_arfcn); + TRACE_EVENT_P1("Arfcn:%d -> WL", c_arfcn); + } /* arfcn */ + } /* for */ + } /* region */ + } /* valno */ + break; + + case SET_BL: + if(valno < 2) + { + TRACE_ERROR("[PEI_CONFIG]: wrong Number of Parameters"); + } + else + { + UBYTE c_region; + USHORT c_arfcn; + UBYTE i; + + if(valno > 6) + valno = 6; /* 1 to 5 ARFCNs can be configured at a time */ + + c_region = atoi(val[0]); + if(cs_check_region(c_region)) + { + for(i=1;i<valno;i++) + { + c_arfcn = atoi(val[i]); + if(cs_check_arfcn_range(c_arfcn)) + { + srv_set_channel(&rr_data->cs_data.black_list.list[c_region],c_arfcn); + TRACE_EVENT_P1("Arfcn:%d -> BL", c_arfcn); + } /* arfcn */ + } /* for */ + } /* region */ + } /* valno */ + break; + case SET_WL_REGION: + if(valno) + { + if(cs_check_region((U8)atoi (val[0]))) + rr_data->cs_data.white_list.region = atoi (val[0]); + } + else + { + TRACE_ERROR ("[PEI_CONFIG]: wrong Number of Parameters"); + } + break; + case SET_WL_PLMN: + if(valno < 2) + { + TRACE_ERROR("[PEI_CONFIG]: wrong Number of Parameters"); + } + else + { + SHORT plmn = atoi (val[0]); + /* copy MCC */ + rr_data->cs_data.white_list.last_sc_lac.mcc[0] = (plmn/100); + rr_data->cs_data.white_list.last_sc_lac.mcc[1] = (plmn/10)%10; + rr_data->cs_data.white_list.last_sc_lac.mcc[2] = (plmn % 10); + + /* Copy MNC */ + plmn = atoi (val[1]); + rr_data->cs_data.white_list.last_sc_lac.mnc[0] = (plmn/100); + rr_data->cs_data.white_list.last_sc_lac.mnc[1] = (plmn/10)%10; + rr_data->cs_data.white_list.last_sc_lac.mnc[2] = (plmn % 10); + + if(!rr_data->cs_data.white_list.last_sc_lac.mnc[2]) + rr_data->cs_data.white_list.last_sc_lac.mnc[2] = 0x0f; + + TRACE_EVENT_P6( "[PEI_CONFIG]SET_WL_PLMN MCC/MNC r=%x%x%x/%x%x%x", + rr_data->cs_data.white_list.last_sc_lac.mcc[0], + rr_data->cs_data.white_list.last_sc_lac.mcc[1], + rr_data->cs_data.white_list.last_sc_lac.mcc[2], + rr_data->cs_data.white_list.last_sc_lac.mnc[0], + rr_data->cs_data.white_list.last_sc_lac.mnc[1], + rr_data->cs_data.white_list.last_sc_lac.mnc[2]); + + } + break; + case SET_NPS_DELAY: + if(valno) + { + rr_data->dyn_config.lim_ser_nps_delay = atoi (val[0]); + } + else + { + TRACE_ERROR ("[PEI_CONFIG]: wrong Number of Parameters"); + } + break; + default: + break; + } + +#ifdef OPTION_TIMER + /* + * If timer manipulation + */ + + if (t_man) + { + t_man = FALSE; + if (t_num >= 0 AND t_num < MAX_RR_TIMER) + ; /* vsi_t_config is removed in latest GPF */ + else + { + TRACE_ERROR ("[PEI_CONFIG]: Parameter out of Range"); + } + } +#endif + } + } /*!defined (NCONFIG)*/ +#endif /*!defined (NCONFIG)*/ + + return PEI_OK; +} +#endif /* NCONFIG */ +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : RR_PEI | +| STATE : code ROUTINE : rr_pei_config | ++--------------------------------------------------------------------+ + + PURPOSE : Dynamic Configuration + +*/ +/*lint -esym(714,rr_pei_config) | Symbol not referenced | used by Frame */ +/*lint -esym(765,rr_pei_config) | external could be made static | used by Frame */ +/* Implements Measure#36 */ +#if defined(NCONFIG) +#else /* NCONFIG */ +GLOBAL SHORT rr_pei_config ( char * inString, char * dummy ) +{ + pei_config ( inString ); + + return PEI_OK; +} +#endif /* NCONFIG */ + + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : RR_PEI | +| STATE : code ROUTINE : pei_create | ++--------------------------------------------------------------------+ + + PURPOSE : Create the Protocol Stack Entity + +*/ +/*lint -esym(714,rr_pei_create) | Symbol not referenced | used by Frame */ +/*lint -esym(765,rr_pei_create) | external could be made static | used by Frame */ +GLOBAL SHORT rr_pei_create (T_PEI_INFO **info) +{ + static const T_PEI_INFO pei_info = + { + "RR", + { + pei_init, +#ifdef _SIMULATION_ + pei_exit, +#else + NULL, +#endif + pei_primitive, + pei_timeout, + NULL, /* no signal function */ + NULL, /* no run function */ +/* Implements Measure#36 */ +#if defined(NCONFIG) + NULL, /* no pei_config function */ +#else /* NCONFIG */ + pei_config, +#endif /* NCONFIG */ + NULL, + }, +#ifdef GPRS + 1736, /* Stack Size */ +#else + 1936, /* Stack Size increase from 1436 to 1936 2007/5/31 */ +#endif + 10, /* Queue Entries */ + 205, /* Priority */ + NUM_OF_RR_TIMERS, /* number of timer */ + /* flags */ +#ifdef _TARGET_ +#ifdef GPRS + PASSIVE_BODY|COPY_BY_REF|TRC_NO_SUSPEND|PRIM_NO_SUSPEND|INT_DATA_TASK +#else + PASSIVE_BODY|COPY_BY_REF|TRC_NO_SUSPEND|PRIM_NO_SUSPEND +#endif +#else + PASSIVE_BODY|COPY_BY_REF +#endif + }; + + TRACE_FUNCTION ("pei_create()"); + + /* + * Close Resources if open + */ + +#ifdef _SIMULATION_ + if (first_access) + first_access = FALSE; + else + pei_exit (); +#endif + + /* + * Export startup configuration data + */ + + *info = (T_PEI_INFO *)&pei_info; + + return PEI_OK; +} +#endif