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

📄 362_drv.c

📁 STV0299 Minituner driver, for ST chipset
💻 C
📖 第 1 页 / 共 3 页
字号:
			 CPAMPMin=40; 
		break;
	}
	CPAMPvalue=0;
	
	for (idx=0; idx<4; idx++)
	
		CPAMPvalue+=ChipGetField(hChip,PPM_CPAMP_DIRECT); 		
		
	CPAMPvalue/=4;
	
	if (CPAMPvalue<CPAMPMin)
	   CPAMPStatus=NOCPAMP;
	else
	   CPAMPStatus=CPAMPOK;  
	
	return CPAMPStatus;
}

/*********************************************************
--FUNCTION	::	CheckTPS
--ACTION	::	Get TPS status
--PARAMS IN	::	Handle to the Chip 
--PARAMS OUT::	TPS Lock status
--********************************************************/
FE_362_SignalStatus_t CheckTPS(STCHIP_Handle_t hChip)
{
	
	S32 mode, TPSLock, Tempo, Time=0;        
	
	mode= ChipGetField(hChip,SYR_MODE);
	
	switch(mode)
	{
		case 0: /*2k mode*/
			 Tempo=65;
		break;
		
		case 1: /*8k mode*/
			 Tempo=260; 
		break;
		
		case 2: /*4k mode*/
			 Tempo=130; 
		break;
		
		default:
		break;
	}
	
	do
	{
	
	 WAIT_N_MS(1);
	 TPSLock=ChipGetField(hChip,TPS_LOCK);
	 Time++;
	 
	}while((TPSLock==0)&&(Time<Tempo)); 
	
	if (ChipGetField(hChip,TPS_LOCK))
		TPSLock = TPSOK;
	else
		TPSLock = NOTPS;
		
	return TPSLock;
	

}


/*********************************************************
--FUNCTION	::	CheckPR
--ACTION	::	Check if Punture rate is found or not 
--PARAMS IN	::	Handle to the Chip 
--PARAMS OUT::	TPS Lock status
--********************************************************/
FE_362_SignalStatus_t CheckPR(STCHIP_Handle_t hChip)
{
	
	S32 mode, Lock, Tempo, Time=0;        
	
	mode= ChipGetField(hChip,LK);
	
	switch(mode)
	{
		case 0: /*2k mode*/
			 Tempo=75;
		break;
		
		case 1: /*8k mode*/
			 Tempo=300; 
		break;
		
		case 2: /*4k mode*/
			 Tempo=150; 
		break;
		
		default:
		break;
	}
	
	do
	{
	
	 WAIT_N_MS(1);
	 Lock=ChipGetField(hChip,LK);
	 Time++;
	 
	}while((Lock==0)&&(Time<Tempo)); 
	
	if (ChipGetField(hChip,PRF))
		Lock = LOCKOK;
	else
		Lock = NOLOCK;
		
	return Lock;
	

}



/*********************************************************
--FUNCTION	::	CheckPR
--ACTION	::	Check if Punture rate is found or not 
--PARAMS IN	::	Handle to the Chip 
--PARAMS OUT::	TPS Lock status
--********************************************************/
FE_362_SignalStatus_t CheckLOCK(STCHIP_Handle_t hChip)
{
	
	S32 mode, PRFound, Tempo, Time=0;        
	
	mode= ChipGetField(hChip,PRF);
	
	switch(mode)
	{
		case 0: /*2k mode*/
			 Tempo=36;
		break;
		
		case 1: /*8k mode*/
			 Tempo=144; 
		break;
		
		case 2: /*4k mode*/
			 Tempo=72; 
		break;
		
		default:
		break;
	}
	
	do
	{
	
	 WAIT_N_MS(1);
	 PRFound=ChipGetField(hChip,PRF);
	 Time++;
	 
	}while((PRFound==0)&&(Time<Tempo)); 
	
	if (ChipGetField(hChip,PRF))
		PRFound = PRFOUNDOK;
	else
		PRFound = NOPRFOUND;
		
	return PRFound;
	

}




/*********************************************************
--FUNCTION	::	CheckEPQ
--ACTION	::	calculate I2C speed (for SystemWait ...)
--PARAMS IN	::	Handle to the Chip
--PARAMS OUT::	NONE
--RETURN	::	
--********************************************************/
void CheckEPQ(STCHIP_Handle_t hChip,FE_OFDMEchoParams_t *Echo)
{													
	unsigned short int epq,mode,epq_limit;
	U8 epq_auto= 0;
	/********* To check the status of auto epq**********/
	epq_auto=ChipGetField(hChip,AUTO_LE_EN);

	if(epq_auto==1)
	{
	   return;
	}

		mode=ChipGetField(hChip,SYR_MODE);
		epq=Get_EPQ(hChip,0);
		epq_limit=(6<<(2*mode));


		if ( epq > epq_limit )
		{
		Ack_long_scan(hChip);
		}

		return;
}

/*****************************************************
--FUNCTION	::	FE_362_SearchRun
--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)

--REMARKS   ::  This function is supposed to replace FE_362_SearchRun according
--				to last findings on SYR block
--***************************************************/
FE_362_SignalStatus_t FE_362_Algo(FE_362_InternalParams_t *pParams)//,STTUNER_tuner_instance_t *TunerInstance)
{


	/*int dbg_var;*//* debug var */
	STCHIP_Handle_t hChip;
	FE_362_SignalStatus_t ret_flag;	
	short int wd,/*ii,*/tempo;
	unsigned short int ppm,try,u_var,mode,guard,seuil;
	#ifdef HOST_PC
//	FILE *fp,*fn;
	/* debug variables */
//	static unsigned short int dbg_failure=0;
	#endif
	
	hChip = pParams->hDemod;
	try=0;
	do
	{
			ret_flag=LOCKOK;     
	
			ChipSetField(hChip,MODE,pParams->Mode);
			ChipSetField(hChip,GUARD,pParams->Guard);		
			ChipSetField(hChip, FORCE,pParams->Force);
	
			ChipSetField(hChip,CORE_ACTIVE,0);
			
			if(pParams->IF_IQ_Mode!=0)
			ChipSetField(hChip,COM_N,0x07);
			
			WAIT_N_MS(5);
			 

			ChipSetField(hChip,CORE_ACTIVE,1);

			u_var=ChipGetField(hChip,AGC_LOCK);
			wd=70;
		
			while ((u_var==0) && (wd>0))
			{
				WAIT_N_MS(10);	
				wd-=10;
				u_var=ChipGetField(hChip,AGC_LOCK);
			}
			
			if(!u_var)
			{
				ret_flag=NOAGC;
				
				break;
			}
					
			wd=120; /* dcdc modifs gbgb */
			
			
			u_var=ChipGetField(hChip,SYR_LOCK);
	
			while ( (!u_var) && (wd>0))
			{
				WAIT_N_MS(5);
				wd-=5;
				u_var=ChipGetField(hChip,SYR_LOCK);
			}
			if(!u_var)
			{
				ret_flag=NOSYMBOL;
				break;
			}

			mode =ChipGetField(hChip,SYR_MODE) ;
			guard=ChipGetField(hChip,SYR_GUARD);
			#ifndef DAV
			/************************************************/
				if(mode == STTUNER_MODE_2K)
			{
			   ChipSetOneRegister(hChip,R_CHP_TAPS,0x01); /***For 2k mode the chp_taps reg. must
			                                               ***always set to 0x01***/
			}
			else
			{
			   ChipSetOneRegister(hChip,R_CHP_TAPS,0x03);/***For 8k mode the chp_taps reg. must
			                                               ***always set to 0x03***/
			}
			#endif
			
			/******* CHARANJIB ********************************/
			switch(mode)
			{
			case 0:
			case 1:
			tempo=30<<(2*mode);
			break;
			case 2:
			break;
			
			}
			WAIT_N_MS(tempo);
		
			
			ppm=0;
			tempo=1<<(2*mode);
			/**************************/
			#if 0
			for (ii=0;ii<4;ii++) 
			{
				ppm+=ChipGetField(hChip,PPM_CPC);
				WAIT_N_MS(tempo);
			}
			if (ppm< (CPQ_LIMIT <<(2*mode + 2)) ) 
				{
				ret_flag=BAD_CPQ;
				}
			else
				{
				try=try;
				}
			#endif
			/**************************/
			if (CheckCPAMP(hChip)==NOCPAMP)
			ret_flag=NOCPAMP;
			try++;
			
	} while ( (try<2) && (ret_flag!=LOCKOK) );
	
	if ( ret_flag!=LOCKOK) 
	{
		return ret_flag;
	}
	
	

	
			u_var=ChipGetField(hChip,TPS_LOCK);
			
			
			wd=65<<(2*mode); 
			tempo=4<<(2*mode);			
			while ((!u_var) && (wd>0))
			{
			WAIT_N_MS(tempo);
			wd-= tempo;
			u_var=ChipGetField(hChip,TPS_LOCK);
			}
			
			if (!u_var) 
			{
			return NOTPS;
			}
			
			tempo= (14<<(2*mode));
			WAIT_N_MS(tempo); /*	dcdc wait for EPQ to be reliable*/
			guard=ChipGetField(hChip,SYR_GUARD);
			if (guard== (unsigned short int )STTUNER_GUARD_1_4) CheckEPQ(hChip,&pParams->Echo);
			wd=36<<(2*mode);		

			u_var=ChipGetField(hChip,PRF);
			tempo=4<<(2*mode);
			while ( (!u_var) && (wd>=0.0))
			{
			
			WAIT_N_MS(tempo);
			wd-=(tempo);
			u_var=ChipGetField(hChip,PRF);
			}
			
			if(!u_var)
			{
			return NOPRFOUND;
			}
			
			u_var=ChipGetField(hChip,LK);
			
			wd=75<<(2*mode);/* a revoir */   
			tempo=4<<(2*mode) ;
			while ((!u_var) && (wd>=0))
			{
			WAIT_N_MS( tempo);
			wd-=tempo;
			u_var=ChipGetField(hChip,LK);
			}
			
			if(!u_var)
			{
			return NOPRFOUND;
			}
	
	
	if(pParams->IF_IQ_Mode!=0)
	
	{
	 tempo=0;
	 while (((ChipGetField(hChip,COM_USEGAINTRK)!=1)&&(ChipGetField(hChip,COM_AGCLOCK)!=1))&&(tempo<1000))
	 {
	  WAIT_N_MS(1);
	  tempo+=1;
	 }
	 ChipSetField(hChip,COM_N,0x17);   
	}
	/* lock/secure the FEC for HP*/
	u_var=ChipGetField(hChip,TPS_HPCODE);
	if (u_var==4 ) u_var=5;
	switch(u_var)
	{
	case 0:
	seuil=ChipGetField(hChip,VTH0);
	
	if (seuil <60) ChipSetField(hChip,VTH0,45);
	break;
	case 1:
	seuil=ChipGetField(hChip,VTH1);
	if (seuil < 40) ChipSetField(hChip,VTH1,30);
	break;
	case 2:
	seuil=ChipGetField(hChip,VTH2);
	if (seuil < 30) ChipSetField(hChip,VTH2,23);
	break;
	case 3:
	seuil=ChipGetField(hChip,VTH3);
	if (seuil < 18) ChipSetField(hChip,VTH3,14);
	break;
	case 5:
	seuil=ChipGetField(hChip,VTH5);
	if (seuil < 10) ChipSetField(hChip,VTH5,8);
	break;
	default:
	break;
	
						   
	}
	
	/* lock/secure the FEC for LP (if needed)*/
	if (ChipGetField(hChip,TPS_HIERMODE)!=0)
	{
		u_var=ChipGetField(hChip,TPS_LPCODE);
		if (u_var==4 ) u_var=5;
		switch(u_var)
		{
		case 0:
		seuil=ChipGetField(hChip,VTH0);
	
		if (seuil <60) ChipSetField(hChip,VTH0,45);
		break;
		case 1:
		seuil=ChipGetField(hChip,VTH1);
		if (seuil < 40) ChipSetField(hChip,VTH1,30);
		break;
		case 2:
		seuil=ChipGetField(hChip,VTH2);
		if (seuil < 30) ChipSetField(hChip,VTH2,23);
		break;
		case 3:
		seuil=ChipGetField(hChip,VTH3);
		if (seuil < 18) ChipSetField(hChip,VTH3,14);
		break;
		case 5:
		seuil=ChipGetField(hChip,VTH5);
		if (seuil < 10) ChipSetField(hChip,VTH5,8);
		break;
		default:
		break;
	
		}
	}	
	
	
	if (ChipGetField(hChip,TPS_HIERMODE)==0)	
		{
		u_var=ChipGetField(hChip,TPS_HPCODE);
		if (u_var==4 ) u_var=5;    
		u_var= (1<<u_var);
		ChipSetOneRegister(hChip,R_PR,u_var);  
		ChipSetFieldImage(hChip,PR_AUTO,1);
		ChipSetFieldImage(hChip,PR_FREEZE,0);
		ChipSetRegisters(hChip,R_VSEARCH,1);
		}
	return	LOCKOK;
}

/*****************************************************
--FUNCTION	::	FE_362_Init
--ACTION	::	Initialisation of the STV0362 chip
--PARAMS IN	::	pInit	==>	pointer to FE_362_InitParams_t structure
--PARAMS OUT::	NONE
--RETURN	::	Handle to STV0362
--***************************************************/

FE_362_Handle_t	FE_362_Init(FE_362_InitParams_t	*pInit)

{
	FE_362_InternalParams_t		*pParams = NULL;
	/*	FE_OFDMEchoParams_t EchoParams;		 */ 
	/* POUR STAPI passer un multiinstance */
	/* Internal params structure allocation */
	#ifdef HOST_PC
	pParams = malloc(sizeof(FE_362_InternalParams_t));
	#endif

	#ifdef CHIP_STAPI
	/* use chip memory partition for all dynamic memory allocation
	for this instance of LLA internal data */
	pParams = memory_allocate_clear(pInit->hDemod->Chip->MemoryPartition, 1, sizeof( FE_362_InternalParams_t ));
	#endif
 	
/*	pParams->Echo = EchoParams;*/			 /* POUR STAPI passer un multiinstance */
	if(pParams != NULL)
	{
		/* Chip initialisation */
 /* in internal struct chip is stored */
		
		
		#ifdef HOST_PC
			#ifndef NO_GUI
				pParams->hDemod = DEMOD;
				pParams->hTuner = TUNER;
			#else
				pParams->hDemod = STV0362_Init(pInit->hDemod);
				if (pInit->Tuner362Init->Chip->Repeater)
				   pInit->Tuner362Init->Chip->RepeaterHost=pParams->hDemod;
				pParams->hTuner = TunerInit(pInit->Tuner362Init);
			#endif
		#else
			pParams->hDemod = STV0362_Init(pInit->Demod362Init); 

⌨️ 快捷键说明

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