view src/g23m-gprs/grr/grr_cpaps.c @ 304:58c7961bd0b0
default tip
TCH tap: extend DL sniffing feature to support CSD modes
Our debug feature for TCH DL sniffing reads the content of the DSP's
a_dd_0 buffer (or a_dd_1 for TCH/H subchannel 1) at appropriate times
and forwards captured bits to the host. This feature was originally
implemented for TCH/FS, TCH/EFS and TCH/HS - now extend it to cover
TCH/F data modes too.
author
Mychaela Falconia <falcon@freecalypso.org>
date
Mon, 25 Nov 2024 23:33:27 +0000 (4 months ago)
parents
fa8dc04885d8
children
line source
+ − /*
+ − +-----------------------------------------------------------------------------
+ − | Project : GPRS (8441)
+ − | Modul : GRR
+ − +-----------------------------------------------------------------------------
+ − | Copyright 2002 Texas Instruments Berlin, AG
+ − | All rights reserved.
+ − |
+ − | This file is confidential and a trade secret of Texas
+ − | Instruments Berlin, AG
+ − | The receipt of or possession of this file does not convey
+ − | any rights to reproduce or disclose its contents or to
+ − | manufacture, use, or sell anything it may describe, in
+ − | whole, or in part, without the specific written consent of
+ − | Texas Instruments Berlin, AG.
+ − +-----------------------------------------------------------------------------
+ − | Purpose : This module implements signal handler functions for service
+ − | CPAP of entity GRR.
+ − +-----------------------------------------------------------------------------
+ − */
+ −
+ − #ifndef GRR_CPAPS_C
+ − #define GRR_CPAPS_C
+ − #endif
+ −
+ − #define ENTITY_GRR
+ −
+ − /*==== 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_grr.h" /* to get cnf-definitions */
+ − #include "mon_grr.h" /* to get mon-definitions */
+ − #include "prim.h" /* to get the definitions of used SAP and directions */
+ − #include "message.h"
+ − #include <string.h>
+ − #include "grr.h" /* to get the global entity definitions */
+ − #include "grr_f.h"
+ − #include "grr_tcs.h"
+ − #include "grr_cpapf.h"
+ −
+ −
+ −
+ −
+ − /*==== CONST ================================================================*/
+ −
+ − /*==== DIAGNOSTICS ==========================================================*/
+ −
+ − /*==== LOCAL VARS ===========================================================*/
+ −
+ − /*==== PRIVATE FUNCTIONS ====================================================*/
+ −
+ − /*==== PUBLIC FUNCTIONS =====================================================*/
+ − /*
+ − +------------------------------------------------------------------------------
+ − | Function : sig_tc_cpap_abort_access
+ − +------------------------------------------------------------------------------
+ − | Description : Handles the internal signal SIG_TC_CPAP_ABORT_ACCESS
+ − |
+ − | Parameters : void
+ − |
+ − +------------------------------------------------------------------------------
+ − */
+ − GLOBAL void sig_tc_cpap_abort_access ( void )
+ − {
+ − TRACE_ISIG( "sig_tc_cpap_abort_access" );
+ −
+ − switch( GET_STATE( CPAP ) )
+ − {
+ − case CPAP_WAIT_STOP_TASK_CNF:
+ − cpap_mfree_ia( FALSE );
+ −
+ − /*lint -fallthrough*/
+ −
+ − case CPAP_SB_STARTED:
+ − case CPAP_1P_STARTED:
+ − case CPAP_WAIT_PDCH_ASSIGN:
+ − SET_STATE( CPAP, CPAP_IDLE );
+ −
+ − sig_cpap_tc_error_pim();
+ − break;
+ − default:
+ − TRACE_ERROR( "SIG_TC_CPAP_ABORT_ACCESS unexpected" );
+ − break;
+ − }
+ − } /* sig_tc_cpap_abort_access() */
+ −
+ − /*
+ − +------------------------------------------------------------------------------
+ − | Function : sig_tc_cpap_acc_req
+ − +------------------------------------------------------------------------------
+ − | Description : Handles the internal signal SIG_TC_CPAP_ACC_REQ
+ − |
+ − | Parameters : void
+ − |
+ − +------------------------------------------------------------------------------
+ − */
+ − GLOBAL void sig_tc_cpap_acc_req ( void )
+ − {
+ − /* UBYTE random_value = 0; random value is handled by rr */
+ − UBYTE req_data = 0;
+ −
+ − TRACE_ISIG( "sig_tc_cpap_acc_req" );
+ −
+ −
+ −
+ − switch( GET_STATE( CPAP ) )
+ − {
+ − case CPAP_IDLE:
+ − /* estimate access type */
+ − switch(grr_data->uplink_tbf.access_type)
+ − {
+ − case CGRLC_AT_ONE_PHASE:
+ − case CGRLC_AT_SHORT_ACCESS:
+ − /*
+ − * if ms class allows more than one uplink slot,
+ − * then two phase access is triggered.
+ − * Otherwise multislot uplink is not assigned on some network vendors */
+ − #ifdef _TARGET_
+ − if(grr_data->ms_cap[grr_get_gprs_ms_class( )-1].Tx > 1)
+ − {
+ − SET_STATE(CPAP,CPAP_SB_STARTED);
+ − req_data = 0x70;
+ − TRACE_EVENT_P1("2 PHASE FOR UPLINK MULTISLLOT ms_class=%d"
+ − ,grr_get_gprs_ms_class( ));
+ − break;
+ − }
+ − #endif
+ − case CGRLC_AT_PAGE_RESPONSE:
+ − case CGRLC_AT_MM_PROCEDURE:
+ − case CGRLC_AT_CELL_UPDATE:
+ − req_data = 0x78;
+ − /*
+ − * due to 04.08. chapter 9.1.8 random value for last 3 bit
+ − * shall be between 0 and 7
+ − */
+ − /* random value is handled by rr */
+ − SET_STATE(CPAP,CPAP_1P_STARTED);
+ − break;
+ −
+ − case CGRLC_AT_TWO_PHASE:
+ − case CGRLC_AT_SINGLE_BLOCK:
+ − req_data = 0x70;
+ − /*
+ − * due to 04.08. chapter 9.1.8 random value for last 3 bit
+ − * shall be between 0 and 7
+ − */
+ − /* random value is handled by rr */
+ − SET_STATE(CPAP,CPAP_SB_STARTED);
+ − break;
+ − default:
+ − break;
+ − }
+ − {
+ − PALLOC(rrgrr_gprs_data_req,RRGRR_GPRS_DATA_REQ);
+ −
+ − cpap_build_gprs_data_request(rrgrr_gprs_data_req);
+ − sig_cpap_tc_send_gprs_data_req(rrgrr_gprs_data_req);
+ − }
+ − sig_cpap_tc_channel_req(req_data);
+ − break;
+ −
+ − default:
+ − /*
+ − * SZML-CPAP/017
+ − */
+ − TRACE_ERROR( "SIG_TC_CPAP_ACC_REQ unexpected" );
+ − break;
+ − }
+ − } /* sig_tc_cpap_acc_req() */
+ −
+ −
+ −
+ −
+ − /*
+ − +------------------------------------------------------------------------------
+ − | Function : sig_tc_cpap_pdch_assign_received
+ − +------------------------------------------------------------------------------
+ − | Description : Handles the internal signal SIG_TC_CPAP_PDCH_ASSIGN_RECEIVED
+ − |
+ − | Parameters : fn - reception frame number
+ − |
+ − +------------------------------------------------------------------------------
+ − */
+ − GLOBAL void sig_tc_cpap_pdch_assign_received (T_RRGRR_DATA_IND *rrgrr_data_ind)
+ − {
+ − TRACE_ISIG( "sig_tc_cpap_pdch_assign_received" );
+ − grr_data->dl_fn = rrgrr_data_ind->fn;
+ − grr_data->ul_fn = rrgrr_data_ind->fn;
+ − switch( GET_STATE( CPAP ) )
+ − {
+ − case CPAP_WAIT_PDCH_ASSIGN:
+ − switch(cpap_eval_pdch_assignment())
+ − {
+ − case E_PDCH_ASSIGN_UL:
+ − memcpy(&grr_data->cpap.pdch_ass_cmd,_decodedMsg,sizeof(T_D_PDCH_ASS_CMD));
+ − grr_data->cpap.new_tbf_type = CGRLC_TBF_MODE_UL;
+ − SET_STATE(CPAP,CPAP_WAIT_DEDI_SUSPEND);
+ − sig_cpap_tc_suspend_dedi_chan();
+ − break;
+ − case E_PDCH_ASSIGN_SB:
+ − break;
+ − case E_PDCH_ASSIGN_DL:
+ − break;
+ − case E_PDCH_ASSIGN_IGNORE:
+ − break;
+ − case E_PDCH_ASSIGN_ERROR:
+ − cpap_send_ass_fail(RRC_CHANNEL_MODE);
+ − break;
+ − default:
+ − break;
+ − }
+ − break;
+ −
+ − default:
+ − TRACE_ERROR( "sig_tc_cpap_pdch_assign_received unexpected" );
+ − break;
+ − }
+ − } /* sig_tc_cpap_pdch_assign_received() */
+ −
+ −
+ − /*
+ − +------------------------------------------------------------------------------
+ − | Function : sig_tc_cpap_ia_received
+ − +------------------------------------------------------------------------------
+ − | Description : Handles the internal signal SIG_TC_CPAP_IA_RECEIVED
+ − |
+ − | Parameters : void
+ − |
+ − +------------------------------------------------------------------------------
+ − */
+ − GLOBAL void sig_tc_cpap_ia_received (T_RRGRR_IA_IND *rrgrr_ia_ind)
+ − {
+ − MCAST(d_imm_assign,D_IMM_ASSIGN); /* T_D_IMM_ASSIGN */
+ − T_EVAL_IA eval;
+ −
+ − TRACE_ISIG( "sig_tc_cpap_ia_received" );
+ −
+ − grr_data->dl_fn = rrgrr_ia_ind->fn;
+ − grr_data->ul_fn = rrgrr_ia_ind->fn;
+ − grr_data->r_bit = rrgrr_ia_ind->r_bit; /* chan req is sent at least twice on ccch */
+ − switch( GET_STATE( CPAP ) )
+ − {
+ − case CPAP_SB_STARTED:
+ − case CPAP_1P_STARTED:
+ − eval = cpap_eval_ia();
+ − if(E_IA_TMA_SECOND EQ eval)
+ − { /* 2nd message of TMA */
+ − if(grr_data->cpap.v_tma_ia)
+ − {
+ − cpap_join_tma_messages();
+ − eval = cpap_eval_ia();
+ − }
+ − else
+ − {
+ − TRACE_ERROR("2nd TMA IA received without 1st!");
+ − SET_STATE(CPAP,CPAP_IDLE);
+ −
+ − sig_cpap_tc_error_pim( );
+ − return;
+ − }
+ − }
+ −
+ − grr_data->cpap.last_ia_type = IA_TYPE_UL;
+ − grr_data->cpap.last_eval_ia.param_ul.eval_ia = eval;
+ −
+ − if( E_IA_UL EQ eval )
+ − { /* Dynamic Allocation */
+ − grr_data->cpap.v_tma_ia = FALSE;
+ −
+ − if(d_imm_assign->ia_rest_oct.ia_assign_par.pck_upl_ass_ia.tfi_ass_alloc.v_tbf_start_time)
+ − sig_cpap_tc_send_stop_task_req( DONT_STOP_CCCH );
+ − else
+ − sig_cpap_tc_send_stop_task_req( STOP_CCCH );
+ −
+ − cpap_malloc_ia( );
+ −
+ − SET_STATE( CPAP, CPAP_WAIT_STOP_TASK_CNF );
+ − return;
+ − }
+ − else if(E_IA_DCCH EQ eval)
+ − { /* continue on DCCH */
+ − if(grr_t_status( T3172_1 ) > 0 )
+ − {
+ − /*
+ − * Timer is stil running
+ − */
+ − sig_cpap_tc_stop_T3142();
+ − }
+ −
+ − grr_data->cpap.v_tma_ia = FALSE;
+ − SET_STATE(CPAP,CPAP_WAIT_PDCH_ASSIGN);
+ − }
+ − else if(E_IA_SB_2PHASE_ACCESS EQ eval)
+ − { /* Allocation for 2 Phase of 2_Phase-Access */
+ − grr_data->cpap.v_tma_ia = FALSE;
+ −
+ − sig_cpap_tc_send_stop_task_req( DONT_STOP_CCCH );
+ − cpap_malloc_ia( );
+ −
+ − SET_STATE( CPAP, CPAP_WAIT_STOP_TASK_CNF );
+ − }
+ − else if(E_IA_TMA EQ eval)
+ − { /* 1st message of TMA */
+ − cpap_store_ia_message();
+ − }
+ − else if(E_IA_ERROR_RA EQ eval)
+ − {
+ − /* errornous messages are ignored?!? */
+ − TRACE_ERROR("ia message contents nonsense!");
+ − SET_STATE(CPAP,CPAP_IDLE);
+ − grr_data->cpap.v_tma_ia = FALSE;
+ − sig_cpap_tc_error_pim();
+ − }
+ − else if(E_IA_NULL EQ eval)
+ − {
+ − /* unforeseen mesage content*/
+ − }
+ − else if(E_IA_SB_WITHOUT_TBF EQ eval)
+ − {
+ − grr_data->cpap.v_tma_ia = FALSE;
+ −
+ − sig_cpap_tc_send_stop_task_req( DONT_STOP_CCCH );
+ − cpap_malloc_ia( );
+ −
+ − SET_STATE( CPAP, CPAP_WAIT_STOP_TASK_CNF );
+ − /*TRACE_EVENT("E_IA_SB_WITHOUT_TBF: stop task");*/
+ − }
+ −
+ − if( grr_data->pwr_ctrl_valid_flags.v_pwr_ctrl_param OR
+ − grr_data->pwr_ctrl_valid_flags.v_glbl_pwr_ctrl_param OR
+ − grr_data->pwr_ctrl_valid_flags.v_freq_param )
+ − {
+ − grr_cgrlc_pwr_ctrl_req( FALSE );
+ − }
+ − break;
+ −
+ − case CPAP_IDLE:
+ − case CPAP_WAIT_PDCH_ASSIGN:
+ − default:
+ − TRACE_ERROR( "SIG_TC_CPAP_IA_RECEIVED unexpected" );
+ − break;
+ − }
+ − } /* sig_tc_cpap_ia_received() */
+ −
+ − /*
+ − +------------------------------------------------------------------------------
+ − | Function : sig_tc_cpap_iaext_received
+ − +------------------------------------------------------------------------------
+ − | Description : Handles the internal signal SIG_TC_CPAP_IAEXT_RECEIVED
+ − |
+ − | Parameters : ia_index - indicates the correct immediate assignment
+ − |
+ − +------------------------------------------------------------------------------
+ − */
+ − GLOBAL void sig_tc_cpap_iaext_received ( T_RRGRR_IAEXT_IND *rrgrr_iaext_ind )
+ − {
+ − TRACE_ISIG( "sig_tc_cpap_iaext_received" );
+ − /*
+ − * SZML-CPAP/024
+ − */
+ − grr_data->dl_fn = rrgrr_iaext_ind->fn;
+ − grr_data->ul_fn = rrgrr_iaext_ind->fn;
+ − grr_data->r_bit = rrgrr_iaext_ind->r_bit; /* chan req is sent at least twice on ccch */
+ −
+ − switch( GET_STATE( CPAP ) )
+ − {
+ − case CPAP_IDLE:
+ − /* SZML-CPAP/025 */
+ − break;
+ − case CPAP_SB_STARTED:
+ − case CPAP_1P_STARTED:
+ − SET_STATE(CPAP,CPAP_WAIT_PDCH_ASSIGN);
+ − break;
+ − case CPAP_WAIT_PDCH_ASSIGN:
+ − break;
+ −
+ − default:
+ − TRACE_ERROR( "SIG_TC_CPAP_IAEXT_RECEIVED unexpected" );
+ − break;
+ − }
+ − } /* sig_tc_cpap_iaext_received() */
+ −
+ − /*
+ − +------------------------------------------------------------------------------
+ − | Function : sig_tc_cpap_iarej_received
+ − +------------------------------------------------------------------------------
+ − | Description : Handles the internal signal SIG_TC_CPAP_IAREJ_RECEIVED
+ − |
+ − | Parameters : wait_ind - is taken from the corresponding air message
+ − |
+ − +------------------------------------------------------------------------------
+ − */
+ − GLOBAL void sig_tc_cpap_iarej_received (T_RRGRR_ASSIGNMENT_REJ_IND *rrgrr_assignment_rej_ind)
+ − {
+ − TRACE_ISIG( "sig_tc_cpap_iarej_received" );
+ − grr_data->r_bit = rrgrr_assignment_rej_ind->r_bit; /* chan req is sent at least twice on ccch */
+ −
+ − switch( GET_STATE( CPAP ) )
+ − {
+ − case CPAP_SB_STARTED:
+ − case CPAP_1P_STARTED:
+ − if(grr_t_status( T3172_1 ) EQ 0 )
+ − {
+ − /*Timer not running*/
+ − if(rrgrr_assignment_rej_ind->wait_ind)
+ − {
+ − sig_cpap_tc_start_T3142(1000 * rrgrr_assignment_rej_ind->wait_ind);
+ − }
+ − else
+ − {
+ − SET_STATE(CPAP, CPAP_IDLE);
+ −
+ − sig_cpap_tc_error_pim();
+ − }
+ − } /* no else path because additional rejects have to be ignored!! */
+ − break;
+ −
+ − default:
+ − TRACE_ERROR( "SIG_TC_CPAP_IAREJ_RECEIVED unexpected" );
+ − break;
+ − }
+ − } /* sig_tc_cpap_iarej_received() */
+ −
+ − /*
+ − +------------------------------------------------------------------------------
+ − | Function : sig_tc_cpap_ia_downlink_received
+ − +------------------------------------------------------------------------------
+ − | Description : Handles the internal signal SIG_TC_CPAP_IA_DOWNLINK_RECEIVED
+ − |
+ − | Parameters : void
+ − |
+ − +------------------------------------------------------------------------------
+ − */
+ − GLOBAL void sig_tc_cpap_ia_downlink_received (T_RRGRR_IA_DOWNLINK_IND *rrgrr_ia_downlink_ind)
+ − {
+ − MCAST(d_imm_assign,D_IMM_ASSIGN);/* T_D_IMM_ASSIGN */
+ − UBYTE state = GET_STATE( CPAP );
+ − T_EVAL_IA_DL eval;
+ −
+ − TRACE_ISIG( "sig_tc_cpap_ia_downlink_received" );
+ −
+ − /* SZML-CPAP/026 */
+ −
+ − grr_data->dl_fn = rrgrr_ia_downlink_ind->fn;
+ − grr_data->ul_fn = rrgrr_ia_downlink_ind->fn;
+ −
+ − switch( state )
+ − {
+ − case CPAP_IDLE:
+ − eval = cpap_eval_ia_dl();
+ −
+ − if(E_IA_DL_TMA_SECOND EQ eval)
+ − {
+ − if(grr_data->cpap.v_tma_ia)
+ − {
+ − cpap_join_tma_messages();
+ − eval = cpap_eval_ia_dl();
+ − }
+ − else
+ − {
+ − TRACE_ERROR("2nd TMA IA received without 1st!");
+ − sig_cpap_tc_send_stop_task_req( INVALID_MSG );
+ − return;
+ − }
+ − }
+ −
+ − grr_data->cpap.last_ia_type = IA_TYPE_DL;
+ − grr_data->cpap.last_eval_ia.param_dl.state = state;
+ − grr_data->cpap.last_eval_ia.param_dl.eval_ia_dl = eval;
+ −
+ − if(E_IA_DL_SB EQ eval)
+ − {
+ − grr_data->cpap.v_tma_ia = FALSE;
+ − cpap_malloc_ia( );
+ − sig_cpap_tc_send_stop_task_req( DONT_STOP_CCCH );
+ − SET_STATE( CPAP, CPAP_WAIT_STOP_TASK_CNF );
+ − }
+ − else if(E_IA_DL_ASSIGN EQ eval)
+ − {
+ − grr_data->cpap.v_tma_ia = FALSE;
+ − if(d_imm_assign->ia_rest_oct.ia_assign_par.pck_downl_ass_ia.v_tbf_start_time)
+ − sig_cpap_tc_send_stop_task_req( DONT_STOP_CCCH );
+ − else
+ − sig_cpap_tc_send_stop_task_req( STOP_CCCH );
+ −
+ − cpap_malloc_ia( );
+ − SET_STATE( CPAP, CPAP_WAIT_STOP_TASK_CNF );
+ − }
+ − else if(E_IA_DL_TMA EQ eval)
+ − {
+ − cpap_store_ia_message();
+ − }
+ − else if(E_IA_DL_NOT_OURS EQ eval)
+ − {
+ − TRACE_EVENT("Message not adressed to MS");
+ − sig_cpap_tc_send_stop_task_req( INVALID_MSG );
+ − }
+ − else if(E_IA_DL_IGNORE EQ eval)
+ − {
+ − TRACE_EVENT("INVALID DL IA RECEIVED 1 ");
+ − sig_cpap_tc_send_stop_task_req( INVALID_MSG );
+ − }
+ −
+ − if( grr_data->pwr_ctrl_valid_flags.v_pwr_ctrl_param OR
+ − grr_data->pwr_ctrl_valid_flags.v_glbl_pwr_ctrl_param OR
+ − grr_data->pwr_ctrl_valid_flags.v_freq_param )
+ − {
+ − grr_cgrlc_pwr_ctrl_req( FALSE );
+ − }
+ − break;
+ − case CPAP_SB_STARTED:
+ − case CPAP_1P_STARTED:
+ − eval = cpap_eval_ia_dl();
+ −
+ − if(E_IA_DL_TMA_SECOND EQ eval)
+ − {
+ − if(grr_data->cpap.v_tma_ia)
+ − {
+ − cpap_join_tma_messages();
+ − eval = cpap_eval_ia_dl();
+ − }
+ − else
+ − {
+ − TRACE_ERROR("2nd TMA IA received without 1st!");
+ − sig_cpap_tc_send_stop_task_req( INVALID_MSG );
+ − return;
+ − }
+ − }
+ −
+ − grr_data->cpap.last_ia_type = IA_TYPE_DL;
+ − grr_data->cpap.last_eval_ia.param_dl.state = state;
+ − grr_data->cpap.last_eval_ia.param_dl.eval_ia_dl = eval;
+ −
+ −
+ − if(E_IA_DL_ASSIGN EQ eval)
+ − {
+ − grr_data->cpap.v_tma_ia = FALSE;
+ − if(d_imm_assign->ia_rest_oct.ia_assign_par.pck_downl_ass_ia.v_tbf_start_time)
+ − sig_cpap_tc_send_stop_task_req( DONT_STOP_CCCH );
+ − else
+ − sig_cpap_tc_send_stop_task_req( STOP_CCCH );
+ −
+ − cpap_malloc_ia( );
+ − SET_STATE( CPAP, CPAP_WAIT_STOP_TASK_CNF );
+ − }
+ − else if(E_IA_DL_SB EQ eval)
+ − {
+ − TRACE_EVENT_P3("IA_DL_SB ia_type=%d dl_state =%d eval_ia=%d",grr_data->cpap.last_ia_type
+ − ,grr_data->cpap.last_eval_ia.param_dl.state
+ − ,grr_data->cpap.last_eval_ia.param_dl.eval_ia_dl);
+ − grr_data->cpap.v_tma_ia = FALSE;
+ − cpap_malloc_ia( );
+ − sig_cpap_tc_send_stop_task_req( DONT_STOP_CCCH );
+ − SET_STATE( CPAP, CPAP_WAIT_STOP_TASK_CNF );
+ − }
+ − else if(E_IA_DL_TMA EQ eval)
+ − {
+ − cpap_store_ia_message();
+ − }
+ − else if(E_IA_DL_NOT_OURS EQ eval)
+ − {
+ − sig_cpap_tc_send_stop_task_req( INVALID_MSG );
+ − TRACE_EVENT("Message not addressed to MS");
+ − }
+ − else if(E_IA_DL_IGNORE EQ eval)
+ − {
+ − TRACE_EVENT("INVALID DL IA RECEIVED 2 ");
+ − sig_cpap_tc_send_stop_task_req( INVALID_MSG );
+ − }
+ −
+ − if( grr_data->pwr_ctrl_valid_flags.v_pwr_ctrl_param OR
+ − grr_data->pwr_ctrl_valid_flags.v_glbl_pwr_ctrl_param OR
+ − grr_data->pwr_ctrl_valid_flags.v_freq_param )
+ − {
+ − grr_cgrlc_pwr_ctrl_req( FALSE );
+ − }
+ − break;
+ − case CPAP_WAIT_STOP_TASK_CNF:
+ − {
+ − TRACE_EVENT( "SIG_TC_CPAP_IA_DOWNLINK_RECEIVED processing of another IA not finished" );
+ − }
+ − break;
+ − default:
+ − {
+ − TRACE_ERROR( "SIG_TC_CPAP_IA_DOWNLINK_RECEIVED unexpected" );
+ − sig_cpap_tc_send_stop_task_req( INVALID_MSG );
+ − }
+ − break;
+ − }
+ − } /* sig_tc_cpap_ia_downlink_received() */
+ −
+ − /*
+ − +------------------------------------------------------------------------------
+ − | Function : sig_tc_cpap_stop_task_cnf_received
+ − +------------------------------------------------------------------------------
+ − | Description : Handles the internal signal SIG_TC_CPAP_STOP_TASK_CNF
+ − |
+ − | Parameters :
+ − |
+ − +------------------------------------------------------------------------------
+ − */
+ − GLOBAL void sig_tc_cpap_stop_task_cnf_received( void )
+ − {
+ − T_TBF_TYPE tbf_type;
+ −
+ − TRACE_ISIG( "sig_tc_cpap_stop_task_cnf_received" );
+ − /*
+ − TRACE_EVENT_P3("IA_DL_SB ia_type=%d dl_state =%d eval_ia=%d",grr_data->cpap.last_ia_type
+ − ,grr_data->cpap.last_eval_ia.param_dl.state
+ − ,grr_data->cpap.last_eval_ia.param_dl.eval_ia_dl);
+ − */
+ − switch( GET_STATE( CPAP ) )
+ − {
+ − case CPAP_WAIT_STOP_TASK_CNF:
+ −
+ − cpap_mfree_ia( TRUE );
+ −
+ − switch( grr_data->cpap.last_ia_type )
+ − {
+ − case IA_TYPE_UL:
+ −
+ − switch( grr_data->cpap.last_eval_ia.param_ul.eval_ia )
+ − {
+ − case E_IA_UL:
+ − tbf_type = CGRLC_TBF_MODE_UL;
+ − if( cpap_send_assign_req_ia( tbf_type ) )
+ − {
+ − if(grr_t_status( T3172_1 ) > 0 )
+ − {
+ − sig_cpap_tc_stop_T3142( );
+ − }
+ −
+ − SET_STATE( CPAP,CPAP_IDLE );
+ −
+ − sig_cpap_tc_tbf_created( tbf_type );
+ − }
+ − else
+ − {
+ − SET_STATE( CPAP,CPAP_IDLE );
+ −
+ − sig_cpap_tc_error_pim();
+ − }
+ − break;
+ − case E_IA_SB_2PHASE_ACCESS:
+ − if(cpap_send_resource_request_ia())
+ − {
+ − SET_STATE( CPAP,CPAP_IDLE );
+ − if(grr_t_status( T3172_1 ) > 0 )
+ − {
+ − sig_cpap_tc_stop_T3142();
+ − }
+ − }
+ − else
+ − {
+ − SET_STATE( CPAP,CPAP_IDLE );
+ − sig_cpap_tc_error_pim();
+ − }
+ − break;
+ − case E_IA_SB_WITHOUT_TBF:
+ − SET_STATE(CPAP,CPAP_IDLE);
+ − /*TRACE_EVENT("E_IA_SB_WITHOUT_TBF: stop task cnf received");*/
+ − if(cpap_send_single_block_without_tbf())
+ − {
+ − if(grr_t_status( T3172_1 ) > 0 )
+ − {
+ − sig_cpap_tc_stop_T3142();
+ − }
+ − }
+ − else
+ − {
+ − sig_cpap_tc_error_pim();
+ − }
+ − break;
+ − default:
+ − SET_STATE( CPAP, CPAP_IDLE );
+ − TRACE_ERROR( "SIG_TC_CPAP_STOP_TASK_CNF: eval_ia invalid" );
+ − return;
+ − }
+ −
+ − break;
+ −
+ − case IA_TYPE_DL:
+ −
+ − switch( grr_data->cpap.last_eval_ia.param_dl.state )
+ − {
+ − case CPAP_IDLE:
+ − case CPAP_SB_STARTED:
+ − case CPAP_1P_STARTED:
+ − switch( grr_data->cpap.last_eval_ia.param_dl.eval_ia_dl )
+ − {
+ − case E_IA_DL_ASSIGN:
+ − if( cpap_send_assign_req_ia( CGRLC_TBF_MODE_DL ) )
+ − {
+ − if(grr_t_status( T3172_1 ) > 0 )
+ − {
+ − sig_cpap_tc_stop_T3142( );
+ − }
+ − sig_cpap_tc_tbf_created( CGRLC_TBF_MODE_DL );
+ − }
+ − else
+ − {
+ − sig_cpap_tc_error_pim();
+ − }
+ − break;
+ − case E_IA_DL_SB:
+ − if(!cpap_send_receive_normal_burst())
+ − {
+ − sig_cpap_tc_error_pim();
+ − }
+ − else if(grr_t_status( T3172_1 ) > 0)
+ − {
+ − sig_cpap_tc_stop_T3142();
+ − }
+ − break;
+ − default:
+ − TRACE_ERROR( "SIG_TC_CPAP_STOP_TASK_CNF: eval_ia_dl invalid cpap_sb_1p_started" );
+ − sig_cpap_tc_error_pim();
+ − return;
+ − }
+ − SET_STATE( CPAP,CPAP_IDLE );
+ − break;
+ −
+ − default:
+ − SET_STATE( CPAP, CPAP_IDLE );
+ − TRACE_ERROR( "SIG_TC_CPAP_STOP_TASK_CNF: state invalid" );
+ − return;
+ − }
+ − break;
+ −
+ − default:
+ − SET_STATE( CPAP, CPAP_IDLE );
+ − TRACE_ERROR( "SIG_TC_CPAP_STOP_TASK_CNF: last_ia_type invalid" );
+ − return;
+ − }
+ − break;
+ −
+ − default:
+ − TRACE_ERROR( "SIG_TC_CPAP_STOP_TASK_CNF unexpected" );
+ − break;
+ − }
+ − } /* sig_tc_cpap_stop_task_cnf_received() */
+ −
+ − /*
+ − +------------------------------------------------------------------------------
+ − | Function : sig_tc_cpap_new_cell
+ − +------------------------------------------------------------------------------
+ − | Description : Handles the internal signal SIG_TC_CPAP_NEW_CELL in case of
+ − | T3142 is running it shall bestopped. New Access procedures if
+ − | necessary will be started by service TC.
+ − |
+ − | Parameters : void
+ − |
+ − +------------------------------------------------------------------------------
+ − */
+ − GLOBAL void sig_tc_cpap_new_cell ( void )
+ − {
+ − if( GET_STATE( CPAP ) EQ CPAP_WAIT_STOP_TASK_CNF )
+ − {
+ − cpap_mfree_ia( FALSE );
+ − }
+ −
+ − SET_STATE(CPAP,CPAP_IDLE);
+ − } /* sig_tc_cpap_new_cell() */
+ −
+ −
+ −
+ −
+ − /*
+ − +------------------------------------------------------------------------------
+ − | Function : sig_tc_cpap_con_res_fail
+ − +------------------------------------------------------------------------------
+ − | Description : Handles the internal signal SIG_TC_CPAP_CON_RES_FAIL
+ − |
+ − | Parameters : void
+ − |
+ − +------------------------------------------------------------------------------
+ − */
+ − GLOBAL void sig_tc_cpap_con_res_fail ( void )
+ − {
+ − TRACE_ISIG( "sig_tc_cpap_con_res_fail" );
+ −
+ − switch(GET_STATE(CPAP))
+ − {
+ − default:
+ − TRACE_ERROR("sig_tc_cpap_con_res_fail unexpected!");
+ − break;
+ − case CPAP_IDLE:
+ − SET_STATE(CPAP,CPAP_WAIT_PDCH_ASSIGN);
+ − sig_cpap_tc_resume_dedi_chan();
+ − cpap_send_ass_fail(RRC_PROT_UNSPECIFIED);
+ − break;
+ − }
+ −
+ −
+ − } /* sig_tc_cpap_con_res_fail() */
+ −
+ −
+ −
+ − /*
+ − +------------------------------------------------------------------------------
+ − | Function : sig_tc_cpap_suspend_dcch_cnf
+ − +------------------------------------------------------------------------------
+ − | Description : Handles the internal signal SIG_TC_CPAP_SUSPEND_DCCH_CNF
+ − |
+ − | Parameters : void
+ − |
+ − +------------------------------------------------------------------------------
+ − */
+ − GLOBAL void sig_tc_cpap_suspend_dcch_cnf ( void )
+ − {
+ − TRACE_ISIG( "sig_tc_cpap_suspend_dcch_cnf" );
+ −
+ − switch(GET_STATE(CPAP))
+ − {
+ − case CPAP_WAIT_DEDI_SUSPEND:
+ − memcpy(_decodedMsg,&grr_data->cpap.pdch_ass_cmd,sizeof(T_D_PDCH_ASS_CMD));
+ − cpap_send_assign_req_pdch(grr_data->cpap.new_tbf_type);
+ − sig_cpap_tc_ctrl_ptm();
+ − sig_cpap_tc_tbf_created(grr_data->cpap.new_tbf_type);
+ −
+ − break;
+ − default:
+ − TRACE_ERROR("sig_tc_cpap_suspend_dcch_cnf unexpected!");
+ − break;
+ − }
+ −
+ −
+ − } /* sig_tc_cpap_suspend_dcch_cnf() */
+ −
+ − /*
+ − +------------------------------------------------------------------------------
+ − | Function : sig_tc_cpap_t3142
+ − +------------------------------------------------------------------------------
+ − | Description : Handles the internal signal SIG_TC_CPAP_T3142
+ − |
+ − | Parameters : void
+ − |
+ − +------------------------------------------------------------------------------
+ − */
+ − GLOBAL void sig_tc_cpap_t3142 ( void )
+ − {
+ − TRACE_FUNCTION( "sig_tc_cpap_t3142" );
+ −
+ − switch( GET_STATE( CPAP ) )
+ − {
+ −
+ −
+ − case CPAP_IDLE:
+ − /* nothing to do */
+ − TRACE_EVENT( "SIG_TC_CPAP_T3142 in CPAP_IDLE: nothing to do" );
+ − /* this should not happen */
+ − break;
+ − case CPAP_1P_STARTED:
+ − case CPAP_SB_STARTED:
+ − SET_STATE(CPAP,CPAP_IDLE);
+ − /* sig_cpap_tc_error_pim(); */
+ − break;
+ − case CPAP_WAIT_STOP_TASK_CNF:
+ − SET_STATE(CPAP,CPAP_IDLE);
+ −
+ − cpap_mfree_ia( FALSE );
+ − /* sig_cpap_tc_error_pim(); */
+ − break;
+ − default:
+ − TRACE_ERROR( "SIG_TC_CPAP_T3142 unexpected" );
+ − break;
+ −
+ − }
+ −
+ − } /* sig_tc_cpap_t3142() */
+ −
+ − /*
+ − +------------------------------------------------------------------------------
+ − | Function : sig_tc_cpap_reconnect_ind
+ − +------------------------------------------------------------------------------
+ − | Description : Handles the internal signal SIG_TC_CPAP_RECONNECT_IND
+ − |
+ − | Parameters : void
+ − |
+ − +------------------------------------------------------------------------------
+ − */
+ −
+ − GLOBAL void sig_tc_cpap_reconnect_ind ( void )
+ − {
+ − switch(GET_STATE(CPAP))
+ − {
+ − case CPAP_WAIT_STOP_TASK_CNF:
+ − cpap_mfree_ia( FALSE );
+ −
+ − /*lint -fallthrough*/
+ −
+ − case CPAP_IDLE:
+ − case CPAP_SB_STARTED:
+ − case CPAP_1P_STARTED:
+ − case CPAP_WAIT_DEDI_SUSPEND:
+ − SET_STATE(CPAP,CPAP_WAIT_PDCH_ASSIGN);
+ − break;
+ − default:
+ − TRACE_ERROR("sig_tc_cpap_reconnect_ind unexpected!");
+ − break;
+ − }
+ − } /* sig_tc_cpap_reconnect_ind ()*/