FreeCalypso > hg > fc-magnetite
diff src/g23m-gsm/rr/rr_gprs.c @ 104:27a4235405c6
src/g23m-gsm: import from LoCosto source
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 04 Oct 2016 18:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/g23m-gsm/rr/rr_gprs.c Tue Oct 04 18:24:05 2016 +0000 @@ -0,0 +1,260 @@ +/* ++----------------------------------------------------------------------------- +| 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 holds the functions for handling primitives +| sent from entity GRR to entity RR and vice versa. ++----------------------------------------------------------------------------- +*/ + +#ifndef RR_GPRS_C +#define RR_GPRS_C + +#ifdef GPRS + +#define ENTITY_RR + +/*==== INCLUDES ===================================================*/ + +#include <string.h> +#include <stddef.h> +#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 "pei.h" +#include "tok.h" +#include "rr_gprs.h" +#include "rr.h" + +/*==== EXPORT =====================================================*/ + +/*==== PRIVATE =====================================================*/ +LOCAL void pei_not_supported (void *data); + +/*==== VARIABLES ==================================================*/ + +/*==== FUNCTIONS ==================================================*/ + +LOCAL const T_FUNC rrgrr_table[] = { + MAK_FUNC_0( dat_rrgrr_channel_req, RRGRR_CHANNEL_REQ ), /* 0*/ + MAK_FUNC_0( dat_rrgrr_resumed_tbf_req, RRGRR_RESUMED_TBF_REQ ), /* 1*/ + MAK_FUNC_S( dat_rrgrr_data_req, RRGRR_DATA_REQ ), /* 2*/ + MAK_FUNC_0( att_rrgrr_start_mon_ccch_req, RRGRR_START_MON_CCCH_REQ ), /* 3*/ + MAK_FUNC_0( att_rrgrr_stop_mon_ccch_req, RRGRR_STOP_MON_CCCH_REQ ), /* 4*/ + MAK_FUNC_0( att_rrgrr_cr_req, RRGRR_CR_REQ ), /* 5*/ + MAK_FUNC_0( att_rrgrr_start_mon_bcch_req, RRGRR_START_MON_BCCH_REQ ), /* 6*/ + MAK_FUNC_0( dat_rrgrr_rr_est_req, RRGRR_RR_EST_REQ ), /* 7*/ + MAK_FUNC_0( dat_rrgrr_rr_est_rsp, RRGRR_RR_EST_RSP ), /* 8*/ + MAK_FUNC_N( pei_not_supported, 0 ), /* 9*/ + MAK_FUNC_0( dat_rrgrr_activate_req, RRGRR_ACTIVATE_REQ ), /* A*/ + MAK_FUNC_N( pei_not_supported, 0 ), /* B*/ + MAK_FUNC_0( dat_rrgrr_gprs_data_req, RRGRR_GPRS_DATA_REQ ), /* C*/ + MAK_FUNC_0( dat_rrgrr_suspend_dcch_req, RRGRR_SUSPEND_DCCH_REQ ), /* D*/ + MAK_FUNC_0( dat_rrgrr_reconnect_dcch_req, RRGRR_RECONNECT_DCCH_REQ ), /* E*/ + MAK_FUNC_0( att_check_bsic, RRGRR_NCELL_SYNC_REQ ), /* F*/ + MAK_FUNC_0( att_gprs_sync_req, RRGRR_SYNC_REQ ), /* 10*/ + MAK_FUNC_N( pei_not_supported, 0 ), /* 11*/ + MAK_FUNC_0( att_rrgrr_update_ba_req, RRGRR_UPDATE_BA_REQ ), /* 12*/ + MAK_FUNC_N( att_rrgrr_meas_rep_req, RRGRR_MEAS_REP_REQ ), /* 13*/ + MAK_FUNC_N( pei_not_supported, RRGRR_TBF_ESTABLISHED_REQ ), /* 14*/ + MAK_FUNC_0( att_gprs_cr_rsp, RRGRR_CR_RSP ), /* 15*/ + MAK_FUNC_0( att_rrgrr_ext_meas_req, RRGRR_EXT_MEAS_REQ ), /* 16*/ + MAK_FUNC_0( att_rrgrr_ext_meas_stop_req, RRGRR_EXT_MEAS_STOP_REQ ), /* 17*/ + MAK_FUNC_0( gprs_rrgrr_stop_task, RRGRR_STOP_TASK_REQ ), /* 18*/ + MAK_FUNC_0( att_gprs_start_task, RRGRR_START_TASK_REQ ), /* 19*/ + MAK_FUNC_0( att_rrgrr_standby_ind, RRGRR_STANDBY_STATE_IND ), /* 1A*/ + MAK_FUNC_0( att_rrgrr_ready_ind, RRGRR_READY_STATE_IND ) /* 1B*/ +#ifdef REL99 + , + MAK_FUNC_0( att_rrgrr_cbch_info_ind, RRGRR_CBCH_INFO_IND ) /* 1C*/ +#endif +}; + +GLOBAL const char * const STATE_GPRS_NAME[] = { STATE_GPRS_NAME_INIT }; + + +/* ++-----------------------------------------------------------------------------+ +| PROJECT : GSM-GPRS () MODULE : RR_GPRS | +| STATE : code ROUTINE : gprs_init_gprs_data | ++-----------------------------------------------------------------------------+ + + PURPOSE : initialises the RR related GPRS data. + +*/ + +GLOBAL void gprs_init_gprs_data (void) +{ + GET_INSTANCE_DATA; + TRACE_FUNCTION ("gprs_init_gprs_data()"); + + SET_STATE(STATE_GPRS, GPRS_NULL); + + memset(rr_data->gprs_data.rr_sdu, NOT_PRESENT_8BIT, sizeof(rr_data->gprs_data.rr_sdu)); + memset(rr_data->gprs_data.si13_sdu, NOT_PRESENT_8BIT, sizeof(rr_data->gprs_data.si13_sdu)); + rr_data->gprs_data.tma_in_progress = 0; + rr_data->gprs_data.fn = 0; + rr_data->gprs_data.req_ref_idx = NOT_PRESENT_8BIT; + rr_data->gprs_data.page_mode = PAG_MODE_DEFAULT; + rr_data->gprs_data.si13_received = 0; + rr_data->gprs_data.split_pg = 0; + + rr_data->gprs_data.cr_type = NOT_PRESENT_8BIT; + rr_data->gprs_data.cr_orig = NOT_PRESENT_8BIT; + rr_data->gprs_data.start_proc = START_PROC_NOTHING; + + rr_data->gprs_data.is_nc2_used_in_si13 = FALSE; /* NC0 is default */ + rr_data->gprs_data.nc_mode_of_pmo = NC_MODE_RESET; /* Use NC of SI13 */ + rr_data->gprs_data.ready_state = FALSE; /* Standby */ + + /*rr_data->gprs_data.cr_pbcch_active = 0;*/ + if ( rr_data->gprs_data.dl_data_ind NEQ NULL ) + { + PFREE ( rr_data->gprs_data.dl_data_ind ); + } + rr_data->gprs_data.dl_data_ind = NULL; +#ifdef REL99 + rr_data->gprs_data.cbch_psi_valid = FALSE; + rr_data->gprs_data.cbch_info_rxvd_in_ptm = FALSE; + rr_data->gprs_data.nw_release = RR_GPRS_R97; +#endif + rr_data->gprs_data.ba_bcch_modified= FALSE; + +} + +GLOBAL void gprs_init_data_cr (void) +{ + GET_INSTANCE_DATA; + if(GET_STATE(STATE_GPRS) NEQ GPRS_NULL) + SET_STATE(STATE_GPRS, GPRS_ACTIVATED); + + memset(rr_data->gprs_data.rr_sdu, NOT_PRESENT_8BIT, sizeof(rr_data->gprs_data.rr_sdu)); + memset(rr_data->gprs_data.si13_sdu, NOT_PRESENT_8BIT, sizeof(rr_data->gprs_data.si13_sdu)); + rr_data->gprs_data.tma_in_progress = 0; + rr_data->gprs_data.fn = 0; + rr_data->gprs_data.req_ref_idx = NOT_PRESENT_8BIT; + rr_data->gprs_data.page_mode = PAG_MODE_DEFAULT; + rr_data->gprs_data.si13_received = 0; + rr_data->gprs_data.split_pg = 0; + /*rr_data->gprs_data.cr_pbcch_active = 0;*/ + rr_data->gprs_data.cr_type = NOT_PRESENT_8BIT; + rr_data->gprs_data.cr_orig = NOT_PRESENT_8BIT; + rr_data->gprs_data.start_proc = START_PROC_NOTHING; + rr_data->gprs_data.is_nc2_used_in_si13 = FALSE; /* NC0 is default */ + rr_data->gprs_data.nc_mode_of_pmo = NC_MODE_RESET; /* Use NC of SI13 */ + /* ready state variable should not be cleared know because it is still needed */ + + if ( rr_data->gprs_data.dl_data_ind NEQ NULL ) + { + PFREE ( rr_data->gprs_data.dl_data_ind ); + } + rr_data->gprs_data.dl_data_ind = NULL; +#ifdef REL99 + rr_data->gprs_data.cbch_psi_valid = FALSE; + rr_data->gprs_data.cbch_info_rxvd_in_ptm = FALSE; + rr_data->gprs_data.nw_release = RR_GPRS_R97; +#endif + +} +/* ++-----------------------------------------------------------------------------+ +| PROJECT : GSM-GPRS (??6147) MODULE : RR_GPRS | +| STATE : code ROUTINE : gprs_get_table_n | ++-----------------------------------------------------------------------------+ + + PURPOSE : process jumptable, + IN : adresses of table, n + OUT : values of rrgrr_table in table, n + +*/ +void gprs_get_table_n (const T_FUNC **table, USHORT *n) +{ + TRACE_FUNCTION ("gprs_get_table_n()"); + + *table = rrgrr_table; + *n = TAB_SIZE ( rrgrr_table); +} + +/* ++-----------------------------------------------------------------------------+ +| PROJECT : GSM-GPRS (6147) MODULE : RR_GPRS | +| STATE : code ROUTINE : gprs_rrgrr_store_sdu | ++-----------------------------------------------------------------------------+ + + PURPOSE : + IN : + OUT : + +*/ +void gprs_rrgrr_store_sdu(UBYTE* to, T_sdu* from) +{ + from->o_buf-=8; + from->l_buf+=8; + memcpy(to, &from->buf[from->o_buf/8], from->l_buf/8); +} + +/* ++-----------------------------------------------------------------------------+ +| PROJECT : GSM-GPRS (6147) MODULE : RR_GPRS | +| STATE : code ROUTINE : gprs_rrgrr_fill_from_stored_sdu | ++-----------------------------------------------------------------------------+ + + PURPOSE : + IN : + OUT : + +*/ +void gprs_rrgrr_fill_from_stored_sdu(T_sdu* sdu, UBYTE* from) +{ + /* + * copy message content + */ + sdu->l_buf = 22*8; +#if defined (_SIMULATION_) + sdu->o_buf = 0*8; +#else + sdu->o_buf = 1*8; +#endif + + memcpy(sdu->buf, from, MAX_L2_FRAME_SIZE);/*lint !e419 Apparent data overrun for function*/ +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : RR_PEI | +| STATE : code ROUTINE : pei_not_supported | ++--------------------------------------------------------------------+ + + PURPOSE : An unsupported primitive is received. + +*/ + +LOCAL void pei_not_supported (void * data) +{ + TRACE_FUNCTION ("pei_not_supported()"); + + PFREE (data); +} + +#endif /* GPRS */ +#endif /* RR_GPRS_C */