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

📄 d0360minidrv.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
	{
	/* no parameters set. Search completely automatic  */
	/* set guessed parameters to most plausible values */
	}
else
	{
/* 	hChip = pParams->hChip;		get the handle */
	
	pParams->Frequency=pSearch->Frequency;
	/* debug code */

	/* end debug code */
	pParams->Mode = pSearch->Mode;
	pParams->Guard = pSearch->Guard;
	pParams->Inv= pSearch->Inv;
	
	pParams->Force=pSearch->Force + ChipDemodGetField(FORCE)*2;
	pParams->ChannelBW = pSearch->ChannelBW; 
	
	if(pParams->ChannelBW != pParams->ChannelBWStatus)
	{
	   pParams->ChannelBWStatus=pParams->ChannelBW;
	   pParams->TrlNormRateTunning=FALSE;  
	   pParams->TrlNormRateFineTunning=FALSE;  
	}
	#ifndef HOST_PC
	if (pParams->ChannelBW == STTUNER_CHAN_BW_6M) 
	{
	   ChipDemodSetField(GAIN_SRC_HI,M6_F_GAIN_SRC_HI); 
	   ChipDemodSetField(GAIN_SRC_LO,M6_F_GAIN_SRC_LO); 
	   /*ChipSetRegisters(hChip,R_GAIN_SRC1,2); */
	   if(pParams->Channel_6M_Trl_Done == FALSE)
           {
	      /*if(pParams->Tuner == STTUNER_TUNER_DTT7592)
	      {
	         ChipSetFieldImage(hChip,TRL_NOMRATE_LSB,0x00);
	         ChipSetFieldImage(hChip,TRL_NOMRATE_LO,0xFE); 
	         ChipSetFieldImage(hChip,TRL_NOMRATE_HI,0x40); */

              temp_image[0]= 0x00; temp_image[1]=0xFE; temp_image[2]=0x40;

              /*}
              else
              {
                 ChipSetFieldImage(hChip,TRL_NOMRATE_LSB,M6_F_TRL_NOMRATE0);
	         ChipSetFieldImage(hChip,TRL_NOMRATE_LO,M6_F_TRL_NOMRATE8_1); 
	         ChipSetFieldImage(hChip,TRL_NOMRATE_HI,M6_F_TRL_NOMRATE16_9); 
	      } */
	   }  /*** end of if(pParams->Channel_6M_Trl_Done == FALSE)**/
	   else
	   {
	      /*ChipSetFieldImage(hChip,TRL_NOMRATE_LSB,pParams->Channel_6M_Trl[0]);
	      ChipSetFieldImage(hChip,TRL_NOMRATE_LO,pParams->Channel_6M_Trl[1]); 
	      ChipSetFieldImage(hChip,TRL_NOMRATE_HI,pParams->Channel_6M_Trl[2]);*/
	     temp_image[0]= pParams->Channel_6M_Trl[0]; 
	     temp_image[1]= pParams->Channel_6M_Trl[1]; 
	     temp_image[2]= pParams->Channel_6M_Trl[2];
	    	   
	   }/*** end of ELSE of if(pParams->Channel_6M_Trl_Done == FALSE)*/
	 /*ChipSetRegisters(hChip,R_TRL_CTL,3);*/
 	}
	else if ((pParams->ChannelBW == STTUNER_CHAN_BW_7M)) 
	{
	   ChipDemodSetField(GAIN_SRC_HI,M7_F_GAIN_SRC_HI); 
	   ChipDemodSetField(GAIN_SRC_LO,M7_F_GAIN_SRC_LO); 
	   
	   if(pParams->Channel_7M_Trl_Done == FALSE)
           {
	     

             temp_image[0]= 0x00; temp_image[1]=0xD3; temp_image[2]=0x4B; 
			 
		
	   }/*** end of  if(pParams->Channel_7M_Trl_Done == FALSE) **/
	   else
	   {
	         temp_image[0]= pParams->Channel_7M_Trl[0]; 
		 temp_image[1]= pParams->Channel_7M_Trl[1]; 
		 temp_image[2]= pParams->Channel_7M_Trl[2];
	   } 
	   /*ChipSetRegisters(hChip,R_TRL_CTL,3);*/
	}
	else /* Channel Bandwidth = 8M) */
	{
	  /* ChipSetFieldImage(hChip,GAIN_SRC_HI,M8_F_GAIN_SRC_HI); 
	   ChipSetFieldImage(hChip,GAIN_SRC_LO,M8_F_GAIN_SRC_LO); 
	   ChipSetRegisters(hChip,R_GAIN_SRC1,2); */
	   ChipDemodSetField(GAIN_SRC_HI,M8_F_GAIN_SRC_HI); 
	   ChipDemodSetField(GAIN_SRC_LO,M8_F_GAIN_SRC_LO); 
	   
	   if(pParams->Channel_8M_Trl_Done == FALSE)
           {
	     
			 temp_image[0]= 0x00; temp_image[1]=0xA8; temp_image[2]=0x56; 
              	      
	   }/*** end of if(pParams->Channel_8M_Trl_Done == FALSE) **/
	   else
	   {
	     		 temp_image[0]= pParams->Channel_8M_Trl[0]; 
		 temp_image[1]= pParams->Channel_8M_Trl[1]; 
		 temp_image[2]= pParams->Channel_8M_Trl[2];
	            
	   }/*** end of ELSE of if(pParams->Channel_8M_Trl_Done == FALSE) **/
	   
	}
    	temp_image[0] = (temp_image[0] &0x80)|(ChipDemodGetField(R_TRL_CTL))&0x7f;
	error=STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R_TRL_CTL, 0,0, temp_image, 3, FALSE);
	
	#endif
	pParams->EchoPos   = pSearch->EchoPos;
	
	ChipDemodSetField(LONG_ECHO,pParams->EchoPos);
	/*   dcdc */

	#ifdef HOST_PC
	repeator = TunerGetRepeator();	
	TunerSetRepeator(1);	
	#endif
	/*FE_360_TunerSet(TunerInstance->DrvHandle,&pParams->Frequency,(STTUNER_TunerType_t)pParams->Tuner);   */

        /** error checking is done here for the fix of the bug GNBvd20315 **/
   error=FE_360_TunerSet(TunerInstance->DrvHandle,(FE_360_InternalParams_t*)pParams);   
	if(error != FE_NO_ERROR )
	{
	   return error;
	} 
	
	/*TunerSetRepeator(0);*/
	/*   dcdc */
	
	
	
	ChipDemodSetField(VTH0,0x1E);
	ChipDemodSetField(VTH1,0x14);
	ChipDemodSetField(VTH2,0xF);
	ChipDemodSetField(VTH3,0x9);
	ChipDemodSetField(VTH4,0x0);
	ChipDemodSetField(VTH5,0x5);

	ChipDemodSetField(R_PR,0xAF);
	ChipDemodSetField(R_VSEARCH,0x30);
	ChipDemodSetField(FORCE,(pParams->Force & 1) );
	ChipDemodSetField(FRAPTCR,1);
	

		if  (pParams->Inv == STTUNER_INVERSION_NONE)
		
					ChipDemodSetField(INV_SPECTR,1);					
		
		else if  (pParams->Inv == STTUNER_INVERSION) 									
		
						ChipDemodSetField(INV_SPECTR,0);					
					
		else if (pParams->Inv == STTUNER_INVERSION_AUTO) 									
				{
					if (pParams->Sense==1) ChipDemodSetField(INV_SPECTR,0);
					else ChipDemodSetField(INV_SPECTR,1); 
				}
		else if ( (pParams->Inv == STTUNER_INVERSION_UNK) && (!pParams->first_lock))
				{
					if (pParams->Sense==1) ChipDemodSetField(INV_SPECTR,0);
					else ChipDemodSetField(INV_SPECTR,1); 					
				}

	}
      
      return error;
	
}


/*****************************************************
--FUNCTION	::	FE_360_Search
--ACTION	::	Search for a valid transponder
--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_Search(FE_360_InternalParams_t *pParams, FE_360_SearchParams_t	*pSearch, FE_360_SearchResult_t *pResult,STTUNER_tuner_instance_t *TunerInstance)

{

        
        FE_360_Error_t error = FE_NO_ERROR;
		
	if ((void*) pParams == NULL)  error =  FE_INVALID_HANDLE;
	else 
		{
		
		/** error checking is done here for the fix of the bug GNBvd20315 **/
		error=FE_360_SearchInit(pParams,pSearch,TunerInstance);        
	 	if(error != FE_NO_ERROR)
	 	{
	 	   return error ;
	 		
	        }  
	
		if ((pParams->Frequency == 0) || (pParams->Tuner == STTUNER_TUNER_NONE))
		{
			error = FE_MISSING_PARAMETER;
		}
		else  
			{
		
	  		/*dcdc	pParams->State = FE_360_SearchRun((FE_360_InternalParams_t *)Handle);*/
				
			    pParams->State = FE_360_SearchRun(pParams,TunerInstance);
								
	  		    FE_360_SearchTerm(pParams,pResult);

		         }
		
				}/** end of first else **/
	
	return error;
}


/*****************************************************
--FUNCTION	::	FE_360_Term
--ACTION	::	Terminate STV0360 chip connection
--PARAMS IN	::	Handle	==>	Front End Handle
--PARAMS OUT::	NONE
--RETURN	::	Error (if any)
--***************************************************/
void	FE_360_Term(void)
{
	
	memory_deallocate(DEMODInstance->MemoryPartition, Params);

	
}

/*****************************************************
--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(FE_360_InternalParams_t *pParams, FE_360_SearchParams_t	*pSearch, FE_360_SearchResult_t *pResult,STTUNER_tuner_instance_t *TunerInstance)

{
	
	FE_360_SearchParams_t	 pLook; 

	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;
		
	
	if ((void*)pParams == NULL)  error =  FE_INVALID_HANDLE;
	else 
		{
		
	/*	pParams=(FE_360_InternalParams_t *) Handle;*/
		frequency		= pSearch->Frequency;		
		
		pLook.Frequency	= pSearch->Frequency;
		pLook.Mode 		= pSearch->Mode;
		pLook.Guard		= pSearch->Guard;
		pLook.Inv		= pSearch->Inv;		
		pLook.Offset	= pSearch->Offset;
		pLook.Force     = pSearch->Force;
		pLook.ChannelBW	= pSearch->ChannelBW;
		pLook.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 */
			pLook.Frequency = frequency+delta_freq * STEP;
					
			/** error checking is done here for the fix of the bug GNBvd20315 **/
			error=FE_360_Search(pParams,&pLook,pResult,TunerInstance); 

⌨️ 快捷键说明

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