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

📄 tmdlfe.c

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