📄 tmai.c.bak
字号:
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(¶m);
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 + -