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

📄 qpsk0299.c

📁 stv0299资料
💻 C
📖 第 1 页 / 共 4 页
字号:
							if ( iCurTunerTaskState != TUNER_CARRIER_DETECTION )
								 break;

							TUNER_TUNER ( do_report ( severity_info, "TCC => Sync not found\n" ) );

							/*
							 * if possible try Fs/4 (may be the image). If the new
							 * new offset (ie) after adding Fs/4, is within the
							 * LNB drift limit then restart the zig-zag from 0
							 * else continue the zig-zag from the derotator freq
							 * for which the carrier was found
							 */
                     pParams -> DerotFreq = sDerotatorFreqWritten;
                     if ( TRUE == DEMOD_SearchFalseLock ( pParams ) )
                     {
 							   /*	setup the derotator frequency	*/
                        sDerotatorFreqWritten = pParams -> DerotFreq;
                        continue;
							}
						}

                  /*	Set the derotator frequency	*/
				      FieldSetVal ( DEROTATORFREQUENCYMSB, MSB ( sDerotatorFreqWritten ) );
				      FieldSetVal ( DEROTATORFREQUENCYLSB, LSB ( sDerotatorFreqWritten ) );   
				      RegSetRegisters ( R_CFRM, 2 );

						TUNER_TUNER ( do_report ( severity_info, "TCC => ZigZag DEROT W[%d]\n", 
                              sDerotatorFreqWritten ) );
						/*
						 * goto next derotator step
						 */
						sDerotatorFreqWritten = ( sDerotatorFreqWritten > 0 ) ? -sDerotatorFreqWritten : ( -sDerotatorFreqWritten + pParams -> DerotStep );
					}

					/*
					 * If data is found already then break this carrier cum data
					 * detection loop
					 */
					if ( iCurTunerTaskState != TUNER_CARRIER_DETECTION )
						 break;

					/* adjust tuner_freq back to 0 */
					iTunerOffset = 0;

					pParams -> Frequency = TunerSetFrequency ( iInitialTunedFreq );
					pParams -> TunerOffset = 0;
               
					TUNER_TUNER_CRITICAL ( do_report ( severity_info, "TCC => Zig-Zag failed, found new off [%d] + freq_req [%d] => %d\n", 
                        iTunerOffset, 
                        iInitialTunedFreq, 
                        pParams -> Frequency ) );

					/*
					 * give an delay of 50mSec
					 */
					MILLI_DELAY ( 50 );
					UPDATE_TUNER_STATE ( TUNER_CARRIER_DETECTION, TUNER_SIGNAL_DETECTION );
				}
				break;

         case  TUNER_MONITOR_TUNING:
            if ( RegGetField ( CF ) )
            {
               if ( RegGetField ( LK ) )
               {
                  signed int  iLocLnbOffset;
                  
#if   1
                  /* read the current derotator offset */
		            RegGetRegisters ( R_CFRM, 2 );
		            iLocLnbOffset = ( short int ) MAKEWORD ( FieldGetVal ( DEROTATORFREQUENCYMSB ), FieldGetVal ( DEROTATORFREQUENCYLSB ) );

 #if   0
                  printf ( "[%c] LocLnb => %d", 
                        iDerotatorSignValue == -1 ? '-' : '+',
                        iLocLnbOffset );
 #endif
                  /* convert frequency drift into tuner steps */
						iLocLnbOffset = Params . Frequency + ( iDerotatorSignValue * iLocLnbOffset * ( Params . Mclk ) / 1000 ); 
                  iLocLnbOffset -= Params . BaseFreq;

 #if   0
                  printf ( " Calc[%d] Cur[%d] Set[%d] Base[%d] Step[%d] RegOff[%d]\n",
                        iLocLnbOffset,
						      TunerGetFrequency (),
						      Params . Frequency,
						      Params . BaseFreq,
                        iTunerStepSize,
                        iLnbOffsetRegistered );
 #endif

                  if ( iTunerStepSize )
                     iLocLnbOffset /= iTunerStepSize;
                  else
                     iLocLnbOffset = 0;
#else
                  if ( iTunerStepSize )
                     iLocLnbOffset = ( TunerGetFrequency () - Params . BaseFreq ) / iTunerStepSize;
                  else
                     iLocLnbOffset = 0;
#endif

                  if ( iLocLnbOffset != iLnbOffsetRegistered )
                  {
					      iLnbOffsetRegistered = iLocLnbOffset;
					      asLnbOffset [ cCurLnbSource ] = iLocLnbOffset;
                  }

				      if ( cTransponderIndex2bRetrieved >= 0 && 
							      cTransponderIndex2bRetrieved < MAX_NO_OF_TRANSPONDERS &&
							      iLnbOffsetRegistered != ( int ) acLnbOffset [ cTransponderIndex2bRetrieved ] )
				      {
					      acLnbOffset [ cTransponderIndex2bRetrieved ] = ( signed char ) iLocLnbOffset;
					      UpdateNvmXpdrInfo ( ( BYTE ) acLnbOffset [ cTransponderIndex2bRetrieved ],
                                 0,       /* WARNING !!!! image side */
                                 FieldGetVal ( IQ ) ? TRUE : FALSE,
                                 Result . PunctureRate );
				      }

   				   /*
   	   			 * wake up every 500 msec
	   	   		 */
		   	   	MILLI_DELAY ( PERIODIC_SLEEP_PERIOD_DURATION );
						if ( ++iTunerPeriodicReportCnt > 24 )
						{
							TUNER_PERIODIC ( do_report ( severity_info, "TMT => Xpdr[%d] Locked [%02X] Base[%d] @TO[%d] TF[%d KHz]\n", 
                                    cTransponderIndex2bRetrieved, 
                                    RegGetOneRegister ( R_VSTATUS ), 
                                    Params . BaseFreq,
                                    iLocLnbOffset, 
                                    TunerGetFrequency () ) );
							iTunerPeriodicReportCnt = 0;
						}
               }
               else
               {
				      TUNER_TUNER_CRITICAL ( do_report ( severity_info, "TMT => Lost DataLock. Switching to TSP. [%X] [%d]\n", 
                           RegGetOneRegister ( R_VSTATUS ), 
                           RegGetOneRegister ( R_RTF ) ) );
                  MILLI_DELAY ( 200 );
   				   UPDATE_TUNER_STATE ( TUNER_MONITOR_TUNING, TUNER_SIGNAL_DETECTION );
               }
            }
            else
            {
   				/*
	   			 * failed to be in LOCKED state, so switch to CARRIER_DETECTION
		   		 * coarse
			   	 */
				   TUNER_TUNER_CRITICAL ( do_report ( severity_info, "TMT => Lost CarrLock. Switching to TSP. [%X] [%d]\n", 
                           RegGetOneRegister ( R_VSTATUS ), 
                           RegGetOneRegister ( R_RTF ) ) );
   				UPDATE_TUNER_STATE ( TUNER_MONITOR_TUNING, 
                           TUNER_SIGNAL_DETECTION );
            }
            break;

         default:
            do_report ( severity_info, "%s %d> Unknown TunerState[%d]\n",
                  iCurTunerTaskState );
            break;
      }
   }
}
/*}}}*/

/*
 * CODE							:	SetupLnbPower
 * TYPE							:	subroutine 
 * PROTOTYPE					:  
 *		void	SetupLnbPower ( void )
 *
 * STACK							:	callers stack
 * INPUT							:	nothing
 * OUTPUT						: 	nothing
 *
 * GLOBAL VARIABLES USED	:
 *	a.	cCurLnbSource			signed char				( R )
 *
 * DEVICES ACCESSED			:	nothing
 * FUNCTIONS CALLED			:  nothing
 * CALLERS						:	
 * a.	SetupBoxParam 				..\USIF\INSTALL.C
 *
 * PURPOSE		:	
 *		when there is a change in the LNB powering mode - ON to OFF
 *		or viceversa, just accordingly select the LNB source
 */
/*{{{ SetupLnbPower ()*/
void	SetupLnbPower ( void )
{

#ifndef	INTEGRATE_TUNER_MODULE
		return;
#else

	if ( pstBoxInfo -> bSupplyLnb == TRUE )
	{
		if ( cCurLnbSource == LNB1 )
		{
			SELECT_LNB ( LNB1_SELECTION );
		}
		else
		{
			SELECT_LNB ( LNB2_SELECTION );
		}
	}
	else
	{
		SELECT_LNB ( DONT_SELECT_ANY_LNB );
	}
#endif
}
/*}}}*/

/*
 * CODE							:	SetupPolarization
 * TYPE							:	subroutine 
 * PROTOTYPE					:  
 *		void	SetupLnbPower ( void )
 *
 * STACK							:	callers stack
 * INPUT							:	nothing
 * OUTPUT						: 	nothing
 *
 * GLOBAL VARIABLES USED	:
 *	a.	cCurLnbSource			signed char				( R )
 *
 * DEVICES ACCESSED			:	nothing
 * FUNCTIONS CALLED			:  nothing
 * CALLERS						:	
 * a.	SetupBoxParam 				..\..\USIF\SOURCE\INSTALL.C
 *
 * PURPOSE		:	
 *		when there is a change in the polarization of a xpdr - Vert or Horiz
 *		or viceversa, just accordingly select the polarization
 */
/*{{{ SetupPolarization ()*/
#if 0
void	SetupPolarization( void )
{

#ifndef	INTEGRATE_TUNER_MODULE
		return;
#else

	if ( pstBoxInfo -> bSupplyLnb == TRUE )
	{
		if ( cCurLnbSource == POLARIZATION_V )
		{
			SELECT_POL ( POLARIZATION_V );
		}
		else
		{
			SELECT_POL (  POLARIZATION_H );
		}
	}
	else
	{
		SELECT_POL ( DONT_SELECT_ANY_LNB );
	}
#endif
}
#endif /*if 0 */
/*}}}*/

/*{{{ DVBTunerInit ( )*/
int   DVBTunerInit ( void )
{
	int	iLocIndex;

#ifndef	INTEGRATE_TUNER_MODULE
	return   FALSE;
#endif

	do_report ( severity_info, "TUNER (STV0299) Module Initialisation ver[%s]\n", 
            TUNER_SOFTWARE_UPDATE_ID );

#ifdef	IQ_INVERTED_IN_HARDWARE
   do_report ( severity_info, "IQ Inverted by Hadrware ...\n" );
   iDerotatorSignValue = 1;
#else
   iDerotatorSignValue = -1;
#endif

#if defined(STV0199_4MHZ)
   do_report ( severity_info, "Master clock is 4MHz ...\n" );
#elif defined(STV0199_27MHZ)
   do_report ( severity_info, "Master clock is 27MHz ...\n" );
#endif

#ifdef   CRITICAL_STAGE_DEBUGGING
	do_report ( severity_info, "TUNER CRITICAL_STAGE_DEBUGGING ---> Enabled ...\n" );
#endif

#ifdef   DEVELOPMENT_STAGE_DEBUGGING
	do_report ( severity_info, "TUNER DEVELOPMENT_STAGE_DEBUGGING ---> Enabled ...\n" );
#endif					   
	/*
	 * initialise the LNB offset values to be zero
	 */
	iLocIndex = 0;
	asLnbOffset [ 0 ] = 0;
	asLnbOffset [ 1 ] = 0;

	while ( iLocIndex < MAX_NO_OF_TRANSPONDERS )
	{
		acLnbOffset [ iLocIndex ]        = 0;
      asSymbolRateOffset [ iLocIndex ] = 0;
		++iLocIndex;
	}

	/* Creating TUNER module semaphores */
	do_report ( severity_info, "Creating TUNER module semaphores ...\n" );

	psemLinkIcAccess                    = semaphore_create_fifo ( 1 );
	psemTunerStateWriteAccess           = semaphore_create_fifo ( 1 );
   psemTunerIdleStateEntered           = semaphore_create_fifo ( 0 );
   psemTunerIdleStateReleased          = semaphore_create_fifo ( 0 );

	if ( psemLinkIcAccess              == NULL ||
		   psemTunerStateWriteAccess    == NULL || 
         psemTunerIdleStateEntered    == NULL || 
         psemTunerIdleStateReleased   == NULL )
	{
		 TUNER_INIT ( do_report ( severity_error, "TUNER_INIT=> Unable to Initialise Semaphores\n" ) );
		 return  FALSE;
	}

#ifdef  ENABLE_STAPI_ENVIRONMENT
   {

      STI2C_OpenParams_t   I2cOpenParams;
      ST_ErrorCode_t Error = ST_NO_ERROR;

      /* Initialize the I2C interface */
      I2cOpenParams.BusAccessTimeOut     = 5;

      I2cOpenParams.AddressType          = STI2C_ADDRESS_7_BITS;
      I2cOpenParams.I2cAddress           = I2C_SLAVE_ADDR_FOR_STV0299;

      TUNER_INIT ( do_report ( severity_info, "%s %d> Opening I2C access for STv0299 ... [%s] Addr[%02X]\n",
            __FILE__,
            __LINE__,
            I2CDeviceName [ I2C_BUS_ID ],
            I2cOpenParams . I2cAddress ) );

      if ( ( Error = STI2C_Open ( I2CDeviceName [ I2C_BUS_ID ], 
                              &I2cOpenParams, 
                              &I2CDemodHandle ) ) != ST_NO_ERROR )
      {
         do_report ( severity_error, "%s %d> Failed (%d) to open I2C access for STV0299 on [%s]\n", 
               __FILE__,
               __LINE__,
               Error,
               I2CDeviceName [ I2C_BUS_ID ] );

		   return  FALSE;
      }

      TUNER_INIT ( do_report ( severity_info, "%s %d> STv0299I2CHandle=%08X\n", 
            __FILE__,
            __LINE__,
            I2CDemodHandle ) );

      /* 
       * Re-use old open parameters structure, but modify the address
       * to be used.
       */
#if   0
      I2cOpenParams . I2cAddress = I2C_SLAVE_ADDR_FOR_TUNER;
#else
      I2cOpenParams . I2cAddress = 0xC2;
#endif

      TUNER_INIT ( do_report ( severity_info, "%s %d> Opening I2C access for DEMOD ... [%s] Addr[%02X]\n",
         __FILE__,
         __LINE__,
         I2CDeviceName [ I2C_BUS_ID ],
         I2cOpenParams . I2cAddress ) );

      if ( STI2C_Open( I2CDeviceName [ I2C_BUS_ID ],
                          &I2cOpenParams,
                          &I2CTunerHandle ) != ST_NO_ERROR )
      {
         do_report ( severity_error, "%s %d> Failed (%d) to open I2C access for DEMOD on [%s]\n", 
               __FILE__,
               __LINE__,
               Error,
               I2CDeviceName [ I2C_BUS_ID ] );

         /* Clean-up previously allocated resources */
         ( void ) STI2C_Close ( I2CDemodHandle );
		   return  FALSE;
      }
      
      TUNER_INIT ( do_report ( severity_info, "%s %d> DemodI2CHandle=%08X\n", 
            __FILE__,
            __LINE__,
            I2CDemodHandle ) );

      /* setup the i2c bridge */
      I2cSetDemodHandle ( ( int ) I2CDemodHandle );
      I2cSetTunerHandle ( ( int ) I2CTunerHandle );

   }
#endif   /* ENABLE_STAPI_ENVIRONMENT */

   /* initialise the object modules */
   /* LP - 26/06/00 - semSTv0299RegAccess initialized here instead of 
    *                 inside RegInit() previously. This prevents us from
    *                 any malfunction while using the I2c repeater.
    *                 See bug GNBvd04232 details under DDTS.
    */
   semaphore_init_fifo ( &semSTv0299RegAccess, 1 );

   TunerSelect ( DEFAULT_TUNER_TYPE, DEFAULT_TUNER_SLAVE_ADDR );

   RegInit ( ); 

   SELECT_LNB ( DONT_SELECT_ANY_LNB );
   #ifdef   LNB_SELECTION_THROUGH_STV0299_OP_PINS
	/* 290800 - Added by LP - Disable 22KHz by default => OP0VALUE=0 */
	  SetLnb(0);
   #endif

   FORCE_TUNER_STATE ( TUNER_IDLE );

	/* Create tuner_process */
	TUNER_INIT ( do_report ( severity_info, "Creating TUNER Process\n" ) );
	if ( ( ptidTunerTask = task_create ( tuner_process, 
                                 NULL, 
                                 TUNER_PROCESS_STACK_SIZE, 
                                 TUNER_PROCESS_PRIORITY, 
                                 "tuner_process", 
                                 0 ) ) == NULL ) 
	{
		TUNER_INIT ( do_report ( severity_error, "TUNER_INIT=> Unable to create TUNER process\n" ) );
		return  TRUE;
	}

#ifdef   TESTTOOL_PRESENT
   register_command ( 
               "FEREG", 
               FE_PrintAllRegs, 
               "Print all register contents of 299" );

   register_command ( 
               "FERD", 
                FE_ReadReg, 
               "Read specific 299 register" );

   register_command ( 
               "FEWR", 
                FE_WriteReg, 
               "Write to 299 register" );

register_command ( "FESTAT",  
                TESTTOOLTunerStatistics,  
               "Print the tuner module statistics" );
#endif

	do_report ( severity_info, "Succesfully Installed TUNER module\n" );
	return FALSE;
}
/*}}}*/

/*
 * CODE							:	DVBNewTuneReq 
 * TYPE							:	subroutine 
 * PROTOTYPE					:  
 *		void	TUNER_USIF_tune_req ( TRANSPONDER_INFO_STRUCT *pstTransponderInfo );
 *
 * STACK							:	callers stack
 * INPUT							:	
 *	a. pstTransponderInfo		pointer to structure type 			( R )

⌨️ 快捷键说明

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