Пример #1
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;
}