📄 tmdlfe.c
字号:
// Priority
pCtx->uDemodCfg.Ter_S.getHpLpFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.Priority_E) );
switch (pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.Priority_E)
{
case tmhalFEPriorityHigh:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.Priority_E = tmdlFeTerPriorityHigh_E;
break;
case tmhalFEPriorityLow:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.Priority_E = tmdlFeTerPriorityLow_E;
break;
default:
return tmdlFeInvalidValue_E;
}
}
// Carrier Status
if ( pCtx->StatusMask_S & DEMOD_STATUS_CARRIER_STS )
//pCtx->DemodStatus_S.CarrierStatus_E = pCtx->CarrierStatus_E;
{
// Get the synchronization information by reading the right register
pCtx->uDemodCfg.Ter_S.getCfgFunc(pCtx->FeUnit, tmhalFEReadSync, &uSyncByte);
if (uSyncByte & TMDLFE_SYNC_CARRIER)
pCtx->DemodStatus_S.CarrierStatus_E = tmdlFeCarrierLock_E;
else
pCtx->DemodStatus_S.CarrierStatus_E = tmdlFeCarrierNoLock_E;
}
// VBER
if ( pCtx->StatusMask_S & DEMOD_STATUS_VBER )
pCtx->uDemodCfg.Ter_S.getBerFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.VBerValue_U) );
// CBER
if ( pCtx->StatusMask_S & DEMOD_STATUS_CBER )
pCtx->uDemodCfg.Ter_S.getCfgFunc(pCtx->FeUnit, tmhalFEReadCBER, &(pCtx->DemodStatus_S.CBerValue_U));
// Uncor
if ( pCtx->StatusMask_S & DEMOD_STATUS_UBK )
pCtx->uDemodCfg.Ter_S.getUbkFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.UbkValue_U));
// Level
if ( pCtx->StatusMask_S & DEMOD_STATUS_LVL )
pCtx->uDemodCfg.Ter_S.getLvlFunc(pCtx->FeUnit, (Int8*)&(pCtx->DemodStatus_S.LvlValue));
// SNR
if ( pCtx->StatusMask_S & DEMOD_STATUS_SNR )
pCtx->uDemodCfg.Ter_S.getSnrFunc (tmUnit0, &(pCtx->DemodStatus_S.SnrValue));
// AFC
if ( pCtx->StatusMask_S & DEMOD_STATUS_AFC )
pCtx->uDemodCfg.Ter_S.getAfcFunc (tmUnit0, &(pCtx->DemodStatus_S.AfcValue));
// ACC
if ( pCtx->StatusMask_S & DEMOD_STATUS_ACC )
pCtx->uDemodCfg.Ter_S.getAccFunc (tmUnit0, &(pCtx->DemodStatus_S.AccValue));
// AGC
/* if ( pCtx->StatusMask_S & DEMOD_STATUS_AGC )
pCtx->uDemodCfg.Ter_S.getCfgFunc(pCtx->FeUnit, tmhalFEReadAgc,
(UInt32*)&(pCtx->DemodStatus_S.AgcValue_B)); */
break;
///////////////////////
case tmdlFeSatellite_E:
///////////////////////
// Frequency
if ( pCtx->StatusMask_S & DEMOD_STATUS_FREQ )
pCtx->uDemodCfg.Sat_S.getRfFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.Frequency_U) );
// Symbol Rate
if ( pCtx->StatusMask_S & DEMOD_FSYMB_BW )
pCtx->uDemodCfg.Sat_S.getSrFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.Fsymb_BW_U) );
// Spectral Inversion
if ( pCtx->StatusMask_S & DEMOD_STATUS_SI )
{
pCtx->uDemodCfg.Sat_S.getSiFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.SpecInv_E) );
// Adaptation Layer
switch (pCtx->DemodStatus_S.SpecInv_E)
{
case tmhalFESpectrumAuto:
pCtx->DemodStatus_S.SpecInv_E = tmdlSpectrumAuto_E;
break;
case tmhalFESpectrumNormal:
pCtx->DemodStatus_S.SpecInv_E = tmdlSpectrumNormal_E;
break;
case tmhalFESpectrumInverted:
pCtx->DemodStatus_S.SpecInv_E = tmdlSpectrumInverted_E;
break;
default:
return tmdlFeInvalidValue_E;
}
}
// Constellation
if ( pCtx->StatusMask_S & DEMOD_CONST )
{
pCtx->uDemodCfg.Sat_S.getModFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.Const_E) );
switch (pCtx->DemodStatus_S.Const_E)
{
case tmhalFEModulationBpsk:
pCtx->DemodStatus_S.Const_E = tmdlFeConstellationBpsk_E;
break;
case tmhalFEModulationQpsk:
pCtx->DemodStatus_S.Const_E = tmdlFeConstellationQpsk_E;
break;
default:
return tmdlFeInvalidValue_E;
}
}
// Carrier Status
if ( pCtx->StatusMask_S & DEMOD_STATUS_CARRIER_STS )
{
// Get the synchronization information by reading the right register
pCtx->uDemodCfg.Sat_S.getCfgFunc(pCtx->FeUnit, tmhalFEReadSync, &uSyncByte);
if (uSyncByte & TMDLFE_SYNC_CARRIER)
pCtx->DemodStatus_S.CarrierStatus_E = tmdlFeCarrierLock_E;
else
pCtx->DemodStatus_S.CarrierStatus_E = tmdlFeCarrierNoLock_E;
}
// VBER
if ( pCtx->StatusMask_S & DEMOD_STATUS_VBER )
pCtx->uDemodCfg.Sat_S.getBerFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.VBerValue_U) );
// CBER
if ( pCtx->StatusMask_S & DEMOD_STATUS_CBER )
pCtx->uDemodCfg.Sat_S.getCfgFunc(pCtx->FeUnit, tmhalFEReadCBER, &(pCtx->DemodStatus_S.CBerValue_U));
// Uncor
if ( pCtx->StatusMask_S & DEMOD_STATUS_UBK )
pCtx->uDemodCfg.Sat_S.getUbkFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.UbkValue_U));
// Level
if ( pCtx->StatusMask_S & DEMOD_STATUS_LVL )
pCtx->uDemodCfg.Sat_S.getLvlFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.LvlValue));
// SNR
if ( pCtx->StatusMask_S & DEMOD_STATUS_SNR )
pCtx->uDemodCfg.Sat_S.getSnrFunc (tmUnit0, &(pCtx->DemodStatus_S.SnrValue));
// AFC
if ( pCtx->StatusMask_S & DEMOD_STATUS_AFC )
pCtx->uDemodCfg.Sat_S.getAfcFunc (tmUnit0, &(pCtx->DemodStatus_S.AfcValue));
// ACC
if ( pCtx->StatusMask_S & DEMOD_STATUS_ACC )
pCtx->uDemodCfg.Sat_S.getAccFunc (tmUnit0, &(pCtx->DemodStatus_S.AccValue));
// Specific Satellite Fields
if ( pCtx->StatusMask_S & DEMOD_STATUS_SPECIFIC )
{
// ViterbiRate
pCtx->uDemodCfg.Sat_S.getVrFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.Specific_S.Sat_S.ViterbiRate_E) );
switch (pCtx->DemodStatus_S.Specific_S.Sat_S.ViterbiRate_E)
{
case tmhalFEDepuncRate12:
pCtx->DemodStatus_S.Specific_S.Sat_S.ViterbiRate_E = tmdlFeSatRate12_E;
break;
case tmhalFEDepuncRate23:
pCtx->DemodStatus_S.Specific_S.Sat_S.ViterbiRate_E = tmdlFeSatRate23_E;
break;
case tmhalFEDepuncRate34:
pCtx->DemodStatus_S.Specific_S.Sat_S.ViterbiRate_E = tmdlFeSatRate34_E;
break;
case tmhalFEDepuncRate56:
pCtx->DemodStatus_S.Specific_S.Sat_S.ViterbiRate_E = tmdlFeSatRate56_E;
break;
case tmhalFEDepuncRate67:
pCtx->DemodStatus_S.Specific_S.Sat_S.ViterbiRate_E= tmdlFeSatRate67_E;
break;
case tmhalFEDepuncRate78:
pCtx->DemodStatus_S.Specific_S.Sat_S.ViterbiRate_E= tmdlFeSatRate78_E;
break;
default:
return tmdlFeInvalidValue_E;
}
// Polarization and Tone Value
pCtx->uDemodCfg.Sat_S.getLnbFunc (pCtx->FeUnit,
&PolarVoltage_BY,
&(pCtx->DemodStatus_S.Specific_S.Sat_S.ToneState) );
if (PolarVoltage_BY>=13 && PolarVoltage_BY<15)
pCtx->DemodStatus_S.Specific_S.Sat_S.Polar_E = tmdlFeSat14V_E; // 14V for the vertical polarisation usually
else if (PolarVoltage_BY>=15 && PolarVoltage_BY<=18)
pCtx->DemodStatus_S.Specific_S.Sat_S.Polar_E = tmdlFeSat18V_E; // 18V for the horizontal polarisation usually
else
return tmdlFeInvalidValue_E;
}
break;
///////////////////
case tmdlFeCable_E:
///////////////////
// Frequency
if ( pCtx->StatusMask_S & DEMOD_STATUS_FREQ )
pCtx->uDemodCfg.Cab_S.getRfFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.Frequency_U) );
// Symbol Rate
if ( pCtx->StatusMask_S & DEMOD_FSYMB_BW )
pCtx->uDemodCfg.Cab_S.getSrFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.Fsymb_BW_U) );
// Spectral Inversion
if ( pCtx->StatusMask_S & DEMOD_STATUS_SI )
{
pCtx->uDemodCfg.Cab_S.getSiFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.SpecInv_E) );
// Adaptation Layer
switch (pCtx->DemodStatus_S.SpecInv_E)
{
case tmhalFESpectrumAuto:
pCtx->DemodStatus_S.SpecInv_E = tmdlSpectrumAuto_E;
break;
case tmhalFESpectrumNormal:
pCtx->DemodStatus_S.SpecInv_E = tmdlSpectrumNormal_E;
break;
case tmhalFESpectrumInverted:
pCtx->DemodStatus_S.SpecInv_E = tmdlSpectrumInverted_E;
break;
default:
return tmdlFeInvalidValue_E;
}
}
// Constellation
if ( pCtx->StatusMask_S & DEMOD_CONST )
{
pCtx->uDemodCfg.Cab_S.getModFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.Const_E) );
switch (pCtx->DemodStatus_S.Const_E)
{
case tmhalFEModulationBpsk:
pCtx->DemodStatus_S.Const_E = tmdlFeConstellationBpsk_E;
break;
case tmhalFEModulationQpsk:
//case tmdlFeConstellationQam4_E:
pCtx->DemodStatus_S.Const_E = tmdlFeConstellationQpsk_E;
break;
case tmhalFEModulationPsk8:
pCtx->DemodStatus_S.Const_E = tmdlFeConstellation8Psk_E;
break;
case tmhalFEModulationQam16:
pCtx->DemodStatus_S.Const_E = tmdlFeConstellationQam16_E;
break;
case tmhalFEModulationQam32:
pCtx->DemodStatus_S.Const_E = tmdlFeConstellationQam32_E;
break;
case tmhalFEModulationQam64:
pCtx->DemodStatus_S.Const_E = tmdlFeConstellationQam64_E;
break;
case tmhalFEModulationQam128:
pCtx->DemodStatus_S.Const_E = tmdlFeConstellationQam128_E;
break;
case tmhalFEModulationQam256:
pCtx->DemodStatus_S.Const_E = tmdlFeConstellationQam256_E;
break;
case tmhalFEModulationAuto:
pCtx->DemodStatus_S.Const_E = tmdlFeConstellationAuto_E;
break;
default:
return tmdlFeInvalidValue_E;
}
}
// Carrier Status
if ( pCtx->StatusMask_S & DEMOD_STATUS_CARRIER_STS )
{
// Get the synchronization information by reading the right register
pCtx->uDemodCfg.Cab_S.getCfgFunc(pCtx->FeUnit, tmhalFEReadSync, &uSyncByte);
if (uSyncByte & TMDLFE_SYNC_CARRIER)
pCtx->DemodStatus_S.CarrierStatus_E = tmdlFeCarrierLock_E;
else
pCtx->DemodStatus_S.CarrierStatus_E = tmdlFeCarrierNoLock_E;
}
// VBER not available in cable
pCtx->DemodStatus_S.VBerValue_U = 0xFFFFFFFF;
// CBER
if ( pCtx->StatusMask_S & DEMOD_STATUS_CBER )
pCtx->uDemodCfg.Cab_S.getBerFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.CBerValue_U) );
// Uncor
if ( pCtx->StatusMask_S & DEMOD_STATUS_UBK )
pCtx->uDemodCfg.Cab_S.getUbkFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.UbkValue_U));
// Level
if ( pCtx->StatusMask_S & DEMOD_STATUS_LVL )
{
if (pCtx->TunerCfg_S.getRssiFunc != Null)
{
if (pCtx->DemodStatus_S.CarrierStatus_E == tmdlFeCarrierLock_E)
{
pCtx->uDemodCfg.Cab_S.setCfgFunc(tmUnit0, tmhalFEI2cSwitch, 1);
// enable ADC RSSI
pCtx->TunerCfg_S.setCfgFunc(tmUnit0, tmhalFEReadRSSI, 1);
pCtx->TunerCfg_S.ge
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -