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

📄 d0370qam.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
    }


    /* Set default error count mode, bit error rate */

    /* finally (as nor more errors to check for, allocate handle */
    Instance->TopLevelHandle = OpenParams->TopLevelHandle;
    *Handle = (U32)Instance;

#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
    STTBX_Print(("%s opened ok\n", identity));
#endif

    SEM_UNLOCK(Lock_InitTermOpenClose);
    Error |= Instance->DeviceMap.Error;

    Instance->DeviceMap.Error = ST_NO_ERROR;

    return(Error);
}



/* ----------------------------------------------------------------------------
Name: demod_d0370QAM_Close()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0370QAM_Close(DEMOD_Handle_t Handle, DEMOD_CloseParams_t *CloseParams)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
   const char *identity = "STTUNER d0370QAM.c demod_d0370QAM_Close()";
#endif
    ST_ErrorCode_t Error = ST_NO_ERROR;
    D0370QAM_InstanceData_t     *Instance;

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

    if(Installed == FALSE)
    {
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
        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_CABDRV_D0370QAM
        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_CABDRV_D0370QAM
        STTBX_Print(("%s fail driver instance not open\n", identity));
#endif
        SEM_UNLOCK(Lock_InitTermOpenClose);
        return(ST_ERROR_OPEN_HANDLE);
    }

    Instance->TopLevelHandle = STTUNER_MAX_HANDLES;

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

    SEM_UNLOCK(Lock_InitTermOpenClose);
    return(Error);
}


/* ----------------------------------------------------------------------------
Name: demod_d0370QAM_IsAnalogCarrier()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0370QAM_IsAnalogCarrier(DEMOD_Handle_t Handle, BOOL *IsAnalog)
{
    ST_ErrorCode_t Error = ST_ERROR_FEATURE_NOT_SUPPORTED;
    return(Error);
}


/* ----------------------------------------------------------------------------
Name: demod_d0370QAM_GetSignalQuality()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0370QAM_GetSignalQuality(DEMOD_Handle_t Handle, U32  *SignalQuality_p, U32 *Ber_p)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
   const char *identity = "STTUNER d0370QAM.c demod_d0370QAM_GetSignalQuality()";
#endif
    ST_ErrorCode_t              Error = ST_NO_ERROR;
    STTUNER_tuner_instance_t    *TunerInstance;
    STTUNER_InstanceDbase_t     *Inst;
    D0370QAM_InstanceData_t        *Instance;
    int                         Mean, CNdB100;
    int                         ApplicationBERCount;
    BOOL                        IsLocked;

    /*
    --- Set parameters
    */
    *SignalQuality_p = 0;
    *Ber_p = 0;
    Mean = 0;
    CNdB100 = 0;
    ApplicationBERCount = 0;    /* Bit Error counter */


    /* private driver instance data */
    Instance = D0370QAM_GetInstFromHandle(Handle);
    /* top level public instance data */
    Inst = STTUNER_GetDrvInst();
    /* get the tuner instance for this driver from the top level handle */
    TunerInstance = &Inst[Instance->TopLevelHandle].Cable.Tuner;

    /*
    --- Get Carrier And Data (TS) status
    */
    Error = demod_d0370QAM_IsLocked(Handle, &IsLocked);
    if ( Error == ST_NO_ERROR && IsLocked )
    {
 
      
        /*
        --- Read noise estimations and BER
        */
       
        Driv0370QAMBertCount(&Instance->DeviceMap, Instance->IOHandle, &Instance->StateBlock,
                            TunerInstance, &ApplicationBERCount, Instance->StateBlock.Ber);
        Driv0370QAMCNEstimator(Handle,&Instance->DeviceMap, Instance->IOHandle, &Mean, &CNdB100, &Instance->StateBlock.SignalQuality);

       
        /*
        --- Set results
        */
        /*calculate signal quality in % considering 50dB as theoretical maximum*/
        *SignalQuality_p = Instance->StateBlock.SignalQuality /STB0370QAM_MAX_SIGNAL_QUALITY_IN_DB;
       if ( Instance->StateBlock.Ber[2] == 0 && ApplicationBERCount != 0 )
        {        
            *Ber_p = ApplicationBERCount;           /* Set BER to counter (no time to count) */
        }
        else
        {        
            *Ber_p = Instance->StateBlock.Ber[2];
        }
    }

#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
    STTBX_Print(("%s Mean=%d CN=%d dBx100 (%d %%)\n", identity, Mean, CNdB100, Instance->StateBlock.SignalQuality));
    STTBX_Print(("%s BERCount=%d BER[0..2] (cnt %d sat %d rate %d 10E-6)\n", identity,
                ApplicationBERCount,
                Instance->StateBlock.Ber[0],
                Instance->StateBlock.Ber[1],
                Instance->StateBlock.Ber[2]));
    STTBX_Print(("%s SignalQuality %u %% Ber %u 10E-6\n", identity, *SignalQuality_p, *Ber_p));
    STTBX_Print(("%s BlkCounter %9d CorrBlk %9d UncorrBlk %9d\n", identity,
                Instance->StateBlock.BlkCounter,
                Instance->StateBlock.CorrBlk,
                Instance->StateBlock.UncorrBlk
                ));
#endif

    Error |= Instance->DeviceMap.Error;
    Instance->DeviceMap.Error = ST_NO_ERROR;

    return(Error);
}



/* ----------------------------------------------------------------------------
Name: demod_d0370QAM_GetModulation()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0370QAM_GetModulation(DEMOD_Handle_t Handle, STTUNER_Modulation_t *Modulation)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
   const char *identity = "STTUNER d0370QAM.c demod_d0370QAM_GetModulation()";
#endif
    ST_ErrorCode_t Error = ST_NO_ERROR;
    D0370QAM_InstanceData_t *Instance;

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

    /* This implementation of the DEMOD device only supports one type of modulation */
    *Modulation = Reg0370QAM_GetQAMSize(&Instance->DeviceMap, Instance->IOHandle);

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

    Error |= Instance->DeviceMap.Error;
    Instance->DeviceMap.Error = ST_NO_ERROR;

    return(Error);
}



/* ----------------------------------------------------------------------------
Name: demod_d0370QAM_GetAGC()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0370QAM_GetAGC(DEMOD_Handle_t Handle, S16  *Agc)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
   const char *identity = "STTUNER d0370QAM.c demod_d0370QAM_GetAGC()";
#endif
    ST_ErrorCode_t Error = ST_NO_ERROR;
    D0370QAM_InstanceData_t *Instance;

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

    *Agc   = (S16)(0xFFFF & Reg0370QAM_GetAGC(&Instance->DeviceMap, Instance->IOHandle));

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

    Error |= Instance->DeviceMap.Error;
    Instance->DeviceMap.Error = ST_NO_ERROR;

    return(Error);
}



/* ----------------------------------------------------------------------------
Name: demod_d0370QAM_GetFECRates()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0370QAM_GetFECRates(DEMOD_Handle_t Handle, STTUNER_FECRate_t *FECRates)
{
    ST_ErrorCode_t Error = ST_ERROR_FEATURE_NOT_SUPPORTED;
    return(Error);
}



/* ----------------------------------------------------------------------------
Name: demod_d0370QAM_IsLocked()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0370QAM_IsLocked(DEMOD_Handle_t Handle, BOOL *IsLocked)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
   const char *identity = "STTUNER d0370QAM.c demod_d0370QAM_IsLocked()";
#endif
    ST_ErrorCode_t          Error = ST_NO_ERROR;
    U8                      Version;
    D0370QAM_InstanceData_t    *Instance;
    D0370QAM_SignalType_t      SignalType;

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

    *IsLocked = FALSE;

    /*
    --- Get Version Id (In fact to test I2C Access
    */
    Version = Reg0370QAM_GetSTB0370QAMId(&Instance->DeviceMap, Instance->IOHandle);
 if ((Version & STB0370QAM_DEVICE_VERSION) !=  STB0370QAM_DEVICE_VERSION)
    {
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
        STTBX_Print(("%s fail device not found (0x%02x)\n", identity, Version));
#endif
        SEM_UNLOCK(Lock_InitTermOpenClose);
        return(ST_ERROR_UNKNOWN_DEVICE);
    }

    /*
    --- Get Information from demod
    */
    SignalType = Drv0370QAM_CheckAgc(&Instance->DeviceMap, Instance->IOHandle, &Instance->StateBlock.Params);
    if (SignalType == E370QAM_AGCOK)
    {
        SignalType = Drv0370QAM_CheckData(&Instance->DeviceMap, Instance->IOHandle, &Instance->StateBlock.Params);
        if (SignalType == E370QAM_DATAOK)
        {
            Instance->StateBlock.Result.SignalType = E370QAM_LOCKOK;
            *IsLocked = TRUE;
        }
        else
        {
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
            STTBX_Print(("%s FRONT END IS UNLOCKED !!!! NO DATA\n", identity));
#endif
            /*
            --- Update Satus
            */
            Instance->StateBlock.Result.SignalType = SignalType;
        }
    }
    else
    {
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
        STTBX_Print(("%s FRONT END IS UNLOCKED !!!! NO AGC\n", identity));
#endif
        /*
        --- Update Satus
        */
        Instance->StateBlock.Result.SignalType = SignalType;
    }


#ifdef STTUNER_DEBUG_MO

⌨️ 快捷键说明

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