line source
/*
+-----------------------------------------------------------------------------
| Project : GSM-PS
| Modul : ALR
+-----------------------------------------------------------------------------
| Copyright 2002 Texas Instruments Berlin, AG
| All rights reserved.
|
| This file is confidential and a trade secret of Texas
| Instruments Berlin, AG
| The receipt of or possession of this file does not convey
| any rights to reproduce or disclose its contents or to
| manufacture, use, or sell anything it may describe, in
| whole, or in part, without the specific written consent of
| Texas Instruments Berlin, AG.
+-----------------------------------------------------------------------------
| Purpose : Definitions for the Protocol Stack Entity ALR
+-----------------------------------------------------------------------------
*/
#ifndef ALR_H
#define ALR_H
#define STOP_SYNC_TASK /* stop always any sync tasks before start a new one */
#if 0
#define DL_TRACE_ENABLED /* use DL offline trace */
#define TRACE_STATE_TRANSITION /* trace some state transitions */
#endif /* 0 */
#if !defined(_SIMULATION_) && defined(WIN32)
#define _SIMULATION_
#endif /* !_SIMULATION_ && WIN32 */
#if defined(_SIMULATION_)
#undef DL_TRACE_ENABLED /* no _SYST trace during simulation */
#endif /* WIN32 */
#define SYST_TRACE(a) vsi_o_ttrace(0, 0xFFFF,a)
#define SYST 0, 0xffff
#define SYST_TRACE_P(a) vsi_o_ttrace a
/*
* use it as showed next line...
* SYST_TRACE_P((SYST, "e.g. two parameter: %d %d", p1, p2));
*/
#if !defined(ELEMENTS)
#define ELEMENTS(array) (sizeof(array)/sizeof(array[0]))
#endif /* !ELEMENTS */
/*
* for voice memo
*/
#include "p_cst.h"
/* Bitoffset for Message Buffer allocation */
#define ENCODE_OFFSET 24
/*
* Bitmasks
*/
#define BIT_0 0x01
#define BIT_1 0x02
#define BIT_2 0x04
#define BIT_3 0x08
#define BIT_4 0x10
#define BIT_5 0x20
#define BIT_6 0x40
#define BIT_7 0x80
#define BIT_012 0x07
#include "p_ph.h"
#include "p_mph.h"
/* First 40 carriers per band will be added at top of the MPH_POWER_CNF
* and the next 20 Carriers (40 to 60) will be added at the bottom.
* Remaining carriers needs to be ignored.
*/
#define ADD_AT_THE_TOP 0x01 /* first 40 carrier */
#define ADD_AT_THE_BOTTOM 0x02 /* already 40 carriers were added */
#define REACHED_THE_MAXIMUM 0x04 /* already 60 carriers were added */
#define DO_NOT_ADD 0x08 /* wrong carrier */
/* Private modes */
#define MODE_CHAN_ASS_FAIL 16
#define MODE_HANDOVER_FAIL 17
/* Results of configuration dedicated mode */
#define DEDICATED_SUCCESS 0
#define ALR_ALLOCATE_NEW_BA(v) ((((v)+1) % (ALR_BA_HIGH-ALR_BA_LOW+1)) + ALR_BA_LOW)
#define IS_EXT_MEAS_RUNNING (alr_data->cs_data.mph_ext_meas_req NEQ NULL)
/*
* Dynamic Configurations
*/
#define ID_STD 1
#define ID_CONFIG 2
#define ID_MON_COUNTER_IDLE 3
#define ID_MON_COUNTER_DEDI 4
#define ID_TRC_DATA_IND 5
#define ID_RACH_FAILURE 6
#define ID_EOTD 7
#define ID_TRC_DATA_IND_ALL 0xff
#define ID_TRC_DATA_IND_VALID 0x7f
#define ID_TRC_DATA_IND_INVALID 0x80
#define ID_TRC_DATA_IND_BCCH 0x01 /* normal and extended BCCH */
#define ID_TRC_DATA_IND_PCH 0x02 /* normal and extended PCH */
#define ID_TRC_DATA_IND_CCCH 0x04
#define ID_TRC_DATA_IND_CBCH 0x08
#define ID_TRC_DATA_IND_SCCH 0x10 /* SACCH and SDCCH */
#define ID_TRC_DATA_IND_FCCH 0x20 /* full and half rate FACCH */
#define ID_TRC_DATA_IND_STATE 0x40 /* MA status */
#define ID_TRC_DATA_IND_INIT 0x3f /* all valid frames without stati */
#define ID_TRC_DATA_IND_INIT2 0x1f /* ... without FACCH */
EXTERN UBYTE v_mon_trc_data_ind;
EXTERN UBYTE v_cfg_rach_failure;
/* In addition to normal page modes defined in SAP */
#define PGM_REORG_CS 3
#define NO_PGM_CHANGE 4
#define SAVED_PGM 0xff
/*If page mode is set to REORG and a HPLMN search is performed, L1 cannot
synchronize to NC's. Therefore NORMAL page mode is started. This state
defines that the mobile should be in REORG, but actual is in NORMAL.*/
#define PGM_REORG_NC_SYNC 5
EXTERN UBYTE page_mode_before_hplmn_search;/*to distinguish PGM_REORG and PGM_REORG_CS */
/* Page Mode Changes */
#define NONE 0
#define SWAP_TO_EXTEND 1
#define SWAP_TO_REORG 2
#define SWAP_TO_NORMAL 3
#define MAX_GSM_CHANNEL_ATTEMPTS 40 /* GSM says 30, but this is done in the field */
#define MAX_DPCS_CHANNEL_ATTEMPTS 40
/* Band Limitations for multiband reporting */
#define NO_BAND_LIMITATION 0
#define EXCLUDE_SC_BAND 1
#define ONLY_SC_BAND 2
#define IMSI_LEN 9
#define SI_CONTENTS_MSG_T 2
#define SI_CONTENTS_CS2 9
#define ONLY_ACS 0x80
#define STOP_PCH_READING 1
#define DONT_STOP_PCH_READING 0
#define STOP_MEASUREMENTS 2
/*
* Neighbour cell status
*/
/* #define DEFINE_OLD_NC_STATUS */
#if !defined(DEFINE_OLD_NC_STATUS)
/* neighbour cell base stati */
#define NCS_INACTIVE 0x00
#define NCS_IDLE 0x01
#define NCS_FB_SB 0x02
#define NCS_SB 0x03
/* neighbour cell bit masks */
#define NCB_BCCH 0x04
#define NCB_READ 0x08
#define NCB_PENDING 0x10
#define NCB_SYNC 0x20
#define NCB_RR_NOT_INFORMED 0x40
#define NCB_FAILED 0x80
/* neighbour cell stati */
/* 1of<n> n = 6,12 means that the cell belongs to the n strongest */
/* RLA_C means Received Level Averages according GSM 05.08 seciton 6.1 */
/* (1) no PERIODIC measurement received; cell is excluded from all activities except rxlev measurement */
#define INACTIVE (NCS_INACTIVE)
/* (2) PERIODIC measurement received; not synchronized; BCCH data unknown */
#define IDLE (NCS_IDLE)
/* (11a) not a 1of12 cell any more; synchronized */
#define IDLE_SYNC (NCS_IDLE|NCB_SYNC)
/* (3) strong cell(1of12); not synchronized yet; need first FB and SB synchronization */
#define READ_FB_SB (NCS_FB_SB|NCB_READ)
/* (4) first FB and SB synchronization ongoing */
#define READ_FB_SB_PENDING (NCS_FB_SB|NCB_READ|NCB_PENDING)
/* (9) synchronized; need re-synchronization of SB (10/30 sec); no need to read BCCH */
#define READ_SB (NCS_SB|NCB_READ)
/* (10) re-synchronization of SB ongoing (10/30 sec); no reading of BCCH */
#define READ_SB_PENDING (NCS_SB|NCB_READ|NCB_PENDING)
/* (9a) synchronized; need re-synchronization of SB and re-reading of BCCH (5 min) */
#define READ_SB_BCCH (NCS_SB|NCB_READ|NCB_BCCH)
/* (10a) re-synchronization of SB ongoing (5 min) */
#define READ_SB_BCCH_PENDING (NCS_SB|NCB_READ|NCB_BCCH|NCB_PENDING)
/* (11a) re-synchronization of SB finished; need re-reading of BCCH (5 min) */
#define READ_BCCH (NCS_SB|NCB_READ|NCB_BCCH|NCB_SYNC)
/* (12a) re-reading of BCCH ongoing (5 min) */
#define READ_BCCH_PENDING (NCS_SB|NCB_READ|NCB_BCCH|NCB_SYNC|NCB_PENDING)
/* (5) 1of6 cell; synchronized; BCCH data unknown; need to read BCCH, but to notify RR after a measurement ind only */
#define READ_BCCH_RR_NOT_INFORMED (NCS_SB|NCB_READ|NCB_BCCH|NCB_SYNC|NCB_RR_NOT_INFORMED)
/* (6) 1of6 cell; reading of BCCH ongoing */
#define READ_BCCH_PENDING_RR_NOT_INFORMED (NCS_SB|NCB_READ|NCB_BCCH|NCB_SYNC|NCB_RR_NOT_INFORMED|NCB_PENDING)
/* (8) 1of12 cell; synchronized; in case 1of6: BCCH data known; RR is notified; subsequent RLA_Cs being computed */
#define FB_SB_SYNC (NCS_FB_SB|NCB_SYNC)
/* (7) 1of6 cell; synchronized; BCCH data known; RR not yet notified; first RLA_C being computed */
#define FB_SB_SYNC_RR_NOT_INFORMED (NCS_FB_SB|NCB_SYNC|NCB_RR_NOT_INFORMED)
/* (13) 1of<n> cell state questionable; FB/SB sync or BCCH reading failed 1 thru 8 times */
#define FB_SB_FAILED (NCS_FB_SB|NCB_FAILED)
/* (14) 1of<n> cell; synchronization of FB/SB or reading of BCCH failed > 8 times; NCC check failed; */
#define EXCLUDED (NCB_FAILED)
#else /* !DEFINE_OLD_NC_STATUS */
#define INACTIVE 0
#define IDLE 1
#define READ_BCCH 2
#define FB_SB_SYNC 3
#define FB_SB_FAILED 4
#define READ_FB_SB 5
#define READ_SB 6
#define IDLE_SYNC 7
#define EXCLUDED 8
#define FB_SB_SYNC_RR_NOT_INFORMED 9
#define READ_SB_BCCH 10
#define READ_BCCH_PENDING 11
#define READ_FB_SB_PENDING 12
#define READ_SB_PENDING 13
#define READ_SB_BCCH_PENDING 14
#define READ_BCCH_RR_NOT_INFORMED 15
#define READ_BCCH_PENDING_RR_NOT_INFORMED 16
#endif /* !DEFINE_OLD_NC_STATUS */
/*
* states of a neighbour cell with respect to the BA list
* in the last MPH_NEIGHBOURCELL_REQ.
*/
#define IN_BA 0 /* NCell was in last MPH_NEIGHBOURCELL_REQ */
#define NOT_IN_BA_SHORT 1 /* NCell wasn't in last MPH_NEIGHBOURCELL_REQ but at last confirmation it had state IN_BA (not in BA for a short time) */
#define NOT_IN_BA_LONG 2 /* NCell wasn't in last MPH_NEIGHBOURCELL_REQ and at last confirmation it hadn't state IN_BA (not in BA for a long time) */
/*
* Definitions for AMR
*/
#define CM_AMR 0x41
/*
* The times are given in number of multiframes. Each multiframe is
* equal to circa 217 milliseconds.
*/
#define THIRTY_SECONDS_SCELL_BCCH 128
/*
* States Main Control
*/
#define MA_NULL 0
#define MA_CELL_SELECTION 1
#define MA_IDLE 2
#define MA_CON_EST 3
#define MA_DEDICATED 4
#define MA_CELL_RESELECTION 5
#ifdef GPRS
#define MA_PTM 6
#endif
EXTERN const char * const
STATE_MA_NAME[];
#ifndef GPRS
#define STATE_MA_NAME_INIT \
"MA_NULL" ,\
"MA_CELL_SELECTION" ,\
"MA_IDLE" ,\
"MA_CON_EST" ,\
"MA_DEDICATED" ,\
"MA_CELL_RESELECTION"
#else /* !GPRS */
#define STATE_MA_NAME_INIT \
"MA_NULL" ,\
"MA_CELL_SELECTION" ,\
"MA_IDLE" ,\
"MA_CON_EST" ,\
"MA_DEDICATED" ,\
"MA_CELL_RESELECTION",\
"MA_PTM"
#endif /* !GPRS */
/*
* States Idle Neighbour Cell
*/
#define NC_NULL 0
#define NC_IDLE 1
#define NC_DEDICATED 2
#define NC_CON_EST 3
#ifdef GPRS
#define NC_PIM_PBCCH 4
#define NC_PTM_PBCCH 5
EXTERN const char * const
STATE_NC_NAME[];
#define STATE_NC_NAME_INIT \
"NC_NULL" ,\
"NC_IDLE" ,\
"NC_DEDICATED" ,\
"NC_CON_EST" ,\
"NC_PIM_PBCCH" ,\
"NC_PTM_PBCCH"
#else
EXTERN const char * const
STATE_NC_NAME[];
#define STATE_NC_NAME_INIT \
"NC_NULL" ,\
"NC_IDLE" ,\
"NC_DEDICATED" ,\
"NC_CON_EST"
#endif
/*
* States Dedicated Control
*/
#define DEDI_INACTIVE 0
#define DEDI_IMM_ASS 1
#define DEDI_IMM_ASS_RECONN 2
#define DEDI_ACTIVE 3
EXTERN const char * const
STATE_DEDI_NAME[];
#define STATE_DEDI_NAME_INIT \
"DEDI_INACTIVE" ,\
"DEDI_IMM_ASS" ,\
"DEDI_IMM_ASS_RECONN",\
"DEDI_ACTIVE"
/*
* States Cell Selection
*/
#define CS_NULL 0
#define CS_INIT_L1 1 /* start with configuration of the radio band */
#define CS_INIT_ACTIVE 2 /* configuration of the radio band is active */
#define CS_INIT_DONE 3 /* configuration has done */
#define CS_START_MEASURE 4 /* start measurement with preceding configuration */
#define CS_ACTIVE_MEASURE 5 /* power measurement step is active */
#define CS_MEASURED 6 /* power measurement step has finished */
#define CS_INIT_SYNC 7 /* configuration of the radio band before SYNC */
#define CS_STOP_SYNC 8 /* stop any sync task */
#define CS_STOP_SYNC_DONE 9 /* no sync task active */
#define CS_ACTIVE_SYNC 10
#define CS_ACTIVE_BCCH 11
#define CS_NW_SYNC_TIMEOUT 12 /* ALR has timed out whilst attempting to sync to a nw */
EXTERN const char * const
STATE_CS_NAME[];
#define STATE_CS_NAME_INIT\
"CS_NULL" ,\
"CS_INIT_L1" ,\
"CS_INIT_ACTIVE" ,\
"CS_INIT_DONE" ,\
"CS_START_MEASURE" ,\
"CS_ACTIVE_MEASURE" ,\
"CS_MEASURED" ,\
"CS_INIT_SYNC" ,\
"CS_STOP_SYNC" ,\
"CS_STOP_SYNC_DONE" ,\
"CS_ACTIVE_SYNC" ,\
"CS_ACTIVE_BCCH" ,\
"CS_NW_SYNC_TIMEOUT"
/*
* States PCH Control
*/
#define PCH_NULL 0
#define PCH_ACTIVE 1
EXTERN const char * const
STATE_PCH_NAME[];
#define STATE_PCH_NAME_INIT\
"PCH_NULL" ,\
"PCH_ACTIVE"
/*
* States RACH Control
*/
#define RA_NULL 0
#define RA_ACTIVE 1
#define RA_LISTEN_TO_CCCH 2
EXTERN const char * const
STATE_RA_NAME[];
#define STATE_RA_NAME_INIT \
"RA_NULL" ,\
"RA_ACTIVE" ,\
"RA_LISTEN_TO_CCCH"
/*
* States CBCH Control
*/
#define CBCH_NULL 0
#define CBCH_IDLE 1
#define CBCH_NO_DRX 2
#define CBCH_DRX 3
#define CBCH_HZ_OFF 0
#define CBCH_HZ_IDLE 5
#define CBCH_HZ_PENDING 6
#define CBCH_HZ_RECEIVED 7
EXTERN const char * const STATE_NORMAL_CBCH_NAME[];
EXTERN const char * const STATE_EXT_CBCH_NAME[];
#define STATE_CBCH_NAME_INIT\
"CBCH_NULL" ,\
"CBCH_IDLE" ,\
"CBCH_NO_DRX" ,\
"CBCH_DRX"
/*
* States Idle Mode Serving Cell
*/
#define SC_NULL 0
#define SC_IDLE_INITIAL 1
#define SC_IDLE 2
EXTERN const char * const
STATE_SC_NAME[];
#define STATE_SC_NAME_INIT \
"SC_NULL" ,\
"SC_IDLE_INITIAL" ,\
"SC_IDLE"
/*
* States Idle Mode Serving Cell
*/
typedef enum {
NC_ACQUIRE=0,
NC_CONFIRM
} T_NCELL_PROC;
EXTERN const char * const
STATE_NC_PROC_NAME[];
#define STATE_NC_PROC_NAME_INIT \
"NC_ACQUIRE" ,\
"NC_CONFIRM"
/*
* ALR manages 9 (MAX_STATE) states: CBCH,CS,MA,NC,PCH,RA,SC,DEDI,NC_PROC
*/
#define STATE_CS 0
#define STATE_MA 1
#define STATE_NC 2
#define STATE_PCH 3
#define STATE_RA 4
#define STATE_SC 5
#define STATE_DEDI 6
#define STATE_NC_PROC 7
#define STATE_NORMAL_CBCH 8
#define STATE_EXT_CBCH 9
#define MAX_STATE 10
/*
* A definition is provided in ALR_PEI.C
*/
#ifdef ALR_PEI_C
GLOBAL const char * const STATE_NORMAL_CBCH_NAME[] = { STATE_CBCH_NAME_INIT };
GLOBAL const char * const STATE_EXT_CBCH_NAME[] = { STATE_CBCH_NAME_INIT };
GLOBAL const char * const STATE_CS_NAME [] = { STATE_CS_NAME_INIT };
GLOBAL const char * const STATE_MA_NAME [] = { STATE_MA_NAME_INIT };
GLOBAL const char * const STATE_NC_NAME [] = { STATE_NC_NAME_INIT };
GLOBAL const char * const STATE_PCH_NAME [] = { STATE_PCH_NAME_INIT };
GLOBAL const char * const STATE_RA_NAME [] = { STATE_RA_NAME_INIT };
GLOBAL const char * const STATE_SC_NAME [] = { STATE_SC_NAME_INIT };
GLOBAL const char * const STATE_DEDI_NAME[] = { STATE_DEDI_NAME_INIT };
GLOBAL const char * const STATE_NC_PROC_NAME[]={ STATE_NC_PROC_NAME_INIT };
#endif /* ALR_PIC_C */
/*==== MACROS =====================================================*/
/*
This macros convert channel numbers from and to the layer 1 specific
representation for the target version.
For the single bands GSM900, DCS1800 and PCS1900 the macro is removed
at compile time.
For dualband (STD==5,STD==6) a DCS1800 channel number is converted
using the convert function located at the end of alr_main.c
In the windows variant no change occurs.
*/
EXTERN USHORT convert_arfcn_to_l1 (USHORT arfcn, UBYTE local_std);
EXTERN USHORT convert_arfcn_to_g23 (USHORT arfcn, UBYTE local_std);
/* range check with the fastest way for ARM */
/* corresponds with ((min <= x) AND (x <= max)) */
#define INRANGE(min, x, max) ((unsigned)(x-min) <= (max-min))
#if defined (WIN32)
#define ARFCN_TO_L1(a) ((USHORT)((a)&ARFCN_MASK))
#define ARFCN_TO_G23(a) ((USHORT)((a)&ARFCN_MASK))
#define ARFCN_STD_TO_L1(a,std) ((USHORT)((a)&ARFCN_MASK))
#define ARFCN_STD_TO_G23(a,std) ((USHORT)((a)&ARFCN_MASK))
#else
/*
* target version
*/
#define ARFCN_TO_L1(a) convert_arfcn_to_l1((USHORT)(a),std)
#define ARFCN_TO_G23(a) convert_arfcn_to_g23((USHORT)(a),std)
#define ARFCN_STD_TO_L1(a,std) convert_arfcn_to_l1((USHORT)(a),std)
#define ARFCN_STD_TO_G23(a,std) convert_arfcn_to_g23((USHORT)(a),std)
#endif
/* add resp. get the std value to resp. from arfcn */
#define STD_ADD_TO_ARFCN(a,std) (((a)&~STD_BIT_MASK) | ((std)<<STD_BIT_SHIFT))
#define STD_GET_FROM_ARFCN(a) ((((a)&STD_BIT_MASK)>>STD_BIT_SHIFT))
/* find the frequency band index to which the given arfcn belongs. */
/* EXTERN const int array_band_index[]; */
#define get_band_index_from_arfcn(arfcn, idx, std)\
{\
UBYTE local_std = STD_GET_FROM_ARFCN(arfcn);\
if( !local_std )\
local_std = std;\
idx = local_std;\
if( local_std == STD_DUAL ) {\
if (arfcn >= LOW_CHANNEL_1800)\
idx = STD_1800;\
else\
idx = STD_900;\
}\
else if ( local_std EQ STD_DUAL_EGSM ) {\
if (arfcn >= LOW_CHANNEL_EGSM)\
idx = BAND_E_GSM;\
else if (arfcn >= LOW_CHANNEL_1800)\
idx = STD_1800;\
else if (arfcn EQ CHANNEL_0)\
idx = STD_EGSM;\
else\
idx = STD_900;\
}\
else if( local_std EQ STD_DUAL_US ) {\
if (arfcn >= LOW_CHANNEL_1900)\
idx = STD_1900;\
else\
idx = STD_850;\
}\
(local_std<=STD_DUAL_US)?(idx=array_band_index[idx-1]):(idx=MAX_NUM_BANDS) ;\
}
/*==== TYPES ======================================================*/
EXTERN UBYTE std; /*lint -esym(526,std) : not defined | defined in other entity */
EXTERN UBYTE test_house; /*lint -esym(526,test_house) : not defined | defined in other entity */
typedef struct {
USHORT radio_freq;
SHORT accum_power_result;
} T_POWER_ARRAY;
typedef struct {
USHORT power_array_size;
T_POWER_ARRAY power_array[MAX_CARRIERS];
} T_POWER_MEAS;
typedef struct {
USHORT power_array_size;
T_POWER_ARRAY power_array[MAX_CARRIERS_DUAL_EGSM];
} T_POWER_MEAS1;
typedef struct {
USHORT power_array_size;
T_POWER_ARRAY power_array[MAX_CARRIERS_DUAL_US];
} T_POWER_MEAS2;
EXTERN T_POWER_MEAS1 alr_power_meas_result1;
EXTERN T_POWER_MEAS2 alr_power_meas_result2;
#define CS_SYNC_FAIL_COUNT_MAX 5
#define CS_BCCH_FAIL_COUNT_MAX 10
typedef struct {
T_POWER_MEAS *p_results1;
T_POWER_MEAS *p_results2;
T_MPH_POWER_CNF *p_power_cnf;
T_MPH_POWER_REQ *p_power_req; /* CSI-LLD section: 4.1.3.1.2 */
T_MPH_EXT_MEAS_REQ *mph_ext_meas_req;
USHORT arfcn;
UBYTE ext_meas_state_pend; /* wait for pending MPHC_RXLEV_IND or MPHC_NCELL_SYNC_IND */
UBYTE sync_active;
UBYTE freq_bands;
UBYTE std;
UBYTE std12;
UBYTE freq_area;
UBYTE search_mode;
UBYTE sync_fail_count;
UBYTE bcch_fail_count;
UBYTE c_meas;
UBYTE c_max_meas;
T_TIME c_tim_meas;
} T_CS_DATA;
#define MAX_OLD_CB 10
#define CBCH_BLOCK_SIZE 22
#define CBCH_BLOCKS 4
#define CBCH_MSG_SIZE (CBCH_BLOCKS*CBCH_BLOCK_SIZE)
/* no alignment or gaps between members ! */
typedef struct cbmsg_header_t
{
UBYTE serial_no1;
UBYTE serial_no2;
UBYTE msg_id3;
UBYTE msg_id4;
UBYTE dcs;
UBYTE page;
} T_CBMSG_HEADER;
typedef struct
{
UBYTE cnt;
T_CBMSG_HEADER header [MAX_OLD_CB];
} T_CB_MSG;
#define CBCH_CHANNELS 2
/*
* index defines are in alr_cbch.c :
* CBCH_NORM 0
* CBCH_EXT 1
*/
typedef struct
{
/* message which currently read */
UBYTE msg_is_extended;
UBYTE msg [CBCH_MSG_SIZE];
USHORT msg_id_sat [MAX_IDENTS_SAT];
UBYTE msg_type;
UBYTE sat_enabled;
UBYTE expected_seq_number[CBCH_CHANNELS];
/* schedule support for normal and extended CBCH */
UBYTE begin_schedule[CBCH_CHANNELS];
UBYTE end_schedule[CBCH_CHANNELS];
UBYTE scheduled_sched_msg[CBCH_CHANNELS];
UBYTE schedule_length[CBCH_CHANNELS];
UBYTE last_slot_read[CBCH_CHANNELS];
ULONG schedule_map[CBCH_CHANNELS][2];
/* configured by MMI: specifies which messages are wanted */
UBYTE modus;
UBYTE old_cid_plmn_lac [7];
UBYTE dcs_id [MAX_IDENTS];
USHORT msg_id [MAX_IDENTS];
T_CB_MSG old_cbch_msg;
#if defined(FF_HOMEZONE)
/*
* special handling for homezone CBCH message after cell reselecting
*/
UBYTE homezone;
USHORT msg_hz_id;
UBYTE dcs_hz_id;
USHORT hz_timeout;
#endif /* FF_HOMEZONE */
#if !defined (L1_STORES_CBCH_CONFIG)
T_MPHC_CONFIG_CBCH_REQ mphc_config_cbch;
#endif
} T_CBCH_DATA;
typedef struct
{
UBYTE sys_info_1[22];
UBYTE sys_info_2[22];
UBYTE sys_info_2bis[22];
UBYTE sys_info_2ter[22];
UBYTE sys_info_3[22];
UBYTE sys_info_4[22];
UBYTE sys_info_5[18];
UBYTE sys_info_5bis[18];
UBYTE sys_info_5ter[18];
UBYTE sys_info_6[18];
#ifdef GPRS
UBYTE sys_info_13[22];
#endif
} T_MA_DATA;
typedef struct
{
/* information for using the cell */
USHORT ba_arfcn;
UBYTE last_rxlev;
UBYTE tim_valid;
ULONG frame_offset;
ULONG time_align;
UBYTE bsic;
/* power measurements of the cell */
UBYTE rxlev[5];
UBYTE rxlev_average;
UBYTE c_rxlev;
/* state of the cell */
UBYTE one_of_six; /* this is a subset of one_of_twelve */
UBYTE one_of_twelve;
UBYTE status;
UBYTE ba_status;
UBYTE new_strong_cell;
/* counters for status handling */
UBYTE c_attempt;
UBYTE c_error;
UBYTE c_bcch;
UBYTE c_sync;
USHORT blocks_required;
/* Meas results for averaging when NC=1 or NC=2 */
#ifdef GPRS
USHORT nc_rxlev;
UBYTE c_nc_rxlev;
#endif
/* temporary BCCH storage */
T_MPH_UNITDATA_IND* mph_unitdata_ind;
T_MPH_UNITDATA_IND* mph_unitdata_ind78;
} T_NC;
/* values for component tim_state */
#define NC_TIM_STOPPED 0
#define NC_CONF_ENABLED 1
#define NC_CONF_DISABLED 2
#define NC_CONF_PENDING 3
typedef struct
{
/* +1 because we use this for idle mode cell selection */
#define LAST_BSIC_REQ BA_LIST_SIZE
T_NC cell[BA_LIST_SIZE+1];
T_NC cr_cell; /* */
UBYTE c_ba_arfcn;
UBYTE ba_id;
USHORT channel;
USHORT rxlev_full;
USHORT rxlev_sub;
UBYTE rxqual_full;
UBYTE rxqual_sub;
USHORT tav;
UBYTE pwrc;
UBYTE dtx;
UBYTE act_dtx;
UBYTE update;
UBYTE sc_included;
UBYTE multiband;
UBYTE c_nc_timer;
/*
* Counter variable used to store 10sec timer interval
* in terms of the number of 51 frame control multi-frames.
* This counter is decremented for every measurement indication
* received from L1. This is initialized with TEN_SECONDS_ NCSYNC.
*/
UBYTE c_ncsync_tim;
/*
*Variable to store the system time whenever
* the NCSYNC counter is re-assigned
*/
T_TIME ncsync_start_tim;
/* for MPH_MEASUREMENT_IND */
USHORT fn_offset;
UBYTE max_reports;
UBYTE c_reports; /*
* counters to keep track of the send NCELL_SYNC_REQ's
* and NCELL_BCCH_REQ's valid ranges are 0..12 and 0..6
*/
UBYTE c_sync_req;
UBYTE c_bcch_req;
/* EOTD related */
UBYTE eotd_avail;
UBYTE tim_state;
UBYTE new_strong_cell_detect;
UBYTE c_sync_intrupted;
T_MPH_NCELL_POS_IND* ppos_ind;
T_MPH_NCELL_POS_REQ* ppos_req;
} T_NC_DATA;
#define SYSTEM_INFO_1_READ 0x01
#define SYSTEM_INFO_2_READ 0x02
#define SYSTEM_INFO_3_READ 0x04
#define SYSTEM_INFO_4_READ 0x08
#ifdef GPRS
#define SYSTEM_INFO_13_READ 0x10
#endif
#define ALL_SI_READ_EXCEPT_SI13 0x0F
typedef struct
{
T_MPHC_START_CCCH_REQ pl_idle, last_start_ccch_req;
SHORT imsi_mod_1000;
UBYTE dlt;
UBYTE act_dlt;
UBYTE si3_read;
UBYTE saved_page_mode;
UBYTE imsi [IMSI_LEN];
UBYTE v_tmsi;
ULONG tmsi;
BOOL reorg_bcch_reading;
UBYTE si_bitmap;
} T_PCH_DATA;
typedef struct
{
UBYTE ms_class;
UBYTE dcs_class;
UBYTE max_tx_pwr_ccch;
UBYTE delta [8];
UBYTE channel_request [8];
#ifdef GPRS
UBYTE t1 [8];
UBYTE t2 [8];
UBYTE t3 [8];
#endif
UBYTE max_bursts;
UBYTE c_burst;
} T_RACH_DATA;
typedef struct
{
UBYTE rlt;
UBYTE act_rlt;
USHORT act_bcch;
UBYTE act_mode;
/*
* Description of the actual used
* channel, confirmed by layer 1
*/
T_channel_desc act_channel_desc;
T_frequency_list act_frequency_list;
T_starting_time act_starting_time;
T_frequency_list_bef_sti act_frequency_list_bef_sti;
T_channel_desc act_channel_desc_bef_sti;
UBYTE act_channel_mode;
BOOL act_pwrc;
UBYTE act_cipher_mode;
UBYTE act_a5_algorithm;
T_cipher_key act_cipher_key;
T_amr_configuration act_amr_configuration;
UBYTE act_power;
UBYTE act_dtx_allowed;
/*
* Description of the old used
* channel.
*/
USHORT old_bcch;
UBYTE old_bsic;
UBYTE old_channel;
UBYTE old_channel_mode;
T_channel_desc old_channel_desc;
T_frequency_list old_frequency_list;
T_starting_time old_starting_time;
T_frequency_list_bef_sti old_frequency_list_bef_sti;
T_channel_desc old_channel_desc_bef_sti;
BOOL old_pwrc;
UBYTE old_cipher_mode;
UBYTE old_a5_algorithm;
T_cipher_key old_cipher_key;
T_amr_configuration old_amr_configuration;
UBYTE old_power;
UBYTE old_dtx_allowed;
/*
* Description of the new configured
* channel, not yet confirmed by layer 1.
*/
USHORT temp_bcch;
UBYTE temp_bsic;
UBYTE temp_channel;
UBYTE temp_channel_mode;
T_channel_desc temp_channel_desc;
T_frequency_list temp_frequency_list;
T_starting_time temp_starting_time;
T_frequency_list_bef_sti temp_frequency_list_bef_sti;
T_channel_desc temp_channel_desc_bef_sti;
BOOL temp_pwrc;
UBYTE temp_cipher_mode;
UBYTE temp_a5_algorithm;
T_cipher_key temp_cipher_key;
T_amr_configuration temp_amr_configuration;
UBYTE temp_power;
UBYTE temp_dtx_allowed;
/*
* Description of frequency redefinition
* parameter.
*/
T_channel_desc redef_channel_desc;
T_frequency_list redef_frequency_list;
T_starting_time redef_starting_time;
/*
* Extended Measurmeent Order parameter.
*/
UBYTE emo_ba_id;
} T_DEDI_DATA;
#define TIM_NCSYNC_VALUE 10000
#define TIM_NW_SYNC_GUARD_VALUE 2500
/*
* timer
*/
#define TIMER_TRACE
#if defined (TIMER_TRACE)
#define TIMERSTART(i,v) tim_start_timer (i, v)
#define TIMERSTOP(i) tim_stop_timer (i)
#define IS_TIMER_ACTIVE(i) tim_check_timer (i)
#else
#define TIMERSTART(i,v)
#define TIMERSTOP(i)
#define IS_TIMER_ACTIVE(i)
#endif /* TIMER_TRACE */
enum tim_index_e
{
TIM_POWERMEAS,
TIM_NW_SYNC_GUARD,
#if defined(FF_HOMEZONE)
TIM_HOMEZONE,
#endif /* FF_HOMEZONE */
NUM_OF_ALR_TIMERS
};
typedef void (*T_TIMER_EXPIRY)(void);
typedef struct
{
UBYTE running[NUM_OF_ALR_TIMERS];
T_TIMER_EXPIRY expire[NUM_OF_ALR_TIMERS];
} T_TIM_DATA;
#ifdef OPTION_MULTITHREAD
#define tim_init _ENTITY_PREFIXED(tim_init)
#define tim_exec_timeout _ENTITY_PREFIXED(tim_exec_timeout)
#define tim_stop_timer _ENTITY_PREFIXED(tim_stop_timer)
#define tim_start_timer _ENTITY_PREFIXED(tim_start_timer)
#define tim_check_timer _ENTITY_PREFIXED(tim_check_timer)
#define trace_timer _ENTITY_PREFIXED(trace_timer)
#endif
EXTERN void tim_init (void);
EXTERN void tim_exec_timeout (USHORT index);
EXTERN void tim_stop_timer (USHORT index);
EXTERN void tim_start_timer (USHORT index, T_TIME value);
EXTERN BOOL tim_check_timer(USHORT index);
/* all data is stored so, that it doesn't need
to be converted if send to the upper layers.
Exceptions are alr_data.cs_data.results,
alr_data.pch_data.pl_idle
alr_data.pch_data.imsi */
typedef struct
{
UBYTE state[MAX_STATE];
/*
* each of these elements is only
* accessed by the appropiate
* process
*/
T_CBCH_DATA cbch_data;
T_CS_DATA cs_data;
T_MA_DATA ma_data;
T_NC_DATA nc_data;
T_PCH_DATA pch_data;
T_RACH_DATA rach_data;
T_DEDI_DATA dedi_data;
#ifdef GPRS
T_ALR_GPRS_DATA gprs_data;
#endif /* GPRS */
T_TIM_DATA tim_data;
UBYTE mmi; /* mmi variant */
UBYTE keypad; /* keypad variant */
UBYTE sc_band; /* frequency band of the serving cell */
BOOL ext_display; /* ext display */
EF_MSCAP mscap; /* MS capabilities (channel mode, data cap., features */
/* is this component really needed ?? */
/*
* these parameters are used by more than one process
* this is to avoid data inconsistencies between
* the different processes
*/
USHORT serving_cell;
USHORT old_serving_cell;
UBYTE bsic;
UBYTE bs_pa_mfrms;
UBYTE ncc_permitted;
UBYTE plmn_search_running;
#ifdef GPRS
UBYTE nc_sync_with_grr;
UBYTE nwctrl_meas_active; /* indicates whether averaging when NC=1,2 is active */
#endif
} T_ALR_DATA;
/*==== EXPORT =====================================================*/
/*
* Main Control
*/
EXTERN void ma_init (void);
/*
* Primitive processing functions for upper layer (RR)
*/
EXTERN void ma_mph_idle_req (T_MPH_IDLE_REQ *mph_idle_req);
EXTERN void ma_mph_neighbourcell_req (T_MPH_NEIGHBOURCELL_REQ *mph_neighbourcell_req);
EXTERN void ma_mph_emo_req (T_MPH_EMO_REQ *mph_emo_req);
EXTERN void ma_mph_dedicated_req (T_MPH_DEDICATED_REQ *mph_dedicated_req);
EXTERN void ma_mph_dedicated_fail_req (T_MPH_DEDICATED_FAIL_REQ *mph_dedicated_fail_req);
EXTERN void ma_mph_ciphering_req (T_MPH_CIPHERING_REQ *mph_ciphering_req);
EXTERN void ma_mph_freq_redef_req (T_MPH_FREQ_REDEF_REQ *mph_freq_redef_req);
EXTERN void ma_mph_channel_mode_req (T_MPH_CHANNEL_MODE_REQ *mph_channel_mode_req);
EXTERN void ma_mph_deactivate_req (T_MPH_DEACTIVATE_REQ *mph_deactivate_req);
EXTERN void ma_mph_classmark_req (T_MPH_CLASSMARK_REQ *mph_classmark_req);
EXTERN void ma_mph_ext_meas_req (T_MPH_EXT_MEAS_REQ *mph_ext_meas_req);
EXTERN void ma_mph_tch_loop_req (T_MPH_TCH_LOOP_REQ *mph_tch_loop_req);
EXTERN void ma_mph_dai_req (T_MPH_DAI_REQ *mph_dai_req);
EXTERN void ma_mph_cbch_req (T_MPH_CBCH_REQ *mph_cbch_req);
EXTERN void ma_mph_identity_req (T_MPH_IDENTITY_REQ *mph_identity_req);
EXTERN void ma_mph_power_req (T_MPH_POWER_REQ *mph_power_req);
EXTERN void ma_mph_bsic_req (T_MPH_BSIC_REQ *mph_bsic_req);
EXTERN void ma_mph_random_access_req (T_MPH_RANDOM_ACCESS_REQ *mph_random_access_req);
EXTERN void ma_mph_sync_req (T_MPH_SYNC_REQ *mph_sync_req);
EXTERN void ma_mph_ncell_pos_req (T_MPH_NCELL_POS_REQ *mph_ncell_pos_req);
EXTERN void ma_mph_clean_buf_req (T_MPH_CLEAN_BUF_REQ *mph_clean_buf_req);
EXTERN void ma_mph_stop_dedi_req (T_MPH_STOP_DEDICATED_REQ *mph_stop_dedi_req);
#ifdef GPRS
EXTERN void ma_mph_meas_rep_req (T_MPH_MEAS_REP_REQ *mph_meas_rep_req);
#endif
/*
* Primitive processing functions for lower layer
*/
EXTERN void ma_mphc_rxlev_ind (T_MPHC_RXLEV_IND *rxlev_ind);
EXTERN void ma_mphc_stop_rxlev_cnf (T_MPHC_STOP_RXLEV_CON *rxlev_con);
EXTERN void ma_mphc_empty_cnf (void *);
EXTERN void ma_mphc_network_sync_ind (T_MPHC_NETWORK_SYNC_IND *network_sync_ind);
EXTERN void ma_cs_stop_network_sync_req (void);
EXTERN void ma_mphc_new_scell_cnf (T_MPHC_NEW_SCELL_CON *new_Scell_cnf);
EXTERN void ma_mphc_ncell_bcch_ind (T_MPHC_NCELL_BCCH_IND *ncell_bcch_data_ind);
EXTERN void ma_mphc_ncell_sync_ind (T_MPHC_NCELL_SYNC_IND *ncell_sync_ind);
GLOBAL void ma_mphc_stop_ncell_sync_cnf (T_MPHC_STOP_NCELL_SYNC_CON *ncell_sync_cnf );
EXTERN void ma_mphc_rxlev_periodic_ind (T_MPHC_RXLEV_PERIODIC_IND *rxlev_periodic_ind);
EXTERN void ma_mphc_ra_cnf (T_MPHC_RA_CON *ra_cnf);
EXTERN void ma_mphc_data_ind (T_MPHC_DATA_IND *data_ind);
EXTERN void ma_mphc_change_frequency_cnf (T_MPHC_CHANGE_FREQUENCY_CON *change_frequency_cnf);
EXTERN void ma_mphc_async_ho_cnf (T_MPHC_ASYNC_HO_CON *async_ho_cnf);
EXTERN void ma_mphc_channel_assign_cnf (T_MPHC_CHANNEL_ASSIGN_CON *channel_assign_cnf);
EXTERN void ma_mphc_handover_fail_cnf (T_MPHC_HANDOVER_FAIL_CON *handover_fail_cnf);
EXTERN void ma_mphc_immed_assign_cnf (T_MPHC_IMMED_ASSIGN_CON *immed_assign_cnf);
EXTERN void ma_mphc_pre_sync_ho_cnf (T_MPHC_PRE_SYNC_HO_CON *pre_sync_ho_cnf);
EXTERN void ma_mphc_sync_ho_cnf (T_MPHC_SYNC_HO_CON *sync_ho_cnf);
EXTERN void ma_mphc_ta_fail_ind (T_MPHC_TA_FAIL_IND *ta_fail_ind);
EXTERN void ma_mphc_handover_finished_ind (T_MPHC_HANDOVER_FINISHED *handover_finished);
EXTERN void ma_mphc_meas_report_ind (T_MPHC_MEAS_REPORT *meas_report);
EXTERN void ma_mphc_adc_ind (T_MPHC_ADC_IND *adc_results);
EXTERN void ma_mphc_init_l1_cnf (T_MPHC_INIT_L1_CON *init_l1_cnf);
EXTERN void ma_mphc_stop_dedi_con (T_MPHC_STOP_DEDICATED_CON *stop_cnf);
#if defined(STOP_SYNC_TASK)
EXTERN void ma_mphc_stop_network_sync_cnf (T_MPHC_STOP_NETWORK_SYNC_CON *stop_network_sync_cnf);
#endif /* STOP_SYNC_TASK */
/* Signal processing functions for process Cell Selection */
EXTERN void ma_cs_init_l1_req (UBYTE radio_band_config);
EXTERN void ma_cs_stop_network_sync_req (void);
EXTERN void ma_cs_network_sync_req (USHORT channel);
EXTERN void ma_cs_rxlev_req (void);
EXTERN void ma_cs_power_cnf (T_MPH_POWER_CNF *mph_power_cnf);
/* Signal processing functions for process Neigbour Cell */
EXTERN void ma_nc_rxlev_periodic_req (T_MPHC_RXLEV_PERIODIC_REQ *update);
EXTERN void ma_nc_stop_ncell_bcch_req (USHORT arfcn);
EXTERN void ma_nc_stop_ncell_sync_req (USHORT arfcn);
EXTERN void ma_nc_sync_req (T_MPHC_NCELL_SYNC_REQ *sync_req);
EXTERN void ma_nc_list_sync_req (T_MPHC_NCELL_LIST_SYNC_REQ *list_sync_req);
EXTERN void ma_nc_bcch_req (T_MPHC_NCELL_BCCH_REQ *bcch_req);
EXTERN void ma_nc_update_ba_list (T_MPHC_UPDATE_BA_LIST *update_ba_list);
EXTERN void nc_new_serving_cell (USHORT serving_cell);
EXTERN void ma_nc_report_res (T_MPH_MEASUREMENT_IND *mph_measurement_ind);
/* Signal processing functions for process RACH_Contol */
EXTERN void ma_rach_stop_ra_req (void);
EXTERN void ma_rach_ra_req (T_MPHC_RA_REQ *mph_ra_req);
EXTERN void ma_rach_random_cnf (T_MPH_RANDOM_ACCESS_CNF *mph_random_access_cnf);
/* Signal processing functions for process Dedi_Control */
EXTERN void ma_dedi_stop_req (void);
EXTERN void ma_dedi_cnf (UBYTE cause);
EXTERN void ma_dedi_chan_ass_req (T_MPHC_CHANNEL_ASSIGN_REQ *mphc_channel_assign_req);
EXTERN void ma_dedi_async_ho_req (T_MPHC_ASYNC_HO_REQ *async_ho_req);
EXTERN void ma_dedi_sync_ho_req (T_MPHC_SYNC_HO_REQ *sync_ho_req);
EXTERN void ma_dedi_pre_sync_ho_req (T_MPHC_PRE_SYNC_HO_REQ *pre_sync_ho_req);
EXTERN void ma_dedi_fail_cnf (void);
EXTERN void ma_dedi_ho_fail_req (void);
EXTERN void ma_dedi_imm_ass_req (T_MPHC_IMMED_ASSIGN_REQ *immed_assign_req);
EXTERN void ma_dedi_change_freq_req (T_MPHC_CHANGE_FREQUENCY *change_frequency);
EXTERN void ma_dedi_chan_mode_req (T_MPHC_CHANNEL_MODE_MODIFY_REQ *channel_mode_modify_req);
EXTERN void ma_dedi_ciph_req (T_MPHC_SET_CIPHERING_REQ *set_ciphering_req);
EXTERN void ma_dedi_start_dai_req (T_OML1_START_DAI_TEST_REQ *oml1_start_dai_test_req);
EXTERN void ma_dedi_close_tch_loop_req (T_OML1_CLOSE_TCH_LOOP_REQ *oml1_close_tch_loop_req);
EXTERN void ma_dedi_stop_dai_req (void);
EXTERN void ma_dedi_open_tch_loop_req (void);
/* Signal processing functions for process PCH_control */
EXTERN void ma_pch_start_ccch_req (T_MPHC_START_CCCH_REQ *pl_idle);
EXTERN void ma_pch_paging_ind (UBYTE id_type,
UBYTE channel_needed);
EXTERN void ma_pch_stop (void);
/* Signal processing functions for process MMI_control */
EXTERN void ma_mmi_cbch_req (T_MMI_CBCH_REQ *cbch_req);
EXTERN void ma_mmi_sat_cbch_dwnld_req (T_MMI_SAT_CBCH_DWNLD_REQ *cbch_req);
/* Signal processing functions for process CBCH_control */
EXTERN void ma_cb_stop_cbch_req (void);
EXTERN void ma_cb_sched_req (T_MPHC_CBCH_SCHEDULE_REQ *sched_req);
EXTERN void ma_cb_config_cbch (T_MPHC_CONFIG_CBCH_REQ *config_cbch);
EXTERN void ma_cb_mmi_cbch_ind (T_MMI_CBCH_IND *mmi_cbch_ind);
EXTERN void ma_cb_info_req (UBYTE bitmap);
/* Signal processing functions used by more then one process */
EXTERN void ma_scell_nbcch_req (T_MPHC_SCELL_NBCCH_REQ *nbcch_req);
EXTERN void ma_scell_ebcch_req (T_MPHC_SCELL_EBCCH_REQ *ebcch_req);
EXTERN void ma_stop_scell_bcch_req (void);
EXTERN void ma_stop_active_procs (UBYTE flags);
EXTERN void ma_bsic_cnf (T_MPH_BSIC_CNF *mph_bsic_cnf);
EXTERN void ma_send_unitdata (T_MPHC_DATA_IND *data_ind);
EXTERN void ma_error_ind (UBYTE cause,
USHORT arfcn);
EXTERN void ma_clean_dedi_sys_buffer (void);
EXTERN void ma_new_scell_req (T_MPHC_NEW_SCELL_REQ *new_scell);
EXTERN void ma_scell_full_nbcch (void);
#ifdef GPRS
EXTERN BOOL ma_is_ptm (void);
EXTERN void ma_nc_rxlev_sc_req (T_TB_RXLEV_SC_REQ *rxlev_sc_req);
#endif
EXTERN void ma_clean_sys_buffer (USHORT si_mask);
/* defined in dl_pei.c */
EXTERN void dl1_downlink_indication (UBYTE chan,
UBYTE *frame);
/*
* CBCH Control
*/
EXTERN void cb_init (void);
EXTERN void cb_stop (void);
EXTERN void cb_start (void);
EXTERN void cb_mmi_cbch_req (T_MMI_CBCH_REQ *cbch);
EXTERN void cb_mph_cbch_req (T_cbch *cbch);
EXTERN void cb_data_ind (T_MPHC_DATA_IND *cbch_ind);
EXTERN void cb_mmi_sat_cbch_req (T_MMI_SAT_CBCH_DWNLD_REQ *cbch_req);
#if defined(FF_HOMEZONE)
EXTERN void cb_tim_homezone (void);
#endif /* FF_HOMEZONE */
/*
* Cell Selection
*/
EXTERN void cs_init (void);
EXTERN void cs_rxlev_ind (T_MPHC_RXLEV_IND *rxlev_ind);
EXTERN void cs_network_sync_ind (T_MPHC_NETWORK_SYNC_IND *network_sync_ind);
EXTERN void cs_stop (void);
EXTERN T_POWER_MEAS* cs_prepare_power_req (void);
EXTERN void cs_power_req (UBYTE pch_interrupt);
EXTERN void cs_bsic_req (T_MPH_BSIC_REQ *mph_bsic_req);
EXTERN void cs_read_scell_bcch (void);
EXTERN UBYTE get_band (USHORT arfcn);
EXTERN void cs_increment_bfc (void);
EXTERN void cs_decrement_bfc (void);
EXTERN void cs_set_wideband_sync (void);
/*
* Dedicated Control
*/
EXTERN void dedi_init (void);
EXTERN void dedi_req (T_MPH_DEDICATED_REQ *dedicated_req);
EXTERN void dedi_fail_req (void);
EXTERN void dedi_ta_fail_ind (void);
EXTERN void dedi_ho_finished (UBYTE cause);
EXTERN void dedi_freq_redef_req (T_MPH_FREQ_REDEF_REQ *freq);
EXTERN void dedi_chan_mode_req (T_MPH_CHANNEL_MODE_REQ *ch_mode);
EXTERN void dedi_ciph_req (T_MPH_CIPHERING_REQ *ciph_req);
EXTERN void dedi_tch_loop_req (T_MPH_TCH_LOOP_REQ *tloop);
EXTERN void dedi_dai_req (T_MPH_DAI_REQ *dai);
EXTERN void dedi_change_freq_cnf (void);
EXTERN void dedi_async_ho_cnf (void);
EXTERN void dedi_chan_ass_cnf (void);
EXTERN void dedi_ho_fail_cnf (void);
EXTERN void dedi_imm_ass_cnf (void);
EXTERN void dedi_pre_sync_ho_cnf (void);
EXTERN void dedi_sync_ho_cnf (void);
EXTERN void dedi_stop (void);
EXTERN void dedi_increment_rlt (void);
EXTERN void dedi_decrement_rlt (void);
/*
* MMI Control
*/
EXTERN USHORT RX_GetValue (void);
/*
* Idle Mode Neighbour Cell
*/
EXTERN void nc_init (void);
EXTERN void nc_ncell_list (T_MPH_NEIGHBOURCELL_REQ *mph_neighbourcell_req);
EXTERN void nc_stop (void);
EXTERN void nc_bsic_req (T_MPH_BSIC_REQ *mph_bsic_req);
EXTERN void nc_sync_ind (T_MPHC_NCELL_SYNC_IND *sync_ind);
EXTERN void nc_bcch_ind (T_MPHC_NCELL_BCCH_IND *data_ind);
EXTERN void nc_start_dedicated (UBYTE pwrc,
UBYTE dtx);
EXTERN void nc_update_dedicated (UBYTE dtx,
UBYTE pwrc);
EXTERN void nc_update_list (USHORT channel);
EXTERN BOOL nc_get_fn_time (USHORT channel,
ULONG *fn,
ULONG *time);
EXTERN void nc_suspend (void);
EXTERN void nc_add_offset (void);
EXTERN void nc_report (T_MPHC_RXLEV_PERIODIC_IND *rxlev_periodic_ind);
EXTERN void nc_start_reselect (USHORT arfcn);
EXTERN void nc_start_monitoring (void);
EXTERN void nc_report_dedicated (T_MPHC_MEAS_REPORT *meas_report);
EXTERN void nc_fill_report_sc_dedi (T_MPH_MEASUREMENT_IND *rr_report,
UBYTE ncells);
EXTERN void nc_store_tav (USHORT tav);
EXTERN void nc_check_new_ncc_permitted (UBYTE new_ncc_permitted);
EXTERN void nc_stop_rr_activity (UBYTE stop);
EXTERN void nc_stop_ext_meas_ind (void);
EXTERN void nc_resume (void);
EXTERN void nc_check_activity (void);
EXTERN void nc_set_status (USHORT index,
UBYTE new_status);
EXTERN USHORT nc_get_index (USHORT arfcn);
EXTERN void nc_ncsync_tim_expiry (void);
EXTERN void nc_ncell_pos_req (T_MPH_NCELL_POS_REQ* pos_req);
GLOBAL void nc_resume_dedicated(void);
GLOBAL void nc_suspend_handover (void);
#ifdef GPRS
EXTERN void nc_start_pbcch(void);
EXTERN void nc_build_nwctrl_rr_report (T_MPH_MEAS_REP_CNF *rr_report);
#endif
/*
* PCH Control
*/
EXTERN void pch_init (void);
EXTERN void pch_configure (T_MPH_IDLE_REQ *idle,
UBYTE page_mode);
EXTERN void pch_start_ccch_req (void);
EXTERN void pch_save_pgm (UBYTE mode);
EXTERN void pch_identity_req (T_MPH_IDENTITY_REQ *mph_identity_req);
EXTERN void pch_check_pag_3 (T_MPHC_DATA_IND *data_ind);
EXTERN void pch_check_pag_2 (T_MPHC_DATA_IND *data_ind);
EXTERN void pch_check_pag_1 (T_MPHC_DATA_IND *data_ind);
EXTERN void pch_check_page_mode (T_MPHC_DATA_IND *data_ind);
EXTERN void pch_check_page_mode_cr (T_MPHC_DATA_IND *data_ind);
EXTERN void pch_decrement_dlt (void);
EXTERN void pch_increment_dlt (void);
EXTERN void pch_stop (void);
EXTERN UBYTE pch_mode_reorg (void);
EXTERN void pch_config_resel (T_MPHC_DATA_IND *data_ind);
/*
* RACH Control
*/
EXTERN void rach_init (void);
EXTERN void rach_configure_power (UBYTE power);
EXTERN void rach_configure_class (UBYTE class,
UBYTE dcs_class);
EXTERN void rach_stop (void);
EXTERN UBYTE cut_power_value (UBYTE power,
T_MPH_DEDICATED_REQ *mph_dedicated_req);
EXTERN void rach_random_req (T_MPH_RANDOM_ACCESS_REQ *random_req);
EXTERN void rach_ra_cnf (T_MPHC_RA_CON* ra_cnf);
/*
* Idle Mode Serving Cell
*/
EXTERN void sc_start_periodic (void);
EXTERN const void csf_show_version (T_TST_TEST_HW_CON *ver);
EXTERN void tim_stop_sync_to_nw (void);
EXTERN UBYTE grlc_test_mode_active(void); /*lint -esym(526,grlc_test_mode_active) : not defined | defined in other entity */
EXTERN void cst_pei_config (char *, char *); /*lint -esym(526,cst_pei_config) : not defined | defined in other entity */
#if defined (_SIMULATION_)
EXTERN void rr_csf_check_rfcap (UBYTE init); /*lint -esym(526,rr_csf_check_rfcap) : not defined | defined in other entity */
#endif /* _SIMULATION_ */
EXTERN CHAR* alr_version(void);
#if defined(ALR_CSF_C) && defined(_TMS470)
EXTERN void Cust_Init_Layer1(void);
EXTERN void SIM_PowerOff (void);
EXTERN void TM_EnableWatchdog (void);
EXTERN void TM_ResetWatchdog(SYS_UWORD16 count);
#endif /* ALR_CSF_C && _TMS470 */
#if defined(WIN32)
#include <stdio.h> /* prototype of sprintf() */
#endif /* WIN32 */
#if !defined NTRACE
EXTERN void trc_mon_counter_idle (UBYTE act_dlt, UBYTE max_dlt);
EXTERN void trc_mon_counter_dedi (UBYTE act_rlt, UBYTE max_rlt);
#endif /* (!defined NTRACE ) */
EXTERN T_ALR_DATA * alr_data;
#ifdef WIN32
EXTERN T_POWER_MEAS tap_rxlev_response_european[];
EXTERN T_POWER_MEAS tap_rxlev_response_american[];
#endif
#define ENTITY_DATA alr_data
/*
* If all entities are linked into one module this definitions
* prefixes the global data with the enity name
*/
#ifdef OPTION_MULTITHREAD
#define hCommL1 _ENTITY_PREFIXED(hCommL1)
#define hCommPL _ENTITY_PREFIXED(hCommPL)
#define hCommDL _ENTITY_PREFIXED(hCommDL)
#define hCommRR _ENTITY_PREFIXED(hCommRR)
#define hCommMMI _ENTITY_PREFIXED(hCommMMI)
#define hCommCST _ENTITY_PREFIXED(hCommCST)
#ifdef GPRS
#define hCommGPL _ENTITY_PREFIXED(hCommGPL)
#endif /* #ifdef GPRS */
#endif
EXTERN T_HANDLE hCommPL; /* PL own handle */
EXTERN T_HANDLE hCommL1; /* L1 Communication */
EXTERN T_HANDLE hCommDL; /* DL Communication */
EXTERN T_HANDLE hCommRR; /* RR Communication */
EXTERN T_HANDLE hCommMMI; /* MMI Communication */
EXTERN T_HANDLE hCommCST; /* CST Communication */
#ifdef GPRS
EXTERN T_HANDLE hCommGPL; /* GPL Communication */
#endif /* GPRS */
EXTERN T_HANDLE pl_handle;
EXTERN UBYTE v_mon_counter_idle;
EXTERN UBYTE v_mon_counter_dedi;
EXTERN UBYTE v_eotd;
#if defined(DL_TRACE_ENABLED)
EXTERN void dl_trace (UCHAR trace_type,
UCHAR channel,
UCHAR ch_type,
UCHAR * data);
#ifdef OPTION_MULTITHREAD
#define dl_trace_buf _ENTITY_PREFIXED(dl_trace_buf)
#endif
#if defined(ALR_MAIN_C)
GLOBAL char dl_trace_buf[100];
#else /* ALR_MAIN_C */
EXTERN char dl_trace_buf[100];
#endif /* ALR_MAIN_C */
#define TRACE_PL_EVENT 4
#define DOES_NOT_MATTER 0
#define DL_OFFLINE_TRACE(s) \
dl_trace (TRACE_PL_EVENT, DOES_NOT_MATTER, DOES_NOT_MATTER, (UCHAR*)s)
#else /* DL_TRACE_ENABLED */
#define DL_OFFLINE_TRACE(s)
#endif /* DL_TRACE_ENABLED */
#if !defined(NCONFIG) && !defined(NTRACE) && defined(TRACE_STATE_TRANSITION)
void trc_state_transition(int line, UBYTE newstate);
#else
#define trc_state_transition(line,newstate)
#endif /* !NCONFIG && !NTRACE && TRACE_STATE_TRANSITION */
#if defined(_SIMULATION_)
#define TRACING
#define TRACE_EVENT_WIN(s) TRACE_EVENT(s)
#define TRACE_EVENT_WIN_P1(s,a1) TRACE_EVENT_P1(s,a1)
#define TRACE_EVENT_WIN_P2(s,a1,a2) TRACE_EVENT_P2(s,a1,a2)
#define TRACE_EVENT_WIN_P3(s,a1,a2,a3) TRACE_EVENT_P3(s,a1,a2,a3)
#define TRACE_EVENT_WIN_P4(s,a1,a2,a3,a4) TRACE_EVENT_P4(s,a1,a2,a3,a4)
#define TRACE_EVENT_WIN_P5(s,a1,a2,a3,a4,a5) TRACE_EVENT_P5(s,a1,a2,a3,a4,a5)
#define TRACE_EVENT_WIN_P6(s,a1,a2,a3,a4,a5,a6) TRACE_EVENT_P6(s,a1,a2,a3,a4,a5,a6)
#define TRACE_EVENT_WIN_P7(s,a1,a2,a3,a4,a5,a6,a7) TRACE_EVENT_P7(s,a1,a2,a3,a4,a5,a6,a7)
#define TRACE_EVENT_WIN_P8(s,a1,a2,a3,a4,a5,a6,a7,a8) TRACE_EVENT_P8(s,a1,a2,a3,a4,a5,a6,a7,a8)
#define TRACE_EVENT_WIN_P9(s,a1,a2,a3,a4,a5,a6,a7,a8,a9) TRACE_EVENT_P9(s,a1,a2,a3,a4,a5,a6,a7,a8,a9)
#else /* _SIMULATION_ */
#define TRACE_EVENT_WIN(s)
#define TRACE_EVENT_WIN_P1(s,a1)
#define TRACE_EVENT_WIN_P2(s,a1,a2)
#define TRACE_EVENT_WIN_P3(s,a1,a2,a3)
#define TRACE_EVENT_WIN_P4(s,a1,a2,a3,a4)
#define TRACE_EVENT_WIN_P5(s,a1,a2,a3,a4,a5)
#define TRACE_EVENT_WIN_P6(s,a1,a2,a3,a4,a5,a6)
#define TRACE_EVENT_WIN_P7(s,a1,a2,a3,a4,a5,a6,a7)
#define TRACE_EVENT_WIN_P8(s,a1,a2,a3,a4,a5,a6,a7,a8)
#define TRACE_EVENT_WIN_P9(s,a1,a2,a3,a4,a5,a6,a7,a8,a9)
#endif /* _SIMULATION_ */
#if defined TRACING
#define ALR_TRACE(a) vsi_o_ttrace(VSI_CALLER TC_EVENT,a);
#else
#define ALR_TRACE(a)
#endif /* TRACING */
#define TNNN_WITH_TIMER
/*
#define ALR_TRACE_ENABLED
*/
#if defined(ALR_TRACE_ENABLED)
void alr_trc_init (void);
void alr_trc_exit (void);
void alr_trc_store (UCHAR event, UCHAR channel, UCHAR state, void* l2_data);
void alr_trc_read_all (void);
void alr_trc_read (int count);
#else /* ALR_TRACE_ENABLED */
#define alr_trc_init()
#define alr_trc_exit()
#define alr_trc_store(e,c,s,p)
#define alr_trc_read(c)
#define alr_trc_read_all()
#endif /* ALR_TRACE_ENABLED */
/*
* ALR TRACE defines
*/
#define ALR_TRC_UPLINK 0
#define ALR_TRC_DOWNLINK 1
#define ALR_TRC_EVENT 2
#define ALR_TRC_STRING 3
#define ALR_TRC_CH_UNDEF 0
#define ALR_TRC_CH_FACCH_FR 1
#define ALR_TRC_CH_FACCH_HR 2
#define ALR_TRC_CH_SDCCH4 3
#define ALR_TRC_CH_SDCCH8 4
#define ALR_TRC_CH_SACCH 5
#define ALR_TRC_CH_UNKNOWN 6
#define ALR_TRC_DATA_SIZE 40
#define ALR_RXLEV_AVERAGE_MIN 0
#define ALR_RXLEV_AVERAGE_LWR_THR 4
#endif /* ALR_H */