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

📄 tuntdrv.c

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

Description: external tuner drivers.


Copyright (C) 1999-2001 STMicroelectronics

History:

   date: 13-Sept-2001
version: 3.1.0
 author: GB from the work by GJP
comment: rewrite for terrestrial.

Reference:

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


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

/* C libs */
#ifndef STTUNER_MINIDRIVER
#ifdef ST_OSLINUX
   #include "stos.h"
#else
#include <string.h>

#include "stlite.h"     /* Standard includes */

/* STAPI */
#include "sttbx.h"
#endif
#include "stevt.h"
#include "sttuner.h"


/* local to sttuner */
#include "util.h"       /* generic utility functions for sttuner */
#include "dbtypes.h"    /* data types for databases */
#include "sysdbase.h"   /* functions to accesss system data */
#include "ioarch.h"     /* I/O for this driver */
#include "ioreg.h"      /* I/O for this driver */
#include "tdrv.h"       /* utilities */

#include "tioctl.h"     /* data structure typedefs for all the the ter ioctl functions */

#include "tuntdrv.h"    /* header for this file */
#include "ll_tun0360.h" /* low level functions */

#ifndef ST_OSLINUX
#include "RF4000Init.h"
#include "RF4KCCLib.h"
#endif

#define TUNTDRV_IO_TIMEOUT 10

#define WRITE 1
#define READ  0

#if defined (ST_OS21) || defined(ST_OSLINUX)
#define WAIT_N_MS_TUNT(X)     task_delay( (signed int)(X * (ST_GetClocksPerSecond() / 1000)) )   /*task_delay(X)*/
#else
#define WAIT_N_MS_TUNT(X)     task_delay( (unsigned int)(X * (ST_GetClocksPerSecond() / 1000)) )   /*task_delay(X)*/
#endif

/* private variables ------------------------------------------------------- */
int dbg_counter;
#if defined(ST_OS21) || defined(ST_OSLINUX)
static semaphore_t *Lock_InitTermOpenClose; /* guard calls to the functions */
#else
static semaphore_t Lock_InitTermOpenClose; /* guard calls to the functions */
#endif

static BOOL Installed            = FALSE;
#ifdef STTUNER_BASIC
	static BOOL Installed_DTT7572    = FALSE;
	static BOOL Installed_DTT7578    = FALSE;
	#ifdef STTUNER_DRV_TER_TUN_DTT7592
	static BOOL Installed_DTT7592    = FALSE;
	#endif
	static BOOL Installed_TDLB7      = FALSE;
	static BOOL Installed_TDQD3      = FALSE;
	#ifdef STTUNER_DRV_TER_TUN_DTT7300X
	static BOOL Installed_DTT7300X      = FALSE;
	#endif
	static BOOL Installed_ENG47402G1 = FALSE;
	static BOOL Installed_EAL2780 = FALSE;
	static BOOL Installed_TDA6650 = FALSE;
	static BOOL Installed_TDM1316 = FALSE;
	static BOOL Installed_TDEB2 = FALSE;
	static BOOL Installed_ED5058 = FALSE;
	static BOOL Installed_MIVAR = FALSE;
	static BOOL Installed_TDED4 = FALSE;
	static BOOL Installed_DTT7102 = FALSE;
	static BOOL Installed_TECC2849PG = FALSE;
	static BOOL Installed_TDCC2345 = FALSE;
	
	#ifndef ST_OSLINUX
	#ifdef STTUNER_DRV_TER_TUN_RF4000
	static BOOL Installed_RF4000 = FALSE;  
	#endif
	#endif
	
	static BOOL Installed_TDTGD108   = FALSE;
	
#endif
static BOOL Installed_DTVS223 = FALSE; 
 
/* instance chain, the default boot value is invalid, to catch errors */
static TUNTDRV_InstanceData_t *InstanceChainTop = (TUNTDRV_InstanceData_t *)0x7fffffff;


/* functions --------------------------------------------------------------- */
/* API */

ST_ErrorCode_t tuner_tuntdrv_Init(ST_DeviceName_t *DeviceName, TUNER_InitParams_t *InitParams);
ST_ErrorCode_t tuner_tuntdrv_Term(ST_DeviceName_t *DeviceName, TUNER_TermParams_t *TermParams);

ST_ErrorCode_t tuner_tuntdrv_Open(ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Handle_t *Handle);

#ifdef STTUNER_BASIC
	#ifdef STTUNER_DRV_TER_TUN_DTT7572
	ST_ErrorCode_t tuner_tuntdrv_Open_DTT7572    (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
	#endif
	#ifdef STTUNER_DRV_TER_TUN_DTT7578
	ST_ErrorCode_t tuner_tuntdrv_Open_DTT7578    (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
	#endif
	#ifdef STTUNER_DRV_TER_TUN_DTT7592
	ST_ErrorCode_t tuner_tuntdrv_Open_DTT7592    (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
	#endif
	#ifdef STTUNER_DRV_TER_TUN_TDLB7
	ST_ErrorCode_t tuner_tuntdrv_Open_TDLB7      (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
	#endif
	#ifdef STTUNER_DRV_TER_TUN_TDQD3
	ST_ErrorCode_t tuner_tuntdrv_Open_TDQD3      (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
	#endif
	#ifdef STTUNER_DRV_TER_TUN_DTT7300X
	ST_ErrorCode_t tuner_tuntdrv_Open_DTT7300X      (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
	#endif
	#ifdef STTUNER_DRV_TER_TUN_ENG47402G1
	ST_ErrorCode_t tuner_tuntdrv_Open_ENG47402G1      (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
	#endif
	#ifdef STTUNER_DRV_TER_TUN_EAL2780
	ST_ErrorCode_t tuner_tuntdrv_Open_EAL2780 (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
	#endif
	#ifdef STTUNER_DRV_TER_TUN_TDA6650
	ST_ErrorCode_t tuner_tuntdrv_Open_TDA6650 (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
	#endif
	#ifdef STTUNER_DRV_TER_TUN_TDM1316
	ST_ErrorCode_t tuner_tuntdrv_Open_TDM1316 (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
	#endif
	#ifdef STTUNER_DRV_TER_TUN_TDEB2
	ST_ErrorCode_t tuner_tuntdrv_Open_TDEB2 (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
	#endif
	#ifdef STTUNER_DRV_TER_TUN_ED5058
	ST_ErrorCode_t tuner_tuntdrv_Open_ED5058 (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
	#endif
	#ifdef STTUNER_DRV_TER_TUN_MIVAR
	
	ST_ErrorCode_t tuner_tuntdrv_Open_MIVAR (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
	#endif
	#ifdef STTUNER_DRV_TER_TUN_TDED4
	ST_ErrorCode_t tuner_tuntdrv_Open_TDED4 (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
	#endif
	#ifdef STTUNER_DRV_TER_TUN_DTT7102
	ST_ErrorCode_t tuner_tuntdrv_Open_DTT7102 (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
	#endif
	#ifdef STTUNER_DRV_TER_TUN_TECC2849PG
	ST_ErrorCode_t tuner_tuntdrv_Open_TECC2849PG (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
	#endif
	#ifdef STTUNER_DRV_TER_TUN_TDCC2345
	ST_ErrorCode_t tuner_tuntdrv_Open_TDCC2345 (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams,TUNER_Capability_t *Capability,  TUNER_Handle_t *Handle);
	#endif
	#ifdef STTUNER_DRV_TER_TUN_RF4000
	#ifndef ST_OSLINUX
	ST_ErrorCode_t tuner_tuntdrv_Open_RF4000(ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
	#endif
	#endif
	#ifdef STTUNER_DRV_TER_TUN_TDTGD108
	ST_ErrorCode_t tuner_tuntdrv_Open_TDTGD108 (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
	#endif
#endif	


#ifdef STTUNER_DRV_TER_TUN_DTVS223
ST_ErrorCode_t tuner_tuntdrv_Open_DTVS223(ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams,TUNER_Capability_t *Capability,  TUNER_Handle_t *Handle);
#endif

ST_ErrorCode_t tuner_tuntdrv_Close(TUNER_Handle_t Handle, TUNER_CloseParams_t *CloseParams);

ST_ErrorCode_t tuner_tuntdrv_SetFrequency (TUNER_Handle_t Handle, U32 Frequency, U32 *NewFrequency);
ST_ErrorCode_t tuner_tuntdrv_IsTunerLocked(TUNER_Handle_t Handle, BOOL *Locked);
ST_ErrorCode_t tuner_tuntdrv_GetStatus(TUNER_Handle_t Handle, TUNER_Status_t *Status);

void TunerSetNbSteps(TUNER_Handle_t Handle, int nbsteps);
int  TunerGetNbSteps(TUNER_Handle_t Handle);
void TunerInit      (TUNER_Handle_t Handle);

/* I/O API */
ST_ErrorCode_t tuner_tuntdrv_ioaccess(TUNER_Handle_t Handle, IOARCH_Handle_t IOHandle,
STTUNER_IOARCH_Operation_t Operation, U16 SubAddr, U8 *Data, U32 TransferSize, U32 Timeout);

/* access device specific low-level functions */
ST_ErrorCode_t tuner_tuntdrv_ioctl(TUNER_Handle_t Handle, U32 Function, void *InParams, void *OutParams, STTUNER_Da_Status_t *Status);


/* local functions --------------------------------------------------------- */

ST_ErrorCode_t STTUNER_DRV_TUNER_TUNTDRV_Install(  STTUNER_tuner_dbase_t  *Tuner, STTUNER_TunerType_t TunerType);
ST_ErrorCode_t STTUNER_DRV_TUNER_TUNTDRV_UnInstall(STTUNER_tuner_dbase_t  *Tuner, STTUNER_TunerType_t TunerType);

TUNTDRV_InstanceData_t *TUNTDRV_GetInstFromHandle(TUNER_Handle_t Handle);
U32 TunerGetStepsize(TUNTDRV_InstanceData_t *Instance);



#ifdef STTUNER_DRV_TER_TUN_DTVS223

U8 DTVS223_DefVal[DTVS223_NBREGS]= {0x0034,0x00C0,0x00C3,0x0008,0x0081,0x00};


U16  DTVS223_Address[DTVS223_NBREGS]={0x0000,0x0001,0x0002,0x0003,0x0004,0x0005};
#endif

#ifdef STTUNER_BASIC
#ifdef STTUNER_DRV_TER_TUN_TDQD3
U16  TDQD3_Address[TDQD3_NBREGS]=
{


0x0000,
0x0001,
0x0002,
0x0003,
0x0004,
0x0005
};


U8  TDQD3_DefVal[TDQD3_NBREGS]=
{0x0B,0xF5,0xA0,0xEC,0xC6,0x00};
#endif
#ifdef STTUNER_DRV_TER_TUN_DTT7300X
U16  DTT7300X_Address[DTT7300X_NBREGS]=
{


0x0000,
0x0001,
0x0002,
0x0003,
0x0004
};


U8  DTT7300X_DefVal[DTT7300X_NBREGS]=
{0x000B,0x00F4,0x009C,0x0020,0x00/*0x0C,0xE4,0x9C,0xB0,0x72*/};
#endif
#ifdef STTUNER_DRV_TER_TUN_TDTGD108
U16  TDTGD108_Address[TDTGD108_NBREGS]=
{


0x0000,
0x0001,
0x0002,
0x0003,
0x0004
};


U8  TDTGD108_DefVal[TDTGD108_NBREGS]=
/*{0x13,0x75,0xdc,0x20,0x78};*/
{0x13,0x75,0xC4,0x14,0x20};
#endif
#endif

/* ----------------------------------------------------------------------------
Name: STTUNER_DRV_TUNER_TUNTDRV_Install()

Description:
    install a terrestrial device driver.

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t STTUNER_DRV_TUNER_TUNTDRV_Install(STTUNER_tuner_dbase_t  *Tuner, STTUNER_TunerType_t TunerType)
{
#ifdef STTUNER_DEBUG_MODULE_TERDRV_TUNTDRV
   const char *identity = "STTUNER tuntdrv.c STTUNER_DRV_TUNER_TUNTDRV_Install()";
#endif
    ST_ErrorCode_t Error = ST_NO_ERROR;

    /* driver wide bits to init once only */
    if (Installed == FALSE)
    {
        InstanceChainTop = NULL;
#if defined(ST_OS21) || defined(ST_OSLINUX)
        Lock_InitTermOpenClose = semaphore_create_fifo(1);
#else
        semaphore_init_fifo(&Lock_InitTermOpenClose, 1);
#endif
        Installed = TRUE;
    }

  


  switch(TunerType)
    {
   
#ifdef STTUNER_BASIC
	#ifdef STTUNER_DRV_TER_TUN_DTT7572
	case STTUNER_TUNER_DTT7572:
		#ifdef STTUNER_DEBUG_MODULE_TERDRV_TUNTDRV
	            STTBX_Print(("%s installing ter:tuner:DTT7572...", identity));
		#endif
	            if (Installed_DTT7572 == TRUE)
	            {
	#ifdef STTUNER_DEBUG_MODULE_TERDRV_TUNTDRV
	                STTBX_Print(("fail already installed\n"));
	#endif
	                return(STTUNER_ERROR_INITSTATE);
	            }
	            Tuner->ID = STTUNER_TUNER_DTT7572;
	            Tuner->tuner_Open = tuner_tuntdrv_Open_DTT7572;
	            Installed_DTT7572 = TRUE;
	            break;  
	#endif
	#ifdef STTUNER_DRV_TER_TUN_DTT7578
	case STTUNER_TUNER_DTT7578:
		#ifdef STTUNER_DEBUG_MODULE_TERDRV_TUNTDRV
	            STTBX_Print(("%s installing ter:tuner:DTT7578...", identity));
	        #endif    
	
	            if (Installed_DTT7578 == TRUE)
	            {
	#ifdef STTUNER_DEBUG_MODULE_TERDRV_TUNTDRV
	                STTBX_Print(("fail already installed\n"));
	#endif
	                return(STTUNER_ERROR_INITSTATE);
	             }
	            
	            Tuner->ID = STTUNER_TUNER_DTT7578;
	            
	            Tuner->tuner_Open = tuner_tuntdrv_Open_DTT7578;
	             Installed_DTT7578 =true;
	break;
	#endif
	#ifdef STTUNER_DRV_TER_TUN_DTT7592
	case STTUNER_TUNER_DTT7592:
		#ifdef STTUNER_DEBUG_MODULE_TERDRV_TUNTDRV
	            STTBX_Print(("%s installing ter:tuner:DTT7592...", identity));
	        #endif    
	
	            if (Installed_DTT7592 == TRUE)
	            {
	#ifdef STTUNER_DEBUG_MODULE_TERDRV_TUNTDRV
	                STTBX_Print(("fail already installed\n"));
	#endif
	                return(STTUNER_ERROR_INITSTATE);
	             }
	            
	            Tuner->ID = STTUNER_TUNER_DTT7592;
	            
	            Tuner->tuner_Open = tuner_tuntdrv_Open_DTT7592;
	            Installed_DTT7592 = TRUE;
	                    break;
	#endif
	#ifdef  STTUNER_DRV_TER_TUN_TDLB7
	case STTUNER_TUNER_TDLB7:
		#ifdef STTUNER_DEBUG_MODULE_TERDRV_TUNTDRV
	            STTBX_Print(("%s installing ter:tuner:TDLB7...", identity));
	        #endif    
	
	            if (Installed_TDLB7 == TRUE)
	            {
	#ifdef STTUNER_DEBUG_MODULE_TERDRV_TUNTDRV
	                STTBX_Print(("fail already installed\n"));
	#endif
	                return(STTUNER_ERROR_INITSTATE);
	            }
	            Tuner->ID = STTUNER_TUNER_TDLB7;
	            Tuner->tuner_Open = tuner_tuntdrv_Open_TDLB7;
	            Installed_TDLB7 = TRUE;
	break;
	#endif
	#ifdef STTUNER_DRV_TER_TUN_TDQD3
	case STTUNER_TUNER_TDQD3:
		#ifdef STTUNER_DEBUG_MODULE_TERDRV_TUNTDRV
	            STTBX_Print(("%s installing ter:tuner:TDQD3...", identity));
	        #endif
	
	            if (Installed_TDQD3 == TRUE)
	            {
	#ifdef STTUNER_DEBUG_MODULE_TERDRV_TUNTDRV
	                STTBX_Print(("fail already installed\n"));

⌨️ 快捷键说明

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