FreeCalypso > hg > fc-magnetite
diff src/g23m-gprs/gmm/gmm_rdyp.c @ 183:219afcfc6250
src/g23m-gprs: initial import from TCS3.2/LoCosto
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 13 Oct 2016 04:24:13 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/g23m-gprs/gmm/gmm_rdyp.c Thu Oct 13 04:24:13 2016 +0000 @@ -0,0 +1,243 @@ +/* ++----------------------------------------------------------------------------- +| Project : GPRS (8441) +| Modul : gmm_rdyp.c ++----------------------------------------------------------------------------- +| 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 modul is part of the entity GMM and implements all +| functions to handles the incoming primitives as described in +| the SDL-documentation (RDY-statemachine) ++----------------------------------------------------------------------------- +*/ + + +#ifndef GMM_RDYP_C +#define GMM_RDYP_C +#endif + +#define ENTITY_GMM + +/*==== INCLUDES =============================================================*/ + +#include "typedefs.h" /* to get Condat data types */ +#include "vsi.h" /* to get a lot of macros */ +#include "macdef.h" +#include "gprs.h" +#include "gsm.h" /* to get a lot of macros */ +#include "ccdapi.h" /* to get CCD API */ +#include "cnf_gmm.h" /* to get cnf-definitions */ +#include "mon_gmm.h" /* to get mon-definitions */ +#include "prim.h" /* to get the definitions of used SAP and directions */ +#include "gmm.h" /* to get the global entity definitions */ + +#include "gmm_kerns.h" /* to get signals */ +#include "gmm_kernp.h" /* to get timer functions from KERN */ +#include "gmm_kernf.h" /* to get functions from KERN */ +#include "gmm_rdyf.h" + +/*==== CONST ================================================================*/ + +/*==== LOCAL VARS ===========================================================*/ + +/*==== PRIVATE FUNCTIONS ====================================================*/ + +/*==== PUBLIC FUNCTIONS =====================================================*/ + + +/* ++------------------------------------------------------------------------------ +| Function : rdy_cgrlc_standby_state_ind ++------------------------------------------------------------------------------ +| Description : Handles the primitive CGRLC_STANDBY_STATE_IND (TCS 2.1). +| +| TIMEOUT for READY´TIMER +| +| MSC: 3.17 Timer +| MSC: 3.17.4 T3314 time-out +| +| Parameters : *cgrlc_standby_state_ind - Ptr to primitive payload (TCS 2.1) +| ++------------------------------------------------------------------------------ +*/ +GLOBAL void rdy_cgrlc_standby_state_ind (const T_CGRLC_STANDBY_STATE_IND *cgrlc_standby_state_ind) +{ + GMM_TRACE_FUNCTION( "rdy_cgrlc_standby_state_ind" ); + switch( GET_STATE( RDY ) ) + { + default: + /* + * <R.GMM.READYTIM.M.020> + */ + rdy_start_t3312(); + + SET_STATE ( RDY, RDY_STANDBY ); + + break; + case RDY_DEACTIVATED: + case RDY_STANDBY_TWICE: + break; + } + + PFREE(cgrlc_standby_state_ind); + GMM_RETURN; +} /* rdy_cgrlc_standby_state_ind */ + + +/* ++------------------------------------------------------------------------------ +| Function : rdy_cgrlc_trigger_ind (TCS 2.1) ++------------------------------------------------------------------------------ +| Description : Handles the primitive CGRLC_TRIGGER_IND (TCS 2.1) +| +| Start of the READY TIMER +| +| <R.GMM.READYTIM.M.009> +| +| Parameters : *cgrlc_trigger_ind - Ptr to primitive payload (TCS 2.1) +| ++------------------------------------------------------------------------------ +*/ +GLOBAL void rdy_cgrlc_trigger_ind ( T_CGRLC_TRIGGER_IND *cgrlc_trigger_ind ) /* TCS 2.1 */ +{ + USHORT timer; + BOOL stop_timer=FALSE; + GMM_TRACE_FUNCTION( "rdy_cgrlc_trigger_ind" ); /* TCS 2.1 */ + + if (CGRLC_PRIM_TYPE_GMM==cgrlc_trigger_ind->prim_type) /* TCS 2.1 */ + { + for ( timer=0;timer<TIMER_MAX;timer++) + { + if (gmm_data->rdy.timer_value[timer]>0) + { + T_TIME value=0; + if ( VSI_OK == vsi_t_status ( GMM_handle ,timer, &value ) + && value >0 ) + /* + * react only if timer has not stopped + */ + { + TRACE_1_INFO ("value of Timer %d: %d", timer); + switch (timer) + { + case kern_TPOWER_OFF: + vsi_t_stop ( GMM_handle, kern_TPOWER_OFF); + kern_tpower_off(); + stop_timer=TRUE; + break; + case kern_TLOCAL_DETACH: + vsi_t_stop ( GMM_handle, kern_TLOCAL_DETACH); + kern_tlocal_detach(); + stop_timer=TRUE; + break; + default: + TRACE_1_INFO ( "START: TIMER %d" ,timer); + vsi_t_start ( GMM_handle , + timer, + gmm_data->rdy.timer_value[timer]); + break; + } + gmm_data->rdy.timer_value[timer]=0; + } + } + else + { + gmm_data->rdy.timer_value[timer]=0; + } + } + } + + /* + * As RR will inform MM about ongoing PS transfer using RR_ABORT_IND, no need + * to notify MM using this mmgmm_trigger_req primitive + */ + + switch( GET_STATE( RDY ) ) + { + case RDY_READY: + vsi_t_stop (GMM_handle, rdy_T3312); + if (stop_timer) + { + SET_STATE (RDY, RDY_STANDBY ); + } + break; + case RDY_STANDBY_TWICE: + SET_STATE(RDY,RDY_STANDBY); + { + PALLOC (cgrlc_force_to_standby_req, CGRLC_FORCE_TO_STANDBY_REQ); + PSEND ( hCommGRLC, cgrlc_force_to_standby_req ); + } + break; + case RDY_STANDBY: + { + vsi_t_stop (GMM_handle, rdy_T3312); + if (stop_timer) + { + SET_STATE (RDY, RDY_STANDBY ); + } + else + { + SET_STATE ( RDY, RDY_READY ); + } + break; + } + case RDY_DEACTIVATED: + break; + default: + TRACE_ERROR( "CGRLC_TRIGGER_IND unexpected" ); /* TCS 2.1 */ + break; + } + + PFREE(cgrlc_trigger_ind); + GMM_RETURN; +} /* rdy_cgrlc_trigger_ind() */ /* TCS 2.1 */ + + +/* ++------------------------------------------------------------------------------ +| Function : rdy_cgrlc_ready_state_ind (TCS 2.1) ++------------------------------------------------------------------------------ +| Description : Handles the primitive CGRLC_READY_STATE_IND (TCS 2.1) +| +| Start of the READY TIMER +| +| +| +| Parameters : *cgrlc_ready_state_ind - Ptr to primitive payload (TCS 2.1) +| ++------------------------------------------------------------------------------ +*/ +GLOBAL void rdy_cgrlc_ready_state_ind ( const T_CGRLC_READY_STATE_IND *cgrlc_ready_state_ind ) /* TCS 2.1 */ +{ + GMM_TRACE_FUNCTION( "rdy_cgrlc_ready_state_ind" ); /* TCS 2.1 */ + + switch( GET_STATE( RDY ) ) + { + case RDY_READY: + vsi_t_stop (GMM_handle, rdy_T3312); + break; + case RDY_STANDBY: + vsi_t_stop (GMM_handle, rdy_T3312); + SET_STATE ( RDY, RDY_READY ); + break; + case RDY_DEACTIVATED: + case RDY_STANDBY_TWICE: + break; + default: + TRACE_ERROR( "CGRLC_READY_STATE_IND unexpected" ); /* TCS 2.1 */ + break; + + } + + PFREE(cgrlc_ready_state_ind); + GMM_RETURN; +} /* rdy_cgrlc_ready_state_ind() */ /* TCS 2.1 */