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

📄 dvb_nim.c

📁 PHILIPS1316 tuner 驱动软件用于PHILIPS TDM1316 DVB-T tuner。经过实际测试。
💻 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 + -