mirror of
https://github.com/azure-rtos/usbx.git
synced 2025-01-28 07:03:07 +08:00
504 lines
21 KiB
C
504 lines
21 KiB
C
/***************************************************************************
|
|
* Copyright (c) 2024 Microsoft Corporation
|
|
*
|
|
* This program and the accompanying materials are made available under the
|
|
* terms of the MIT License which is available at
|
|
* https://opensource.org/licenses/MIT.
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
**************************************************************************/
|
|
|
|
|
|
/**************************************************************************/
|
|
/**************************************************************************/
|
|
/** */
|
|
/** USBX Component */
|
|
/** */
|
|
/** Device Audio Class */
|
|
/** */
|
|
/**************************************************************************/
|
|
/**************************************************************************/
|
|
|
|
|
|
/**************************************************************************/
|
|
/* */
|
|
/* COMPONENT DEFINITION RELEASE */
|
|
/* */
|
|
/* ux_device_class_audio20.h PORTABLE C */
|
|
/* 6.3.0 */
|
|
/* AUTHOR */
|
|
/* */
|
|
/* Chaoqiong Xiao, Microsoft Corporation */
|
|
/* */
|
|
/* DESCRIPTION */
|
|
/* */
|
|
/* This file contains all the header and extern functions used by the */
|
|
/* USBX audio class version 2.0. */
|
|
/* */
|
|
/* RELEASE HISTORY */
|
|
/* */
|
|
/* DATE NAME DESCRIPTION */
|
|
/* */
|
|
/* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */
|
|
/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */
|
|
/* resulting in version 6.1 */
|
|
/* 04-02-2021 Chaoqiong Xiao Modified comment(s), */
|
|
/* added volume RES support, */
|
|
/* resulting in version 6.1.6 */
|
|
/* 08-02-2021 Chaoqiong Xiao Modified comment(s), */
|
|
/* added extern "C" keyword */
|
|
/* for compatibility with C++, */
|
|
/* resulting in version 6.1.8 */
|
|
/* 07-29-2022 Chaoqiong Xiao Modified comment(s), */
|
|
/* added support of multiple */
|
|
/* sampling frequencies, */
|
|
/* added clock multiplier DEFs,*/
|
|
/* resulting in version 6.1.12 */
|
|
/* 03-08-2023 Chaoqiong Xiao Modified comment(s), */
|
|
/* added error checks support, */
|
|
/* resulting in version 6.2.1 */
|
|
/* 10-31-2023 Chaoqiong Xiao Modified comment(s), */
|
|
/* optimized USB descriptors, */
|
|
/* resulting in version 6.3.0 */
|
|
/* */
|
|
/**************************************************************************/
|
|
|
|
#ifndef UX_DEVICE_CLASS_AUDIO20_H
|
|
#define UX_DEVICE_CLASS_AUDIO20_H
|
|
|
|
/* Determine if a C++ compiler is being used. If so, ensure that standard
|
|
C is used to process the API information. */
|
|
|
|
#ifdef __cplusplus
|
|
|
|
/* Yes, C++ compiler is present. Use standard C. */
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
/* Internal option: enable the basic USBX error checking. This define is typically used
|
|
while debugging application. */
|
|
#if defined(UX_ENABLE_ERROR_CHECKING) && !defined(UX_DEVICE_CLASS_AUDIO_ENABLE_ERROR_CHECKING)
|
|
#define UX_DEVICE_CLASS_AUDIO_ENABLE_ERROR_CHECKING
|
|
#endif
|
|
|
|
|
|
/* Define Audio Class function category codes. */
|
|
|
|
#define UX_DEVICE_CLASS_AUDIO20_CATEGORY_UNDEFINED 0x00
|
|
#define UX_DEVICE_CLASS_AUDIO20_CATEGORY_DESKTOP_SPEAKER 0x01
|
|
#define UX_DEVICE_CLASS_AUDIO20_CATEGORY_HOME_THEATER 0x02
|
|
#define UX_DEVICE_CLASS_AUDIO20_CATEGORY_MICROPHONE 0x03
|
|
#define UX_DEVICE_CLASS_AUDIO20_CATEGORY_HEADSET 0x04
|
|
#define UX_DEVICE_CLASS_AUDIO20_CATEGORY_TELEPHONE 0x05
|
|
#define UX_DEVICE_CLASS_AUDIO20_CATEGORY_CONVERTER 0x06
|
|
#define UX_DEVICE_CLASS_AUDIO20_CATEGORY_VOICE_SOUND_RECORDER 0x07
|
|
#define UX_DEVICE_CLASS_AUDIO20_CATEGORY_I_O_BOX 0x08
|
|
#define UX_DEVICE_CLASS_AUDIO20_CATEGORY_MUSICAL_INSTRUMENT 0x09
|
|
#define UX_DEVICE_CLASS_AUDIO20_CATEGORY_PRO_AUDIO 0x0A
|
|
#define UX_DEVICE_CLASS_AUDIO20_CATEGORY_AUDIO_VIDEO 0x0B
|
|
#define UX_DEVICE_CLASS_AUDIO20_CATEGORY_CONTROL_PANEL 0x0C
|
|
#define UX_DEVICE_CLASS_AUDIO20_CATEGORY_OTHER 0xFF
|
|
|
|
|
|
/* Define Audio Class specific AC interface descriptor subclasses. */
|
|
|
|
#define UX_DEVICE_CLASS_AUDIO20_AC_UNDEFINED 0x00
|
|
#define UX_DEVICE_CLASS_AUDIO20_AC_HEADER 0x01
|
|
#define UX_DEVICE_CLASS_AUDIO20_AC_INPUT_TERMINAL 0x02
|
|
#define UX_DEVICE_CLASS_AUDIO20_AC_OUTPUT_TERMINAL 0x03
|
|
#define UX_DEVICE_CLASS_AUDIO20_AC_MIXER_UNIT 0x04
|
|
#define UX_DEVICE_CLASS_AUDIO20_AC_SELECTOR_UNIT 0x05
|
|
#define UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT 0x06
|
|
#define UX_DEVICE_CLASS_AUDIO20_AC_EFFECT_UNIT 0x07
|
|
#define UX_DEVICE_CLASS_AUDIO20_AC_PROCESSING_UNIT 0x08
|
|
#define UX_DEVICE_CLASS_AUDIO20_AC_EXTENSION_UNIT 0x09
|
|
#define UX_DEVICE_CLASS_AUDIO20_AC_CLOCK_SOURCE 0x0A
|
|
#define UX_DEVICE_CLASS_AUDIO20_AC_CLOCK_SELECTOR 0x0B
|
|
#define UX_DEVICE_CLASS_AUDIO20_AC_CLOCK_MULTIPLIER 0x0C
|
|
#define UX_DEVICE_CLASS_AUDIO20_AC_SAMPLE_RATE_CONVERTER 0x0D
|
|
|
|
|
|
/* Define Audio Class specific AS interface descriptor subclasses. */
|
|
|
|
#define UX_DEVICE_CLASS_AUDIO20_AS_UNDEFINED 0x00
|
|
#define UX_DEVICE_CLASS_AUDIO20_AS_GENERAL 0x01
|
|
#define UX_DEVICE_CLASS_AUDIO20_AS_FORMAT_TYPE 0x02
|
|
#define UX_DEVICE_CLASS_AUDIO20_AS_ENCODER 0x03
|
|
#define UX_DEVICE_CLASS_AUDIO20_AS_DECODER 0x04
|
|
|
|
|
|
/* Define Audio Class specific endpoint descriptor subtypes. */
|
|
|
|
#define UX_DEVICE_CLASS_AUDIO20_EP_UNDEFINED 0x00
|
|
#define UX_DEVICE_CLASS_AUDIO20_EP_GENERAL 0x01
|
|
|
|
|
|
/* Define Audio Class specific request codes. */
|
|
|
|
#define UX_DEVICE_CLASS_AUDIO20_REQUEST_CODE_UNDEFINED 0x00
|
|
#define UX_DEVICE_CLASS_AUDIO20_CUR 0x01
|
|
#define UX_DEVICE_CLASS_AUDIO20_RANGE 0x02
|
|
#define UX_DEVICE_CLASS_AUDIO20_MEM 0x03
|
|
|
|
|
|
/* Define Audio Class specific clock source control selectors. */
|
|
|
|
#define UX_DEVICE_CLASS_AUDIO20_CS_CONTROL_UNDEFINED 0x00
|
|
#define UX_DEVICE_CLASS_AUDIO20_CS_SAM_FREQ_CONTROL 0x01
|
|
#define UX_DEVICE_CLASS_AUDIO20_CS_CLOCK_VALID_CONTROL 0x02
|
|
|
|
|
|
/* Define Audio Class specific clock selector control selectors. */
|
|
|
|
|
|
#define UX_DEVICE_CLASS_AUDIO20_CX_CONTROL_UNDEFINED 0x00
|
|
#define UX_DEVICE_CLASS_AUDIO20_CX_CLOCK_SELECTOR_CONTROL 0x01
|
|
|
|
|
|
/* Define Audio Class specific clock multiplier control selectors. */
|
|
|
|
|
|
#define UX_DEVICE_CLASS_AUDIO20_CM_CONTROL_UNDEFINED 0x00
|
|
#define UX_DEVICE_CLASS_AUDIO20_CM_NUMERATOR_CONTROL 0x01
|
|
#define UX_DEVICE_CLASS_AUDIO20_CM_DENOMINATOR_CONTROL 0x02
|
|
|
|
/* Define Audio Class specific terminal control selectors. */
|
|
|
|
#define UX_DEVICE_CLASS_AUDIO20_TE_CONTROL_UNDEFINED 0x00
|
|
#define UX_DEVICE_CLASS_AUDIO20_TE_COPY_PROTECT_CONTROL 0x01
|
|
#define UX_DEVICE_CLASS_AUDIO20_TE_CONNECTOR_CONTROL 0x02
|
|
#define UX_DEVICE_CLASS_AUDIO20_TE_OVERLOAD_CONTROL 0x03
|
|
#define UX_DEVICE_CLASS_AUDIO20_TE_CLUSTER_CONTROL 0x04
|
|
#define UX_DEVICE_CLASS_AUDIO20_TE_UNDERFLOW_CONTROL 0x05
|
|
#define UX_DEVICE_CLASS_AUDIO20_TE_OVERFLOW_CONTROL 0x06
|
|
#define UX_DEVICE_CLASS_AUDIO20_TE_LATENCY_CONTROL 0x07
|
|
|
|
|
|
/* Define Audio Class specific feature unit control selectors. */
|
|
|
|
#define UX_DEVICE_CLASS_AUDIO20_FU_CONTROL_UNDEFINED 0x00
|
|
#define UX_DEVICE_CLASS_AUDIO20_FU_MUTE_CONTROL 0x01
|
|
#define UX_DEVICE_CLASS_AUDIO20_FU_VOLUME_CONTROL 0x02
|
|
#define UX_DEVICE_CLASS_AUDIO20_FU_BASS_CONTROL 0x03
|
|
#define UX_DEVICE_CLASS_AUDIO20_FU_MID_CONTROL 0x04
|
|
#define UX_DEVICE_CLASS_AUDIO20_FU_TREBLE_CONTROL 0x05
|
|
#define UX_DEVICE_CLASS_AUDIO20_FU_GRAPHIC_EQUALIZER_CONTROL 0x06
|
|
#define UX_DEVICE_CLASS_AUDIO20_FU_AUTOMATIC_GAIN_CONTROL 0x07
|
|
#define UX_DEVICE_CLASS_AUDIO20_FU_DELAY_CONTROL 0x08
|
|
#define UX_DEVICE_CLASS_AUDIO20_FU_BASS_BOOST_CONTROL 0x09
|
|
#define UX_DEVICE_CLASS_AUDIO20_FU_LOUNDNESS_CONTROL 0x0A
|
|
#define UX_DEVICE_CLASS_AUDIO20_FU_INPUT_GAIN_CONTROL 0x0B
|
|
#define UX_DEVICE_CLASS_AUDIO20_FU_INPUT_GAIN_PAD_CONTROL 0x0C
|
|
#define UX_DEVICE_CLASS_AUDIO20_FU_PHASE_INVERTER_CONTROL 0x0D
|
|
#define UX_DEVICE_CLASS_AUDIO20_FU_UNDERFLOW_CONTROL 0x0E
|
|
#define UX_DEVICE_CLASS_AUDIO20_FU_OVERFLOW_CONTROL 0x0F
|
|
#define UX_DEVICE_CLASS_AUDIO20_FU_LATENCY_CONTROL 0x10
|
|
|
|
|
|
/* Define Audio Class encoding format type bit allocations. */
|
|
|
|
#define UX_DEVICE_CLASS_AUDIO20_FORMAT_PCM (1u << 0)
|
|
#define UX_DEVICE_CLASS_AUDIO20_FORMAT_PCM8 (1u << 1)
|
|
#define UX_DEVICE_CLASS_AUDIO20_FORMAT_IEEE_FLOAT (1u << 2)
|
|
#define UX_DEVICE_CLASS_AUDIO20_FORMAT_ALAW (1u << 3)
|
|
#define UX_DEVICE_CLASS_AUDIO20_FORMAT_MULAW (1u << 4)
|
|
#define UX_DEVICE_CLASS_AUDIO20_FORMAT_RAW (1u << 31)
|
|
|
|
|
|
/* Audio Class Control header descriptor structures. */
|
|
|
|
typedef struct UX_DEVICE_CLASS_AUDIO20_AC_HEADER_DESCRIPTOR_STRUCT
|
|
{
|
|
|
|
UCHAR bLength;
|
|
UCHAR bDescriptorType;
|
|
UCHAR bDescriptorSubtype;
|
|
UCHAR _align_bcdADC[1];
|
|
USHORT bcdADC;
|
|
UCHAR bCategory;
|
|
UCHAR _align_wTotalLength[1];
|
|
USHORT wTotalLength;
|
|
UCHAR _align_bmControls[2];
|
|
ULONG bmControls;
|
|
} UX_DEVICE_CLASS_AUDIO20_AC_HEADER_DESCRIPTOR;
|
|
|
|
|
|
/* Define Audio Class specific clock source descriptor. */
|
|
|
|
typedef struct UX_DEVICE_CLASS_AUDIO20_AC_CLOCK_SOURCE_DESCRIPTOR_STRUCT
|
|
{
|
|
|
|
UCHAR bLength;
|
|
UCHAR bDescriptorType;
|
|
UCHAR bDescriptorSubType;
|
|
UCHAR bClockID;
|
|
UCHAR bmAttributes;
|
|
UCHAR bmControls;
|
|
UCHAR bAssocTerminal;
|
|
UCHAR iClockSource;
|
|
} UX_DEVICE_CLASS_AUDIO20_AC_CLOCK_SOURCE_DESCRIPTOR;
|
|
|
|
|
|
/* Define Audio Class specific input terminal interface descriptor. */
|
|
|
|
typedef struct UX_DEVICE_CLASS_AUDIO20_AC_INPUT_TERMINAL_DESCRIPTOR_STRUCT
|
|
{
|
|
|
|
UCHAR bLength;
|
|
UCHAR bDescriptorType;
|
|
UCHAR bDescriptorSubType;
|
|
UCHAR bTerminalID;
|
|
USHORT wTerminalType;
|
|
UCHAR bAssocTerminal;
|
|
UCHAR bCSourceID;
|
|
UCHAR bNrChannels;
|
|
UCHAR _align_bmChannelConfig[3];
|
|
ULONG bmChannelConfig;
|
|
UCHAR iChannelNames;
|
|
UCHAR _align_bmControls[1];
|
|
USHORT bmControls;
|
|
UCHAR iTerminal;
|
|
UCHAR _align_size[3];
|
|
} UX_DEVICE_CLASS_AUDIO20_AC_INPUT_TERMINAL_DESCRIPTOR;
|
|
|
|
|
|
/* Define Audio Class specific output terminal interface descriptor. */
|
|
|
|
typedef struct UX_DEVICE_CLASS_AUDIO20_AC_OUTPUT_TERMINAL_DESCRIPTOR_STRUCT
|
|
{
|
|
|
|
UCHAR bLength;
|
|
UCHAR bDescriptorType;
|
|
UCHAR bDescriptorSubType;
|
|
UCHAR bTerminalID;
|
|
USHORT wTerminalType;
|
|
UCHAR bAssocTerminal;
|
|
UCHAR bSourceID;
|
|
UCHAR bCSourceID;
|
|
UCHAR _align_bmControls[1];
|
|
USHORT bmControls;
|
|
UCHAR iTerminal;
|
|
UCHAR _align_size[3];
|
|
} UX_DEVICE_CLASS_AUDIO20_AC_OUTPUT_TERMINAL_DESCRIPTOR;
|
|
|
|
|
|
/* Define Audio Class specific feature unit descriptor. */
|
|
|
|
typedef struct UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT_DESCRIPTOR_STRUCT
|
|
{
|
|
|
|
UCHAR bLength;
|
|
UCHAR bDescriptorType;
|
|
UCHAR bDescriptorSubType;
|
|
UCHAR bUnitID;
|
|
UCHAR bSourceID;
|
|
UCHAR _align_bmaControls[3];
|
|
ULONG bmaControls;
|
|
} UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT_DESCRIPTOR;
|
|
|
|
typedef struct UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT1_DESCRIPTOR_STRUCT
|
|
{
|
|
|
|
UCHAR bLength;
|
|
UCHAR bDescriptorType;
|
|
UCHAR bDescriptorSubType;
|
|
UCHAR bUnitID;
|
|
UCHAR bSourceID;
|
|
UCHAR _align_bmaControls[3];
|
|
ULONG bmaControls0;
|
|
ULONG bmaControls1;
|
|
} UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT1_DESCRIPTOR;
|
|
|
|
typedef struct UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT2_DESCRIPTOR_STRUCT
|
|
{
|
|
|
|
UCHAR bLength;
|
|
UCHAR bDescriptorType;
|
|
UCHAR bDescriptorSubType;
|
|
UCHAR bUnitID;
|
|
UCHAR bSourceID;
|
|
UCHAR _align_bmaControls[3];
|
|
ULONG bmaControls0;
|
|
ULONG bmaControls1;
|
|
ULONG bmaControls2;
|
|
} UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT2_DESCRIPTOR;
|
|
|
|
typedef struct UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT3_DESCRIPTOR_STRUCT
|
|
{
|
|
|
|
UCHAR bLength;
|
|
UCHAR bDescriptorType;
|
|
UCHAR bDescriptorSubType;
|
|
UCHAR bUnitID;
|
|
UCHAR bSourceID;
|
|
UCHAR _align_bmaControls[3];
|
|
ULONG bmaControls0;
|
|
ULONG bmaControls1;
|
|
ULONG bmaControls2;
|
|
ULONG bmaControls3;
|
|
} UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT3_DESCRIPTOR;
|
|
|
|
typedef struct UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT6_DESCRIPTOR_STRUCT
|
|
{
|
|
|
|
UCHAR bLength;
|
|
UCHAR bDescriptorType;
|
|
UCHAR bDescriptorSubType;
|
|
UCHAR bUnitID;
|
|
UCHAR bSourceID;
|
|
UCHAR _align_bmaControls[3];
|
|
ULONG bmaControls0;
|
|
ULONG bmaControls1;
|
|
ULONG bmaControls2;
|
|
ULONG bmaControls3;
|
|
ULONG bmaControls4;
|
|
ULONG bmaControls5;
|
|
ULONG bmaControls6;
|
|
} UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT6_DESCRIPTOR;
|
|
|
|
typedef struct UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT7_DESCRIPTOR_STRUCT
|
|
{
|
|
|
|
UCHAR bLength;
|
|
UCHAR bDescriptorType;
|
|
UCHAR bDescriptorSubType;
|
|
UCHAR bUnitID;
|
|
UCHAR bSourceID;
|
|
UCHAR _align_bmaControls[3];
|
|
ULONG bmaControls0;
|
|
ULONG bmaControls1;
|
|
ULONG bmaControls2;
|
|
ULONG bmaControls3;
|
|
ULONG bmaControls4;
|
|
ULONG bmaControls5;
|
|
ULONG bmaControls6;
|
|
ULONG bmaControls7;
|
|
} UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT7_DESCRIPTOR;
|
|
|
|
typedef struct UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT8_DESCRIPTOR_STRUCT
|
|
{
|
|
|
|
UCHAR bLength;
|
|
UCHAR bDescriptorType;
|
|
UCHAR bDescriptorSubType;
|
|
UCHAR bUnitID;
|
|
UCHAR bSourceID;
|
|
UCHAR _align_bmaControls[3];
|
|
ULONG bmaControls0;
|
|
ULONG bmaControls1;
|
|
ULONG bmaControls2;
|
|
ULONG bmaControls3;
|
|
ULONG bmaControls4;
|
|
ULONG bmaControls5;
|
|
ULONG bmaControls6;
|
|
ULONG bmaControls7;
|
|
ULONG bmaControls8;
|
|
} UX_DEVICE_CLASS_AUDIO20_AC_FEATURE_UNIT8_DESCRIPTOR;
|
|
|
|
|
|
/* Define Audio Class streaming interface descriptor. */
|
|
|
|
typedef struct UX_DEVICE_CLASS_AUDIO20_AS_INTERFACE_DESCRIPTOR_STRUCT
|
|
{
|
|
|
|
UCHAR bLength;
|
|
UCHAR bDescriptorType;
|
|
UCHAR bDescriptorSubtype;
|
|
UCHAR bTerminalLink;
|
|
UCHAR bmControls;
|
|
UCHAR bFormatType;
|
|
UCHAR _align_bmFormats[2];
|
|
ULONG bmFormats;
|
|
UCHAR bNrChannels;
|
|
UCHAR _align_bmChannelConfig[3];
|
|
ULONG bmChannelConfig;
|
|
UCHAR iChannelNames;
|
|
UCHAR _align_size[3];
|
|
} UX_DEVICE_CLASS_AUDIO20_AS_INTERFACE_DESCRIPTOR;
|
|
|
|
|
|
/* Define Audio Class type I format type descriptor. */
|
|
|
|
typedef struct UX_DEVICE_CLASS_AUDIO20_AS_TYPE_I_FORMAT_TYPE_DESCRIPTOR_STRUCT
|
|
{
|
|
|
|
UCHAR bLength;
|
|
UCHAR bDescriptorType;
|
|
UCHAR bDescriptorSubtype;
|
|
UCHAR bFormatType;
|
|
UCHAR bSubslotSize;
|
|
UCHAR bBitResolution;
|
|
UCHAR _align_size[2];
|
|
} UX_DEVICE_CLASS_AUDIO20_AS_TYPE_I_FORMAT_TYPE_DESCRIPTOR;
|
|
|
|
|
|
/* Define Audio Class specific streaming endpoint descriptor. */
|
|
|
|
typedef struct UX_DEVICE_CLASS_AUDIO20_AS_DATA_ENDPOINT_DESCRIPTOR_STRUCT
|
|
{
|
|
|
|
UCHAR bLength;
|
|
UCHAR bDescriptorType;
|
|
UCHAR bDescriptorSubtype;
|
|
UCHAR bmAttributes;
|
|
UCHAR bmControls;
|
|
UCHAR bLockDelayUnits;
|
|
USHORT wLockDelay;
|
|
} UX_DEVICE_CLASS_AUDIO20_AS_DATA_ENDPOINT_DESCRIPTOR;
|
|
|
|
typedef struct UX_DEVICE_CLASS_AUDIO20_CONTROL_STRUCT
|
|
{
|
|
ULONG ux_device_class_audio20_control_changed;
|
|
|
|
ULONG ux_device_class_audio20_control_cs_id;
|
|
ULONG ux_device_class_audio20_control_sampling_frequency; /* Set to 0 to customize frequencies (with following two fields). */
|
|
ULONG ux_device_class_audio20_control_sampling_frequency_cur; /* Current selected frequency. */
|
|
UCHAR *ux_device_class_audio20_control_sampling_frequency_range; /* UAC 2.0 Layer 3 parameter block of RANGE. */
|
|
|
|
ULONG ux_device_class_audio20_control_fu_id;
|
|
USHORT ux_device_class_audio20_control_mute[1];
|
|
SHORT ux_device_class_audio20_control_volume_min[1];
|
|
SHORT ux_device_class_audio20_control_volume_max[1];
|
|
USHORT ux_device_class_audio20_control_volume_res[1];
|
|
SHORT ux_device_class_audio20_control_volume[1];
|
|
} UX_DEVICE_CLASS_AUDIO20_CONTROL;
|
|
|
|
#define UX_DEVICE_CLASS_AUDIO20_CONTROL_MUTE_CHANGED 1u
|
|
#define UX_DEVICE_CLASS_AUDIO20_CONTROL_VOLUME_CHANGED 2u
|
|
#define UX_DEVICE_CLASS_AUDIO20_CONTROL_FREQUENCY_CHANGED 4u
|
|
|
|
typedef struct UX_DEVICE_CLASS_AUDIO20_CONTROL_GROUP_STRUCT
|
|
{
|
|
ULONG ux_device_class_audio20_control_group_controls_nb;
|
|
UX_DEVICE_CLASS_AUDIO20_CONTROL *ux_device_class_audio20_control_group_controls;
|
|
} UX_DEVICE_CLASS_AUDIO20_CONTROL_GROUP;
|
|
|
|
|
|
UINT _ux_device_class_audio20_control_process(UX_DEVICE_CLASS_AUDIO *audio,
|
|
UX_SLAVE_TRANSFER *transfer,
|
|
UX_DEVICE_CLASS_AUDIO20_CONTROL_GROUP *group);
|
|
|
|
UINT _uxe_device_class_audio20_control_process(UX_DEVICE_CLASS_AUDIO *audio,
|
|
UX_SLAVE_TRANSFER *transfer,
|
|
UX_DEVICE_CLASS_AUDIO20_CONTROL_GROUP *group);
|
|
|
|
#if defined(UX_DEVICE_CLASS_AUDIO_ENABLE_ERROR_CHECKING)
|
|
|
|
#define ux_device_class_audio20_control_process _uxe_device_class_audio20_control_process
|
|
|
|
#else
|
|
|
|
#define ux_device_class_audio20_control_process _ux_device_class_audio20_control_process
|
|
|
|
#endif
|
|
|
|
/* Determine if a C++ compiler is being used. If so, complete the standard
|
|
C conditional started above. */
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* ifndef UX_DEVICE_CLASS_AUDIO20_H */
|