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

📄 tmai.c.bak

📁 用于TM1300/PNX1300系列DSP(主要用于视频处理)的设备库的源码
💻 BAK
📖 第 1 页 / 共 2 页
字号:
        rval = AIO_ERR_UNSUPPORTED_DATA_SUBTYPE;
        goto aiInstanceSetupExit;
    }

    if (!(param.input & boardAIConfig->audioAdapters))
    {
        rval = AIO_ERR_UNSUPPORTED_ADAPTER;
        goto aiInstanceSetupExit;
    }

    if (param.sRate > boardAIConfig->maxSRate)
    {
        rval = AIO_ERR_SRATE_TOO_HIGH;
        goto aiInstanceSetupExit;
    }
    
    if (param.sRate < boardAIConfig->minSRate)
    {
        rval = AIO_ERR_SRATE_TOO_LOW;
        goto aiInstanceSetupExit;
    }

    if (boardAIConfig->initFunc)
    {
        rval = boardAIConfig->initFunc(&param);
        if (rval != TMLIBDEV_OK)
            goto aiInstanceSetupExit;
    }
    else
    {
        rval = BOARD_ERR_NULL_FUNCTION;
        goto aiInstanceSetupExit;
    }

    /* clear all interrupt sources to be sure */
    MMIO(mmioBase + AI_CTL_OFFSET) |= AI_ACK_OVR | AI_ACK_HBE | AI_ACK_HBE | AI_ACK2 | AI_ACK1;

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

    aiSetBASE1M(mmioBase, pSetup->base1);
    aiSetBASE2M(mmioBase, pSetup->base2);

    /* enable interrupt sources as requested */
    MMIO(mmioBase + AI_CTL_OFFSET) = (MMIO(mmioBase + AI_CTL_OFFSET) &
       ~(AI_BUF1_INTEN | AI_BUF2_INTEN | AI_OVR_INTEN | AI_HBE_INTEN))
        | (pSetup->buf1fullEnable ? AI_BUF1_INTEN : 0)
        | (pSetup->buf2fullEnable ? AI_BUF2_INTEN : 0)
        | (pSetup->overrunEnable ? AI_OVR_INTEN : 0)
        | (pSetup->hbeEnable ? AI_HBE_INTEN : 0);

    if (pSetup->isr)            /* Null means poll - no ISR */
    {
        setup.enabled         = True;   /* in case we changed from Null ISR */
        setup.level_triggered = True;
        setup.handler         = pSetup->isr;
        setup.priority        = pSetup->interruptPriority;
        rval = intInstanceSetup(boardAIConfig->intNumber, &setup);
        if (rval != TMLIBDEV_OK)
            goto aiInstanceSetupExit;
    }
    
    instVars->initialized = True;
printf("tmAI.c : aiInstanceSetup\n");

aiInstanceSetupExit:
    AppModel_resume_scheduling();
    return rval;
}


/**************************************************************************************/
extern tmLibdevErr_t aiClose(Int instance)
{
    paiInstVars_t      instVars      = (paiInstVars_t) instance;
    tmLibdevErr_t      rval          = TMLIBDEV_OK;
    boardAIConfig_t   *boardAIConfig = instVars->boardAIConfig;
    UInt32             mmioBase      = boardAIConfig->mmioBase;
    
    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

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

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

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

    /* shut down interupt service, but don't reset */
    MMIO(mmioBase + AI_CTL_OFFSET) &= ~(AI_BUF1_INTEN | AI_BUF2_INTEN | 
                                        AI_OVR_INTEN  | AI_HBE_INTEN  | AI_CAP_ENABLE);
    
    rval |= intClose(boardAIConfig->intNumber);
    
    /* FIXME. Potential problem. See remark in tmAO.c L320 */
    aiCaps.unitCapabilities[instVars->unitIndex].numCurrentInstances--;
    instVars->magic       = 0;
        
aiCloseExit:
    AppModel_resume_scheduling();
    free(instVars);
    return rval;
}


/**************************************************************************************/
extern tmLibdevErr_t aiStop(Int instance)
{
    paiInstVars_t    instVars = (paiInstVars_t) instance;
    tmLibdevErr_t    rval = TMLIBDEV_OK;
    boardAIConfig_t *boardAIConfig = instVars->boardAIConfig;
    
    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

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


/**************************************************************************************/
extern tmLibdevErr_t aiStart(Int instance)
{
    paiInstVars_t    instVars = (paiInstVars_t) instance;
    tmLibdevErr_t    rval = TMLIBDEV_OK;
    boardAIConfig_t *boardAIConfig = instVars->boardAIConfig;

    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);


printf("tmAI.c: aiStart\n");
    if (instVars->magic != AI_MAGIC)
        return TMLIBDEV_ERR_NOT_OWNER;
        
    if (!instVars->initialized)
    {
        return AIO_ERR_INIT_REQUIRED;
    }
    
    if (boardAIConfig->startFunc)
    {
        rval = boardAIConfig->startFunc(); 
    }
    else
    {
        rval = BOARD_ERR_NULL_FUNCTION;
    }
    
    return rval;
}


/**************************************************************************************/
extern tmLibdevErr_t aiSetInput(Int instance, tmAudioAnalogAdapter_t input)
{
    paiInstVars_t    instVars = (paiInstVars_t) instance;
    boardAIConfig_t *boardAIConfig = instVars->boardAIConfig;
    
    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

    if (instVars->magic != AI_MAGIC)
        return TMLIBDEV_ERR_NOT_OWNER;
        
    if (!instVars->initialized)
    {
        return AIO_ERR_INIT_REQUIRED;
    }
    
    if (boardAIConfig->setInput)
    {
        return boardAIConfig->setInput(input);
    }
    else
    {
        return BOARD_ERR_NULL_FUNCTION;
    }
}


/**************************************************************************************/
extern tmLibdevErr_t aiGetInput(Int instance, tmAudioAnalogAdapter_t * input)
{
    paiInstVars_t   instVars = (paiInstVars_t) instance;
    boardAIConfig_t *boardAIConfig = instVars->boardAIConfig;

    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

    if (instVars->magic != AI_MAGIC)
        return TMLIBDEV_ERR_NOT_OWNER;
        
    if (!instVars->initialized)
    {
        return AIO_ERR_INIT_REQUIRED;
    }
    
    if (boardAIConfig->getInput)
    {
        return boardAIConfig->getInput(input);
    }
    else
    {
        return BOARD_ERR_NULL_FUNCTION;
    }
}


/**************************************************************************************/
extern tmLibdevErr_t aiSetVolume(Int instance, Int lGain, Int rGain)
{
    paiInstVars_t    instVars = (paiInstVars_t) instance;
    boardAIConfig_t *boardAIConfig = instVars->boardAIConfig;

    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

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


/**************************************************************************************/
extern tmLibdevErr_t aiGetVolume(Int instance, Int * lGain, Int * rGain)
{
    paiInstVars_t    instVars = (paiInstVars_t) instance;
    boardAIConfig_t *boardAIConfig = instVars->boardAIConfig;
    
    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

    if (instVars->magic != AI_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 (boardAIConfig->getVolume)
    {
        return boardAIConfig->getVolume(lGain, rGain);
    }
    else
    {
        return BOARD_ERR_NULL_FUNCTION;
    }
}


/**************************************************************************************/
extern tmLibdevErr_t aiSetSampleRate(Int instance, Float sRate)
{
    paiInstVars_t    instVars = (paiInstVars_t) instance;
    boardAIConfig_t *boardAIConfig = instVars->boardAIConfig;

    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

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

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

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


/**************************************************************************************/
extern tmLibdevErr_t aiGetSampleRate(Int instance, Float * sRate)
{
    paiInstVars_t   instVars = (paiInstVars_t) instance;
    boardAIConfig_t *boardAIConfig = instVars->boardAIConfig;

    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

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

    tmAssert(sRate, TMLIBDEV_ERR_NULL_PARAMETER);

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


/**************************************************************************************/
extern tmLibdevErr_t aiGetFormat(Int instance, tmAudioFormat_t * format)
{
    paiInstVars_t   instVars = (paiInstVars_t) instance;
    boardAIConfig_t *boardAIConfig = instVars->boardAIConfig;
    
    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

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

    tmAssert(format != Null, TMLIBDEV_ERR_NULL_PARAMETER);
  
    if (boardAIConfig->getFormat)
    {
        return boardAIConfig->getFormat(format);
    }
    else
    {
        return BOARD_ERR_NULL_FUNCTION;
    }
}


/**************************************************************************************/
extern tmLibdevErr_t aiConfig(Int instance, UInt32 subAddr, Pointer value)
{
    paiInstVars_t   instVars = (paiInstVars_t) instance;
    boardAIConfig_t *boardAIConfig = instVars->boardAIConfig;
    
    tmAssert(instance, TMLIBDEV_ERR_NOT_OWNER);

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

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


⌨️ 快捷键说明

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