mn80pub3.c

来自「phs 源代码 小灵通协议源代码 phs source code」· C语言 代码 · 共 1,553 行 · 第 1/3 页

C
1,553
字号
	SYS_WORK->msg_adr->msg[1] = MCALLRNG;
	SYS_WORK->msg_adr->msg[2] = (BYTE)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);

}



void Mn_PCCRspns(void)
{

	if (ReCall)
	{
		RspnsRcv = ON;
		TCHCngRssi = OFF;

		if (!(DLEstab & FACCH))
		{
			Mn_TCHEndDsp();
		}
	}
	else
	{
		if (!(DLEstab & FACCH))
		{
			SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
			SYS_WORK->msg_adr->msg[0] = NONE;
			SYS_WORK->msg_adr->msg[1] = MRESPCOM;
			SYS_WORK->msg_adr->msg[2] = (BYTE)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 (!(DLEstab & FACCH))
	{
		*Mn_GetSpecState(phs_mode) = ST_PP_COMMUNCATING;
#ifdef SIMU_ON_PC
		if(PHS_PUBLIC_STS == phs_mode)
			SendUart2L1( SIMTSKDTW , MNSTATE , 0 , (BYTE*)&Mn_state.public_mod , 1);
#endif
		RspnsRcv = OFF;
	}
#ifdef EXT_IO
	HisOut( 0x00, 0xee, 0x00, 0x01, &ResDspFlg );	// For arm debug
#endif
}



void Mn_PTchDLRrcv(void)	//L3C->MN
{
	if(Mn_InEvtCod[1] == 1)
	{
		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 (!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_PTchDLSrcv(void)		//	L3C->MN
{

	DLEstab |= MN_IN_EVT(L3C_MN_EVT)->add_dat[1];
	if (TC309PTim)
	{
		m_stptim(T1S , TITC309P , phs_mode);
		TC309PTim = OFF;
	}
	Mn_DLDsp();
}


void Mn_PIncomDLSet(void)	//L3C->MN
{

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

#ifdef SIMU_ON_PC
     ProtocolTrace(6,"Mn_PIncomDLSet!!! %d %d %d \n",DLEstab,MesSnd,DLEstab);
#endif

	if (MesSnd)
	{
		if (TC309PTim)
		{
			m_stptim(T1S, TITC309P , phs_mode);
			TC309PTim = OFF;
		}
	}
	else
	{

		if (DLEstab == (SACCH | FACCH))
		{

			RetryCount = 0;
			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 = PRINCRES;
			MN_OUT_EVT(L3_MN_EVT)->buf_adr = (U1*)CallSetInfo;
			MN_OUT_EVT(L3_MN_EVT)->inf_len = CallSetInfo->msg[2] - 2;
			CallSetInfo->msg[5] = IPSNO;
			MN_OUT_EVT(L3_MN_EVT)->inf_adr = (U1*)&CallSetInfo->msg[5];


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

			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_PIncomSet(void)	//CC->MN
{
	U1	SndCmp;
	U1	uap_len;

	RetryCount = 0;
	SndCmp = 0x00;

	if( MN_IN_EVT(L3_MN_EVT)->inf_adr[0] == J0_SNDCMP)
	{
		SndCmp |= BIT1;
	}

	if( pm_setup_set( (BYTE*)(MN_IN_EVT(L3_MN_EVT)->inf_adr+SndCmp) , (U2)(MN_IN_EVT(L3_MN_EVT)->inf_len-SndCmp)))
	{

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

		Mn_Tch1RelReq(0x58, 0);
		return;
	}


	MnBearerSet( MN_IN_EVT(L3_MN_EVT)->inf_adr+SndCmp ,
					(U2)(MN_IN_EVT(L3_MN_EVT)->inf_len-SndCmp),
					(BYTE*)bear_capa);

	switch ( bear_capa[1] & 0x1F )
	{
	case 0x00 :
		CallProt = 0x00;
	break;
	case 0x10 :
		CallProt = 0x01;
	break;
	case 0x08 :
		CallProt = 0x02;
	break;
	}


	SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
	SYS_WORK->msg_adr->msg[0] = NONE;
	SYS_WORK->msg_adr->msg[1] = MCALLSET;
	SYS_WORK->msg_adr->msg[3] = 0x00;
	uap_len = MN_IN_EVT(L3_MN_EVT)->inf_len - SndCmp;
	move_up_b((U1*)&SYS_WORK->msg_adr->msg[4] ,
				MN_IN_EVT(L3_MN_EVT)->inf_adr+SndCmp,
				uap_len);

	SYS_WORK->msg_adr->msg[2] = uap_len+1;
	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);

	CCSetup = ON;
	CallSts |= ( MN_IN_EVT(L3_MN_EVT)->dmy3 + 1);


	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 = PRCALREC;
	if (ExLCH  & 0x04)
	{
		MN_OUT_EVT(L3_MN_EVT)->add_dat = 1;
	}
	MN_OUT_EVT(L3_MN_EVT)->dmy3 = MN_IN_EVT(L3_MN_EVT)->dmy3;

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

	if (ExLCH  & 0x04)
	{
		return;
	}
	Mn_PCallDefInfo();
}



void Mn_PFuncReqNG(void)	//RT/MM -> MN
{
	M_MSB *pBuf;

	if(Mn_Rtdeffunc())
		return;
	ReaVal = 0xEF;

	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 = PRCALDIS;
	MN_OUT_EVT(L3_MN_EVT)->buf_adr = m_hntbuf();
	pBuf = (M_MSB*)MN_OUT_EVT(L3_MN_EVT)->buf_adr;
	pBuf->msg[0] = IREASON0;
	pBuf->msg[1] = 0x03;
	if ( Sys_ccsinf[19] == 0x01 )
	{
		pBuf->msg[2] = 0x40;
	}
	else
	{
		pBuf->msg[2] = 0x00;
	}

	pBuf->msg[3] = 0x85;
	pBuf->msg[4] = 0xEF;
	MN_OUT_EVT(L3_MN_EVT)->inf_len = 0x05;

	MN_OUT_EVT(L3_MN_EVT)->inf_adr = (U1*)pBuf->msg;

	MN_OUT_EVT(L3_MN_EVT)->dmy3 = CallSts - 1;

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

	*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

}



void Mn_PIncomAlertRq(void)	//PM->MN
{

	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 = PRCALCON;
	MN_OUT_EVT(L3_MN_EVT)->buf_adr = (U1*)MN_IN_EVT(PM_MN_EVT)->msg_adr;

	MN_OUT_EVT(L3_MN_EVT)->inf_len = MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[2];

	MN_OUT_EVT(L3_MN_EVT)->inf_adr = (U1*)&MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[3];
	m_excreq((WORD*)&SYS_WORK->tsk_id);
}



void Mn_PIncomRsRq(void)	//PM->MN
{

	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 = PRCALPRC;
	MN_OUT_EVT(L3_MN_EVT)->buf_adr = (U1*)MN_IN_EVT(PM_MN_EVT)->msg_adr;
	MN_OUT_EVT(L3_MN_EVT)->inf_len = MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[2];
	MN_OUT_EVT(L3_MN_EVT)->inf_adr =(U1*) &MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[3];
	MN_OUT_EVT(L3_MN_EVT)->dmy3 = (BYTE)MN_IN_EVT(PM_MN_EVT)->add_dat;

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


	Mn_BearCapaSet( MN_OUT_EVT(L3_MN_EVT)->inf_adr , (BYTE)MN_OUT_EVT(L3_MN_EVT)->inf_len);


	pm_low_layer_capability_set(LLCInfo);
}



void Mn_PIncomRsDp(void) // CC->MN
{
	ResDspFlg = ON;


	if(((L3_MN_EVT*)SYS_WORK->in_evt)->buf_adr)
		m_frebuf(((L3_MN_EVT*)SYS_WORK->in_evt)->buf_adr);

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

	exec_uap(SYS_WORK->msg_adr);
}


void Mn_PIncomDLF(void) // L3C->MN
{

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

		if (!(DLEstab & FACCH))
		{
			if (ScrKey)
			{
				ResDspFlg = OFF;

				Mn_SCHEstDsp();
				MesSnd = OFF;
				CCSetup = OFF;

				*Mn_GetSpecState(phs_mode) = ST_PP_COMMUNCATING;
	#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_PFacReq(void) //PM->MN
{
	M_MSB*	pMsg;

	pMsg = MN_IN_EVT(PM_MN_EVT)->msg_adr;


	if(!pMsg->msg[2])
	{
		ReaVal = PRIERR;
		err_dsp(pMsg);
		return;
	}


//	InfTblPtr = &CHKTBL[11];
	if (Mn_InfChk(&CHKTBL[11] , (U1*)&pMsg->msg[3], pMsg->msg[2]))
	{

		ReaVal = PRIERR;
		err_dsp(pMsg);
		return;
	}

	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 = PRFCLTY;
	MN_OUT_EVT(L3_MN_EVT)->buf_adr = (U1*)pMsg;
	MN_OUT_EVT(L3_MN_EVT)->inf_len = pMsg->msg[2];
	MN_OUT_EVT(L3_MN_EVT)->inf_adr = (U1*)&pMsg->msg[3];
	MN_OUT_EVT(L3_MN_EVT)->dmy3 = (U1)MN_IN_EVT(PM_MN_EVT)->add_dat;

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

}



void Mn_PFacDsp(void)		//CC->MN
{
	SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
	SYS_WORK->msg_adr->msg[0] = NONE;
	SYS_WORK->msg_adr->msg[1] = MFACILIT;
	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);
}

/*MN任务的拨号请求*/
void Mn_PDialReq(void)
{
	M_MSB	*pMsg;

	pMsg = MN_IN_EVT(PM_MN_EVT)->msg_adr;


	if(pMsg->msg[2] == 0)
	{
		ReaVal = PRIERR;
		err_dsp(pMsg);
		return;
	}


	if(Mn_InfChk(&CHKTBL[6] , (U1*)&pMsg->msg[3] , pMsg->msg[2]))
	{
		ReaVal = PRIERR;
		err_dsp(pMsg);
		return;
	}
	
	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 = PRCALDAL;
	MN_OUT_EVT(L3_MN_EVT)->buf_adr = (U1*)pMsg;
	MN_OUT_EVT(L3_MN_EVT)->inf_len = pMsg->msg[2];
	MN_OUT_EVT(L3_MN_EVT)->inf_adr = (U1*)&pMsg->msg[3];
	MN_OUT_EVT(L3_MN_EVT)->dmy3 = (U1)MN_IN_EVT(PM_MN_EVT)->add_dat;
	/*发送消息到CC任务中*/
	m_excreq((WORD*)&SYS_WORK->tsk_id);

}


void Mn_PCCValDsp(void)		//CC->MN
{
	SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
	SYS_WORK->msg_adr->msg[0] = NONE;
	SYS_WORK->msg_adr->msg[1] = MTCHDAT;
	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_PRTOptReq(void)		//It is not called from other module ?
{

	if( !MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[2])
	{
		ReaVal = PRIERR;
		err_dsp( MN_IN_EVT(PM_MN_EVT)->msg_adr);
		return;
	}


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

⌨️ 快捷键说明

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