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

📄 d0399e.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
        Data = 0;
	STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R399_FECM, F399_FECMODE, F399_FECMODE_L, &Data, 1, FALSE);
	
	break;
	case STTUNER_FEC_MODE_DIRECTV:
	
	Data = 4;
	STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R399_FECM, F399_FECMODE, F399_FECMODE_L, &Data, 1, FALSE);
	
	Data = 1;
	/* Nyquist Filter to 20% for DIRECTV */
	STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R399_R8PSK, F399_MODE_COEF, F399_MODE_COEF_L, &Data, 1, FALSE);
	 	
	Data = 0;
	/* Descrambler is disactivated */
	STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R399_RS, F399_DESCRAM, F399_DESCRAM_L, &Data, 1, FALSE);
	
	break;
	default:
	break;
    }
			
    switch(DEMODInstance->TSOutputMode)
    {
	case STTUNER_TS_MODE_DEFAULT:
        case STTUNER_TS_MODE_PARALLEL:		
	
	Data = 0;
	STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R399_RS, F399_OUTRS_PS, F399_OUTRS_PS_L, &Data, 1, FALSE);
	break;
	case STTUNER_TS_MODE_SERIAL:
	Data = 1;
	STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R399_RS, F399_OUTRS_PS, F399_OUTRS_PS_L, &Data, 1, FALSE);
	break;
	default:
	break;
    }
        
    /* Set serial data mode */
    if (DEMODInstance->TSOutputMode == STTUNER_TS_MODE_SERIAL)   
    {     
        if ( ((DEMODInstance->SerialDataMode) & STTUNER_SDAT_VALID_RISING) != 0)    /* Rising edge */
        {
            Data = 0;
            STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R399_RS, F399_CLK_POL, F399_CLK_POL_L, &Data, 1, FALSE);
        }
        else
        {
            Data = 1;
            STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R399_RS, F399_CLK_POL, F399_CLK_POL_L, &Data, 1, FALSE);
        }
        
        if ((DEMODInstance->SerialDataMode & STTUNER_SDAT_PARITY_ENABLE) != 0)     /* Parity enable changes done for 5528 live decode issue*/
        {
	        Data = 0;
                STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R399_RS, F399_CLK_CFG, F399_CLK_CFG_L, &Data, 1, FALSE);
	        
        }
        else
        {
            	Data = 1;
                STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R399_RS, F399_CLK_CFG, F399_CLK_CFG_L, &Data, 1, FALSE);
        }
    }
 
   /* Set Block Sync control for bug GNBvd27452. Block Sync bit will set sync byte 0x47 or 0xb8 after every 8th packet */
   
   #ifdef STTUNER_BLOCK_SYNC_MODE_SELECT
   if((DEMODInstance->BlockSyncMode == STTUNER_SYNC_NORMAL) || (DEMODInstance->BlockSyncMode == STTUNER_SYNC_DEFAULT))
   {
   	
   	Data = 0;
        STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R399_RS, F399_MPEG, F399_MPEG_L, &Data, 1, FALSE);
   } 
   else
   {
   	Data = 1;
        STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R399_RS, F399_MPEG, F399_MPEG_L, &Data, 1, FALSE);
   }      
   if(DEMODInstance->DataFIFOMode == STTUNER_DATAFIFO_ENABLED)
   {
   	if(DEMODInstance->OutputFIFOConfig.OutputRateCompensationMode == STTUNER_COMPENSATE_DATACLOCK)
   	{
   		Data = 1;
        	STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R399_RSOUT, F399_EN_STBACKEND, F399_EN_STBACKEND_L, &Data, 1, FALSE);
   		
   	}
   	else if(DEMODInstance->OutputFIFOConfig.OutputRateCompensationMode == STTUNER_COMPENSATE_DATAVALID)
   	{
   		Data = 0;
        	STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R399_RSOUT, F399_EN_STBACKEND, F399_EN_STBACKEND_L, &Data, 1, FALSE);
   	}
   	
   	if (DEMODInstance->TSOutputMode == STTUNER_TS_MODE_SERIAL)
   	{
   		ENA8_LevelValue = 0x01;/* use only ENA8_LEVEL[3:2] in serial mode*/
   		ENA8_LevelValue |= ((DEMODInstance->OutputFIFOConfig.CLOCKPERIOD - 1)<<2);
   		Data = ENA8_LevelValue;
        	STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R399_RSOUT, F399_ENA8_LEVEL, F399_ENA8_LEVEL_L, &Data, 1, FALSE);
   		
   	}
   	else if (DEMODInstance->TSOutputMode == STTUNER_TS_MODE_PARALLEL)
   	{
   		ENA8_LevelValue = (Instance->OutputFIFOConfig.CLOCKPERIOD) / 4;
   		Data = ENA8_LevelValue;
        	STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R399_RSOUT, F399_ENA8_LEVEL, F399_ENA8_LEVEL_L, &Data, 1, FALSE);
   	}
   }
   #endif
    /* ERRCNTL #1: Set default error count mode i.e., QPSK bit error rate */
    Data = 0;
    STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R399_ERRCTRL, F399_ERRMODE, F399_ERRMODE_L, &Data, 1, FALSE);
    
    Data = 0;
    STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R399_ERRCTRL, F399_ERR_SOURCE, F399_ERR_SOURCE_L, &Data, 1, FALSE);
    
    Data = 3;
    STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R399_ERRCTRL, F399_NOE, F399_NOE_L, &Data, 1, FALSE);
    

    Capability->SymbolMin       = STV0399E_SYMBOL_RATE_MIN; /*   1 MegaSymbols/sec */
    Capability->SymbolMax       = STV0399E_SYMBOL_RATE_MAX; /*  45 MegaSymbols/sec */
    Capability->FreqMin         = STV0399E_FREQ_MIN;  /* 950000 */
    Capability->FreqMax         = STV0399E_FREQ_MAX;  /* 2150000 */
    /* change tuner step size to best fixed value for STV0399 */
    Inst = STTUNER_GetDrvInst();
    Inst[OpenParams->TopLevelHandle].Sat.Ioctl.TunerStepSize = STV0399_TUNER_SCAN_STEP;   
    /* finally (as nor more errors to check for, allocate handle */
    DEMODInstance->TopLevelHandle = OpenParams->TopLevelHandle;
    /* in loopthriugh mode the second demod which is connected by loopthrough of first cannot send disecq-st 
       command because of a DC block in the loop-through path. Presently it depends upon toplevelhandle but when tone detection 
       LLA of SatCR will be written "DISECQ_ST_ENABLE" will be initalized automatically depending upon the tone sent*/
    #ifdef STTUNER_DRV_SAT_SCR
		#ifdef STTUNER_DRV_SAT_SCR_LOOPTHROUGH
		    if(OpenParams->TopLevelHandle == 0)
		    DEMODInstance->DISECQ_ST_ENABLE = TRUE;
		    if(OpenParams->TopLevelHandle == 1)
		    DEMODInstance->DISECQ_ST_ENABLE = FALSE;
	    #endif
	#endif
   
	 *Handle = (U32)DEMODInstance;

    SEM_UNLOCK(Lock_InitTermOpenClose); 
#endif    
    return(Error);
}
#ifdef STTUNER_MINIDRIVER
ST_ErrorCode_t demod_d0399_Close(DEMOD_Handle_t Handle, DEMOD_CloseParams_t *CloseParams)
{
	DEMODInstance->TopLevelHandle = STTUNER_MAX_HANDLES;
	FE_399_Term();
	return(ST_NO_ERROR);
}
#endif
#ifndef STTUNER_MINIDRIVER
/* ----------------------------------------------------------------------------
Name: demod_d0399_Close()

Description:
    
Parameters:
    
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0399_Close(DEMOD_Handle_t Handle, DEMOD_CloseParams_t *CloseParams)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_D0399
   const char *identity = "STTUNER d0399.c demod_d0399_Close()";
#endif
    ST_ErrorCode_t Error = ST_NO_ERROR;
    D0399_InstanceData_t     *Instance;

    /* private driver instance data */
    Instance = D0399_GetInstFromHandle(Handle);

    if(Installed == FALSE)
    {
#ifdef STTUNER_DEBUG_MODULE_SATDRV_D0399
        STTBX_Print(("%s fail driver not installed\n", identity));
#endif
        return(STTUNER_ERROR_INITSTATE);
    }

    SEM_LOCK(Lock_InitTermOpenClose);

    /* ---------- check that at least one init has taken place ---------- */
    if(InstanceChainTop == NULL)
    {
#ifdef STTUNER_DEBUG_MODULE_SATDRV_D0399
        STTBX_Print(("%s fail nothing initalized\n", identity));
#endif
        SEM_UNLOCK(Lock_InitTermOpenClose);
        return(STTUNER_ERROR_INITSTATE);
    }

    if(Instance->TopLevelHandle == STTUNER_MAX_HANDLES)
    {
#ifdef STTUNER_DEBUG_MODULE_SATDRV_D0399
        STTBX_Print(("%s fail driver instance not open\n", identity));
#endif
        SEM_UNLOCK(Lock_InitTermOpenClose);
        return(ST_ERROR_OPEN_HANDLE);
    }


    /* ---------- Term LLA ---------- */

#ifdef STTUNER_DEBUG_MODULE_SATDRV_D0399
    STTBX_Print(("%s FE_399_Term() with Instance->FE_399_Handle at 0x%08x\n", identity, Instance->FE_399_Handle));
#endif
       
    /* indidcate insatance is closed */
    Instance->TopLevelHandle = STTUNER_MAX_HANDLES;

#ifdef STTUNER_DEBUG_MODULE_SATDRV_D0399
    STTBX_Print(("%s closed\n", identity));
#endif

    SEM_UNLOCK(Lock_InitTermOpenClose);
    return(Error);
}   
#endif
#ifndef STTUNER_MINIDRIVER
/* ----------------------------------------------------------------------------
Name: demod_d0399_IsAnalogCarrier()

Description:
    This routine checks for an analog carrier on the current frequency
    by setting the symbol rate to 5M (never a digital signal).

Parameters:
    IsAnalog,   pointer to area to store result:
                TRUE - is analog
                FALSE - is not analog

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0399_IsAnalogCarrier(DEMOD_Handle_t Handle, BOOL *IsAnalog)   /* TODO */
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_D0399
   const char *identity = "STTUNER d0399.c demod_d0399_IsAnalogCarrier()";
#endif
    ST_ErrorCode_t Error = ST_NO_ERROR;
    U8 loop,temp[1];
    U16 Agc2;
    D0399_InstanceData_t *Instance;

    /* private driver instance data */
    Instance = D0399_GetInstFromHandle(Handle);

     Agc2 = 0;
    *IsAnalog = FALSE;  /* Assume no analog carrier */

    /* Set the symbol rate to analog carrier rate 144000000 */
    FE_399_SetSymbolRate(&Instance->DeviceMap, Instance->IOHandle, Instance->ExternalClock, ANALOG_CARRIER_DETECT_SYMBOL_RATE);

    /* Take four AGC2 samples */
    for (loop = 0; loop < 4; loop++)
    {
        /* Read AGC2I1 and AGC2I2 registers */
        STTUNER_IOREG_GetContigousRegisters(&Instance->DeviceMap, Instance->IOHandle, R399_AGC2I1, 2, temp);

        Agc2 += ((temp[0]<<8) + temp[1]);
    } 

    Agc2 = Agc2 / 4;  /* Average AGC2 values */

    /* Test for good signal strength -- centre of analog carrier */
    *IsAnalog = (Agc2 < ANALOG_CARRIER_DETECT_AGC2_VALUE) ? TRUE : FALSE; 

#ifdef STTUNER_DEBUG_MODULE_SATDRV_D0399
    STTBX_Print(("%s IsAnalog=%u\n", identity, *IsAnalog));
#endif

    return(Error);
}   
#endif

/* ----------------------------------------------------------------------------
Name: demod_d0399_GetSignalQuality()

Description:
  Obtains a signal quality setting for the current lock.
    
Parameters:
    SignalQuality_p,    pointer to area to store the signal quality value.
    Ber,                pointer to area to store the bit error rate.
    
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0399_GetSignalQuality(DEMOD_Handle_t Handle, U32  *SignalQuality_p, U32 *Ber)
{
	int i;
#ifdef STTUNER_DEBUG_MODULE_SATDRV_D0399
   const char *identity = "STTUNER d0399.c demod_d0399_GetSignalQuality()";
#endif
    D0399_InstanceData_t *Instance;
    
   
    ST_ErrorCode_t Error = ST_NO_ERROR;
    Instance = D0399_GetInstFromHandle(Handle);
  #ifndef STTUNER_MINIDRIVER
    
	*Ber = FE_399_GetError(&Instance->DeviceMap, Instance->IOHandle);
    	*SignalQuality_p = FE_399_GetCarrierToNoiseRatio(&Instance->DeviceMap, Instance->IOHandle); 
    /**SignalQuality_p = Info.C_N;*/
   
    for(i=0; i<20; ++i)
    {
	    if(FE_399_SignalQuality_LookUp[i][0] >= *SignalQuality_p)
	    {
		    *SignalQuality_p = FE_399_SignalQuality_LookUp[i][1];
		    break;
	    }
    }
	    
  
    
#ifdef STTUNER_DEBUG_MODULE_SATDRV_D0399
    STTBX_Print(("%s SignalQuality=%u Ber=%u\n", identity, *SignalQuality_p, *Ber));
#endif
    #endif
/**************************STTUNER_MINIDRIVER**************************
************************************************************************
*************************************************************************/
  #ifdef STTUNER_MINIDRIVER
    Error = FE_399_GetSignalInfo(&Info);
    if ( Error != ST_NO_ERROR)
    {
        return(Error);
    }
    for(i=0; i<20; ++i)
    {
	    if(FE_399_SignalQuality_LookUp[i][0] >= Info.C_N)
	    {
		    *SignalQuality_p = FE_399_SignalQuality_LookUp[i][1];
		    break;
	    }
    }	    
    *Ber = Info.BER;
  #endif
    
    return(Error);
}   
#ifndef STTUNER_MINIDRIVER
/* ----------------------------------------------------------------------------
Name: demod_d0399_GetModulation()

Description:
    This routine returns the modulation scheme in use by this device.
    
Parameters:
    Modulation, pointer to area to store modulation scheme.
    
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0399_GetModulation(DEMOD_Handle_t Handle, STTUNER_Modulation_t *Modulation)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_D0399
   const char *identity = "STTUNER d0399.c demod_d0399_GetModulation()";
#endif
    FE_399_Error_t Error;
    D0399_InstanceData_t *Instance;
    Instance = D0399_GetInstFromHandle(Handle);
    *Modulation = STTUNER_MOD_QPSK;
           
#ifdef STTUNER_DEBUG_MODULE_SATDRV_D0399
    STTBX_Print(("%s Modulation=%u\n", identity, *Modulation));
#endif
    return(Error);

⌨️ 快捷键说明

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