/** @see QAM_NIM_FP_GET_ERROR_RATE */ int qam_nim_default_GetErrorRate( QAM_NIM_MODULE *pNim, unsigned long TestVolume, unsigned int WaitTimeMsMax, unsigned long *pBerNum, unsigned long *pBerDen, unsigned long *pPerNum, unsigned long *pPerDen ) { QAM_DEMOD_MODULE *pDemod; // Get demod module. pDemod = pNim->pDemod; // Get error rate from demod. if(pDemod->GetErrorRate(pDemod, TestVolume, WaitTimeMsMax, pBerNum, pBerDen, pPerNum, pPerDen) != FUNCTION_SUCCESS) goto error_status_execute_function; return FUNCTION_SUCCESS; error_status_execute_function: return FUNCTION_ERROR; }
/** @see QAM_NIM_FP_GET_SNR_DB */ int qam_nim_default_GetSnrDb( QAM_NIM_MODULE *pNim, long *pSnrDbNum, long *pSnrDbDen ) { QAM_DEMOD_MODULE *pDemod; // Get demod module. pDemod = pNim->pDemod; // Get SNR in dB from demod. if(pDemod->GetSnrDb(pDemod, pSnrDbNum, pSnrDbDen) != FUNCTION_SUCCESS) goto error_status_execute_function; return FUNCTION_SUCCESS; error_status_execute_function: return FUNCTION_ERROR; }
/** @see QAM_NIM_FP_SET_PARAMETERS */ int rtl2840_mt2063_SetParameters( QAM_NIM_MODULE *pNim, unsigned long RfFreqHz, int QamMode, unsigned long SymbolRateHz, int AlphaMode ) { TUNER_MODULE *pTuner; QAM_DEMOD_MODULE *pDemod; // Get demod module and tuner module. pTuner = pNim->pTuner; pDemod = pNim->pDemod; // Set tuner RF frequency in Hz. if(pTuner->SetRfFreqHz(pTuner, RfFreqHz) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set demod QAM mode. if(pDemod->SetQamMode(pDemod, QamMode) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set demod symbol rate in Hz. if(pDemod->SetSymbolRateHz(pDemod, SymbolRateHz) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set demod alpha mode. if(pDemod->SetAlphaMode(pDemod, AlphaMode) != FUNCTION_SUCCESS) goto error_status_execute_function; // Reset demod by software reset. if(pDemod->SoftwareReset(pDemod) != FUNCTION_SUCCESS) goto error_status_execute_function; return FUNCTION_SUCCESS; error_status_execute_function: return FUNCTION_ERROR; }
/** @see QAM_NIM_FP_GET_PARAMETERS */ int qam_nim_default_GetParameters( QAM_NIM_MODULE *pNim, unsigned long *pRfFreqHz, int *pQamMode, unsigned long *pSymbolRateHz, int *pAlphaMode ) { TUNER_MODULE *pTuner; QAM_DEMOD_MODULE *pDemod; // Get tuner module and demod module. pTuner = pNim->pTuner; pDemod = pNim->pDemod; // Get tuner RF frequency in Hz. if(pTuner->GetRfFreqHz(pTuner, pRfFreqHz) != FUNCTION_SUCCESS) goto error_status_execute_function; // Get demod QAM mode. if(pDemod->GetQamMode(pDemod, pQamMode) != FUNCTION_SUCCESS) goto error_status_execute_function; // Get demod symbol rate in Hz. if(pDemod->GetSymbolRateHz(pDemod, pSymbolRateHz) != FUNCTION_SUCCESS) goto error_status_execute_function; // Get demod alpha mode. if(pDemod->GetAlphaMode(pDemod, pAlphaMode) != FUNCTION_SUCCESS) goto error_status_execute_function; return FUNCTION_SUCCESS; error_status_execute_function: return FUNCTION_ERROR; }
/** @see QAM_NIM_FP_IS_SIGNAL_LOCKED */ int qam_nim_default_IsSignalLocked( QAM_NIM_MODULE *pNim, int *pAnswer ) { BASE_INTERFACE_MODULE *pBaseInterface; QAM_DEMOD_MODULE *pDemod; int i; // Get base interface and demod module. pBaseInterface = pNim->pBaseInterface; pDemod = pNim->pDemod; // Wait maximum 1000 ms for signal lock check. for(i = 0; i < DEFAULT_QAM_NIM_SINGAL_LOCK_CHECK_TIMES_MAX; i++) { // Wait 20 ms. pBaseInterface->WaitMs(pBaseInterface, 20); // Check frame lock status on demod. // Note: If frame is locked, stop signal lock check. if(pDemod->IsFrameLocked(pDemod, pAnswer) != FUNCTION_SUCCESS) goto error_status_execute_function; if(*pAnswer == YES) break; } return FUNCTION_SUCCESS; error_status_execute_function: return FUNCTION_ERROR; }
/** @see QAM_NIM_FP_UPDATE_FUNCTION */ int qam_nim_default_UpdateFunction( QAM_NIM_MODULE *pNim ) { QAM_DEMOD_MODULE *pDemod; // Get demod module. pDemod = pNim->pDemod; // Update demod particular registers. if(pDemod->UpdateFunction(pDemod) != FUNCTION_SUCCESS) goto error_status_execute_function; return FUNCTION_SUCCESS; error_status_execute_function: return FUNCTION_ERROR; }
/** @see QAM_NIM_FP_GET_CR_OFFSET_HZ */ int qam_nim_default_GetCrOffsetHz( QAM_NIM_MODULE *pNim, long *pCrOffsetHz ) { QAM_DEMOD_MODULE *pDemod; // Get demod module. pDemod = pNim->pDemod; // Get CR offset in Hz from demod. if(pDemod->GetCrOffsetHz(pDemod, pCrOffsetHz) != FUNCTION_SUCCESS) goto error_status_execute_function; return FUNCTION_SUCCESS; error_status_execute_function: return FUNCTION_ERROR; }
/** @see QAM_NIM_FP_GET_SIGNAL_QUALITY */ int qam_nim_default_GetSignalQuality( QAM_NIM_MODULE *pNim, unsigned long *pSignalQuality ) { QAM_DEMOD_MODULE *pDemod; // Get demod module. pDemod = pNim->pDemod; // Get signal quality from demod. if(pDemod->GetSignalQuality(pDemod, pSignalQuality) != FUNCTION_SUCCESS) goto error_status_execute_function; return FUNCTION_SUCCESS; error_status_execute_function: return FUNCTION_ERROR; }
/** @see QAM_NIM_FP_SET_PARAMETERS */ int rtl2836b_dvbc_va1t1ed6093_SetParameters( QAM_NIM_MODULE *pNim, unsigned long RfFreqHz, int QamMode, unsigned long SymbolRateHz, int AlphaMode ) { QAM_DEMOD_MODULE *pDemod; TUNER_MODULE *pTuner; // Get demod module and tuner module. pDemod = pNim->pDemod; pTuner = pNim->pTuner; // Enable demod QAM_I2CT_EN_CTRL. if(pDemod->RegAccess.Addr16Bit.SetRegBits(pDemod, QAM_I2CT_EN_CTRL, 0x1) != FUNCTION_SUCCESS) goto error_status_set_registers; // Set tuner RF frequency in Hz. if(pTuner->SetRfFreqHz(pTuner, RfFreqHz) != FUNCTION_SUCCESS) goto error_status_execute_function; // Disable demod QAM_I2CT_EN_CTRL. if(pDemod->RegAccess.Addr16Bit.SetRegBits(pDemod, QAM_I2CT_EN_CTRL, 0x0) != FUNCTION_SUCCESS) goto error_status_set_registers; // Set demod QAM mode. if(pDemod->SetQamMode(pDemod, QamMode) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set demod symbol rate in Hz. if(pDemod->SetSymbolRateHz(pDemod, SymbolRateHz) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set demod alpha mode. if(pDemod->SetAlphaMode(pDemod, AlphaMode) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set demod QAM_AAGC_TARGET and QAM_VTOP according to QAM mode and enhancement mode. switch(QamMode) { default: case QAM_QAM_4: case QAM_QAM_16: case QAM_QAM_32: case QAM_QAM_64: switch(pNim->EnhancementMode) { case QAM_DEMOD_EN_NONE: if(pDemod->RegAccess.Addr16Bit.SetRegBits(pDemod, QAM_AAGC_TARGET, 0x6b) != FUNCTION_SUCCESS) goto error_status_execute_function; break; default: case QAM_DEMOD_EN_AM_HUM: if(pDemod->RegAccess.Addr16Bit.SetRegBits(pDemod, QAM_AAGC_TARGET, 0x64) != FUNCTION_SUCCESS) goto error_status_execute_function; break; } break; case QAM_QAM_128: case QAM_QAM_256: case QAM_QAM_512: case QAM_QAM_1024: if(pDemod->RegAccess.Addr16Bit.SetRegBits(pDemod, QAM_AAGC_TARGET, 0x6b) != FUNCTION_SUCCESS) goto error_status_execute_function; break; } // Reset demod by software reset. if(pDemod->SoftwareReset(pDemod) != FUNCTION_SUCCESS) goto error_status_execute_function; return FUNCTION_SUCCESS; error_status_set_registers: error_status_execute_function: return FUNCTION_ERROR; }
/** @see QAM_NIM_FP_INITIALIZE */ int rtl2836b_dvbc_va1t1ed6093_Initialize( QAM_NIM_MODULE *pNim ) { typedef struct { int RegBitName; unsigned long Value; } REG_VALUE_ENTRY; static const REG_VALUE_ENTRY AdditionalInitRegValueTable[RTL2836B_DVBC_VA1T1ED6093_ADDITIONAL_INIT_REG_TABLE_LEN] = { // RegBitName, Value {QAM_AGC_DRIVE_LV, 0x0 }, {QAM_OPT_RF_AAGC_DRIVE, 0x0 }, {QAM_OPT_IF_AAGC_DRIVE, 0x0 }, {QAM_OPT_RF_AAGC_OE, 0x0 }, {QAM_OPT_IF_AAGC_OE, 0x1 }, {QAM_PAR_RF_SD_IB, 0x1 }, {QAM_PAR_IF_SD_IB, 0x1 }, {QAM_RF_AAGC_MAX, 0x80 }, {QAM_RF_AAGC_MIN, 0x80 }, {QAM_IF_AAGC_MAX, 0xff }, {QAM_IF_AAGC_MIN, 0x0 }, {QAM_VTOP, 0x80 }, {QAM_KRF_MSB, 0x1 }, {QAM_KRF_LSB, 0x1 }, {QAM_AAGC_MODE_SEL, 0x0 }, }; QAM_DEMOD_MODULE *pDemod; TUNER_MODULE *pTuner; int i; int RegBitName; unsigned long Value; // Get demod module and tuner module. pDemod = pNim->pDemod; pTuner = pNim->pTuner; // Enable demod QAM_I2CT_EN_CTRL. if(pDemod->RegAccess.Addr16Bit.SetRegBits(pDemod, QAM_I2CT_EN_CTRL, 0x1) != FUNCTION_SUCCESS) goto error_status_set_registers; // Initialize tuner. if(pTuner->Initialize(pTuner) != FUNCTION_SUCCESS) goto error_status_execute_function; // Disable demod QAM_I2CT_EN_CTRL. if(pDemod->RegAccess.Addr16Bit.SetRegBits(pDemod, QAM_I2CT_EN_CTRL, 0x0) != FUNCTION_SUCCESS) goto error_status_set_registers; // Initialize demod. if(pDemod->Initialize(pDemod) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set demod IF frequency with 36 MHz. if(pDemod->SetIfFreqHz(pDemod, IF_FREQ_36000000HZ) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set demod spectrum mode with SPECTRUM_NORMAL. // Note: RTL2836B DVB-C demod hardware will detect spectrum mode automatically, // even if one uses SetSpectrumMode() to set spectrum mode. if(pDemod->SetSpectrumMode(pDemod, SPECTRUM_NORMAL) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set demod AAGC registers. // Note: SetParameters() will set QAM_AAGC_TARGET and QAM_VTOP according to parameters. for(i = 0; i < RTL2836B_DVBC_VA1T1ED6093_ADDITIONAL_INIT_REG_TABLE_LEN; i++) { // Get register bit name and its value. RegBitName = AdditionalInitRegValueTable[i].RegBitName; Value = AdditionalInitRegValueTable[i].Value; // Set demod registers if(pDemod->RegAccess.Addr16Bit.SetRegBits(pDemod, RegBitName, Value) != FUNCTION_SUCCESS) goto error_status_set_registers; } return FUNCTION_SUCCESS; error_status_set_registers: error_status_execute_function: return FUNCTION_ERROR; }
/** @see QAM_NIM_FP_SET_PARAMETERS */ s32 rtl2840_max3543_SetParameters( QAM_NIM_MODULE *pNim, u64 RfFreqHz, s32 QamMode, u64 SymbolRateHz, s32 AlphaMode ) { QAM_DEMOD_MODULE *pDemod; TUNER_MODULE *pTuner; // Get demod module and tuner module. pDemod = pNim->pDemod; pTuner = pNim->pTuner; // Set tuner RF frequency in Hz. if(pTuner->SetRfFreqHz(pTuner, RfFreqHz) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set demod QAM mode. if(pDemod->SetQamMode(pDemod, QamMode) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set demod symbol rate in Hz. if(pDemod->SetSymbolRateHz(pDemod, SymbolRateHz) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set demod alpha mode. if(pDemod->SetAlphaMode(pDemod, AlphaMode) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set demod QAM_AAGC_TARGET and QAM_VTOP according to QAM mode and enhancement mode. switch(QamMode) { default: case QAM_QAM_4: case QAM_QAM_16: case QAM_QAM_32: case QAM_QAM_64: if(pDemod->RegAccess.Addr8Bit.SetRegBitsWithPage(pDemod, QAM_VTOP, 0x3f) != FUNCTION_SUCCESS) goto error_status_execute_function; switch(pNim->EnhancementMode) { case QAM_DEMOD_EN_NONE: if(pDemod->RegAccess.Addr8Bit.SetRegBitsWithPage(pDemod, QAM_AAGC_TARGET, 0x6b) != FUNCTION_SUCCESS) goto error_status_execute_function; break; default: case QAM_DEMOD_EN_AM_HUM: if(pDemod->RegAccess.Addr8Bit.SetRegBitsWithPage(pDemod, QAM_AAGC_TARGET, 0x64) != FUNCTION_SUCCESS) goto error_status_execute_function; break; } break; case QAM_QAM_128: case QAM_QAM_256: case QAM_QAM_512: case QAM_QAM_1024: if(pDemod->RegAccess.Addr8Bit.SetRegBitsWithPage(pDemod, QAM_VTOP, 0x38) != FUNCTION_SUCCESS) goto error_status_execute_function; if(pDemod->RegAccess.Addr8Bit.SetRegBitsWithPage(pDemod, QAM_AAGC_TARGET, 0x6b) != FUNCTION_SUCCESS) goto error_status_execute_function; break; } // Reset demod by software reset. if(pDemod->SoftwareReset(pDemod) != FUNCTION_SUCCESS) goto error_status_execute_function; return FUNCTION_SUCCESS; error_status_execute_function: return FUNCTION_ERROR; }
/** @see QAM_NIM_FP_INITIALIZE */ s32 rtl2840_max3543_Initialize( QAM_NIM_MODULE *pNim ) { typedef struct { s32 RegBitName; u64 Value; } REG_VALUE_ENTRY; static const REG_VALUE_ENTRY AdditionalInitRegValueTable[RTL2840_MAX3543_ADDITIONAL_INIT_REG_TABLE_LEN] = { // RegBitName, Value {QAM_OPT_RF_AAGC_DRIVE, 0x1 }, {QAM_OPT_IF_AAGC_DRIVE, 0x1 }, {QAM_OPT_RF_AAGC_OEN, 0x1 }, {QAM_OPT_IF_AAGC_OEN, 0x1 }, {QAM_RF_AAGC_MAX, 0xff }, {QAM_RF_AAGC_MIN, 0x0 }, {QAM_IF_AAGC_MAX, 0xff }, {QAM_IF_AAGC_MIN, 0x0 }, {QAM_AAGC_MODE_SEL, 0x0 }, }; QAM_DEMOD_MODULE *pDemod; TUNER_MODULE *pTuner; s32 i; s32 RegBitName; u64 Value; // Get demod module and tuner module. pDemod = pNim->pDemod; pTuner = pNim->pTuner; // Initialize demod. if(pDemod->Initialize(pDemod) != FUNCTION_SUCCESS) goto error_status_execute_function; // Initialize tuner. if(pTuner->Initialize(pTuner) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set demod IF frequency in Hz with NIM default. if(pDemod->SetIfFreqHz(pDemod, RTL2840_MAX3543_IF_FREQ_HZ_DEFAULT) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set demod spectrum mode with NIM default. if(pDemod->SetSpectrumMode(pDemod, RTL2840_MAX3543_SPECTRUM_MODE_DEFAULT) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set demod AAGC registers. // Note: SetParameters() will set QAM_AAGC_TARGET and QAM_VTOP according to parameters. for(i = 0; i < RTL2840_MAX3543_ADDITIONAL_INIT_REG_TABLE_LEN; i++) { // Get register bit name and its value. RegBitName = AdditionalInitRegValueTable[i].RegBitName; Value = AdditionalInitRegValueTable[i].Value; // Set demod registers if(pDemod->RegAccess.Addr8Bit.SetRegBitsWithPage(pDemod, RegBitName, Value) != FUNCTION_SUCCESS) goto error_status_set_registers; } return FUNCTION_SUCCESS; error_status_set_registers: error_status_execute_function: return FUNCTION_ERROR; }
/** @see QAM_NIM_FP_INITIALIZE */ int rtl2840_mt2063_Initialize( QAM_NIM_MODULE *pNim ) { typedef struct { int RegBitName; unsigned long Value; } REG_VALUE_ENTRY; static const REG_VALUE_ENTRY AdditionalInitRegValueTable[RTL2840_MT2063_ADDITIONAL_INIT_REG_TABLE_LEN] = { // RegBitName, Value {QAM_OPT_RF_AAGC_DRIVE, 0x1 }, {QAM_OPT_IF_AAGC_DRIVE, 0x1 }, {QAM_OPT_RF_AAGC_OEN, 0x1 }, {QAM_OPT_IF_AAGC_OEN, 0x1 }, {QAM_RF_AAGC_MAX, 0x80 }, {QAM_RF_AAGC_MIN, 0x80 }, {QAM_IF_AAGC_MAX, 0xff }, {QAM_IF_AAGC_MIN, 0x0 }, {QAM_AAGC_MODE_SEL, 0x0 }, }; TUNER_MODULE *pTuner; QAM_DEMOD_MODULE *pDemod; MT2063_EXTRA_MODULE *pTunerExtra; RTL2840_MT2063_EXTRA_MODULE *pNimExtra; int i; int RegBitName; unsigned long Value; // Get modules. pTuner = pNim->pTuner; pDemod = pNim->pDemod; pTunerExtra = &(pTuner->Extra.Mt2063); pNimExtra = &(pNim->Extra.Rtl2840Mt2063); // Initialize tuner. if(pTuner->Initialize(pTuner) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set tuner IF frequency in Hz. if(pTunerExtra->SetIfFreqHz(pTuner, pNimExtra->IfFreqHz) != FUNCTION_SUCCESS) goto error_status_execute_function; // Initialize demod. if(pDemod->Initialize(pDemod) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set demod IF frequency in Hz. if(pDemod->SetIfFreqHz(pDemod, pNimExtra->IfFreqHz) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set demod spectrum mode with SPECTRUM_INVERSE. if(pDemod->SetSpectrumMode(pDemod, SPECTRUM_INVERSE) != FUNCTION_SUCCESS) goto error_status_execute_function; // Set demod AAGC registers. // Note: SetParameters() will set QAM_AAGC_TARGET and QAM_VTOP according to parameters. for(i = 0; i < RTL2840_MT2063_ADDITIONAL_INIT_REG_TABLE_LEN; i++) { // Get register bit name and its value. RegBitName = AdditionalInitRegValueTable[i].RegBitName; Value = AdditionalInitRegValueTable[i].Value; // Set demod registers if(pDemod->RegAccess.Addr8Bit.SetRegBitsWithPage(pDemod, RegBitName, Value) != FUNCTION_SUCCESS) goto error_status_set_registers; } return FUNCTION_SUCCESS; error_status_set_registers: error_status_execute_function: return FUNCTION_ERROR; }