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

📄 d0399e.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
/* ----------------------------------------------------------------------------
File Name: d0399E.c

Description: 

    stv0399E demod driver.




Copyright (C) 2003-2004 STMicroelectronics

History:
   date: 15-07-2004
   version: 1.0.0
   author : SD
   comment: First release for 399E.

Reference:

    ST API Definition "TUNER Driver API" DVD-API-06
---------------------------------------------------------------------------- */


/* Includes ---------------------------------------------------------------- */

/* C libs */
#ifdef ST_OSLINUX
#include "stos.h"
#else
#include <string.h>                     
#include "stlite.h"     /* Standard includes */
#include "sttbx.h"
#endif
/* STAPI */

#include "sttuner.h"                    

#ifndef STTUNER_MINIDRIVER
#include "stevt.h"
/* local to sttuner */
#include "util.h"       /* generic utility functions for sttuner */
   /* data types for databases */
#include "ioarch.h"     /* I/O for this driver */
#include "ioreg.h"      /* I/O for this driver */
#endif
/* LLA */
#include "dbtypes.h" 
#include "399_drv.h"   /* driver */
#include "util399E.h"  /* utility functions to support STV0399 LLA */
#include "d0399.h"      /* header for this file */
#include "sioctl.h"     /* data structure typedefs for all the the sat ioctl functions */

#include "sysdbase.h"   /* functions to accesss system data */
#include "stcommon.h" 

#ifdef STTUNER_DRV_SAT_SCR
extern ST_ErrorCode_t scr_scrdrv_SetFrequency   (STTUNER_Handle_t Handle, DEMOD_Handle_t DemodHandle, ST_DeviceName_t *DeviceName, U32  InitialFrequency,  U8 LNBIndex, U8 SCRBPF );
	
	#define BAND1_FREQUENCY                 1399000
	#define BAND2_FREQUENCY                 1516000
	#define BAND3_FREQUENCY                 1632000
	#define BAND4_FREQUENCY                 1748000
	
#endif
static  FE_399_SignalQuality_LookUp[20][2] =	{
												    	10,	 15,
													20,	 21,
													30,	 27,
													40,	 33,
													50,	 39,
													60,	 45,
													70,	 51,
													80,	 57,
													90,	 63,
													100, 69,
													110, 75,
													120, 81,
													130, 87,
													140, 93,
													150,100,
													160,100,
													170,100,
													180,100,
													190,100,
													200,100
												};


U8 Def399Val[STV399_NBREGS]=
 {
/*   0       1       2      3       4       5       6        7       8       9       A       B       C       D       E        F */ 

/*  ID     I2CRPT  ACR    F22FR   DACR1   DACR2   DISEQC  DqCFIFO DqCSTATS DISEQC2 IOCFG1  IOCFG2  AGC0C   AGC0R   AGC1C    AGC1CN
0x*/0xb5,  0x07,   0x2a,  0x8e,   0xa2,   0x00,   0x60,    0x00,  0x02,    0x00,   0x20,   0x50,   0x01,   0x51,   0xe9,    0x81,

/*  RTC    AGC1R  AGC1RN  AGC2O   TLSR    CFD     ACLC     BCLC   R8PSK    LDT     LDT2    AGC0CMD AGC0I   AGC1S   AGC1P    AGC1IN	
1x*/0x23,  0x14,   0x14,  0x74,   0x84,   0xd9,   0x87,    0xa8,  0x03,    0xdd,   0xc9,   0xa0,   0x05,   0xc3,   0xbf,    0x80,

/*  TLIR   AGC2I1  AGC2I2 RTF     VSTATUS LDI     ECNTM    ECNTL  SFRH     SFRM    SFRL    CFRM    CFRL    NIRM    NIRL     VERROR	
2x*/0x78,  0x41,   0x7e,  0xff,   0x9a,   0x7f,   0x00,    0x00,  0x41,    0x2f,   0x60,   0xff,   0x17,   0x0d,   0xc4,    0x00,

/*  FECM   VTH0    VTH1   VTH2    VTH3    VTH4    VTH5     PR     VAVSRCH  RS	   RSOUT  ERRCTRL VITPROG ERRCTRL2 ECNTM2   ECNTL2	
3x*/0x01,  0x1e,   0x14,  0x0f,   0x09,   0x0c,   0x05,    0x2f,  0x19,    0xbc,   0x10,   0xb3,   0x01,   0x31,   0x00,    0x00,

/*  DCLK1  LPF     DCLK2 ACOARSE AFINEMSB AFNLSB SYNTCTRL SNCTRL2 SYSCTRL  AGC1EP  AGC1ES TSTDCADJ TAGC1   TAGC1N  TPOLYPH  TSTR
4x*/0x40,  0x3f,   0x08,  0x7a,   0x03,   0xff,   0x51,    0x00,  0x0e,    0x8f,   0xf6,   0x00,   0x00,   0x00,   0x00,    0x00,
	
/*  TAGC2  TCTL1   TCTL2  TSTRAM1 TSTRATE SELOUT  FORCEIN  TSTFIFO TSTRS   TSTDIS  TSTI2C  TSTCK   TSTRES  TSTOUT  TSTIN    READ
5x*/0x00,  0x00,   0x00,  0x00,   0x00,   0x00,   0x00,    0x00,   0x00,   0x00,   0x00,   0x00,   0x00,   0x00,   0x00,    0x00,

/* TSTFREE TSTTNR1 TSTTNR2
6x*/0x00,  0x00,   0x00
 
};



/* Private types/constants ------------------------------------------------ */
#ifndef STTUNER_MINIDRIVER
	#define ANALOG_CARRIER_DETECT_SYMBOL_RATE   5000000
	#define ANALOG_CARRIER_DETECT_AGC2_VALUE    25
	/* Device capabilities */
	#define MAX399_AGC                         255
	#define MAX399_SIGNAL_QUALITY              100
	#define MAX399_BER                         200000
#endif


/* Change STV0399 tuner scan step from default (calculated) value,
   bigger value == faster scanning, smaller value == more channels picked up */
#define STV0399_TUNER_SCAN_STEP   0

#define STV0399E_SYMBOL_RATE_MIN 1000000
#define STV0399E_SYMBOL_RATE_MAX 45000000

#define STV0399E_FREQ_MIN 950000
#define STV0399E_FREQ_MAX 2150000

/* private variables ------------------------------------------------------- */
#if defined(ST_OS21) || defined(ST_OSLINUX)
static semaphore_t *Lock_InitTermOpenClose; /* guard calls to the functions */
#else
static semaphore_t Lock_InitTermOpenClose; 
#endif
#ifndef STTUNER_MINIDRIVER
static BOOL        Installed = FALSE;
/* instance chain, the default boot value is invalid, to catch errors */
static D0399_InstanceData_t *InstanceChainTop = (D0399_InstanceData_t *)0x7fffffff;
#endif

/**************extern from  open.c************************/
#ifdef STTUNER_DRV_SAT_SCR
#ifdef STTUNER_DRV_SAT_SCR_LOOPTHROUGH
extern U32 DemodDrvHandleOne;
#endif
#endif

/* For DiSEqC2.0*/
#ifdef STTUNER_DISEQC2_SWDECODE_VIA_PIO	
static U32 IndexforISR;
STTUNER_InstanceDbase_t *InstforISR;
#endif 


/* functions --------------------------------------------------------------- */
#ifndef STTUNER_MINIDRIVER
/* API */
ST_ErrorCode_t demod_d0399_Init(ST_DeviceName_t *DeviceName, DEMOD_InitParams_t *InitParams);
ST_ErrorCode_t demod_d0399_Term(ST_DeviceName_t *DeviceName, DEMOD_TermParams_t *TermParams);

ST_ErrorCode_t demod_d0399_Open (ST_DeviceName_t *DeviceName, DEMOD_OpenParams_t  *OpenParams, DEMOD_Capability_t *Capability, DEMOD_Handle_t *Handle);
ST_ErrorCode_t demod_d0399_Close(DEMOD_Handle_t  Handle, DEMOD_CloseParams_t *CloseParams);

ST_ErrorCode_t demod_d0399_IsAnalogCarrier (DEMOD_Handle_t Handle, BOOL *IsAnalog);        
ST_ErrorCode_t demod_d0399_GetSignalQuality(DEMOD_Handle_t Handle, U32  *SignalQuality_p, U32 *Ber);
ST_ErrorCode_t demod_d0399_GetModulation   (DEMOD_Handle_t Handle, STTUNER_Modulation_t *Modulation);
ST_ErrorCode_t demod_d0399_SetModulation   (DEMOD_Handle_t Handle, STTUNER_Modulation_t  Modulation);
ST_ErrorCode_t demod_d0399_GetAGC          (DEMOD_Handle_t Handle, S16                  *Agc);
ST_ErrorCode_t demod_d0399_GetFECRates     (DEMOD_Handle_t Handle, STTUNER_FECRate_t    *FECRates);
ST_ErrorCode_t demod_d0399_GetIQMode       (DEMOD_Handle_t Handle, STTUNER_IQMode_t     *IQMode); /*added for GNBvd26107->I2C failure due to direct access to demod device at API level*/
ST_ErrorCode_t demod_d0399_IsLocked        (DEMOD_Handle_t Handle, BOOL                 *IsLocked);
ST_ErrorCode_t demod_d0399_SetFECRates     (DEMOD_Handle_t Handle, STTUNER_FECRate_t     FECRates);
ST_ErrorCode_t demod_d0399_Tracking        (DEMOD_Handle_t Handle, BOOL ForceTracking,   U32 *NewFrequency, BOOL *SignalFound);

ST_ErrorCode_t demod_d0399_ScanFrequency   (DEMOD_Handle_t Handle, U32  InitialFrequency, U32   SymbolRate,    U32   MaxOffset, 
                                                                   U32  TunerStep,        U8    DerotatorStep, BOOL *ScanSuccess,
                                                                   U32 *NewFrequency,     U32   Mode,          U32   Guard,
                                                                   U32  Force,            U32   Hierarchy,     U32   Spectrum,
                                                                   U32  FreqOff,          U32   ChannelBW,     S32   EchoPos);

ST_ErrorCode_t demod_d0399_ioctl           (DEMOD_Handle_t Handle, U32 Function, void *InParams, void *OutParams, STTUNER_Da_Status_t *Status);

/* added for DiSEqC API support*/
ST_ErrorCode_t demod_d0399_DiSEqC       (	DEMOD_Handle_t Handle, 
									    STTUNER_DiSEqCSendPacket_t *pDiSEqCSendPacket,
									    STTUNER_DiSEqCResponsePacket_t *pDiSEqCResponsePacket
									    );

ST_ErrorCode_t demod_d0399_DiSEqCGetConfig ( DEMOD_Handle_t Handle ,STTUNER_DiSEqCConfig_t * DiSEqCConfig);
ST_ErrorCode_t demod_d0399_DiSEqCBurstOFF ( DEMOD_Handle_t Handle );

ST_ErrorCode_t demod_d0399_tonedetection(DEMOD_Handle_t Handle,U32 StartFreq, U32 StopFreq,U8  *NbTones,U32 *ToneList, U8 mode,int* power_detection_level);
/* I/O API */
ST_ErrorCode_t demod_d0399_ioaccess(DEMOD_Handle_t Handle, IOARCH_Handle_t IOHandle,
                  STTUNER_IOARCH_Operation_t Operation, U16 SubAddr, U8 *Data, U32 TransferSize, U32 Timeout);
U16 addressarray[]=
{                  
0x0000,
0x0001,
0x0002,
0x0003,
0x0004,
0x0005,
0x0006,
0x0007,
0x0008,
0x0009,
0x000a,
0x000b,
0x000c,
0x000d,
0x000e,
0x000f,
0x0010,
0x0011,
0x0012,
0x0013,
0x0014,
0x0015,
0x0016,
0x0017,
0x0018,
0x0019,
0x001a,
0x001b,
0x001c,
0x001d,
0x001e,
0x001f,
0x0020,
0x0021,
0x0022,
0x0023,
0x0024,
0x0025,
0x0026,
0x0027,
0x0028,
0x0029,
0x002a,
0x002b,
0x002c,
0x002d,
0x002e,
0x002f,
0x0030,
0x0031,
0x0032,
0x0033,
0x0034,
0x0035,
0x0036,
0x0037,
0x0038,
0x0039,
0x003a,
0x003b,
0x003c,
0x003d,
0x003e,
0x003f,
0x0040,
0x0041,
0x0042,
0x0043,
0x0044,
0x0045,
0x0046,
0x0047,
0x0048,
0x0049,
0x004a,
0x0080,
0x0081,
0x0082,
0x0083,
0x0084,
0x0085,
0x0086,
0x0087,
0x0088,
0x0089,
0x008a,
0x008b,
0x008c,
0x008d,
0x008e,
0x008f,
0x0090,
0x0091,
0x0092,
0x0093,
0x0094,
0x0095,
0x0096,
0x0097,
};                  



                  
/* local functions --------------------------------------------------------- */
D0399_InstanceData_t *D0399_GetInstFromHandle(DEMOD_Handle_t Handle);
#endif
#ifdef STTUNER_MINIDRIVER
#define MAKEWORD(X,Y)   ((X<<8)+(Y))
D0399_InstanceData_t *DEMODInstance;
#endif
#ifdef STTUNER_DEBUG_MODULE_SATDRV_D0399
static char *FE_399_Errors2String(FE_399_Error_t Error);
#endif
#ifndef STTUNER_MINIDRIVER
/* ----------------------------------------------------------------------------
Name: STTUNER_DRV_DEMOD_STV0399_Install()

Description:
    install a satellite device driver into the demod database.
    
Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t STTUNER_DRV_DEMOD_STV0399_Install(STTUNER_demod_dbase_t *Demod)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_D0399
   const char *identity = "STTUNER d0399.c STTUNER_DRV_DEMOD_STV0399_Install()";
#endif
    ST_ErrorCode_t Error = ST_NO_ERROR;

    if(Installed == TRUE)
    {
#ifdef STTUNER_DEBUG_MODULE_SATDRV_D0399
        STTBX_Print(("%s fail driver already installed\n", identity));
#endif
        return(STTUNER_ERROR_INITSTATE);
    }
   
#ifdef STTUNER_DEBUG_MODULE_SATDRV_D0399
    STTBX_Print(("%s installing sat:demod:STV0399...", identity));
#endif

    /* mark ID in database */
    Demod->ID = STTUNER_DEMOD_STV0399;

    /* map API */
    Demod->demod_Init = demod_d0399_Init;
    Demod->demod_Term = demod_d0399_Term;

    Demod->demod_Open  = demod_d0399_Open;
    Demod->demod_Close = demod_d0399_Close;

    Demod->demod_IsAnalogCarrier  = demod_d0399_IsAnalogCarrier; 
    Demod->demod_GetSignalQuality = demod_d0399_GetSignalQuality;
    Demod->demod_GetModulation    = demod_d0399_GetModulation;   
    Demod->demod_SetModulation    = demod_d0399_SetModulation;   
    Demod->demod_GetAGC           = demod_d0399_GetAGC;          
    Demod->demod_GetIQMode        = demod_d0399_GetIQMode; /*added for GNBvd26107->I2C failure due to direct access to demod device at API level*/
    Demod->demod_GetFECRates      = demod_d0399_GetFECRates;      
    Demod->demod_IsLocked         = demod_d0399_IsLocked ;   
    Demod->demod_SetFECRates      = demod_d0399_SetFECRates;     

⌨️ 快捷键说明

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