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

📄 d0362.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
    /* top level public instance data */
    Inst = STTUNER_GetDrvInst();
    /* Read noise estimations for C/N and BER */
    FE_362_GetNoiseEstimator(&(Instance->DeviceMap), Instance->IOHandle, &CurSignalQuality, &CurBitErrorRate);
  
  /******The Error field of TunerInfo in Instaneous database is updated ******/
    
    TunerError= ST_NO_ERROR; 
       
    /*************************************************************************/
    /* Get the modulation type */
    
   
    Data=STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_TPS_CONST);
    
  
    switch (Data)
    {
        case 0:  CurModulation = STTUNER_MOD_QPSK;  break;
        case 1:  CurModulation = STTUNER_MOD_16QAM; break;
        case 2:  CurModulation = STTUNER_MOD_64QAM; break;
        default: 
        /*CurModulation = STTUNER_MOD_ALL;*/
        CurModulation = Data ;
        task_delay(5);
        Data=STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_TPS_CONST);
        switch (Data)
        {
        case 0:  CurModulation = STTUNER_MOD_QPSK;  break;
        case 1:  CurModulation = STTUNER_MOD_16QAM; break;
        case 2:  CurModulation = STTUNER_MOD_64QAM; break;
        default:
        CurModulation = Data ;
        TunerError=ST_ERROR_BAD_PARAMETER;
        }
        break;
    }

    /* Get the mode */
   
   
    Data=STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_TPS_MODE);
   
    switch (Data)
    {
        case 0:  CurMode = STTUNER_MODE_2K; break;
        case 1:  CurMode = STTUNER_MODE_8K; break;
        default: 
        CurMode =Data;
        task_delay(5);
        Data=STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_TPS_MODE);
        switch (Data)
        {
        case 0:  CurMode = STTUNER_MODE_2K; break;
        case 1:  CurMode = STTUNER_MODE_8K; break;
        default:
        CurMode =Data;
        TunerError=ST_ERROR_BAD_PARAMETER;
        }
        break; /* error */
    }

    /* Get the Hierarchical Mode */
    
   
    Data=STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_TPS_HIERMODE);
   
    switch(Data)
    {
    	case 0 : CurHierMode=STTUNER_HIER_ALPHA_NONE; break;
    	case 1 : CurHierMode=STTUNER_HIER_ALPHA_1; break;
    	case 2 : CurHierMode=STTUNER_HIER_ALPHA_2; break;
    	case 3 : CurHierMode=STTUNER_HIER_ALPHA_4; break;
    	default :
    	CurHierMode=Data;
    	TunerError=ST_ERROR_BAD_PARAMETER;
        break; /* error */
    }
    
     
    
     /* Get the FEC Rate */
    Data = STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle, F0362_TPS_HPCODE);
    
    switch (Data)
    {
        case 0:  CurFECRates = STTUNER_FEC_1_2; break;
        case 1:  CurFECRates = STTUNER_FEC_2_3; break;
        case 2:  CurFECRates = STTUNER_FEC_3_4; break;
        case 3:  CurFECRates = STTUNER_FEC_5_6; break;
        case 4:  CurFECRates = STTUNER_FEC_7_8; break;
        default: 
        CurFECRates = Data;
        TunerError=ST_ERROR_BAD_PARAMETER;
        break; /* error */
    }

    /* Get the Guard time */
   
    
    Data = STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_TPS_GUARD);
    
    switch (Data)
    {
        case 0:  CurGuard = STTUNER_GUARD_1_32; break;
        case 1:  CurGuard = STTUNER_GUARD_1_16; break;
        case 2:  CurGuard = STTUNER_GUARD_1_8;  break;
        case 3:  CurGuard = STTUNER_GUARD_1_4;  break;
        default: 
        CurGuard = Data;
        TunerError=ST_ERROR_BAD_PARAMETER;
        break; /* error */
    }

    /* Get the spectrum.Register is not read as spectrum inversion code added*/
     CurSpectrum = Instance->ResultSpectrum;

    /* Get the correct frequency */
    CurFrequency = TunerInfo_p->Frequency;
    /********Frequency offset calculation done here*******************/
     
        STTUNER_IOREG_SetField(&(Instance->DeviceMap), Instance->IOHandle,F0362_FREEZE,1);								  
	STTUNER_IOREG_GetContigousRegisters(&(Instance->DeviceMap), Instance->IOHandle,R0362_CRL_FREQ1,3,crl_freq1);
	STTUNER_IOREG_SetField(&(Instance->DeviceMap), Instance->IOHandle,F0362_FREEZE,0);	
	          
		          
	CrlRegVal = (crl_freq1[2]<<16) ;
	CrlRegVal+= (crl_freq1[1] <<8);
	CrlRegVal+= crl_freq1[0];
	          
	if (CrlRegVal > 8388607)
	  {
	 	offset =(CrlRegVal - 16777216);
	 	TunerInfo_p->ScanInfo.FreqOff = offset_type;
          }
       else
         {
	 	offset = CrlRegVal;/*2's complement negative value*/
	  }
	
	 offset *=2; /*Actual value should be multiplied by 2*/
	
		
	 STTUNER_IOREG_GetRegister(&(Instance->DeviceMap), Instance->IOHandle,R0362_SYR_STAT);
	         
	        
	 offset=((offset*11)/10)*4/(FE_362_Pow(4,STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,F0362_SYR_MODE))*16384);

        Data = STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_INV_SPECTR);
       
        if(offset >= 150 )
         {
       	
       	 if(Data ==0)
       	 {
       	    offset_type =STTUNER_OFFSET_POSITIVE;   
       	 }
       	 else
       	 {
              offset_type =STTUNER_OFFSET_NEGATIVE;
          }   
       }
       else if(offset < - 150)
         {
       	 
       	 if(Data==0)
       	 {
             offset_type =STTUNER_OFFSET_NEGATIVE;
          }
          else
          {
             offset_type =STTUNER_OFFSET_POSITIVE;
          }
       }
       else
       {
       	 offset = 0;
       	 offset_type=STTUNER_OFFSET_NONE;
       }
       TunerInfo_p->ScanInfo.FreqOff = offset_type;
          TunerInfo_p->ScanInfo.ResidualOffset = offset;
    /************************************************/

    /* Get the echo position */
    CurEchoPos=STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_LONG_ECHO);

   
        
    TunerInfo_p->FrequencyFound      = CurFrequency;
    TunerInfo_p->SignalQuality       = CurSignalQuality;
    TunerInfo_p->BitErrorRate        = CurBitErrorRate;
    TunerInfo_p->ScanInfo.Modulation = CurModulation;
    TunerInfo_p->ScanInfo.Mode       = CurMode;
    TunerInfo_p->ScanInfo.FECRates   = CurFECRates;
    TunerInfo_p->ScanInfo.Guard      = CurGuard;
    TunerInfo_p->ScanInfo.Spectrum   = CurSpectrum;
    TunerInfo_p->ScanInfo.EchoPos    = CurEchoPos;
    TunerInfo_p->ScanInfo.Hierarchy  = CurHierMode;
    Inst[Instance->TopLevelHandle].TunerInfoError = TunerError;
    
  
 #ifdef STTUNER_DEBUG_MODULE_TERDRV_D0362
    STTBX_Print(("F=%d SQ=%u BER=%u Modul=%u Mode=%u FR=%u G=%u Sp=%u\n",CurFrequency,CurSignalQuality,CurBitErrorRate,CurModulation,CurMode,CurFECRates,CurGuard,CurSpectrum));
 #endif

    /*Error handling from device map*/
    return(Error);
}



/* ----------------------------------------------------------------------------
Name: demod_d0362_GetSignalQuality()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0362_GetSignalQuality(DEMOD_Handle_t Handle, U32  *SignalQuality_p, U32 *Ber)
{
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0362
   const char *identity = "STTUNER d0362.c demod_d0362_GetSignalQuality()";
#endif
    ST_ErrorCode_t Error = ST_NO_ERROR;
    D0362_InstanceData_t *Instance;

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

    /* Read noise estimations for C/N and BER */
    FE_362_GetNoiseEstimator(&(Instance->DeviceMap), Instance->IOHandle, SignalQuality_p, Ber);
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0362
    STTBX_Print(("%s SignalQuality=%u Ber=%u\n", identity, *SignalQuality_p, *Ber));
#endif
    Error = Instance->DeviceMap.Error;
    return(Error);
}



/* ----------------------------------------------------------------------------
Name: demod_d0362_GetModulation()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0362_GetModulation(DEMOD_Handle_t Handle, STTUNER_Modulation_t *Modulation)
{
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0362
   const char *identity = "STTUNER d0362.c demod_d0362_GetModulation()";
#endif
    STTUNER_Modulation_t CurModulation;
    ST_ErrorCode_t Error = ST_NO_ERROR;
    D0362_InstanceData_t *Instance;
    U32 Data;
    /* private driver instance data */
    Instance = d0362_GetInstFromHandle(Handle);

    /* Get the modulation type */
    /*Use IOREG Call instead of chip call */
    STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_TPS_CONST);
    Data = STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle, F0362_TPS_CONST);

    switch (Data)
    {
        case 0:
            CurModulation = STTUNER_MOD_QPSK;
            break;

        case 1:
            CurModulation = STTUNER_MOD_16QAM;
            break;

        case 2:
            CurModulation = STTUNER_MOD_64QAM;
            break;

        default:
            CurModulation = STTUNER_MOD_ALL;
            break;
    }

    *Modulation = CurModulation;

#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0362
    STTBX_Print(("%s Modulation=%u\n", identity, *Modulation));
#endif
   /*add Error handling from device map*/
    return(Error);
}

/* ----------------------------------------------------------------------------
Name: demod_d0362_GetAGC()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0362_GetAGC(DEMOD_Handle_t Handle, S16  *Agc)
{
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0362
   const char *identity = "STTUNER d0362.c demod_d0362_GetAGC()";
#endif
    ST_ErrorCode_t Error = ST_NO_ERROR;
    S16 Data1=0;
    S16 Data2=0;
    D0362_InstanceData_t *Instance;

    /** fix done here for the bug GNBvd20972 **
     ** where body of the function demod_d0362_GetAGC written **
     ** and the function now returns the core gain **/
        
    /* private driver instance data */
    Instance = d0362_GetInstFromHandle(Handle);
    /* Get the mode type */
    Data1 =  STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_AGC_GAIN_LO);
    
    Data2 = STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_AGC_GAIN_HI);
    Data2 <<=8;
    Data2 &= 0x0F00;
    Data2 |= Data1 ;
      
    *Agc=Data2 ;

   /*add error handling from device map*/
    return(Error);
}



/* ----------------------------------------------------------------------------
Name: demod_d0362_GetFECRates()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0362_GetFECRates(DEMOD_Handle_t Handle, STTUNER_FECRate_t *FECRates)
{
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0362
   const char *identity = "STTUNER d0362.c demod_d0362_GetFECRates()";
#endif
    U8 Data;
    STTUNER_FECRate_t CurFecRate;
    ST_ErrorCode_t Error = ST_NO_ERROR;
    D0362_InstanceData_t *Instance;

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

    CurFecRate = 0;
    STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_TPS_HPCODE);
    Data = STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle, F0362_TPS_HPCODE);


    /* Convert venrate value to a STTUNER fecrate */
    switch (Data)
    {
        case 0:
            CurFecRate = STTUNER_FEC_1_2;
            break;

        case 1:
            CurFecRate = STTUNER_FEC_2_3;
            break;

        case 2:
            CurFecRate = STTUNER_FEC_3_4;
            break;

        case 3:
            CurFecRate = STTUNER_FEC_5_6;
            break;

        case 4:
            CurFecRate = STTUNER_FEC_7_8;
            break;

        default:
            CurFecRate = 0; /* error */
            break;
    }

    *FECRates = CurFecRate;  /* Copy back for caller */

#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0362
    STTBX_Print(("%s FECRate=%u\n", identity, CurFecRate));
#endif

    
  /*Add error handling from device map*/
    return(Error);
}

/* ----------------------------------------------------------------------------
Name: demod_d0362_GetMode()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0362_GetMode(DEMOD_Handle_t Handle, STTUNER_Mode_t *Mode)
{
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0362
   const char *identity = "STTUNER d0362.c demod_d0362_GetMode()";
#endif
    U8 Data;
    STTUNER_Mode_t CurMode;
    ST_ErrorCode_t Error = ST_NO_ERROR;
    D0362_InstanceData_t *Instance;

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

    /* Get the mode type */

⌨️ 快捷键说明

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