Code: Select all
#define BUFFER_SIZE 1024
interface dsp_interface {
void dsp_realTimeData(int32_t buff[NUM_USB_CHAN_IN][BUFFER_SIZE]);
void dsp_complexTimeData(dsp_complex_t buff[NUM_USB_CHAN_IN][BUFFER_SIZE]);
};
Code: Select all
void bufferData(client interface dsp_interface i, mic_array_frame_time_domain * unsafe audio)
{
//continous buffer and send data when buffer full
static uint16_t wrIdx = 0;
uint8_t normalizationFactor = 4;
int32_t circBuffer[NUM_USB_CHAN_IN][BUFFER_SIZE];
unsafe {
for(unsigned i=0; i<num_of_mic; i++)
{
circBuffer[i][wrIdx] = audio->data[i][0]/normalizationFactor;
}
}
if(wrIdx < BUFFER_SIZE-1)
wrIdx++;
else {
wrIdx = 0;
i.dsp_realTimeData(circBuffer); //send buffered data
}
}
Code: Select all
void soundLocalization(server interface dsp_interface i)
{
//perform sound localization algorithm
select {
case i.dsp_realTimeData(int32_t buff[NUM_USB_CHAN_IN][BUFFER_SIZE]):
{
//...Code... //Doesn't come here!!!
}
break;
case i.dsp_complexTimeData(dsp_complex_t buff[NUM_USB_CHAN_IN][BUFFER_SIZE]):
break;
}
}
Code: Select all
unsafe void user_pdm_process_timeFrames(mic_array_frame_time_domain * unsafe audio)
{
/*Apply algorithm to time domain input frames*/
interface dsp_interface i;
par {
bufferData(i, audio);
soundLocalization(i);
}
}
Shailesh