📄 tv.c
字号:
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 + -