/** @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; }