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 + -
显示快捷键?