diff --git a/pasdk/test_dsp/framework/audioStreamInpProcNewIO.c b/pasdk/test_dsp/framework/audioStreamInpProcNewIO.c
index 5460aeefc307996d3dd4d82ae946d7624387b7d2..7aec882afcf7ddb68b12db930d0c509e88dc515c 100644 (file)
#include "ioPhy.h"
#include "ioData.h"
+#include <pa_i13_evmk2g_io_a.h>
#define STRIDE_WORST_CASE 32 // 4-byte (32-bit) word, 2 slots, 4 serializers
@@ -109,10 +110,11 @@ extern Void taskAsipFxnInit(const PAF_ASIT_Params *pP,const PAF_ASIT_Patchs *pQ)
// avoid including sap_d10.h, which would cause symbol redefinition
// warning (MCASP_PFUNC_XXX)
-extern XDAS_Int32 D10_init(void * pD10Params);
-
+//extern XDAS_Int32 D10_init(void * pD10Params);
+extern XDAS_Int32 D10_initClkMux(void *pD10Params);
extern XDAS_Int32 D10_RxControl(const void *pD10RxParams,
XDAS_Int32 code, XDAS_Int32 arg);
+extern Aud_STATUS D10_initHDMI(void);
/*
* Functions only used in this file
void asitPhyTransferComplete(PAF_AST_IoInp * pInpIo);
void asitPhyTransferStart(PAF_AST_IoInp *pInpIo);
Int asitRecfgPhyXfer(PAF_AST_IoInp *pInp, size_t xferSize);
-Int asitSelectDevices(const PAF_ASIT_Patchs *pQ, PAF_AST_Config *pAstCfg, PAF_AST_IoInp *pInp);
+
+// Select Input devices
+Int asitSelectDevices(
+ const PAF_ASIT_Patchs *pQ,
+ PAF_AST_Config *pAstCfg,
+ PAF_AST_IoInp *pInp
+);
+
Int asitUpdateInputStatus(const void *pRxParams, PAF_InpBufStatus *pStatus,
PAF_InpBufConfig *pInpBuf);
// Input data is ready - perform source detection.
// New state will be decided inside the function
asitErr = asitSourceDetection(pP, pQ, pAsitCfg);
+
+ if(asitErr == ASIT_AUTODET_TIME_OUT) {
+ // Should restart if new interface is selected.
+ TRACE_VERBOSE0("TaskAsip: auto-detection time out.");
+ }
}
else {
//Error checking & debug
asitErr = asitInputDataProcess(pInp, &autoDetStatus);
if(asitErr != ASIT_NO_ERR) {
// Even though there is error, still need to start next transfer to
- // maintain McASP transfer.
+ // maintain McASP transfer, before returning error.
asitPhyTransferStart(pInp);
return asitErr;
// Mark input data read complete
ioDataReadComplete(pInp->hIoData);
+ if(autoDetStatus.syncTimeOut) {
+ return ASIT_AUTODET_TIME_OUT;
+ }
// Check if bitstream or PCM is detected
- if( autoDetStatus.syncState == IODATA_SYNC_BITSTREAM
+ else if( autoDetStatus.syncState == IODATA_SYNC_BITSTREAM
|| autoDetStatus.syncState == IODATA_SYNC_PCM) {
// Decide input source and inform decoder
asitErr = asitDecideSource(pAstCfg, pInp, &autoDetStatus);
if(autoDetStatus.syncState == IODATA_SYNC_BITSTREAM) {
// Input is bit stream: go to decoding
pInp->asipState = ASIT_DECODE_PROCESSING;
+ TRACE_VERBOSE0("Bit stream detected. Go to decoding. ");
}
else {
// Input is PCM: stop swapping data
// always point to PCM data from 1st I2S (out of 4 for HDMI 4xI2S)
ioBuffAdjustDelay(pInp->hIoBuff, pInp->phyXferSize);
+ // Mute decoder output during PCM transition
+ pAstCfg->xInp[zMD].inpBufConfig.deliverZeros = TRUE;
+
// Go to transition state to switch to PCM
pInp->asipState = ASIT_PCM_TRANSITION;
+ TRACE_VERBOSE0("PCM stream detected. Go to PCM transition. ");
}
}
}
+ else {
+ // SYNC search ongoing, no action is needed
+ }
// Start next transfer
asitPhyTransferStart(pInp);
pInp->pcmSwitchHangOver--;
if(pInp->pcmSwitchHangOver == 0) {
pInp->asipState = ASIT_DECODE_PROCESSING;
+
+ // Unmute decoder output after PCM transition
+ pAsitCfg->pAstCfg->xInp[zMD].inpBufConfig.deliverZeros = FALSE;
}
else {
; // stay in this state
// Inform decoder to complete the decoding of previous frame - is this good?
pInp->sourceSelect = PAF_SOURCE_NONE;
- pInp->numFrameReceived = 0; // for debugging
+ pInp->numFrameReceived = 0; // for debugging
+ pInp->numPcmFrameReceived = 0; // for debugging
TRACE_TERSE0("asitDecodeProcessing: SYNC lost.");
#ifdef DEBUG_SKIP_DECODING
#endif
}
else {
- pInp->numFrameReceived += 1; // for debugging
+ if(autoDetStatus.syncState == IODATA_SYNC_PCM) {
+ pInp->numPcmFrameReceived += 1; // for debugging
+ }
+ else {
+ pInp->numFrameReceived += 1; // for debugging
+ }
// Communicate input stream information to decoder through input
- // buffer configuration
- asitUpdateInpBufConfig(pAsitCfg->pAstCfg, pInp);
+ // buffer configuration -- this was moved inside decDecodeFsm
+ //asitUpdateInpBufConfig(pAsitCfg->pAstCfg, pInp);
// Start next transfer
asitPhyTransferStart(pInp);
else {
// Inform decoder to complete the decoding of previous frame - is this good?
pInp->sourceSelect = PAF_SOURCE_NONE;
- pInp->numFrameReceived = 0; // for debugging
+ pInp->numFrameReceived = 0; // for debugging
+ pInp->numPcmFrameReceived = 0; // for debugging
TRACE_TERSE1("asitDecodeProcessing: asitInputDataProcess error: %d", asitErr);
#ifdef DEBUG_SKIP_DECODING
ioDataParam_t ioDataCfg;
ioPhyCtl_t ioPhyCtl;
- //pInpIo->phyXferSize = INPUT_FRAME_SIZE_DEF;
- pInpIo->phyXferSize = pInpIo->stride * NUM_CYCLE_PER_FRAME_DEF * WORD_SIZE_BITSTREAM;
-
- if(pInpIo->firstTimeInit) {
- TRACE_VERBOSE0("Initialize I/O BUFF and I/O PHY.");
- ioBuffParams.base = pInpBuf->inpBufConfig.base.pVoid;
- ioBuffParams.size = pInpBuf->inpBufConfig.allocation / STRIDE_WORST_CASE
- * STRIDE_WORST_CASE;
- ioBuffParams.sync = IOBUFF_WRITE_SYNC;
- ioBuffParams.nominalDelay = INPUT_FRAME_SIZE_DEF;
- if(ioBuffInit(pInpIo->hIoBuff, &ioBuffParams) != IOBUFF_NOERR) {
- return (ASIT_ERR_IOBUFF_INIT); // to remove magic number
- }
+ if (pInpIo->hMcaspChan != NULL)
+ {
+ //pInpIo->phyXferSize = INPUT_FRAME_SIZE_DEF;
+ pInpIo->phyXferSize = pInpIo->stride * NUM_CYCLE_PER_FRAME_DEF * WORD_SIZE_BITSTREAM;
+
+ if (pInpIo->firstTimeInit) {
+ TRACE_VERBOSE0("Initialize I/O BUFF and I/O PHY.");
+ ioBuffParams.base = pInpBuf->inpBufConfig.base.pVoid;
+ ioBuffParams.size = pInpBuf->inpBufConfig.allocation / STRIDE_WORST_CASE
+ * STRIDE_WORST_CASE;
+ ioBuffParams.sync = IOBUFF_WRITE_SYNC;
+ ioBuffParams.nominalDelay = pInpIo->phyXferSize;
+ if (ioBuffInit(pInpIo->hIoBuff, &ioBuffParams) != IOBUFF_NOERR) {
+ return (ASIT_ERR_IOBUFF_INIT); // to remove magic number
+ }
- ioPhyParams.ioBuffHandle = pInpIo->hIoBuff;
- ioPhyParams.xferFrameSize = pInpIo->phyXferSize;
- ioPhyParams.mcaspChanHandle = pInpIo->hMcaspChan;
- ioPhyParams.ioBuffOp = IOPHY_IOBUFFOP_WRITE;
- if(ioPhyInit(pInpIo->hIoPhy, &ioPhyParams) != IOPHY_NOERR) {
- return (ASIT_ERR_IOPYH_INIT); // to remove magic number
+ ioPhyParams.ioBuffHandle = pInpIo->hIoBuff;
+ ioPhyParams.xferFrameSize = pInpIo->phyXferSize;
+ ioPhyParams.mcaspChanHandle = pInpIo->hMcaspChan;
+ ioPhyParams.ioBuffOp = IOPHY_IOBUFFOP_WRITE;
+ if (ioPhyInit(pInpIo->hIoPhy, &ioPhyParams) != IOPHY_NOERR) {
+ return (ASIT_ERR_IOPHY_INIT); // to remove magic number
+ }
+
+ pInpIo->numPrimeXfers = NUM_PRIME_XFERS;
}
- pInpIo->numPrimeXfers = NUM_PRIME_XFERS;
- }
+ /* Reinitialize I/O DATA every time when ASIT restarts */
+ TRACE_VERBOSE0("Initialize I/O DATA.");
+ ioDataCfg.ioBuffHandle = pInpIo->hIoBuff;
+ ioDataCfg.unknownSourceTimeOut = pInpBuf->inpBufConfig.pBufStatus->unknownTimeout;
+ ioDataCfg.frameLengthsIEC = (uint_least16_t *)&iecFrameLength[0];
+ ioDataCfg.frameLengthPCM = pInpIo->stride * NUM_CYCLE_PER_FRAME_DEF;
+ ioDataCfg.frameLengthDef = pInpIo->stride * NUM_CYCLE_PER_FRAME_DEF;
+ ioDataCfg.ibMode = pInpBuf->inpBufConfig.pBufStatus->mode;
+ ioDataCfg.zeroRunRestart = pInpBuf->inpBufConfig.pBufStatus->zeroRunRestart;
+ ioDataCfg.zeroRunTrigger = pInpBuf->inpBufConfig.pBufStatus->zeroRunTrigger;
+
+ if (ioDataInit(pInpIo->hIoData, &ioDataCfg) != IODATA_NO_ERR) {
+ return (ASIT_ERR_IODATA_INIT); // to remove magic number
+ }
- /* Reinitialize I/O DATA every time when ASIT restarts */
- TRACE_VERBOSE0("Initialize I/O DATA.");
- ioDataCfg.ioBuffHandle = pInpIo->hIoBuff;
- ioDataCfg.unknownSourceTimeOut = pInpBuf->inpBufConfig.pBufStatus->unknownTimeout;
- ioDataCfg.frameLengthsIEC = (uint_least16_t *)&iecFrameLength[0];
- ioDataCfg.frameLengthPCM = INPUT_FRAME_SIZE_PCM / WORD_SIZE_PCM;
- ioDataCfg.frameLengthDef = INPUT_FRAME_SIZE_DEF / WORD_SIZE_BITSTREAM;
- ioDataCfg.ibMode = pInpBuf->inpBufConfig.pBufStatus->mode;
- ioDataCfg.zeroRunRestart = pInpBuf->inpBufConfig.pBufStatus->zeroRunRestart;
- ioDataCfg.zeroRunTrigger = pInpBuf->inpBufConfig.pBufStatus->zeroRunTrigger;
-
- if(ioDataInit(pInpIo->hIoData, &ioDataCfg) != IODATA_NO_ERR) {
- return (ASIT_ERR_IODATA_INIT); // to remove magic number
- }
+ if (pInpIo->firstTimeInit) {
+ /* Initialize I/O BUFF and I/O PHY only when input interface changes. */
+ TRACE_VERBOSE0("Prime I/O PHY.");
- if(pInpIo->firstTimeInit) {
- /* Initialize I/O BUFF and I/O PHY only when input interface changes. */
- TRACE_VERBOSE0("Prime I/O PHY.");
+ // Start I/O physical layer by priming McASP LLD for input
+ asitIoPhyPrime(pInpIo);
- // Start I/O physical layer by priming McASP LLD for input
- asitIoPhyPrime(pInpIo);
+ pInpIo->firstTimeInit = FALSE;
+ }
+ else {
+ // Reconfigure I/O PHY transfer size
+ ioPhyCtl.code = IOPHY_CTL_FRAME_SIZE;
+ ioPhyCtl.params.xferFrameSize = pInpIo->phyXferSize;
+ ioPhyControl(pInpIo->hIoPhy, &ioPhyCtl);
+ #if 0
+ // If previous stream before reset was PCM, reconfigure McASP LLD to receive 16-bit packed bits
+ if (!pInpIo->swapData) {
+ Int mcaspErr;
+ mcaspErr = mcaspRecfgWordWidth(pInpIo->hMcaspChan, Mcasp_WordLength_16);
+ if(mcaspErr != Aud_EOK) {
+ return ASIT_ERR_MCASP_CFG;
+ }
- pInpIo->firstTimeInit = FALSE;
- }
- else {
- // Reconfigure I/O PHY transfer size
- ioPhyCtl.code = IOPHY_CTL_FRAME_SIZE;
- ioPhyCtl.params.xferFrameSize = pInpIo->phyXferSize;
- ioPhyControl(pInpIo->hIoPhy, &ioPhyCtl);
-#if 0
- // If previous stream before reset was PCM, reconfigure McASP LLD to receive 16-bit packed bits
- if(!pInpIo->swapData) {
- Int mcaspErr;
- mcaspErr = mcaspRecfgWordWidth(pInpIo->hMcaspChan, Mcasp_WordLength_16);
- if(mcaspErr != Aud_EOK) {
- return ASIT_ERR_MCASP_CFG;
+ // Start swapping data
+ pInpIo->swapData = TRUE;
+ TRACE_VERBOSE0("Reconfigure McASP word length and start swapping data.");
}
-
- // Start swapping data
- pInpIo->swapData = TRUE;
- TRACE_VERBOSE0("Reconfigure McASP word length and start swapping data.");
+ #endif
+ // Start PHY transfer
+ TRACE_VERBOSE0("Start I/O PHY transfer.");
+ asitPhyTransferStart(pInpIo);
}
-#endif
- // Start PHY transfer
- TRACE_VERBOSE0("Start I/O PHY transfer.");
- asitPhyTransferStart(pInpIo);
}
return 0;
// pInp->swapData = TRUE;
pInp->pcmSwitchHangOver = INPUT_SWITCH_HANGOVER;
pDec->initDone = FALSE;
- pInp->numFrameReceived = 0;
+ pInp->numFrameReceived = 0; // for debugging
+ pInp->numPcmFrameReceived = 0; // for debugging
}
/*======================================================================================
if(mcasp_packet->arg == IOPHY_XFER_FINAL) {
//Semaphore_post(asipSemRx);
Event_post(gAsitEvtHandle, ASIT_EVTMSK_INPDATA);
+ //Log_info0("asipMcaspCallback: final packet - event posted.\n");
} else {
+ //Log_info0("asipMcaspCallback: intermediate packet.\n");
; // intermediate packet due to buffer wrapping around
}
}
System_abort("\nMcASP for input overruns! %d!\n");
}
else {
+ //TRACE_VERBOSE0("asitPhyTransferStart: submit a transfer");
ioPhyErr = ioPhyXferSubmit(pInpIo->hIoPhy);
//if(ioPhyXferSubmit(pInpIo->hIoPhy)==IOPHY_ERR_BUFF_OVERFLOW) {
if(ioPhyErr!=IOPHY_NOERR){
}
}
+// Indicates whether Input has been selected
Int d10Initialized = 0;
+
//extern Aud_STATUS mcaspAudioConfig(void);
-extern void McaspDevice_init(void);
+//extern void McaspDevice_init(void);
/*======================================================================================
* This function initializes HW interface and selects the right device for input
*====================================================================================*/
-Int asitSelectDevices(const PAF_ASIT_Patchs *pQ, PAF_AST_Config *pAstCfg, PAF_AST_IoInp *pInp)
+Int asitSelectDevices(
+ const PAF_ASIT_Patchs *pQ,
+ PAF_AST_Config *pAstCfg,
+ PAF_AST_IoInp *pInp
+)
{
- Aud_STATUS status;
- mcaspLLDconfig *lldCfg;
+ Int32 status;
+ Aud_STATUS audStatus;
+ const PAF_SIO_Params *pInPrms;
+ mcaspLLDconfig *pLldCfg;
+ mcaspLLDconfig *pReqLldCfg;
Ptr mcaspChanHandle;
- Int zMD, interface;
+ Int zMD;
+ Int interface;
+ const PAF_SIO_Params *pD10Params;
+ UInt postedEvents;
zMD = pAstCfg->masterDec;
-
+
interface = pAstCfg->xInp[zMD].inpBufStatus.sioSelect; // obtain SIO select for input
+
+ if (interface >= 0)
+ {
+ // Positive value for interface: new Input SIO update request has been received via alpha command.
+ // Negative value for interface: no new Input SIO update request has been received,
+ // previous requests have been processed.
+
+ // check for valid index into device array
+ if (interface >= pQ->devinp->n) // DEVINP_N
+ {
+ interface = 0; // treat as device InNone
+ }
+
+ //
+ // Deactivate currently active interface
+ //
+ if (pInp->hMcaspChan != NULL) // non-NULL McASP LLD channel handle indicates there's an active interface
+ {
+ d10Initialized = 0; // indicate no Input selected
+
+ // Reset channel
+ status = mcaspControlChan(pInp->hMcaspChan, MCASP_CHAN_RESET, NULL); // Rx reset channel
+ //status = mcaspControlChan(pInp->hMcaspChan, MCASP_DEVICE_RESET, NULL); // Reset Tx/Rx channel
+ if (status != MCASP_COMPLETED)
+ {
+ Log_info0("asitSelectDevices(): McASP channel reset failed!\n");
+ return ASIP_ERR_MCASP_CFG;
+ }
+
+ // Delete McASP LLD channel
+ status = mcaspDeleteChan(pInp->hMcaspChan);
+ if (status != MCASP_COMPLETED)
+ {
+ Log_info0("asitSelectDevices(): McASP channel deletion failed!\n");
+ return ASIP_ERR_MCASP_CFG;
+ }
+
+ // Clear (drop) already posted Input data events
+ postedEvents = Event_getPostedEvents(gAsitEvtHandle);
+ while ((postedEvents & ASIT_EVTMSK_INPDATA) != 0)
+ {
+ Event_pend(gAsitEvtHandle, ASIT_EVTMSK_NONE, ASIT_EVTMSK_INPDATA, 0);
+ postedEvents = Event_getPostedEvents(gAsitEvtHandle);
+ }
- if (interface <= 0) {
- pInp->pRxParams = NULL;
-
- return ASIT_NO_ERR;
- }
-
- // Initialize D10
- if(!d10Initialized) {
- void * pD10Params = (void *)pQ->devinp->x[interface];
-
- /* Initialize McASP HW details */
- McaspDevice_init();
-
- D10_init(pD10Params);
-
- d10Initialized = 1;
- }
-
- /* Get the McASP LLD channel for this interface. Create one if not yet created. */
- lldCfg = (mcaspLLDconfig *)pQ->devinp->x[interface]->sio.pConfig;
- if(lldCfg->hMcaspChan == NULL) {
- mcaspChanHandle = NULL;
- status = mcasplldChanCreate(lldCfg, &mcaspChanHandle);
- if(status != Aud_EOK) {
- Log_info0("McASP channel creation failed!\n");
- return ASIT_ERR_MCASP_CFG;
+ pInp->hMcaspChan = NULL; // reset active McASP LLD handle
+ if (pInp->pRxParams != NULL) // sanity check, pInp->pRxParams should be non NULL if pInp->hMcaspChan is non NULL
+ {
+ pInPrms = (const PAF_SIO_Params *)pInp->pRxParams;
+ pLldCfg = (mcaspLLDconfig *)pInPrms->sio.pConfig; // get pointer to active McASP LLD configuration
+ pLldCfg->hMcaspChan = NULL; // reset McASP LLD handle for active McASP LLD configuration
+ pInp->pRxParams = NULL; // reset pointer to active D10 parameters
+ }
+ else
+ {
+ // This is a programming error
+ SW_BREAKPOINT; // debug
+ }
}
- lldCfg->hMcaspChan = mcaspChanHandle;
- }
- else {
- /* Configure McASP to receive 16/32-bit data according to default configuration */
- status = mcaspRecfgWordWidth(pInp->hMcaspChan, lldCfg->mcaspChanParams->wordWidth);
- if(status != Audk2g_EOK) {
- return ASIT_ERR_MCASP_CFG;
+ //
+ // Activate requested interface
+ //
+ pD10Params = (const PAF_SIO_Params *)pQ->devinp->x[interface]; // get D10 parameters for selected interface
+ if (pD10Params != NULL)
+ {
+ //
+ // Requested device is other than InNone
+ //
+ if((interface == DEVINP_HDMI) || (interface == DEVINP_HDMI_STEREO))
+ {
+ D10_initHDMI();
+ }
+
+ // Initialize Tx clock mux
+ D10_initClkMux((void *)pD10Params);
+
+ pReqLldCfg = (mcaspLLDconfig *)pD10Params->sio.pConfig;
+ if (pReqLldCfg->hMcaspChan == NULL)
+ {
+ // Create McASP LLD channel
+ mcaspChanHandle = NULL;
+ audStatus = mcasplldChanCreate(pReqLldCfg, &mcaspChanHandle);
+ if (audStatus != Aud_EOK)
+ {
+ Log_info0("asitSelectDevices(): McASP channel creation failed!\n");
+ return ASIP_ERR_MCASP_CFG;
+ }
+
+ pReqLldCfg->hMcaspChan = mcaspChanHandle; // set McASP LLD handle for requested McASP LLD configuration
+ pInp->pRxParams = (const void *)pD10Params; // set pointer to active D10 parameters
+ pInp->hMcaspChan = pReqLldCfg->hMcaspChan; // set active McASP LLD handle
+
+ // configure stride according to selected McASP LLD configuration
+ pInp->stride = pReqLldCfg->mcaspChanParams->noOfSerRequested *
+ pReqLldCfg->mcaspChanParams->noOfChannels;
+
+ pInp->firstTimeInit = TRUE; // set flag for IO Phy & Buff initialization
+
+ d10Initialized = 1; // indicate Input selected
+ }
+ }
+ else
+ {
+ //
+ // Requested device is InNone
+ //
+ pInp->hMcaspChan = NULL; // reset active McASP LLD handle
+ pInp->pRxParams = NULL; // reset pointer to active D10 parameters
}
+
+ // indicate SIO update request processed
+ pAstCfg->xInp[zMD].inpBufStatus.sioSelect = interface | 0x80;
}
- pInp->pRxParams = pQ->devinp->x[interface];
- pInp->hMcaspChan = lldCfg->hMcaspChan;
- pInp->stride = lldCfg->mcaspChanParams->noOfSerRequested * 2; // 2 for stereo
+ if (pInp->hMcaspChan != NULL) // non NULL indicates there's an active interface
+ {
+ if (pInp->pRxParams != NULL) // sanity check, this should be non NULL if pInp->hMcaspChan is non NULL
+ {
+ pInPrms = (const PAF_SIO_Params *)pInp->pRxParams;
+ pLldCfg = (mcaspLLDconfig *)pInPrms->sio.pConfig; // get currently active McASP LLD configuration
+ if (pLldCfg != NULL) // sanity check, this should be non NULL if pInp->hMcaspChan is non NULL
+ {
+ // Configure McASP to receive 16/32-bit data according to default configuration
+ mcaspRecfgWordWidth(pInp->hMcaspChan, pLldCfg->mcaspChanParams->wordWidth);
+
+ // Set flag to swap HDMI data if it is 4xI2S and word length is 16
+ if ((pLldCfg->mcaspChanParams->wordWidth == Mcasp_WordLength_16) &&
+ (pLldCfg->mcaspChanParams->noOfSerRequested == 4))
+ {
+ pInp->swapData = TRUE;
+ }
+ else
+ {
+ pInp->swapData = FALSE;
+ }
+ }
+ else
+ {
+ // This is a programming error
+ SW_BREAKPOINT; // debug
+ }
- /* Set flag to swap HDMI data if it is 4xI2S and word length is 16 */
- if( (lldCfg->mcaspChanParams->wordWidth == Mcasp_WordLength_16)
- &&(lldCfg->mcaspChanParams->noOfSerRequested == 4)
- ) {
- pInp->swapData = TRUE;
- }
- else {
- pInp->swapData = FALSE;
+ }
+ else
+ {
+ // This is a programming error
+ SW_BREAKPOINT; // debug
+ }
}
-
- return ASIT_NO_ERR;
+
+ return ASIP_NO_ERR;
} /* asitSelectDevices */
/*======================================================================================
}
if(autoDetStatus->syncState == IODATA_SYNC_BITSTREAM) {
- uint_least16_t pc = autoDetStatus->bitStreamInfo & SYNC_PC_MASK; //0x001F
+ uint_least16_t pc = autoDetStatus->streamInfo.IEC_PC;
sourceProgram = IECpafSource[pc];
}
}
else {
// For bitstream, I/O frame length is the frame length of the bitstream
- uint_least16_t pc = autoDetStatus->bitStreamInfo & SYNC_PC_MASK; //0x001F
- ioFrameLength = iecFrameLength[pc];
-
-/*
- if( (pc == 0x11) && (DTSHDSubType == 3)
- && (PAF_ASP_sampleRateHzTable[pBufConfig->pBufStatus->sampleRateStatus][PAF_SAMPLERATEHZ_STD] <=48000.0))
- pDevExt->sourceProgram = PAF_SOURCE_DXP; // LBR is 23
-
- if (pc == 1)
- pDevExt->elementSize = 4288;
- else if (pc == 0x11) {
- pDevExt->frameLength = (pDevExt->pIECFrameLength[pc] << DTSHDSubType);
- pDevExt->lengthofData = pDevExt->frameLength;
- }
-*/
-
pBufConfig->sizeofElement = WORD_SIZE_BITSTREAM;
- pBufConfig->frameLength = ioFrameLength;
- pBufConfig->lengthofData = ioFrameLength - IEC_HEADER_LENGTH;
+ pBufConfig->frameLength = autoDetStatus->streamInfo.frameLength;
+ pBufConfig->lengthofData = autoDetStatus->streamInfo.dataLength;
+ ioFrameLength = autoDetStatus->streamInfo.frameLength;
// Change I/O PHY transfer size to bitstream frame size
- pInp->phyXferSize = ioFrameLength*WORD_SIZE_BITSTREAM;
+ pInp->phyXferSize = ioFrameLength*(WORD_SIZE_BITSTREAM);
}
pBufConfig->stride = pInp->stride; // common for PCM and bitstream
sourceConfig = (Int)sharedMemReadInt8(&(pAstCfg->xDec[zMD].decodeStatus.sourceSelect),
GATEMP_INDEX_DEC);
- if(autoDetStatus->syncState == IODATA_SYNC_PCM) {
- // Bitstream preamble is not found and it times out -> assume this is PCM
- deliverZeros = autoDetStatus->deliverZeros;
- if (sourceConfig == PAF_SOURCE_PCM || sourceConfig == PAF_SOURCE_DSD1 ||
- sourceConfig == PAF_SOURCE_DSD2 || sourceConfig == PAF_SOURCE_DSD3) {
- // set to one -- ensures that PCM decode calls made before data is
- // available will result in zero output.
- // (mostly needed for PA15 since, currently, all other frameworks
- // require a frame of data before the first decode call.
- deliverZeros = TRUE; // override deliverZeros returned by ioDataControl
- }
-
- // update input buffer config structure
- pBufConfig->deliverZeros = deliverZeros;
- }
-
- //JXTODO: decide what to do with hRxSio
- //temporary - does ARM use hRxSio or just check if it is not NULL?
+ // temporary - does ARM use hRxSio or just check if it is not NULL?
pAstCfg->xInp[zMD].hRxSio = pInp->hIoData;
pAstCfg->xInp[zMD].pInpBuf = &(pAstCfg->xInp[zMD].inpBufConfig);
return ASIT_NO_ERR;
} /* asitUpdateIoComps */
-
+#if 0
#ifndef IO_LOOPBACK_TEST
#if OUTPUT_FRAME_LENGTH == INPUT_FRAME_LENGTH
U8 pcmbuf[OUTPUT_FRAME_SIZE];
}
#endif
+#endif
+
Int asitEvtErrCheck(UInt actualEvents, UInt expectedEvents)
{
TRACE_VERBOSE2("ASIT events error: actual events are: %d, expected events are: %d.",
TRACE_VERBOSE0("ASIT error handling: input buffer underflows. No actions needed.");
}
+ if(asitErr == ASIT_AUTODET_TIME_OUT) {
+ pAsitCfg->pIoInp[0].asipState = ASIT_RESET;
+ pAsitCfg->pIoInp[0].numAsitRestart++;
+ TRACE_VERBOSE1("ASIT error %d handling finished. Go to state ASIT_RESET.", asitErr);
+ }
+
if(asitErr == ASIT_ERR_DECODE_QUIT) {
TRACE_VERBOSE0("ASIT error handling: DECODE_QUIT - clear INPDATA event.");
#if 0
#endif
pAsitCfg->pIoInp[0].asipState = ASIT_RESET;
pAsitCfg->pIoInp[0].numAsitRestart++;
- TRACE_VERBOSE0("ASIT error handling finished. Go to state ASIT_RESET.");
+ TRACE_VERBOSE1("ASIT error %d handling finished. Go to state ASIT_RESET.", asitErr);
}
if(asitErr == ASIT_ERR_EVENTS) {
pAsitCfg->pIoInp[0].asipState = ASIT_RESET;
pAsitCfg->pIoInp[0].numAsitRestart++;
- TRACE_VERBOSE0("ASIT error handling: events error. Go to state ASIT_RESET.");
+ TRACE_VERBOSE1("ASIT error %d handling: events error. Go to state ASIT_RESET.", asitErr);
}
return;