📄 tmdlfe.c
字号:
//-----------------------------------------------------------------------------
// $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 + -