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

📄 tmdlfe.c

📁 卫星接收机器卫星 自动搜索, 包括优化处理
💻 C
📖 第 1 页 / 共 5 页
字号:
//-----------------------------------------------------------------------------
// $Header: S:/SYSOL/SOURCE/SDE_RWE/comps/tmdl/comps/tmdlFe/src/RCS/tmdlFe.c,v 1.10 2003/07/29 08:05:04 frq03592 Exp $
// (C) Copyright 2000 Philips Semiconductors, All rights reserved
//
// This source code and any compilation or derivative thereof is the sole
// property of Philips Corporation and is provided pursuant to a Software
// License Agreement.  This code is the proprietary information of Philips
// Corporation and is confidential in nature.  Its use and dissemination by
// any party other than Philips Corporation is strictly limited by the
// confidential information provisions of the Agreement referenced above.
//-----------------------------------------------------------------------------
// FILE NAME:    tmdlFe.c
//
// DESCRIPTION:  This file contains the private declaration of the Demod device
//               library
//
// DOCUMENT REF: DVP Software Coding Guidelines Specification
//               SRS DevLib Demod
//               SDD DevLib Demod
//
// NOTES:
//
// HISTORY :
// (copy the lines below, before filling them)
// Author       :
// Date         :
// Description  :
//
//
// Author       : Xavier RAZAVET
// Date         : 24.01.03
// Description  : first implementation
//
//
//-----------------------------------------------------------------------------
//

//-----------------------------------------------------------------------------
// Standard include files:
//-----------------------------------------------------------------------------
//
#include <string.h>         // memcpy
#include "tmosal.h"         // DVP Operating System Adaptaion Layer
#include <tmtypes.h>

#include "dv_dbg.h"			// Debug functionalities available with the DV_DEBUG option
#if DV_DEBUG == 1
#include "tmdlFeDbg.h"
#endif


//-----------------------------------------------------------------------------
// Project include files:
//-----------------------------------------------------------------------------
#include  "tmhpiCommonTypes_Int.h"

#include  "tmbslTuner.h"
#include  "tmhalFEtypes.h"

#include "tmdlIic.h"

#include "tmdlPio.h"

#include  "tmbslDemodSat.h"
#include  "tmbslDemodCab.h"
#include  "tmbslDemodTer.h"

#include  "tmdlFe.h"
#include  "tmdlFe_Private.h"
#include  "tmdlFeLlevel.h"
#include  "tmdlFeTask.h"
#include  "tmdlFeLocal.h"

#include "tmdlFe_Cfg.h"

// Work around for SAC lnb command
extern tmErrorCode_t SY_PioOpenSacLnb( tmdlFeInstance_t	FeInstance_U,tmInstance_t*   pioInstance_U);
extern void Print(char *ptr, ...);

//-----------------------------------------------------------------------------
// Types and defines:
//-----------------------------------------------------------------------------
//#define MML_ALLOC

// Offset between frequency set and frequency output by the modulator
#define DLFE_REMODULATOR_CHANNEL_OFFSET 2750

// sound carrier at 5.5 Mhz
#define DLFE_REMODULATOR_SOUND_CARRIER_5_5MHZ  0x08
// sound carrier at 6.0 Mhz
#define DLFE_REMODULATOR_SOUND_CARRIER_6_0MHZ   0x10

// Computation of DB1 according to divider ratio
#define DLFE_REMODULATOR_DB1_COMPUTE(x)  ((UInt8)(x>>6))
#define DLFE_REMODULATOR_DB2_COMPUTE(x)  ((UInt8)(x<<2))

// computation of divider ratio according to the frequency
#define DLFE_REMODULATOR_DIV_RATIO_COMPUTE(freq)  (((freq - DLFE_REMODULATOR_CHANNEL_OFFSET)*4 +500)/1000)

// CB1 default value for PAL
#define DLFE_REMODULATOR_CB1_DEFAULT_VAL 0x80

// standby values (for remodulator standby)
#define DLFE_REMODULATOR_DB1_STANDBY_VAL 0x00
#define DLFE_REMODULATOR_DB2_STANDBY_VAL 0x00
#define DLFE_REMODULATOR_CB1_STANDBY_VAL 0xA0
#define DLFE_REMODULATOR_CB2_STANDBY_VAL 0x68
//-----------------------------------------------------------------------------
// Internal Prototypes:
//-----------------------------------------------------------------------------

// Front-End Unit initialized to tmUnitNone at the start-up.
tmUnitSelect_t gtmdlFeSatUnit = -1;//tmUnitNone;    // tmtypes.h under aspic32 without tmUnitNone enum
tmUnitSelect_t gtmdlFeCabUnit = -1;//tmUnitNone;
tmUnitSelect_t gtmdlFeTerUnit = -1;//tmUnitNone;

//-----------------------------------------------------------------------------
// global variable:
//-----------------------------------------------------------------------------

#ifdef MML_ALLOC    // -> Vincent in action. tmmlFree() does not work.
tmmlMmspHandle_t    gMemHandle = 0;
Int32 		        gMemSpaceCreated = -1;
#endif

//-----------------------------------------------------------------------------
// FUNCTION     : FeTune
//
// DESCRIPTION  :
//
// RETURN       : tmdlFeErr_t
//
// NOTES        : NA
//-----------------------------------------------------------------------------
tmdlFeErr_t FeTune(
                       tmdlFeInstance_t         FeInstance_U,
                       tmdlFeTuningConfig_t*    pTunCfg_S
                  )
{
	tmdlFeCtx_t*            pCtx;
    tmdlFeErr_t             RetVal_E;
    tmhalFEModulation_t     Modulation_E;
    tmhalFESpectrum_t       SpecInv_E;
    tmhalFEGuardInterval_t  GuardInterval_E;
    tmhalFEFft_t            TransmissionMode_E;
    tmhalFEHierarchy_t      Hierarchy_E;
    tmhalFEPriority_t       Priority_E;
    tmhalFEDepuncRate_t     ViterbiRateHP_E, ViterbiRateLP_E, ViterbiRate_E;
    tmErrorCode_t	    ErrorCode;
    UInt8                   Cpt_BY=0;
	UInt32  LNBByte;

	pCtx = (tmdlFeCtx_t*)FeInstance_U;

    // instance control
    if ( FeInstance_U != pCtx->Instance_U )
        return (tmdlFeNotOpen_E);

    pCtx->DemodStatus_S.CarrierStatus_E = tmdlFeCarrierNoLock_E;
 
    switch (pTunCfg_S->Const_E)
    {
        case tmdlFeConstellationBpsk_E:
            Modulation_E = tmhalFEModulationBpsk;
            break;
        case tmdlFeConstellationQpsk_E:
        //case tmdlFeConstellationQam4_E:
            Modulation_E = tmhalFEModulationQpsk;
            break;
        case tmdlFeConstellation8Psk_E:
            Modulation_E = tmhalFEModulationPsk8;
            break;
        case tmdlFeConstellationQam16_E:
            Modulation_E = tmhalFEModulationQam16;
            break;
        case tmdlFeConstellationQam32_E:
            Modulation_E = tmhalFEModulationQam32;
            break;
        case tmdlFeConstellationQam64_E:
            Modulation_E = tmhalFEModulationQam64;
            break;
        case tmdlFeConstellationQam128_E:
            Modulation_E = tmhalFEModulationQam128;
            break;
        case tmdlFeConstellationQam256_E:
            Modulation_E = tmhalFEModulationQam256;
            break;
        case tmdlFeConstellationAuto_E:
            Modulation_E = tmhalFEModulationAuto;
            break;
        case tmdlFeConstellation8Vsb_E:
        case tmdlFeConstellationMax_E:
        default:
            return tmdlFeInvalidValue_E;
    }

    switch (pTunCfg_S->SpecInv_E)
    {
        case tmdlSpectrumAuto_E:
            SpecInv_E = tmhalFESpectrumAuto;
            break;
        case tmdlSpectrumNormal_E:
            SpecInv_E = tmhalFESpectrumNormal;
            break;
        case tmdlSpectrumInverted_E:
            SpecInv_E = tmhalFESpectrumInverted;
            break;
        default:
            return tmdlFeInvalidValue_E;
    }

	//------------------
	// PROGRAM FRONT-END
	//------------------
    switch (pCtx->FeType_E)
    {

		//-----------------------
		case tmdlFeTerrestrial_E:
		//-----------------------

            ///////////////////////////////////////////////////////////////////
            // Adaptation Layer between DevLib structures and BSL structures //
            ///////////////////////////////////////////////////////////////////

            switch (pTunCfg_S->Specific_S.Ter_S.uStd.DvbT_S.ViterbiRateHP_E)
            {
                case tmdlFeTerRate12_E:
                    ViterbiRateHP_E = tmhalFEDepuncRate12;
                    break;
                case tmdlFeTerRate23_E:
                    ViterbiRateHP_E = tmhalFEDepuncRate23;
                    break;
                case tmdlFeTerRate34_E:
                    ViterbiRateHP_E = tmhalFEDepuncRate34;
                    break;
                case tmdlFeTerRate56_E:
                    ViterbiRateHP_E = tmhalFEDepuncRate56;
                    break;
                case tmdlFeTerRate78_E:
                    ViterbiRateHP_E = tmhalFEDepuncRate78;
                    break;
                case tmdlFeTerRateAutoDetect_E:
                    ViterbiRateHP_E = tmhalFEDepuncRateAuto;
                    break;
                case tmdlFeTerRateMax_E:
                default:
                    return tmdlFeInvalidValue_E;
            }


            switch (pTunCfg_S->Specific_S.Ter_S.uStd.DvbT_S.ViterbiRateLP_E)
            {
                case tmdlFeTerRate12_E:
                    ViterbiRateLP_E = tmhalFEDepuncRate12;
                    break;
                case tmdlFeTerRate23_E:
                    ViterbiRateLP_E = tmhalFEDepuncRate23;
                    break;
                case tmdlFeTerRate34_E:
                    ViterbiRateLP_E= tmhalFEDepuncRate34;
                    break;
                case tmdlFeTerRate56_E:
                    ViterbiRateLP_E = tmhalFEDepuncRate56;
                    break;
                case tmdlFeTerRate78_E:
                    ViterbiRateLP_E= tmhalFEDepuncRate78;
                    break;
                case tmdlFeTerRateAutoDetect_E:
                    ViterbiRateLP_E = tmhalFEDepuncRateAuto;
                    break;
                case tmdlFeTerRateMax_E:
                default:
                    return tmdlFeInvalidValue_E;
            }


            switch (pTunCfg_S->Specific_S.Ter_S.uStd.DvbT_S.GuardInterval_E)
            {
                case tmdlFeTerGuardInterval32_E:
                    GuardInterval_E = tmhalFEGuardInterval32;
                    break;
                case tmdlFeTerGuardInterval16_E:
                    GuardInterval_E = tmhalFEGuardInterval16;
                    break;
                case tmdlFeTerGuardInterval8_E:
                    GuardInterval_E = tmhalFEGuardInterval8;
                    break;
                case tmdlFeTerGuardInterval4_E:
                    GuardInterval_E = tmhalFEGuardInterval4;
                    break;
                case tmdlFeTerGuardIntervalAutoDetect_E:
                    GuardInterval_E = tmhalFEGuardIntervalAuto;
                    break;
                case tmdlFeTerGuardIntervalMax:
                default:
                    return tmdlFeInvalidValue_E;
            }


            switch (pTunCfg_S->Specific_S.Ter_S.uStd.DvbT_S.TransmissionMode_E)
            {
                case tmdlFeTerTransmissionMode2K_E:
                    TransmissionMode_E = tmhalFEFft2K;
                    break;
                case tmdlFeTerTransmissionMode8K_E:
                    TransmissionMode_E = tmhalFEFft8K;
                    break;
                case tmdlFeTerTransmissionModeAutoDetect_E:
                    TransmissionMode_E = tmhalFEFftAuto;
                    break;
                case tmdlFeTerTransmissionModeMax_E:
                    TransmissionMode_E = tmdlFeInvalidValue_E;
                    break;
                default:
                    return tmdlFeInvalidValue_E;
            }


            switch (pTunCfg_S->Specific_S.Ter_S.uStd.DvbT_S.Priority_E)
            {
                case tmdlFeTerPriorityHigh_E:
                    Priority_E = tmhalFEPriorityHigh;
                    break;
                case tmdlFeTerPriorityLow_E:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -