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

📄 d0370vsb_drv.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
/* -------------------------------------------------------------------------
File Name: 370_drv.c

Description: 370 driver LLA

Copyright (C) 1999-2001 STMicroelectronics

History:
   date: 20-January-2005
version: 1.0.0
 author: AM
comment: 399ized version

---------------------------------------------------------------------------- */


/* includes ---------------------------------------------------------------- */

#include  <stdlib.h>

#ifdef HOST_PC
/*	generic includes	*/
#include "gen_macros.h"
	#include <utility.h>
	#include "math.h"
	#include "stdlib.h"
	#ifndef NO_GUI
		#include "stdio.h"
		#include "370_main.h"
		#include "370_VSB_Report_Msg.h"
		#include "pnl_report.h"
		#include "UserPar.h"
		#define REPORTMSG(a,b,c) Report370_VSB(a,b,c);  
	#else
		#define REPORTMSG(a,b,c) 
	#endif
#else
	#define REPORTMSG(a,b,c) 
#endif





/* STAPI */
#include "sttuner.h"
#include "sti2c.h"
#include "stcommon.h"
#include "sttbx.h"
#include "stevt.h"

/* local to sttuner */
#include "util.h"       /* generic utility functions for sttuner */
#include "dbtypes.h"    /* data types for databases */
#include "sysdbase.h"   /* functions to accesss system data */

#include "ioarch.h"     /* I/O for this driver */
#include"ioreg.h"

#include "tuntdrv.h"
/* common includes */
#include "d0370VSB.h" 
#include "370_VSB_drv.h"
#include "370_VSB_util.h"
#include "370_VSB_map.h"

/* Current LLA revision	*/
static ST_Revision_t Revision370VSB  = "STV0370VSB-LLA_REL_1.0(GUI) ";

#ifdef ST_OS21
#define WAIT_N_MS(X)     task_delay( (signed int)(X * (ST_GetClocksPerSecond() / 1000)) )   /*task_delay(X)*/
#else
#define WAIT_N_MS(X)     task_delay( (unsigned int)(X * (ST_GetClocksPerSecond() / 1000)) )   /*task_delay(X)*/
#endif
#define INRANGE(X,Y,Z) (((X<=Y) && (Y<=Z))||((Z<=Y) && (Y<=X)) ? 1 : 0)
#define MAKEWORD(X,Y) ((X<<8)+(Y))


const FE_370_LOOKUP_t FE_370_CN_LookUp ={
												
					44,
				    {
					 19,  16383,
					 20,  16144,													
					 30,  12823,
					 40,  10186,
					 50,  8091,
					 60,  64267,
					 70,  5105,
					 80,  4055,
					 90,  3221,
					 100, 2559,
					 110, 2032,
					 120, 1614,
					 130, 1282,
					 140, 1019,
					 150, 809,
					 160, 643,
					 170, 511,
					 180, 406,
					 190, 322,
					 200, 256,
					 210, 203,
					 220, 161,
					 230, 128,
					 240, 102,
					 250, 81,
					 260, 64,
					 270, 51,
					 280, 41,
					 290, 32,
					 300, 26,
					 310, 20,
					 320, 16,
					 330, 13,
					 340, 10,
					 350, 8,
					 360, 6,
					 370, 5,
					 380, 4,
					 390, 3,
					 400, 3,
					 410, 2,
					 420, 2,
					 430, 1,
					 440, 1,

				  }
				};
											

const FE_370_LOOKUP_t FE_370_BER_LookUp =	{
					    115,
					    {
						 0,	0,
						 126,	75,
						 260,	150,
						 387,	220,
						 533,	300,
						 681,	380,
						 831,	460,
						 981,	540,
						 1113,	610,
						 1265,	690,
						 1417,	770,
						 1570,	850,
						 1704,	920,
						 1858,	1000,
						 2051,	1100,
						 2244,	1200,
						 2438,	1300,
						 2633,	1400,
						 2828,	1500,
						 3023,	1600,
						 3219,	1700,
						 3416,	1800,
						 3613,	1900,
						 3810,	2000,
						 4007,	2100,
						 4205,	2200,
						 4404,	2300,
						 4602,	2400,
						 4801,	2500,
						 5000,	2600,
						 5199,	2700,
						 5399,	2800,
						 5599,	2900,
						 5799,	3000,
						 6000,	3100,
						 6200,	3200,
						 6401,	3300,
						 6602,	3400,
						 6803,	3500,
						 7005,	3600,
						 7207,	3700,
						 7409,	3800,
						 7611,	3900,
						 7813,	4000,
						 8015,	4100,
						 8218,	4200,
						 8421,	4300,
						 8624,	4400,
						 8827,	4500,
						 9030,	4600,
						 9234,	4700,
						 9437,	4800,
						 9641,	4900,
						 9845,	5000,
						 10049,	5100,
						 10253,	5200,
						 10458,	5300,
						 10662,	5400,
						 10867,	5500,
						 11072,	5600,
						 11276,	5700,
						 11481,	5800,
						 11687,	5900,
						 11892,	6000,
						 12097,	6100,
						 12303,	6200,
						 12508,	6300,
						 12714,	6400,
						 12920,	6500,
						 13126,	6600,
						 13332,	6700,
						 13538,	6800,
						 13745,	6900,
						 13951,	7000,
						 14158,	7100,
						 14364,	7200,
						 14571,	7300,
						 14778,	7400,
						 14985,	7500,
						 15192,	7600,
						 15399,	7700,
						 15606,	7800,
						 15814,	7900,
						 16021,	8000,
						 16229,	8100,
						 16436,	8200,
						 16644,	8300,
						 16852,	8400,
						 17060,	8500,
						 17268,	8600,
						 17476,	8700,
						 17684,	8800,
						 17892,	8900,
						 18100,	9000,
						 18309,	9100,
						 18517,	9200,
						 18726,	9300,
						 18935,	9400,
						 19143,	9500,
						 19352,	9600,
						 19561,	9700,
						 19770,	9800,
						 19979,	9900,
						 20188,	10000,
						 41397,	20000,
						 63009,	30000,
						84886,	40000,
						106964,	50000,
						129202,	60000,
						151574,	70000,
						174063,	80000,
						196653,	90000,
						219333,	100000,
						449751,	200000,
						684546,	300000,
					}
				};
/***********************************************************
**FUNCTION	::	Drv0361_GetLLARevision
**ACTION	::	Returns the 361 LLA driver revision
**RETURN	::	Revision361
***********************************************************/
ST_Revision_t Drv0370VSB_GetLLARevision(void)
{
	return (Revision370VSB);
}											

/*****************************************************
--FUNCTION	::	FE_370VSB_WaitTuner
--ACTION	::	Wait for tuner locked
--PARAMS IN	::	TimeOut	->	Maximum waiting time (in ms) 
--PARAMS OUT::	NONE
--RETURN	::	NONE
--***************************************************/
void FE_370VSB_WaitTuner(STTUNER_tuner_instance_t *TunerInstance,int TimeOut)
{
	int Time=0;
	BOOL TunerLocked = FALSE;
	ST_ErrorCode_t Error;
	
	while(!TunerLocked && (Time<TimeOut))
	{
		WAIT_N_MS(1);
		Error = (TunerInstance->Driver->tuner_IsTunerLocked)(TunerInstance->DrvHandle, &TunerLocked); 
		Time++;
	}
	Time--;
}

/*****************************************************
--FUNCTION	::	CheckTiming
--ACTION	::	Check for timing locked
--PARAMS IN	::	pParams->Ttiming	=>	Time to wait for timing loop locked
--PARAMS OUT::	pParams->State		=>	result of the check
--RETURN	::	NOTIMING if timing not locked, TIMINGOK otherwise
--***************************************************/
FE_370_VSB_SIGNALTYPE_t CheckTiming(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_370_VSB_InternalParams_t *pParams)
{
	U32 TimingLock,Time=0; 
	/*WAIT_N_MS(pParams->Ttiming);*/
	do
	{
	
	 WAIT_N_MS(1);
	 TimingLock=STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370_FREQ_LOCK);
	 Time++; 
	}while((TimingLock==0)&&(Time < pParams->Ttiming)); 
	
	
	if (STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370_FREQ_LOCK))
		pParams->State = TIMINGOK_370VSB;
	else
		pParams->State = NOTIMING_370VSB;
	
	return pParams->State;
}


/*****************************************************
--FUNCTION	::	CheckCarrier
--ACTION	::	Check for carrier founded
--PARAMS IN	::	pParams		=>	Pointer to SEARCHPARAMS structure
--PARAMS OUT::	pParams->State	=> Result of the check
--RETURN	::	NOCARRIER carrier not founded, CARRIEROK otherwise
--***************************************************/
FE_370_VSB_SIGNALTYPE_t CheckCarrier(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_370_VSB_InternalParams_t *pParams)
{
	U32 CarrierLock,Time=0;
	/*WAIT_N_MS(pParams->Tcarrier);*/
	do
	{
	
	 WAIT_N_MS(1);
	 CarrierLock=STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370_CY_LOCK);
	 Time++; 
	}while((CarrierLock==0)&&(Time < pParams->Tcarrier)); 
	
	
	if (STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370_CY_LOCK))
		pParams->State = CARRIEROK_370VSB;
	else
		pParams->State = NOCARRIER_370VSB;
		
	return pParams->State;
}


/*****************************************************
--FUNCTION	::	CheckData
--ACTION	::	Check for data founded
--PARAMS IN	::	pParams		=>	Pointer to SEARCHPARAMS structure    
--PARAMS OUT::	pParams->State	=> Result of the check
--RETURN	::	NODATA data not founded, DATAOK otherwise
--***************************************************/
FE_370_VSB_SIGNALTYPE_t CheckData(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_370_VSB_InternalParams_t *pParams)
{
	U32 DataLock,Time=0;
	pParams->State = NODATA_370VSB;   
	
	/*WAIT_N_MS(pParams->Tdata);*/			/*	Wait for data				*/    
	do
	{
	
	 WAIT_N_MS(1);
	 DataLock=STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370_FRMLOCK);
	 Time++; 
	}while((DataLock==0)&&(Time < pParams->Tdata)); 

	if (STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370_FRMLOCK))   /*	Read DATA LOCK indicator	*/
	{							
		pParams->State = DATAOK_370VSB; 
	}
	else
	{
		pParams->State = NODATA_370VSB;
	}

		
	return pParams->State;
}

FE_370_VSB_SIGNALTYPE_t CheckFSM1(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_370_VSB_InternalParams_t *pParams)
{
	U32 FSM1Lock,Time=0;
	/*WAIT_N_MS(pParams->TFSM1);*/					/*	Wait for FSM1 Locked				*/   
	pParams->State = NOFSM1_370VSB;   
	do
	{
	
	 WAIT_N_MS(1);
	 FSM1Lock=(STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370_MAINSTATE)==0x0A);
	 Time++; 
	}while((FSM1Lock==0)&&(Time < pParams->TFSM1)); 
	

	if (STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370_MAINSTATE)==0x0A)							/*	Read FSM1 LOCK indicator	*/
	{
		pParams->State = FSM1OK_370VSB; 
	}
	else
	{
		pParams->State = NOFSM1_370VSB; 
	}

		
	return pParams->State;
}

FE_370_VSB_SIGNALTYPE_t CheckFSM2(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_370_VSB_InternalParams_t *pParams)
{
	U32 FSM2Lock,Time=0;
	/*WAIT_N_MS(pParams->TFSM2);*/					/*	Wait for FSM2 Locked				*/   
	pParams->State = NOFSM2_370VSB;   
		do

⌨️ 快捷键说明

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