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

📄 d0372_drv.c

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

Description: 372 driver LLA

Copyright (C) 2005-206 STMicroelectronics

History:
   date: 16-December-2005
version: 1.0.0
 author: 
comment: 

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


/* includes ---------------------------------------------------------------- */
/* C libs */
#ifdef ST_OSLINUX
   #include "stos.h"
#else
#include  <stdlib.h>
#include "sttbx.h"
#endif


/* STAPI */
#include "sttuner.h"
#include "sti2c.h"
#include "stcommon.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 "d0372.h" 
#include "d0372_drv.h"
#include "d0372_util.h"
#include "d0372_map.h"

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

#if defined (ST_OS21) || defined(ST_OSLINUX)
#define WAIT_N_MS_372(X)     task_delay( (signed int)(X * (ST_GetClocksPerSecond() / 1000)) )   /*task_delay(X)*/
#else
#define WAIT_N_MS_372(X)     task_delay( (unsigned int)(X * (ST_GetClocksPerSecond() / 1000)) )   /*task_delay(X)*/
#endif

const FE_372_LOOKUP_t FE_372_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_372_LOOKUP_t FE_372_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 Drv0372_GetLLARevision(void)
{
	return (Revision372);
}											

/*****************************************************
--FUNCTION	::	FE_372_WaitTuner
--ACTION	::	Wait for tuner locked
--PARAMS IN	::	TimeOut	->	Maximum waiting time (in ms) 
--PARAMS OUT::	NONE
--RETURN	::	NONE
--***************************************************/
void FE_372_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_372(1);
		Error = (TunerInstance->Driver->tuner_IsTunerLocked)(TunerInstance->DrvHandle, &TunerLocked); 
		Time++;
	}
	Time--;
}

/*****************************************************
--FUNCTION	::	CheckTiming_372
--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_372_SIGNALTYPE_t CheckTiming_372(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_372_InternalParams_t *pParams)
{
	U32 TimingLock,Time=0; 
	do
	{
	
	 WAIT_N_MS_372(1);
	 TimingLock=STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0372_FREQ_LOCK);
	 Time++; 
	}while((TimingLock==0)&&(Time < pParams->Ttiming)); 
	
	
	if (STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0372_FREQ_LOCK))
		pParams->State = TIMINGOK_372;
	else
		pParams->State = NOTIMING_372;
	
	return pParams->State;
}


/*****************************************************
--FUNCTION	::	CheckCarrier_372
--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_372_SIGNALTYPE_t CheckCarrier_372(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_372_InternalParams_t *pParams)
{
	U32 CarrierLock,Time=0;
	/*WAIT_N_MS_372(pParams->Tcarrier);*/
	do
	{
	
	 WAIT_N_MS_372(1);
	 CarrierLock=STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0372_CY_LOCK);
	 Time++; 
	}while((CarrierLock==0)&&(Time < pParams->Tcarrier)); 
	
	
	if (STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0372_CY_LOCK))
		pParams->State = CARRIEROK_372;
	else
		pParams->State = NOCARRIER_372;
		
	return pParams->State;
}


/*****************************************************
--FUNCTION	::	CheckData_372
--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_372_SIGNALTYPE_t CheckData_372(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_372_InternalParams_t *pParams)
{
	U32 DataLock,Time=0;
	pParams->State = NODATA_372;   
	
	/*WAIT_N_MS_372(pParams->Tdata);*/			/*	Wait for data				*/    
	do
	{
	
	 WAIT_N_MS_372(1);
	 DataLock=STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0372_FRMLOCK);
	 Time++; 
	}while((DataLock==0)&&(Time < pParams->Tdata)); 

	if (STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0372_FRMLOCK))   /*	Read DATA LOCK indicator	*/
	{							
		pParams->State = DATAOK_372; 
	}
	else
	{
		pParams->State = NODATA_372;
	}

		
	return pParams->State;
}

FE_372_SIGNALTYPE_t CheckFSM1_372(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_372_InternalParams_t *pParams)
{
	U32 FSM1Lock,Time=0;
	/*	Wait for FSM1 Locked				*/   
	pParams->State = NOFSM1_372;   
	do
	{
	
	 WAIT_N_MS_372(1);
	 FSM1Lock=(STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0372_MAINSTATE)==0x0A);
	 Time++; 
	}while((FSM1Lock==0)&&(Time < pParams->TFSM1)); 
	

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

		
	return pParams->State;
}

FE_372_SIGNALTYPE_t CheckFSM2_372(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_372_InternalParams_t *pParams)
{
	U32 FSM2Lock,Time=0;
	/*	Wait for FSM2 Locked				*/   
	pParams->State = NOFSM2_372;   
		do
	{
	
	 WAIT_N_MS_372(1);
	 FSM2Lock=(STTUNER_IOREG_GetField(DeviceMap,IOHandle,F0372_EQSTATE)==0x05);
	 Time++; 
	}while((FSM2Lock==0)&&(Time<pParams->TFSM2)); 

	if (STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0372_EQSTATE)==0x05)							/*	Read FSM2 LOCK indicator	*/
	{
		pParams->State = FSM2OK_372; 
	}
	else
	{
		pParams->State = NOFSM2_372; 
	}

		
	return pParams->State;
}

/*****************************************************
**FUNCTION	::	FE_372_SetInternalError
**ACTION	::	Set the internal error value and location 
**PARAMS IN	::	Type		==> Type of the error
**				Location	==> Location of the error
**PARAMS OUT::	pError
**RETURN	::	NONE
*****************************************************/
void FE_372_SetInternalError(FE_372_ErrorType_t Type,FE_372_Location_t Location,FE_372_InternalError_t *pError)
{
	if(pError != NULL)
	{
		pError->Type = Type;
		pError->Location = Location;
	}
}


FE_372_Error_t STV0372_SetCarrier(STTUNER_IOREG_DeviceMap_t *DeviceMap,IOARCH_Handle_t IOHandle,U32 IF,int clk,U32 IQMode)
{
	FE_372_Error_t error = FE_372_NO_ERROR;
	S32 IFfrequency;
	if(IQMode == STTUNER_INVERSION)
	{
	IFfrequency=(S32)(IF*1000 - clk);
        }
        else
        {
        	IFfrequency=(S32)(2*clk-IF*1000);
        }
	
	UTIL_372_Set_NCOcnst_Regs(DeviceMap,IOHandle,(int)UTIL_372_Calc_NCOcnst(IFfrequency,clk));
	
	
	return error;
}

FE_372_Error_t STV0372_SetTiming(STTUNER_IOREG_DeviceMap_t *DeviceMap,IOARCH_Handle_t IOHandle,int clk)
{
	FE_372_Error_t error = FE_372_NO_ERROR;
		
	 UTIL_372_Set_vcxoOffset_Regs(DeviceMap,IOHandle,(int)UTIL_372_Calc_vcxoOffset(SYMBOLRATE_372,clk));
		
	return error;
}



/*****************************************************
--FUNCTION	::	FE_372_Algo
--ACTION	::	Search for Signal, Timing, Carrier and then data at a given Frequency, 
--				in a given range
--PARAMS IN	::	NONE
--PARAMS OUT::	NONE
--RETURN	::	Type of the founded signal (if any)
--***************************************************/
FE_372_SIGNALTYPE_t FE_372_Algo(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_372_InternalParams_t *pParams,STTUNER_Handle_t TopLevelHandle)
{
        S32 EQResetNb;
	S32 EQState,MAINState;
	STTUNER_InstanceDbase_t *Inst;
        STTUNER_tuner_instance_t *TunerInstance; 
        ST_ErrorCode_t              Error = ST_NO_ERROR;
       	U8 EnableEQreset=1;
	U32 FirstWatchdog,FirstTimeOutEQ,Watchdog,TimeOutEQ;
	S32 powerestimation;

⌨️ 快捷键说明

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