📄 tmdlfe.c
字号:
}
else
{
events_U = TMDL_FE_EVENT_TUNE_FAILED;
}
}
break;
default:
events_U = TMDL_FE_EVENT_NO_CARRIER;
pCtx->FeCurrState_E = tmdlFeStateUnTuned_E;
break;
}
if ((pCtx->CallBack != Null) && (pCtx->EventMask_U & events_U))
{
pCtx->CallBack(events_U, (void *)Null, pCtx->HpiInstance_U);
}
return (tmdlFeNoError_E);
}
//-----------------------------------------------------------------------------
// FUNCTION : FeGetFeCarrier
//
// DESCRIPTION : Get the front end lock
//
// RETURN : tmdlFeErr_t
//
// NOTES : NA
//-----------------------------------------------------------------------------
tmdlFeErr_t FeGetFeCarrier( tmdlFeInstance_t FeInstance_U )
{
tmdlFeCtx_t* pCtx;
UInt32 uSyncByte;
pCtx = (tmdlFeCtx_t*)FeInstance_U;
// instance control
if ( FeInstance_U != pCtx->Instance_U )
return (tmdlFeNotOpen_E);
switch (pCtx->FeType_E)
{
/////////////////////////
case tmdlFeTerrestrial_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;
break;
///////////////////////
case tmdlFeSatellite_E:
///////////////////////
// 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;
break;
break;
///////////////////
case tmdlFeCable_E:
///////////////////
// 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;
break;
}
return (tmdlFeNoError_E);
}
//-----------------------------------------------------------------------------
// FUNCTION : FeGetStatus
//
// DESCRIPTION :
//
// RETURN : tmdlFeErr_t
//
// NOTES : NA
//-----------------------------------------------------------------------------
tmdlFeErr_t FeGetStatus( tmdlFeInstance_t FeInstance_U )
{
tmdlFeCtx_t* pCtx;
UInt32 uSyncByte;
UInt32 ScanProgress_U;
tmErrorCode_t errorCode_E;
UInt8 PolarVoltage_BY;
pCtx = (tmdlFeCtx_t*)FeInstance_U;
// instance control
if ( FeInstance_U != pCtx->Instance_U )
return (tmdlFeNotOpen_E);
switch (pCtx->FeType_E)
{
/////////////////////////
case tmdlFeTerrestrial_E:
/////////////////////////
if ( pCtx->StatusMask_S & DEMOD_STATUS_FREQ )
pCtx->uDemodCfg.Ter_S.getRfFunc(
pCtx->FeUnit,
&(pCtx->DemodStatus_S.Frequency_U),
&(pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.Offset)
);
if ( pCtx->StatusMask_S & DEMOD_FSYMB_BW )
pCtx->uDemodCfg.Ter_S.getCsFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.Fsymb_BW_U) );
// Spectral Inversion
if ( pCtx->StatusMask_S & DEMOD_STATUS_SI )
{
pCtx->uDemodCfg.Ter_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.Ter_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;
}
}
// Get the standard information: DVB-T or VSB
if ( pCtx->StatusMask_S & DEMOD_STANDARD )
pCtx->DemodStatus_S.Specific_S.Ter_S.Standard_S = pCtx->DTT_Standard_S;
// Specific Terrestrial Fields
if ( pCtx->StatusMask_S & DEMOD_STATUS_SPECIFIC )
{
// ViterbiRateHP
pCtx->uDemodCfg.Ter_S.getVrHpFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.ViterbiRateHP_E) );
switch (pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.ViterbiRateHP_E)
{
case tmhalFEDepuncRate12:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.ViterbiRateHP_E = tmdlFeTerRate12_E;
break;
case tmhalFEDepuncRate23:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.ViterbiRateHP_E = tmdlFeTerRate23_E;
break;
case tmhalFEDepuncRate34:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.ViterbiRateHP_E = tmdlFeTerRate34_E;
break;
case tmhalFEDepuncRate56:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.ViterbiRateHP_E = tmdlFeTerRate56_E;
break;
case tmhalFEDepuncRate78:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.ViterbiRateHP_E = tmdlFeTerRate78_E;
break;
case tmhalFEDepuncRateAuto:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.ViterbiRateHP_E = tmdlFeTerRateAutoDetect_E;
break;
default:
return tmdlFeInvalidValue_E;
}
// ViterbiRateLP
pCtx->uDemodCfg.Ter_S.getVrLpFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.ViterbiRateLP_E) );
switch (pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.ViterbiRateLP_E)
{
case tmhalFEDepuncRate12:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.ViterbiRateLP_E = tmdlFeTerRate12_E;
break;
case tmhalFEDepuncRate23:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.ViterbiRateLP_E = tmdlFeTerRate23_E;
break;
case tmhalFEDepuncRate34:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.ViterbiRateLP_E = tmdlFeTerRate34_E;
break;
case tmhalFEDepuncRate56:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.ViterbiRateLP_E = tmdlFeTerRate56_E;
break;
case tmhalFEDepuncRate78:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.ViterbiRateLP_E= tmdlFeTerRate78_E;
break;
case tmhalFEDepuncRateAuto:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.ViterbiRateLP_E = tmdlFeTerRateAutoDetect_E;
break;
default:
return tmdlFeInvalidValue_E;
}
// GuardInterval
pCtx->uDemodCfg.Ter_S.getGiFunc (pCtx->FeUnit, &(pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.GuardInterval_E) );
switch (pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.GuardInterval_E)
{
case tmhalFEGuardInterval32:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.GuardInterval_E = tmdlFeTerGuardInterval32_E;
break;
case tmhalFEGuardInterval16:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.GuardInterval_E = tmdlFeTerGuardInterval16_E;
break;
case tmhalFEGuardInterval8:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.GuardInterval_E = tmdlFeTerGuardInterval8_E;
break;
case tmhalFEGuardInterval4:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.GuardInterval_E = tmdlFeTerGuardInterval4_E;
break;
case tmhalFEGuardIntervalAuto:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.GuardInterval_E = tmdlFeTerGuardIntervalAutoDetect_E;
break;
default:
return tmdlFeInvalidValue_E;
}
// Transmission Mode
pCtx->uDemodCfg.Ter_S.getFftFunc (pCtx->FeUnit, &(pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.TransmissionMode_E) );
switch (pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.TransmissionMode_E)
{
case tmhalFEFft2K:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.TransmissionMode_E = tmdlFeTerTransmissionMode2K_E;
break;
case tmhalFEFft8K:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.TransmissionMode_E = tmdlFeTerTransmissionMode8K_E;
break;
case tmhalFEFftAuto:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.TransmissionMode_E = tmdlFeTerTransmissionModeAutoDetect_E;
break;
default:
return tmdlFeInvalidValue_E;
}
// Hierarchy
pCtx->uDemodCfg.Ter_S.getHrchFunc(pCtx->FeUnit, &(pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.Hierarchy_E) );
switch (pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.Hierarchy_E)
{
case tmhalFEHierarchyNo:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.Hierarchy_E = tmdlFeTerHierarchyNonHierarchy_E;
break;
case tmhalFEHierarchyAlpha1:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.Hierarchy_E = tmdlFeTerHierarchyAlpha1_E;
break;
case tmhalFEHierarchyAlpha2:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.Hierarchy_E = tmdlFeTerHierarchyAlpha2_E;
break;
case tmhalFEHierarchyAlpha4:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.Hierarchy_E = tmdlFeTerHierarchyAlpha4_E;
break;
case tmhalFEHierarchyAuto:
pCtx->DemodStatus_S.Specific_S.Ter_S.uStd.DvbT_S.Hierarchy_E = tmdlFeTerHierarchyAutoDetect_E;
break;
default:
return tmdlFeInvalidValue_E;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -