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

📄 mn80pub3.c

📁 phs 源代码 小灵通协议源代码 phs source code
💻 C
📖 第 1 页 / 共 3 页
字号:
#ifndef PM_ONPC

#ifdef __cplusplus
extern "C"{
#endif

#include	"phs_def.h"

#include	"mn80.h"
#include	"mn80ext.h"

#include   "stephi.h"


void Mn_PCallDLSet(void)
{
	RetryCount = 0;

	DLEstab |= (U1)MN_IN_EVT(L3C_MN_EVT)->add_dat[1];
#ifdef SIMU_ON_PC
    ProtocolTrace(2,"!!!PCall set %d %d %d\n",DLEstab,MesSnd,(U1)MN_IN_EVT(L3C_MN_EVT)->add_dat[1]);
 #endif
	if (MesSnd)
	{
		if (TC309PTim)
		{
			m_stptim(T1S, TITC309P, phs_mode);
			TC309PTim = OFF;
		}
	}
	else
	{

		if (DLEstab == (SACCH | FACCH))
		{
			set_up_b( (BYTE*)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt) );
			SYS_WORK->tsk_id = TASKCC;
			MN_OUT_EVT(L3_MN_EVT)->evt_cod = ECC;
			MN_OUT_EVT(L3_MN_EVT)->pri_cod = PRCALSET;
			MN_OUT_EVT(L3_MN_EVT)->buf_adr = (U1*)CallSetInfo;
			MN_OUT_EVT(L3_MN_EVT)->inf_len = CallSetInfo->msg[2] - 1;
			MN_OUT_EVT(L3_MN_EVT)->inf_adr = (U1*)&CallSetInfo->msg[4];
			MN_OUT_EVT(L3_MN_EVT)->add_dat = CallProt;
			MN_OUT_EVT(L3_MN_EVT)->dmy3 = CallSts-1;

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

			CCSetup = MesSnd = ON;
			CallSetInfo = (M_MSB *)0;
			ScrKey = OFF;
			Certify = OFF;


			if (!cmp_up_b(SYS_AREA_P, CLSAREA, 7))
			{
				move_up_b(SYS_AREA_P, &Sys_pbsid[7], 7);
			}
			move_up_b(Sys_rtfunc, RTFUNCDEF, sizeof(RTFUNCDEF));
			move_up_b(Sys_mmfunc, MMFUNCDEF, sizeof(MMFUNCDEF));
		}
	}
}



void Mn_PCallSetAcp(void)		//CC -> MN
{
	RetryCount = 0;
	if (!ReCall)
	{


		SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
		SYS_WORK->msg_adr->msg[0] = NONE;
		SYS_WORK->msg_adr->msg[1] = MCALLREC;
		SYS_WORK->msg_adr->msg[2] = (U1)MN_IN_EVT(L3_MN_EVT)->inf_len;
		move_up_b((U1*)&SYS_WORK->msg_adr->msg[3] ,
					MN_IN_EVT(L3_MN_EVT)->inf_adr ,
					MN_IN_EVT(L3_MN_EVT)->inf_len);
		exec_uap(SYS_WORK->msg_adr);
	}

	if( MN_IN_EVT(L3_MN_EVT)->buf_adr )
	{
		m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr );
	}
	if(*Mn_GetSpecState(phs_mode) != ST_PP_TCH_EST_O)
	{
		return;
	}

	if (ExLCH  & 0x04)
	{

		set_up_b( (BYTE*)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt));

		SYS_WORK->tsk_id = TASKRT;

		MN_OUT_EVT(L3_MN_EVT)->evt_cod = ERT;

		MN_OUT_EVT(L3_MN_EVT)->pri_cod = PRDEFINF;

		MN_OUT_EVT(L3_MN_EVT)->add_dat = 0x01;


		m_excreq((WORD*)&SYS_WORK->tsk_id);
		DefInfo_Rcvf = OFF;
		return;
	}
	Mn_PCallDefInfo();
}


void Mn_PCallDefInfo(void)
{
#ifdef SIMU_ON_PC
     ProtocolTrace(6,"!!!mn received rt definition response %d %d %d \n",DefInfo_Rcvf,ExLCH,ExLCH);
#endif

	if(DefInfo_Rcvf == ON)
		return;


	if(Mn_InEvtCod[0] == ERT && Mn_InEvtCod[1] == PSDEFINF)
	{
		if( MN_IN_EVT(L3_MN_EVT)->inf_len == 8 )
		{
/*Marked by Meteor*/
#if 0
			/*MN_IINFP [1]Selection Level[2]Hold Level[3][4]handover[5]TCH Swich*/
			/* We need to lower the mal-network parameters*/
			if((Sys_initdl1[30]>0)&&(MN_IINFP[2]>Sys_initdl1[30])) /*16dBu J21 Sensitivity. If hold level>16dbu, then lower all the levels*/
			{
				tmp=MN_IINFP[2] - Sys_initdl1[30]; /* TX_BIAS current debug usage*/
				MN_IINFP[1] =MN_IINFP[1]-tmp;
				MN_IINFP[2] =MN_IINFP[2]-tmp;
				MN_IINFP[3] =MN_IINFP[3]-tmp;
				MN_IINFP[4] =MN_IINFP[4]-tmp;
				MN_IINFP[5] =MN_IINFP[5]-tmp;
			}
#endif
/*Marked by Meteor End*/

			if( MN_IN_EVT(L3_MN_EVT)->inf_adr[1] <= MONITOR_LEAST )
				MN_IN_EVT(L3_MN_EVT)->inf_adr[1] = MONITOR_LEAST;

			if( MN_IN_EVT(L3_MN_EVT)->inf_adr[2] <= MONITOR_LEAST )
				MN_IN_EVT(L3_MN_EVT)->inf_adr[2] = MONITOR_LEAST;

			Sys_ccsinf[12] = MN_IN_EVT(L3_MN_EVT)->inf_adr[1];
			move_up_b(&Sys_ccsinf[13] , &MN_IN_EVT(L3_MN_EVT)->inf_adr[2] , 6);
#ifdef SIMU_ON_PC
			SendUart2L1(SIMTSKDTW , SYSCCSINF , 12 , &Sys_ccsinf[12] , 7);
#endif

			Sys_thresh[0] = MN_IN_EVT(L3_MN_EVT)->inf_adr[1];
			Sys_thresh[1] = MN_IN_EVT(L3_MN_EVT)->inf_adr[2];
#ifdef SIMU_ON_PC
			SendUart2L1( SIMTSKDTW , SYSTHRESH , 0, Sys_thresh , 2);
#endif

			Sys_pbsid[7] = MN_IN_EVT(L3_MN_EVT)->inf_adr[1];
			move_up_b( &Sys_pbsid[8] , &MN_IN_EVT(L3_MN_EVT)->inf_adr[2] , 6);  //zch0221
			Areainfbak[0] = MN_IN_EVT(L3_MN_EVT)->inf_adr[1];
			Areainfbak[1] = MN_IN_EVT(L3_MN_EVT)->inf_adr[2];
			Areainfbak[2] = MN_IN_EVT(L3_MN_EVT)->inf_adr[3];
			Areainfbak[3] = MN_IN_EVT(L3_MN_EVT)->inf_adr[4];

#ifdef	EXT_IO
			HisOut(5,0x44,0x55 , Sys_initdl1[30] , &Sys_pbsid[7]); /* Current Area information*/
#endif
		}

		if( MN_IN_EVT(L3_MN_EVT)->buf_adr )
			m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr );
	}

	if (ExLCH & 0x02)
	{

		set_up_b( (BYTE*)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt));
		SYS_WORK->tsk_id = TASKRT;
		MN_OUT_EVT(L3_MN_EVT)->evt_cod = ERT;
		MN_OUT_EVT(L3_MN_EVT)->pri_cod = PRRTFUNC;


		m_excreq((WORD*)&SYS_WORK->tsk_id);
		RTFncRes_Rcvf = OFF;
	}
	else
	{
		Mn_PCallRTFncRes();
	}
}



void Mn_PCallRTFncRes(void)
{

#ifdef SIMU_ON_PC
     ProtocolTrace(6,"!!!mn received rt function response %d %d %d \n",RTFncRes_Rcvf,CallMode,ExLCH);
#endif
	if(RTFncRes_Rcvf == ON)
		return;

	if(Mn_InEvtCod[0] == ERT && Mn_InEvtCod[1] == PSRTFUNC)
	{

		Mn_RTFncSet();

		if( MN_IN_EVT(L3_MN_EVT)->buf_adr )
			m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr );
	}

	if(CallMode != CALLMODE_LOCREG)
	{
		set_up_b( (BYTE*)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt));
		SYS_WORK->tsk_id = TASKRT;
		MN_OUT_EVT(L3_MN_EVT)->evt_cod = ERT;
		MN_OUT_EVT(L3_MN_EVT)->pri_cod = PRSECSET;
		m_excreq((WORD*)&SYS_WORK->tsk_id);
		ScrKey = ON;
	}


	if (ExLCH & 0x01)
	{
		set_up_b((BYTE*)SYS_WORK->out_evt , 0 ,sizeof(SYS_WORK->out_evt));
		SYS_WORK->tsk_id = TASKMM;
		MN_OUT_EVT(L3_MN_EVT)->evt_cod = EMM;
		MN_OUT_EVT(L3_MN_EVT)->pri_cod = MNMM_FUNCTION_REQ;
		if ((Sys_initdl1[9] == 0x04) && (Sys_initdl1[10] == 0x4A))
		{
			MN_OUT_EVT(L3_MN_EVT)->add_dat = BIT1;
		}
		else
		{
			MN_OUT_EVT(L3_MN_EVT)->add_dat = 0x03;;
		}

		m_excreq((WORD*)&SYS_WORK->tsk_id);
	}
	else
	{

		Mn_PCallMMFncRes();
	}
}


void Mn_PCallMMFncRes(void)
{
	U1	n, m;


	if(Mn_InEvtCod[0] == EMM && Mn_InEvtCod[1] == MMMN_FUNCTION_RES)
	{


		for(n=0 ; n<MN_IN_EVT(L3_MN_EVT)->inf_len ; )
		{
			if( MN_IN_EVT(L3_MN_EVT)->inf_adr[n] & 0x80 ) //single octet
			{
				Sys_mmfunc[1] = MN_IN_EVT(L3_MN_EVT)->inf_adr[n] & 0x01;
				n++;
			}
			else
			{
				m = 0;
				switch( MN_IN_EVT(L3_MN_EVT)->inf_adr[n] )
				{
				case IANSTYP:
					Sys_mmfunc[0] = MN_IN_EVT(L3_MN_EVT)->inf_adr[n+1];
					m = 2;
				break;
				case IPAGARA:
					Sys_mmfunc[2] = MN_IN_EVT(L3_MN_EVT)->inf_adr[n+1];
					m = 2;
				break;
				default:
				break;
				}
				n += m;
			}
		}

		if( MN_IN_EVT(L3_MN_EVT)->buf_adr )
			m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr );

	}


	switch (CallMode)
	{
	case CALLMODE_OUT:

		if (Sys_mmfunc[0] == 0x00
				|| ReCall == ON)
		{
			Certify = ON;
		}
	break;
	case CALLMODE_IN:

		if (Sys_mmfunc[0] == 0x00) 					//No Authentication type
		{
													/* #dcm1-MNG07,#J01-MN26*/

			SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
			SYS_WORK->msg_adr->msg[0] = NONE;
			SYS_WORK->msg_adr->msg[1] = MCALLRNG;
			SYS_WORK->msg_adr->msg[2] = 0x00;
			exec_uap(SYS_WORK->msg_adr);
			*Mn_GetSpecState(phs_mode) = ST_PP_CALL_T;
#ifdef SIMU_ON_PC
			if(PHS_PUBLIC_STS == phs_mode)
				SendUart2L1( SIMTSKDTW , MNSTATE , 0 ,(BYTE*)&Mn_state.public_mod , 1);
#endif

		}
	break;

	case CALLMODE_LOCREG:
	default:
	break;
	}
}


void Mn_PCallMMCtf(void)
{
	U1	n;
	U1 Encryption_Algorithm_Select;					/*Encryption Algorithm Select Flag */

	Encryption_Algorithm_Select = Sys_initdl1[37];	/*Get Encryption Algorithm Select Flag from EEPROM*/
	
	n = MN_IN_EVT(L3_MN_EVT)->inf_adr[3];
	if (n == 8)
	{

		if(Encryption_Algorithm_Select)
		{
			//lingli modify for can't get the old authentic for ARM platform
			//Mm_FEALNenc(Sys_pin, &MN_IINFP[4], AnsRslt);
			Mm_STEPHIenc(Sys_pin , &MN_IN_EVT(L3_MN_EVT)->inf_adr[4] , AnsRslt);
		}
		else										/* FEAL32 */
		{
			//Add by Qian Aidong for supporting FEAL32 Encryption Algorithm. 2001-11-26
			Mm_FEAL32enc(Sys_pin , &MN_IN_EVT(L3_MN_EVT)->inf_adr[4] , AnsRslt);
		}
	}


	set_up_b((BYTE*)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt));
	SYS_WORK->tsk_id = TASKMM;
	MN_OUT_EVT(L3_MN_EVT)->evt_cod = EMM;

	MN_OUT_EVT(L3_MN_EVT)->pri_cod = 0x82;// MNMM_AUTHENICATION_REP;
	MN_OUT_EVT(L3_MN_EVT)->buf_adr = ((L3_MN_EVT*)SYS_WORK->in_evt)->buf_adr;

	MN_OUT_EVT(L3_MN_EVT)->inf_len = n+2;
	MN_OUT_EVT(L3_MN_EVT)->inf_adr = MN_IN_EVT(L3_MN_EVT)->inf_adr;
	MN_OUT_EVT(L3_MN_EVT)->inf_adr[0] = IANSRSLT;
	MN_OUT_EVT(L3_MN_EVT)->inf_adr[1] = n;
	move_up_b( &MN_OUT_EVT(L3_MN_EVT)->inf_adr[2] , AnsRslt , n );


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


	switch (CallMode)
	{
	case CALLMODE_OUT:
		Certify = ON;
	break;

	case CALLMODE_IN:

		SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
		SYS_WORK->msg_adr->msg[0] = NONE;
		SYS_WORK->msg_adr->msg[1] = MCALLRNG;
		SYS_WORK->msg_adr->msg[2] = 0x00;
		exec_uap(SYS_WORK->msg_adr);
		*Mn_GetSpecState(phs_mode) = ST_PP_CALL_T;
#ifdef SIMU_ON_PC
		if(PHS_PUBLIC_STS == phs_mode)
			SendUart2L1( SIMTSKDTW , MNSTATE , 0 , (BYTE*)&Mn_state.public_mod , 1);
#endif

	break;

	case CALLMODE_LOCREG:
		Ich_end_monF = BIT4;
	default:
	break;
	}
}


void Mn_PProgress(void)
{
	if ((ReCall == 0) && (DLEstab & FACCH))
	{

		if( MN_IN_EVT(L3_MN_EVT)->buf_adr)
			m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr );

		return;
	}


	SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
	SYS_WORK->msg_adr->msg[0] = NONE;
	SYS_WORK->msg_adr->msg[1] = MDEVEL;
	SYS_WORK->msg_adr->msg[2] = (BYTE)((L3_MN_EVT*)SYS_WORK->in_evt)->inf_len;
	move_up_b((U1*)&SYS_WORK->msg_adr->msg[3] ,
				MN_IN_EVT(L3_MN_EVT)->inf_adr ,
				MN_IN_EVT(L3_MN_EVT)->inf_len);
	exec_uap(SYS_WORK->msg_adr);

	if( MN_IN_EVT(L3_MN_EVT)->buf_adr )
		m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr);

}



void Mn_PCallDLF(void)		//L3C -> MN
{
	if(Mn_InEvtCod[1] == 1)		//It must be 0 , which is set in L3c_dlfrrs .   'dl_typ'
	{
		Mn_PLinkCut();
		Mn_DLDsp();
		*Mn_GetSpecState(phs_mode) = ST_PP_DISC_COMM;
#ifdef SIMU_ON_PC
		if(PHS_PUBLIC_STS == phs_mode)
			SendUart2L1( SIMTSKDTW , MNSTATE ,  0 ,(BYTE*)&Mn_state.public_mod , 1);
#endif

		return;
	}

	DLEstab &= ~(MN_IN_EVT(L3C_MN_EVT)->add_dat[1]);

	if (Certify)
	{

		if (!(DLEstab & FACCH))
		{
			if (ScrKey)
			{
				if (ReCall)
				{
					if ( RspnsRcv == ON ) 			/* #ALG0903				*/
					{

						Mn_TCHEndDsp();
					}
				}
				else
				{
					Mn_SCHEstDsp();
				}
				MesSnd = OFF;
				CCSetup = OFF;
				if ( RspnsRcv == ON )
				{
       				*Mn_GetSpecState(phs_mode) = ST_PP_COMMUNCATING;
					RspnsRcv = OFF;
				}
				else
				{
					*Mn_GetSpecState(phs_mode) = ST_PP_TCH_ALR_O;
				}
#ifdef SIMU_ON_PC
				if(PHS_PUBLIC_STS == phs_mode)
					SendUart2L1( SIMTSKDTW , MNSTATE , 0 , (BYTE*)&Mn_state.public_mod , 1);
#endif
				return;
			}
		}
	}

	if (!TC309PTim)
	{
		Mn_settim(TITC309P);
	}

	set_up_b((BYTE*)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt));
	SYS_WORK->tsk_id = TASKL3;
	MN_OUT_EVT(L3C_MN_EVT)->evt_cod = EL3SETRQ;
	MN_OUT_EVT(L3C_MN_EVT)->add_dat[1] = MN_IN_EVT(L3C_MN_EVT)->add_dat[1];

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

	Mn_DLDsp();

}



void Mn_PCCCall(void)
{
	if ((ReCall == 0) && (DLEstab & FACCH))
	{
		if( MN_IN_EVT(L3_MN_EVT)->buf_adr )
			m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr );

		return;
	}
#ifdef EXT_IO
	HisOut( 0x00, 0xee, 0x00, 0x00, &ResDspFlg );	// For arm debug
#endif

	SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
	SYS_WORK->msg_adr->msg[0] = NONE;

⌨️ 快捷键说明

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