⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tmdlfe.c

📁 卫星接收机器卫星 自动搜索, 包括优化处理
💻 C
📖 第 1 页 / 共 5 页
字号:
            	}
            	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 + -