forked from PAWPAW-Mirror/lib_xua
Added audio stream start/stop callbacks for input/output
This commit is contained in:
@@ -6,6 +6,7 @@ lib_xua Change Log
|
|||||||
|
|
||||||
* ADDED: Initial library documentation
|
* ADDED: Initial library documentation
|
||||||
* ADDED: Application note AN00247: Using lib_xua with lib_spdif (transmit)
|
* ADDED: Application note AN00247: Using lib_xua with lib_spdif (transmit)
|
||||||
|
* ADDED: Callbacks for input/output audio stream start/stop
|
||||||
* CHANGE: I2S hardware resources no longer used globally and must be passed
|
* CHANGE: I2S hardware resources no longer used globally and must be passed
|
||||||
to XUA_AudioHub()
|
to XUA_AudioHub()
|
||||||
* CHANGE: XUA_AudioHub() no longer pars S/PDIF transmitter task
|
* CHANGE: XUA_AudioHub() no longer pars S/PDIF transmitter task
|
||||||
|
|||||||
@@ -409,25 +409,50 @@ void XUA_Endpoint0(chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if (NUM_USB_CHAN_OUT > 0) && (NUM_USB_CHAN_IN > 0)
|
#if (NUM_USB_CHAN_OUT > 0) && (NUM_USB_CHAN_IN > 0)
|
||||||
if ((sp.wIndex == INTERFACE_NUMBER_AUDIO_OUTPUT) || (sp.wIndex == INTERFACE_NUMBER_AUDIO_INPUT))
|
unsigned num_input_interfaces = g_interfaceAlt[INTERFACE_NUMBER_AUDIO_INPUT];
|
||||||
|
unsigned num_output_interfaces = g_interfaceAlt[INTERFACE_NUMBER_AUDIO_OUTPUT];
|
||||||
|
if (sp.wIndex == INTERFACE_NUMBER_AUDIO_INPUT)
|
||||||
{
|
{
|
||||||
/* Check for stream start stop on output and input audio interfaces */
|
// in: 0 -> 1
|
||||||
if(sp.wValue && !g_interfaceAlt[INTERFACE_NUMBER_AUDIO_OUTPUT] && !g_interfaceAlt[INTERFACE_NUMBER_AUDIO_INPUT])
|
if (sp.wValue && !num_input_interfaces)
|
||||||
|
{
|
||||||
|
UserAudioInputStreamStart();
|
||||||
|
if (!num_output_interfaces)
|
||||||
{
|
{
|
||||||
/* If start and input AND output not currently running */
|
|
||||||
UserAudioStreamStart();
|
UserAudioStreamStart();
|
||||||
}
|
}
|
||||||
else if(((sp.wIndex == 1) && (!sp.wValue)) && g_interfaceAlt[INTERFACE_NUMBER_AUDIO_OUTPUT] && (!g_interfaceAlt[INTERFACE_NUMBER_AUDIO_INPUT]))
|
}
|
||||||
|
// in: 1 -> 0
|
||||||
|
else if (!sp.wValue && num_input_interfaces)
|
||||||
|
{
|
||||||
|
UserAudioInputStreamStop();
|
||||||
|
if (!num_output_interfaces)
|
||||||
{
|
{
|
||||||
/* if output stop and output running and input not running */
|
|
||||||
UserAudioStreamStop();
|
UserAudioStreamStop();
|
||||||
}
|
}
|
||||||
else if(((sp.wIndex == 2) && (!sp.wValue)) && g_interfaceAlt[INTERFACE_NUMBER_AUDIO_INPUT] && (!g_interfaceAlt[INTERFACE_NUMBER_AUDIO_OUTPUT]))
|
}
|
||||||
|
}
|
||||||
|
else if (sp.wIndex == INTERFACE_NUMBER_AUDIO_OUTPUT)
|
||||||
|
{
|
||||||
|
// out: 0 -> 1
|
||||||
|
if (sp.wValue && !num_output_interfaces)
|
||||||
|
{
|
||||||
|
UserAudioOutputStreamStart();
|
||||||
|
if (!num_input_interfaces)
|
||||||
|
{
|
||||||
|
UserAudioStreamStart();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// out: 1 -> 0
|
||||||
|
else if (!sp.wValue && num_output_interfaces)
|
||||||
|
{
|
||||||
|
UserAudioOutputStreamStop();
|
||||||
|
if (!num_input_interfaces)
|
||||||
{
|
{
|
||||||
/* if input stop and input running and output not running */
|
|
||||||
UserAudioStreamStop();
|
UserAudioStreamStop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#elif (NUM_USB_CHAN_OUT > 0)
|
#elif (NUM_USB_CHAN_OUT > 0)
|
||||||
if(sp.wIndex == INTERFACE_NUMBER_AUDIO_OUTPUT)
|
if(sp.wIndex == INTERFACE_NUMBER_AUDIO_OUTPUT)
|
||||||
{
|
{
|
||||||
@@ -435,11 +460,13 @@ void XUA_Endpoint0(chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl,
|
|||||||
{
|
{
|
||||||
/* if start and not currently running */
|
/* if start and not currently running */
|
||||||
UserAudioStreamStart();
|
UserAudioStreamStart();
|
||||||
|
UserAudioOutputStreamStart();
|
||||||
}
|
}
|
||||||
else if (!sp.wValue && g_interfaceAlt[INTERFACE_NUMBER_AUDIO_OUTPUT])
|
else if (!sp.wValue && g_interfaceAlt[INTERFACE_NUMBER_AUDIO_OUTPUT])
|
||||||
{
|
{
|
||||||
/* if stop and currently running */
|
/* if stop and currently running */
|
||||||
UserAudioStreamStop();
|
UserAudioStreamStop();
|
||||||
|
UserAudioOutputStreamStop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#elif (NUM_USB_CHAN_IN > 0)
|
#elif (NUM_USB_CHAN_IN > 0)
|
||||||
@@ -449,11 +476,13 @@ void XUA_Endpoint0(chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl,
|
|||||||
{
|
{
|
||||||
/* if start and not currently running */
|
/* if start and not currently running */
|
||||||
UserAudioStreamStart();
|
UserAudioStreamStart();
|
||||||
|
UserAudioInputStreamStart();
|
||||||
}
|
}
|
||||||
else if (!sp.wValue && g_interfaceAlt[INTERFACE_NUMBER_AUDIO_INPUT])
|
else if (!sp.wValue && g_interfaceAlt[INTERFACE_NUMBER_AUDIO_INPUT])
|
||||||
{
|
{
|
||||||
/* if stop and currently running */
|
/* if stop and currently running */
|
||||||
UserAudioStreamStop();
|
UserAudioStreamStop();
|
||||||
|
UserAudioInputStreamStop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
// Copyright (c) 2013-2018, XMOS Ltd, All rights reserved
|
// Copyright (c) 2013-2018, XMOS Ltd, All rights reserved
|
||||||
|
|
||||||
/* Deafult implementations of AudioStreamStop() and AudioStreamStart(). Both can be over-ridden */
|
/* Default implementations of AudioStreamStop() and AudioStreamStart()
|
||||||
|
* callbacks.
|
||||||
|
*/
|
||||||
|
|
||||||
void UserAudioStreamStop() __attribute__ ((weak));
|
void UserAudioStreamStop() __attribute__ ((weak));
|
||||||
void UserAudioStreamStop()
|
void UserAudioStreamStop()
|
||||||
{
|
{
|
||||||
@@ -12,3 +15,27 @@ void UserAudioStreamStart()
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UserAudioInputStreamStop() __attribute__ ((weak));
|
||||||
|
void UserAudioInputStreamStop()
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UserAudioInputStreamStart() __attribute__ ((weak));
|
||||||
|
void UserAudioInputStreamStart()
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UserAudioOutputStreamStop() __attribute__ ((weak));
|
||||||
|
void UserAudioOutputStreamStop()
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UserAudioOutputStreamStart() __attribute__ ((weak));
|
||||||
|
void UserAudioOutputStreamStart()
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|||||||
@@ -14,5 +14,17 @@ void UserAudioStreamStart(void);
|
|||||||
/* Any actions required on stream stop e.g. DAC mute - run every steam stop */
|
/* Any actions required on stream stop e.g. DAC mute - run every steam stop */
|
||||||
void UserAudioStreamStop(void);
|
void UserAudioStreamStop(void);
|
||||||
|
|
||||||
|
/* Any actions required on input stream start */
|
||||||
|
void UserAudioInputStreamStart(void);
|
||||||
|
|
||||||
|
/* Any actions required on input stream stop */
|
||||||
|
void UserAudioInputStreamStop(void);
|
||||||
|
|
||||||
|
/* Any actions required on output stream start */
|
||||||
|
void UserAudioOutputStreamStart(void);
|
||||||
|
|
||||||
|
/* Any actions required on output stream stop */
|
||||||
|
void UserAudioOutputStreamStop(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user