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