예제 #1
0
/**

@brief   RTL2832 FC2580 NIM module builder

Use BuildRtl2832Fc2580Module() to build RTL2832 FC2580 NIM module, set all module function pointers with the
corresponding functions, and initialize module private variables.


@param [in]   ppNim                       Pointer to RTL2832 FC2580 NIM module pointer
@param [in]   pDvbtNimModuleMemory        Pointer to an allocated DVB-T NIM module memory
@param [in]   I2cReadingByteNumMax        Maximum I2C reading byte number for basic I2C reading function
@param [in]   I2cWritingByteNumMax        Maximum I2C writing byte number for basic I2C writing function
@param [in]   I2cRead                     Basic I2C reading function pointer
@param [in]   I2cWrite                    Basic I2C writing function pointer
@param [in]   WaitMs                      Basic waiting function pointer
@param [in]   pRtl2832ExtraModuleMemory   Pointer to an allocated RTL2832 extra module memory
@param [in]   DemodDeviceAddr             RTL2832 I2C device address
@param [in]   DemodCrystalFreqHz          RTL2832 crystal frequency in Hz
@param [in]   DemodAppMode                RTL2832 application mode for setting
@param [in]   DemodTsInterfaceMode        RTL2832 TS interface mode for setting
@param [in]   pFc2580ExtraModuleMemory    Pointer to an allocated FC2580 extra module memory
@param [in]   TunerDeviceAddr             FC2580 I2C device address
@param [in]   TunerAgcMode                FC2580 AGC mode


@note
	-# One should call BuildRtl2832Fc2580Module() to build RTL2832 FC2580 NIM module before using it.

*/
void
BuildRtl2832Fc2580Module(
	DVBT_NIM_MODULE **ppNim,								// DVB-T NIM dependence
	DVBT_NIM_MODULE *pDvbtNimModuleMemory,

	unsigned char I2cReadingByteNumMax,						// Base interface dependence
	unsigned char I2cWritingByteNumMax,
	BASE_FP_I2C_READ I2cRead,
	BASE_FP_I2C_WRITE I2cWrite,
	BASE_FP_WAIT_MS WaitMs,

	RTL2832_EXTRA_MODULE *pRtl2832ExtraModuleMemory,		// Demod dependence
	unsigned char DemodDeviceAddr,
	unsigned long DemodCrystalFreqHz,
	int DemodAppMode,
	int DemodTsInterfaceMode,
	unsigned long DemodUpdateFuncRefPeriodMs,
	int DemodIsFunc1Enabled,

	FC2580_EXTRA_MODULE *pFc2580ExtraModuleMemory,			// Tuner dependence
	unsigned char TunerDeviceAddr,
	unsigned long TunerCrystalFreqHz,
	int TunerAgcMode
	)
{
	DVBT_NIM_MODULE *pNim;



	// Set NIM module pointer with NIM module memory.
	*ppNim = pDvbtNimModuleMemory;
	
	// Get NIM module.
	pNim = *ppNim;

	// Set I2C bridge module pointer with I2C bridge module memory.
	pNim->pI2cBridge = &pNim->I2cBridgeModuleMemory;

	// Set NIM extra module pointer.
	pNim->pExtra = INVALID_POINTER_VALUE;


	// Set NIM type.
	pNim->NimType = DVBT_NIM_RTL2832_FC2580;


	// Build base interface module.
	BuildBaseInterface(
		&pNim->pBaseInterface,
		&pNim->BaseInterfaceModuleMemory,
		I2cReadingByteNumMax,
		I2cWritingByteNumMax,
		I2cRead,
		I2cWrite,
		WaitMs
		);

	// Build RTL2832 demod module.
	BuildRtl2832Module(
		&pNim->pDemod,
		&pNim->DvbtDemodModuleMemory,
		pRtl2832ExtraModuleMemory,
		&pNim->BaseInterfaceModuleMemory,
		&pNim->I2cBridgeModuleMemory,
		DemodDeviceAddr,
		DemodCrystalFreqHz,
		DemodAppMode,
		DemodUpdateFuncRefPeriodMs,
		DemodIsFunc1Enabled
		);

	// Build FC2580 tuner module.
	BuildFc2580Module(
		&pNim->pTuner,
		&pNim->TunerModuleMemory,
		pFc2580ExtraModuleMemory,
		&pNim->BaseInterfaceModuleMemory,
		&pNim->I2cBridgeModuleMemory,
		TunerDeviceAddr,
		TunerCrystalFreqHz,
		TunerAgcMode
		);


	// Set NIM module variables.
	pNim->DemodTsInterfaceMode = DemodTsInterfaceMode;


	// Set NIM module function pointers with default functions.
	pNim->GetNimType        = dvbt_nim_default_GetNimType;
	pNim->GetParameters     = dvbt_nim_default_GetParameters;
	pNim->IsSignalPresent   = dvbt_nim_default_IsSignalPresent;
	pNim->IsSignalLocked    = dvbt_nim_default_IsSignalLocked;
	pNim->GetSignalStrength = dvbt_nim_default_GetSignalStrength;
	pNim->GetSignalQuality  = dvbt_nim_default_GetSignalQuality;
	pNim->GetBer            = dvbt_nim_default_GetBer;
	pNim->GetSnrDb          = dvbt_nim_default_GetSnrDb;
	pNim->GetTrOffsetPpm    = dvbt_nim_default_GetTrOffsetPpm;
	pNim->GetCrOffsetHz     = dvbt_nim_default_GetCrOffsetHz;
	pNim->GetTpsInfo        = dvbt_nim_default_GetTpsInfo;
	pNim->UpdateFunction    = dvbt_nim_default_UpdateFunction;

	// Set NIM module function pointers with particular functions.
	pNim->Initialize     = rtl2832_fc2580_Initialize;
	pNim->SetParameters  = rtl2832_fc2580_SetParameters;


	return;
}
예제 #2
0
/**

@brief   RTL2836 MxL5007T NIM module builder

Use BuildRtl2836Mxl5007tModule() to build RTL2836 MxL5007T NIM module, set all module function pointers with the
corresponding functions, and initialize module private variables.

@param [in]   ppNim                        Pointer to RTL2836 MxL5007T NIM module pointer
@param [in]   pDtmbNimModuleMemory         Pointer to an allocated DTMB NIM module memory
@param [in]   I2cReadingByteNumMax         Maximum I2C reading byte number for basic I2C reading function
@param [in]   I2cWritingByteNumMax         Maximum I2C writing byte number for basic I2C writing function
@param [in]   I2cRead                      Basic I2C reading function pointer
@param [in]   I2cWrite                     Basic I2C writing function pointer
@param [in]   WaitMs                       Basic waiting function pointer
@param [in]   DemodDeviceAddr              RTL2836 I2C device address
@param [in]   DemodCrystalFreqHz           RTL2836 crystal frequency in Hz
@param [in]   DemodTsInterfaceMode         RTL2836 TS interface mode
@param [in]   DemodUpdateFuncRefPeriodMs   RTL2836 update function reference period in millisecond
@param [in]   DemodIsFunc1Enabled          RTL2836 Function 1 enabling status for setting
@param [in]   DemodIsFunc2Enabled          RTL2836 Function 2 enabling status for setting
@param [in]   TunerDeviceAddr              MxL5007T I2C device address
@param [in]   TunerCrystalFreqHz           MxL5007T crystal frequency in Hz
@param [in]   TunerLoopThroughMode         MxL5007T loop-through mode
@param [in]   TunerClkOutMode              MxL5007T clock output mode
@param [in]   TunerClkOutAmpMode           MxL5007T clock output amplitude mode

@note
	-# One should call BuildRtl2836Mxl5007tModule() to build RTL2836 MxL5007T NIM module before using it.

*/
void
BuildRtl2836Mxl5007tModule(
	DTMB_NIM_MODULE **ppNim,							// DTMB NIM dependence
	DTMB_NIM_MODULE *pDtmbNimModuleMemory,

	u64 I2cReadingByteNumMax,					// Base interface dependence
	u64 I2cWritingByteNumMax,
	BASE_FP_I2C_READ I2cRead,
	BASE_FP_I2C_WRITE I2cWrite,
	BASE_FP_WAIT_MS WaitMs,

	u8 DemodDeviceAddr,						// Demod dependence
	u64 DemodCrystalFreqHz,
	s32 DemodTsInterfaceMode,
	u64 DemodUpdateFuncRefPeriodMs,
	s32 DemodIsFunc1Enabled,
	s32 DemodIsFunc2Enabled,

	u8 TunerDeviceAddr,						// Tuner dependence
	u64 TunerCrystalFreqHz,
	s32 TunerLoopThroughMode,
	s32 TunerClkOutMode,
	s32 TunerClkOutAmpMode
	)
{
	DTMB_NIM_MODULE *pNim;



	// Set NIM module pointer with NIM module memory.
	*ppNim = pDtmbNimModuleMemory;
	
	// Get NIM module.
	pNim = *ppNim;

	// Set I2C bridge module pointer with I2C bridge module memory.
	pNim->pI2cBridge = &pNim->I2cBridgeModuleMemory;


	// Set NIM type.
	pNim->NimType = DTMB_NIM_RTL2836_MXL5007T;


	// Build base interface module.
	BuildBaseInterface(
		&pNim->pBaseInterface,
		&pNim->BaseInterfaceModuleMemory,
		I2cReadingByteNumMax,
		I2cWritingByteNumMax,
		I2cRead,
		I2cWrite,
		WaitMs
		);

	// Build RTL2836 demod module.
	BuildRtl2836Module(
		&pNim->pDemod,
		&pNim->DtmbDemodModuleMemory,
		&pNim->BaseInterfaceModuleMemory,
		&pNim->I2cBridgeModuleMemory,
		DemodDeviceAddr,
		DemodCrystalFreqHz,
		DemodTsInterfaceMode,
		DemodUpdateFuncRefPeriodMs,
		DemodIsFunc1Enabled,
		DemodIsFunc2Enabled
		);

	// Build MxL5007T tuner module.
	BuildMxl5007tModule(
		&pNim->pTuner,
		&pNim->TunerModuleMemory,
		&pNim->BaseInterfaceModuleMemory,
		&pNim->I2cBridgeModuleMemory,
		TunerDeviceAddr,
		TunerCrystalFreqHz,
		RTL2836_MXL5007T_STANDARD_MODE_DEFAULT,
		RTL2836_MXL5007T_IF_FREQ_HZ_DEFAULT,
		RTL2836_MXL5007T_SPECTRUM_MODE_DEFAULT,
		TunerLoopThroughMode,
		TunerClkOutMode,
		TunerClkOutAmpMode,
		RTL2836_MXL5007T_QAM_IF_DIFF_OUT_LEVEL_DEFAULT
		);


	// Set NIM module function pointers with default functions.
	pNim->GetNimType        = dtmb_nim_default_GetNimType;
	pNim->GetParameters     = dtmb_nim_default_GetParameters;
	pNim->IsSignalPresent   = dtmb_nim_default_IsSignalPresent;
	pNim->IsSignalLocked    = dtmb_nim_default_IsSignalLocked;
	pNim->GetSignalStrength = dtmb_nim_default_GetSignalStrength;
	pNim->GetSignalQuality  = dtmb_nim_default_GetSignalQuality;
	pNim->GetBer            = dtmb_nim_default_GetBer;
	pNim->GetPer            = dtmb_nim_default_GetPer;
	pNim->GetSnrDb          = dtmb_nim_default_GetSnrDb;
	pNim->GetTrOffsetPpm    = dtmb_nim_default_GetTrOffsetPpm;
	pNim->GetCrOffsetHz     = dtmb_nim_default_GetCrOffsetHz;
	pNim->GetSignalInfo     = dtmb_nim_default_GetSignalInfo;
	pNim->UpdateFunction    = dtmb_nim_default_UpdateFunction;

	// Set NIM module function pointers with particular functions.
	pNim->Initialize     = rtl2836_mxl5007t_Initialize;
	pNim->SetParameters  = rtl2836_mxl5007t_SetParameters;


	return;
}
예제 #3
0
/**

@brief   RTL2832 TDA18272 NIM module builder

Use BuildRtl2832Tda18272Module() to build RTL2832 TDA18272 NIM module, set all module function pointers with the
corresponding functions, and initialize module private variables.

@param [in]   ppNim                        Pointer to RTL2832 TDA18272 NIM module pointer
@param [in]   pDvbtNimModuleMemory         Pointer to an allocated DVB-T NIM module memory
@param [in]   I2cReadingByteNumMax         Maximum I2C reading byte number for basic I2C reading function
@param [in]   I2cWritingByteNumMax         Maximum I2C writing byte number for basic I2C writing function
@param [in]   I2cRead                      Basic I2C reading function pointer
@param [in]   I2cWrite                     Basic I2C writing function pointer
@param [in]   WaitMs                       Basic waiting function pointer
@param [in]   DemodDeviceAddr              RTL2832 I2C device address
@param [in]   DemodCrystalFreqHz           RTL2832 crystal frequency in Hz
@param [in]   DemodTsInterfaceMode         RTL2832 TS interface mode for setting
@param [in]   DemodAppMode                 RTL2832 application mode for setting
@param [in]   DemodUpdateFuncRefPeriodMs   RTL2832 update function reference period in millisecond for setting
@param [in]   DemodIsFunc1Enabled          RTL2832 Function 1 enabling status for setting
@param [in]   TunerDeviceAddr              TDA18272 I2C device address
@param [in]   TunerCrystalFreqHz           TDA18272 crystal frequency in Hz
@param [in]   TunerUnitNo                  TDA18272 unit number
@param [in]   TunerIfOutputVppMode         TDA18272 IF output Vp-p mode

@note
	-# One should call BuildRtl2832Tda18272Module() to build RTL2832 TDA18272 NIM module before using it.
*/
void
BuildRtl2832Tda18272Module(
	DVBT_NIM_MODULE **ppNim,							// DVB-T NIM dependence
	DVBT_NIM_MODULE *pDvbtNimModuleMemory,

	u64 I2cReadingByteNumMax,					// Base interface dependence
	u64 I2cWritingByteNumMax,
	BASE_FP_I2C_READ I2cRead,
	BASE_FP_I2C_WRITE I2cWrite,
	BASE_FP_WAIT_MS WaitMs,

	u8 DemodDeviceAddr,						// Demod dependence
	u64 DemodCrystalFreqHz,
	s32 DemodTsInterfaceMode,
	s32 DemodAppMode,
	u64 DemodUpdateFuncRefPeriodMs,
	s32 DemodIsFunc1Enabled,

	u8 TunerDeviceAddr,						// Tuner dependence
	u64 TunerCrystalFreqHz,
	s32 TunerUnitNo,
	s32 TunerIfOutputVppMode
	)
{
	DVBT_NIM_MODULE *pNim;


	// Set NIM module pointer with NIM module memory.
	*ppNim = pDvbtNimModuleMemory;
	
	// Get NIM module.
	pNim = *ppNim;


	// Set I2C bridge module pointer with I2C bridge module memory.
	pNim->pI2cBridge = &pNim->I2cBridgeModuleMemory;


	// Set NIM type.
	pNim->NimType = DVBT_NIM_RTL2832_TDA18272;


	// Build base interface module.
	BuildBaseInterface(
		&pNim->pBaseInterface,
		&pNim->BaseInterfaceModuleMemory,
		I2cReadingByteNumMax,
		I2cWritingByteNumMax,
		I2cRead,
		I2cWrite,
		WaitMs
		);

	// Build RTL2832 demod module.
	BuildRtl2832Module(
		&pNim->pDemod,
		&pNim->DvbtDemodModuleMemory,
		&pNim->BaseInterfaceModuleMemory,
		&pNim->I2cBridgeModuleMemory,
		DemodDeviceAddr,
		DemodCrystalFreqHz,
		DemodTsInterfaceMode,
		DemodAppMode,
		DemodUpdateFuncRefPeriodMs,
		DemodIsFunc1Enabled
		);

	// Build TDA18272 tuner module.
	BuildTda18272Module(
		&pNim->pTuner,
		&pNim->TunerModuleMemory,
		&pNim->BaseInterfaceModuleMemory,
		&pNim->I2cBridgeModuleMemory,
		TunerDeviceAddr,
		TunerCrystalFreqHz,
		TunerUnitNo,
		TunerIfOutputVppMode
		);


	// Set NIM module function pointers with default functions.
	pNim->GetNimType        = dvbt_nim_default_GetNimType;
	pNim->GetParameters     = dvbt_nim_default_GetParameters;
	pNim->IsSignalPresent   = dvbt_nim_default_IsSignalPresent;
	pNim->IsSignalLocked    = dvbt_nim_default_IsSignalLocked;
	pNim->GetSignalStrength = dvbt_nim_default_GetSignalStrength;
	pNim->GetSignalQuality  = dvbt_nim_default_GetSignalQuality;
	pNim->GetBer            = dvbt_nim_default_GetBer;
	pNim->GetSnrDb          = dvbt_nim_default_GetSnrDb;
	pNim->GetTrOffsetPpm    = dvbt_nim_default_GetTrOffsetPpm;
	pNim->GetCrOffsetHz     = dvbt_nim_default_GetCrOffsetHz;
	pNim->GetTpsInfo        = dvbt_nim_default_GetTpsInfo;
	pNim->UpdateFunction    = dvbt_nim_default_UpdateFunction;

	// Set NIM module function pointers with particular functions.
	pNim->Initialize    = rtl2832_tda18272_Initialize;
	pNim->SetParameters = rtl2832_tda18272_SetParameters;

	return;
}
/**

@brief   RTL2836 FC2580 NIM module builder

Use BuildRtl2836Fc2580Module() to build RTL2836 FC2580 NIM module, set all module function pointers with the
corresponding functions, and initialize module private variables.


@param [in]   ppNim                        Pointer to RTL2836 FC2580 NIM module pointer
@param [in]   pDtmbNimModuleMemory         Pointer to an allocated DTMB NIM module memory
@param [in]   I2cReadingByteNumMax         Maximum I2C reading byte number for basic I2C reading function
@param [in]   I2cWritingByteNumMax         Maximum I2C writing byte number for basic I2C writing function
@param [in]   I2cRead                      Basic I2C reading function pointer
@param [in]   I2cWrite                     Basic I2C writing function pointer
@param [in]   WaitMs                       Basic waiting function pointer
@param [in]   DemodDeviceAddr              RTL2836 I2C device address
@param [in]   DemodCrystalFreqHz           RTL2836 crystal frequency in Hz
@param [in]   DemodTsInterfaceMode         RTL2836 TS interface mode
@param [in]   DemodUpdateFuncRefPeriodMs   RTL2836 update function reference period in millisecond
@param [in]   DemodIsFunc1Enabled          RTL2836 Function 1 enabling status for setting
@param [in]   DemodIsFunc2Enabled          RTL2836 Function 2 enabling status for setting
@param [in]   TunerDeviceAddr              FC2580 I2C device address
@param [in]   TunerCrystalFreqHz           FC2580 crystal frequency in Hz
@param [in]   TunerAgcMode                 FC2580 AGC mode


@note
	-# One should call BuildRtl2836Fc2580Module() to build RTL2836 FC2580 NIM module before using it.

*/
void
BuildRtl2836Fc2580Module(
    DTMB_NIM_MODULE **ppNim,							// DTMB NIM dependence
    DTMB_NIM_MODULE *pDtmbNimModuleMemory,

    unsigned long I2cReadingByteNumMax,					// Base interface dependence
    unsigned long I2cWritingByteNumMax,
    BASE_FP_I2C_READ I2cRead,
    BASE_FP_I2C_WRITE I2cWrite,
    BASE_FP_WAIT_MS WaitMs,

    unsigned char DemodDeviceAddr,						// Demod dependence
    unsigned long DemodCrystalFreqHz,
    int DemodTsInterfaceMode,
    unsigned long DemodUpdateFuncRefPeriodMs,
    int DemodIsFunc1Enabled,
    int DemodIsFunc2Enabled,

    unsigned char TunerDeviceAddr,						// Tuner dependence
    unsigned long TunerCrystalFreqHz,
    int TunerAgcMode
)
{
    DTMB_NIM_MODULE *pNim;



    // Set NIM module pointer with NIM module memory.
    *ppNim = pDtmbNimModuleMemory;

    // Get NIM module.
    pNim = *ppNim;

    // Set I2C bridge module pointer with I2C bridge module memory.
    pNim->pI2cBridge = &pNim->I2cBridgeModuleMemory;


    // Set NIM type.
    pNim->NimType = DTMB_NIM_RTL2836_FC2580;


    // Build base interface module.
    BuildBaseInterface(
        &pNim->pBaseInterface,
        &pNim->BaseInterfaceModuleMemory,
        I2cReadingByteNumMax,
        I2cWritingByteNumMax,
        I2cRead,
        I2cWrite,
        WaitMs
    );

    // Build RTL2836 demod module.
    BuildRtl2836Module(
        &pNim->pDemod,
        &pNim->DtmbDemodModuleMemory,
        &pNim->BaseInterfaceModuleMemory,
        &pNim->I2cBridgeModuleMemory,
        DemodDeviceAddr,
        DemodCrystalFreqHz,
        DemodTsInterfaceMode,
        DemodUpdateFuncRefPeriodMs,
        DemodIsFunc1Enabled,
        DemodIsFunc2Enabled
    );

    // Build FC2580 tuner module.
    BuildFc2580Module(
        &pNim->pTuner,
        &pNim->TunerModuleMemory,
        &pNim->BaseInterfaceModuleMemory,
        &pNim->I2cBridgeModuleMemory,
        TunerDeviceAddr,
        TunerCrystalFreqHz,
        TunerAgcMode
    );


    // Set NIM module function pointers with default functions.
    pNim->GetNimType        = dtmb_nim_default_GetNimType;
    pNim->GetParameters     = dtmb_nim_default_GetParameters;
    pNim->IsSignalPresent   = dtmb_nim_default_IsSignalPresent;
    pNim->IsSignalLocked    = dtmb_nim_default_IsSignalLocked;
    pNim->GetSignalStrength = dtmb_nim_default_GetSignalStrength;
    pNim->GetSignalQuality  = dtmb_nim_default_GetSignalQuality;
    pNim->GetBer            = dtmb_nim_default_GetBer;
    pNim->GetPer            = dtmb_nim_default_GetPer;
    pNim->GetSnrDb          = dtmb_nim_default_GetSnrDb;
    pNim->GetTrOffsetPpm    = dtmb_nim_default_GetTrOffsetPpm;
    pNim->GetCrOffsetHz     = dtmb_nim_default_GetCrOffsetHz;
    pNim->GetSignalInfo     = dtmb_nim_default_GetSignalInfo;
    pNim->UpdateFunction    = dtmb_nim_default_UpdateFunction;

    // Set NIM module function pointers with particular functions.
    pNim->Initialize     = rtl2836_fc2580_Initialize;
    pNim->SetParameters  = rtl2836_fc2580_SetParameters;


    return;
}
/**

@brief   RTL2832 MAX3543 NIM module builder

Use BuildRtl2832Max3543Module() to build RTL2832 MAX3543 NIM module, set all module function pointers with the
corresponding functions, and initialize module private variables.


@param [in]   ppNim                        Pointer to RTL2832 MAX3543 NIM module pointer
@param [in]   pDvbtNimModuleMemory         Pointer to an allocated DVB-T NIM module memory
@param [in]   I2cReadingByteNumMax         Maximum I2C reading byte number for basic I2C reading function
@param [in]   I2cWritingByteNumMax         Maximum I2C writing byte number for basic I2C writing function
@param [in]   I2cRead                      Basic I2C reading function pointer
@param [in]   I2cWrite                     Basic I2C writing function pointer
@param [in]   WaitMs                       Basic waiting function pointer
@param [in]   DemodDeviceAddr              RTL2832 I2C device address
@param [in]   DemodCrystalFreqHz           RTL2832 crystal frequency in Hz
@param [in]   DemodTsInterfaceMode         RTL2832 TS interface mode for setting
@param [in]   DemodAppMode                 RTL2832 application mode for setting
@param [in]   DemodUpdateFuncRefPeriodMs   RTL2832 update function reference period in millisecond for setting
@param [in]   DemodIsFunc1Enabled          RTL2832 Function 1 enabling status for setting
@param [in]   TunerDeviceAddr              MAX3543 I2C device address
@param [in]   TunerCrystalFreqHz           MAX3543 crystal frequency in Hz


@note
	-# One should call BuildRtl2832Max3543Module() to build RTL2832 MAX3543 NIM module before using it.

*/
void
BuildRtl2832Max3543Module(
	DVBT_NIM_MODULE **ppNim,							// DVB-T NIM dependence
	DVBT_NIM_MODULE *pDvbtNimModuleMemory,

	unsigned long I2cReadingByteNumMax,					// Base interface dependence
	unsigned long I2cWritingByteNumMax,
	BASE_FP_I2C_READ I2cRead,
	BASE_FP_I2C_WRITE I2cWrite,
	BASE_FP_WAIT_MS WaitMs,

	unsigned char DemodDeviceAddr,						// Demod dependence
	unsigned long DemodCrystalFreqHz,
	int DemodTsInterfaceMode,
	int DemodAppMode,
	unsigned long DemodUpdateFuncRefPeriodMs,
	int DemodIsFunc1Enabled,

	unsigned char TunerDeviceAddr,						// Tuner dependence
	unsigned long TunerCrystalFreqHz
	)
{
	DVBT_NIM_MODULE *pNim;



	// Set NIM module pointer with NIM module memory.
	*ppNim = pDvbtNimModuleMemory;
	
	// Get NIM module.
	pNim = *ppNim;

	// Set I2C bridge module pointer with I2C bridge module memory.
	pNim->pI2cBridge = &pNim->I2cBridgeModuleMemory;


	// Set NIM type.
	pNim->NimType = DVBT_NIM_RTL2832_MAX3543;


	// Build base interface module.
	BuildBaseInterface(
		&pNim->pBaseInterface,
		&pNim->BaseInterfaceModuleMemory,
		I2cReadingByteNumMax,
		I2cWritingByteNumMax,
		I2cRead,
		I2cWrite,
		WaitMs
		);

	// Build RTL2832 demod module.
	BuildRtl2832Module(
		&pNim->pDemod,
		&pNim->DvbtDemodModuleMemory,
		&pNim->BaseInterfaceModuleMemory,
		&pNim->I2cBridgeModuleMemory,
		DemodDeviceAddr,
		DemodCrystalFreqHz,
		DemodTsInterfaceMode,
		DemodAppMode,
		DemodUpdateFuncRefPeriodMs,
		DemodIsFunc1Enabled
		);

	// Build MAX3543 tuner module.
	BuildMax3543Module(
		&pNim->pTuner,
		&pNim->TunerModuleMemory,
		&pNim->BaseInterfaceModuleMemory,
		&pNim->I2cBridgeModuleMemory,
		TunerDeviceAddr,
		TunerCrystalFreqHz,
		RTL2832_MAX3543_STANDARD_MODE_DEFAULT,
		RTL2832_MAX3543_IF_FREQ_HZ_DEFAULT,
		RTL2832_MAX3543_SAW_INPUT_TYPE_DEFAULT
		);


	// Set NIM module function pointers with default functions.
	pNim->GetNimType        = dvbt_nim_default_GetNimType;
	pNim->GetParameters     = dvbt_nim_default_GetParameters;
	pNim->IsSignalPresent   = dvbt_nim_default_IsSignalPresent;
	pNim->IsSignalLocked    = dvbt_nim_default_IsSignalLocked;
	pNim->GetSignalStrength = dvbt_nim_default_GetSignalStrength;
	pNim->GetSignalQuality  = dvbt_nim_default_GetSignalQuality;
	pNim->GetBer            = dvbt_nim_default_GetBer;
	pNim->GetSnrDb          = dvbt_nim_default_GetSnrDb;
	pNim->GetTrOffsetPpm    = dvbt_nim_default_GetTrOffsetPpm;
	pNim->GetCrOffsetHz     = dvbt_nim_default_GetCrOffsetHz;
	pNim->GetTpsInfo        = dvbt_nim_default_GetTpsInfo;
	pNim->UpdateFunction    = dvbt_nim_default_UpdateFunction;

	// Set NIM module function pointers with particular functions.
	pNim->Initialize     = rtl2832_max3543_Initialize;
	pNim->SetParameters  = rtl2832_max3543_SetParameters;


	return;
}
예제 #6
0
/**

@brief   RTL2832 MT2266 NIM module builder

Use BuildRtl2832Mt2266Module() to build RTL2832 MT2266 NIM module, set all module function pointers with the
corresponding functions, and initialize module private variables.


@param [in]   ppNim                       Pointer to RTL2832 MT2266 NIM module pointer
@param [in]   pDvbtNimModuleMemory        Pointer to an allocated DVB-T NIM module memory
@param [in]   I2cReadingByteNumMax        Maximum I2C reading byte number for basic I2C reading function
@param [in]   I2cWritingByteNumMax        Maximum I2C writing byte number for basic I2C writing function
@param [in]   I2cRead                     Basic I2C reading function pointer
@param [in]   I2cWrite                    Basic I2C writing function pointer
@param [in]   WaitMs                      Basic waiting function pointer
@param [in]   pRtl2832ExtraModuleMemory   Pointer to an allocated RTL2832 extra module memory
@param [in]   DemodDeviceAddr             RTL2832 I2C device address
@param [in]   DemodCrystalFreqHz          RTL2832 crystal frequency in Hz
@param [in]   DemodAppMode                RTL2832 application mode for setting
@param [in]   DemodTsInterfaceMode        RTL2832 TS interface mode for setting
@param [in]   pMt2266ExtraModuleMemory    Pointer to an allocated MT2266 extra module memory
@param [in]   TunerDeviceAddr             MT2266 I2C device address


@note
	-# One should call BuildRtl2832Mt2266Module() to build RTL2832 MT2266 NIM module before using it.

*/
void
BuildRtl2832Mt2266Module(
	DVBT_NIM_MODULE **ppNim,								// DVB-T NIM dependence
	DVBT_NIM_MODULE *pDvbtNimModuleMemory,
	RTL2832_MT2266_EXTRA_MODULE *pRtl2832Mt2266ExtraModuleMemory,

	unsigned char I2cReadingByteNumMax,						// Base interface dependence
	unsigned char I2cWritingByteNumMax,
	BASE_FP_I2C_READ I2cRead,
	BASE_FP_I2C_WRITE I2cWrite,
	BASE_FP_WAIT_MS WaitMs,

	RTL2832_EXTRA_MODULE *pRtl2832ExtraModuleMemory,		// Demod dependence
	unsigned char DemodDeviceAddr,
	unsigned long DemodCrystalFreqHz,
	int DemodAppMode,
	int DemodTsInterfaceMode,
	unsigned long DemodUpdateFuncRefPeriodMs,
	int DemodIsFunc1Enabled,

	MT2266_EXTRA_MODULE *pMt2266ExtraModuleMemory,			// Tuner dependence
	unsigned char TunerDeviceAddr
	)
{
	DVBT_NIM_MODULE *pNim;
	RTL2832_MT2266_EXTRA_MODULE *pExtra;



	// Set NIM module pointer with NIM module memory.
	*ppNim = pDvbtNimModuleMemory;
	
	// Get NIM module.
	pNim = *ppNim;

	// Set I2C bridge module pointer with I2C bridge module memory.
	pNim->pI2cBridge = &pNim->I2cBridgeModuleMemory;

	// Set NIM extra module pointer.
	pNim->pExtra = pRtl2832Mt2266ExtraModuleMemory;

	// Get NIM extra module.
	pExtra = (RTL2832_MT2266_EXTRA_MODULE *)pNim->pExtra;


	// Set NIM type.
	pNim->NimType = DVBT_NIM_RTL2832_MT2266;


	// Build base interface module.
	BuildBaseInterface(
		&pNim->pBaseInterface,
		&pNim->BaseInterfaceModuleMemory,
		I2cReadingByteNumMax,
		I2cWritingByteNumMax,
		I2cRead,
		I2cWrite,
		WaitMs
		);

	// Build RTL2832 demod module.
	BuildRtl2832Module(
		&pNim->pDemod,
		&pNim->DvbtDemodModuleMemory,
		pRtl2832ExtraModuleMemory,
		&pNim->BaseInterfaceModuleMemory,
		&pNim->I2cBridgeModuleMemory,
		DemodDeviceAddr,
		DemodCrystalFreqHz,
		DemodAppMode,
		DemodUpdateFuncRefPeriodMs,
		DemodIsFunc1Enabled
		);

	// Build MT2266 tuner module.
	BuildMt2266Module(
		&pNim->pTuner,
		&pNim->TunerModuleMemory,
		pMt2266ExtraModuleMemory,
		&pNim->BaseInterfaceModuleMemory,
		&pNim->I2cBridgeModuleMemory,
		TunerDeviceAddr
		);


	// Set NIM module variables.
	pNim->DemodTsInterfaceMode = DemodTsInterfaceMode;


	// Set NIM module function pointers with default functions.
	pNim->GetNimType        = dvbt_nim_default_GetNimType;
	pNim->GetParameters     = dvbt_nim_default_GetParameters;
	pNim->IsSignalPresent   = dvbt_nim_default_IsSignalPresent;
	pNim->IsSignalLocked    = dvbt_nim_default_IsSignalLocked;
	pNim->GetSignalStrength = dvbt_nim_default_GetSignalStrength;
	pNim->GetSignalQuality  = dvbt_nim_default_GetSignalQuality;
	pNim->GetBer            = dvbt_nim_default_GetBer;
	pNim->GetSnrDb          = dvbt_nim_default_GetSnrDb;
	pNim->GetTrOffsetPpm    = dvbt_nim_default_GetTrOffsetPpm;
	pNim->GetCrOffsetHz     = dvbt_nim_default_GetCrOffsetHz;
	pNim->GetTpsInfo        = dvbt_nim_default_GetTpsInfo;

	// Set NIM module function pointers with particular functions.
	pNim->Initialize     = rtl2832_mt2266_Initialize;
	pNim->SetParameters  = rtl2832_mt2266_SetParameters;
	pNim->UpdateFunction = rtl2832_mt2266_UpdateFunction;


	// Initialize NIM extra module variables.
	pExtra->LnaConfig       = 0xff;
	pExtra->UhfSens         = 0xff;
	pExtra->AgcCurrentState = 0xff;
	pExtra->LnaGainOld      = 0xffffffff;


	return;
}
/**

@brief   RTL2832 FC0013 NIM module builder

Use BuildRtl2832Fc0013Module() to build RTL2832 FC0013 NIM module, set all module function pointers with the
corresponding functions, and initialize module private variables.


@param [in]   ppNim                        Pointer to RTL2832 FC0013 NIM module pointer
@param [in]   pDvbtNimModuleMemory         Pointer to an allocated DVB-T NIM module memory
@param [in]   I2cReadingByteNumMax         Maximum I2C reading byte number for basic I2C reading function
@param [in]   I2cWritingByteNumMax         Maximum I2C writing byte number for basic I2C writing function
@param [in]   I2cRead                      Basic I2C reading function pointer
@param [in]   I2cWrite                     Basic I2C writing function pointer
@param [in]   WaitMs                       Basic waiting function pointer
@param [in]   DemodDeviceAddr              RTL2832 I2C device address
@param [in]   DemodCrystalFreqHz           RTL2832 crystal frequency in Hz
@param [in]   DemodTsInterfaceMode         RTL2832 TS interface mode for setting
@param [in]   DemodAppMode                 RTL2832 application mode for setting
@param [in]   DemodUpdateFuncRefPeriodMs   RTL2832 update function reference period in millisecond for setting
@param [in]   DemodIsFunc1Enabled          RTL2832 Function 1 enabling status for setting
@param [in]   TunerDeviceAddr              FC0013 I2C device address
@param [in]   TunerCrystalFreqHz           FC0013 crystal frequency in Hz


@note
	-# One should call BuildRtl2832Fc0013Module() to build RTL2832 FC0013 NIM module before using it.

*/
void
BuildRtl2832Fc0013Module(
	DVBT_NIM_MODULE **ppNim,							// DVB-T NIM dependence
	DVBT_NIM_MODULE *pDvbtNimModuleMemory,

	unsigned long I2cReadingByteNumMax,					// Base interface dependence
	unsigned long I2cWritingByteNumMax,
	BASE_FP_I2C_READ I2cRead,
	BASE_FP_I2C_WRITE I2cWrite,
	BASE_FP_WAIT_MS WaitMs,

	unsigned char DemodDeviceAddr,						// Demod dependence
	unsigned long DemodCrystalFreqHz,
	int DemodTsInterfaceMode,
	int DemodAppMode,
	unsigned long DemodUpdateFuncRefPeriodMs,
	int DemodIsFunc1Enabled,

	unsigned char TunerDeviceAddr,						// Tuner dependence
	unsigned long TunerCrystalFreqHz
	)
{
	DVBT_NIM_MODULE *pNim;
	RTL2832_FC0013_EXTRA_MODULE *pNimExtra;



	// Set NIM module pointer with NIM module memory.
	*ppNim = pDvbtNimModuleMemory;
	
	// Get NIM module.
	pNim = *ppNim;

	// Set I2C bridge module pointer with I2C bridge module memory.
	pNim->pI2cBridge = &pNim->I2cBridgeModuleMemory;

	// Get NIM extra module.
	pNimExtra = &(pNim->Extra.Rtl2832Fc0013);


	// Set NIM type.
	pNim->NimType = DVBT_NIM_RTL2832_FC0013;


	// Build base interface module.
	BuildBaseInterface(
		&pNim->pBaseInterface,
		&pNim->BaseInterfaceModuleMemory,
		I2cReadingByteNumMax,
		I2cWritingByteNumMax,
		I2cRead,
		I2cWrite,
		WaitMs
		);

	// Build RTL2832 demod module.
	BuildRtl2832Module(
		&pNim->pDemod,
		&pNim->DvbtDemodModuleMemory,
		&pNim->BaseInterfaceModuleMemory,
		&pNim->I2cBridgeModuleMemory,
		DemodDeviceAddr,
		DemodCrystalFreqHz,
		DemodTsInterfaceMode,
		DemodAppMode,
		DemodUpdateFuncRefPeriodMs,
		DemodIsFunc1Enabled
		);

	// Build FC0013 tuner module.
	BuildFc0013Module(
		&pNim->pTuner,
		&pNim->TunerModuleMemory,
		&pNim->BaseInterfaceModuleMemory,
		&pNim->I2cBridgeModuleMemory,
		TunerDeviceAddr,
		TunerCrystalFreqHz
		);


	// Set NIM module function pointers with default functions.
	pNim->GetNimType        = dvbt_nim_default_GetNimType;
	pNim->GetParameters     = dvbt_nim_default_GetParameters;
	pNim->IsSignalPresent   = dvbt_nim_default_IsSignalPresent;
	pNim->IsSignalLocked    = dvbt_nim_default_IsSignalLocked;
	pNim->GetSignalStrength = dvbt_nim_default_GetSignalStrength;
	pNim->GetSignalQuality  = dvbt_nim_default_GetSignalQuality;
	pNim->GetBer            = dvbt_nim_default_GetBer;
	pNim->GetSnrDb          = dvbt_nim_default_GetSnrDb;
	pNim->GetTrOffsetPpm    = dvbt_nim_default_GetTrOffsetPpm;
	pNim->GetCrOffsetHz     = dvbt_nim_default_GetCrOffsetHz;
	pNim->GetTpsInfo        = dvbt_nim_default_GetTpsInfo;

	// Set NIM module function pointers with particular functions.
	pNim->Initialize     = rtl2832_fc0013_Initialize;
	pNim->SetParameters  = rtl2832_fc0013_SetParameters;
	pNim->UpdateFunction = rtl2832_fc0013_UpdateFunction;


	// Initialize NIM extra module variables.
	pNimExtra->LnaUpdateWaitTimeMax = DivideWithCeiling(RTL2832_FC0013_LNA_UPDATE_WAIT_TIME_MS, DemodUpdateFuncRefPeriodMs);
	pNimExtra->LnaUpdateWaitTime    = 0;


	return;
}
/**

@brief   RTL2836B DVBC VA1T1ED6093 NIM module builder

Use BuildRtl2836bDvbcVa1t1ed6093Module() to build RTL2836B DVBC VA1T1ED6093 NIM module, set all module function pointers with the
corresponding functions, and initialize module private variables.


@param [in]   ppNim                       Pointer to RTL2836B DVBC VA1T1ED6093 NIM module pointer
@param [in]   pQamNimModuleMemory         Pointer to an allocated QAM NIM module memory
@param [in]   I2cReadingByteNumMax        Maximum I2C reading byte number for basic I2C reading function
@param [in]   I2cWritingByteNumMax        Maximum I2C writing byte number for basic I2C writing function
@param [in]   I2cRead                     Basic I2C reading function pointer
@param [in]   I2cWrite                    Basic I2C writing function pointer
@param [in]   WaitMs                      Basic waiting function pointer
@param [in]   DemodDeviceAddr             RTL2836B DVBC I2C device address
@param [in]   DemodCrystalFreqHz          RTL2836B DVBC crystal frequency in Hz
@param [in]   DemodTsInterfaceMode        RTL2836B DVBC TS interface mode for setting
@param [in]   DemodEnhancementMode        RTL2836B DVBC enhancement mode for setting
@param [in]   TunerDeviceAddr             VA1T1ED6093 I2C device address
@param [in]   TunerCrystalFreqHz          VA1T1ED6093 crystal frequency in Hz


@note
	-# One should call BuildRtl2836bDvbcVa1t1ed6093Module() to build RTL2836B DVBC VA1T1ED6093 NIM module before using it.

*/
void
BuildRtl2836bDvbcVa1t1ed6093Module(
	QAM_NIM_MODULE **ppNim,							// QAM NIM dependence
	QAM_NIM_MODULE *pQamNimModuleMemory,

	unsigned long I2cReadingByteNumMax,				// Base interface dependence
	unsigned long I2cWritingByteNumMax,
	BASE_FP_I2C_READ I2cRead,
	BASE_FP_I2C_WRITE I2cWrite,
	BASE_FP_WAIT_MS WaitMs,

	unsigned char DemodDeviceAddr,					// Demod dependence
	unsigned long DemodCrystalFreqHz,
	int DemodTsInterfaceMode,
	int DemodEnhancementMode,

	unsigned char TunerDeviceAddr					// Tuner dependence
	)
{
	QAM_NIM_MODULE *pNim;



	// Set NIM module pointer with NIM module memory.
	*ppNim = pQamNimModuleMemory;
	
	// Get NIM module.
	pNim = *ppNim;

	// Set I2C bridge module pointer with I2C bridge module memory.
	pNim->pI2cBridge = &pNim->I2cBridgeModuleMemory;

	// Set enhancement mode in NIM module.
	pNim->EnhancementMode = DemodEnhancementMode;


	// Build base interface module.
	BuildBaseInterface(
		&pNim->pBaseInterface,
		&pNim->BaseInterfaceModuleMemory,
		I2cReadingByteNumMax,
		I2cWritingByteNumMax,
		I2cRead,
		I2cWrite,
		WaitMs
		);

	// Build RTL2836B DVBC QAM demod module.
	BuildRtl2836bDvbcModule(
		&pNim->pDemod,
		&pNim->QamDemodModuleMemory,
		&pNim->BaseInterfaceModuleMemory,
		&pNim->I2cBridgeModuleMemory,
		DemodDeviceAddr,
		DemodCrystalFreqHz,
		DemodTsInterfaceMode,
		DemodEnhancementMode
		);

	// Build VA1T1ED6093 tuner module.
	BuildVa1t1ed6093Module(
		&pNim->pTuner,
		&pNim->TunerModuleMemory,
		&pNim->BaseInterfaceModuleMemory,
		&pNim->I2cBridgeModuleMemory,
		TunerDeviceAddr
		);


	// Set NIM module manipulating function pointers.
	pNim->Initialize        = rtl2836b_dvbc_va1t1ed6093_Initialize;
	pNim->SetParameters     = rtl2836b_dvbc_va1t1ed6093_SetParameters;

	// Set NIM module manipulating function pointers with default.
	pNim->GetNimType        = qam_nim_default_GetNimType;
	pNim->GetParameters     = qam_nim_default_GetParameters;
	pNim->IsSignalPresent   = qam_nim_default_IsSignalPresent;
	pNim->IsSignalLocked    = qam_nim_default_IsSignalLocked;
	pNim->GetSignalStrength = qam_nim_default_GetSignalStrength;
	pNim->GetSignalQuality  = qam_nim_default_GetSignalQuality;
	pNim->GetErrorRate      = qam_nim_default_GetErrorRate;
	pNim->GetSnrDb          = qam_nim_default_GetSnrDb;
	pNim->GetTrOffsetPpm    = qam_nim_default_GetTrOffsetPpm;
	pNim->GetCrOffsetHz     = qam_nim_default_GetCrOffsetHz;
	pNim->UpdateFunction    = qam_nim_default_UpdateFunction;


	// Set NIM type.
	pNim->NimType = QAM_NIM_RTL2836B_DVBC_VA1T1ED6093;


	return;
}
예제 #9
0
/**

@brief   RTL2840 MAX3543 NIM module builder

Use BuildRtl2840Max3543Module() to build RTL2840 MAX3543 NIM module, set all module function pointers with the
corresponding functions, and initialize module private variables.


@param [in]   ppNim                       Pointer to RTL2840 MAX3543 NIM module pointer
@param [in]   pQamNimModuleMemory         Pointer to an allocated QAM NIM module memory
@param [in]   I2cReadingByteNumMax        Maximum I2C reading byte number for basic I2C reading function
@param [in]   I2cWritingByteNumMax        Maximum I2C writing byte number for basic I2C writing function
@param [in]   I2cRead                     Basic I2C reading function pointer
@param [in]   I2cWrite                    Basic I2C writing function pointer
@param [in]   WaitMs                      Basic waiting function pointer
@param [in]   DemodDeviceAddr             RTL2840 I2C device address
@param [in]   DemodCrystalFreqHz          RTL2840 crystal frequency in Hz
@param [in]   DemodTsInterfaceMode        RTL2840 TS interface mode for setting
@param [in]   DemodEnhancementMode        RTL2840 enhancement mode for setting
@param [in]   TunerDeviceAddr             MAX3543 I2C device address
@param [in]   TunerCrystalFreqHz          MAX3543 crystal frequency in Hz


@note
	-# One should call BuildRtl2840Max3543Module() to build RTL2840 MAX3543 NIM module before using it.

*/
void
BuildRtl2840Max3543Module(
	QAM_NIM_MODULE **ppNim,							// QAM NIM dependence
	QAM_NIM_MODULE *pQamNimModuleMemory,

	u64 I2cReadingByteNumMax,				// Base interface dependence
	u64 I2cWritingByteNumMax,
	BASE_FP_I2C_READ I2cRead,
	BASE_FP_I2C_WRITE I2cWrite,
	BASE_FP_WAIT_MS WaitMs,

	u8 DemodDeviceAddr,					// Demod dependence
	u64 DemodCrystalFreqHz,
	s32 DemodTsInterfaceMode,
	s32 DemodEnhancementMode,

	u8 TunerDeviceAddr,					// Tuner dependence
	u64 TunerCrystalFreqHz
	)
{
	QAM_NIM_MODULE *pNim;



	// Set NIM module pointer with NIM module memory.
	*ppNim = pQamNimModuleMemory;
	
	// Get NIM module.
	pNim = *ppNim;

	// Set I2C bridge module pointer with I2C bridge module memory.
	pNim->pI2cBridge = &pNim->I2cBridgeModuleMemory;

	// Set enhancement mode in NIM module.
	pNim->EnhancementMode = DemodEnhancementMode;


	// Build base interface module.
	BuildBaseInterface(
		&pNim->pBaseInterface,
		&pNim->BaseInterfaceModuleMemory,
		I2cReadingByteNumMax,
		I2cWritingByteNumMax,
		I2cRead,
		I2cWrite,
		WaitMs
		);

	// Build RTL2840 QAM demod module.
	BuildRtl2840Module(
		&pNim->pDemod,
		&pNim->QamDemodModuleMemory,
		&pNim->BaseInterfaceModuleMemory,
		&pNim->I2cBridgeModuleMemory,
		DemodDeviceAddr,
		DemodCrystalFreqHz,
		DemodTsInterfaceMode,
		DemodEnhancementMode
		);

	// Build MAX3543 tuner module.
	BuildMax3543Module(
		&pNim->pTuner,
		&pNim->TunerModuleMemory,
		&pNim->BaseInterfaceModuleMemory,
		&pNim->I2cBridgeModuleMemory,
		TunerDeviceAddr,
		TunerCrystalFreqHz,
		RTL2840_MAX3543_STANDARD_MODE_DEFAULT,
		RTL2840_MAX3543_IF_FREQ_HZ_DEFAULT,
		RTL2840_MAX3543_SAW_INPUT_TYPE_DEFAULT
		);


	// Set NIM module manipulating function pointers.
	pNim->Initialize        = rtl2840_max3543_Initialize;
	pNim->SetParameters     = rtl2840_max3543_SetParameters;

	// Set NIM module manipulating function pointers with default.
	pNim->GetNimType        = qam_nim_default_GetNimType;
	pNim->GetParameters     = qam_nim_default_GetParameters;
	pNim->IsSignalPresent   = qam_nim_default_IsSignalPresent;
	pNim->IsSignalLocked    = qam_nim_default_IsSignalLocked;
	pNim->GetSignalStrength = qam_nim_default_GetSignalStrength;
	pNim->GetSignalQuality  = qam_nim_default_GetSignalQuality;
	pNim->GetErrorRate      = qam_nim_default_GetErrorRate;
	pNim->GetSnrDb          = qam_nim_default_GetSnrDb;
	pNim->GetTrOffsetPpm    = qam_nim_default_GetTrOffsetPpm;
	pNim->GetCrOffsetHz     = qam_nim_default_GetCrOffsetHz;
	pNim->UpdateFunction    = qam_nim_default_UpdateFunction;


	// Set NIM type.
	pNim->NimType = QAM_NIM_RTL2840_MAX3543;


	return;
}
/**

@brief   RTL2840 MT2063 NIM module builder

Use BuildRtl2840Mt2063Module() to build RTL2840 MT2063 NIM module, set all module function pointers with the
corresponding functions, and initialize module private variables.


@param [in]   ppNim                  Pointer to RTL2840 MT2063 NIM module pointer
@param [in]   pQamNimModuleMemory    Pointer to an allocated QAM NIM module memory
@param [in]   I2cReadingByteNumMax   Maximum I2C reading byte number for basic I2C reading function
@param [in]   I2cWritingByteNumMax   Maximum I2C writing byte number for basic I2C writing function
@param [in]   I2cRead                Basic I2C reading function pointer
@param [in]   I2cWrite               Basic I2C writing function pointer
@param [in]   WaitMs                 Basic waiting function pointer
@param [in]   DemodDeviceAddr        RTL2840 I2C device address
@param [in]   DemodCrystalFreqHz     RTL2840 crystal frequency in Hz
@param [in]   DemodTsInterfaceMode   RTL2840 TS interface mode for setting
@param [in]   DemodEnhancementMode   RTL2840 enhancement mode for setting
@param [in]   TunerDeviceAddr        MT2063 I2C device address


@note
	-# One should call BuildRtl2840Mt2063Module() to build RTL2840 MT2063 NIM module before using it.

*/
void
BuildRtl2840Mt2063Module(
	QAM_NIM_MODULE **ppNim,								// QAM NIM dependence
	QAM_NIM_MODULE *pQamNimModuleMemory,
	unsigned long NimIfFreqHz,

	unsigned long I2cReadingByteNumMax,					// Base interface dependence
	unsigned long I2cWritingByteNumMax,
	BASE_FP_I2C_READ I2cRead,
	BASE_FP_I2C_WRITE I2cWrite,
	BASE_FP_WAIT_MS WaitMs,

	unsigned char DemodDeviceAddr,						// Demod dependence
	unsigned long DemodCrystalFreqHz,
	int DemodTsInterfaceMode,
	int DemodEnhancementMode,

	unsigned char TunerDeviceAddr						// Tuner dependence
	)
{
	QAM_NIM_MODULE *pNim;
	RTL2840_MT2063_EXTRA_MODULE *pNimExtra;



	// Set NIM module pointer with NIM module memory.
	*ppNim = pQamNimModuleMemory;
	
	// Get NIM module.
	pNim = *ppNim;

	// Set I2C bridge module pointer with I2C bridge module memory.
	pNim->pI2cBridge = &pNim->I2cBridgeModuleMemory;

	// Get NIM extra module.
	pNimExtra = &(pNim->Extra.Rtl2840Mt2063);


	// Build base interface module.
	BuildBaseInterface(
		&pNim->pBaseInterface,
		&pNim->BaseInterfaceModuleMemory,
		I2cReadingByteNumMax,
		I2cWritingByteNumMax,
		I2cRead,
		I2cWrite,
		WaitMs
		);

	// Build RTL2840 QAM demod module.
	BuildRtl2840Module(
		&pNim->pDemod,
		&pNim->QamDemodModuleMemory,
		&pNim->BaseInterfaceModuleMemory,
		&pNim->I2cBridgeModuleMemory,
		DemodDeviceAddr,
		DemodCrystalFreqHz,
		DemodTsInterfaceMode,
		DemodEnhancementMode
		);

	// Build MT2063 tuner module.
	BuildMt2063Module(
		&pNim->pTuner,
		&pNim->TunerModuleMemory,
		&pNim->BaseInterfaceModuleMemory,
		&pNim->I2cBridgeModuleMemory,
		TunerDeviceAddr,
//		MT2063_STANDARD_QAM,
		MT2063_STANDARD_DVBT,
		MT2063_VGAGC_0X1
		);


	// Set NIM module manipulating function pointers.
	pNim->Initialize        = rtl2840_mt2063_Initialize;
	pNim->SetParameters     = rtl2840_mt2063_SetParameters;

	// Set NIM module manipulating function pointers with default.
	pNim->GetNimType        = qam_nim_default_GetNimType;
	pNim->GetParameters     = qam_nim_default_GetParameters;
	pNim->IsSignalPresent   = qam_nim_default_IsSignalPresent;
	pNim->IsSignalLocked    = qam_nim_default_IsSignalLocked;
	pNim->GetSignalStrength = qam_nim_default_GetSignalStrength;
	pNim->GetSignalQuality  = qam_nim_default_GetSignalQuality;
	pNim->GetErrorRate      = qam_nim_default_GetErrorRate;
	pNim->GetSnrDb          = qam_nim_default_GetSnrDb;
	pNim->GetTrOffsetPpm    = qam_nim_default_GetTrOffsetPpm;
	pNim->GetCrOffsetHz     = qam_nim_default_GetCrOffsetHz;
	pNim->UpdateFunction    = qam_nim_default_UpdateFunction;


	// Set NIM type.
	pNim->NimType = QAM_NIM_RTL2840_MT2063;

	// Set enhancement mode in NIM module.
	pNim->EnhancementMode = DemodEnhancementMode;

	// Set IF frequency variable in NIM extra module.
	pNimExtra->IfFreqHz = NimIfFreqHz;


	return;
}