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

📄 mn80main.c

📁 phs 源代码 小灵通协议源代码 phs source code
💻 C
📖 第 1 页 / 共 2 页
字号:
void Mn_SReset(void)
{
	;
}



void Mn_InitData(void)
{
	U1	i, j;
#ifdef SIMU_ON_PC
	U1 buf[70];
#endif

	CallMode = 0xFF;
	CallChanel = 0xFF;
	CCHFact[PHS_PUBLIC_STS] = 0xFF;
	CCHInfo.Moni = 0xFF;
	CCHInfo.Main = 0xFF;
	SLEEP_STS[PHS_PUBLIC_STS] = ON;


	if (CallSetInfo != (M_MSB *)0)
	{
		m_frebuf((U1 *)CallSetInfo);
		CallSetInfo = (M_MSB *)0;
	}
	WReMonTimN |= BIT8;
	Mn_PCCHTimStp(PHS_PUBLIC_STS);
	WReMonTimN &= ~BIT8;


	InitData = 0;
	DLEstab = 0;
	CallSts = 0;
	InfSFlg = OFF;
	CCSetup = OFF;
	MesSnd = OFF;
	ResDspFlg = OFF;
	ReCall = OFF;
	IncFlg[PHS_PUBLIC_STS] = OFF;
	TCHCngRssi = OFF;
	TCHCngReg = OFF;
	HndOvrReg = OFF;
	TCHflg = OFF;
	RspnsRcv = OFF;

	Mn_state.public_mod = ST_PP_IDLE;
#ifdef SIMU_ON_PC
	SendUart2L1(SIMTSKDTW , MNSTATE , 0 , (BYTE*)&Mn_state.public_mod , 1);
#endif

	Mn_state.private_mod = ST_PP_IDLE;
	Mn_state.ps2ps_mod = ST_PP_IDLE;

	/* #J01-MNG04 */
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 2; j++)
		{
			if ( i == 1 )
			{
				move_up_b(Sys_bcch[i][j], SYSIFDF[j], 8);
			}
			else
			{
				set_up_b(Sys_bcch[i][j] , 0 , 8);
			}
		}
	}

#ifdef SIMU_ON_PC
	SendUart2L1( SIMTSKDTW , SYSBCCH ,  0 , (BYTE*)Sys_bcch , sizeof(Sys_bcch) );
#endif

	RetryCount = 0;
	move_up_b(TriedPBSid, CLSCSID, 6);
	ReaVal = 0;
	Source = 0x03;

	Call_Loc_flg = 0;
	Call_Loc_NG = 0;
	Call_Loc_Cnt = 0;
	Loc_LnkNG = 0;
	Short_chakko = 0;
	HakLoc_Cut = 0;

	A_short = OFF;
	DefInfo_Rcvf = OFF;
	RTFncRes_Rcvf = OFF;
	set_up_b(LLCInfo, 0, 17);
}



void Mn_InitL3L2(void)
{
	Mn_state.common_mod = ST_CMN_WAIT;

	set_up_b((BYTE*)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt));
	SYS_WORK->tsk_id = TASKL3;
	SYS_WORK->out_evt[0] = EINITL3;
	SYS_WORK->out_evt[1] = 0;

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


U1		Mn_InfChk(MN_INFTBL* pInfoTbl , U1 *msg_ptr, U1 length)
{
	U1	cnt;
	U1	i, n;

	for (cnt = 0, n = 0; n < length; )
	{
		for (i = 0; i < pInfoTbl->infCnt; i++)
		{
			if (pInfoTbl->id[i] == msg_ptr[n])
			{
				if (pInfoTbl->om[i] == MJ)
				{
					cnt++;
				}
				if (pInfoTbl->id[i] == ISODATA)
				{
					if (So_MsgChk(&msg_ptr[n], (U1)(length-8)) == NG_FF)
					{
						return NG_FF;
					}
				}
				break;
			}
		}
		if (pInfoTbl->infCnt == i)
		{
			return NG_FF;
		}
		if (pInfoTbl->mCnt == cnt)
		{
			return OK;
		}
		if (pInfoTbl->len[i] == 0)
		{
			n += (*(msg_ptr + n + 1) + 2);
		}
		else
		{
			n += pInfoTbl->len[i];
		}
	}
	return NG_FF;
}



U1 So_MsgChk(U1 *msg_ptr, U1 length)
{
	U1	cnt;
	U1	i, n;
	/* #dcm1-MNG31 ---------------------------------------------------------*/
	MN_INFTBL	*inf_ptr;

	if( MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[1] == USORDER )
	{
		inf_ptr = &DTINFTBL[phs_mode];
	}
	else
	{
		inf_ptr = &DTINFTBL[0];
	}
	/*----------------------------------------------------------------------*/

	for (cnt = 0, n = 0; n < length; )
	{
		for (i = 0; i < inf_ptr->infCnt; i++)
		{
			if (inf_ptr->id[i] == msg_ptr[n])
			{
				if (inf_ptr->om[i] == MJ)
					cnt++;
				break;
			}
		}
		if (inf_ptr->infCnt == i)
			return NG_FF;

		if (inf_ptr->mCnt == cnt)
			return OK;

		if (inf_ptr->len[i] == 0)
			n += (*(msg_ptr + n + 1) + 2);
		else
			n += inf_ptr->len[i];
	}
	return NG_FF;
}



void	err_dsp(M_MSB	*bufp)
{
#ifdef	EXT_IO
	BYTE	mnghis[6];
	mnghis[0] = phs_mode;
	mnghis[1] = Mn_state.common_mod;
	mnghis[2] = Mn_state.public_mod;
	mnghis[3] = Mn_state.private_mod;
	mnghis[4] = Mn_state.ps2ps_mod;
	mnghis[5] = ReaVal;
	HisOut(6 , 0x4f , Mn_InEvtCod[0] , Mn_InEvtCod[1] , mnghis);
#endif
	switch (Mn_InEvtCod[0])
	{
	case PM_MNG:								/* UAP(PM)				*/
		if( MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[1] == UCCOMDAT && bufp->nxt )
		{
			m_frebuf(bufp->nxt);
		}
	break;
	case ERT:									/* RT 					*/
		switch(Mn_InEvtCod[1])
		{
		case PSLCHASG :
		case PSLCHREF :
		case PSSYNC   :
		case PSLCHNG  :
		case PSDWBRMV :
		case PSSYNNG  :
			goto  no_buf;
		break;
		default:
			if( MN_IN_EVT(L3_MN_EVT)->buf_adr)
		{
			m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr );
		}

		}
	break;
	case EMM:									/* MM 					*/
	case ECC:									/* CC 					*/
		if( MN_IN_EVT(L3_MN_EVT)->buf_adr)
		{
			m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr );
		}
	break;
	case EDLDTDSP:		/*L2 ->L3(L3C)->MNG , Is it only under PS2PS sts ,MN can received this EVENT from L2 ? */
	case EDLUDTDSP:
		if( MN_IN_EVT(L2_MN_EVT)->msg_adr )
		{
/* #J80-02 -> */
			if( ((M_MSB_L2*)MN_IN_EVT(L2_MN_EVT)->msg_adr)->next_po )
			{
				m_frebuf( ((M_MSB_L2*)MN_IN_EVT(L2_MN_EVT)->msg_adr)->next_po );
			}
/* #J80-02 <- */
			m_frebuf( MN_IN_EVT(L2_MN_EVT)->msg_adr );
		}
	break;
	case EL1_STAT:
	break;
	}

no_buf :
	if(Mn_InEvtCod[0] != PM_MNG)
	{
		return;
	}
	if (bufp == (M_MSB *)0)
	{
		SYS_WORK->msg_adr = 	(M_MSB*)m_hntbuf();
	}
	else
	{
		SYS_WORK->msg_adr = bufp;
	}

	SYS_WORK->msg_adr->msg[0] = NONE;
	SYS_WORK->msg_adr->msg[1] = MERROR;
	SYS_WORK->msg_adr->msg[2] = 4;
	SYS_WORK->msg_adr->msg[3] = IREASON;
	SYS_WORK->msg_adr->msg[4] = 2;
	SYS_WORK->msg_adr->msg[5] = 0x03;
	SYS_WORK->msg_adr->msg[6] = ReaVal;

	SYS_WORK->msg_adr->msg[2] += 2;
	SYS_WORK->msg_adr->msg[4] += 2;

	SYS_WORK->msg_adr->msg[7] = SYS_WORK->msg_adr->msg[1];
	SYS_WORK->msg_adr->msg[8] = SYS_WORK->msg_adr->msg[2];

	exec_uap(SYS_WORK->msg_adr);
}



void	exec_uap(M_MSB *evt)
{
	switch (evt->msg[1])
	{
	case MCCHMIS	:
		A_short = OFF;
	case MFREETCH	:
	case MERROR		:
		ReaVal = 0;
		Source = 0x03;
	}

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

	SYS_WORK->tsk_id = TASKPM;
	MN_OUT_EVT(PM_MN_EVT)->evt_cod = MNG_PM;

	if (evt->msg[0] == NONE)
	{									/* #dcm1-MNG01				*/
		evt->msg[0] = 0x00;
	}

	MN_OUT_EVT(PM_MN_EVT)->msg_adr = evt;

	if (((evt->msg[1] >= MCALLSET) && (evt->msg[1] <= MFADLCOM)) ||
		 (evt->msg[1] == MCONNACK) || (evt->msg[1] == MTCHDAT )  ||
		 (evt->msg[1] == MDATCNF ) || (evt->msg[1] == MCCOPMES)  )
	{
		if(ECC == Mn_InEvtCod[0])
		{
			MN_OUT_EVT(PM_MN_EVT)->add_dat =  MN_IN_EVT(L3_MN_EVT)->dmy3;
		}
		else
		{
			MN_OUT_EVT(PM_MN_EVT)->add_dat = CallSts-1;

		}
	}

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


void	Mn_settim(U2 tmid)
{
	SYS_WORK->tim_inf.t_evt[0] = phs_mode;

	switch ( tmid )
	{
	case TIWMONIT1 :
		SYS_WORK->tim_inf.t_kind = T1S;
		SYS_WORK->tim_inf.t_cnt = 250;
		WReMonTim = BIT1;
		WReMonTimN = BIT1;
	break;
	case TICCHMON :
		SYS_WORK->tim_inf.t_kind = T20MS;
		SYS_WORK->tim_inf.t_cnt = Sys_montim[0] * Sys_hodat[1];	//stored in flash ROM
	break;
	case TICSYNC :
		SYS_WORK->tim_inf.t_kind = T100MS;
		if(Sys_prinfo[1])
		{
			SYS_WORK->tim_inf.t_cnt =
				(WORD)((WORD)Sys_csynctim[PHS_PUBLIC_STS]
						* NSUB(PHS_PUBLIC_STS) * NGROUP(PHS_PUBLIC_STS) /* #139 */
							* (WORD)Sys_prinfo[1] * 5 / 100)+1;
		}
		else
		{
			SYS_WORK->tim_inf.t_cnt =
				 (WORD)((WORD)Sys_csynctim[PHS_PUBLIC_STS]
				 			* 3 * 4 * SON * 5 /100)+1;	/* #139		*/
		}

        //Debug By Chenwei

    //    ProtocolTrace(2,">>>Start timer cnt =%d\n",SYS_WORK->tim_inf.t_cnt);
    	HisOut(0,0xd6,0x01,0,0);
		CsyncTim[phs_mode] = ON;
	break;
	case TIACCALL :
		SYS_WORK->tim_inf.t_kind = T100MS;
		SYS_WORK->tim_inf.t_cnt =
			(WORD)(NSUB(PHS_PUBLIC_STS)*NGROUP(PHS_PUBLIC_STS)*ACCYCINT(PHS_PUBLIC_STS));
		AccTimCall[phs_mode] = ON;
	break;
	case TIACLOC :
		SYS_WORK->tim_inf.t_kind = T100MS;
		SYS_WORK->tim_inf.t_cnt =
			(WORD)(NSUB(PHS_PUBLIC_STS)*NGROUP(PHS_PUBLIC_STS)*ACCYCINT(PHS_PUBLIC_STS));
		AccTimLoc[phs_mode] = ON;
	break;
	case TITC309P :
		SYS_WORK->tim_inf.t_kind = T1S;
		SYS_WORK->tim_inf.t_cnt = TOTC309P;
		TC309PTim = ON;
	break;
	case TITCHFRE :
		SYS_WORK->tim_inf.t_kind = T100MS;
		SYS_WORK->tim_inf.t_cnt = TORCHDIS;
		RchDis = ON;
	break;
	case TIHANDOV :
		SYS_WORK->tim_inf.t_kind = T1S;
		SYS_WORK->tim_inf.t_cnt = Sys_hodat[2];
		HoTim = ON;
	break;

	case TICCHEST :
		SYS_WORK->tim_inf.t_kind = T100MS;

#ifdef SIMU_ON_PC   /* zch for protocol simulator */
		SYS_WORK->tim_inf.t_cnt = Sys_cchtim[phs_mode]+50;
#else
		SYS_WORK->tim_inf.t_cnt = Sys_cchtim[phs_mode];
#endif
		CCHEstTim[phs_mode] = ON;
	break;

	case TICCHSHT :
		SYS_WORK->tim_inf.t_kind = T1S;
		SYS_WORK->tim_inf.t_cnt = TOCCHSHT;
		CCHShortTim[phs_mode] = ON;
	break;

	case TIRETRY :
		SYS_WORK->tim_inf.t_kind = T20MS;
		SYS_WORK->tim_inf.t_cnt = TORETRY;
		RetryTim = ON;
		SYS_WORK->tim_inf.t_evt[0] = PHS_PUBLIC_STS;
	break;

	case TIPAGE:
		SYS_WORK->tim_inf.t_kind = T100MS;
		SYS_WORK->tim_inf.t_cnt = 100;
		ti_page = ON;
	break;

	}

	SYS_WORK->tim_inf.p_num = TASKMNG;
	SYS_WORK->tim_inf.tim_id = tmid;
	m_settim((U2*)&SYS_WORK->tim_inf);
}


void PubAreaNoMake(BYTE *src,BYTE *dst,BYTE len)
{
	U1	bit_sz,
		byte_sz;
	U1	Np[16] = {0,
			  4,6,8,10,12,14,16,17,18,19,20,21,22,23,24};
	set_up_b(dst, 0, 3);

	bit_sz = Np[len];
	byte_sz = (Np[len] + 7) / 8;

	switch ( byte_sz )
	{
	case 3 :

		*(dst + 2) = (*(src + 3) << 1) + (*(src + 4) >> 7);
		*(dst + 2) &= CSId_msk[bit_sz % 8];
		bit_sz -= (bit_sz % 8);
		/* No Break */
	case 2 :

		*(dst + 1) = (*(src + 2) << 1) + (*(src + 3) >> 7);
		*(dst + 1) &= CSId_msk[bit_sz % 8];
		bit_sz -= (bit_sz % 8);
			/* No Break */
	case 1 :

		*dst = (*(src + 1) << 1) + (*(src + 2) >> 7);
		*dst &= CSId_msk[bit_sz % 8];
	break;
	}
}


BYTE PubNgAreaChk(BYTE *src)
{
	U1 loop;
	U1 Area[3];

	for(loop = 0;loop < NG_AREA_NUM; loop ++)
	{
		if(!(PubNgArea[loop][0] & 0xf0))
			return(1);
		PubAreaNoMake(src,Area,(BYTE)(PubNgArea[loop][0] & 0x0f));
		if(PubNgArea[loop][1] == ((*src << 1) + (*(src + 1) >> 7) ))
		{
			if(!cmp_up_b(Area,&PubNgArea[loop][2],3))
				return(0);
		}
	}
	return(1);
}


void	PubNgAreaSet(BYTE *src,BYTE len)
{
	U1	loop;
	U1	Area[4];

	Area[0] = (*src << 1) + (*(src + 1) >> 7);
	PubAreaNoMake(src,&Area[1],len);
	for(loop = 0;loop < NG_AREA_NUM; loop ++)
	{
		if(!(PubNgArea[loop][0] & 0xf0))
		{
			move_up_b(&PubNgArea[loop][1],Area,4);
			PubNgArea[loop][0] = 0x10 + (len & 0x0f);
			return;
		}
		else
		{
			PubNgArea[loop][0] += 0x10;
			if(PubNgArea[loop][0] >= 0x40)
			{
				move_up_b(&PubNgArea[loop][1],Area,4);
				PubNgArea[loop][0] = 0x10 + (len & 0x0f);
			}
		}
	}
}


void	PubNgAreaClr(void)
{
	U1	loop;

	for(loop = 0;loop < NG_AREA_NUM; loop ++)
	{
		PubNgArea[loop][0] = 0;
		PubNgArea[loop][1] = 0;
	}
}


void Mn_HakDLRrcv(void)		//Direction : L3C -> MNG
{
	U1* p;

	if(Mn_InEvtCod[1] == 1)		//Data link est req failed
	{
		Mn_PLinkCut();
		Mn_DLDsp();
		p = Mn_GetSpecState(phs_mode);
		if(NULL == p)
			return ;
		*p = 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 &= ~((U1)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();

}


U1	Mn_Rtdeffunc(void)
{
	if(ERT == Mn_InEvtCod[0])
	{
		if(PSDEFING == Mn_InEvtCod[1])
		{
			if(ExLCH & 0x02)	//RT Function request
			{
				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();
			}
			DefInfo_Rcvf = ON;
			return(1);
		}

		if(PSRTFUNG == Mn_InEvtCod[1])
		{
			Mn_PCallRTFncRes();
			RTFncRes_Rcvf = ON;
			return(1);
		}
	}
	else
	{
		if( EMM == Mn_InEvtCod[0] &&
				MMMN_FUNCTION_REQ_FAIL == Mn_InEvtCod[1])
		{
			Mn_PCallMMFncRes();
			return(1);
		}
	}
	return(0);
}


/*
	Function : Get the corresponding Mn State based by input parameter

	Author		Date
	Chenxl		2003/8/10

*/
U1*	Mn_GetSpecState(U1 mod)
{
	switch(mod)
	{
	case PHS_PUBLIC_STS:
		return (U1*)&Mn_state.public_mod;
	break;
	case PHS_PRIVATE_STS:
		return (U1*)&Mn_state.private_mod;
	break;
	case PHS_PS2PS_STS:
		return (U1*)&Mn_state.ps2ps_mod;
	break;
	case PHS_COMMON_STS:
		return (U1*)&Mn_state.common_mod;
	break;
	}

	return NULL;
}

//Simulator of L1
#ifdef SIMU_ON_PC

void ph_ini_req(void)
{
	SendUart2L1(SIMTSKL1 , PHINIREQ , 0xFF, NULL , 0);
}
/*
void cch_m_req(BYTE kind, BYTE freq, BYTE thresh, BYTE gain, BYTE flg)
{
	BYTE buf[6];

	buf[0] = kind;
	buf[1] = freq;
	buf[2] = thresh;
	buf[3] = gain;
	buf[4] = flg;

	SendUart2L1(SIMTSKL1 , CCHMREQ , buf , 5);
}
*/

void cch_m_req2(BYTE kind, BYTE freq, BYTE thresh, BYTE gain, BYTE flg)
{
	BYTE buf[6];

	buf[0] = kind;
	buf[1] = freq;
	buf[2] = thresh;
	buf[3] = gain;
	buf[4] = flg;

	SendUart2L1(SIMTSKL1 , CCHMREQ2 , 0xFF , buf , 5);
}
/*
void cch_m_stp(void)
{
	SendUart2L1(SIMTSKL1 , CCHMSTP , NULL , 0);
}
*/
void cch_m_stp2(void)
{
	SendUart2L1(SIMTSKL1 , CCHMSTP2 , 0xFF ,  NULL , 0);
}
/*
void slp_t_req( WORD xtal_cnt, BYTE id )
{
	BYTE buf[4];

	buf[0] = (BYTE)xtal_cnt;
	buf[1] = (BYTE)(xtal_cnt>>8);
	buf[2] = id;

	SendUart2L1(SIMTSKL1 , SLPTREQ , buf , 3);
}
*/
void	cch_est_req(BYTE freq, BYTE *cs_id, BYTE gain)
{
	BYTE buf[9];
	BYTE csidLen;

	csidLen =6;// strlen(cs_id);
	buf[0] = freq;
	move_up_b( (BYTE*)&buf[1] , cs_id , csidLen );
//	buf[1+csidLen] = '\0';
	buf[1+csidLen] = gain;

	SendUart2L1( SIMTSKL1 , CCHESTREQ , 0xff,buf , (BYTE)(2+csidLen));

}

void slp_c_req( BYTE cmd )
{
	SendUart2L1(SIMTSKL1 , SLPCREQ , 0xFF , &cmd , 1);
}

void own_pch_req( BYTE frame_cnt)
{
    							/* 奜晹棜楌						*/

		HisOut(0, 0x12, 0x0c, frame_cnt, 0);

	SendUart2L1(SIMTSKL1 , OWNPCH , 0xFF , &frame_cnt , 1);
}

void another_cch_get(void)
{
	SendUart2L1(SIMTSKL1 , ANOTHERCCH , 0xFF , NULL , 0);
}
/*
void RfInit(void)
{
	SendUart2L1(SIMTSKL1 , RFINIT , NULL , 0);
}
*/

#endif //End of SIMU_ON_PC
#ifdef __cplusplus
}
#endif

#endif

⌨️ 快捷键说明

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