分支自 DSP/ADSP21569/DSP-21569

graydon
2024-02-28 420778fcee054257d540cf24fbf1b1e3f9fc0d9f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
 * 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);
    }
}