📄 dtvvsb1.c
字号:
/*
* Copyright (c) 1999 by TriMedia Technologies.
*
* +-------------------------------------------------------------------+
* | This software is furnished under a license and may only be used |
* | and copied in accordance with the terms and conditions of such a |
* | license and with the inclusion of this copyright notice. This |
* | software or any other copies of this software may not be provided |
* | or otherwise made available to any other person. The ownership |
* | and title of this software is not transferred. |
* | |
* | The information in this software is subject to change without |
* | any prior notice and should not be construed as a commitment by |
* | TriMedia Technologies. |
* | |
* | This code and information is provided "as is" without any |
* | warranty of any kind, either expressed or implied, including but |
* | not limited to the implied warranties of merchantability and/or |
* | fitness for any particular purpose. |
* +-------------------------------------------------------------------+
*
*
* Module name : dtvVsb1.c 1.10
*
* Last update : 19:08:01 - 00/11/09
*
* Description :
*
*/
#include <string.h>
#include <tmlib/dprintf.h>
#include <tm1/tmAssert.h>
#include <tm1/tmBoard.h>
#include <tm1/tmBoardID.h>
#include <tm1/tsaReg.h>
#include <tm1/tsaComponent.h>
#include <tm1/tmIIC.h>
#include <tmlib/tmtypes.h>
#include <tm1/tsaTvTuner.h>
#include "iicDirection.h"
#include "td1536.h"
#include "tda8960.h"
/************************************** defines ******************************************/
#define TRY(x) \
do { \
tmLibdevErr_t _err = (x); \
if (_err != TMLIBDEV_OK) { \
DP(("Failed at line %d in file %s. Err = %x\n", __LINE__, __FILE__, _err)); \
return _err; \
}} while (0)
#define TRY_UNSELECT(x) \
do { \
tmLibdevErr_t _err = (x); \
if (_err != TMLIBDEV_OK) { \
DP(("Failed at line %d in file %s. Err = %x\n", __LINE__, __FILE__, _err)); \
iicDirectionUnSelect(vsb1IICDirection); \
return _err; \
}} while (0)
#define VSB1_TUNER_IIC_ADDRESS TD1536_IIC_ADDRESS_0
/**************************** static functions and variables *****************************/
static tmLibdevErr_t dtvVsb1Activate(pcomponent_t comp);
static tmLibdevErr_t dtvVsb1Register(void);
static tmLibdevErr_t dtvVsb1Detect(void);
static tmLibdevErr_t getNumberOfUnits(UInt32 *pNumberOfUnits, Char *searchString);
/* tuner support */
static tmLibdevErr_t dtvVsb1TunerInit(pboardTvTunerParameters_t params);
static tmLibdevErr_t dtvVsb1TunerTerm(void);
static tmLibdevErr_t dtvVsb1TunerConfig(UInt32 command, Pointer value);
static tmLibdevErr_t dtvVsb1TunerSetChannel(ptsaTvTunerChannelParams_t chanParams);
static tmLibdevErr_t dtvVsb1TunerConfigChannel(UInt32 command, Pointer value);
static boardTvTunerConfig_t tunerConfig =
{
"VSB I - TD1536",
dtvVsb1TunerInit,
dtvVsb1TunerTerm,
dtvVsb1TunerConfig,
dtvVsb1TunerSetChannel,
dtvVsb1TunerConfigChannel,
TD1536_SUPPORTED_STEP_SIZES,
TD1536_SUPPORTED_INPUTS,
TD1536_MIN_FREQUENCY,
TD1536_MAX_FREQUENCY,
{0xff, 0xff, 0xff, vaaNone, 0xff}
};
/* digital demodulator support */
static tmLibdevErr_t dtvVsb1DigDemInit(pboardTvDigDemParameters_t params);
static tmLibdevErr_t dtvVsb1DigDemTerm(void);
static tmLibdevErr_t dtvVsb1DigDemConfig(UInt32 command, Pointer value);
static tmLibdevErr_t dtvVsb1DigDemStart(void);
static tmLibdevErr_t dtvVsb1DigDemStop(void);
static tmLibdevErr_t dtvVsb1DigDemGetStatus(tsaTvDigDemStatusMode_t statusMode, ptsaTvDigDemStatus_t status);
static boardTvDigDemConfig_t digDemConfig =
{
"VSB I - TDA9860",
dtvVsb1DigDemInit,
dtvVsb1DigDemTerm,
dtvVsb1DigDemConfig,
dtvVsb1DigDemStart,
dtvVsb1DigDemStop,
dtvVsb1DigDemGetStatus,
TDA8960_SUPPORTED_STANDARDS,
TDA8960_MAX_OFFSET,
TDA8960_NUM_ACQUISITION_MODES,
unit0,
unit1
};
static tsaTvTunerInput_t tunerInput;
static UInt vsb1IICDirection = IIC_DIRECTION_NIM2;
/************************************* functions *****************************************/
static tmLibdevErr_t getNumberOfUnits(UInt32 *pNumberOfUnits, Char *searchString)
{
UInt32 i = 0;
tsaRegFind_t findInfo;
tmLibdevErr_t err;
err = tsaRegFindFirstEntry(searchString, &findInfo);
if (err)
{
*pNumberOfUnits = 0;
return TMLIBDEV_OK;
}
i++;
while (tsaRegFindNextEntry(searchString, &findInfo) == TMLIBDEV_OK)
i++;
*pNumberOfUnits = i;
return TMLIBDEV_OK;
}
/***************************************************************************************/
static tmLibdevErr_t dtvVsb1DigDemInit(pboardTvDigDemParameters_t params)
{
tda8960Param_t tda8960Params;
tmLibdevErr_t err;
tmAssert(params, TMLIBDEV_ERR_NULL_PARAMETER);
err = iicDirectionSelect(vsb1IICDirection);
if (err != TMLIBDEV_OK)
return err;
tda8960Params.iicAddress = TDA8960_IIC_ADDRESS_0;
tda8960Params.standard = params->standard;
err = tda8960Init(0, &tda8960Params);
iicDirectionUnSelect(vsb1IICDirection);
return err;
}
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb1DigDemTerm(void)
{
return TMLIBDEV_OK;
}
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb1DigDemConfig(UInt32 command, Pointer value)
{
tmLibdevErr_t err;
err = iicDirectionSelect(vsb1IICDirection);
if (err != TMLIBDEV_OK)
return err;
switch (command)
{
case TVDIGDEM_CONFIG_GET_OFFSET:
{
Int d;
tmAssert(value, TMLIBDEV_ERR_NULL_PARAMETER);
err = tda8960GetOffset(0, &d);
* (Int *) value = d;
break;
}
case TVDIGDEM_CONFIG_SW_RESET:
err = tda8960Reset(0);
break;
case TVDIGDEM_CONFIG_SET_ACQUISITION_MODE:
tmAssert(value, TMLIBDEV_ERR_NULL_PARAMETER);
err = tda8960SetAcquisitionMode(0, * (Int*) value);
break;
default:
err = TVDIGDEM_ERR_UNSUPPORTED_COMMAND;
}
iicDirectionUnSelect(vsb1IICDirection);
return err;
}
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb1DigDemStart(void)
{
tmLibdevErr_t err;
err = iicDirectionSelect(vsb1IICDirection);
if (err != TMLIBDEV_OK)
return err;
err = tda8960Start(0);
iicDirectionUnSelect(vsb1IICDirection);
return err;
}
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb1DigDemStop(void)
{
return TMLIBDEV_OK;
}
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb1DigDemGetStatus(tsaTvDigDemStatusMode_t statusMode, ptsaTvDigDemStatus_t status)
{
tmLibdevErr_t err;
tmAssert(status, TMLIBDEV_ERR_NULL_PARAMETER);
err = iicDirectionSelect(vsb1IICDirection);
if (err != TMLIBDEV_OK)
return err;
if (statusMode == TV_DIGDEM_STATUS_MODE_BASIC)
err = tda8960GetStatus(0, status);
else if (statusMode == TV_DIGDEM_STATUS_MODE_COMPREHENSIVE)
err = tda8960GetTapsAndStatus(0, status);
else
err = TVDIGDEM_ERR_UNSUPPORTED_STATUS_MODE;
iicDirectionUnSelect(vsb1IICDirection);
return err;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -