/* * F2F.c * * Created on: 2021Äê11ÔÂ2ÈÕ * Author: graydon */ #include #include "config.h" #include "f2f.h" #include "../drv/sport.h" extern int SP0A_BUFFER[2][SLOTS*SAMPLE_NUM*2];//input 1-32 extern int SP0B_BUFFER[2][SLOTS*SAMPLE_NUM*2];//input 33-64 extern int SP1A_BUFFER[2][SLOTS*SAMPLE_NUM*2];//input 64-96 extern int SP1B_BUFFER[2][SLOTS*SAMPLE_NUM*2];//input 96-128 extern int SP2A_BUFFER[2][SLOTS*SAMPLE_NUM*2]; extern int SP2B_BUFFER[2][SLOTS*SAMPLE_NUM*2]; extern int SP3A_BUFFER[2][SLOTS*SAMPLE_NUM*2]; extern int SP3B_BUFFER[2][SLOTS*SAMPLE_NUM*2]; static s32* const g_InputBuffer[] = { SP0A_BUFFER[0] , SP0A_BUFFER[1],SP0B_BUFFER[0],SP0B_BUFFER[1], SP1A_BUFFER[0] , SP1A_BUFFER[1],SP1B_BUFFER[0],SP1B_BUFFER[1], }; static s32* const g_OutputBuffer[] = { SP2A_BUFFER[0] , SP2A_BUFFER[1],SP2B_BUFFER[0],SP2B_BUFFER[1], SP3A_BUFFER[0] , SP3A_BUFFER[1],SP3B_BUFFER[0],SP3B_BUFFER[1], }; ErrStatus F2F::SetRxChannelPtr(u32 channel ,ufloat* rxBuffer) { if (channel >= MAX_INPUT_NUM) { return ErrStatus::ERR_PARAM; } mRxChannel[channel] = rxBuffer; return ErrStatus::SUCCESS; } ErrStatus F2F::SetTxChannelPtr(u32 channel, ufloat* txBuffer) { if (channel >= MAX_OUTPUT_NUM) { return ErrStatus::ERR_PARAM; } mTxChannel[channel] = txBuffer; return ErrStatus::SUCCESS; } uvoid F2F::MuteOutput() { u32 n = sizeof(g_OutputBuffer)/sizeof(s32*); for(u32 i =0 ;i< n;i++) { memset(g_OutputBuffer[i],0 , SLOTS*SAMPLE_NUM*2*sizeof(s32)); } } #define CHANNEL_OF(c) (2*((c)&(SLOTS-1))+ (c)/SLOTS) uvoid F2F::UpdateInput(u32 blockIndex) { for(u32 i =0 ;i < mInputNum ;i++) { u32 block = i/(2*SLOTS); s32* dataPtr = g_InputBuffer[2*block+blockIndex] ; floatData(mRxChannel[i],dataPtr + CHANNEL_OF(i&(2*SLOTS-1)), SLOTS*2, SAMPLE_NUM); } } uvoid F2F::UpdateOutput(u32 blockIndex) { for(u32 i =0 ;i < mOutputNum ;i++) { u32 block = i/(2*SLOTS); s32* dataPtr = g_OutputBuffer[2*block+blockIndex]; fixData(dataPtr+ CHANNEL_OF(i&(2*SLOTS-1)) ,mTxChannel[i],SLOTS*2, SAMPLE_NUM); } }