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

📄 mn80pub2.c

📁 phs 源代码 小灵通协议源代码 phs source code
💻 C
📖 第 1 页 / 共 2 页
字号:
	U1				i, n;

	n = 0;
	LA1n = 0;
	LA2n = 0;
	LA3n = 0;
	LA4n = 0;
	LA5n = 0;
	LA6n = 0;

	LA1n = Mn_PHakkoGrpLA1(LAGroup);
	n = LA1n;
	if ( n == CCHMonReg )
	{
		goto end_set;
	}

	LA2n = Mn_PHakkoGrpLA2(&LAGroup[n], LA2Csid);

	if ( LA2n > 0 )
	{
		n += LA2n;
		if ( n == CCHMonReg )
		{
			goto end_set;
		}
		LA3n = Mn_PHakkoGrpLA3(&LAGroup[n], LA2Csid);

	}
	if ( LA3n > 0 )
	{
		n += LA3n;
		if ( n == CCHMonReg )
		{
			goto end_set;
		}
	}

	LA4n = Mn_PHakkoGrpLA4(&LAGroup[n]);
	if ( LA4n > 0 )
	{
		n += LA4n;
		if ( n == CCHMonReg )
		{
			goto end_set;
		}
	}

	LA5n = Mn_PHakkoGrpLA5(&LAGroup[n], LA5Csid);

	if ( LA5n > 0 )
	{
		n += LA5n;
		if ( n == CCHMonReg )
		{
			goto end_set;
		}
		LA6n = Mn_PHakkoGrpLA6(&LAGroup[n], LA5Csid);

	}
	if ( LA6n > 0 )
	{
		n += LA6n;
	}


	CCHMonReg = n;

end_set:

	for ( i = 0; i < CCHMonReg; i++ )
	{
		move_up_b((U1*)&CCHMonTable[i], (U1*)&LAGroup[i],
													 sizeof(MN_CCHMONREC));
	}
}



U1 Mn_PHakkoGrpLA1(MN_CCHMONREC *LAGroup)
{
	U1				i, n;
	MN_CCHMONREC	*LASort;
	U1				BaseLvl;

	BaseLvl = Sys_initdl1[16];

	LASort = LAGroup;


	for ( n = 0, i = 0; i < CCHMonReg; i++ )
	{
		if ( Mn_AreaCmp(Sys_pbsid, (U1*)CCHMonTable[i].Csid)
			&& (CCHMonTable[i].Rssi >= BaseLvl) )
		{
			move_up_b((U1*)&LAGroup[n], (U1*)&CCHMonTable[i],
														sizeof(MN_CCHMONREC));
			n++;
		}
	}

	if ( n == 0 ) {
		return ( n );
	}

	return ( n );
}


U1 Mn_PHakkoGrpLA2(MN_CCHMONREC *LAGroup, U1 *LA2Csid)
{
	U1				i, n;
	MN_CCHMONREC	*LASort;

	LASort = LAGroup;


	for ( n = 0, i = 0; i < CCHMonReg; i++ )
	{
		if ( !(Mn_AreaCmp(Sys_pbsid, (U1*)CCHMonTable[i].Csid))
			&& (CCHMonTable[i].Rssi >= Sys_initdl1[16]) )
		{
			move_up_b(LA2Csid, (U1*)&CCHMonTable[i].Csid, 6);
			n = 1;
			break;
		}
	}

	if ( n == 0 )
	{
		return ( n );
	}



	for ( n = 0,i = 0; i < CCHMonReg; i++ )
	{
		if ( Mn_AreaCmp(LA2Csid,(U1*) CCHMonTable[i].Csid)
			&& (CCHMonTable[i].Rssi >= Sys_initdl1[16]) )
		{
			move_up_b((U1*)&LAGroup[n], (U1*)&CCHMonTable[i],
														sizeof(MN_CCHMONREC));
			n++;
		}
	}

	return ( n );
}



U1 Mn_PHakkoGrpLA3(MN_CCHMONREC *LAGroup, U1 *LA2Csid)
{
	U1				i, n;
	U1				LA3Csid[6];
	MN_CCHMONREC	*LASort;

	LASort = LAGroup;


	for ( n = 0, i = 0; i < CCHMonReg; i++ )
	{
		if ( !(Mn_AreaCmp(Sys_pbsid,(U1*) CCHMonTable[i].Csid))
			&& !(Mn_AreaCmp(LA2Csid, (U1*)CCHMonTable[i].Csid))
			&& (CCHMonTable[i].Rssi >= Sys_initdl1[16]) )
		{
			move_up_b(LA3Csid, (U1*)&CCHMonTable[i].Csid, 6);
			n = 1;
			break;
		}
	}

	if ( n == 0 )
	{
		return ( n );
	}



	for ( n = 0,i = 0; i < CCHMonReg; i++ )
	{
		if ( Mn_AreaCmp(LA3Csid, (U1*)CCHMonTable[i].Csid)
			&& (CCHMonTable[i].Rssi >= Sys_initdl1[16]) )
		{
			move_up_b((U1*)&LAGroup[n], (U1*)&CCHMonTable[i],
														sizeof(MN_CCHMONREC));
			n++;
		}
	}

	return ( n );
}


U1 Mn_PHakkoGrpLA4(MN_CCHMONREC *LAGroup)
{
	U1				i, n;
	MN_CCHMONREC	*LASort;
	U1				BaseLvl;

	BaseLvl = Sys_initdl1[16];

	LASort = LAGroup;


	for ( n = 0, i = 0; i < CCHMonReg; i++ )
	{
		if ( Mn_AreaCmp(Sys_pbsid, (U1*)CCHMonTable[i].Csid)
			&& (CCHMonTable[i].Rssi < BaseLvl) ) {
			move_up_b((U1*)&LAGroup[n], (U1*)&CCHMonTable[i],
														sizeof(MN_CCHMONREC));
			n++;
		}
	}

	if ( n == 0 ) {
		return ( n );
	}

	return ( n );
}



U1 Mn_PHakkoGrpLA5(MN_CCHMONREC *LAGroup, U1 *LA5Csid)
{
	U1				i, n;
	MN_CCHMONREC	*LASort;

	LASort = LAGroup;


	for ( n = 0, i = 0; i < CCHMonReg; i++ )
	{
		if ( !(Mn_AreaCmp(Sys_pbsid, (U1*)CCHMonTable[i].Csid))
			&& (CCHMonTable[i].Rssi < Sys_initdl1[16]) )
		{
			move_up_b(LA5Csid, (U1*)&CCHMonTable[i].Csid, 6);
			n = 1;
			break;
		}
	}

	if ( n == 0 )
	{
		return ( n );
	}



	for ( n = 0,i = 0; i < CCHMonReg; i++ )
	{
		if ( Mn_AreaCmp(LA5Csid, (U1*)CCHMonTable[i].Csid)
			&& (CCHMonTable[i].Rssi < Sys_initdl1[16]) ) {
			move_up_b((U1*)&LAGroup[n], (U1*)&CCHMonTable[i],
														sizeof(MN_CCHMONREC));
			n++;
		}
	}

	return ( n );
}



U1 Mn_PHakkoGrpLA6(MN_CCHMONREC *LAGroup, U1 *LA5Csid)
{
	U1				i, n;
	U1				LA6Csid[6];
	MN_CCHMONREC	*LASort;

	LASort = LAGroup;


	for ( n = 0, i = 0; i < CCHMonReg; i++ )
	{
		if ( !(Mn_AreaCmp(Sys_pbsid, (U1*)CCHMonTable[i].Csid))
			&& !(Mn_AreaCmp(LA5Csid, (U1*)CCHMonTable[i].Csid))
			&& (CCHMonTable[i].Rssi < Sys_initdl1[16]) )
		{
			move_up_b(LA6Csid, (U1*)&CCHMonTable[i].Csid, 6);
			n = 1;
			break;
		}
	}

	if ( n == 0 )
	{
		return ( n );
	}



	for ( n = 0,i = 0; i < CCHMonReg; i++ )
	{
		if ( Mn_AreaCmp(LA6Csid, (U1*)CCHMonTable[i].Csid)
			&& (CCHMonTable[i].Rssi < Sys_initdl1[16]) )
		{
			move_up_b((U1*)&LAGroup[n], (U1*)&CCHMonTable[i],
														sizeof(MN_CCHMONREC));
			n++;
		}
	}

	return ( n );
}



U1	Mn_PWaitCCHMonChk(void)
{

	if(WReMonTimN || WPubMon == ON)
	{
		A_count = 0;
		return ( NG );
	}
	if ( pc_rssi < (U1)(CCHh_CSlev + Sys_initdl1[14]))
	{
		A_count++;
		if(A_count >= 2)
		{
			A_count = 0;
			WReMonTimN = 0;
			ClvlSum[PHS_PUBLIC_STS] = (BYTE)pc_rssi;
			Mn_PWaitCCHMonReq2();
			return ( OK );
		}
	}
	else
		A_count = 0;
	return ( NG );
}



void	Mn_PWaitCCHMonReq2(void)
{

	Mn_PCCHTimStp(PHS_PUBLIC_STS);
	if ( WReMonTimN == 0 )
	{
		Mn_settim(TIWMONIT1);
	}
	CCHMonReg = 0;

	cch_m_req2(CCHEST,(U1)(WaitCS[PHS_PUBLIC_STS].CCHno-1),Sys_pbsid[7],LOW,OFF);

	Mn_settim(TICCHMON);
	WPubMon = ON;
#ifdef SIMU_ON_PC
	SendUart2L1(SIMTSKDTW , WPUBMON , 0 , &WPubMon , 1);
#endif
	CCHInfo.Moni = PHS_PUBLIC_STS;
}



void	Mn_PWaitCCHMonTo(void)
{
	cch_m_stp2();
	CCHInfo.Moni = 0xFF;
	Mn_PCCHMonitor2();
	WPubMon = OFF;
#ifdef SIMU_ON_PC
	SendUart2L1(SIMTSKDTW , WPUBMON , 0 , &WPubMon , 1);
#endif

	if ( CCHMonReg == 0 )
	{
		;
	}
	else
	{
		if(Mn_GetFeature(FEATURE_SEAMLESS,FEATURE_LOW_CS_PREFER))
			Mn_LowCSPrefer_Sort(1); /*In standy mode, prefer Location Registration*/
		else
		{
			Mn_RSSIMonRegSet();
			Mn_PWaitPriCSMonSort(CCHMonTable, CCHMonReg);
		}


		if (!cmp_up_b((U1*)WaitCS[PHS_PUBLIC_STS].Csid, (U1*)CCHMonTable[0].Csid, 5)
			&& (WaitCS[PHS_PUBLIC_STS].Csid[5] == (CCHMonTable[0].Csid[5] & 0x03)))
		{

			return;
		}

		if (CCHMonTable[0].Rssi < (Sys_pbsid[8] + 15))
			return;
		if(!PubNgAreaChk((U1*)CCHMonTable[0].Csid))

			return;
		pbs_sel_retry = 0;
		A_short = ON;

		if ( WReMonTim & BIT1 )
		{
			m_stptim(T1S, TIWMONIT1, PHS_PUBLIC_STS);
			WReMonTim = 0;
			WReMonTimN = 0;
		}
#ifdef  _DEBUG_TC6_
		_SendStringToUart("WaitCCH\n",sizeof("WaitCCH\n"));
#endif
		Mn_PNextPBSCCHEstReq( CCHEST, ON );
	}
}



U1	Mn_PFstPBSCCHEstReqInit(void)
{
	U1	ret;

	pbs_sel_retry = 0;

	switch ( CCHFact[PHS_PUBLIC_STS] )
	{
	case CCHEST :
		Mn_PWaitPriCSMonSort(CCHMonTable, CCHMonReg);

	break;
	case CCHCAL :
		Mn_PHakkoCSMonSort();
		if ( Sys_initdl1[18] & BIT2 )
		{
			Mn_PRegulCSMonSort(CCHCAL);
		}
	break;
	case CCHINC :
	break;
	case CCHLOC :
		reg_fail = ON;
		move_up_b(LocNgCS,(U1*)WaitCS[PHS_PUBLIC_STS].Csid,6);
	break;
	default		:
		return ( NG );
	break;
	}

	ret = Mn_PBSSelReTrySet( CCHFact[PHS_PUBLIC_STS] );
	if ( ret == OK )
	{
#ifdef  _DEBUG_TC6_
		_SendStringToUart("FSTPB\n",sizeof("FSTPB\n"));
#endif
		Mn_PNextPBSCCHEstReq( CCHFact[PHS_PUBLIC_STS], ON );

	}

	return ( ret );
}



U1 Mn_PBSSelReTry( U1 CCHfactor )
{
	U1	ret;

	pbs_sel_retry++;
	ret = Mn_PBSSelReTrySet( CCHfactor );
	if ( ret == OK )
	{
#ifdef  _DEBUG_TC6_
		_SendStringToUart("PBSSel\n",sizeof("PBSSel\n"));
#endif
		ret = Mn_PNextPBSCCHEstReq( CCHfactor, ON );


	}
	return ( ret );

}



U1 Mn_PBSSelReTrySet( U1 CCHfactor )
{
	U1	i;

	if ( pbs_sel_retry >= PBS_RETRY13 )
	{
		return ( NG );
	}

	for ( i = pbs_sel_retry; i < CCHMonReg; i++ )
	{
		if( CCHfactor == CCHCAL)
		{
			if(CallKind & 0x80)
			{
				if ((!cmp_up_b(TriedPBSid, (U1*)&CCHMonTable[i].Csid[0], 5))
						&& (TriedPBSid[5] == (CCHMonTable[i].Csid[5] & 0x03)))
					continue;
			}
		}
		if( CCHfactor == CCHINC)
		{
			if ((!cmp_up_b(TriedPBSid, (U1*)&CCHMonTable[i].Csid[0], 5))
					&& (TriedPBSid[5] == (CCHMonTable[i].Csid[5] & 0x03)))
				continue;
		}
		if ( PubNgAreaChk((U1*)CCHMonTable[i].Csid) )
		{

			if ( CCHfactor == CCHLOC )
			{

				if (Mn_AreaCmp(LocNgCS, (U1*)CCHMonTable[i].Csid))
					break;
			}
			else
			{
				break;
			}
		}
	}

	pbs_sel_retry = i;

	if (( pbs_sel_retry < CCHMonReg )
		&& ( pbs_sel_retry < PBS_RETRY13 ))
	{
		return ( OK );
	}
	else
	{
		return ( NG );
	}
}



U1	Mn_PNextPBSCCHEstReq( U1 CCHfactor, U1 Mode )
{
	U1	n;
	U1	BCCHflg;
	U1	ret;
#ifdef SIMU_ON_PC
	U1 buf[14];
#endif

	ret = OK;
	if ( Mode == ON )
	{
		Sleep_Control(BSLPREL);
#ifdef PROT_TEST
		HisOut(0x00,0xfe,0x0d,0x00,0x00);
#endif

		WReMonTimN |= BIT8;
		Mn_PCCHTimStp(PHS_PUBLIC_STS);
		WReMonTimN &= ~BIT8;
		Mn_PCsyncCounterClear();

		if ( !(Mn_AreaCmp((U1*)WaitCS[PHS_PUBLIC_STS].Csid,
										(U1*)CCHMonTable[pbs_sel_retry].Csid)) )
		{
			ret = 2;
		}

		move_up_b((U1*)WaitCS[PHS_PUBLIC_STS].Csid, (U1*)CCHMonTable[pbs_sel_retry].Csid, 6);
		WaitCS[PHS_PUBLIC_STS].GrpFlg = CCHMonTable[pbs_sel_retry].GrpFlg;
		WaitCS[PHS_PUBLIC_STS].Gain = CCHMonTable[pbs_sel_retry].Gain;
	}

	BCCHflg = ON;
	switch ( CCHfactor )
	{
	case CCHINC :
		if ( Sys_initdl1[18] & BIT3 )
		{
			BCCHflg = OFF;
		}
	break;
	case CCHCAL :
		if ( Sys_initdl1[18] & BIT2 )
		{
			BCCHflg = OFF;
		}
		if(RegulCS[PHS_PUBLIC_STS].Kind & 0x18)
		{

			BCCHflg = ON;
		}
	break;
	case CCHLOC :
		if ( Sys_initdl1[18] & BIT1 )
		{
			BCCHflg = OFF;
		}
		if(RegulCS[PHS_PUBLIC_STS].Kind & 0x06)
		{

			BCCHflg = ON;
		}
	break;
	case CCHEST :
	default		:
	break;
	}

	if ( BCCHflg == ON )
	{
		RadioFlag[PHS_PUBLIC_STS] = ON;
		for (n = 0; n < 3; n++)
		{
			SysInfFlag[PHS_PUBLIC_STS][n] = OFF;
		}
		RegulCS[PHS_PUBLIC_STS].Kind &= ~0x0a;
		if ( CCHfactor != CCHINC )
		{
			RtMmVer[PHS_PUBLIC_STS] = OFF;
		}
	}
	if ( BCCHflg == ON )
	{
		move_up_b(Sys_bcch[1][PHS_PUBLIC_STS],SYSIFDF[PHS_PUBLIC_STS],8);
#ifdef SIMU_ON_PC
		SendUart2L1( SIMTSKDTW , SYSBCCH , (BYTE)(&Sys_bcch[1][PHS_PUBLIC_STS][0]-&Sys_bcch[0][0][0]) , Sys_bcch[1][PHS_PUBLIC_STS] , 8);
#endif
	}
	cch_est_req((U1)(WaitCS[PHS_PUBLIC_STS].CCHno-1),
							 (U1*)WaitCS[PHS_PUBLIC_STS].Csid, WaitCS[PHS_PUBLIC_STS].Gain);
#ifdef EXT_IO
	HisOut(6,0xda,0x00,0x00,(U1*)WaitCS[PHS_PUBLIC_STS].Csid);
#endif

	ReaVal = 0;

	CCHFact[PHS_PUBLIC_STS] = CCHfactor;

#ifdef  _DEBUG_TC6_
		_SendStringToUart("Est T BG\n",sizeof("Est T BG\n"));
#endif

	Mn_settim(TICCHEST);

	if ( !CCHShortTim[PHS_PUBLIC_STS] )
	{
		Mn_settim(TICCHSHT);
	}

	if ( BCCHflg == ON )
	{
		Mn_state.public_mod = ST_PP_REPORT;
	#ifdef SIMU_ON_PC
		SendUart2L1(SIMTSKDTW , MNSTATE , 0 , (BYTE*)&Mn_state.public_mod , 1);
	#endif


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

	return ( ret );
}



void Mn_PRegulCSMonSort( U1 CCHfactor )
{
	MN_CCHMONREC  	Group[20],
					RegulGroup[20];
	U1				i, j, k, n;

	n = OFF;

	if ( (CCHfactor == CCHCAL)
		&& (RegulCS[PHS_PUBLIC_STS].GrpFlg == ON) && (RegulCS[PHS_PUBLIC_STS].Kind & 0x18) )
	{

		for ( i = 0; i < CCHMonReg; i++ )
		{
			if ( Mn_AreaCmp((U1*)RegulCS[PHS_PUBLIC_STS].Csid, (U1*)CCHMonTable[i].Csid) )
			{
				n = ON;
				break;
			}
		}
	}
	else if ( (CCHfactor == CCHLOC)
		&& (RegulCS[PHS_PUBLIC_STS].GrpFlg == ON) && (RegulCS[PHS_PUBLIC_STS].Kind & 0x06) )
	{

		for ( i = 0; i < CCHMonReg; i++ )
		{
			if ( Mn_AreaCmp((U1*)RegulCS[PHS_PUBLIC_STS].Csid, (U1*)CCHMonTable[i].Csid) )
			{
				n = ON;
				break;
			}
		}
	}

	if ( n == OFF )
	{
		return;
	}


	for ( i = 0, j = 0, k = 0; i < CCHMonReg; i++ )
	{
		if ( Mn_AreaCmp((U1*)RegulCS[PHS_PUBLIC_STS].Csid, (U1*)CCHMonTable[i].Csid) )
		{

			move_up_b((U1*)&RegulGroup[k], (U1*)&CCHMonTable[i],
													 sizeof(MN_CCHMONREC));
			k++;
		}
		else
		{
			move_up_b((U1*)&Group[j], (U1*)&CCHMonTable[i],
													 sizeof(MN_CCHMONREC));
			j++;
		}
	}



	for ( i = 0, n = 0; n < j; i++, n++ )
	{
		move_up_b((U1*)&CCHMonTable[i], (U1*)&Group[n],
													 sizeof(MN_CCHMONREC));
	}

	for ( i = j, n = 0; n < k; i++, n++ )
	{
		move_up_b((U1*)&CCHMonTable[i], (U1*)&RegulGroup[n],
													 sizeof(MN_CCHMONREC));
	}
}


void Mn_PCHRssiChk(void)
{

#ifdef  _DEBUG_TC6_
		_SendStringToUart("Mn_PCHRssiChk\n",sizeof("Mn_PCHRssiChk\n"));
#endif

	if (CCHEstTim[phs_mode])
	{
		m_stptim(T100MS, TICCHEST, phs_mode);
		CCHEstTim[phs_mode] = OFF;
		Mn_PCsyncCountStart();
	}
	if (CsyncTim[phs_mode])
	{
		m_stptim(T100MS, TICSYNC, phs_mode);
		CsyncTim[phs_mode] = OFF;
	}
	if ((SLEEP_STS[phs_mode] == OFF) || RadioFlag[phs_mode])
	{


		Mn_settim(TICSYNC);
	}
	UwCrc_Err = 0;
	if(SLEEP_STS[phs_mode] == OFF)
		CsyncCount[phs_mode] = Sys_csynctim[phs_mode];
	Mn_PSELRSSIChk();

	if(Mn_state.public_mod == ST_PP_WAIT && SLEEP_STS[phs_mode] != OFF)
	{
		if ( Mn_PWaitCCHMonChk() == OK )
		{
			return;
		}
	}
}

#ifdef __cplusplus
}
#endif

#endif

⌨️ 快捷键说明

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