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

📄 dtvvsb1.c

📁 用于TM1300/PNX1300系列DSP(主要用于视频处理)的设备库的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
 *  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 + -