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

📄 tv.c

📁 特纳公司tnf6535应用程序。主用desktop video tuner.
💻 C
📖 第 1 页 / 共 2 页
字号:
	return (BOOLEAN) g08SkipOnFlg;
}


void	GetPreChannel(void)
{
	gChlIndex.Pre	= gChlIndex.Cur;

	do{
		gChlIndex.Cur++;	//INCREASE( gChlIndex.Cur, gChlIndex.Max );
		if(gChlIndex.Cur > gChlIndex.Max)
		{
			gChlIndex.Cur = 1;
		}
	}while( ReadCurSkip() && (gChlIndex.Cur != gChlIndex.Pre) );

	if( gChlIndex.Cur != gChlIndex.Pre)
	{
		SAVE_CURPRE_INDEX();
	}
	return;
}

void	GetNextChannel(void)
{
	gChlIndex.Pre	= gChlIndex.Cur;

	do{
		gChlIndex.Cur--;	//DECREASE( gChlIndex.Cur, gChlIndex.Max );
		if(gChlIndex.Cur < 1)
		{
			gChlIndex.Cur = gChlIndex.Max;
		}
	}while( ReadCurSkip() && (gChlIndex.Cur != gChlIndex.Pre) );

	if( gChlIndex.Cur != gChlIndex.Pre)
	{
		SAVE_CURPRE_INDEX();
	}
	return;
}

#if (	TUNER_VENDOR == XIMEI_TUNER 	|| TUNER_VENDOR == TENA8532_TUNER \
	 || TUNER_VENDOR == TENA9535_TUNER 	||TUNER_VENDOR == TENA8022_TUNER)
void GetTunerStatus(void)
{ 
  	IIC_Dev_Start();
  	IIC_Dev_SendByte( IIC_TUNER_ID | 1);
  	g08AftLevel = IIC_Dev_RecvByte();
  	IIC_Dev_Stop();

  	if(g08AftLevel & 0x40 == 0)
	{
		bTunerLock = FALSE;
	}
  	else
	{  
		bTunerLock = TRUE;
	}

	g08AftLevel &= 0x07;
	if(g08AftLevel < 4)
	{ 
		bAftInWin = TRUE;
		
		if(g08AftLevel == 2)
		{
			bAftHit = TRUE;
		}
		else
		{
			bAftHit = FALSE;
		}

		if(g08AftLevel < 2)
		{
			bAftLow = FALSE;
			
		}
		else if(g08AftLevel > 2)
		{
			bAftLow = TRUE;
		}
	}
	else
	{
		bAftInWin = FALSE;
	}

	return;
}	

#elif (0)
#define AFT_HIT_MIN	0x11
#define AFT_HIT_MAX	0x1D
#define AFT_WIN_MIN	0x04
#define AFT_WIN_MAX	0x38
#define AFT_DIR_FLG 0x18
void GetTunerStatus(void)
{ 
  	if ((g08AftLevel > AFT_HIT_MAX) || (g08AftLevel < AFT_HIT_MIN))
	   	bAftHit = FALSE;
   	else
	   	bAftHit = TRUE;

	if ((g08AftLevel > AFT_WIN_MAX) || (g08AftLevel < AFT_WIN_MIN))
	   	bAftInWin = FALSE;
   	else
	   	bAftInWin = TRUE; 
	
	if (g08AftLevel < AFT_DIR_FLG)
	   	bAftLow = FALSE;
   	else
	   	bAftLow = TRUE;

	return;
}	
#endif
/*===========================================================================*
 *= Name    : TV Channel Searching.                                         =*
 *= Function:                                                               =*
 *= Input   : NONE                                                          =*
 *= Output  :                                                               =*
 *=           TRUE : Search finished.                                       =*
 *=           FALSE: Searching                                              =*
 *=                                                                         =*
 *= Originated from:Gorden,Ding 											=*
 *= Modified by:    Zoucf													=*
 *=																			=*
 *= Nov,2005																=*
 *===========================================================================*/
/*
							 _____________________
							/
						    /
						    /
						   /
					      /
					   /
			 	    /
				 /
-----------------
*/

#define EN_DBG_SEARCH	0
#define SCHMSG_X		0
#define SCHMSG_Y		0

BOOLEAN	TVSearched(void)
{
#if EN_DBG_SEARCH
	ReadDecoderSync(); 
	PrintHexByte(SCHMSG_X,SCHMSG_Y,DevReadByte(IIC_SA7113_ID,0x1F),GREEN);
	bOSD = TRUE;
	g08SrhDly	= 6 ;
#else
	ReadDecoderSync(); 
	g08SrhDly	= 6;
#endif
	
	switch(g08SearchStus) 
	{
		case TSCH_HLOCK:
			if( bSearchUp ) // Auto and Manual Search up
			{
				if(bHLock) //if( bHasSignal )
				{
#if EN_DBG_SEARCH
					PrintString(SCHMSG_X + 5,SCHMSG_Y ,"HLOCKED",RED); //hlock
#endif
					g08LockCount++ ;
					if( g08LockCount > 1)
					{
						g08LockCount	= 0;
						g08SearchStus	= TSCH_AFTIN ;
					}
					else
					{
						bTunerUp	= bSearchUp ;
						TunerAdjust( TUNER_STEP_50K );
					}
				}
				else 
				{
#if EN_DBG_SEARCH
					PrintString(SCHMSG_X + 5,SCHMSG_Y+1 ,">>>>>>>",RED); //search lock
#endif
					g08LockCount	= 0;
					bTunerUp	= bSearchUp ;
					TunerAdjust( TUNER_STEP_500K );
				}
			}
			else
			{
				if(bHLock) 
				{
#if EN_DBG_SEARCH
					PrintString(SCHMSG_X + 5,SCHMSG_Y+2 ,"HLOCKED",RED); //hlock
#endif
					g08SearchStus	= TSCH_AFTIN ;
					bTunerUp	= bSearchUp;
					TunerAdjust( TUNER_STEP_50K);
				}
				else
				{
					g08LockCount	= 0;
					bTunerUp	= bSearchUp ;
					TunerAdjust(TUNER_STEP_100K);
#if EN_DBG_SEARCH
					PrintString(SCHMSG_X + 5,SCHMSG_Y+3,">>>>>>>",RED); //search lock
#endif
				}
			}
			break;
		case TSCH_AFTIN:
			GetTunerStatus();
			if(bAftInWin)
			{
				g08LockCount	= 0;
				bAftDirBak		= bAftLow ;	//backup current direct.
				g08SearchStus	= TSCH_HIT ;

				if( !bSearchUp )
					TmpDivider	= gTuner.Divider.Word ;

#if EN_DBG_SEARCH
				PrintString(SCHMSG_X + 5,SCHMSG_Y+4 ,"IN AFT WIN",RED); //hlock
#endif
			}
			else
			{
				bTunerUp	= bSearchUp ;
				TunerAdjust( TUNER_STEP_50K );
#if EN_DBG_SEARCH
				PrintString(SCHMSG_X + 5,SCHMSG_Y+5,"SCH AFT WIN",RED); 
#endif
			}
			break;
		case TSCH_HIT:
			/* find fine point. */
			GetTunerStatus();
			if(!bAftHit)
			{	
				if( !bSearchUp )
				{
					if(bAftDirBak == bAftLow)
					{
						g08LockCount++;
						if( g08LockCount > 2 )
						{
							gTuner.Divider.Word = TmpDivider ;
							bTunerUp	= FALSE;
							TunerAdjust( TUNER_STEP_50K );
							g08SearchStus 	= TSCH_HLOCK;
						}
					}
					else
					{
						bTunerUp = !bAftLow;
						TunerAdjust( TUNER_STEP_50K );
						break;
					}
				}

				bTunerUp	= bAftLow ;
				TunerAdjust( TUNER_STEP_50K );
#if EN_DBG_SEARCH
				PrintString(SCHMSG_X + 5,SCHMSG_Y+6,"Not Hit",BLUE); 
#endif
			}
			else 
			{
				if(!bHLock) 
				{
					bTunerUp	= bSearchUp ;
					TunerAdjust( TUNER_STEP_150K );
					g08SearchStus	= TSCH_HLOCK;
#if EN_DBG_SEARCH
					PrintString(SCHMSG_X + 5,SCHMSG_Y+7,"skip NO SIG",BLUE); //search lock
#endif
					return FALSE;
				}
			
				/*= data adjust =*/
				{
					UBYTE	dthi, dtlo ;
					dthi	= gTuner.Divider.Byte.Lo ;
					dtlo	= dthi & 0x0f ;
					dthi	&= 0xf0 ;
					if( Diff8(dtlo, 0x00) <= 1 )
					{
						dtlo = 0x0f;
						dthi -= 0x10;
					}
					else if( Diff8(dtlo, 0x0f) <= 1 )
					{
						dtlo = 0x0f;
					}
					else if( Diff8(dtlo, 0x0b) <= 1 )
					{
						dtlo = 0x0b;
					}
					else if( Diff8(dtlo, 0x09) <= 1 )
					{
						dtlo = 0x09;
					}
					else if( Diff8(dtlo, 0x03) <= 1 )
					{
						dtlo = 0x03;
					}
						
					gTuner.Divider.Byte.Lo	= dthi | dtlo ;
				}
				
				/*===============*/
				if( bAutoSearch )
				{
#if EN_DBG_SEARCH
				PrintString(SCHMSG_X + 5,SCHMSG_Y+7,"SAVE TUNER",RED); //search lock
#endif
					SAVE_TUNER_DATA();
					if( gChlIndex.Max < gChlIndex.Cur )
					{
						gChlIndex.Max = gChlIndex.Cur ;
					}
					/* Save data */
					gChlIndex.Cur++;
					g08ChlHardPos++;	
					bTunerUp	= bSearchUp ;
					TunerAdjust( TUNER_STEP_2M );
					
					g08SearchStus	= TSCH_HLOCK;

					#if EN_MULTIPIC_SEARCH
					PipProcess();
					#endif

					break;
				}
				else
				{	// manual searching stop here.
					return TRUE;
				}
			}
			break;
		default:
			g08SearchStus	= TSCH_HLOCK;
			break;
	}//end of switch 


	if( bAutoSearch ) 
	{
		if( gTuner.Divider.Word >= C_UHF_MAX )
			return TRUE;
		else
			return FALSE;
	}
	else
	{
	   	if( bSearchUp )
		{
			if( gTuner.Divider.Word >= C_UHF_MAX ) 
			{
				gTuner.Divider.Word = C_VHFL_MIN + 1;
				TunerAdjust( 0 );
			}
			else if( gTuner.Divider.Word < BakDivider )
			{
				if( (BakDivider - gTuner.Divider.Word) < TUNER_STEP_500K )
				{
					gTuner.Divider.Word = BakDivider ;
					TunerAdjust( 0 );
					return TRUE;
				}
			}
			return FALSE;
		}
		else
		{
			if( gTuner.Divider.Word <= C_VHFL_MIN )
			{
				gTuner.Divider.Word	= C_UHF_MAX - 1;
				TunerAdjust( 0 );
			}
			else if ( gTuner.Divider.Word > BakDivider )
			{
				if( (gTuner.Divider.Word - BakDivider) < TUNER_STEP_500K )
				{
					gTuner.Divider.Word = BakDivider ;
					TunerAdjust( 0 );
					return TRUE;
				}
			}
			return FALSE;
		}
	}
}


⌨️ 快捷键说明

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