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

📄 clk.c

📁 ST5100 driver files for ST chipset
💻 C
📖 第 1 页 / 共 3 页
字号:
/*****************************************************************************

File name   : clk.c

Description : Clock Recovery functions

COPYRIGHT (C) STMicroelectronics 2005.

*****************************************************************************/

/* Includes --------------------------------------------------------------- */
#include <string.h>

#include "stddefs.h"
#include "stlite.h"
#include "stdevice.h"

#include "stclkrv.h"
#include "sttbx.h"

#ifdef TESTTOOL
 #include "api.h"
 #include "testtool.h"
#endif

#include "app_data.h"
#include "debugloop.h"
#include "evt.h"
#include "clk.h"
#include "st_pti.h"
#include "tuner.h"


/* Local Variables -------------------------------------------------------- */

#if (TTCLKRV_MULTI_INSTANCE == TRUE)  /* [ */
#define INS_DEVICEID            "<DeviceId>"
#define INS_DEVICEHANDLEID      "<DeviceId><HandleId>"
#else
#define INS_DEVICEID
#define INS_DEVICEHANDLEID
#endif  /*  TTCLKRV_MULTI_INSTANCE ] */

STCLKRV_Handle_t Clkrv0Hdnl[CLKRV_MAXOPEN];
STCLKRV_Handle_t Clkrv1Hdnl[CLKRV_MAXOPEN];

/* Global Variables ------------------------------------------------------- */

CLKRV_DeviceHandle_t ClkrvDeviceHandle[CLKRV_MAXDEVICE]=
{
    /* DeviceName  Handles table  Event Handler	PTI device */
   {"CLKRV_0",	 Clkrv0Hdnl,	  EVT_BACK,	    PTI_1},   
   {"CLKRV_1",	 Clkrv1Hdnl,	  EVT_BACK,	    PTI_1}   
};

/* Functions -------------------------------------------------------------- */

/* Global Functions ------------------------------------------------------- */


#if 1 // EXT_SHARE
STCLKRV_Handle_t CLKRV_GetHandle()
{
	return CLKRV_GET_HANDLE(0,0);
}
#endif


/*-------------------------------------------------------------------------
 * Function : CLKRV_Close
 *            close Clock Recovery
 * Input    : DeviceId, HandleId
 * Output   :
 * Return   : Error Code
 * ----------------------------------------------------------------------*/
ST_ErrorCode_t CLKRV_Close( CLKRV_DeviceId_t DeviceId, CLKRV_HandleId_t HandleId )
{
    ST_ErrorCode_t          ErrCode;
    STTBX_ReportLevel_t     ReportLevel;

    ErrCode     = ST_NO_ERROR;
    ReportLevel = STTBX_REPORT_LEVEL_INFO;

    if (HandleId >= CLKRV_MAXOPEN)
    {
        ErrCode = ST_ERROR_BAD_PARAMETER;
    }
    if ( CLKRV_GET_HANDLE(DeviceId,HandleId) == CLKRV_HANDLE_NULL )
    {
        ErrCode = ST_ERROR_BAD_PARAMETER;
    }

    if (ErrCode == ST_NO_ERROR)
    {
        ErrCode = STCLKRV_Close(CLKRV_GET_HANDLE(DeviceId,HandleId));
        if (ErrCode != ST_NO_ERROR)
        {
            ReportLevel = STTBX_REPORT_LEVEL_ERROR;
        }
        else
        {
             CLKRV_GET_HANDLE(DeviceId,HandleId) = CLKRV_HANDLE_NULL;
        }
    }

    STTBX_Report((ReportLevel,"STCLKRV_Close(%s)=%s", CLKRV_GET_DEVICENAME(DeviceId), GetErrorText(ErrCode)));

    return ( ErrCode );

} /* end CLKRV_Close */

/*-------------------------------------------------------------------------
 * Function : CLKRV_Disable
 *            Disable Clock Recovery
 * Input    : DeviceId, HandleId
 * Output   :
 * Return   : Error Code
 * ----------------------------------------------------------------------*/
ST_ErrorCode_t CLKRV_Disable( CLKRV_DeviceId_t DeviceId, CLKRV_HandleId_t HandleId )
{
    ST_ErrorCode_t          ErrCode;
    STTBX_ReportLevel_t     ReportLevel;

    ErrCode     = ST_NO_ERROR;
    ReportLevel = STTBX_REPORT_LEVEL_ERROR;

    if (HandleId >= CLKRV_MAXOPEN)
    {
        ErrCode = ST_ERROR_BAD_PARAMETER;
    }
    if ( CLKRV_GET_HANDLE(DeviceId,HandleId) == CLKRV_HANDLE_NULL )
    {
        ErrCode = ST_ERROR_BAD_PARAMETER;
    }

    if (ErrCode == ST_NO_ERROR)
    {
        ErrCode = STCLKRV_Disable( CLKRV_GET_HANDLE(DeviceId,HandleId) );
        if ( ErrCode == ST_NO_ERROR )
        {
            ReportLevel = STTBX_REPORT_LEVEL_INFO;
        }
    }

    STTBX_Report((ReportLevel,"STCLKRV_Disable(%s)=%s", CLKRV_GET_DEVICENAME(DeviceId), GetErrorText(ErrCode) ));

    return ( ErrCode );

} /* end CLKRV_Disable */

/*-------------------------------------------------------------------------
 * Function : CLKRV_Enable
 *            Enable Clock Recovery
 * Input    : DeviceId, HandleId
 * Output   :
 * Return   : Error Code
 * ----------------------------------------------------------------------*/
ST_ErrorCode_t CLKRV_Enable( CLKRV_DeviceId_t DeviceId, CLKRV_HandleId_t HandleId )
{
    ST_ErrorCode_t          ErrCode;
    STTBX_ReportLevel_t     ReportLevel;

    ErrCode     = ST_NO_ERROR;
    ReportLevel = STTBX_REPORT_LEVEL_ERROR;

    if (HandleId >= CLKRV_MAXOPEN)
    {
        ErrCode = ST_ERROR_BAD_PARAMETER;
    }
    if ( CLKRV_GET_HANDLE(DeviceId,HandleId) == CLKRV_HANDLE_NULL )
    {
        ErrCode = ST_ERROR_BAD_PARAMETER;
    }

    if (ErrCode == ST_NO_ERROR)
    {
        ErrCode = STCLKRV_Enable( CLKRV_GET_HANDLE(DeviceId,HandleId) );
        if ( ErrCode == ST_NO_ERROR )
        {
            ReportLevel = STTBX_REPORT_LEVEL_INFO;
        }
    }

    STTBX_Report((ReportLevel,"STCLKRV_Enable(%s)=%s", CLKRV_GET_DEVICENAME(DeviceId), GetErrorText(ErrCode) ));

    return ( ErrCode );

} /* end CLKRV_Enable */

/*-------------------------------------------------------------------------
 * Function : CLKRV_GetSTC
 *            Get STC
 * Input    : DeviceId, HandleId
 * Output   :
 * Return   : Error Code
 * ----------------------------------------------------------------------*/
ST_ErrorCode_t CLKRV_GetSTC( CLKRV_DeviceId_t DeviceId, CLKRV_HandleId_t HandleId, U32 *STCvalue )
{
    ST_ErrorCode_t          ErrCode;

    ErrCode = STCLKRV_GetSTC(CLKRV_GET_HANDLE(DeviceId,HandleId), STCvalue);

    if ( ErrCode == ST_NO_ERROR )
    {
        STTBX_Report((STTBX_REPORT_LEVEL_INFO,"STCLKRV_GetSTC(%s)=%u",
                      CLKRV_GET_DEVICENAME(DeviceId), *STCvalue));
    }
    else
    {
        STTBX_Report((STTBX_REPORT_LEVEL_ERROR,"STCLKRV_GetSTC(%s)=%s",
                      CLKRV_GET_DEVICENAME(DeviceId), GetErrorText(ErrCode)));
    }

    return ( ErrCode );

} /* end CLKRV_GetSTC */

/*-------------------------------------------------------------------------
 * Function : CLKRV_Init
 *            initialise Clock Recovery
 * Input    : DeviceId
 * Output   :
 * Return   : Error Code
 * ----------------------------------------------------------------------*/
ST_ErrorCode_t CLKRV_Init( CLKRV_DeviceId_t DeviceId )
{
    ST_ErrorCode_t          ErrCode = ST_NO_ERROR;
    STCLKRV_InitParams_t    InitParams;
    U32                     i;    

    /* Initialize our native Clock Recovery Driver */
    
    /* Required changes to prevent color loss problem*/
#if 1 // EXT_SHARE
	InitParams.PCRDriftThres     = STCLKRV_PCR_DRIFT_THRES;
	InitParams.MinSampleThres    = STCLKRV_MIN_SAMPLE_THRESHOLD;
	InitParams.MaxWindowSize     = STCLKRV_MAX_WINDOW_SIZE;
#else
    if(TunerDetected == TRUE){
        switch(TunerType){
            /* Terrestrial and cable tuners */
            case TUNER_TER_360 :
            case TUNER_TER_370VSB :
            case TUNER_CAB_297 :
            case TUNER_CAB_297J :
					/* new values with stclkrv5.2.0a2*/
				    InitParams.PCRDriftThres = 20000;
					InitParams.MinSampleThres = 100;
					InitParams.MaxWindowSize = 1000;
                    break;
            default:
                /* Assume others are satellite tuners*/
                InitParams.PCRDriftThres     = STCLKRV_PCR_DRIFT_THRES; 
                InitParams.MinSampleThres    = STCLKRV_MIN_SAMPLE_THRESHOLD;
                InitParams.MaxWindowSize     = STCLKRV_MAX_WINDOW_SIZE;
        }
    }
    else{
        InitParams.PCRDriftThres     = STCLKRV_PCR_DRIFT_THRES;
        InitParams.MinSampleThres    = STCLKRV_MIN_SAMPLE_THRESHOLD;
        InitParams.MaxWindowSize     = STCLKRV_MAX_WINDOW_SIZE;
    }
#endif
                                    
            
    InitParams.PCRMaxGlitch      = STCLKRV_PCR_MAX_GLITCH;
    InitParams.Partition_p       = DriverPartition;
    InitParams.DeviceType        = STCLKRV_DEVICE_TYPE_7710;
    InitParams.FSBaseAddress_p   = (U32 *)ST7710_CKG_BASE_ADDRESS;
    InitParams.ADSCBaseAddress_p = (U32 *)ST7710_AUDIO_IF_BASE_ADDRESS;
    InitParams.InterruptNumber   = ST7710_MPEG_CLK_REC_INTERRUPT;
    InitParams.InterruptLevel    = 7;

    strcpy( InitParams.PCREvtHandlerName, EVT_GET_DEVICENAME(CLKRV_GET_EVTDEVICEID(DeviceId)) );
    strcpy( InitParams.EVTDeviceName, EVT_GET_DEVICENAME(CLKRV_GET_EVTDEVICEID(DeviceId)) );
    strcpy( InitParams.PTIDeviceName, PTI_GET_DEVICENAME(CLKRV_GET_PTIDEVICEID(DeviceId)) );

    /* Init Clock Recovery */
    ErrCode = STCLKRV_Init(CLKRV_GET_DEVICENAME(DeviceId), &InitParams);
    if ( ErrCode == ST_NO_ERROR )
    {
        /* Initialize Handle if no error                             */
        for ( i = 0 ; i < CLKRV_MAXOPEN; i++ )
        {
            CLKRV_GET_HANDLE(DeviceId,i)   = CLKRV_HANDLE_NULL;
        }
    }

    STTBX_Report((STTBX_REPORT_LEVEL_INFO,"STCLKRV_Init(%s)=%s", CLKRV_GET_DEVICENAME(DeviceId), GetErrorText(ErrCode) ));

    return ( ErrCode );

} /* end CLKRV_Init */

/*-------------------------------------------------------------------------
 * Function : CLKRV_InvDecodeClk
 *            Invalidate the PCR
 * Input    : DeviceId, HandleId
 * Output   :
 * Return   : Error Code
 * ----------------------------------------------------------------------*/
ST_ErrorCode_t CLKRV_InvDecodeClk( CLKRV_DeviceId_t DeviceId, CLKRV_HandleId_t HandleId )
{
    ST_ErrorCode_t          ErrCode;
    STTBX_ReportLevel_t     ReportLevel;

    ErrCode     = ST_NO_ERROR;
    ReportLevel = STTBX_REPORT_LEVEL_ERROR;

    if (HandleId >= CLKRV_MAXOPEN)
    {
        ErrCode = ST_ERROR_BAD_PARAMETER;
    }
    if ( CLKRV_GET_HANDLE(DeviceId,HandleId) == CLKRV_HANDLE_NULL )
    {
        ErrCode = ST_ERROR_BAD_PARAMETER;
    }

    if (ErrCode == ST_NO_ERROR)
    {
        ErrCode = STCLKRV_InvDecodeClk( CLKRV_GET_HANDLE(DeviceId,HandleId) );
        if ( ErrCode == ST_NO_ERROR )
        {
            ReportLevel = STTBX_REPORT_LEVEL_INFO;
        }
    }

    STTBX_Report((ReportLevel,"STCLKRV_InvDecodeClk(%s)=%s", CLKRV_GET_DEVICENAME(DeviceId),
                  GetErrorText(ErrCode) ));

    return ( ErrCode );

} /* end CLKRV_InvDecodeClk */

/*-------------------------------------------------------------------------
 * Function : CLKRV_Open
 *            open Clock Recovery
 * Input    : DeviceId, HandleId
 * Output   :
 * Return   : Error Code
 * ----------------------------------------------------------------------*/
ST_ErrorCode_t CLKRV_Open( CLKRV_DeviceId_t DeviceId, CLKRV_HandleId_t HandleId )
{
    ST_ErrorCode_t          ErrCode;
    STTBX_ReportLevel_t     ReportLevel;
    STCLKRV_OpenParams_t    CLKRVOpenParams; /* no parms yet */

    ErrCode     = ST_NO_ERROR;
    ReportLevel = STTBX_REPORT_LEVEL_INFO;

    if (HandleId >= CLKRV_MAXOPEN)
    {
        ErrCode = ST_ERROR_BAD_PARAMETER;
    }
    if ( CLKRV_GET_HANDLE(DeviceId,HandleId) != CLKRV_HANDLE_NULL )
    {
        ErrCode = ST_ERROR_BAD_PARAMETER;
    }

    if (ErrCode == ST_NO_ERROR)
    {
        memset((void *) &CLKRVOpenParams, 0, sizeof(STCLKRV_OpenParams_t));
        ErrCode = STCLKRV_Open(CLKRV_GET_DEVICENAME(DeviceId), &CLKRVOpenParams,
                               &CLKRV_GET_HANDLE(DeviceId,HandleId));
        if ( ErrCode == ST_NO_ERROR )
        {
            ReportLevel = STTBX_REPORT_LEVEL_INFO;
        }
    }

    STTBX_Report((ReportLevel,"STCLKRV_Open(%s)=%s", CLKRV_GET_DEVICENAME(DeviceId),
                  GetErrorText(ErrCode)));

    return ( ErrCode );

} /* end CLKRV_Open */

/*-------------------------------------------------------------------------
 * Function : CLKRV_SetPCRSource
 *            Set PCR source for Clock Recovery
 * Input    : DeviceId, HandleId, PCRSource
 * Output   :
 * Return   : Error Code
 * ----------------------------------------------------------------------*/
ST_ErrorCode_t CLKRV_SetPCRSource( CLKRV_DeviceId_t DeviceId,
                                   CLKRV_HandleId_t HandleId,
                                   PTI_ProcessStreamId_t PTI_ProcessStreamId)
{
    ST_ErrorCode_t          ErrCode;
    STTBX_ReportLevel_t     ReportLevel;
    STCLKRV_SourceParams_t  PCRSource;
    STPTI_Slot_t            SlotHandle;

    ErrCode     = ST_NO_ERROR;
    ReportLevel = STTBX_REPORT_LEVEL_ERROR;

    if (HandleId >= CLKRV_MAXOPEN)
    {
        ErrCode = ST_ERROR_BAD_PARAMETER;
    }
    if ( CLKRV_GET_HANDLE(DeviceId,HandleId) == CLKRV_HANDLE_NULL )
    {
        ErrCode = ST_ERROR_BAD_PARAMETER;
    }

⌨️ 快捷键说明

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