📄 clk.c
字号:
/*****************************************************************************
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 + -