Mixer communications updated for new underflow protocol
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
#include <xs1.h>
|
#include <xs1.h>
|
||||||
#include <print.h>
|
|
||||||
#include "mixer.h"
|
#include "mixer.h"
|
||||||
#include "devicedefines.h"
|
#include "devicedefines.h"
|
||||||
#include "xc_ptr.h"
|
#include "xc_ptr.h"
|
||||||
@@ -184,8 +183,10 @@ void giveSamplesToHost(chanend c, xc_ptr samples, xc_ptr ptr, xc_ptr multIn)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#pragma unsafe arrays
|
#pragma unsafe arrays
|
||||||
static void getSamplesFromHost(chanend c, xc_ptr samples, int base)
|
static void getSamplesFromHost(chanend c, xc_ptr samples, int base, unsigned underflow)
|
||||||
{
|
{
|
||||||
|
if(!underflow)
|
||||||
|
{
|
||||||
#pragma loop unroll
|
#pragma loop unroll
|
||||||
for (int i=0;i<NUM_USB_CHAN_OUT;i++)
|
for (int i=0;i<NUM_USB_CHAN_OUT;i++)
|
||||||
{
|
{
|
||||||
@@ -216,12 +217,17 @@ static void getSamplesFromHost(chanend c, xc_ptr samples, int base)
|
|||||||
#else
|
#else
|
||||||
write_via_xc_ptr_indexed(samples,base+i,sample);
|
write_via_xc_ptr_indexed(samples,base+i,sample);
|
||||||
#endif
|
#endif
|
||||||
}
|
} }
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma unsafe arrays
|
#pragma unsafe arrays
|
||||||
void giveSamplesToDevice(chanend c, xc_ptr samples, xc_ptr ptr, xc_ptr multOut)
|
void giveSamplesToDevice(chanend c, xc_ptr samples, xc_ptr ptr, xc_ptr multOut, unsigned underflow)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
outuint(c, underflow);
|
||||||
|
|
||||||
|
if(!underflow)
|
||||||
|
{
|
||||||
#pragma loop unroll
|
#pragma loop unroll
|
||||||
for (int i=0;i<NUM_USB_CHAN_OUT;i++)
|
for (int i=0;i<NUM_USB_CHAN_OUT;i++)
|
||||||
{
|
{
|
||||||
@@ -245,6 +251,7 @@ void giveSamplesToDevice(chanend c, xc_ptr samples, xc_ptr ptr, xc_ptr multOut)
|
|||||||
outuint(c, sample);
|
outuint(c, sample);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma unsafe arrays
|
#pragma unsafe arrays
|
||||||
@@ -291,15 +298,15 @@ void mixer1(chanend c_host, chanend c_mix_ctl, chanend c_mixer2)
|
|||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
|
||||||
#pragma xta endpoint "mixer1_req"
|
#pragma xta endpoint "mixer1_req"
|
||||||
|
/* Request from audio() */
|
||||||
inuint(c_mixer2);
|
inuint(c_mixer2);
|
||||||
|
|
||||||
/* Request data from decouple thread */
|
/* Request data from decouple thread */
|
||||||
outuint(c_host, 0);
|
outuint(c_host, 0);
|
||||||
|
|
||||||
/* Between request to decouple and respose ~ 400nS latency for interrupt to fire */
|
/* Between request to decouple and respose ~ 400nS latency for interrupt to fire */
|
||||||
select
|
select
|
||||||
{
|
{
|
||||||
case inuint_byref(c_mix_ctl, cmd):
|
case inuint_byref(c_mix_ctl, cmd):
|
||||||
{
|
{
|
||||||
@@ -406,7 +413,7 @@ void mixer1(chanend c_host, chanend c_mix_ctl, chanend c_mixer2)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
/* Select default */
|
/* Select default */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -424,12 +431,10 @@ void mixer1(chanend c_host, chanend c_mix_ctl, chanend c_mixer2)
|
|||||||
#pragma loop unroll
|
#pragma loop unroll
|
||||||
for (int i=0;i<MAX_MIX_COUNT;i++)
|
for (int i=0;i<MAX_MIX_COUNT;i++)
|
||||||
{
|
{
|
||||||
write_via_xc_ptr_indexed(samples,
|
write_via_xc_ptr_indexed(samples, (NUM_USB_CHAN_OUT + NUM_USB_CHAN_IN + i), 0);
|
||||||
(NUM_USB_CHAN_OUT + NUM_USB_CHAN_IN + i),
|
|
||||||
0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Inform mixer 2 about freq change */
|
/* Inform mixer2 (or audio())about freq change */
|
||||||
outct(c_mixer2, XS1_CT_END);
|
outct(c_mixer2, XS1_CT_END);
|
||||||
outuint(c_mixer2, sampFreq);
|
outuint(c_mixer2, sampFreq);
|
||||||
|
|
||||||
@@ -439,7 +444,7 @@ void mixer1(chanend c_host, chanend c_mix_ctl, chanend c_mixer2)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
inuint(c_host);
|
unsigned underflow = inuint(c_host);
|
||||||
#if MAX_MIX_COUNT > 0
|
#if MAX_MIX_COUNT > 0
|
||||||
outuint(c_mixer2, 0);
|
outuint(c_mixer2, 0);
|
||||||
giveSamplesToHost(c_host, samples, samples_to_host_map, multIn);
|
giveSamplesToHost(c_host, samples, samples_to_host_map, multIn);
|
||||||
@@ -506,10 +511,10 @@ void mixer1(chanend c_host, chanend c_mix_ctl, chanend c_mixer2)
|
|||||||
}
|
}
|
||||||
#else /* IF MAX_MIX_COUNT > 0 */
|
#else /* IF MAX_MIX_COUNT > 0 */
|
||||||
/* No mixes, this thread runs on its own doing just volume */
|
/* No mixes, this thread runs on its own doing just volume */
|
||||||
giveSamplesToDevice(c_mixer2, samples, samples_to_device_map, multOut);
|
giveSamplesToDevice(c_mixer2, samples, samples_to_device_map, multOut, underflow);
|
||||||
getSamplesFromDevice(c_mixer2, samples, NUM_USB_CHAN_OUT);
|
getSamplesFromDevice(c_mixer2, samples, NUM_USB_CHAN_OUT);
|
||||||
giveSamplesToHost(c_host, samples, samples_to_host_map, multIn);
|
giveSamplesToHost(c_host, samples, samples_to_host_map, multIn);
|
||||||
getSamplesFromHost(c_host, samples, 0);
|
getSamplesFromHost(c_host, samples, 0, underflow);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -517,6 +522,7 @@ void mixer1(chanend c_host, chanend c_mix_ctl, chanend c_mixer2)
|
|||||||
|
|
||||||
int mixer2_mix2_flag = (DEFAULT_FREQ > 96000);
|
int mixer2_mix2_flag = (DEFAULT_FREQ > 96000);
|
||||||
|
|
||||||
|
#if (MAX_MIX_COUNT > 0)
|
||||||
#pragma unsafe arrays
|
#pragma unsafe arrays
|
||||||
void mixer2(chanend c_mixer1, chanend c_audio)
|
void mixer2(chanend c_mixer1, chanend c_audio)
|
||||||
{
|
{
|
||||||
@@ -622,6 +628,7 @@ void mixer2(chanend c_mixer1, chanend c_audio)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void mixer(chanend c_mix_in, chanend c_mix_out, chanend c_mix_ctl)
|
void mixer(chanend c_mix_in, chanend c_mix_out, chanend c_mix_ctl)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user