diff --git a/lib_xua/api/xua_audiohub.h b/lib_xua/api/xua_audiohub.h index 7277aa97..c6463c9b 100644 --- a/lib_xua/api/xua_audiohub.h +++ b/lib_xua/api/xua_audiohub.h @@ -63,47 +63,28 @@ void XUA_AudioHub(chanend ?c_aud, void SpdifTxWrapper(chanend c_spdif_tx); -/* The 4 functions below should implemented for the external audio haardware arrangement of a specific design. - * Note, default (empty) implementations of these are provided in audiohub_user.c - */ - -/** This function is called when the device starts up and should contain user code to perform any required audio hardware initialisation */ -void AudioHwInit(void); - - - -/** This function is called when on sample rate change and should contain user code to configure audio hardware - * (clocking, CODECs etc) for a specific mClk/Sample frequency - * - * \param samFreq The new sample frequency (in Hz) - * - * \param mClk The new master clock frequency (in Hz) - * - * \param dsdMode DSD mode, DSD_MODE_NATIVE, DSD_MODE_DOP or DSD_MODE_OFF - * - * \param sampRes_DAC Playback sample resolution (in bits) - * - * \param sampRes_ADC Record sample resolution (in bits) - */ -void AudioHwConfig(unsigned samFreq, unsigned mClk, unsigned dsdMode, unsigned sampRes_DAC, unsigned sampRes_ADC); - -/** This function is called before AudioHwConfig() and should contain user code to mute audio hardware before a - * sample rate change in order to reduced audible pops/clicks - * - * Note, if using the application PLL of a xcore.ai device this function will be called before the master-clock is - * changed - */ -void AudioHwConfig_Mute(void); - -/** This function is called after AudioHwConfig() and should contain user code to un-mute audio hardware after a - * sample rate change - */ -void AudioHwConfig_UnMute(void); - #endif // __XC__ -void UserBufferManagementInit(); - +/** + * @brief User buffer management code + * + * This function is called at the sample rate of the USB Audio stack (e.g,. 48 kHz) and between the two parameter arrays + * contain a full multi-channel audio-frame. The first array carries all the data that has been received from the USB host + * and is to be presented to the audio interfaces. The second array carries all the data received from the interfaces and + * is to be presented to the USB host. The user can chose to intercept and overwrite the samples stored in these arrays. + * + * \param sampsFromUsbToAudio Samples received from USB host and to be presented to audio interfaces + * + * \param sampsFromAudioToUsb Samples received from the audio interfaces and to be presented to the USB host +*/ void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[]); +/** + * @brief User buffer managment init code + * + * This function is called once, before the first call to UserBufferManagement(), and can be used to initialise any + * related user state + */ +void UserBufferManagementInit(); + #endif // _XUA_AUDIOHUB_H_ diff --git a/lib_xua/module_build_info b/lib_xua/module_build_info index c327e5c2..c71e4bd6 100644 --- a/lib_xua/module_build_info +++ b/lib_xua/module_build_info @@ -55,6 +55,7 @@ INCLUDE_DIRS = $(EXPORT_INCLUDE_DIRS) \ src/core/user/audiostream \ src/core/user/hid \ src/core/user/hostactive \ + src/core/user/audiohw \ src/hid \ src/midi @@ -70,6 +71,7 @@ SOURCE_DIRS = src/core \ src/core/support \ src/core/user/audiostream \ src/core/user/hostactive \ + src/core/user/audiohw \ src/core/xuduser \ src/dfu \ src/hid \ diff --git a/lib_xua/src/core/audiohub/xua_audiohub.xc b/lib_xua/src/core/audiohub/xua_audiohub.xc index 7b0fcabd..e5243cd2 100755 --- a/lib_xua/src/core/audiohub/xua_audiohub.xc +++ b/lib_xua/src/core/audiohub/xua_audiohub.xc @@ -17,9 +17,10 @@ #include #include - #include "xua.h" +#include "audiohw.h" + #include "audioports.h" #include "mic_array_conf.h" #if (XUA_SPDIF_TX_EN) diff --git a/lib_xua/src/core/audiohub/audiohub_user.c b/lib_xua/src/core/user/audiohw/audiohw.c similarity index 100% rename from lib_xua/src/core/audiohub/audiohub_user.c rename to lib_xua/src/core/user/audiohw/audiohw.c diff --git a/lib_xua/src/core/user/audiohw/audiohw.h b/lib_xua/src/core/user/audiohw/audiohw.h new file mode 100644 index 00000000..2282c8d5 --- /dev/null +++ b/lib_xua/src/core/user/audiohw/audiohw.h @@ -0,0 +1,54 @@ +// Copyright 2023 XMOS LIMITED. +// This Software is subject to the terms of the XMOS Public Licence: Version 1. +#ifndef _AUDIO_HW_H_ +#define _AUDIO_HW_H_ + +/* The functions below should be implemented for the external audio hardware arrangement of a specific design. + * Note, default (empty) implementations of these are provided in audiohub_user.c + */ + +/** + * @brief User audio hardware initialisation code + * + * This function is called when the device starts up and should contain user code to perform any required audio hardware initialisation + */ +void AudioHwInit(void); + +/** + * @brief User audio hardware configuration code + * + * This function is called when on sample rate change and should contain user code to configure audio hardware + * (clocking, CODECs etc) for a specific mClk/Sample frequency + * + * \param samFreq The new sample frequency (in Hz) + * + * \param mClk The new master clock frequency (in Hz) + * + * \param dsdMode DSD mode, DSD_MODE_NATIVE, DSD_MODE_DOP or DSD_MODE_OFF + * + * \param sampRes_DAC Playback sample resolution (in bits) + * + * \param sampRes_ADC Record sample resolution (in bits) + */ +void AudioHwConfig(unsigned samFreq, unsigned mClk, unsigned dsdMode, unsigned sampRes_DAC, unsigned sampRes_ADC); + +/** + * @brief User code mute audio hardware + * + * This function is called before AudioHwConfig() and should contain user code to mute audio hardware before a + * sample rate change in order to reduced audible pops/clicks + * + * Note, if using the application PLL of a xcore.ai device this function will be called before the master-clock is + * changed + */ +void AudioHwConfig_Mute(void); + +/** + * @brief User code to un-mute audio hardware + * + * This function is called after AudioHwConfig() and should contain user code to un-mute audio hardware after a + * sample rate change + */ +void AudioHwConfig_UnMute(void); + +#endif