/*
|
* F2F.c
|
*
|
* Created on: 2021Äê11ÔÂ2ÈÕ
|
* Author: graydon
|
*/
|
#include <cstring>
|
#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);
|
}
|
}
|