rt3schr.c

来自「phs 源代码 小灵通协议源代码 phs source code」· C语言 代码 · 共 375 行

C
375
字号
/************************************************************************/
/** 		Copyright (c) 1998, UTStarcom, Inc. 			*/
/**			 All Rights Reserved. 				*/
/** 									*/
/** Subsystem: 		RT 						*/
/** File: 		rt3schr.c 					*/
/** Created By: 	tara zhang					*/
/** Created On: 	08/02/2003					*/
/** 									*/
/** Purpose:								*/
/** 	This file handle request message when switching .		*/
/**									*/
/** Necessary Compilation Flags: FLAG_1, , FLAG_N 			*/
/**********************************************************************	*/
/** Modify by: 								*/
/** Modify purpose:							*/
/************************************************************************/
#ifndef PM_ONPC

#define __RTSCHR_C_

#ifdef __cplusplus
extern "C"{
#endif

#include "rt.h"

#ifdef SIMU_ON_PC
U1		rand_num;
#endif

/***************************************************************************************/
/*                                                      				*/
/*  NUMBER		                                   				*/
/*  CALL         U1	rt_paging_res() 		                         	*/
/*  PARAM                                               				*/
/*  FUNC         this function handle paging response message,the message is transmitted
		 from PS to CS in order for PS to respond to a paging call drom CS	*/
/*  RETURN       0									*/
/*                                                      				*/
/****************************************************************************************/
U1 rt_paging_res(void)
{
	SYS_WORK->tsk_id = TASKL2;
	OUT_DLDEVT->evt_cod = EDLDTRQ;
	if ( L3_dl[FACCH_ST] == ST_SET )
		OUT_DLDEVT->dl_typ = FACCH;
	else
		OUT_DLDEVT->dl_typ = SACCH;
	OUT_DLDEVT->dl_id = SLOT1;
	OUT_DLDEVT->dl_sou = 0;
	OUT_DLDEVT->msg_adr = (RT_MSGDAT *)m_hntbuf();
	OUT_MSGDAT->len = 10;
	OUT_MSGDAT->dat[0] = RT_ID;
	OUT_MSGDAT->dat[1] = RTL2_PAGE_RES;
	OUT_MSGDAT->dat[2] = PS_NUMBER;
	move_up_b((U1*)&OUT_MSGDAT->dat[3], Sys_psno,7);  /* may be need to update */

	m_excreq( (WORD*)&SYS_WORK->tsk_id );
	if(IN_PRIEVT->buf_adr)
		m_frebuf(IN_PRIEVT->buf_adr);
	return (0);
}

U1 rt_function_req(void)
{
	SYS_WORK->tsk_id = TASKL2;
	OUT_DLDEVT->evt_cod = EDLDTRQ;
	if ( L3_dl[FACCH_ST] == ST_SET )
		OUT_DLDEVT->dl_typ = FACCH;
	else
		OUT_DLDEVT->dl_typ = SACCH;
	OUT_DLDEVT->dl_id = SLOT1;
	OUT_DLDEVT->dl_sou = 0;
	OUT_DLDEVT->msg_adr = (RT_MSGDAT *)m_hntbuf();
	OUT_MSGDAT->next_po = 0;
	OUT_MSGDAT->dat[0] = RT_ID;
	OUT_MSGDAT->dat[1] = RTL2_FUNCTION_REQ;

	if ((Sys_initdl1[9] == 0x04) && (Sys_initdl1[10] == 0x4A))
	{
		OUT_MSGDAT->len = 7;
		OUT_MSGDAT->dat[2] = ENCRYPTION;
		OUT_MSGDAT->dat[3] = 0x10;
		OUT_MSGDAT->dat[4] = 0x00;
		OUT_MSGDAT->dat[5] = TCH_SWITCH;
		OUT_MSGDAT->dat[6] = 0x17;

		Rt_fncrq = 0x0a;
	}
	else
	{
		OUT_MSGDAT->len = 8;
		OUT_MSGDAT->dat[2] = ENCRYPTION;
		OUT_MSGDAT->dat[3] = 0x10;
		OUT_MSGDAT->dat[4] = 0x00;
		OUT_MSGDAT->dat[5] = TCH_SWITCH;
		OUT_MSGDAT->dat[6] = 0x07;
		OUT_MSGDAT->dat[7] = 0xc0;

		Rt_fncrq = 0x4a;
	}
	m_excreq( (WORD*)&SYS_WORK->tsk_id );
	rt_tm_start( TR3021ON );

	return (0);
}


U1 rt_define_info_req(void)
{/* define information request is single information element */
	SYS_WORK->tsk_id = TASKL2;
	OUT_DLDEVT->evt_cod = EDLDTRQ;
	if ( L3_dl[FACCH_ST] == ST_SET )
		OUT_DLDEVT->dl_typ = FACCH;
	else
		OUT_DLDEVT->dl_typ = SACCH;
	OUT_DLDEVT->dl_id = SLOT1;
	OUT_DLDEVT->dl_sou = 0;
	OUT_DLDEVT->msg_adr = (RT_MSGDAT *)m_hntbuf();
	OUT_MSGDAT->next_po = 0;
	OUT_MSGDAT->len = 3;
	OUT_MSGDAT->dat[0] = RT_ID;
	OUT_MSGDAT->dat[1] = RTL2_DEFINE_INFORMATION_REQ;
	OUT_MSGDAT->dat[2] = (DEF_INFO_REQ | (IN_PRIEVT->add_dat & 0x0F));
				/* 	if IN_PRIEVT->add_dat =1,it shows the area information request present */
	m_excreq( (WORD*)&SYS_WORK->tsk_id );
	Rt_defrq = IN_PRIEVT->add_dat & BIT1;

	rt_tm_start( TR3022ON );

	return (0);
}


U1 rt_secst(void)
{
	if ( Rt_next == 0 )
		Rt_next = *(U2 *)Sys_psid;

 	if ((Sys_initdl1[9] == 0x04) && (Sys_initdl1[10] == 0x4A))
  	{
		while(1)
		{
			Rt_next += (U4)(rand_num * rand_num);
			if (Rt_next != 0)	break;
		}
	}

	*(U2 *)enc_set = (U2)Rt_next;

#ifdef SIMU_ON_PC
	SendUart2L1( SIMTSKDTW , ENCSET , 0 , enc_set , 2);	//Send to L1 together following
#endif
	enc_req();

	SYS_WORK->tsk_id = TASKL2;
	OUT_DLDEVT->evt_cod = EDLDTRQ;
	if ( L3_dl[FACCH_ST] == ST_SET )
		OUT_DLDEVT->dl_typ = FACCH;
	else
		OUT_DLDEVT->dl_typ = SACCH;
	OUT_DLDEVT->dl_id = SLOT1;
	OUT_DLDEVT->dl_sou = 0;
	OUT_DLDEVT->msg_adr = (RT_MSGDAT *)m_hntbuf();
	OUT_MSGDAT->next_po = 0;
	if ((Sys_initdl1[9] == 0x04) && (Sys_initdl1[10] == 0x4A))
	{
		OUT_MSGDAT->len = 6;
		OUT_MSGDAT->dat[0] = RT_ID;
		OUT_MSGDAT->dat[1] = RTL2_ENCRYPTION_KEY_SET;
		OUT_MSGDAT->dat[2] = ENCRYPTION_KEY_SET;
		OUT_MSGDAT->dat[3] = 2;
		move_up_b( (U1*)&OUT_MSGDAT->dat[4], enc_set, 2);
		m_excreq( (WORD*)&SYS_WORK->tsk_id );
	}
	else/* !UT80_003 */
	{
		OUT_MSGDAT->len = 9;
		OUT_MSGDAT->dat[0] = RT_ID;
		OUT_MSGDAT->dat[1] = RTL2_ENCRYPTION_KEY_SET;
		OUT_MSGDAT->dat[2] = ENCRYPTION;
		OUT_MSGDAT->dat[3] = 0x10;
		OUT_MSGDAT->dat[4] = 0x00;
		OUT_MSGDAT->dat[5] = ENCRYPTION_KEY_SET;
		OUT_MSGDAT->dat[6] = 2;
		move_up_b( (U1*)&OUT_MSGDAT->dat[7], enc_set, 2);
		m_excreq( (WORD*)&SYS_WORK->tsk_id );
	}
	return (0);
}


U1 rt_tch_req(void)
{
	if ( Rt_tim & TR304ON )
		return (0);

	if ( Tchrrcnt < TCHRRMAX )
	{
		if ( Rt_tim & TR305ON )
		{
			rt_tm_stop( TR305ON );


			SYS_WORK->tsk_id = TASKMNG;
			OUT_PRIEVT->evt_cod = ERT;
			OUT_PRIEVT->pri_cod = PSTCHACA;
			OUT_PRIEVT->add_dat = BIT2;
			m_excreq( (WORD*)&SYS_WORK->tsk_id );
			set_up_b((U1 *)SYS_WORK->out_evt,0,sizeof(SYS_WORK->out_evt));

		}

		SYS_WORK->tsk_id = TASKL2;
		OUT_DLDEVT->evt_cod = EDLUDTRQ;
		OUT_DLDEVT->dl_typ = FACCH;
		OUT_DLDEVT->dl_id = IN_PRIEVT->dmy3;
		OUT_DLDEVT->dl_sou = 0;
		OUT_DLDEVT->msg_adr = (RT_MSGDAT *)m_hntbuf();
		OUT_MSGDAT->len = 4;
		OUT_MSGDAT->dat[0] = RT_ID;
		OUT_MSGDAT->dat[2] = CAUSE;
		OUT_MSGDAT->dat[3] = IN_PRIEVT->add_dat;
		Tchcaus = IN_PRIEVT->add_dat;
		switch ( IN_PRIEVT->pri_cod )
		{
			case PRTCHCNG	:
				OUT_MSGDAT->dat[1] = RTL2_TCH_SWITCH_REQ;
				Rt_sts = ST_TCH_REQ;
				break;
			case PRTCHRCN	:
				OUT_MSGDAT->dat[1] = RTL2_TCH_SWITCH_RREQ;
				Rt_sts = ST_TCH_RREQ;
		}
		m_excreq( (WORD*)&SYS_WORK->tsk_id );
		Tchrrcnt++;
		rt_tm_start( TR301ON );
	}
	else
	{

		SYS_WORK->tsk_id = TASKMNG;
		OUT_PRIEVT->evt_cod = ERT;
		OUT_PRIEVT->pri_cod = PSTCHARE;
		OUT_PRIEVT->add_dat = 0;
		OUT_PRIEVT->dmy3 = IN_PRIEVT->dmy3;
		m_excreq( (WORD*)&SYS_WORK->tsk_id );
		Tchrrcnt = 0;
	}
	return (0);
}


U1 rt_disconnect_complete(void)
{
	rt_trstp();

	SYS_WORK->tsk_id = TASKL2;
	OUT_DLDEVT->evt_cod = EDLUDTRQ;
	OUT_DLDEVT->dl_typ = FACCH;
	OUT_DLDEVT->dl_id = IN_PRIEVT->dmy3;
	OUT_DLDEVT->dl_sou = 1;
	OUT_DLDEVT->msg_adr = (RT_MSGDAT *)m_hntbuf();
	OUT_MSGDAT->len = 14;
	OUT_MSGDAT->dat[0] = RT_ID;
	OUT_MSGDAT->dat[1] = RTL2_RADIO_CHANNEL_DISC_COMP;
	OUT_MSGDAT->dat[2] = CS_ID;
	move_up_b( (U1*)&OUT_MSGDAT->dat[3], SYS_CSID_P, 6 );
	OUT_MSGDAT->dat[9] = PS_ID;
	move_up_b((U1*) &OUT_MSGDAT->dat[10], Sys_psid, 4 );
	m_excreq( (WORD*)&SYS_WORK->tsk_id );
	Rtlchsts = 0xFF;
	//Rt_sts = ST_RAD_DIS;
	Rt_sts = (U1)rt_state_table->state;

	return (2);
}

U1 rt_disconnect_complete_ind(void)
{
	set_up_b((U1 *)SYS_WORK->out_evt, 0, sizeof(SYS_WORK->out_evt));

	SYS_WORK->tsk_id = TASKMNG;
	OUT_PRIEVT->evt_cod = ERT;
	OUT_PRIEVT->pri_cod = PSRCHEND;
	OUT_PRIEVT->dmy3 = IN_PRIEVT->dmy3;
	m_excreq( (WORD*)&SYS_WORK->tsk_id );
	return (0);
}


U1 rt_channel_disconnect_end(void)  /* zch for protocol simulator */
{
	set_up_b((U1 *)SYS_WORK->out_evt, 0, sizeof(SYS_WORK->out_evt));
	
	SYS_WORK->tsk_id = TASKMNG;
	OUT_PRIEVT->evt_cod = ERT;
	OUT_PRIEVT->pri_cod = PSRCHEND;
	OUT_PRIEVT->dmy3 = IN_PRIEVT->dmy3;
	m_excreq( (WORD*)&SYS_WORK->tsk_id );

	Rt_sts = (U1)rt_state_table->state;
	return (0);
}


U1 rt_option_req(void)
{
	SYS_WORK->tsk_id = TASKL2;
	OUT_DLDEVT->evt_cod = EDLDTRQ;
	if ( L3_dl[FACCH_ST] == ST_SET )
		OUT_DLDEVT->dl_typ = FACCH;
	else
		OUT_DLDEVT->dl_typ = SACCH;
	OUT_DLDEVT->dl_id = SLOT1;
	OUT_DLDEVT->dl_sou = 0;
	OUT_DLDEVT->msg_adr = (RT_MSGDAT *)m_hntbuf();
	OUT_MSGDAT->next_po = 0;
	OUT_DLDEVT->msg_adr->len = IN_PRIEVT->inf_len + 1;

	OUT_DLDEVT->msg_adr->dat[0] = RT_ID;
	move_up_b( (U1*)&OUT_DLDEVT->msg_adr->dat[1], IN_PRIEVT->inf_adr, IN_PRIEVT->inf_len );

	m_excreq( (WORD*)&SYS_WORK->tsk_id );

	if ( IN_PRIEVT->buf_adr )
	{
		m_frebuf( IN_PRIEVT->buf_adr );
	}

	return (0);
}


U1 rt_add_channel_req(void)
{
	if ( IN_PRIEVT->buf_adr )
	{
		m_frebuf( IN_PRIEVT->buf_adr );
	}

	return (0);
}


U1 rt_add_req_ind_rej(void)
{
	if ( IN_PRIEVT->buf_adr )
	{
		m_frebuf( IN_PRIEVT->buf_adr );
	}

	return (0);
}


U1 rt_add_channel_rreq(void)
{
	if ( IN_PRIEVT->buf_adr )
	{
		m_frebuf( IN_PRIEVT->buf_adr );
	}

	return (0);
}

#ifdef __cplusplus
extern "C"{
#endif

#undef __RTSCHR_C_


#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?