Files
test/middleware/usb/uC-USBD/Class/Audio/usbd_audio.h
2025-11-07 20:19:23 +08:00

1110 lines
68 KiB
C

/*
*********************************************************************************************************
* uC/USB-Device
* The Embedded USB Device Stack
*
* Copyright 2004-2021 Silicon Laboratories Inc. www.silabs.com
*
* SPDX-License-Identifier: APACHE-2.0
*
* This software is subject to an open source license and is distributed by
* Silicon Laboratories Inc. pursuant to the terms of the Apache License,
* Version 2.0 available at www.apache.org/licenses/LICENSE-2.0.
*
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*
* USB DEVICE AUDIO CLASS
*
* Filename : usbd_audio.h
* Version : V4.06.01
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*********************************************************************************************************
* MODULE
*********************************************************************************************************
*********************************************************************************************************
*/
#ifndef USBD_AUDIO_MODULE_PRESENT
#define USBD_AUDIO_MODULE_PRESENT
/*
*********************************************************************************************************
*********************************************************************************************************
* INCLUDE FILES
*********************************************************************************************************
*********************************************************************************************************
*/
#include <usbd_cfg.h> /* Device Configuration file. */
#include "../../Source/usbd_core.h"
#include <cpu.h>
/*
*********************************************************************************************************
*********************************************************************************************************
* EXTERNS
*********************************************************************************************************
*********************************************************************************************************
*/
#ifdef USBD_AUDIO_MODULE
#define USBD_AUDIO_EXT
#else
#define USBD_AUDIO_EXT extern
#endif
/*
*********************************************************************************************************
*********************************************************************************************************
* DEFINES
*********************************************************************************************************
*********************************************************************************************************
*/
#define USBD_AUDIO_STREAM_NBR_BUF_6 6u
#define USBD_AUDIO_STREAM_NBR_BUF_12 12u
#define USBD_AUDIO_STREAM_NBR_BUF_18 18u
#define USBD_AUDIO_STREAM_NBR_BUF_24 24u
#define USBD_AUDIO_STREAM_NBR_BUF_30 30u
#define USBD_AUDIO_STREAM_NBR_BUF_36 36u
#define USBD_AUDIO_STREAM_NBR_BUF_42 42u
#define USBD_AUDIO_TERMINAL_NO_ASSOCIATION 0u
/*
*********************************************************************************************************
* AUDIO CLASS-SPECIFIC REQ
*
* Note(s): (1) See 'USB Device Class Definition for Audio Devices, Release 1.0, March 18, 1998',
* section 5.2.1.1 and appendix A.9 for more details about Audio class-specific SET_XXX
* requests.
*
* (2) See 'USB Device Class Definition for Audio Devices, Release 1.0, March 18, 1998',
* section 5.2.1.2 and appendix A.9 for more details about Audio class-specific GET_XXX
* requests.
*********************************************************************************************************
*/
/* See Note #1. */
#define USBD_AUDIO_REQ_SET_CUR 0x01u
#define USBD_AUDIO_REQ_SET_MIN 0x02u
#define USBD_AUDIO_REQ_SET_MAX 0x03u
#define USBD_AUDIO_REQ_SET_RES 0x04u
#define USBD_AUDIO_REQ_SET_MEM 0x05u
/* See Note #2. */
#define USBD_AUDIO_REQ_GET_CUR 0x81u
#define USBD_AUDIO_REQ_GET_MIN 0x82u
#define USBD_AUDIO_REQ_GET_MAX 0x83u
#define USBD_AUDIO_REQ_GET_RES 0x84u
#define USBD_AUDIO_REQ_GET_MEM 0x85u
#define USBD_AUDIO_REQ_GET_STAT 0xFFu
/*
*********************************************************************************************************
* TERMINAL TYPES
*
* Note(s) : (1) See 'USB Device Class Definition for Terminal Types, Release 1.0, March 18, 1998',
* section 2.1 for more details about audio terminal types.
*********************************************************************************************************
*/
/* USB Terminal types. */
#define USBD_AUDIO_TERMINAL_TYPE_USB_STREAMING 0x0101u
#define USBD_AUDIO_TERMINAL_TYPE_USB_VENDOR 0x01FFu
/* Input Terminal types. */
#define USBD_AUDIO_TERMINAL_TYPE_IT_UNDEFINED 0x0200u
#define USBD_AUDIO_TERMINAL_TYPE_MIC 0x0201u
#define USBD_AUDIO_TERMINAL_TYPE_DESKTOP_MIC 0x0202u
#define USBD_AUDIO_TERMINAL_TYPE_PERSONAL_MIC 0x0203u
#define USBD_AUDIO_TERMINAL_TYPE_OMNI_DIR_MIC 0x0204u
#define USBD_AUDIO_TERMINAL_TYPE_MIC_ARRAY 0x0205u
#define USBD_AUDIO_TERMINAL_TYPE_PROC_MIC_ARRAY 0x0206u
/* Output Terminal types. */
#define USBD_AUDIO_TERMINAL_TYPE_OT_UNDEFINED 0x0300u
#define USBD_AUDIO_TERMINAL_TYPE_SPEAKER 0x0301u
#define USBD_AUDIO_TERMINAL_TYPE_HEADPHONES 0x0302u
#define USBD_AUDIO_TERMINAL_TYPE_HEAD_MOUNTED 0x0303u
#define USBD_AUDIO_TERMINAL_TYPE_DESKTOP_SPEAKER 0x0304u
#define USBD_AUDIO_TERMINAL_TYPE_ROOM_SPEAKER 0x0305u
#define USBD_AUDIO_TERMINAL_TYPE_COMM_SPEAKER 0x0306u
#define USBD_AUDIO_TERMINAL_TYPE_LOW_FREQ_SPEAKER 0x0307u
/* Bi-directional Terminal types. */
#define USBD_AUDIO_TERMINAL_TYPE_BI_DIR_UNDEFINED 0x0400u
#define USBD_AUDIO_TERMINAL_TYPE_HANDSET 0x0401u
#define USBD_AUDIO_TERMINAL_TYPE_HEADSET 0x0402u
#define USBD_AUDIO_TERMINAL_TYPE_SPEAKERPHONE 0x0403u
#define USBD_AUDIO_TERMINAL_TYPE_ECHO_SUP_SPEAKERPHONE 0x0404u
#define USBD_AUDIO_TERMINAL_TYPE_ECHO_CANCEL_SPEAKERPHONE 0x0405u
/* Telephony Terminal types. */
#define USBD_AUDIO_TERMINAL_TYPE_PHONELINE 0x0501u
#define USBD_AUDIO_TERMINAL_TYPE_TEL 0x0502u
#define USBD_AUDIO_TERMINAL_TYPE_DOWN_LINE_PHONE 0x0503u
/* External Terminal types. */
#define USBD_AUDIO_TERMINAL_TYPE_ANALOG_CONNECTOR 0x0601u
#define USBD_AUDIO_TERMINAL_TYPE_DIGITAL_IF 0x0602u
#define USBD_AUDIO_TERMINAL_TYPE_LINE_CONNECTOR 0x0603u
#define USBD_AUDIO_TERMINAL_TYPE_LEGACY_CONNECTOR 0x0604u
#define USBD_AUDIO_TERMINAL_TYPE_SPDIF_IF 0x0605u
#define USBD_AUDIO_TERMINAL_TYPE_1394_DA_STREAM 0x0606u
#define USBD_AUDIO_TERMINAL_TYPE_1394_DV_STREAM 0x0607u
/* Embedded Function Terminal types. */
#define USBD_AUDIO_TERMINAL_TYPE_LOW_CALIBRATION_NOISE_SRC 0x0701u
#define USBD_AUDIO_TERMINAL_TYPE_EQUALIZATION_NOISE 0x0702u
#define USBD_AUDIO_TERMINAL_TYPE_CD_PLAYER 0x0703u
#define USBD_AUDIO_TERMINAL_TYPE_DAT 0x0704u
#define USBD_AUDIO_TERMINAL_TYPE_DCC 0x0705u
#define USBD_AUDIO_TERMINAL_TYPE_MINIDISK 0x0706u
#define USBD_AUDIO_TERMINAL_TYPE_ANALOG_TAPE 0x0707u
#define USBD_AUDIO_TERMINAL_TYPE_PHONOGRAPH 0x0708u
#define USBD_AUDIO_TERMINAL_TYPE_VCR 0x0709u
#define USBD_AUDIO_TERMINAL_TYPE_VIDEO_DISC 0x070Au
#define USBD_AUDIO_TERMINAL_TYPE_DVD 0x070Bu
#define USBD_AUDIO_TERMINAL_TYPE_TC_TUNER 0x070Cu
#define USBD_AUDIO_TERMINAL_TYPE_SATELLITE_RECEIVER 0x070Du
#define USBD_AUDIO_TERMINAL_TYPE_CABLE_TUNER 0x070Eu
#define USBD_AUDIO_TERMINAL_TYPE_DSS 0x070Fu
#define USBD_AUDIO_TERMINAL_TYPE_RADIO_RECEIVER 0x0710u
#define USBD_AUDIO_TERMINAL_TYPE_RADIO_TRANSMITTER 0x0711u
#define USBD_AUDIO_TERMINAL_TYPE_MULTITRACK_RECORDER 0x0712u
#define USBD_AUDIO_TERMINAL_TYPE_SYNTHESIZER 0x0713u
/* General terminal type define. */
#define USBD_AUDIO_INVALID_ID 0u
#define USBD_AUDIO_TERMINAL_LINK_MAX_NBR DEF_INT_08U_MAX_VAL
#define USBD_AUDIO_TERMINAL_LINK_NONE 0u
/*
*********************************************************************************************************
* LOG CH SPACIAL LOCATION
* Note(s) : (1) See 'USB Device Class Definition for Audio Devices, Release 1.0, March 18, 1998',
* section 3.7.2.3 for more details about logical channel spacial locations.
*********************************************************************************************************
*/
#define USBD_AUDIO_SPATIAL_LOCATION_LEFT_FRONT DEF_BIT_00
#define USBD_AUDIO_SPATIAL_LOCATION_RIGHT_FRONT DEF_BIT_01
#define USBD_AUDIO_SPATIAL_LOCATION_CENTER_FRONT DEF_BIT_02
#define USBD_AUDIO_SPATIAL_LOCATION_LFE DEF_BIT_03
#define USBD_AUDIO_SPATIAL_LOCATION_LEFT_SURROUND DEF_BIT_04
#define USBD_AUDIO_SPATIAL_LOCATION_RIGHT_SURROUND DEF_BIT_05
#define USBD_AUDIO_SPATIAL_LOCATION_LEFT_CENTER DEF_BIT_06
#define USBD_AUDIO_SPATIAL_LOCATION_RIGHT_CENTER DEF_BIT_07
#define USBD_AUDIO_SPATIAL_LOCATION_SURROUND DEF_BIT_08
#define USBD_AUDIO_SPATIAL_LOCATION_SIDE_LEFT DEF_BIT_09
#define USBD_AUDIO_SPATIAL_LOCATION_SIDE_RIGHT DEF_BIT_10
#define USBD_AUDIO_SPATIAL_LOCATION_TOP DEF_BIT_11
/* General spatial location define. */
#define USBD_AUDIO_LOG_CH_NBR_MAX 10u
#define USBD_AUDIO_LOG_CH_CFG_MAX 11u
#define USBD_AUDIO_MONO 1u
#define USBD_AUDIO_STEREO 2u
#define USBD_AUDIO_5_1 6u
#define USBD_AUDIO_7_1 8u
#define USBD_AUDIO_LOG_CH_NBR_1 1u
#define USBD_AUDIO_LOG_CH_NBR_2 2u
#define USBD_AUDIO_LOG_CH_NBR_3 3u
#define USBD_AUDIO_LOG_CH_NBR_4 4u
#define USBD_AUDIO_LOG_CH_NBR_5 5u
#define USBD_AUDIO_LOG_CH_NBR_6 6u
#define USBD_AUDIO_LOG_CH_NBR_7 7u
#define USBD_AUDIO_LOG_CH_NBR_8 8u
#define USBD_AUDIO_LOG_CH_NBR_9 9u
#define USBD_AUDIO_LOG_CH_NBR_10 10u
/*
*********************************************************************************************************
* AUDIO DATA FMT TYPE I
*
* Note(s) : (1) See 'USB Device Class Definition for Audio Data Formats, Release 1.0, March 18, 1998',
* section 2.2.6 and appendix A.1.1 for more details about Type I Audio Data Formats.
*********************************************************************************************************
*/
/* Data format type. */
#define USBD_AUDIO_DATA_FMT_TYPE_I_UNDEFINED 0u
#define USBD_AUDIO_DATA_FMT_TYPE_I_PCM 1u
#define USBD_AUDIO_DATA_FMT_TYPE_I_PCM8 2u
#define USBD_AUDIO_DATA_FMT_TYPE_I_IEEE_FLOAT 3u
#define USBD_AUDIO_DATA_FMT_TYPE_I_ALAW 4u
#define USBD_AUDIO_DATA_FMT_TYPE_I_MULAW 5u
/* Type I fmt characteristics. */
#define USBD_AUDIO_FMT_TYPE_I_SAM_FREQ_CONTINUOUS 0u
#define USBD_AUDIO_FMT_TYPE_I_SUBFRAME_SIZE_1 1u
#define USBD_AUDIO_FMT_TYPE_I_SUBFRAME_SIZE_2 2u
#define USBD_AUDIO_FMT_TYPE_I_SUBFRAME_SIZE_3 3u
#define USBD_AUDIO_FMT_TYPE_I_SUBFRAME_SIZE_4 4u
#define USBD_AUDIO_FMT_TYPE_I_BIT_RESOLUTION_8 8u
#define USBD_AUDIO_FMT_TYPE_I_BIT_RESOLUTION_16 16u
#define USBD_AUDIO_FMT_TYPE_I_BIT_RESOLUTION_24 24u
#define USBD_AUDIO_FMT_TYPE_I_BIT_RESOLUTION_32 32u
#define USBD_AUDIO_FMT_TYPE_I_SAMFREQ_8KHZ 8000u
#define USBD_AUDIO_FMT_TYPE_I_SAMFREQ_11KHZ 11025u
#define USBD_AUDIO_FMT_TYPE_I_SAMFREQ_16KHZ 16000u
#define USBD_AUDIO_FMT_TYPE_I_SAMFREQ_22KHZ 22050u
#define USBD_AUDIO_FMT_TYPE_I_SAMFREQ_32KHZ 32000u
#define USBD_AUDIO_FMT_TYPE_I_SAMFREQ_44_1KHZ 44100u
#define USBD_AUDIO_FMT_TYPE_I_SAMFREQ_48KHZ 48000u
#define USBD_AUDIO_FMT_TYPE_I_SAMFREQ_88_2KHZ 88200u
#define USBD_AUDIO_FMT_TYPE_I_SAMFREQ_96KHZ 96000u
#define USBD_AUDIO_FMT_TYPE_I_SAMFREQ_MAX USBD_AUDIO_FMT_TYPE_I_SAMFREQ_96KHZ
/*
*********************************************************************************************************
* TERMINAL & UNIT'S CONTROLS
*
* Note(s) : (1) See 'USB Device Class Definition for Audio Devices, Release 1.0, March 18, 1998',
* section 5.2.2.1.3.1 for more details about Copy Protect Control used by Terminals.
*
* (2) See 'USB Device Class Definition for Audio Devices, Release 1.0, March 18, 1998',
* Table 4-7 for more details about Feature Unit Controls.
*
* (a) See See 'USB Device Class Definition for Audio Devices, Release 1.0, March 18, 1998',
* Table 5-18 for more details about volume value.
*
* (3) See 'USB Device Class Definition for Audio Devices, Release 1.0, March 18, 1998',
* section 4.3.2.3 for more details about Mixer Unit Controls.
*********************************************************************************************************
*/
/* Terminal Copy Pro Ctrl (see Note #1). */
#define USBD_AUDIO_CPL_NONE 255u
#define USBD_AUDIO_CPL0 0u
#define USBD_AUDIO_CPL1 1u
#define USBD_AUDIO_CPL2 2u
/* Feature Unit Controls bitmap (see Note #2). */
#define USBD_AUDIO_FU_CTRL_NONE DEF_BIT_NONE
#define USBD_AUDIO_FU_CTRL_MUTE DEF_BIT_00
#define USBD_AUDIO_FU_CTRL_VOL DEF_BIT_01
#define USBD_AUDIO_FU_CTRL_BASS DEF_BIT_02
#define USBD_AUDIO_FU_CTRL_MID DEF_BIT_03
#define USBD_AUDIO_FU_CTRL_TREBLE DEF_BIT_04
#define USBD_AUDIO_FU_CTRL_GRAPHIC_EQUALIZER DEF_BIT_05
#define USBD_AUDIO_FU_CTRL_AUTO_GAIN DEF_BIT_06
#define USBD_AUDIO_FU_CTRL_DELAY DEF_BIT_07
#define USBD_AUDIO_FU_CTRL_BASS_BOOST DEF_BIT_08
#define USBD_AUDIO_FU_CTRL_LOUDNESS DEF_BIT_09
/* See Note #2a. */
#define USBD_AUDIO_FU_CTRL_VOL_SILENCE 0x8000u
/* Graphic Equalizer frequency bands. */
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_14 DEF_BIT_00
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_15 DEF_BIT_01
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_16 DEF_BIT_02
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_17 DEF_BIT_03
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_18 DEF_BIT_04
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_19 DEF_BIT_05
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_20 DEF_BIT_06
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_21 DEF_BIT_07
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_22 DEF_BIT_08
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_23 DEF_BIT_09
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_24 DEF_BIT_10
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_25 DEF_BIT_11
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_26 DEF_BIT_12
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_27 DEF_BIT_13
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_28 DEF_BIT_14
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_29 DEF_BIT_15
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_30 DEF_BIT_16
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_31 DEF_BIT_17
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_32 DEF_BIT_18
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_33 DEF_BIT_19
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_34 DEF_BIT_20
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_35 DEF_BIT_21
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_36 DEF_BIT_22
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_37 DEF_BIT_23
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_38 DEF_BIT_24
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_39 DEF_BIT_25
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_40 DEF_BIT_26
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_41 DEF_BIT_27
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_42 DEF_BIT_28
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_43 DEF_BIT_29
#define USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_ALL 0x3FFFFFFFu
#define USBD_AUDIO_FU_OCTAVE_EQUALIZER_BANDS (USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_15 | \
USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_18 | \
USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_21 | \
USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_24 | \
USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_27 | \
USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_30 | \
USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_33 | \
USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_36 | \
USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_39 | \
USBD_AUDIO_FU_GRAPHIC_EQUALIZER_BAND_42)
/* Mixer Unit Controls (see Note #3). */
#define USBD_AUDIO_MU_CTRL_NONE DEF_BIT_NONE
/*
*********************************************************************************************************
* ISOC AUDIO DATA EP INFO
*
* Note(s) : (1) See 'USB Device Class Definition for Audio Devices, Release 1.0, March 18, 1998',
* Table 4-21 for more details about Endpoint Controls.
*********************************************************************************************************
*/
/* EP ctrl (see Note #1). */
#define USBD_AUDIO_AS_EP_CTRL_NONE DEF_BIT_NONE
#define USBD_AUDIO_AS_EP_CTRL_SAMPLING_FREQ DEF_BIT_00
#define USBD_AUDIO_AS_EP_CTRL_PITCH DEF_BIT_01
#define USBD_AUDIO_AS_EP_CTRL_MAX_PKT_ONLY DEF_BIT_07
/* bLockDelayUnits (see Note #1). */
#define USBD_AUDIO_AS_EP_LOCK_DLY_UND DEF_BIT_NONE
#define USBD_AUDIO_AS_EP_LOCK_DLY_MS DEF_BIT_01
#define USBD_AUDIO_AS_EP_LOCK_DLY_PCM DEF_BIT_02
/*
*********************************************************************************************************
*********************************************************************************************************
* DATA TYPES
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* AUDIO STREAMING HANDLE
*
* Note(s) : (1) The audio handle is a 16-bit wide value that contains the AudioStreaming interface index:
*
* MSB LSB
* ----------------------------------------------------------------------------------
* | POSITION | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
* ----------------------------------------------------------------------------------
* | USAGE | Validate Count | AS IF Index |
* ----------------------------------------------------------------------------------
*********************************************************************************************************
*/
typedef void *USBD_AUDIO_AS_IF_HANDLE; /* Handle for Audio Transport & app. */
typedef CPU_INT16U USBD_AUDIO_AS_HANDLE; /* Handle for Audio Transport/Processing & codec drv... */
/* ...see Note #1. */
/*
*********************************************************************************************************
* FORWARD DECLARATIONS
*********************************************************************************************************
*/
typedef struct usbd_audio_drv USBD_AUDIO_DRV;
/*
*********************************************************************************************************
* AUDIO EVENT CALLBACKS
*********************************************************************************************************
*/
typedef const struct usbd_audio_event_fncts {
void (*Conn) (CPU_INT08U dev_nbr, /* Notify app that cfg is active. */
CPU_INT08U cfg_nbr,
CPU_INT08U terminal_id,
USBD_AUDIO_AS_HANDLE as_handle);
void (*Disconn)(CPU_INT08U dev_nbr, /* Notify class that cfg is not active. */
CPU_INT08U cfg_nbr,
CPU_INT08U terminal_id,
USBD_AUDIO_AS_HANDLE as_handle);
} USBD_AUDIO_EVENT_FNCTS;
/*
*********************************************************************************************************
* AUDIO STATISTICS
*********************************************************************************************************
*/
#if (USBD_AUDIO_CFG_STAT_EN == DEF_ENABLED)
typedef struct usbd_audio_stat {
CPU_INT32U AudioProc_Playback_NbrIsocRxSubmitSuccess; /* Nbr of isoc OUT xfer submitted w/ success to core. */
CPU_INT32U AudioProc_Playback_NbrIsocRxSubmitErr; /* Nbr of isoc OUT xfer submitted w/ err. */
CPU_INT32U AudioProc_Playback_NbrIsocRxSubmitPlaybackTask; /* Nbr of isoc OUT xfer submitted by playback task. */
CPU_INT32U AudioProc_Playback_NbrIsocRxSubmitCoreTask; /* Nbr of isoc OUT xfer submitted by core task. */
CPU_INT32U AudioProc_Playback_NbrIsocRxCmpl; /* Nbr of isoc OUT xfer completed w/ or w/o err. */
CPU_INT32U AudioProc_Playback_NbrIsocRxCmplErrOther; /* Nbr of isoc OUT xfer completed with error. */
CPU_INT32U AudioProc_Playback_NbrIsocRxCmplErrAbort; /* Nbr of isoc OUT xfer completed with err EP_ABORT. */
CPU_INT32U AudioProc_Playback_NbrIsocRxBufNotAvail; /* Nbr of times no buf avail. */
CPU_INT32U AudioProc_Playback_NbrReqPostPlaybackTask; /* Nbr of req submitted to playback task. */
CPU_INT32U AudioProc_Playback_NbrReqPendPlaybackTask; /* Nbr of req gotten by playback task. */
CPU_INT32U AudioProc_Playback_NbrIsocRxOngoingCnt; /* Nbr of ongoing isoc OUT xfers. */
#if (USBD_AUDIO_CFG_PLAYBACK_FEEDBACK_EN == DEF_ENABLED)
CPU_INT32U AudioProc_Playback_SynchNbrBufGet; /* Nbr of synch buf gotten from pool. */
CPU_INT32U AudioProc_Playback_SynchNbrBufFree; /* Nbr of synch buf returned to pool. */
CPU_INT32U AudioProc_Playback_SynchNbrBufNotAvail; /* Nbr of synch buf not avail. */
CPU_INT32U AudioProc_Playback_SynchNbrSafeZone; /* Nbr of normal situations without corr. */
CPU_INT32U AudioProc_Playback_SynchNbrOverrun; /* Nbr of overrun situations requiring corr. */
CPU_INT32U AudioProc_Playback_SynchNbrLightOverrun; /* Nbr of light overrun situations. */
CPU_INT32U AudioProc_Playback_SynchNbrHeavyOverrun; /* Nbr of heavy overrun situations. */
CPU_INT32U AudioProc_Playback_SynchNbrUnderrun; /* Nbr of underrun situations requiring corr. */
CPU_INT32U AudioProc_Playback_SynchNbrLightUnderrun; /* Nbr of light underrun situations. */
CPU_INT32U AudioProc_Playback_SynchNbrHeavyUnderrun; /* Nbr of heavy underrun situations. */
CPU_INT32U AudioProc_Playback_SynchNbrRefreshPeriodReached;/* Nbr of times refresh period is reached. */
CPU_INT32U AudioProc_Playback_SynchNbrIsocTxSubmitted; /* Nbr of isoc IN xfer submitted to core. */
CPU_INT32U AudioProc_Playback_SynchNbrIsocTxCmpl; /* Nbr of isoc IN xfer completed. */
#endif
CPU_INT32U AudioProc_Record_NbrIsocTxSubmitSuccess; /* Nbr of isoc IN xfer submitted w/ success to core. */
CPU_INT32U AudioProc_Record_NbrIsocTxSubmitErr; /* Nbr of isoc IN xfer submitted w/ err. */
CPU_INT32U AudioProc_Record_NbrIsocTxSubmitRecordTask; /* Nbr of isoc IN xfer submitted by record task. */
CPU_INT32U AudioProc_Record_NbrIsocTxSubmitCoreTask; /* Nbr of isoc IN xfer submitted by core task. */
CPU_INT32U AudioProc_Record_NbrIsocTxCmpl; /* Nbr of isoc IN xfer completed w/ or w/o err. */
CPU_INT32U AudioProc_Record_NbrIsocTxCmplErrOther; /* Nbr of isoc IN xfer completed with err. */
CPU_INT32U AudioProc_Record_NbrIsocTxCmplErrAbort; /* Nbr of isoc IN xfer completed with err EP_ABORT. */
CPU_INT32U AudioProc_Record_NbrIsocTxBufNotAvail; /* Nbr of times no buf avail. */
CPU_INT32U AudioProc_Record_NbrReqPostRecordTask; /* Nbr of ready buf signaled to record task. */
CPU_INT32U AudioProc_Record_NbrReqPendRecordTask; /* Nbr of ready buf signals received by record task. */
CPU_INT32U AudioProc_RingBufQ_NbrProducerStartIxCatchUp; /* Nbr of catch of prev and/or nxt ix by ProducerStart. */
CPU_INT32U AudioProc_RingBufQ_NbrProducerEndIxCatchUp; /* Nbr of catch of prev and/or nxt ix by ProducerEnd. */
CPU_INT32U AudioProc_RingBufQ_NbrConsumerStartIxCatchUp; /* Nbr of catch of prev and/or nxt ix by ConsumerStart. */
CPU_INT32U AudioProc_RingBufQ_NbrConsumerEndIxCatchUp; /* Nbr of catch of prev and/or nxt ix by ConsumerEnd. */
CPU_INT32U AudioProc_RingBufQ_NbrProducerStartIxWrapAround;/* Nbr of wrap-around for ix ProducerStart. */
CPU_INT32U AudioProc_RingBufQ_NbrProducerEndIxWrapAround; /* Nbr of wrap-around for ix ProducerEnd. */
CPU_INT32U AudioProc_RingBufQ_NbrConsumerStartIxWrapAround;/* Nbr of wrap-around for ix ConsumerStart. */
CPU_INT32U AudioProc_RingBufQ_NbrConsumerEndIxWrapAround; /* Nbr of wrap-around for ix ConsumerEnd. */
CPU_INT32U AudioProc_RingBufQ_NbrBufDescInUse; /* Nbr of buf desc in use by playback or record. */
CPU_INT32U AudioProc_RingBufQ_NbrErr; /* Nbr of err while getting buf from ring buf queue. */
CPU_INT32U AudioProc_NbrStreamOpen; /* Nbr of stream openings. */
CPU_INT32U AudioProc_NbrStreamClosed; /* Nbr of stream closings. */
#if (((USBD_AUDIO_CFG_PLAYBACK_CORR_EN == DEF_ENABLED) && \
(USBD_AUDIO_CFG_PLAYBACK_EN == DEF_ENABLED)) || \
((USBD_AUDIO_CFG_RECORD_CORR_EN == DEF_ENABLED) && \
(USBD_AUDIO_CFG_RECORD_EN == DEF_ENABLED)))
CPU_INT32U AudioProc_CorrNbrUnderrun; /* Nbr of underrun situations requiring stream corr. */
CPU_INT32U AudioProc_CorrNbrOverrun; /* Nbr of overrun situations requiring stream corr. */
CPU_INT32U AudioProc_CorrNbrSafeZone; /* Nbr of normal situations without stream corr. */
#endif
CPU_INT32U AudioDrv_Playback_DMA_NbrXferCmpl; /* Nbr of playback buf consumed by codec drv. */
CPU_INT32U AudioDrv_Playback_DMA_NbrSilenceBuf; /* Nbr of silence buf consumed by codec drv. */
CPU_INT32U AudioDrv_Record_DMA_NbrXferCmpl; /* Nbr of record buf produced by codec drv. */
CPU_INT32U AudioDrv_Record_DMA_NbrDummyBuf; /* Nbr of dummy buf used by codec drv because no... */
/* ...empty record buf avail. */
} USBD_AUDIO_STAT;
#endif
/*
*********************************************************************************************************
* TERMINAL CFG
*********************************************************************************************************
*/
typedef const struct usbd_audio_it_cfg { /* Input Terminal. */
CPU_INT16U TerminalType;
CPU_INT08U LogChNbr; /* Nbr of log output ch in Terminal Output. */
CPU_INT16U LogChCfg; /* Spatial location of log ch. */
CPU_BOOLEAN CopyProtEn; /* Dis or En Copy Protection. */
CPU_INT08U CopyProtLevel; /* Copy Protection Level. */
CPU_CHAR *StrPtr; /* Str describing IT. Obtained by Str Desc. */
} USBD_AUDIO_IT_CFG;
typedef const struct usbd_audio_ot_cfg { /* Output Terminal. */
CPU_INT16U TerminalType;
CPU_BOOLEAN CopyProtEn; /* Copy Protect Control enable. */
CPU_CHAR *StrPtr; /* Str describing OT. Obtained by Str Desc. */
} USBD_AUDIO_OT_CFG;
/*
*********************************************************************************************************
* UNIT CFG
*********************************************************************************************************
*/
typedef const struct usbd_audio_fu_cfg { /* Feature Unit. */
CPU_INT08U LogChNbr; /* Nbr of log ch. */
CPU_INT16U *LogChCtrlPtr; /* Ptr to Feature Unit Controls tbl. */
CPU_CHAR *StrPtr; /* Str describing FU. Obtained by Str Desc. */
} USBD_AUDIO_FU_CFG;
typedef const struct usbd_audio_mu_cfg { /* Mixer Unit. */
CPU_INT08U NbrInPins; /* Nbr of Input Pins. */
CPU_INT08U LogInChNbr; /* Nbr of log input ch. */
CPU_INT08U LogOutChNbr; /* Nbr of log output ch. */
CPU_INT16U LogOutChCfg; /* Spatial location of log output ch. */
CPU_CHAR *StrPtr; /* Str describing MU. Obtained by Str Desc. */
} USBD_AUDIO_MU_CFG;
typedef const struct usbd_audio_su_cfg { /* Selector Unit. */
CPU_INT08U NbrInPins; /* Nbr of Input Pins. */
CPU_CHAR *StrPtr; /* Str describing SU. Obtained by Str Desc. */
} USBD_AUDIO_SU_CFG;
/*
*********************************************************************************************************
* AUDIO STREAMING CFG
*
* Note(s) : (1) This structure contains relevant fields for Type I data format only. Type II and III are
* not supported.
*
* (2) The Delay holds a value that is a measure for the delay that is introduced in the audio
* data stream due to internal processing of the signal within the audio function. The value
* of the delay is expressed in number of frames (i.e. in ms).
* See 'USB Device Class Definition for Audio Devices, Release 1.0, March 18, 1998',
* section 4.5.2 for more details about class-specific AudioStreaming descriptor.
*
* (3) Type I format type descriptor reports the sampling frequency capabilities of the
* isochronous data endpoint with the field 'bSamFreqType'. The possible values are:
*
* (a) USBD_AUDIO_FMT_TYPE_I_SAM_FREQ_CONTINUOUS Continuous sampling frequency
*
* (b) 1..255 number of discrete sampling frequencies
* supported by the isochronous data endpoint.
*
* (4) These fields relate to 'bLockDelayUnits' and 'wLockDelay' fields of Class-Specific AS
* Isochronous Audio Data Endpoint Descriptor. 'bLockDelayUnits' and 'wLockDelay' indicate
* to the Host how long it takes for the clock recovery circuitry of this endpoint to lock
* and reliably produce or consume the audio data stream. Only applicable for synchronous
* and adaptive endpoints.
* See 'USB Device Class Definition for Audio Devices, Release 1.0, March 18, 1998',
* section 4.6.1.2 for more details about class-specific endpoint descriptor.
*********************************************************************************************************
*/
typedef const struct usbd_audio_as_alt_cfg { /* AudioStreaming alt IF (see Note #1). */
/* AS IF RELATED: */
CPU_INT08U Dly; /* See Note #2. */
CPU_INT16U FmtTag; /* Audio data fmt used to comm with this IF. */
/* TYPE I FMT RELATED: */
CPU_INT08U NbrCh; /* Nbr of physical ch in the audio data stream. */
CPU_INT08U SubframeSize; /* Nbr of bytes occupied by one audio subframe. */
CPU_INT08U BitRes; /* Effectively used bits in an audio subframe. */
CPU_INT08U NbrSamplingFreq; /* Nbr of sampling frequencies (see Note #3). */
CPU_INT32U LowerSamplingFreq; /* Lower bound in Hz of the sampling freq range. */
CPU_INT32U UpperSamplingFreq; /* Upper bound in Hz of the sampling freq range. */
CPU_INT32U *SamplingFreqTblPtr; /* Tbl of discrete sampling frequencies. */
/* AS EP RELATED: */
CPU_BOOLEAN EP_DirIn; /* Flag indicating direction IN or OUT. */
CPU_INT08U EP_SynchType; /* Synchronization type supported by Isoc EP. */
/* CLASS SPECIFIC EP RELATED: */
CPU_INT08U EP_Attrib; /* Class specific controls supported by Isoc EP. */
CPU_INT08U EP_LockDlyUnits; /* See Note #4. */
CPU_INT16U EP_LockDly; /* See Note #4. */
/* SYNCH EP RELATED: */
CPU_INT08U EP_SynchRefresh; /* Refresh Rate */
} USBD_AUDIO_AS_ALT_CFG;
typedef const struct usbd_audio_as_if_cfg { /* AudioStreaming IF. */
USBD_AUDIO_AS_ALT_CFG **AS_CfgPtrTbl; /* Tbl of ptr to AS IF alternate settings Config. */
CPU_INT08U AS_CfgAltSettingNbr; /* Nbr of alternate settings for given AS IF. */
} USBD_AUDIO_AS_IF_CFG;
typedef const struct usbd_audio_stream_cfg { /* General audio stream cfg. */
CPU_INT16U MaxBufNbr; /* Max buf nbr. */
CPU_INT16U CorrPeriodMs; /* Period at which corr must be monitored. */
CPU_INT16U ExtraPktTx; /* For extended transfers */
} USBD_AUDIO_STREAM_CFG;
/*
*********************************************************************************************************
* PLAYBACK CORRECTION CALLBACK
*
* Note(s) : (1) Application callback used for custom playback correction algorithm provided by user
* if available.
*********************************************************************************************************
*/
typedef CPU_INT16U (*USBD_AUDIO_PLAYBACK_CORR_FNCT)(USBD_AUDIO_AS_ALT_CFG *p_as_alt_cfg,
CPU_BOOLEAN is_underrun,
void *p_buf,
CPU_INT16U buf_len_cur,
CPU_INT16U buf_len_total,
USBD_ERR *p_err);
/*
*********************************************************************************************************
* STATISTICS CALLBACK
*
* Note(s) : (1) Statistics callback called upon device connection. It allows the user to get audio
* statistics for a given AudioStreaming.
*********************************************************************************************************
*/
#if (USBD_AUDIO_CFG_STAT_EN == DEF_ENABLED)
typedef void (*USBD_AUDIO_AS_IF_STAT_FNCT)(CPU_INT08U class_nbr,
CPU_INT08U terminal_id,
USBD_AUDIO_STAT *p_as_stat);
#endif
/*
*********************************************************************************************************
* AUDIO DRIVER APIs
*********************************************************************************************************
*/
/* -------------------- COMMON API -------------------- */
typedef struct usbd_audio_drv_common_api {
void (*Init) (USBD_AUDIO_DRV *p_audio_drv,
USBD_ERR *p_err);
} USBD_AUDIO_DRV_COMMON_API;
/* -------------------- AC OT API --------------------- */
typedef struct usbd_audio_drv_ac_ot_api {
CPU_BOOLEAN (*OT_CopyProtSet) (USBD_AUDIO_DRV *p_audio_drv,
CPU_INT08U terminal_id,
CPU_INT08U copy_prot_level);
} USBD_AUDIO_DRV_AC_OT_API;
/* -------------------- AC FU API --------------------- */
typedef struct usbd_audio_drv_ac_fu_api {
CPU_BOOLEAN (*FU_MuteManage) (USBD_AUDIO_DRV *p_audio_drv,
CPU_INT08U unit_id,
CPU_INT08U log_ch_nbr,
CPU_BOOLEAN set_en,
CPU_BOOLEAN *p_mute);
CPU_BOOLEAN (*FU_VolManage) (USBD_AUDIO_DRV *p_audio_drv,
CPU_INT08U req,
CPU_INT08U unit_id,
CPU_INT08U log_ch_nbr,
CPU_INT16U *p_vol);
CPU_BOOLEAN (*FU_BassManage) (USBD_AUDIO_DRV *p_audio_drv,
CPU_INT08U req,
CPU_INT08U unit_id,
CPU_INT08U log_ch_nbr,
CPU_INT08U *p_bass);
CPU_BOOLEAN (*FU_MidManage) (USBD_AUDIO_DRV *p_audio_drv,
CPU_INT08U req,
CPU_INT08U unit_id,
CPU_INT08U log_ch_nbr,
CPU_INT08U *p_mid);
CPU_BOOLEAN (*FU_TrebleManage) (USBD_AUDIO_DRV *p_audio_drv,
CPU_INT08U req,
CPU_INT08U unit_id,
CPU_INT08U log_ch_nbr,
CPU_INT08U *p_treble);
CPU_BOOLEAN (*FU_GraphicEqualizerManage) (USBD_AUDIO_DRV *p_audio_drv,
CPU_INT08U req,
CPU_INT08U unit_id,
CPU_INT08U log_ch_nbr,
CPU_INT08U nbr_bands_present,
CPU_INT32U *p_bm_bands_present,
CPU_INT08U *p_buf);
CPU_BOOLEAN (*FU_AutoGainManage) (USBD_AUDIO_DRV *p_audio_drv,
CPU_INT08U unit_id,
CPU_INT08U log_ch_nbr,
CPU_BOOLEAN set_en,
CPU_BOOLEAN *p_auto_gain);
CPU_BOOLEAN (*FU_DlyManage) (USBD_AUDIO_DRV *p_audio_drv,
CPU_INT08U req,
CPU_INT08U unit_id,
CPU_INT08U log_ch_nbr,
CPU_INT16U *p_dly);
CPU_BOOLEAN (*FU_BassBoostManage) (USBD_AUDIO_DRV *p_audio_drv,
CPU_INT08U unit_id,
CPU_INT08U log_ch_nbr,
CPU_BOOLEAN set_en,
CPU_BOOLEAN *p_bass_boost);
CPU_BOOLEAN (*FU_LoudnessManage) (USBD_AUDIO_DRV *p_audio_drv,
CPU_INT08U unit_id,
CPU_INT08U log_ch_nbr,
CPU_BOOLEAN set_en,
CPU_BOOLEAN *p_loudness);
} USBD_AUDIO_DRV_AC_FU_API;
/* -------------------- AC MU API --------------------- */
typedef struct usbd_audio_drv_ac_mu_api {
CPU_BOOLEAN (*MU_CtrlManage) (USBD_AUDIO_DRV *p_audio_drv,
CPU_INT08U req,
CPU_INT08U unit_id,
CPU_INT08U log_in_ch_nbr,
CPU_INT08U log_out_ch_nbr,
CPU_INT16U *p_ctrl);
} USBD_AUDIO_DRV_AC_MU_API;
/* -------------------- AC SU API --------------------- */
typedef struct usbd_audio_drv_ac_su_api {
CPU_BOOLEAN (*SU_InPinManage) (USBD_AUDIO_DRV *p_audio_drv,
CPU_INT08U unit_id,
CPU_BOOLEAN set_en,
CPU_INT08U *p_in_pin_nbr);
} USBD_AUDIO_DRV_AC_SU_API;
/* ---------------------- AS API ---------------------- */
typedef struct usbd_audio_drv_as_api {
CPU_BOOLEAN (*AS_SamplingFreqManage) (USBD_AUDIO_DRV *p_audio_drv,
CPU_INT08U terminal_id_link,
CPU_BOOLEAN set_en,
CPU_INT32U *p_sampling_freq);
CPU_BOOLEAN (*AS_PitchManage) (USBD_AUDIO_DRV *p_audio_drv,
CPU_INT08U terminal_id_link,
CPU_BOOLEAN set_en,
CPU_BOOLEAN *p_pitch);
CPU_BOOLEAN (*StreamStart) (USBD_AUDIO_DRV *p_audio_drv,
USBD_AUDIO_AS_HANDLE as_handle,
CPU_INT08U terminal_id_link);
CPU_BOOLEAN (*StreamStop) (USBD_AUDIO_DRV *p_audio_drv,
CPU_INT08U terminal_id_link);
void (*StreamRecordRx) (USBD_AUDIO_DRV *p_audio_drv,
CPU_INT08U terminal_id_link,
void *p_buf,
CPU_INT16U *p_buf_len,
USBD_ERR *p_err);
void (*StreamPlaybackTx) (USBD_AUDIO_DRV *p_audio_drv,
CPU_INT08U terminal_id_link,
void *p_buf,
CPU_INT16U buf_len,
USBD_ERR *p_err);
} USBD_AUDIO_DRV_AS_API;
/*
*********************************************************************************************************
* AUDIO DRIVER DATA TYPE
*********************************************************************************************************
*/
struct usbd_audio_drv {
void *DataPtr;
};
/*
*********************************************************************************************************
*********************************************************************************************************
* GLOBAL VARIABLES
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*********************************************************************************************************
* MACRO'S
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*********************************************************************************************************
*/
void USBD_Audio_Init ( CPU_INT16U msg_qty,
USBD_ERR *p_err);
CPU_INT08U USBD_Audio_Add ( CPU_INT08U entity_cnt,
const USBD_AUDIO_DRV_COMMON_API *p_audio_drv_common_api,
const USBD_AUDIO_EVENT_FNCTS *p_audio_app_fnct,
USBD_ERR *p_err);
void USBD_Audio_CfgAdd ( CPU_INT08U class_nbr,
CPU_INT08U dev_nbr,
CPU_INT08U cfg_nbr,
USBD_ERR *p_err);
CPU_BOOLEAN USBD_Audio_IsConn ( CPU_INT08U class_nbr);
CPU_INT08U USBD_Audio_IT_Add ( CPU_INT08U class_nbr,
const USBD_AUDIO_IT_CFG *p_it_cfg,
USBD_ERR *p_err);
CPU_INT08U USBD_Audio_OT_Add ( CPU_INT08U class_nbr,
const USBD_AUDIO_OT_CFG *p_ot_cfg,
const USBD_AUDIO_DRV_AC_OT_API *p_ot_api,
USBD_ERR *p_err);
CPU_INT08U USBD_Audio_FU_Add ( CPU_INT08U class_nbr,
const USBD_AUDIO_FU_CFG *p_fu_cfg,
const USBD_AUDIO_DRV_AC_FU_API *p_fu_api,
USBD_ERR *p_err);
#if (USBD_AUDIO_CFG_MAX_NBR_MU > 0u)
CPU_INT08U USBD_Audio_MU_Add ( CPU_INT08U class_nbr,
const USBD_AUDIO_MU_CFG *p_mu_cfg,
const USBD_AUDIO_DRV_AC_MU_API *p_mu_api,
USBD_ERR *p_err);
#endif
#if (USBD_AUDIO_CFG_MAX_NBR_SU > 0u)
CPU_INT08U USBD_Audio_SU_Add ( CPU_INT08U class_nbr,
const USBD_AUDIO_SU_CFG *p_su_cfg,
const USBD_AUDIO_DRV_AC_SU_API *p_su_api,
USBD_ERR *p_err);
#endif
void USBD_Audio_IT_Assoc ( CPU_INT08U class_nbr,
CPU_INT08U it_id,
CPU_INT08U assoc_terminal_id,
USBD_ERR *p_err);
void USBD_Audio_OT_Assoc ( CPU_INT08U class_nbr,
CPU_INT08U ot_id,
CPU_INT08U entity_id_src,
CPU_INT08U assoc_terminal_id,
USBD_ERR *p_err);
void USBD_Audio_FU_Assoc ( CPU_INT08U class_nbr,
CPU_INT08U fu_id,
CPU_INT08U src_entity_id,
USBD_ERR *p_err);
#if (USBD_AUDIO_CFG_MAX_NBR_MU > 0u)
void USBD_Audio_MU_Assoc ( CPU_INT08U class_nbr,
CPU_INT08U mu_id,
CPU_INT08U *p_src_entity_id,
CPU_INT08U nbr_input_pins,
USBD_ERR *p_err);
#endif
#if (USBD_AUDIO_CFG_MAX_NBR_SU > 0u)
void USBD_Audio_SU_Assoc ( CPU_INT08U class_nbr,
CPU_INT08U su_id,
CPU_INT08U *p_src_entity_id,
CPU_INT08U nbr_input_pins,
USBD_ERR *p_err);
#endif
#if (USBD_AUDIO_CFG_MAX_NBR_MU > 0u)
void USBD_Audio_MU_MixingCtrlSet( CPU_INT08U class_nbr,
CPU_INT08U mu_id,
CPU_INT08U log_in_ch_nbr,
CPU_INT08U log_out_ch_nbr,
USBD_ERR *p_err);
#endif
#if (USBD_AUDIO_CFG_PLAYBACK_EN == DEF_ENABLED) || \
(USBD_AUDIO_CFG_RECORD_EN == DEF_ENABLED)
USBD_AUDIO_AS_IF_HANDLE USBD_Audio_AS_IF_Cfg (const USBD_AUDIO_STREAM_CFG *p_stream_cfg,
const USBD_AUDIO_AS_IF_CFG *p_as_if_cfg,
const USBD_AUDIO_DRV_AS_API *p_as_api,
MEM_SEG *p_seg,
CPU_INT08U terminal_ID,
USBD_AUDIO_PLAYBACK_CORR_FNCT corr_callback,
USBD_ERR *p_err);
void USBD_Audio_AS_IF_Add ( CPU_INT08U class_nbr,
CPU_INT08U cfg_nbr,
USBD_AUDIO_AS_IF_HANDLE as_if_handle,
const USBD_AUDIO_AS_IF_CFG *p_as_if_cfg,
const CPU_CHAR *p_as_cfg_name,
USBD_ERR *p_err);
#endif
#if (USBD_AUDIO_CFG_STAT_EN == DEF_ENABLED)
USBD_AUDIO_STAT *USBD_Audio_AS_IF_StatGet ( USBD_AUDIO_AS_HANDLE as_handle);
#endif
/*
*********************************************************************************************************
*********************************************************************************************************
* CONFIGURATION ERRORS
*********************************************************************************************************
*********************************************************************************************************
*/
#ifndef USBD_AUDIO_CFG_PLAYBACK_EN
#error "USBD_AUDIO_CFG_PLAYBACK_EN not #define'd in 'usbd_cfg.h' [MUST be DEF_ENABLED or DEF_DISABLED]"
#endif
#if ((USBD_AUDIO_CFG_PLAYBACK_EN != DEF_ENABLED) && \
(USBD_AUDIO_CFG_PLAYBACK_EN != DEF_DISABLED))
#error "USBD_AUDIO_CFG_PLAYBACK_EN illegally #define'd in 'usbd_cfg.h' [MUST be DEF_ENABLED or DEF_DISABLED]"
#endif
#ifndef USBD_AUDIO_CFG_RECORD_EN
#error "USBD_AUDIO_CFG_RECORD_EN not #define'd in 'usbd_cfg.h' [MUST be DEF_ENABLED or DEF_DISABLED]"
#endif
#if ((USBD_AUDIO_CFG_RECORD_EN != DEF_ENABLED) && \
(USBD_AUDIO_CFG_RECORD_EN != DEF_DISABLED))
#error "USBD_AUDIO_CFG_RECORD_EN illegally #define'd in 'usbd_cfg.h' [MUST be DEF_ENABLED or DEF_DISABLED]"
#endif
#if (((USBD_AUDIO_CFG_PLAYBACK_EN == DEF_ENABLED) || \
(USBD_AUDIO_CFG_RECORD_EN == DEF_ENABLED)) && \
(USBD_CFG_EP_ISOC_EN == DEF_DISABLED))
#error "USBD_CFG_EP_ISOC_EN illegally #define'd in 'usbd_cfg.h' [MUST be DEF_ENABLED]"
#endif
#ifndef USBD_AUDIO_CFG_MAX_NBR_AIC
#error "USBD_AUDIO_CFG_MAX_NBR_AIC not #define'd in 'usbd_cfg.h' [MUST be >= 1]"
#endif
#if (USBD_AUDIO_CFG_MAX_NBR_AIC < 1u)
#error "USBD_AUDIO_CFG_MAX_NBR_AIC illegally #define'd in 'usbd_cfg.h' [MUST be >= 1]"
#endif
#ifndef USBD_AUDIO_CFG_MAX_NBR_CFG
#error "USBD_AUDIO_CFG_MAX_NBR_CFG not #define'd in 'usbd_cfg.h' [MUST be >= 1]"
#endif
#if (USBD_AUDIO_CFG_MAX_NBR_CFG < 1u)
#error "USBD_AUDIO_CFG_MAX_NBR_CFG illegally #define'd in 'usbd_cfg.h' [MUST be >= 1]"
#endif
#ifndef USBD_AUDIO_CFG_MAX_NBR_AS_IF_PLAYBACK
#error "USBD_AUDIO_CFG_MAX_NBR_AS_IF_PLAYBACK not #define'd in 'usbd_cfg.h' [MUST be >= 0]"
#endif
#if (USBD_AUDIO_CFG_MAX_NBR_AS_IF_PLAYBACK < 0u)
#error "USBD_AUDIO_CFG_MAX_NBR_AS_IF_PLAYBACK illegally #define'd in 'usbd_cfg.h' [MUST be >= 0]"
#endif
#ifndef USBD_AUDIO_CFG_MAX_NBR_AS_IF_RECORD
#error "USBD_AUDIO_CFG_MAX_NBR_AS_IF_RECORD not #define'd in 'usbd_cfg.h' [MUST be >= 0]"
#endif
#if (USBD_AUDIO_CFG_MAX_NBR_AS_IF_RECORD < 0u)
#error "USBD_AUDIO_CFG_MAX_NBR_AS_IF_RECORD illegally #define'd in 'usbd_cfg.h' [MUST be >= 0]"
#endif
#ifndef USBD_AUDIO_CFG_MAX_NBR_IF_ALT
#error "USBD_AUDIO_CFG_MAX_NBR_IF_ALT not #define'd in 'usbd_cfg.h' [MUST be >= 1]"
#endif
#if (USBD_AUDIO_CFG_MAX_NBR_IF_ALT < 1u)
#error "USBD_AUDIO_CFG_MAX_NBR_IF_ALT illegally #define'd in 'usbd_cfg.h' [MUST be >= 1]"
#endif
#ifndef USBD_AUDIO_CFG_MAX_NBR_IT
#error "USBD_AUDIO_CFG_MAX_NBR_IT not #define'd in 'usbd_cfg.h' [MUST be >= 1]"
#endif
#if (USBD_AUDIO_CFG_MAX_NBR_IT < 1u)
#error "USBD_AUDIO_CFG_MAX_NBR_IT illegally #define'd in 'usbd_cfg.h' [MUST be >= 1]"
#endif
#ifndef USBD_AUDIO_CFG_MAX_NBR_OT
#error "USBD_AUDIO_CFG_MAX_NBR_OT not #define'd in 'usbd_cfg.h' [MUST be >= 1]"
#endif
#if (USBD_AUDIO_CFG_MAX_NBR_OT < 1u)
#error "USBD_AUDIO_CFG_MAX_NBR_OT illegally #define'd in 'usbd_cfg.h' [MUST be >= 1]"
#endif
#ifndef USBD_AUDIO_CFG_MAX_NBR_FU
#error "USBD_AUDIO_CFG_MAX_NBR_FU not #define'd in 'usbd_cfg.h' [MUST be >= 1]"
#endif
#if (USBD_AUDIO_CFG_MAX_NBR_FU < 1u)
#error "USBD_AUDIO_CFG_MAX_NBR_FU illegally #define'd in 'usbd_cfg.h' [MUST be >= 1]"
#endif
#ifndef USBD_AUDIO_CFG_FU_MAX_CTRL
#error "USBD_AUDIO_CFG_FU_MAX_CTRL not #define'd in 'usbd_cfg.h' [MUST be DEF_ENABLED or DEF_DISABLED]"
#endif
#if ((USBD_AUDIO_CFG_FU_MAX_CTRL != DEF_ENABLED) && \
(USBD_AUDIO_CFG_FU_MAX_CTRL != DEF_DISABLED))
#error "USBD_AUDIO_CFG_FU_MAX_CTRL illegally #define'd in 'usbd_cfg.h' [MUST be DEF_ENABLED or DEF_DISABLED]"
#endif
#ifndef USBD_AUDIO_CFG_MAX_NBR_MU
#error "USBD_AUDIO_CFG_MAX_NBR_MU not #define'd in 'usbd_cfg.h' [MUST be >= 1]"
#elif (USBD_AUDIO_CFG_MAX_NBR_MU < 0u)
#error "USBD_AUDIO_CFG_MAX_NBR_MU illegally #define'd in 'usbd_cfg.h' [MUST be >= 0]"
#endif
#ifndef USBD_AUDIO_CFG_MAX_NBR_SU
#error "USBD_AUDIO_CFG_MAX_NBR_SU not #define'd in 'usbd_cfg.h' [MUST be >= 1]"
#endif
#if (USBD_AUDIO_CFG_MAX_NBR_SU < 0u)
#error "USBD_AUDIO_CFG_MAX_NBR_SU illegally #define'd in 'usbd_cfg.h' [MUST be >= 0]"
#endif
#ifndef USBD_AUDIO_CFG_CLASS_REQ_MAX_LEN
#error "USBD_AUDIO_CFG_CLASS_REQ_MAX_LEN not #define'd in 'usbd_cfg.h' [MUST be >= 4] "
#endif
#if (USBD_AUDIO_CFG_CLASS_REQ_MAX_LEN < 4u)
#error "USBD_AUDIO_CFG_CLASS_REQ_MAX_LEN illegally #define'd in 'usbd_cfg.h' [MUST be >= 4]"
#endif
#ifndef USBD_AUDIO_CFG_BUF_ALIGN_OCTETS
#error "USBD_AUDIO_CFG_BUF_ALIGN_OCTETS not #define'd in 'usbd_cfg.h' [MUST be >= 1]"
#endif
#ifndef USBD_AUDIO_CFG_PLAYBACK_CORR_EN
#error "USBD_AUDIO_CFG_PLAYBACK_CORR_EN not #define'd in 'usbd_cfg.h' [MUST be DEF_ENABLED or DEF_DISABLED]"
#endif
#if ((USBD_AUDIO_CFG_PLAYBACK_CORR_EN != DEF_ENABLED) && \
(USBD_AUDIO_CFG_PLAYBACK_CORR_EN != DEF_DISABLED))
#error "USBD_AUDIO_CFG_PLAYBACK_CORR_EN illegally #define'd in 'usbd_cfg.h' [MUST be DEF_ENABLED or DEF_DISABLED]"
#endif
#ifndef USBD_AUDIO_CFG_PLAYBACK_FEEDBACK_EN
#error "USBD_AUDIO_CFG_PLAYBACK_FEEDBACK_EN not #define'd in 'usbd_cfg.h' [MUST be DEF_ENABLED or DEF_DISABLED]"
#endif
#if ((USBD_AUDIO_CFG_PLAYBACK_FEEDBACK_EN != DEF_ENABLED) && \
(USBD_AUDIO_CFG_PLAYBACK_FEEDBACK_EN != DEF_DISABLED))
#error "USBD_AUDIO_CFG_PLAYBACK_FEEDBACK_EN illegally #define'd in 'usbd_cfg.h' [MUST be DEF_ENABLED or DEF_DISABLED]"
#endif
#ifndef USBD_AUDIO_CFG_RECORD_CORR_EN
#error "USBD_AUDIO_CFG_RECORD_CORR_EN not #define'd in 'usbd_cfg.h' [MUST be DEF_ENABLED or DEF_DISABLED]"
#endif
#if ((USBD_AUDIO_CFG_RECORD_CORR_EN != DEF_ENABLED) && \
(USBD_AUDIO_CFG_RECORD_CORR_EN != DEF_DISABLED))
#error "USBD_AUDIO_CFG_RECORD_CORR_EN illegally #define'd in 'usbd_cfg.h' [MUST be DEF_ENABLED or DEF_DISABLED]"
#endif
/*
*********************************************************************************************************
*********************************************************************************************************
* MODULE END
*********************************************************************************************************
*********************************************************************************************************
*/
#endif