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