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

📄 dtvvsb2.c

📁 用于TM1300/PNX1300系列DSP(主要用于视频处理)的设备库的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
            break;
        case TVDIGDEM_CONFIG_CORR_START_MEM_FILL:
            err = tda8961CorrStartMemFill(0);
            break;
        case TVDIGDEM_CONFIG_CORR_STOP_MEM_FILL:
            err = tda8961CorrStopMemFill(0);
            break;
        default:
            err = TVDIGDEM_ERR_UNSUPPORTED_COMMAND;
    }

    iicDirectionUnSelect(vsb2IICDirection);

    return err;
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2DigDemStart(void)
{
    tmLibdevErr_t err;

    err = iicDirectionSelect(vsb2IICDirection);
    if (err != TMLIBDEV_OK)
        return err;

    err = tda8961Start(0);

    iicDirectionUnSelect(vsb2IICDirection);

    return err;
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2DigDemStop(void)
{
    return TMLIBDEV_OK;
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2DigDemGetStatus(tsaTvDigDemStatusMode_t statusMode, ptsaTvDigDemStatus_t status)
{
    tmLibdevErr_t err;

    tmAssert(status, TMLIBDEV_ERR_NULL_PARAMETER);

    err = iicDirectionSelect(vsb2IICDirection);
    if (err != TMLIBDEV_OK)
        return err;

    if (statusMode == TV_DIGDEM_STATUS_MODE_BASIC)
        err = tda8961GetStatus(0, status);
    else if (statusMode == TV_DIGDEM_STATUS_MODE_COMPREHENSIVE)
        err = tda8961GetTapsAndStatus(0, status);
    else
        err = TVDIGDEM_ERR_UNSUPPORTED_STATUS_MODE;

    iicDirectionUnSelect(vsb2IICDirection);

    return err;
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2AudDemInit(unitSelect_t unitID, pboardTvAudDemParameters_t params)
{
    tda9851Param_t  t;
    tmLibdevErr_t   err;

    t.audioMode     = params->audioMode;
    t.iicDirection  = vsb2IICDirection;

    err = tda9851Init(unitID, &t);
    if (err != TMLIBDEV_OK)
        return err;

    return TMLIBDEV_OK;
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2AudDemConfig(unitSelect_t unitID, UInt32 command, Pointer Value)
{
    tmLibdevErr_t err;

    switch (command)
    {
    case TVAUDDEM_CONFIG_ENABLE_STEREO:
        err = tda9851SetStereo(unitID, True);
        break;
    case TVAUDDEM_CONFIG_DISABLE_STEREO:
        err = tda9851SetStereo(unitID, False);
        break;
    default:
        err = TVAUDDEM_ERR_UNSUPPORTED_CONFIG_COMMAND;
        break;
    }
    return err;
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2TunerInit(pboardTvTunerParameters_t params)
{
    td1536Param_t tunerParams;
    tmLibdevErr_t err;

    err = iicDirectionSelect(vsb2IICDirection);
    if (err != TMLIBDEV_OK)
        return err;

    switch (params->input)
    {
    case ttiAntennaNTSC:
    case ttiCableNTSC:
        iicPortA = 0x5a;
        tunerParams.useInternalAGC = False;
        break;
    case ttiAntennaATSC:
    case ttiCableATSC:
        iicPortA = 0x06;
        tunerParams.useInternalAGC = True;
        break;
    default:
        err = -1;
        break;
    }

    err = iicWriteReg(CATALINA_IIC_EXPANDER_A, -1, iicPortA);
    if (err != TMLIBDEV_OK)
        goto dtvVsb2TunerInitExit;

    tunerParams.iicAddress     = VSB2_TUNER_IIC_ADDRESS;
    tunerParams.iFreq          = 44000000;
    tunerParams.input          = params->input;
    tunerInput                 = params->input;

    if (params->stepSize != TD1536_SUPPORTED_STEP_SIZES)
    {
        err = TVTUNER_ERR_UNSUPPORTED_STEP_SIZE;
        goto dtvVsb2TunerInitExit;
    }

    err = td1536Init(0, &tunerParams); 
    if (err != TMLIBDEV_OK)
        goto dtvVsb2TunerInitExit;

dtvVsb2TunerInitExit:

    iicDirectionUnSelect(vsb2IICDirection);

    return err;
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2TunerTerm(void)
{
    return TMLIBDEV_OK;
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2TunerConfig(UInt32 command, Pointer value)
{
    tmLibdevErr_t err = TMLIBDEV_OK;

    err = iicDirectionSelect(vsb2IICDirection);
    if (err != TMLIBDEV_OK)
        return err;

    switch (command)
    {
    case TVTUNER_CONFIG_SET_INPUT:
        err = td1536SetInput(0, *((tsaTvTunerInput_t *) value));
        if (err != TMLIBDEV_OK)
            goto dtvVsb2TunerConfigExit;
        tunerInput = *((tsaTvTunerInput_t *) value);
        break;
    case TVTUNER_CONFIG_GET_INPUT:
        *((tsaTvTunerInput_t *) value) = tunerInput;
        break;
    case TVTUNER_CONFIG_GET_LOCK:
        tmAssert(value, TMLIBDEV_ERR_NULL_PARAMETER);
        err = td1536GetLock(0, (Bool *) value);
        if (err != TMLIBDEV_OK)
            goto dtvVsb2TunerConfigExit;
        break;
    default:
        err = TVTUNER_ERR_UNSUPPORTED_CONFIG_COMMAND;
        goto dtvVsb2TunerConfigExit;
    }

dtvVsb2TunerConfigExit:

    iicDirectionUnSelect(vsb2IICDirection);

    return err;
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2TunerSetChannel(ptsaTvTunerChannelParams_t chanParams)
{
    tmLibdevErr_t err = TMLIBDEV_OK;

    err = iicDirectionSelect(vsb2IICDirection);
    if (err != TMLIBDEV_OK)
        return err;

    if ((tunerInput == ttiAntennaNTSC) || (tunerInput == ttiCableNTSC))
    {
        err = tda8961ViInit(0);
        err = tda8980ViInit(&dtvVsb2Vi.vDec, 0);
    }
    else
    {
        err = tda8961DigDemInit(0);
        err = tda8980DigDemInit(0);
    }

    if (err != TMLIBDEV_OK)
        goto dtvVsb2TunerSetChannelExit;

    err = td1536SetFrequency(0, chanParams);

dtvVsb2TunerSetChannelExit:
    iicDirectionUnSelect(vsb2IICDirection);

    return err;
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2TunerConfigChannel(UInt32 command, Pointer value)
{
    tmLibdevErr_t err = TMLIBDEV_OK;

    err = iicDirectionSelect(vsb2IICDirection);
    if (err != TMLIBDEV_OK)
        return err;

    switch (command)
    {
    case TVTUNER_CHAN_CONFIG_TWEAK_UP:
        err = td1536Tweak(0, td1536TweakUp);
        break;
    case TVTUNER_CHAN_CONFIG_TWEAK_DOWN:
        err = td1536Tweak(0, td1536TweakDown);
        break;
    case TVTUNER_CHAN_CONFIG_CENTER:
        err = td1536Tweak(0, td1536TweakReset);
        break;
    case TVTUNER_CHAN_CONFIG_GET_CHAN_PARAMETERS:
        tmAssert(value, TMLIBDEV_ERR_NULL_PARAMETER);
        err = td1536GetChanParams(0, (ptsaTvTunerChannelParams_t) value);
        break;
    default:
        err = TVTUNER_ERR_UNSUPPORTED_CONFIG_COMMAND;
        break;
    }

    iicDirectionUnSelect(vsb2IICDirection);

    return err;
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2ViInit(pboardVIParam_t params)
{
    tmLibdevErr_t  err;

    tmAssert(params, TMLIBDEV_ERR_NULL_PARAMETER);

    err = iicDirectionSelect(vsb2IICDirection);
    if (err != TMLIBDEV_OK)
        return err;

    switch (params->videoStandard)
    {
    case vasNTSC:
        err = tda8980ViInit(&dtvVsb2Vi.vDec, 0);
        if (err != TMLIBDEV_OK)
            goto dtvVsb2ViInitExit;

        err = tda8961ViInit(0);
        if (err != TMLIBDEV_OK)
            goto dtvVsb2ViInitExit;

        iicPortA = 0x5a;

        break;
    case vasNone:
        /* initialize digital demodulator */
        err = tda8980DigDemInit(0);
        if (err != TMLIBDEV_OK)
            goto dtvVsb2ViInitExit;

        err = tda8961DigDemInit(0);
        if (err != TMLIBDEV_OK)
            goto dtvVsb2ViInitExit;

        iicPortA = 0x06;

        break;
    default:
        err = VI_ERR_STANDARD_NOT_SUPPORTED;
        break;
    }

    err = iicWriteReg(CATALINA_IIC_EXPANDER_A, -1, iicPortA);
    if (err != TMLIBDEV_OK)
        goto dtvVsb2ViInitExit;

    dtvVsb2Vi.vDec.curVideoStandard = params->videoStandard;

dtvVsb2ViInitExit:
    iicDirectionUnSelect(vsb2IICDirection);
    return err;
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2ViConfigure(UInt32 subaddr, UInt32 value)
{
    return TMLIBDEV_OK;
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2ViSetAnalogInput(pboardVIDec_t pVD, tmVideoAnalogAdapter_t adapter, UInt adapterInstance)
{
    UInt            mode;
    tmLibdevErr_t   err;

    err = iicDirectionSelect(pVD->iicDirection);
    if (err != TMLIBDEV_OK)
        return err;

    err = mapAdapter2Mode(pVD, adapter, adapterInstance, &mode);
    if (err != TMLIBDEV_OK)
        goto dtvVsb2ViSetAnalogInputExit;

    err = tda8980ViSetAnalogInput(pVD, mode);

dtvVsb2ViSetAnalogInputExit:
    iicDirectionUnSelect(pVD->iicDirection);

    return err;
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2ViGetAnalogInput(pboardVIDec_t pVD, tmVideoAnalogAdapter_t *adapter, UInt *adapterInstance)
{
    return TMLIBDEV_OK;
}

/***********************************************************************************************
 *
 *  AI 2 support (used on TM2)
 *
 ***********************************************************************************************/

static UInt   dtvVsb2Ai2Input;
static UInt   dtvVsb2Ai2AudioTypeFormat;       
static UInt   dtvVsb2Ai2AudioSbtypeFormat;
static Float  dtvVsb2Ai2SRate;
static Int    dtvVsb2Ai2Size;

/* function called in aiInstanceSetup():  On success, must leave
 * the audio input system "stopped" but otherwise ready for action.
 * MMIO setup will be done, as well as other board or codec specific 
 * actions like setting IIC control bits or initializing codec registers.
 */
static tmLibdevErr_t dtvVsb2AI2Init(boardAIParam_t *param)
{
    UInt                iicd;
    Float               val;
    pprocCapabilities_t procCap;
    Int                 err = TMLIBDEV_OK;
    UInt32              ID;
    Char               *boardName;

    err = tsaBoardGetBoard(&ID, &boardName);
    if (err)
        return err;

    /* get the clock frequency of the TriMedia CPU */       
    err = procGetCapabilities(&procCap);
    if (err) return err;
    
    CPUClock = (Float) procCap->cpuClockFrequency;

    err = iicDirectionSelect(vsb2IICDirection);
    if (err != TMLIBDEV_OK)
        return err;

    err = tda8980AiInit(0);
    if (err != TMLIBDEV_OK)
        goto dtvVsb2AI2InitExit;

    aiRESETM(aiMMIOBase);
 
    if (param->input == aaaNone) 
    {
        param->input = aaaLineInput; /* line input is the default */
    }
    
    switch (param->input)
    {
    case aaaAuxInput1: /* tuner audio input */
        /* set input */
        iicPortC &= 0xf3;
        iicPortC |= 0x04;
        dtvVsb2Ai2Input = aaaAuxInput1;
        break;
    case aaaLineInput: /* line input */
        /* set input */
        iicPortC &= 0xf3;
        dtvVsb2Ai2Input = aaaLineInput;
        break;
    default:
        err = AIO_ERR_UNSUPPORTED_INPUT;
        goto dtvVsb2AI2InitExit;
    }
    /* write IIC port C */
    err = iicWriteReg(CATALINA_IIC_EXPANDER_C, -1, iicPortC);
    if (err != TMLIBDEV_OK)
        goto dtvVsb2AI2InitExit;

    /* set sample rate */
    err = tda8980AiSetSRate(0, param->sRate);
    if (err != TMLIBDEV_OK)
        goto dtvVsb2AI2InitExit;

⌨️ 快捷键说明

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