📄 dvb_nim.c
字号:
/**************************************************************************
(C)Copyright Cheertek Inc. 2002-2004,
D700, all right reserved.
Product : STB Firmware
****************************************************************************/
#include <stdio.h>
#include "dvb_type.h"
#include "dvb_db.h"
#include "dvb_nim.h"
#include "frontend.h"
#include "dvb_sys.h"
static EN_SYS_COUNTRY_TYPE enCountry;
static u8 u8MHzBW;
static u32 u32Frequency;//KHz
static u8 u8OldChannel;
static u8 code u8Dummy;
//====================================================================================
#include "ch_table.c"
//====================================================================================
void DVB_TunerReset(void)
{
reset_frontend_enable();
}
bool8 DVB_TunerInit(void)
{
reset_frontend_disable();
return init_frontend();
}
EN_NIM_STATUS DVB_TunerSetFrequency(u32 u32FreqKHz, u8 u8BWMHz, EN_TUNER_WAITING enWaitingType)
{
u8 u8Channel;
u8 u8WaitCount;
FRONTEND_STATUS enFeState;
u32Frequency=u32FreqKHz;
u8MHzBW=u8BWMHz;
set_frontend(u32Frequency, u8MHzBW);
switch(enWaitingType)
{
case EN_TUNER_WAITING_NO:
u8WaitCount=0;
break;
case EN_TUNER_WAITING_SHORT:
u8WaitCount=TUNER_WAITING_SHORT_COUNT;
break;
case EN_TUNER_WAITING_LONG:
u8WaitCount=TUNER_WAITING_LONG_COUNT;
break;
}
for(;u8WaitCount>0;u8WaitCount-- )
{
if ( DVB_TimerPollWait(150)==FALSE )
return EN_NIM_ABORT;
enFeState=check_frontend_state();
if ( enFeState == FRONTEND_FEC_LOCK )
return EN_NIM_LOCKED;
if ( u8WaitCount<SIGNAL_LOW_SKIP_COUNT )
{
if (get_frontend_strength()<= SIGNAL_LOW_THRESHOLD)
{
if ( enFeState == FRONTEND_UNLOCK )
{
//printf("[dvb_nim.c] RF input power low and no signal, break\n");
break;
}
else
{
//printf("[dvb_nim.c] Waiting lock (power low)\n");
}
}
else
{
//printf("[dvb_nim.c] Waiting lock (power high)\n");
}
}
}
return EN_NIM_NO_LOCKED;
}
EN_NIM_STATUS DVB_TunerSetParameter(u16 u16TPIdx, EN_TUNER_WAITING enWaitingType)
{
u8 u8Channel;
u8 u8WaitCount;
u8Channel=(u8)(u16TPIdx&0xFF);
if ( u8Channel==u8OldChannel )
{
if ( check_frontend_state()== FRONTEND_FEC_LOCK )
return EN_NIM_LOCKED;
}
if ( TunerGetChInfo(u8Channel, &u32Frequency, &u8MHzBW)==FALSE )
{
// channel number error
return EN_NIM_NO_LOCKED;
}
u8OldChannel=(u8)(u16TPIdx&0xFF);
return DVB_TunerSetFrequency(u32Frequency, u8MHzBW, enWaitingType);
}
bool8 DVB_TunerCheckLock(void)
{
if ( check_frontend_state()!= FRONTEND_FEC_LOCK )
return FALSE;
// dvb_tuner_get_status();
return TRUE;
}
u8 DVB_TunerGetStrength (void)
{
return get_frontend_strength();
}
u8 DVB_TunerGetQuality (void)
{
return get_frontend_quality();
}
static bool8 b8LnbStatus=FALSE;
void DVB_TunerLNBPower(bool8 b8Enable)
{
b8LnbStatus = b8Enable;
set_frontend_lnb(b8Enable);
}
bool8 DVB_TunerGetLNBPower(void)
{
return b8LnbStatus;
}
bool8 DVB_TunerGetChInfo(u8 u8Channel, u32 *pu32FreqKHz, u8 *pu8BWMHz)
{
return TunerGetChInfo(u8Channel, pu32FreqKHz, pu8BWMHz);
}
void DVB_TunerGetFreqBound(u8 *pu8MinCh, u8 *pu8MaxCh)
{
EN_SYS_COUNTRY_TYPE enCountry;
enCountry=DVB_GetSystemCountry();
*pu8MinCh=0;
*pu8MaxCh=0;
switch(enCountry)
{
case EN_SYS_COUNTRY_TAIWAN:
case EN_SYS_COUNTRY_AMERICA:
*pu8MinCh=14;//Start of 470MHz
// *pu8MaxCh=83;//End of 890MHz
*pu8MaxCh=78;//End of 860MHz
break;
case EN_SYS_COUNTRY_CHINA:
*pu8MinCh=13;
*pu8MaxCh=57;
break;
case EN_SYS_COUNTRY_ENGLAND:
*pu8MinCh=21;
*pu8MaxCh=68;
break;
case EN_SYS_COUNTRY_AUSTRALIA:
*pu8MinCh=6;
*pu8MaxCh=69;
break;
case EN_SYS_COUNTRY_FRANCE:
*pu8MinCh=21;
*pu8MaxCh=65;
break;
case EN_SYS_COUNTRY_GERMANY:
*pu8MinCh=5;
*pu8MaxCh=69;
break;
case EN_SYS_COUNTRY_PORTUGAL:
case EN_SYS_COUNTRY_SPAIN:
case EN_SYS_COUNTRY_ITALY:
case EN_SYS_COUNTRY_HOLLAND:
default:
*pu8MinCh=21;
*pu8MaxCh=69;
break;
}
}
bool8 DVB_TunerGetParameter( DVB_COFDMParameters *pstParameter)
{
if ( pstParameter==NULL )
return FALSE;
if ( check_frontend_state()!= FRONTEND_FEC_LOCK )
{
pstParameter->enConstellation = EN_QPSK_ERR;
pstParameter->enHPCodeRate = EN_FEC_ERR;
pstParameter->enLPCodeRate = EN_FEC_ERR;
pstParameter->enGI = EN_GI_ERR;
pstParameter->enFFT = EN_FFT_ERR;
pstParameter->enHierarchy=EN_HIERARCHY_ERR;
}
else
get_COFDM_parameter(pstParameter);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -