📄 cc3timer.c
字号:
/************************************************************************/
/** Copyright (c) 1998, UTStarcom, Inc. */
/** All Rights Reserved. */
/** */
/** Subsystem: CC */
/** File: cc3timer.c */
/** Created By: tara zhang */
/** Created On: 08/02/2003 */
/** */
/** Purpose: */
/** This file handle CC timer start , timer stop and timeout. */
/** */
/** Necessary Compilation Flags: FLAG_1, , FLAG_N */
/********************************************************************** */
/** Modify by: */
/** Modify purpose: */
/************************************************************************/
#ifndef PM_ONPC
#define __CC3TIMER_C_
#ifdef __cplusplus
extern "C"{
#endif
#include "cc.h"
/****************************************************************************/
/* */
/* NUMBER 22 */
/* CALL void cc_tc303p */
/* PARAM void */
/* FUNC handle timer tc303P timeout */
/* RETURN void */
/* GLOBAL disconnect_complete_flag:disconnect complete flag*/
/* L3_dl :l3_dl state */
/* Cc_sts :cc state */
/* Cc_timcm :fitst start tc303p or not */
/* */
/****************************************************************************/
void cc_tc303p( )
{
if( (Cc_timcm & TC303ON) == 0 ) /* tc303p first start*/
{
/* send setup message to L2 again */
SYS_WORK->tsk_id = TASKL2; /* set task id */
OUT_DLDEVT->evt_cod = EDLDTRQ;
if (L3_dl[FACCH_ST] == ST_SET) /* facch */
OUT_DLDEVT->dl_typ = FACCH; /* facch channel*/
else /* sacch*/
OUT_DLDEVT->dl_typ = SACCH; /*sacch channel */
OUT_DLDEVT->dl_id = SLOT1; /* slot time */
OUT_DLDEVT->dl_sou = 0; /* not need transfer confirm */
OUT_DLDEVT->msg_adr = (CC_MSGDAT *)Cc_ko_set_p; /* setup message body */
Cc_ko_set_p = 0;
m_excreq((U2*) &SYS_WORK->tsk_id ); /* send out */
cc_set_time( TC303ON ); /* start tc303p again */
Cc_timcm |= TC303ON; /* second strat timer tc303p */
}
else /* timer already started two times */
{
SYS_WORK->tsk_id = TASKMNG; /* set task id */
OUT_PRIEVT->evt_cod = ECC; /* set event code */
OUT_PRIEVT->pri_cod = PSCALFAL; /* set message type */
OUT_PRIEVT->buf_adr = 0;
OUT_PRIEVT->inf_len = 0;
OUT_PRIEVT->inf_adr = 0;
OUT_PRIEVT->add_dat = 1;
m_excreq((U2*) &SYS_WORK->tsk_id ); /* sen dout */
OUT_DLDEVT->msg_adr = (CC_MSGDAT *)m_hntbuf( );/* get memory */
cc_msg_write( CCL2_RELEASE_COMPLETE ); /* write release complete message */
OUT_DLDEVT->dl_sou = 1; /* need transfer confirm */
SYS_WORK->out_ptr = (U1*)(OUT_DLDEVT->msg_adr +10); /*output message data pointer */
cc_cause_write( 0x66 ); /* write cause info:0x66(recovery on timer expiry )*/
OUT_MSGDAT->len = CC_FMT_SZ+5; /* out message data length*/
m_excreq( (U2*)&SYS_WORK->tsk_id ); /* send out */
cc_reference_clear(); /* call initial */
Cc_tim &= ~TC303ON; /* initial this varible */
disconnect_complete_flag = 1; /* disconnect complete flag */
}
}
/****************************************************************************/
/* */
/* NUMBER 23 */
/* CALL void cc_tc305p */
/* PARAM void */
/* FUNC handle timer tc305P at P11 state */
/* RETURN void */
/* GLOBAL */
/* Cc_sts :cc state */
/* */
/****************************************************************************/
void cc_tc305p( )
{
OUT_DLDEVT->msg_adr = (CC_MSGDAT *)m_hntbuf( ); /* get memory */
cc_msg_write( CCL2_RELEASE ); /* write release message */
SYS_WORK->out_ptr = (U1*)(OUT_DLDEVT->msg_adr +10); /* output message data pointer */
cc_cause_write( 0x66 ); /* write cause info:0x66(recovery on timer expiry )*/
OUT_MSGDAT->len = CC_FMT_SZ+5; /* out message data length */
m_excreq((U2*)&SYS_WORK->tsk_id ); /* send out*/
cc_set_time( TC308ON ); /* start timer tc308p*/
Cc_timcm &= ~TC308ON; /* first start timer tc308p */
//Cc_sts = ST_RELREQ;
Cc_tim &= ~TC305ON; /* timer tc305 off */
if(p_state_table->state != 0xff)
{
Cc_sts = (U1)p_state_table->state; /* cc state change to p19 state */
}
}
/****************************************************************************/
/* */
/* NUMBER 24 */
/* CALL void cc_tc308p */
/* PARAM void */
/* FUNC handle timer tc308P time out at p19 state */
/* RETURN void */
/* GLOBAL DISC_COMP_FLAG :disconnect complete flag */
/* Cc_sts :cc state */
/* Cc_timcm :first start timer tc308P or not*/
/* */
/****************************************************************************/
void cc_tc308p( )
{
if( (Cc_timcm & TC308ON) == 0 ) /*first start timer tc308p */
{
OUT_DLDEVT->msg_adr = (CC_MSGDAT *)m_hntbuf( ); /* get memory */
cc_msg_write( CCL2_RELEASE ); /* write release message */
SYS_WORK->out_ptr = (U1*)(OUT_DLDEVT->msg_adr +10); /* write cause info */
cc_cause_write( 0x66 ); /* write cause info:0x66(recovery on timer expiry )*/
OUT_MSGDAT->len = CC_FMT_SZ+5; /* output message data length */
m_excreq( (U2*)&SYS_WORK->tsk_id ); /* send out */
cc_set_time( TC308ON ); /* start timer tc308p again */
Cc_timcm |= TC308ON; /* second strat timer tc308p */
}
else
{
SYS_WORK->tsk_id = TASKMNG; /* set task id */
OUT_PRIEVT->evt_cod = ECC; /* set event code */
OUT_PRIEVT->pri_cod = PSCALFAL; /* set message type */
OUT_PRIEVT->buf_adr = 0;
OUT_PRIEVT->inf_len = 0;
OUT_PRIEVT->inf_adr = 0;
OUT_PRIEVT->add_dat = 2;
m_excreq((U2*) &SYS_WORK->tsk_id ); /* send out */
cc_reference_clear(); /* call initial */
Cc_tim &= ~TC308ON; /* timer tc308p off */
disconnect_complete_flag = 5; /* disconnect complete flag(exception)*/
}
}
/****************************************************************************/
/* */
/* NUMBER 25 */
/* CALL void cc_tc313p */
/* PARAM void */
/* FUNC handel tc313p timeout at p8 state */
/* RETURN void */
/* GLOBAL */
/* Cc_sts :cc state */
/* */
/****************************************************************************/
void cc_tc313p( )
{
OUT_DLDEVT->msg_adr = (CC_MSGDAT *)m_hntbuf( ); /* get memory */
cc_msg_write( CCL2_DISCONNECT ); /* write disconnect message */
SYS_WORK->out_ptr = (U1*)(OUT_DLDEVT->msg_adr +10); /* output message data pointer */
cc_cause_write( 0x66 ); /* write cause info:0x66(recovery on timer expiry )*/
OUT_MSGDAT->len = CC_FMT_SZ+5; /* output message data length */
m_excreq( (U2*)&SYS_WORK->tsk_id ); /* send out */
set_up_b((U1 *)SYS_WORK->out_evt, 0, sizeof(SYS_WORK->out_evt));
SYS_WORK->tsk_id = TASKMNG; /* set task id */
OUT_PRIEVT->evt_cod = ECC; /* set event code */
OUT_PRIEVT->pri_cod = PSCALDIS; /* set message type */
OUT_PRIEVT->add_dat = 1;
m_excreq( (U2*)&SYS_WORK->tsk_id ); /* send out */
cc_set_time( TC305ON ); /* start timer tc305P*/
//Cc_sts = ST_DSCREQ;
Cc_tim &= TC313ON; /* timer tc313P off*/
if(p_state_table->state != 0xff)
{
Cc_sts = (U1)p_state_table->state; /*cc state change to p11 state*/
}
}
/****************************************************************************/
/* */
/* NUMBER 3 */
/* CALL void cc_set_time( flg ) */
/* PARAM U1 flg: bit0 ON (start tc303P) */
/* bit1 ON (start tc305P) */
/* bit2 ON (start tc308P) */
/* bit3 ON (start tc313P) */
/* FUNC start timer */
/* RETURN void */
/* GLOBAL */
/* */
/* */
/****************************************************************************/
void cc_set_time( U1 flg )
{
U1 i;
i = 0;
switch( flg )
{
case TC313ON: i++;
case TC308ON: i++;
case TC305ON: i++;
case TC303ON:
Cc_tim = Cc_tim | flg; /*timer in use */
m_settim( (U2 *)cc_set_time_t[i] );
}
}
/****************************************************************************/
/* */
/* NUMBER 4 */
/* CALL void cc_stop_time( flg ) */
/* PARAM U1 flg: bit0 ON (tc303P stop ) */
/* bit1 ON (tc305P stop ) */
/* bit2 ON (tc308P stop ) */
/* bit3 ON (tc313P stop ) */
/* FUNC stop timer */
/* RETURN void */
/* GLOBAL Cc_tim :timer use state */
/* CcSetTime :start timer */
/* */
/****************************************************************************/
void cc_stop_time( U1 flg )
{
U1 i, n;
if ( flg & TC303ON ) /* tc303p off*/
{
if ( Cc_ko_set_p )
{
m_frebuf( Cc_ko_set_p ); /* free memory*/
Cc_ko_set_p = 0; /* initial this varible */
}
}
for ( n = 1, i = 0; i < 4 ; i++ )
{
if (((n & flg)) && ((Cc_tim & n)))
{
Cc_tim = Cc_tim & ( ~n );
m_stptim(cc_set_time_t[i]->shubetu,
cc_set_time_t[i]->id, cc_set_time_t[i]->data[0]);
}
n = n<<1;
}
}
#undef __CC3TIMER_C_
#ifdef __cplusplus
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -