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

📄 d0360_drv.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
























}

/*****************************************************
--FUNCTION	::	FE_360_LookFor
--ACTION	::	Intermediate layer before launching Search
--PARAMS IN	::	Handle	==>	Front End Handle
				pSearch ==> Search parameters
				pResult ==> Result of the search
--PARAMS OUT::	NONE
--RETURN	::	Error (if any)
--***************************************************/

FE_360_Error_t	FE_360_LookFor(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle, FE_360_SearchParams_t	*pSearch, FE_360_SearchResult_t *pResult,STTUNER_tuner_instance_t *TunerInstance)

{
	
	 

	U8 trials[6];
	S8 num_trials,index;
	FE_360_Error_t error = FE_NO_ERROR;
	U8 flag_spec_inv;
	U8 flag_freq_off;
	U32 frequency;
	U8 flag,inv;
	S8 delta_freq;
	FE_360_InternalParams_t pParams;	
	
		





		frequency		= pSearch->Frequency;		
		
		pParams.I2Cspeed = SpeedInit(DeviceMap,IOHandle);  
			pParams.prev_lock_status = NO_LOCK;
			pParams.first_lock=0;










			/****Initialize TRLNORMRATE TUNNING FLAG*****/
			pParams.TrlNormRateFineTunning = FALSE ;
			/***Initialize channel bandwidth value with a common value as the particular channel
			    bandwidth still not known*****/
			pParams.ChannelBWStatus = STTUNER_CHAN_BW_NONE ;
		
		/************************/
		
		
		pParams.Frequency=pSearch->Frequency;
		pParams.Frequency	= pSearch->Frequency;
		pParams.Mode 		= pSearch->Mode;
		pParams.Guard		= pSearch->Guard;
		pParams.Inv		= pSearch->Inv;		
		pParams.Offset	= pSearch->Offset;
		pParams.Force     = pSearch->Force;
		pParams.ChannelBW	= pSearch->ChannelBW;
		pParams.EchoPos   = pSearch->EchoPos;
		pParams.Hierarchy = pSearch->Hierarchy;
		pParams.Tuner=TunerInstance->Driver->ID;
		pParams.Quartz=0;
		pParams.TrlNormRateTunning=FALSE;
	
	
	
	if(pParams.ChannelBW != pParams.ChannelBWStatus)
	{
	   pParams.ChannelBWStatus=pParams.ChannelBW;
	   pParams.TrlNormRateFineTunning=FALSE;   
	}
	
	
	
			pParams.Channel_6M_Trl_Done = FALSE;
			pParams.Channel_7M_Trl_Done = FALSE;
			pParams.Channel_8M_Trl_Done = FALSE;
			/****Initial normrate setting for 6 Mhz bandwidth***/
			pParams.Channel_6M_Trl[0]=M6_F_TRL_NOMRATE0;
			pParams.Channel_6M_Trl[1]=M6_F_TRL_NOMRATE8_1;
			pParams.Channel_6M_Trl[2]=M6_F_TRL_NOMRATE16_9;
			
			/****Initial normrate setting for 7 Mhz bandwidth***/
			pParams.Channel_7M_Trl[0]=M7_F_TRL_NOMRATE0;
			pParams.Channel_7M_Trl[1]=M7_F_TRL_NOMRATE8_1;
			pParams.Channel_7M_Trl[2]=M7_F_TRL_NOMRATE16_9;
			
			/****Initial normrate setting for 8 Mhz bandwidth***/
			pParams.Channel_8M_Trl[0]=M8_F_TRL_NOMRATE0;
			pParams.Channel_8M_Trl[1]=M8_F_TRL_NOMRATE8_1;
			pParams.Channel_8M_Trl[2]=M8_F_TRL_NOMRATE16_9;
	
	
	pParams.State	=NODATA;
	pParams.EchoPos   = pSearch->EchoPos;	
	
	
	
	
	
	
		pParams.Offset	= pSearch->Offset;
		pParams.Inv	= pSearch->Inv;		
		pParams.Delta	= 0;

		flag_spec_inv	= 0;		
		flag_freq_off	= 0;
		flag			= pSearch->Offset*2 + ((pSearch->Inv>>1)&1);		
					
			switch (flag)
			{
			
			case 0:
			trials[0]=NINV_NOFF;
			trials[1]= INV_NOFF;			
			if ( (pParams.Inv == STTUNER_INVERSION_NONE) || (pParams.Inv == STTUNER_INVERSION))
				{
					num_trials=1;
				}
				
			else
				num_trials=2;
			
			if ( (pParams.first_lock)	&& (pParams.Inv == STTUNER_INVERSION_UNK))
				{
					num_trials=1;	
				}
			break;
			
			case 1:
			trials[0]= NINV_NOFF;
			trials[1]=  INV_NOFF;
			num_trials=2;
			break;
			
			case 2:
			if ((pParams.prev_lock_status)==(LOCK_NO_OFF))
				{
				trials[0] = NINV_NOFF;
				trials[1] = NINV_ROFF;
				trials[2] =  INV_NOFF;									
				trials[3] =  INV_ROFF;									
				if ( (pParams.Inv == STTUNER_INVERSION_NONE) || (pParams.Inv == STTUNER_INVERSION))
				{
					num_trials=2;
				}
				else	num_trials= 4;
			
				
				if ( (pParams.first_lock)	&& (pParams.Inv == STTUNER_INVERSION_UNK))
				{
					num_trials=2;	
				}
				
				
				}
			else if ((pParams.prev_lock_status)==(LOCK_RI_OFF))
				{
				
				trials[0] = NINV_ROFF;									
				trials[1] =  INV_ROFF;									
				if ( (pParams.Inv == STTUNER_INVERSION_NONE) || (pParams.Inv == STTUNER_INVERSION))
				{
					num_trials=1;
				}
				
				else	num_trials= 2;
		
				
				if ( (pParams.first_lock)	&& (pParams.Inv == STTUNER_INVERSION_UNK))
					{
						num_trials=1;	
					}
				}
			else
				{
				trials[0] = NINV_NOFF;
				trials[1] = NINV_LOFF;									
				trials[2] = NINV_ROFF;
				trials[3] =  INV_NOFF;
				trials[4] =  INV_LOFF;									
				trials[5] =  INV_ROFF;
				if ( (pParams.Inv == STTUNER_INVERSION_NONE) || (pParams.Inv == STTUNER_INVERSION))
				{
					num_trials=3;
				}
				
				else	num_trials= 6;
				
				
				
				if ( (pParams.first_lock)	&& (pParams.Inv == STTUNER_INVERSION_UNK))
					{
						num_trials=3;	
					}
				}
			break;
			case 3:
			
			default:
			if ((pParams.prev_lock_status)==(LOCK_NO_OFF))
				{
				trials[0] = NINV_NOFF;
				trials[1] = NINV_ROFF;									
				trials[2] =  INV_NOFF;
				trials[3] =  INV_ROFF;									
				/*
				if (pParams.first_lock) num_trials=2;
				else num_trials= 4;
				*/
				num_trials= 4;
				}
			else if ((pParams.prev_lock_status)==(LOCK_RI_OFF))
				{
				
				trials[0] = NINV_ROFF;									
				trials[1] =  INV_ROFF;									
				/*
				if (pParams.first_lock) num_trials=1;
				else num_trials= 2;
				*/
				num_trials= 2;
				}
			else
				{
				trials[0] = NINV_NOFF;
				trials[1] = NINV_LOFF;									
				trials[2] = NINV_ROFF;
				trials[3] =  INV_NOFF;
				trials[4] =  INV_LOFF;									
				trials[5] =  INV_ROFF;
				/*
				if (pParams.first_lock) num_trials=3;
				else num_trials= 6;
				*/
				num_trials= 6;
				}
			
			break;
			
			}
		
			
	
		pResult->SignalStatus=LOCK_KO;		
		index=0;
		pParams.prev_lock_status=NO_LOCK;
		
		while ( ( (index) < num_trials) && (pResult->SignalStatus!=LOCK_OK)) 		 
		{
			
			inv= trials[index]%2;
			
			if ((!pParams.first_lock)||(pParams.Inv == STTUNER_INVERSION_AUTO) || (pParams.Inv == STTUNER_INVERSION_UNK) ) 
				{
					pParams.Sense	=  inv; 
				}
			else
				{
					
				}
			
			delta_freq=(trials[index]/2)*2 - (trials[index]/4)*6; /*circular module */
			pParams.Frequency = frequency+delta_freq * STEP;
					
			/** error checking is done here for the fix of the bug GNBvd20315 **/
			error=FE_360_Search(DeviceMap,IOHandle,&pParams,pResult,TunerInstance); 
			if(error != FE_NO_ERROR)
			{
			   return error;
			}
			
			
			if ((pResult->SignalStatus == NOAGC) || (pResult->SignalStatus == NOSYMBOL) ) break;
		
			if ((pResult->SignalStatus==LOCK_OK))
				{
								
			   	switch(delta_freq)
					{
					case 0:
						pParams.prev_lock_status=LOCK_NO_OFF;	
						break;
			
					case 2:
						pParams.prev_lock_status=LOCK_RI_OFF;
						break;
				
					case -2:
						pParams.prev_lock_status=LOCK_LE_OFF;
						break;
				
					default:
						pParams.prev_lock_status=LOCK_LE_OFF;
						break;
				}
				
				}
			
			index++;
		}
		
		
		return  error;

}


/*----------------------------------------------------
FUNCTION      GetNoiseEstimator (18Oct01) 
ACTION
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
void FE_360_GetNoiseEstimator(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle, U32 *pNoise, U32 *pBer)
{
short unsigned int  source,prf;
U32                 quoz,error;
U32 snr=0;

error  = STTUNER_IOREG_GetField(DeviceMap,IOHandle,ERROR_COUNT1_LO);
error += STTUNER_IOREG_GetField(DeviceMap,IOHandle,ERROR_COUNT1_HI) * 256; 
error  = error*100;

quoz=1;
if (!STTUNER_IOREG_GetField(DeviceMap,IOHandle,ERRMODE1))
{
source=STTUNER_IOREG_GetField(DeviceMap,IOHandle,ERR_SOURCE1); 
quoz=FE_360_PowOf2(12+2*(STTUNER_IOREG_GetField(DeviceMap,IOHandle,NUM_EVENT1)));

switch (source)
{
case 0:
quoz=quoz*8;
prf=STTUNER_IOREG_GetField(DeviceMap,IOHandle,PR);

switch(prf)
{
case 0:
error=(U32)(error*(1/2)); /*gbgbcast*/ 
break;

case 1:
error=(U32)(error*(2/3)); /*gbgbcast*/ 
break;

case 2:
error=(U32)(error*(3/4)); /*gbgbcast*/ 
break;

case 3:
error=(U32)(error*(5/6)); /*gbgbcast*/ 
break;

case 4:
error=(U32)(error*(6/7)); /*gbgbcast*/
break;

case 5:
error=(U32)(error*(7/8)); /*gbgbcast*/ 
break;

default:
error=error;
break;

}
break;

case 1:
quoz=quoz*8;
break;

case 2:
break;

case 3:
error=error*188;
break;

default:
error=error;
break;
}
}

snr=STTUNER_IOREG_GetField(DeviceMap,IOHandle,CHC_SNR);
/**  fix done here for the bug GNBvd20972 where pNoise is calculated in right percentage **/
*pNoise=((snr/8)*100)/32;
*pBer   = error*(100000000/quoz);

return;
}



/*********************************************************
--FUNCTION	::	FE_360_Tracking
--ACTION	::	Once the chip is locked tracks its state
--PARAMS IN	::	period/duration of tracking in seconds
			::	Handle to Chip
--PARAMS OUT::	NONE
--RETURN	::	NONE
--********************************************************/
void FE_360_Tracking(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_360_SearchResult_t  *Result)
{

int change;
int locka,lockb,wd;
int pr,mod,pr_temp;
unsigned short int mode;
unsigned short int guard=3;

short int tempo;



				
				tempo=900;
				change=0;
				
				mode=Result->Mode;
				guard=Result->Guard;
				if (Result->hier==STTUNER_HIER_LOW_PRIO)
			  {
			     pr=Result->Lprate;
			  }
			  else
			  {
				pr=Result->Hprate;
			  }

⌨️ 快捷键说明

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