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

📄 tmao.c

📁 用于TM1300/PNX1300系列DSP(主要用于视频处理)的设备库的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
    {
        rval = AIO_ERR_UNSUPPORTED_DATA_SUBTYPE;
        goto aoInstanceSetupExit;
    }
    
    if (!(param.output & boardAOConfig->audioAdapters))
    {
        rval = AIO_ERR_UNSUPPORTED_ADAPTER;
        goto aoInstanceSetupExit;
    }
    
    if (param.sRate > boardAOConfig->maxSRate)
    {
        rval = AIO_ERR_SRATE_TOO_HIGH;
        goto aoInstanceSetupExit;
    }
    
    if (param.sRate < boardAOConfig->minSRate)
    {
        rval = AIO_ERR_SRATE_TOO_LOW;
        goto aoInstanceSetupExit;
    }

    
    if (instVars->boardAOConfig->initFunc)
    {
        rval = instVars->boardAOConfig->initFunc(&param);
        if (rval != TMLIBDEV_OK)
            goto aoInstanceSetupExit;
    }
    else
    {
        rval = BOARD_ERR_NULL_FUNCTION;
        goto aoInstanceSetupExit;
    }

    /* clear all interrupt sources to be sure */
    MMIO(mmioBase + AO_CTL_OFFSET) |= AO_ACK_UDR | AO_ACK_HBE | AO_ACK_HBE | AO_ACK2 | AO_ACK1;

    instVars->setup = *pSetup; /* Last possible error past, so copy to
                                * static storage */

    aoSetBASE1M(mmioBase, pSetup->base1);
    aoSetBASE2M(mmioBase, pSetup->base2);

    MMIO(mmioBase + AO_CTL_OFFSET) = (MMIO(mmioBase + AO_CTL_OFFSET) & 
         ~(AO_BUF1_INTEN | AO_BUF2_INTEN | AO_UDR_INTEN | AO_HBE_INTEN))
        | (pSetup->buf1emptyEnable ? AO_BUF1_INTEN : 0)
        | (pSetup->buf2emptyEnable ? AO_BUF2_INTEN : 0)
        | (pSetup->underrunEnable ? AO_UDR_INTEN : 0)
        | (pSetup->hbeEnable ? AO_HBE_INTEN : 0);
 
    if (pSetup->isr)    /* Null means poll - no ISR */
    {
        setup.enabled         = True;
        setup.level_triggered = True;
        setup.handler         = pSetup->isr;
        setup.priority        = pSetup->interruptPriority;
        rval = intInstanceSetup(instVars->boardAOConfig->intNumber, &setup);
        if (rval != TMLIBDEV_OK)
            goto aoInstanceSetupExit;
    }

    instVars->initialized = True;

aoInstanceSetupExit:
    AppModel_resume_scheduling();
    return rval;
}


/**************************************************************************************/
extern tmLibdevErr_t aoClose(Int instance)
{
    paoInstVars_t      instVars = (paoInstVars_t) instance;
    tmLibdevErr_t      rval = TMLIBDEV_OK;

    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

    if (instVars->magic != AO_MAGIC)
        return TMLIBDEV_ERR_NOT_OWNER;
        
    AppModel_suspend_scheduling();

    if (instVars->gpioInstance != 0)
    {
        gpioClose(instVars->gpioInstance);
    }

    /* shutdown driver */
    if (instVars->boardAOConfig->termFunc)
    {
        rval = instVars->boardAOConfig->termFunc();
        if (rval != TMLIBDEV_OK) 
            goto aoCloseExit;
    }
    else
    {
        rval = BOARD_ERR_NULL_FUNCTION;
    }

    /* shut down interupt service, but don't reset */
    MMIO(AO_CTL) &= ~(AO_BUF1_INTEN | AO_BUF2_INTEN | 
                      AO_UDR_INTEN  | AO_HBE_INTEN  | AO_TRANS_ENABLE);

    rval |= intClose(instVars->boardAOConfig->intNumber);
    
    aoCaps.unitCapabilities[instVars->unitName].numCurrentInstances--;
    instVars->magic       = 0;
        
aoCloseExit:
    AppModel_resume_scheduling();
    free(instVars);
    return rval;
}


/**************************************************************************************/
extern tmLibdevErr_t aoStop(Int instance)
{
    paoInstVars_t   instVars = (paoInstVars_t) instance;
    tmLibdevErr_t   rval = TMLIBDEV_OK;
    
    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

    if (instVars->magic != AO_MAGIC)
        return TMLIBDEV_ERR_NOT_OWNER;
        
    if (!instVars->initialized)
    {
        return AIO_ERR_INIT_REQUIRED;
    }
    
    if (instVars->boardAOConfig->stopFunc)
    {
        rval = instVars->boardAOConfig->stopFunc(); 
    }
    else
    {
        rval = BOARD_ERR_NULL_FUNCTION;
    }
    
    return rval;
}


/**************************************************************************************/
extern tmLibdevErr_t aoStart(Int instance)
{
    paoInstVars_t   instVars = (paoInstVars_t) instance;
    tmLibdevErr_t   rval = TMLIBDEV_OK;
    
    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

    if (instVars->magic != AO_MAGIC)
        return TMLIBDEV_ERR_NOT_OWNER;
        
    if (!instVars->initialized)
    {
        return AIO_ERR_INIT_REQUIRED;
    }
    
    if (instVars->boardAOConfig->startFunc)
    {
        rval = instVars->boardAOConfig->startFunc(); 
    }
    else
    {
        rval = BOARD_ERR_NULL_FUNCTION;
    }
    
    return rval;
}


/**************************************************************************************/
extern tmLibdevErr_t aoSetOutput(Int instance, tmAudioAnalogAdapter_t output)
{
    paoInstVars_t   instVars = (paoInstVars_t) instance;
    
    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

    if (instVars->magic != AO_MAGIC)
        return TMLIBDEV_ERR_NOT_OWNER;
        
    if (!instVars->initialized)
    {
        return AIO_ERR_INIT_REQUIRED;
    }
    
    if (instVars->boardAOConfig->setOutput)
    {
        return instVars->boardAOConfig->setOutput(output);
    }
    else
    {
        return BOARD_ERR_NULL_FUNCTION;
    }
}


/**************************************************************************************/
extern tmLibdevErr_t aoGetOutput(Int instance, tmAudioAnalogAdapter_t * output)
{
    paoInstVars_t   instVars = (paoInstVars_t) instance;
    
    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

    if (instVars->magic != AO_MAGIC)
        return TMLIBDEV_ERR_NOT_OWNER;
        
    if (!instVars->initialized)
    {
        return AIO_ERR_INIT_REQUIRED;
    }
    
    if (instVars->boardAOConfig->getOutput)
    {
        return instVars->boardAOConfig->getOutput(output);
    }
    else
    {
        return BOARD_ERR_NULL_FUNCTION;
    }
}


/**************************************************************************************/
extern tmLibdevErr_t aoSetVolume(Int instance, Int lGain, Int rGain)
{
    paoInstVars_t   instVars = (paoInstVars_t) instance;
    
    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

    if (instVars->magic != AO_MAGIC)
        return TMLIBDEV_ERR_NOT_OWNER;
        
    if (!instVars->initialized)
    {
        return AIO_ERR_INIT_REQUIRED;
    }
    
    if (instVars->boardAOConfig->setVolume)
    {
        return instVars->boardAOConfig->setVolume(lGain, rGain);
    }
    else
    {
        return BOARD_ERR_NULL_FUNCTION;
    }
}


/**************************************************************************************/
extern tmLibdevErr_t aoGetVolume(Int instance, Int * lGain, Int * rGain)
{
    paoInstVars_t   instVars = (paoInstVars_t) instance;
    
    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

    if (instVars->magic != AO_MAGIC)
        return TMLIBDEV_ERR_NOT_OWNER;
        
    if (!instVars->initialized)
    {
        return AIO_ERR_INIT_REQUIRED;
    }

    tmAssert(lGain, TMLIBDEV_ERR_NULL_PARAMETER);
    tmAssert(rGain, TMLIBDEV_ERR_NULL_PARAMETER);

    if (instVars->boardAOConfig->getVolume)
    {
        return instVars->boardAOConfig->getVolume(lGain, rGain);
    }
    else
    {
        return BOARD_ERR_NULL_FUNCTION;
    }
}


/**************************************************************************************/
extern tmLibdevErr_t aoSetSampleRate(Int instance, Float sRate)
{
    paoInstVars_t    instVars = (paoInstVars_t) instance;
    boardAOConfig_t *boardAOConfig = instVars->boardAOConfig;
    
    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

    if (instVars->magic != AO_MAGIC)
        return TMLIBDEV_ERR_NOT_OWNER;
        
    if (!instVars->initialized)
    {
        return AIO_ERR_INIT_REQUIRED;
    }

    /* check validity of requested sample rate */
    if (sRate > boardAOConfig->maxSRate)
        return AIO_ERR_SRATE_TOO_HIGH;
    if (sRate < boardAOConfig->minSRate)
        return AIO_ERR_SRATE_TOO_LOW;

    instVars->setup.sRate = sRate;
    if (boardAOConfig->setSRate)
    {
        return boardAOConfig->setSRate(sRate);
    }
    else
    {
        return BOARD_ERR_NULL_FUNCTION;
    }
}


/**************************************************************************************/
extern tmLibdevErr_t aoGetSampleRate(Int instance, Float * sRate)
{
    paoInstVars_t    instVars = (paoInstVars_t) instance;
    
    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

    if (instVars->magic != AO_MAGIC)
        return TMLIBDEV_ERR_NOT_OWNER;
        
    if (!instVars->initialized)
    {
        return AIO_ERR_INIT_REQUIRED;
    }

    tmAssert(sRate, TMLIBDEV_ERR_NULL_PARAMETER);

    if (instVars->boardAOConfig->getSRate)
    {
        return instVars->boardAOConfig->getSRate(sRate);
    }
    else
    {
        return BOARD_ERR_NULL_FUNCTION;
    }
}

/**************************************************************************************/
extern tmLibdevErr_t aoConfig(Int instance, UInt32 subAddr, Pointer value)
{
    paoInstVars_t   instVars = (paoInstVars_t) instance;
    
    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

    if (instVars->magic != AO_MAGIC)
        return TMLIBDEV_ERR_NOT_OWNER;
        
    if (!instVars->initialized)
    {
        return AIO_ERR_INIT_REQUIRED;
    }

    if (instVars->boardAOConfig->configFunc)
    {
        return instVars->boardAOConfig->configFunc(subAddr, value);
    }
    else
    {
        return BOARD_ERR_NULL_FUNCTION;
    }
}

⌨️ 快捷键说明

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