⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cc3timer.c

📁 phs 源代码 小灵通协议源代码 phs source code
💻 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 + -