1 /* 2 * Copyright (c) 2015 - 2016, Freescale Semiconductor, Inc. 3 * Copyright 2016 NXP 4 * All rights reserved. 5 * 6 * SPDX-License-Identifier: BSD-3-Clause 7 */ 8 9 #ifndef __USB_DEVICE_AUDIO_H__ 10 #define __USB_DEVICE_AUDIO_H__ 11 12 /*! 13 * @addtogroup usb_device_audio_drv 14 * @{ 15 */ 16 17 /******************************************************************************* 18 * Definitions 19 ******************************************************************************/ 20 /*! 21 * @name USB Audio class codes 22 * @{ 23 */ 24 25 /*! @brief Audio device class code */ 26 #define USB_DEVICE_CONFIG_AUDIO_CLASS_CODE (0x01U) 27 28 /*! @brief Audio device subclass code */ 29 #define USB_DEVICE_AUDIO_STREAM_SUBCLASS (0x02U) 30 #define USB_DEVICE_AUDIO_CONTROL_SUBCLASS (0x01U) 31 32 /*! @brief Audio device class-specific descriptor type */ 33 #define USB_DESCRIPTOR_TYPE_AUDIO_CS_INTERFACE (0x24U) 34 #define USB_DESCRIPTOR_TYPE_AUDIO_CS_ENDPOINT (0x25U) 35 36 /*! @brief Audio device class-specific control interface descriptor subtype */ 37 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_CONTROL_HEADER (0x01U) 38 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_CONTROL_INPUT_TERMINAL (0x02U) 39 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_CONTROL_OUTPUT_TERMINAL (0x03U) 40 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_CONTROL_MIXER_UNIT (0x04U) 41 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_CONTROL_SELECTOR_UNIT (0x05U) 42 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_CONTROL_FEATURE_UNIT (0x06U) 43 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) 44 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_CONTROL_EFFECT_UNIT (0x07U) 45 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_CONTROL_PROCESSING_UNIT_AUDIO20 (0x08U) 46 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_CONTROL_EXTENSION_UNIT_AUDIO20 (0x09U) 47 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_CONTROL_CLOCK_SOURCE_UNIT (0x0AU) 48 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_CONTROL_CLOCK_SELECTOR_UNIT (0x0BU) 49 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_CONTROL_CLOCK_MULTIPLIER_UNIT (0x0CU) 50 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_CONTROL_SAMPLE_RATE_CONVERTER_UNIT (0x0DU) 51 #else 52 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_CONTROL_PROCESSING_UNIT (0x07U) 53 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_CONTROL_EXTENSION_UNIT (0x08U) 54 #endif 55 56 /*! @brief Audio device class-specific control interface effect unit effect type */ 57 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) 58 #define USB_DESCRIPTOR_AUDIO_CONTROL_EFFECT_UNIT_UNDEFINED_TYPE (0x00U) 59 #define USB_DESCRIPTOR_AUDIO_CONTROL_EFFECT_UNIT_PARAM_EQ_SECTION_EFFECT_TYPE (0x01U) 60 #define USB_DESCRIPTOR_AUDIO_CONTROL_EFFECT_UNIT_REVERBERATION_EFFECT_TYPE (0x02U) 61 #define USB_DESCRIPTOR_AUDIO_CONTROL_EFFECT_UNIT_MOD_DELAY_EFFECT_TYPE (0x03U) 62 #define USB_DESCRIPTOR_AUDIO_CONTROL_EFFECT_UNIT_DYN_RANGE_COMP_EFFECT_TYPE (0x04U) 63 #endif 64 65 /*! @brief Audio device class-specific control interface processing unit process type */ 66 #define USB_DESCRIPTOR_AUDIO_CONTROL_PROCESSING_UNIT_UPDOWNMIX_PROCESS_TYPE (0x01U) 67 #define USB_DESCRIPTOR_AUDIO_CONTROL_PROCESSING_UNIT_DOLBY_PROLOGIC_PROCESS_TYPE (0x02U) 68 #define USB_DESCRIPTOR_AUDIO_CONTROL_PROCESSING_UNIT_STEREO_EXTENDER_PROCESS_TYPE (0x03U) 69 #if (!USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) /* used by usb audio 1.0 */ 70 #define USB_DESCRIPTOR_AUDIO_CONTROL_PROCESSING_UNIT_REVERBERATION_PROCESS_TYPE (0x04U) 71 #define USB_DESCRIPTOR_AUDIO_CONTROL_PROCESSING_UNIT_CHORUS_PROCESS_TYPE (0x05U) 72 #define USB_DESCRIPTOR_AUDIO_CONTROL_PROCESSING_UNIT_DYN_RANGE_COMP_PROCESS_TYPE (0x06U) 73 #endif 74 75 /*! @brief Audio device class-specific stream interface descriptor subtype */ 76 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_STREAMING_AS_GENERAL (0x01U) 77 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_STREAMING_FORMAT_TYPE (0x02U) 78 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) 79 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_STREAMING_ENCODER (0x03U) 80 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_STREAMING_DECODER (0x04U) 81 #else 82 #define USB_DESCRIPTOR_SUBTYPE_AUDIO_STREAMING_FORMAT_SPECIFIC (0x03U) 83 #endif 84 85 /*! @brief Audio device Format Type Codes */ 86 #define USB_AUDIO_FORMAT_TYPE_UNDEFINED (0x00U) 87 #define USB_AUDIO_FORMAT_TYPE_I (0x01U) 88 #define USB_AUDIO_FORMAT_TYPE_II (0x02U) 89 #define USB_AUDIO_FORMAT_TYPE_III (0x03U) 90 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) 91 #define USB_AUDIO_FORMAT_TYPE_IV (0x04U) 92 #define USB_AUDIO_FORMAT_EXT_FORMAT_TYPE_I (0x81U) 93 #define USB_AUDIO_FORMAT_EXT_FORMAT_TYPE_II (0x82U) 94 #define USB_AUDIO_FORMAT_EXT_FORMAT_TYPE_III (0x83U) 95 #endif 96 97 /*! @brief Audio device class-specific stream interface Encoder/Decoder Type Codes */ 98 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) 99 #define USB_DESCRIPTOR_AUDIO_STREAM_ENCODER_UNDEFINED (0x00U) 100 #define USB_DESCRIPTOR_AUDIO_STREAM_ENCODER_OTHER_ENCODER (0x01U) 101 #define USB_DESCRIPTOR_AUDIO_STREAM_ENCODER_MPEG_ENCODER (0x02U) 102 #define USB_DESCRIPTOR_AUDIO_STREAM_ENCODER_AC3_ENCODER (0x03U) 103 #define USB_DESCRIPTOR_AUDIO_STREAM_ENCODER_WMA_ENCODER (0x04U) 104 #define USB_DESCRIPTOR_AUDIO_STREAM_ENCODER_DTS_ENCODER (0x05U) 105 106 #define USB_DESCRIPTOR_AUDIO_STREAM_DECODER_UNDEFINED (0x00U) 107 #define USB_DESCRIPTOR_AUDIO_STREAM_DECODER_OTHER_DECODER (0x01U) 108 #define USB_DESCRIPTOR_AUDIO_STREAM_DECODER_MPEG_DECODER (0x02U) 109 #define USB_DESCRIPTOR_AUDIO_STREAM_DECODER_AC3_DECODER (0x03U) 110 #define USB_DESCRIPTOR_AUDIO_STREAM_DECODER_WMA_DECODER (0x04U) 111 #define USB_DESCRIPTOR_AUDIO_STREAM_DECODER_DTS_DECODER (0x05U) 112 #endif 113 114 /*! @brief Commands for USB device AUDIO Class specific request codes */ 115 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) 116 #define USB_DEVICE_AUDIO_CUR_REQUEST (0x01U) 117 #define USB_DEVICE_AUDIO_RANGE_REQUEST (0x02U) 118 #define USB_DEVICE_AUDIO_MEM_REQUEST (0x03U) 119 #else 120 #define USB_DEVICE_AUDIO_SET_CUR_REQUEST (0x01U) 121 #define USB_DEVICE_AUDIO_GET_CUR_REQUEST (0x81U) 122 #define USB_DEVICE_AUDIO_SET_MIN_REQUEST (0x02U) 123 #define USB_DEVICE_AUDIO_GET_MIN_REQUEST (0x82U) 124 #define USB_DEVICE_AUDIO_SET_MAX_REQUEST (0x03U) 125 #define USB_DEVICE_AUDIO_GET_MAX_REQUEST (0x83U) 126 #define USB_DEVICE_AUDIO_SET_RES_REQUEST (0x04U) 127 #define USB_DEVICE_AUDIO_GET_RES_REQUEST (0x84U) 128 #define USB_DEVICE_AUDIO_SET_MEM_REQUEST (0x05U) 129 #define USB_DEVICE_AUDIO_GET_MEM_REQUEST (0x85U) 130 #endif 131 132 /*! @brief Commands for USB device AUDIO control feature unit control selector */ 133 #define USB_DEVICE_AUDIO_FU_MUTE_CONTROL_SELECTOR (0x01U) 134 #define USB_DEVICE_AUDIO_FU_VOLUME_CONTROL_SELECTOR (0x02U) 135 #define USB_DEVICE_AUDIO_FU_BASS_CONTROL_SELECTOR (0x03U) 136 #define USB_DEVICE_AUDIO_FU_MID_CONTROL_SELECTOR (0x04U) 137 #define USB_DEVICE_AUDIO_FU_TREBLE_CONTROL_SELECTOR (0x05U) 138 #define USB_DEVICE_AUDIO_FU_GRAPHIC_EQUALIZER_CONTROL_SELECTOR (0x06U) 139 #define USB_DEVICE_AUDIO_FU_AUTOMATIC_GAIN_CONTROL_SELECTOR (0x07U) 140 #define USB_DEVICE_AUDIO_FU_DELAY_CONTROL_SELECTOR (0x08U) 141 #define USB_DEVICE_AUDIO_FU_BASS_BOOST_CONTROL_SELECTOR (0x09U) 142 #define USB_DEVICE_AUDIO_FU_LOUDNESS_CONTROL_SELECTOR (0x0AU) 143 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) 144 #define USB_DEVICE_AUDIO_FU_INPUT_GAIN_CONTROL_SELECTOR (0x0BU) 145 #define USB_DEVICE_AUDIO_FU_INPUT_GAIN_PAD_CONTROL_SELECTOR (0x0CU) 146 #define USB_DEVICE_AUDIO_FU_PHASE_INVERTER_CONTROL_SELECTOR (0x0DU) 147 #define USB_DEVICE_AUDIO_FU_UNDERFLOW_CONTROL_SELECTOR (0x0EU) 148 #define USB_DEVICE_AUDIO_FU_OVERFLOW_CONTROL_SELECTOR (0x0FU) 149 #define USB_DEVICE_AUDIO_FU_LATENCY_CONTROL_SELECTOR (0x10U) 150 #endif 151 152 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) 153 /*! @brief Commands for USB device AUDIO control Parametric Equalizer Section Effect Unit Control Selectors */ 154 #define USB_DEVICE_AUDIO_EU_PE_ENABLE_CONTROL (0x01U) 155 #define USB_DEVICE_AUDIO_EU_PE_CENTERFREQ_CONTROL (0x02U) 156 #define USB_DEVICE_AUDIO_EU_PE_QFACTOR_CONTROL (0x03U) 157 #define USB_DEVICE_AUDIO_EU_PE_GAIN_CONTROL (0x04U) 158 #define USB_DEVICE_AUDIO_EU_PE_UNDERFLOW_CONTROL (0x05U) 159 #define USB_DEVICE_AUDIO_EU_PE_OVERFLOW_CONTROL (0x06U) 160 #define USB_DEVICE_AUDIO_EU_PE_LATENCY_CONTROL (0x07U) 161 162 /*! @brief Commands for USB device AUDIO control Reverberation Effect Unit Control Selectors Control Selectors */ 163 #define USB_DEVICE_AUDIO_EU_RV_ENABLE_CONTROL (0x01U) 164 #define USB_DEVICE_AUDIO_EU_RV_TYPE_CONTROL (0x02U) 165 #define USB_DEVICE_AUDIO_EU_RV_LEVEL_CONTROL (0x03U) 166 #define USB_DEVICE_AUDIO_EU_RV_TIME_CONTROL (0x04U) 167 #define USB_DEVICE_AUDIO_EU_RV_FEEDBACK_CONTROL (0x05U) 168 #define USB_DEVICE_AUDIO_EU_RV_PREDELAY_CONTROL (0x06U) 169 #define USB_DEVICE_AUDIO_EU_RV_DENSITY_CONTROL (0x07U) 170 #define USB_DEVICE_AUDIO_EU_RV_RV_HIFREQ_ROLLOFF_CONTROL (0x08U) 171 #define USB_DEVICE_AUDIO_EU_RV_UNDERFLOW_CONTROL (0x09U) 172 #define USB_DEVICE_AUDIO_EU_RV_OVERFLOW_CONTROL (0x0AU) 173 #define USB_DEVICE_AUDIO_EU_RV_LATENCY_CONTROL (0x0BU) 174 175 /*! @brief Commands for USB device AUDIO control Modulation Delay Effect Unit Control Selectors */ 176 #define USB_DEVICE_AUDIO_EU_MD_ENABLE_CONTROL (0x01U) 177 #define USB_DEVICE_AUDIO_EU_MD_BALANCE_CONTROL (0x02U) 178 #define USB_DEVICE_AUDIO_EU_MD_RATE_CONTROL (0x03U) 179 #define USB_DEVICE_AUDIO_EU_MD_DEPTH_CONTROL (0x04U) 180 #define USB_DEVICE_AUDIO_EU_MD_TIME_CONTROL (0x05U) 181 #define USB_DEVICE_AUDIO_EU_MD_FEEDBACK_CONTROL (0x06U) 182 #define USB_DEVICE_AUDIO_EU_MD_UNDERFLOW_CONTROL (0x07U) 183 #define USB_DEVICE_AUDIO_EU_MD_OVERFLOW_CONTROL (0x08U) 184 #define USB_DEVICE_AUDIO_EU_MD_LATENCY_CONTROL (0x09U) 185 186 /*! @brief Commands for USB device AUDIO control Dynamic Range Compressor Effect Unit Control Selectors */ 187 #define USB_DEVICE_AUDIO_EU_DR_ENABLE_CONTROL (0x01U) 188 #define USB_DEVICE_AUDIO_EU_DR_COMPRESSION_RATE_CONTROL (0x02U) 189 #define USB_DEVICE_AUDIO_EU_DR_MAXAMPL_CONTROL (0x03U) 190 #define USB_DEVICE_AUDIO_EU_DR_THRESHOLD_CONTROL (0x04U) 191 #define USB_DEVICE_AUDIO_EU_DR_ATTACK_TIME_CONTROL (0x05U) 192 #define USB_DEVICE_AUDIO_EU_DR_RELEASE_TIME_CONTROL (0x06U) 193 #define USB_DEVICE_AUDIO_EU_DR_UNDERFLOW_CONTROL (0x07U) 194 #define USB_DEVICE_AUDIO_EU_DR_OVERFLOW_CONTROL (0x08U) 195 #define USB_DEVICE_AUDIO_EU_DR_LATENCY_CONTROL (0x09U) 196 #endif 197 198 /*! @brief Commands for USB device AUDIO control Up/Down-mix Processing Unit Control Selectors */ 199 #define USB_DEVICE_AUDIO_PU_UD_ENABLE_CONTROL (0x01U) 200 #define USB_DEVICE_AUDIO_PU_UD_MODE_SELECT_CONTROL (0x02U) 201 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) 202 #define USB_DEVICE_AUDIO_PU_UD_CLUSTER_CONTROL (0x03U) 203 #define USB_DEVICE_AUDIO_PU_UD_UNDERFLOW_CONTROL (0x04U) 204 #define USB_DEVICE_AUDIO_PU_UD_OVERFLOW_CONTROL (0x05U) 205 #define USB_DEVICE_AUDIO_PU_UD_LATENCY_CONTROL (0x06U) 206 #endif 207 208 /*! @brief Commands for USB device AUDIO control Dolby Prologic Processing Unit Control Selectors */ 209 #define USB_DEVICE_AUDIO_PU_DP_ENABLE_CONTROL (0x01U) 210 #define USB_DEVICE_AUDIO_PU_DP_MODE_SELECT_CONTROL (0x02U) 211 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) 212 #define USB_DEVICE_AUDIO_PU_DP_CLUSTER_CONTROL (0x03U) 213 #define USB_DEVICE_AUDIO_PU_DP_UNDERFLOW_CONTROL (0x04U) 214 #define USB_DEVICE_AUDIO_PU_DP_OVERFLOW_CONTROL (0x05U) 215 #define USB_DEVICE_AUDIO_PU_DP_LATENCY_CONTROL (0x06U) 216 #endif 217 218 /*! @brief Commands for USB device AUDIO control (3D,audio 1.0) Stereo Extender Processing Unit Control Selectors */ 219 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) 220 #define USB_DEVICE_AUDIO_PU_ST_EXT_ENABLE_CONTROL (0x01U) 221 #define USB_DEVICE_AUDIO_PU_ST_EXT_WIDTH_CONTROL (0x02U) 222 #define USB_DEVICE_AUDIO_PU_ST_EXT_UNDERFLOW_CONTROL (0x03U) 223 #define USB_DEVICE_AUDIO_PU_ST_EXT_OVERFLOW_CONTROL (0x04U) 224 #define USB_DEVICE_AUDIO_PU_ST_EXT_LATENCY_CONTROL (0x05U) 225 #else 226 #define USB_DEVICE_AUDIO_PU_3D_ENABLE_CONTROL (0x01U) 227 #define USB_DEVICE_AUDIO_PU_SPACIOUSNESS_CONTROL (0x03U) 228 #endif 229 230 #if (!USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) /* USB audio 1.0 */ 231 /*! @brief Commands for USB device AUDIO control Reverberation Processing Unit Control Selectors */ 232 #define USB_DEVICE_AUDIO_PU_RV_ENABLE_CONTROL (0x01U) 233 #define USB_DEVICE_AUDIO_PU_RV_LEVEL_CONTROL (0x02U) 234 #define USB_DEVICE_AUDIO_PU_RV_TIME_CONTROL (0x03U) 235 #define USB_DEVICE_AUDIO_PU_RV_FEEDBACK_CONTROL (0x04U) 236 237 /*! @brief Commands for USB device AUDIO control Chorus Processing Unit Control Selectors */ 238 #define USB_DEVICE_AUDIO_PU_CH_ENABLE_CONTROL (0x01U) 239 #define USB_DEVICE_AUDIO_PU_CH_LEVEL_CONTROL (0x02U) 240 #define USB_DEVICE_AUDIO_PU_CH_RATE_CONTROL (0x03U) 241 #define USB_DEVICE_AUDIO_PU_CH_DEPTH_CONTROL (0x04U) 242 243 /*! @brief Commands for USB device AUDIO control Dynamic Range Compressor Processing Unit Control Selectors */ 244 #define USB_DEVICE_AUDIO_PU_DR_ENABLE_CONTROL (0x01U) 245 #define USB_DEVICE_AUDIO_PU_DR_COMPRESSION_RATE_CONTROL (0x02U) 246 #define USB_DEVICE_AUDIO_PU_DR_MAXAMPL_CONTROL (0x03U) 247 #define USB_DEVICE_AUDIO_PU_DR_THRESHOLD_CONTROL (0x04U) 248 #define USB_DEVICE_AUDIO_PU_DR_ATTACK_TIME (0x05U) 249 #define USB_DEVICE_AUDIO_PU_DR_RELEASE_TIME (0x06U) 250 #endif 251 252 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) 253 /*! @brief Commands for USB device AUDIO control clock source control selector */ 254 #define USB_DEVICE_AUDIO_CS_CONTROL_UNDEFINED (0x00U) 255 #define USB_DEVICE_AUDIO_CS_SAM_FREQ_CONTROL_SELECTOR (0x01U) 256 #define USB_DEVICE_AUDIO_CS_CLOCK_VALID_CONTROL_SELECTOR (0x02U) 257 258 /*! @brief Commands for USB device AUDIO control clock selector control selector */ 259 #define USB_DEVICE_AUDIO_CX_CONTROL_UNDEFINED (0x00U) 260 #define USB_DEVICE_AUDIO_CX_CLOCK_SELECTOR_CONTROL_SELECTOR (0x01U) 261 262 /*! @brief Commands for USB device AUDIO control clock multiplier control selector */ 263 #define USB_DEVICE_AUDIO_CM_CONTROL_UNDEFINED (0x00U) 264 #define USB_DEVICE_AUDIO_CM_NUMERATOR_CONTROL_SELECTOR (0x01U) 265 #define USB_DEVICE_AUDIO_CM_DENOMINATOR_CONTROL_SELECTOR (0x02U) 266 #endif 267 268 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) 269 /*! @brief Commands for USB device AUDIO streaming Interface Control Selectors */ 270 #define USB_DEVICE_AUDIO_AS_ACT_ALT_SETTING_CONTROL (0x01U) 271 #define USB_DEVICE_AUDIO_AS_VAL_ALT_SETTINGS_CONTROL (0x02U) 272 #define USB_DEVICE_AUDIO_AS_AUDIO_DATA_FORMAT_CONTROL (0x03U) 273 274 /*! @brief Commands for USB device AUDIO streaming Encoder control selector */ 275 #define USB_DEVICE_AUDIO_EN_BIT_RATE_CONTROL (0x01U) 276 #define USB_DEVICE_AUDIO_EN_QUALITY_CONTROL (0x02U) 277 #define USB_DEVICE_AUDIO_EN_VBR_CONTROL (0x03U) 278 #define USB_DEVICE_AUDIO_EN_TYPE_CONTROL (0x04U) 279 #define USB_DEVICE_AUDIO_EN_UNDERFLOW_CONTROL (0x05U) 280 #define USB_DEVICE_AUDIO_EN_OVERFLOW_CONTROL (0x06U) 281 #define USB_DEVICE_AUDIO_EN_ENCODER_ERROR_CONTROL (0x07U) 282 #define USB_DEVICE_AUDIO_EN_PARAM1_CONTROL (0x08U) 283 #define USB_DEVICE_AUDIO_EN_PARAM2_CONTROL (0x09U) 284 #define USB_DEVICE_AUDIO_EN_PARAM3_CONTROL (0x0AU) 285 #define USB_DEVICE_AUDIO_EN_PARAM4_CONTROL (0x0BU) 286 #define USB_DEVICE_AUDIO_EN_PARAM5_CONTROL (0x0CU) 287 #define USB_DEVICE_AUDIO_EN_PARAM6_CONTROL (0x0DU) 288 #define USB_DEVICE_AUDIO_EN_PARAM7_CONTROL (0x0EU) 289 #define USB_DEVICE_AUDIO_EN_PARAM8_CONTROL (0x0FU) 290 291 /*! @brief Commands for USB device AUDIO streaming MPEG Decoder control selector */ 292 #define USB_DEVICE_AUDIO_MD_DUAL_CHANNEL_CONTROL (0x01U) 293 #define USB_DEVICE_AUDIO_MD_SECOND_STEREO_CONTROL (0x02U) 294 #define USB_DEVICE_AUDIO_MD_MULTILINGUAL_CONTROL (0x03U) 295 #define USB_DEVICE_AUDIO_MD_DYN_RANGE_CONTROL (0x04U) 296 #define USB_DEVICE_AUDIO_MD_SCALING_CONTROL (0x05U) 297 #define USB_DEVICE_AUDIO_MD_HILO_SCALING_CONTROL (0x06U) 298 #define USB_DEVICE_AUDIO_MD_UNDERFLOW_CONTROL (0x07U) 299 #define USB_DEVICE_AUDIO_MD_OVERFLOW_CONTROL (0x08U) 300 #define USB_DEVICE_AUDIO_MD_DECODER_ERROR_CONTROL (0x09U) 301 302 /*! @brief Commands for USB device AUDIO streaming AC-3 Decoder Control Selectors */ 303 #define USB_DEVICE_AUDIO_AD_MODE_CONTROL (0x01U) 304 #define USB_DEVICE_AUDIO_AD_DYN_RANGE_CONTROL (0x02U) 305 #define USB_DEVICE_AUDIO_AD_SCALING_CONTROL (0x03U) 306 #define USB_DEVICE_AUDIO_AD_HILO_SCALING_CONTROLL (0x04U) 307 #define USB_DEVICE_AUDIO_AD_UNDERFLOW_CONTROL (0x05U) 308 #define USB_DEVICE_AUDIO_AD_OVERFLOW_CONTROL (0x06U) 309 #define USB_DEVICE_AUDIO_AD_DECODER_ERROR_CONTROL (0x07U) 310 311 /*! @brief Commands for USB device AUDIO streaming WMA Decoder Control Selectors */ 312 #define USB_DEVICE_AUDIO_WD_UNDERFLOW_CONTROL (0x01U) 313 #define USB_DEVICE_AUDIO_WD_OVERFLOW_CONTROL (0x02U) 314 #define USB_DEVICE_AUDIO_WD_DECODER_ERROR_CONTROL (0x03U) 315 316 /*! @brief Commands for USB device AUDIO streaming DTS Decoder Control Selectors */ 317 #define USB_DEVICE_AUDIO_DD_UNDERFLOW_CONTROL (0x01U) 318 #define USB_DEVICE_AUDIO_DD_OVERFLOW_CONTROL (0x02U) 319 #define USB_DEVICE_AUDIO_DD_DECODER_ERROR_CONTROL (0x03U) 320 #endif 321 322 #if (!USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) /* USB audio 1.0 */ 323 /*! @brief Commands for USB device AUDIO streaming MPEG control selector */ 324 #define USB_DEVICE_AUDIO_MP_DUAL_CHANNEL_CONTROL (0x01U) 325 #define USB_DEVICE_AUDIO_MP_SECOND_STEREO_CONTROL (0x02U) 326 #define USB_DEVICE_AUDIO_MP_MULTILINGUAL_CONTROL (0x03U) 327 #define USB_DEVICE_AUDIO_MP_DYN_RANGE_CONTROL (0x04U) 328 #define USB_DEVICE_AUDIO_MP_SCALING_CONTROL (0x05U) 329 #define USB_DEVICE_AUDIO_MP_HILO_SCALING_CONTROL (0x06U) 330 331 /*! @brief Commands for USB device AUDIO streaming AC-3 Control Selectors */ 332 #define USB_DEVICE_AUDIO_AC_MODE_CONTROL (0x01U) 333 #define USB_DEVICE_AUDIO_AC_DYN_RANGE_CONTRO (0x02U) 334 #define USB_DEVICE_AUDIO_AC_SCALING_CONTROL (0x03U) 335 #define USB_DEVICE_AUDIO_AC_HILO_SCALING_CONTROL (0x04U) 336 #endif 337 338 /*! @brief Commands for USB device AUDIO streaming endpoint control selector */ 339 #define USB_DEVICE_AUDIO_EP_CONTROL_UNDEFINED (0x00U) 340 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) 341 #define USB_DEVICE_AUDIO_EP_PITCH_CONTROL_SELECTOR_AUDIO20 (0x01U) 342 #define USB_DEVICE_AUDIO_EP_DATA_OVERRUN_CONTROL_SELECTOR (0x02U) 343 #define USB_DEVICE_AUDIO_EP_DATA_UNDERRUN_CONTROL_SELECTOR (0x03U) 344 #else 345 #define USB_DEVICE_AUDIO_EP_SAMPLING_FREQ_CONTROL_SELECTOR (0x01U) 346 #define USB_DEVICE_AUDIO_EP_PITCH_CONTROL_SELECTOR (0x02U) 347 #endif 348 349 /* Commands for USB device AUDIO terminal control selector */ 350 #define USB_DEVICE_AUDIO_TE_CONTROL_UNDEFINED (0x00U) 351 #define USB_DEVICE_AUDIO_TE_COPY_PROTECT_CONTROL (0x01U) 352 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) 353 #define USB_DEVICE_AUDIO_TE_CONNECTOR_CONTROL (0x02U) 354 #define USB_DEVICE_AUDIO_TE_OVERLOAD_CONTROL (0x03U) 355 #define USB_DEVICE_AUDIO_TE_CLUSTER_CONTROL (0x04U) 356 #define USB_DEVICE_AUDIO_TE_UNDERFLOW_CONTROL (0x05U) 357 #define USB_DEVICE_AUDIO_TE_OVERFLOW_CONTROL (0x06U) 358 #define USB_DEVICE_AUDIO_TE_LATENCY_CONTROL (0x07U) 359 #endif 360 361 /*! @brief Audio device class-specific FU GET CUR COMMAND */ 362 #define USB_DEVICE_AUDIO_FU_GET_CUR_MUTE_CONTROL (0x8101U) 363 #define USB_DEVICE_AUDIO_FU_GET_CUR_VOLUME_CONTROL (0x8102U) 364 #define USB_DEVICE_AUDIO_FU_GET_CUR_BASS_CONTROL (0x8103U) 365 #define USB_DEVICE_AUDIO_FU_GET_CUR_MID_CONTROL (0x8104U) 366 #define USB_DEVICE_AUDIO_FU_GET_CUR_TREBLE_CONTROL (0x8105U) 367 #define USB_DEVICE_AUDIO_FU_GET_CUR_GRAPHIC_EQUALIZER_CONTROL (0x8106U) 368 #define USB_DEVICE_AUDIO_FU_GET_CUR_AUTOMATIC_GAIN_CONTROL (0x8107U) 369 #define USB_DEVICE_AUDIO_FU_GET_CUR_DELAY_CONTROL (0x8108U) 370 #define USB_DEVICE_AUDIO_FU_GET_CUR_BASS_BOOST_CONTROL (0x8109U) 371 #define USB_DEVICE_AUDIO_FU_GET_CUR_LOUDNESS_CONTROL (0x810AU) 372 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) 373 #define USB_DEVICE_AUDIO_FU_GET_CUR_UNDERFLOW_CONTROL (0x810EU) 374 #define USB_DEVICE_AUDIO_FU_GET_CUR_OVERFLOW_CONTROL (0x810FU) 375 #endif 376 377 /*! @brief Audio device class-specific FU GET MIN COMMAND */ 378 #define USB_DEVICE_AUDIO_FU_GET_MIN_VOLUME_CONTROL (0x8202U) 379 #define USB_DEVICE_AUDIO_FU_GET_MIN_BASS_CONTROL (0x8203U) 380 #define USB_DEVICE_AUDIO_FU_GET_MIN_MID_CONTROL (0x8204U) 381 #define USB_DEVICE_AUDIO_FU_GET_MIN_TREBLE_CONTROL (0x8205U) 382 #define USB_DEVICE_AUDIO_FU_GET_MIN_GRAPHIC_EQUALIZER_CONTROL (0x8206U) 383 #define USB_DEVICE_AUDIO_FU_GET_MIN_DELAY_CONTROL (0x8208U) 384 385 /*! @brief Audio device class-specific FU GET MAX COMMAND */ 386 #define USB_DEVICE_AUDIO_FU_GET_MAX_VOLUME_CONTROL (0x8302U) 387 #define USB_DEVICE_AUDIO_FU_GET_MAX_BASS_CONTROL (0x8303U) 388 #define USB_DEVICE_AUDIO_FU_GET_MAX_MID_CONTROL (0x8304U) 389 #define USB_DEVICE_AUDIO_FU_GET_MAX_TREBLE_CONTROL (0x8305U) 390 #define USB_DEVICE_AUDIO_FU_GET_MAX_GRAPHIC_EQUALIZER_CONTROL (0x8306U) 391 #define USB_DEVICE_AUDIO_FU_GET_MAX_DELAY_CONTROL (0x8308U) 392 393 /*! @brief Audio device class-specific FU GET RES COMMAND */ 394 #define USB_DEVICE_AUDIO_FU_GET_RES_VOLUME_CONTROL (0x8402U) 395 #define USB_DEVICE_AUDIO_FU_GET_RES_BASS_CONTROL (0x8403U) 396 #define USB_DEVICE_AUDIO_FU_GET_RES_MID_CONTROL (0x8404U) 397 #define USB_DEVICE_AUDIO_FU_GET_RES_TREBLE_CONTROL (0x8405U) 398 #define USB_DEVICE_AUDIO_FU_GET_RES_GRAPHIC_EQUALIZER_CONTROL (0x8406U) 399 #define USB_DEVICE_AUDIO_FU_GET_RES_DELAY_CONTROL (0x8408U) 400 401 /*! @brief Audio device class-specific FU SET CUR COMMAND */ 402 #define USB_DEVICE_AUDIO_FU_SET_CUR_MUTE_CONTROL (0x0101U) 403 #define USB_DEVICE_AUDIO_FU_SET_CUR_VOLUME_CONTROL (0x0102U) 404 #define USB_DEVICE_AUDIO_FU_SET_CUR_BASS_CONTROL (0x0103U) 405 #define USB_DEVICE_AUDIO_FU_SET_CUR_MID_CONTROL (0x0104U) 406 #define USB_DEVICE_AUDIO_FU_SET_CUR_TREBLE_CONTROL (0x0105U) 407 #define USB_DEVICE_AUDIO_FU_SET_CUR_GRAPHIC_EQUALIZER_CONTROL (0x0106U) 408 #define USB_DEVICE_AUDIO_FU_SET_CUR_AUTOMATIC_GAIN_CONTROL (0x0107U) 409 #define USB_DEVICE_AUDIO_FU_SET_CUR_DELAY_CONTROL (0x0108U) 410 #define USB_DEVICE_AUDIO_FU_SET_CUR_BASS_BOOST_CONTROL (0x0109U) 411 #define USB_DEVICE_AUDIO_FU_SET_CUR_LOUDNESS_CONTROL (0x010AU) 412 413 /*! @brief Audio device class-specific FU SET MIN COMMAND */ 414 #define USB_DEVICE_AUDIO_FU_SET_MIN_VOLUME_CONTROL (0x0202U) 415 #define USB_DEVICE_AUDIO_FU_SET_MIN_BASS_CONTROL (0x0203U) 416 #define USB_DEVICE_AUDIO_FU_SET_MIN_MID_CONTROL (0x0204U) 417 #define USB_DEVICE_AUDIO_FU_SET_MIN_TREBLE_CONTROL (0x0205U) 418 #define USB_DEVICE_AUDIO_FU_SET_MIN_GRAPHIC_EQUALIZER_CONTROL (0x0206U) 419 #define USB_DEVICE_AUDIO_FU_SET_MIN_DELAY_CONTROL (0x0208U) 420 421 /*! @brief Audio device class-specific FU SET MAX COMMAND */ 422 #define USB_DEVICE_AUDIO_FU_SET_MAX_VOLUME_CONTROL (0x0302U) 423 #define USB_DEVICE_AUDIO_FU_SET_MAX_BASS_CONTROL (0x0303U) 424 #define USB_DEVICE_AUDIO_FU_SET_MAX_MID_CONTROL (0x0304U) 425 #define USB_DEVICE_AUDIO_FU_SET_MAX_TREBLE_CONTROL (0x0305U) 426 #define USB_DEVICE_AUDIO_FU_SET_MAX_GRAPHIC_EQUALIZER_CONTROL (0x0306U) 427 #define USB_DEVICE_AUDIO_FU_SET_MAX_DELAY_CONTROL (0x0308U) 428 429 /*! @brief Audio device class-specific FU SET RES COMMAND */ 430 #define USB_DEVICE_AUDIO_FU_SET_RES_VOLUME_CONTROL (0x0402U) 431 #define USB_DEVICE_AUDIO_FU_SET_RES_BASS_CONTROL (0x0403U) 432 #define USB_DEVICE_AUDIO_FU_SET_RES_MID_CONTROL (0x0404U) 433 #define USB_DEVICE_AUDIO_FU_SET_RES_TREBLE_CONTROL (0x0405U) 434 #define USB_DEVICE_AUDIO_FU_SET_RES_GRAPHIC_EQUALIZER_CONTROL (0x0406U) 435 #define USB_DEVICE_AUDIO_FU_SET_RES_DELAY_CONTROL (0x0408U) 436 437 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) /* Audio 2.0 FU : the following application command value is started from ox20 \ 438 */ 439 /*! @brief Audio device class-specific ENDP SET CUR COMMAND */ 440 #define USB_DEVICE_AUDIO_EP_SET_CUR_PITCH_CONTROL_AUDIO20 (0x0122U) 441 /*! @brief Audio device class-specific ENDP GET CUR COMMAND */ 442 #define USB_DEVICE_AUDIO_EP_GET_CUR_DATA_OVERRUN_CONTROL (0x8121U) 443 #define USB_DEVICE_AUDIO_EP_GET_CUR_DATA_UNDERRUN_CONTROL (0x8122U) 444 #else 445 /*! @brief Audio device class-specific ENDP SET CUR COMMAND */ 446 #define USB_DEVICE_AUDIO_EP_SET_CUR_PITCH_CONTROL (0x0120U) 447 #define USB_DEVICE_AUDIO_EP_SET_CUR_SAMPLING_FREQ_CONTROL (0x0121U) 448 449 /*! @brief Audio device class-specific ENDP SET MIN COMMAND */ 450 #define USB_DEVICE_AUDIO_EP_SET_MIN_SAMPLING_FREQ_CONTROL (0x0220U) 451 452 /*! @brief Audio device class-specific ENDP SET MAX COMMAND */ 453 #define USB_DEVICE_AUDIO_EP_SET_MAX_SAMPLING_FREQ_CONTROL (0x0320U) 454 455 /*! @brief Audio device class-specific ENDP SET RES COMMAND */ 456 #define USB_DEVICE_AUDIO_EP_SET_RES_SAMPLING_FREQ_CONTROL (0x0420U) 457 458 /*! @brief Audio device class-specific ENDP GET CUR COMMAND */ 459 #define USB_DEVICE_AUDIO_EP_GET_CUR_SAMPLING_FREQ_CONTROL (0x8120U) 460 461 /*! @brief Audio device class-specific ENDP GET MIN COMMAND */ 462 #define USB_DEVICE_AUDIO_EP_GET_MIN_SAMPLING_FREQ_CONTROL (0x8220U) 463 464 /*! @brief Audio device class-specific ENDP GET MAX COMMAND */ 465 #define USB_DEVICE_AUDIO_EP_GET_MAX_SAMPLING_FREQ_CONTROL (0x8320U) 466 467 /*! @brief Audio device class-specific ENDP GET RES COMMAND */ 468 #define USB_DEVICE_AUDIO_EP_GET_RES_SAMPLING_FREQ_CONTROL (0x8420U) 469 #endif 470 471 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) /* CS: the following application command value is started from ox30 */ 472 /*! @brief Audio device class-specific CS SET CUR COMMAND */ 473 #define USB_DEVICE_AUDIO_CS_SET_CUR_SAMPLING_FREQ_CONTROL (0x0130U) 474 #define USB_DEVICE_AUDIO_CS_SET_CUR_CLOCK_VALID_CONTROL (0x0131U) 475 476 /*! @brief Audio device class-specific CS GET CUR COMMAND */ 477 #define USB_DEVICE_AUDIO_CS_GET_CUR_SAMPLING_FREQ_CONTROL (0x8130U) 478 #define USB_DEVICE_AUDIO_CS_GET_CUR_CLOCK_VALID_CONTROL (0x8131U) 479 480 /*! @brief Audio device class-specific CS GET RANGE COMMAND */ 481 #define USB_DEVICE_AUDIO_CS_GET_RANGE_SAMPLING_FREQ_CONTROL (0x8630U) 482 #endif 483 484 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) /* Audio 2.0 FU : the following application command value is started from ox40 \ 485 */ 486 /*! @brief Audio device class-specific GET RANGE COMMAND */ 487 #define USB_DEVICE_AUDIO_FU_GET_RANGE_VOLUME_CONTROL (0x8640U) 488 #endif 489 490 /* Terminal : the following application command value is started from ox50 */ 491 /*! @brief Audio device class-specific TE GET CUR COMMAND */ 492 #define USB_DEVICE_AUDIO_TE_GET_CUR_COPY_PROTECT_CONTROL (0x8150U) 493 /*! @brief Audio device class-specific TE SET CUR COMMAND */ 494 #define USB_DEVICE_AUDIO_TE_SET_CUR_COPY_PROTECT_CONTROL (0x0150U) 495 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) 496 #define USB_DEVICE_AUDIO_TE_GET_CUR_CONNECTOR_CONTROL (0x8151U) 497 #define USB_DEVICE_AUDIO_TE_GET_CUR_OVERLOAD_CONTROL (0x8152U) 498 #endif 499 /*! @}*/ 500 501 /*! 502 * @name USB Audio class setup request types 503 * @{ 504 */ 505 /*! @brief Audio device class setup request set type */ 506 #define USB_DEVICE_AUDIO_SET_REQUEST_INTERFACE (0x21U) 507 #define USB_DEVICE_AUDIO_SET_REQUEST_ENDPOINT (0x22U) 508 509 /*! @brief Audio device class setup request get type */ 510 #define USB_DEVICE_AUDIO_GET_REQUEST_INTERFACE (0xA1U) 511 #define USB_DEVICE_AUDIO_GET_REQUEST_ENDPOINT (0xA2U) 512 /*! @}*/ 513 514 /*! @brief Available common EVENT types in audio class callback */ 515 typedef enum 516 { 517 kUSB_DeviceAudioEventStreamSendResponse = 0x01U, /*!< Send data completed or cancelled etc in stream pipe */ 518 kUSB_DeviceAudioEventStreamRecvResponse, /*!< Data received or cancelled etc in stream pipe */ 519 kUSB_DeviceAudioEventControlSendResponse, /*!< Send data completed or cancelled etc in audio control pipe */ 520 } usb_device_audio_event_t; 521 522 /*! 523 * @brief The audio device class-specific information. 524 * The structure is used to pass the audio entity information filled by application. 525 * Such as 526 * entity id (unit or terminal ID), 527 * entity type (unit or terminal type), 528 * and terminal type if the entity is a terminal. 529 */ 530 typedef struct _usb_device_audio_entity_struct 531 { 532 uint8_t entityId; 533 uint8_t entityType; 534 uint16_t terminalType; 535 } usb_device_audio_entity_struct_t; 536 537 /*! 538 * @brief The audio device class-specific information list. 539 * The structure is used to pass the audio entity informations filled by the application. 540 * The type of each entity is usb_device_audio_entity_struct_t. 541 * The structure pointer is kept in the usb_device_interface_struct_t::classSpecific, 542 * such as, if there are three entities (an out terminal, camera terminal, and processing unit), 543 * the value of the count field is 3 and the entity field saves the every entity information. 544 */ 545 typedef struct _usb_device_audio_entities_struct 546 { 547 usb_device_audio_entity_struct_t *entity; 548 uint8_t count; 549 } usb_device_audio_entities_struct_t; 550 551 /*! @brief The audio device class status structure */ 552 typedef struct _usb_device_audio_struct 553 { 554 usb_device_handle handle; /*!< The device handle */ 555 usb_device_class_config_struct_t *configStruct; /*!< The configuration of the class. */ 556 usb_device_interface_struct_t *controlInterfaceHandle; /*!< Current control interface handle */ 557 usb_device_interface_struct_t *streamInterfaceHandle; /*!< Current stream interface handle */ 558 uint8_t configuration; /*!< Current configuration */ 559 uint8_t controlInterfaceNumber; /*!< The control interface number of the class */ 560 uint8_t controlAlternate; /*!< Current alternate setting of the control interface */ 561 uint8_t streamInterfaceNumber; /*!< The stream interface number of the class */ 562 uint8_t streamAlternate; /*!< Current alternate setting of the stream interface */ 563 uint8_t streamInPipeBusy; /*!< Stream IN pipe busy flag */ 564 uint8_t streamOutPipeBusy; /*!< Stream OUT pipe busy flag */ 565 } usb_device_audio_struct_t; 566 567 #if (USB_DEVICE_CONFIG_AUDIO_CLASS_2_0) 568 STRUCT_PACKED 569 struct _usb_device_control_range_layout3_struct 570 { 571 uint16_t wNumSubRanges; 572 uint32_t wMIN; 573 uint32_t wMAX; 574 uint32_t wRES; 575 } STRUCT_UNPACKED; 576 typedef struct _usb_device_control_range_layout3_struct usb_device_control_range_layout3_struct_t; 577 STRUCT_PACKED 578 struct _usb_device_control_range_layout2_struct 579 { 580 uint16_t wNumSubRanges; 581 uint16_t wMIN; 582 uint16_t wMAX; 583 uint16_t wRES; 584 } STRUCT_UNPACKED; 585 typedef struct _usb_device_control_range_layout2_struct usb_device_control_range_layout2_struct_t; 586 #endif 587 588 /******************************************************************************* 589 * API 590 ******************************************************************************/ 591 592 /*! 593 * @name USB Audio Class Driver 594 * @{ 595 */ 596 /*! 597 * @brief Initializes the USB audio class. 598 * 599 * This function obtains a USB device handle according to the controller ID, initializes the audio class 600 * with the class configuration parameters, and creates the mutex for each pipe. 601 * 602 * @param controllerId The ID of the controller. The value can be chosen from the kUSB_ControllerKhci0, 603 * kUSB_ControllerKhci1, kUSB_ControllerEhci0, or kUSB_ControllerEhci1. 604 * @param config The user configuration structure of type usb_device_class_config_struct_t. The user 605 * populates the members of this structure and passes the pointer of this structure 606 * into this function. 607 * @param handle An out parameter. The class handle of the audio class. 608 * @return A USB error code or kStatus_USB_Success. 609 * @retval kStatus_USB_Success The audio class is initialized successfully. 610 * @retval kStatus_USB_Busy No audio device handle available for allocation. 611 * @retval kStatus_USB_InvalidHandle The audio device handle allocation failure. 612 * @retval kStatus_USB_InvalidParameter The USB device handle allocation failure. 613 */ 614 extern usb_status_t USB_DeviceAudioInit(uint8_t controllerId, 615 usb_device_class_config_struct_t *config, 616 class_handle_t *handle); 617 618 /*! 619 * @brief Deinitializes the USB audio class. 620 * 621 * This function destroys the mutex for each pipe, deinitializes each endpoint of the audio class, and frees 622 * the audio class handle. 623 * 624 * @param handle The class handle of the audio class. 625 * @return A USB error code or kStatus_USB_Success. 626 * @retval kStatus_USB_Success The audio class is deinitialized successfully. 627 * @retval kStatus_USB_Error The endpoint deinitialization failure. 628 * @retval kStatus_USB_InvalidHandle The audio device handle or the audio class handle is invalid. 629 * @retval kStatus_USB_InvalidParameter The endpoint number of the audio class handle is invalid. 630 */ 631 extern usb_status_t USB_DeviceAudioDeinit(class_handle_t handle); 632 633 /*! 634 * @brief Handles the USB audio class event. 635 * 636 * This function responds to various events including the common device events and the class-specific events. 637 * For class-specific events, it calls the class callback defined in the application to deal with the class-specific 638 * event. 639 * 640 * @param handle The class handle of the audio class. 641 * @param event The event type. 642 * @param param The class handle of the audio class. 643 * @return A USB error code or kStatus_USB_Success. 644 * @retval kStatus_USB_Success The audio class is deinitialized successfully. 645 * @retval kStatus_USB_Error The configure structure of the audio class handle is invalid. 646 * @retval kStatus_USB_InvalidHandle The audio device handle or the audio class handle is invalid. 647 * @retval kStatus_USB_InvalidParameter The endpoint number of the audio class handle is invalid. 648 * @retval Others The error code returned by class callback in application. 649 */ 650 extern usb_status_t USB_DeviceAudioEvent(void *handle, uint32_t event, void *param); 651 652 /*! 653 * @brief Primes the endpoint to send a packet to the host. 654 * 655 * This function checks whether the endpoint is sending packet, then it primes the endpoint 656 * with the buffer address and the buffer length if the pipe is not busy. Otherwise, it ignores this transfer by 657 * returning an error code. 658 * 659 * @param handle The class handle of the audio class. 660 * @param ep The endpoint number of the transfer. 661 * @param buffer The pointer to the buffer to be transferred. 662 * @param length The length of the buffer to be transferred. 663 * @return A USB error code or kStatus_USB_Success. 664 * @retval kStatus_USB_Success Prime to send packet successfully. 665 * @retval kStatus_USB_Busy The endpoint is busy in transferring. 666 * @retval kStatus_USB_InvalidHandle The audio device handle or the audio class handle is invalid. 667 * @retval kStatus_USB_ControllerNotFound The controller interface is invalid. 668 * 669 * @note The function can only be called in the same context. 670 */ 671 extern usb_status_t USB_DeviceAudioSend(class_handle_t handle, uint8_t ep, uint8_t *buffer, uint32_t length); 672 673 /*! 674 * @brief Primes the endpoint to receive a packet from the host. 675 * 676 * This function checks whether the endpoint is receiving packet, then it primes the endpoint 677 * with the buffer address and the buffer length if the pipe is not busy. Otherwise, it ignores this transfer by 678 * returning an error code. 679 * 680 * @param handle The class handle of the audio class. 681 * @param ep The endpoint number of the transfer. 682 * @param buffer The pointer to the buffer to be transferred. 683 * @param length The length of the buffer to be transferred. 684 * @return A USB error code or kStatus_USB_Success. 685 * @retval kStatus_USB_Success Prime to receive packet successfully. 686 * @retval kStatus_USB_Busy The endpoint is busy in transferring. 687 * @retval kStatus_USB_InvalidHandle The audio device handle or the audio class handle is invalid. 688 * @retval kStatus_USB_ControllerNotFound The controller interface is invalid. 689 * 690 * @note The function can only be called in the same context. 691 */ 692 extern usb_status_t USB_DeviceAudioRecv(class_handle_t handle, uint8_t ep, uint8_t *buffer, uint32_t length); 693 694 /*! @}*/ 695 696 /*! @}*/ 697 698 #endif /* __USB_DEVICE_AUDIO_H__ */ 699