/**************************************************************************** * Copyright (c) 2004 Digital Stream Technologies Inc. All Rights Reserved. * * Module: dsthalfe.h * Author: Jun-ku Park, hwatk@dstreamtech.com * Description: DST HAL [Front End] Platform/Project Independent Includes * * notes: hwatk20040602 * ***************************************************************************/ #ifndef __DST_HALFE_H__ #define __DST_HALFE_H__ #include "dsthalcommon.h" typedef enum { TUNER_UNKNOWN=0, /* Tuner type is not specified. */ TUNER_FAT, /* FAT Tuner */ TUNER_FDC, /* FDC Tuner */ TUNER_MAX=3 } TunerType; #undef FREQ_MAX typedef enum { FREQ_UNKNOWN=0, /* Frequency Standard is not specified */ FREQ_AIR, /* Frequency Standard is OFF-AIR */ FREQ_STD, /* Frequency Standard is Cable Standard */ FREQ_IRC, /* Frequency Standard is Cable IRC */ FREQ_HRC, /* Frequency Standard is Cable HRC */ FREQ_MAX } FreqStandardType; typedef enum { TUNERSTATE_UNKNOWN=0, /* Tuner is not initialized. */ TUNERSTATE_INIT, /* Tuner is initialized. */ TUNERSTATE_START, /* Tuner is started. */ TUNERSTATE_STOP, /* Tuner is stopped. */ TUNERSTATE_MAX } TunerState; typedef enum { DEMOD_UNKNOWN=0, DEMOD_8VSB, /* Modulation is 8VSB */ DEMOD_64QAM, /* Modulation is 64QAM */ DEMOD_256QAM, /* Modulation is 256QAM */ DEMOD_QAM, /* Autodetection between 64QAM and 256QAM */ DEMOD_NTSC, /* Modulation is NTSC */ DEMOD_ISDBT, /* ISDB-T Auto-detection. */ DEMOD_ISDBT_MANUAL, /* ISDB-T Manual */ DEMOD_OFF, DEMOD_MODEA, /* Modulation is FDC - MODEA */ DEMOD_MODEB, /* Modulation is FDC - MODEB */ DEMOD_MAX } TunerDemod; typedef enum { CHANNEL=0, /* Tuning by channel number */ FREQ /* Tuning by frequency */ } TuneType; typedef enum { FEBERT_RM_0=1, /* Remove 0 byte on header */ FEBERT_RM_1, /* Remove 1 bytes on header */ FEBERT_RM_3, /* Remove 3 bytes on header */ FEBERT_RM_4 /* Remove 4 bytes on header */ } FEBertRm; typedef enum { FEBERT_INPUT_FAT=1, FEBERT_INPUT_DI, FEBERT_INPUT_FDC, FEBERT_INPUT_TRELLIS } FEBertSource; typedef enum { FEBERT_INVERTED=1, FEBERT_NON_INVERTED } FEBertPNInv; typedef enum { FEBERT_PN_15=1, FEBERT_PN_23 } FEBertPNSeq; typedef enum { FECALLBACK_UNKNOWN=0, FECALLBACK_ACQSTART, /* Callback on acquisition start, DHL_FE_Start() */ FECALLBACK_LOCK, /* Callback on tuner being locked. */ FECALLBACK_UNLOCK, /* Callback on tuner being unlocked. */ FECALLBACK_MAX } FECallbackSource; typedef enum { FE_AUDIO_MONO = 0, /* Mono */ FE_AUDIO_STEREO, /* Stereo */ FE_AUDIO_MONO_SAP, /* Mono on left, SAP on right */ FE_AUDIO_SAP, /* Secondary Audio Program */ FE_AM_INVALID, } FEAudioMode_t; typedef enum { FE_AUDIO_OFF = 0, FE_AUDIO_BTSC, /* BTSC */ FE_DUALFM, /* Dual FM, aka A2 audio standard */ FE_AUTODETECT, /* Automatic detection */ FE_AS_INVALID } FEAudioStandard_t; typedef enum { FE_WAIT_FOR_LOCK, FE_SENT_LOCK, FE_SENT_UNLOCK } FENotificationState_t; typedef void (*P_DHL_FE_CALLBACK)(TunerType Tuner, FECallbackSource eventSource, DS_U32 userArg); /**************************************************************************** FDC °ü·Ã Type-definition ***************************************************************************/ typedef enum { FDC_SYMBOL_RATE_772=1, FDC_SYMBOL_RATE_1024, FDC_SYMBOL_RATE_1544 } FdcSymbolRate_t; typedef enum { FDC_INVERT_SIGNAL=1, FDC_NO_INVERT_SIGNAL, } FdcSignalPolarity_t; typedef struct tag_DST_FE { TunerType bTuner; TunerState bCurState; DS_BOOL bHWInit; /* Lower H/W Initialized? */ /* FAT-specific fields */ FreqStandardType bFreqStd; DS_U8 bChannel; /* FDC-specific fields */ FdcSymbolRate_t FdcSymbolRate; FdcSignalPolarity_t FdcClockPolarity; FdcSignalPolarity_t FdcDataPolarity; FdcSignalPolarity_t FdcDecoderMode; DS_U32 RefDivider; /* FAT & FDC common fields */ TunerDemod bCurDemod; DS_U32 uFrequency; /* Callback Functions */ P_DHL_FE_CALLBACK fnFECallback[FECALLBACK_MAX-1]; DS_U32 FECallbackUserArg[FECALLBACK_MAX-1]; P_DHL_FE_CALLBACK fnFECallbackNTSC[FECALLBACK_MAX-1]; DS_U32 FECallbackNTSCUserArg[FECALLBACK_MAX-1]; DS_U32 feThreadId; volatile DS_BOOL bThreadActive; FENotificationState_t NotifyState; /* * Current Status * - bLockStatus : Tuner Lock Status, filled on DHL_FE_GetSNR() * - fSNR : SNR of Equalizer, filled on DHL_FE_GetTrellisSNR() * - dTrellisSNR : SNR of Trellis Decoder, filled on DHL_FE_GetTrellisSNR() * - uSQI : Signal Strength of Tuner, filled on DHL_FE_GetSignalStrength() * - uRSErrorCnt : Reed-Solomon Decoder Error Count, filled on DHL_FE_GetRSError() * - fRSErrorRate : Reed-Solomon Decoder Error Count per unit time, filled on DHL_FE_GetRSError() */ DS_U8 bLockStatus; float fSNR; double dTrellisSNR; DS_U32 uSQI; DS_U32 uRSErrorCnt; float fRSErrorRate; DS_U64 ulBERTErrorCnt; /* BERT Error Cnt updated on DHL_FE_GetBERT() */ double dBERTErrorRate; /* BERT Error Rate updated on DHL_FE_GetBERT() */ DS_U8 bBERTStarted; /* BERT Test Started ? */ DS_U8 bCarrierMute; /* Platform/Project Specific fields */ } *P_DST_FE, DST_FE; #define MIN_FAT_CH 1 #define MAX_FAT_CH 135 #define FULL_SEARCH_HALF_BOUND 1500.0 /* NTSC Full Search Range 1.5 Mhz */ #define SHORT_SEARCH_HALF_BOUND 437.5 /* NTSC Short Search Range 437.5 kHz */ #define SEARCH_STEP_FREQ 250 /* NTSC Search Step : 250 kHz */ #define XOCECO_STEP_FREQ 100 #ifdef __cplusplus extern "C" { #endif DHL_RESULT DHL_FE_Init( TunerType Tuner ); DHL_RESULT DHL_FE_SetChannelStandard( TunerType Tuner, FreqStandardType FreqStd ); DHL_RESULT DHL_FE_Start( TunerType Tuner, DS_U32 ChannelFreq, TunerDemod Demod, TuneType bFreq ); DHL_RESULT DHL_FE_Stop( TunerType Tuner ); DHL_RESULT DHL_FE_Close( TunerType Tuner ); DHL_RESULT DHL_FE_SetCallback( TunerType Tuner, FECallbackSource eventSource, P_DHL_FE_CALLBACK fn, DS_U32 userArg ); DHL_RESULT DHL_FE_GetLockStatus( TunerType Tuner, DS_U8 *pLockStatus ); DHL_RESULT DHL_FE_GetSNR( TunerType Tuner, float *pSNR ); DHL_RESULT DHL_FE_GetTrellisSNR( TunerType Tuner, double *pTrellisSNR ); DHL_RESULT DHL_FE_GetSignalStrength( TunerType Tuner, DS_U32 *pSQI ); DHL_RESULT DHL_FE_GetSignalPower( TunerType Tuner, DS_U32 *pSQI ); DHL_RESULT DHL_FE_GetEqSNR( TunerType Tuner, float *pSNR ); DHL_RESULT DHL_FE_GetRSError( TunerType Tuner, DS_U32 *pRSErrorCnt, float *pRSErrorRate ); DHL_RESULT DHL_FE_GetBERT( TunerType Tuner, DS_U32 *pErrorCnt, float *pErrorRate ); DHL_RESULT DHL_FE_GetModFormat( TunerType Tuner, TunerDemod *pModFormat ); DHL_RESULT DHL_FE_BERTStart( TunerType Tuner, FEBertRm HdrRm, FEBertSource Source, FEBertPNInv PNInv, FEBertPNSeq PNSeq); DHL_RESULT DHL_FE_BERTStop( TunerType Tuner ); DHL_RESULT DHL_FE_SetFDCConfig( TunerType Tuner, DS_U32 RFFreq, FdcSymbolRate_t SymbolRate, FdcSignalPolarity_t ClockPol, FdcSignalPolarity_t DataPol, FdcSignalPolarity_t DecoderMode, DS_U32 RefDivider ); DHL_RESULT DHL_FE_CheckAlive( TunerType Tuner ); DS_U32 DD_FE_GetVersion( void ); DHL_RESULT DD_FE_I2SEnable( P_DST_FE pDSTFETuner, int Enable ); DHL_RESULT DHL_FE_SetInput( TunerType Tuner, int Cable ); DHL_RESULT DHL_FE_SetGPIOC( TunerType Tuner, int mask, int value ); DHL_RESULT DHL_FE_GetGPIOC( TunerType Tuner, int mask, int *value ); void dhl_fe_t_btsc( int Enable ); DHL_RESULT DHL_FE_GetAudioMode( TunerType Tuner, FEAudioMode_t *audioMode, FEAudioStandard_t *audioStandard ); DHL_RESULT DHL_FE_SetAudioMode( TunerType Tuner, FEAudioMode_t audioMode, FEAudioStandard_t audioStandard ); void SetGPIOC( int mask, int value ); //DHL_RESULT DHL_FE_AnalogFullSearch(TunerType Tuner, DS_U32 channel, INT32 *offset, TuneType bFreq, float search_range ); DHL_RESULT DHL_FE_AnalogFullSearch(TunerType Tuner, DS_U32 channel, DS_S32 *offset, TuneType bFreq, float search_range, DS_BOOL (*fnCancelCk1)(void), DS_BOOL (*fnCancelCk2)(void) ); DHL_RESULT DHL_FE_AnalogShortSearch(TunerType Tuner, DS_U32 channel, DS_S32 *offset, TuneType bFreq ); DHL_RESULT DHL_FE_AnalogGetLockStatus(TunerType Tuner, DS_U8 *lockStatus); DHL_RESULT DHL_FE_AnalogFullSearchEx( TunerType Tuner, DS_U32 channel, DS_S32 *pOffset, TuneType bFreq, DS_S32 RangeLow, DS_S32 RangeHigh ); int GetAFT(void); DHL_RESULT PrintTunerStatus(void); DHL_RESULT DHL_FE_SetCallbackNTSC( TunerType Tuner, FECallbackSource eventSource, P_DHL_FE_CALLBACK fn, DS_U32 userArg ); DS_U32 DHL_FE_GetFrequency( TunerType Tuner ); void DHL_FE_SetAnalogLockMethod(int Method); DHL_RESULT DHL_FE_SetCarrierMute( TunerType Tuner, DS_U8 bEn ); void set_spliter_to_air_or_cable(DS_BOOL AirOrCable); #ifdef __cplusplus } #endif #endif /* __DST_HALFE_H__ */