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

📄 mn80pub1.c

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

#ifdef __cplusplus
extern "C"{
#endif

#include	"phs_def.h"

#include	"mn80.h"
#include	"mn80ext.h"
//#include  "l1_fnc80.h"
//#include   "biosapi.h"

#define  csid_mirr(mirr_data)	((mirr_data&0x80)>>7)|((mirr_data&0x40)>>5)|((mirr_data&0x20)>>3)\
			|((mirr_data&0x10)>>1)|((mirr_data&0x08)<<1)|((mirr_data&0x04)<<3)\
			|((mirr_data&0x02)<<5)|((mirr_data&0x01)<<7)	//Which is defined in l1_fnc80.h

void Mn_PCCHMonitor2(void)
{
	U1 cc;
	U2	i;
    int n;
	CCH_MON_INF	moni;
#ifdef	EXT_IO
	BYTE	mnghis[6];
#endif
/*
#ifdef SIMU_ON_PC

	SendUart2L1( SIMTSKDTR , CCHMCNT , 0 , 0);
	//Here wait the response data from L1 of CchMonCount
	CchMonCount = ? ;

	SendUart2L1( SIMTSKDTR , CLIST , 0 , 0);
	//Here wait the response data from L1 of CList struct
	move_up_b( (U1*)&CList , ? , sizeof(CList) );

#endif
*/
	for(i = 0; i < CchMonCount; i++)
	{
		move_up_b( (U1*)&moni, (U1*)&CList.CsInf[i], sizeof(CCH_MON_INF) );
		for(cc = 0; cc < 6; cc++)
			moni.Csid[cc] = csid_mirr(moni.Csid[cc]);
		moni.Csid[5] = (moni.Csid[5] >> 6) & 0x03;

		if (cmp_up_b(PBSid, CLSCSID, 6))
		{
			if (!cmp_up_b(PBSid,(U1*) moni.Csid, 5)
				&& PBSid[5] == (moni.Csid[5] & 0x03))
			{
				if(moni.Rssi >= CCHs_CSlev)
				{
					moni.Rssi = CCHs_CSlev;
				}
				else
				{
					moni.Rssi = CCHh_CSlev;
				}											/*	#189 end	*/
			}
		}


		if (!(cmp_up_b(Sys_napbs[PHS_PUBLIC_STS], (U1*)moni.Csid, 5))
			&& Sys_napbs[PHS_PUBLIC_STS][5] == (moni.Csid[5] & 0x03))
             {
			if(moni.Rssi >= CCHs_CSlev)
			{
				moni.Rssi = CCHs_CSlev;
			}
			else
			{
				moni.Rssi = CCHh_CSlev;
			}
		}

		if (CCHFact[PHS_PUBLIC_STS] == CCHINC)
		{
			if (!Mn_AreaCmp((U1*)WaitCS[PHS_PUBLIC_STS].Csid, (U1*)moni.Csid))
				continue;
		}

		if(Ich_end_monF == BIT8)

			if (!Mn_AreaCmp(LocNgCS, (U1*)moni.Csid))

				continue;

		if(Sys_initdl1[12] & 0x10)
		{
			if (cmp_up_b(Sys_pbsid, (U1*)moni.Csid, 5) ||
				Sys_pbsid[5] != (moni.Csid[5] & 0x03))
			{
				continue;
			}
		}

		if (!(moni.Csid[0] & BIT8))
		{
			continue;
		}

		if ((Sys_carrier[1] == (((U1)(moni.Csid[0] << 1) ) | ((U1)(moni.Csid[1] >> 7)))) &&
				(Sys_carrier[2] == WaitCS[PHS_PUBLIC_STS].CCHno))
		{
			Mn_CCHMonRegSet2(&moni);
			ReaVal = 0;
		}
	}

#ifdef	EXT_IO
	for (n = 0; n < CCHMonReg; n++)
	{
		move_up_b(mnghis,(U1*)&CCHMonTable[n].Csid[1],5);
		mnghis[5] = CCHMonTable[n].Rssi;
		HisOut(6,0x41,ECCH_MON , Mn_state.public_mod , mnghis);

	}
#endif
}


void	Mn_PPBSReSelect(void)
{

	Mn_PCsyncCounterClear();
	MaxLCHCnt = 4;
	CCHGain = LOW;

	WaitCS[PHS_PUBLIC_STS].CCHno = Sys_carrier[2];
	if((CCHFact[phs_mode] == CCHCAL) || (CCHFact[phs_mode] == CCHINC))
		RetryCount = 20;
	else
		RetryCount = MAX_RETRY;
	CCHMonReg = 0;


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

}

void	Mn_ti_page(void)
{
	ti_page = OFF;
}


U1	Mn_AreaCmp(U1 *srcCsid,U1 *dstCsid)
{													/*	#199 97.01.30	*/
	U1	n;

	for (n = 0; n < 6; n++)
	{
		if ((srcCsid[n] ^ dstCsid[n]) & BitMask[n])
		{
			return ( OFF );
		}
	}
	return ( ON );
}



U1	Mn_AreaNoCmp(U1 *ChkCsid)
{
	U1	n;

	for (n = 0; n < 6; n++)
	{
		if ((ChkCsid[n] ^ Sys_pbsid[n]) & BitMask[n])
		{
			return ( OFF );
		}
	}
	return ( ON );
}



void Mn_PRadioInfo(void) //L1 -> L3(L3C) -> MNG
{
	U1	n;

	Sys_initdl1[18] = 0x07;

#ifdef SIMU_ON_PC
	SendUart2L1( SIMTSKDTW , SYSINIT , 18 , &Sys_initdl1[18] , 1);
#endif

	Mn_PCsyncRssiChk();

	if (CCHEstTim[phs_mode])
	{
		m_stptim(T100MS, TICCHEST, phs_mode);
		CCHEstTim[phs_mode] = OFF;
		Mn_PCsyncCountStart();
	}

	if(Mn_InEvtCod[1] == L1_BCCHB)
	{
		return;
	}
	RadioFlag[phs_mode] = OFF;
	move_up_b(Sys_bcch[0][phs_mode], Sys_cch, 8);
#ifdef SIMU_ON_PC
	SendUart2L1( SIMTSKDTW , SYSBCCH , (BYTE)(&Sys_bcch[0][phs_mode][0]-&Sys_bcch[0][0][0]), Sys_bcch[0][phs_mode] , 8);
#endif

	Sleep_Pch_Select();

	if (CNTCRY(PHS_PUBLIC_STS) == 0x02 && Sys_prinfo[7] & 0x010)
	{
		Sys_initdl1[18] = 0x00;
#ifdef SIMU_ON_PC
		SendUart2L1( SIMTSKDTW , SYSINIT , 18 , &Sys_initdl1[18] , 1);
#endif

		if (((IncGroup[PHS_PUBLIC_STS] % 2) && (Sys_prinfo[7] & 0x020))
			|| (!(IncGroup[PHS_PUBLIC_STS] % 2) && !(Sys_prinfo[7] & 0x020)))
		{
			RadioFlag[PHS_PUBLIC_STS] = OFF;
		}
		else
		{
			Sleep_Control(BSLPREL);
	#ifdef PROT_TEST
		HisOut(0x00,0xfe,0x07,0x00,0x00);
	#endif
			another_cch_get();
			RadioFlag[PHS_PUBLIC_STS] = ON;
			for (n = 0; n < 3; n++) 				/*		#225			*/
			{
				SysInfFlag[phs_mode][n] = OFF;
				if (n == 0)
				{
					move_up_b(Sys_bcch[1][phs_mode], SYSIFDF[phs_mode], 8);
				#ifdef SIMU_ON_PC
					SendUart2L1( SIMTSKDTW , SYSBCCH , (BYTE)(&Sys_bcch[1][phs_mode][0]-&Sys_bcch[0][0][0]) , Sys_bcch[1][phs_mode] , 8);
				#endif
				}
			}										/*		#225 end		*/
			return;
		}
	}
	if(!(Sys_pbsid[6] & 0x0F))
	{
		Sys_pbsid[6] |= (Sys_bcch[0][phs_mode][2] & 0x0f);
		Mn_PAreaBitMask();
	}												/*	#205 嘆 end			*/


	for (n = 0; n < 3; n++)
	{
		if (Sys_bcch[0][phs_mode][6] & (0x08 << n))
		{
			if (SysInfFlag[phs_mode][n] == OFF)
			{
				SysInfFlag[phs_mode][n] = HOLD;
			}
			else if(SysInfFlag[phs_mode][n] == WAIT_RADIO)
			{
				SysInfFlag[phs_mode][n] = ON;
			}
		}
		else
		{
			SysInfFlag[phs_mode][n] = OFF;
			if (n == 0)
			{
				move_up_b(Sys_bcch[1][phs_mode], SYSIFDF[phs_mode], 8);
			#ifdef SIMU_ON_PC
				SendUart2L1( SIMTSKDTW , SYSBCCH , (BYTE)(&Sys_bcch[1][phs_mode][0]-&Sys_bcch[0][0][0]) , Sys_bcch[1][phs_mode] , 8);
			#endif
			}
		}
	}

	if (!(SysInfFlag[phs_mode][0]
		| SysInfFlag[phs_mode][1]
		| SysInfFlag[phs_mode][2]))
	{
		Mn_PCCHEstComp();
	}
	else if (SysInfFlag[phs_mode][0] > ON
		|| SysInfFlag[phs_mode][1] > ON
		|| SysInfFlag[phs_mode][2] > ON)
	{
	}
	else
	{
		if ( Mn_PSysInfoChk() == OK )
		{
			Mn_PCCHEstComp();
		}
	}
}


void Mn_PSysInfo(void)
{
	U1	n;
#ifdef SIMU_ON_PC
	U1	buf[14];
#endif

	Mn_PCsyncRssiChk();

	if (CCHEstTim[phs_mode])
	{
		m_stptim(T100MS, TICCHEST, phs_mode);
		CCHEstTim[phs_mode] = OFF;
		Mn_PCsyncCountStart();
	}

	if(L1_BCCHB == Mn_InEvtCod[1])
	{
		return;
	}

	n = Mn_InEvtCod[0] - ESYSINFO;

	if (RadioFlag[phs_mode])
	{
		SysInfFlag[phs_mode][n] = WAIT_RADIO;

		move_up_b(Sys_bcch[n + 1][phs_mode] , Sys_cch , 8);
#ifdef SIMU_ON_PC
		SendUart2L1( SIMTSKDTW , SYSBCCH , (BYTE)(&Sys_bcch[n+1][phs_mode][0]-&Sys_bcch[0][0][0]) , Sys_bcch[n+1][phs_mode] , 8);
#endif
		return;
	}



	if (Sys_bcch[0][phs_mode][6] & (0x08 << n))
	{
		SysInfFlag[phs_mode][n] = ON;

		move_up_b(Sys_bcch[n + 1][phs_mode], Sys_cch, 8);
#ifdef SIMU_ON_PC
		SendUart2L1( SIMTSKDTW , SYSBCCH , (BYTE)(&Sys_bcch[n+1][phs_mode][0]-&Sys_bcch[0][0][0]) , Sys_bcch[n+1][phs_mode] , 8);
#endif

		if(Sys_bcch[n + 1][phs_mode][7] & 0x01)
		{
			switch (Sys_cch[7] & 0x07)
			{
			case 0x01:
				SysStsTim[phs_mode][0] = 50;
			break;
			case 0x03:
				SysStsTim[phs_mode][1] = 50;
			break;
			case 0x05:
			break;
			}
		}
		if ( Mn_PSysInfoChk() == OK )
		{
			Mn_PCCHEstComp();
		}
	}
	else
	{
		SysInfFlag[phs_mode][n] = OFF;
	}
}



U1 Mn_PSys2InfoChk(void)
{
	RtMmVer[phs_mode] = 0x00;

	if (SysInfFlag[phs_mode][1] != ON)
	{
		return(OK);
	}

	if(Sys_initdl1[9] | Sys_initdl1[10])
	{
		if((Sys_initdl1[9] != Sys_bcch[2][phs_mode][1]) ||
				(Sys_initdl1[10] != Sys_bcch[2][phs_mode][2]))
		{
			return(NG);
		}
	}
	if ((Sys_bcch[2][phs_mode][4] & 0x07) == 0x00)
	{
		return(NG);
	}

	RtMmVer[phs_mode] = Sys_bcch[2][phs_mode][4];

	return(OK);
}



U1 Mn_PSysInfoChk(void)
{
	U1	n;

	if ( Mn_PSys2InfoChk() )
	{
		if (phs_mode == PHS_PUBLIC_STS)
		{
			Mn_PBSRetryCheck();
		}
		return ( NG );
	}

	if (SysInfFlag[phs_mode][0] != ON)
	{
		goto  chk_lab;
	}

	if (Sys_psinfo[2] & BIT5)
	{
		ReaVal = 0x04;
		move_up_b(Sys_napbs[PHS_PUBLIC_STS], (U1*)WaitCS[phs_mode].Csid, 6);


		if (cmp_up_b(PBSid, CLSCSID, 6))
		{
			for (n = 0; n < CCHMonReg; n++)
			{
				if (!cmp_up_b(PBSid, (U1*)CCHMonTable[n].Csid, 6))
				{
					CCHMonTable[n].Locflg = OFF;
					break;
				}
			}
			move_up_b(PBSid, CLSCSID, 6);
		}
		Mn_PBSRetryCheck();
		return ( NG );
	}

	Mn_PSysRegulChk();

	switch (CCHFact[phs_mode])
	{
	case CCHEST:
	break;
	case CCHCAL:

		if ( Mn_PUBCallReglChk() == NG )
		{
			ReaVal = 0x35;
			Mn_PBSRetryCheck();
			return ( NG );
		}
	break;
	case CCHINC:
	default:
		break;
	}

chk_lab :
	if (SysInfFlag[phs_mode][0] > ON
	 || SysInfFlag[phs_mode][1] > ON
	 || SysInfFlag[phs_mode][2] > ON)
	{
		return ( NG );
	}

	return ( OK );
}



void	Mn_PSysRegulChk(void)
{
	U1	PriPS;
	U1 	j;

	/* #J01-MNG20 */
	PriPS = Sys_pri;
	if (PriPS & BIT1)
	{
		RegulCS[phs_mode].Kind &= ~0x02;
		if (Sys_bcch[1][phs_mode][5] & BIT8)
		{
			if (cmp_up_b((U1*)RegulCS[phs_mode].Csid,(U1*) WaitCS[phs_mode].Csid, 6))
			{


				move_up_b((U1*)RegulCS[phs_mode].Csid, (U1*)WaitCS[phs_mode].Csid, 6);
				RegulCS[phs_mode].GrpFlg = WaitCS[phs_mode].GrpFlg;
				RegulCS[phs_mode].FreqNo = WaitCS[phs_mode].CCHno;
				RegulCS[phs_mode].Kind = 0;
			}
			RegulCS[phs_mode].Kind |= 0x02;
		}
		RegulCS[phs_mode].Kind &= ~0x08;
		if (Sys_bcch[1][phs_mode][5] & BIT7)
		{
			if (cmp_up_b((U1*)RegulCS[phs_mode].Csid,(U1*)WaitCS[phs_mode].Csid, 6))

⌨️ 快捷键说明

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