/***************************************************************************
 * Copyright (c) 2024 Microsoft Corporation
 * Copyright (c) 2026-present Eclipse ThreadX contributors
 *
 * 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                                                        */
/**                                                                       */
/**   Audio Class                                                         */
/**                                                                       */
/**************************************************************************/
/**************************************************************************/


/**************************************************************************/
/*                                                                        */
/*  COMPONENT DEFINITION                                   RELEASE        */
/*                                                                        */
/*    ux_class_audio10.h                                  PORTABLE C      */
/*                                                           6.1.12       */
/*  AUTHOR                                                                */
/*                                                                        */
/*    Chaoqiong Xiao, Microsoft Corporation                               */
/*                                                                        */
/*  DESCRIPTION                                                           */
/*                                                                        */
/*    This file contains all the header and structures used by the        */
/*    USBX Audio Class (UAC) 1.0.                                         */
/*                                                                        */
/**************************************************************************/

#ifndef UX_CLASS_AUDIO10_H
#define UX_CLASS_AUDIO10_H

/* Define Audio Class Codes.  */

#define UX_CLASS_AUDIO10_CLASS                              0x01
#define UX_CLASS_AUDIO10_SUBCLASS_UNDEFINED                 0x00
#define UX_CLASS_AUDIO10_SUBCLASS_AUDIOCONTROL              0x01
#define UX_CLASS_AUDIO10_SUBCLASS_AUDIOSTREAMING            0x02
#define UX_CLASS_AUDIO10_SUBCLASS_MIDISTREAMING             0x03
#define UX_CLASS_AUDIO10_PROTOCOL_UNDEFINED                 0x00


/* Define Audio Class descriptor types.  */
#define UX_CLASS_AUDIO10_CS_UNDEFINED                       0x20
#define UX_CLASS_AUDIO10_CS_DEVICE                          0x21
#define UX_CLASS_AUDIO10_CS_CONFIGURATION                   0x22
#define UX_CLASS_AUDIO10_CS_STRING                          0x23
#define UX_CLASS_AUDIO10_CS_INTERFACE                       0x24
#define UX_CLASS_AUDIO10_CS_ENDPOINT                        0x25


/* Define Audio Class AC interface descriptor subclasses.  */

#define UX_CLASS_AUDIO10_AC_UNDEFINED                       0x00
#define UX_CLASS_AUDIO10_AC_HEADER                          0x01
#define UX_CLASS_AUDIO10_AC_INPUT_TERMINAL                  0x02
#define UX_CLASS_AUDIO10_AC_OUTPUT_TERMINAL                 0x03
#define UX_CLASS_AUDIO10_AC_MIXER_UNIT                      0x04
#define UX_CLASS_AUDIO10_AC_SELECTOR_UNIT                   0x05
#define UX_CLASS_AUDIO10_AC_FEATURE_UNIT                    0x06
#define UX_CLASS_AUDIO10_AC_PROCESSING_UNIT                 0x07
#define UX_CLASS_AUDIO10_AC_EXTENSION_UNIT                  0x08


/* Define Audio Class Processing Unit (PU) Process Types (PT).  */

#define UX_CLASS_AUDIO10_PROCESS_UNDEFINED                  0x00
#define UX_CLASS_AUDIO10_PROCESS_UP_DOWN_MIX                0x01
#define UX_CLASS_AUDIO10_PROCESS_DOLBY_PROLOGIC             0x02
#define UX_CLASS_AUDIO10_PROCESS_3D_STEREO_EXTENDER         0x03
#define UX_CLASS_AUDIO10_PROCESS_REVERBERATION              0x04
#define UX_CLASS_AUDIO10_PROCESS_CHORUS                     0x05
#define UX_CLASS_AUDIO10_PROCESS_DYN_RANGE_COMP             0x06


/* Define Audio Class AS interface descriptor subclasses.  */

#define UX_CLASS_AUDIO10_AS_UNDEFINED                       0x00
#define UX_CLASS_AUDIO10_AS_GENERAL                         0x01
#define UX_CLASS_AUDIO10_AS_FORMAT_TYPE                     0x02
#define UX_CLASS_AUDIO10_AS_FORMAT_SPECIFIC                 0x03


/* Define Audio Class endpoint descriptor subtypes.  */

#define UX_CLASS_AUDIO10_EP_UNDEFINED                       0x00
#define UX_CLASS_AUDIO10_EP_GENERAL                         0x01


/* Define Audio Class request codes.  */

#define UX_CLASS_AUDIO10_REQUEST_CODE_UNDEFINED             0x00
#define UX_CLASS_AUDIO10_SET_CUR                            0x01
#define UX_CLASS_AUDIO10_GET_CUR                            0x81
#define UX_CLASS_AUDIO10_SET_MIN                            0x02
#define UX_CLASS_AUDIO10_GET_MIN                            0x82
#define UX_CLASS_AUDIO10_SET_MAX                            0x03
#define UX_CLASS_AUDIO10_GET_MAX                            0x83
#define UX_CLASS_AUDIO10_SET_RES                            0x04
#define UX_CLASS_AUDIO10_GET_RES                            0x84
#define UX_CLASS_AUDIO10_SET_MEM                            0x05
#define UX_CLASS_AUDIO10_GET_MEM                            0x85
#define UX_CLASS_AUDIO10_GET_STAT                           0xFF


/* Define Audio Class terminal control selectors.  */

#define UX_CLASS_AUDIO10_TE_CONTROL_UNDEFINED               0x00
#define UX_CLASS_AUDIO10_TE_COPY_PROTECT_CONTROL            0x01

/* Define Audio Class feature unit control selectors.  */

#define UX_CLASS_AUDIO10_FU_CONTROL_UNDEFINED               0x00
#define UX_CLASS_AUDIO10_FU_MUTE_CONTROL                    0x01
#define UX_CLASS_AUDIO10_FU_VOLUME_CONTROL                  0x02
#define UX_CLASS_AUDIO10_FU_BASS_CONTROL                    0x03
#define UX_CLASS_AUDIO10_FU_MID_CONTROL                     0x04
#define UX_CLASS_AUDIO10_FU_TREBLE_CONTROL                  0x05
#define UX_CLASS_AUDIO10_FU_GRAPHIC_EQUALIZER_CONTROL       0x06
#define UX_CLASS_AUDIO10_FU_AUTOMATIC_GAIN_CONTROL          0x07
#define UX_CLASS_AUDIO10_FU_DELAY_CONTROL                   0x08
#define UX_CLASS_AUDIO10_FU_BASS_BOOST_CONTROL              0x09
#define UX_CLASS_AUDIO10_FU_LOUNDNESS_CONTROL               0x0A


/* Define Audio Class processing unit control selectors.  */

/* Define Audio Class up/down-mix (UD) processing unit control selectors.  */

#define UX_CLASS_AUDIO10_UD_CONTROL_UNDEFINED               0x00
#define UX_CLASS_AUDIO10_UD_ENABLE_CONTROL                  0x01
#define UX_CLASS_AUDIO10_UD_MODE_SELECT_CONTROL             0x02

/* Define Audio Class dolby prologic (DP) processing unit control selectors.  */

#define UX_CLASS_AUDIO10_DP_CONTROL_UNDEFINED               0x00
#define UX_CLASS_AUDIO10_DP_ENABLE_CONTROL                  0x01
#define UX_CLASS_AUDIO10_DP_MODE_SELECT_CONTROL             0x02

/* Define Audio Class 3D stereo extender (3D) processing unit control selectors.  */

#define UX_CLASS_AUDIO10_3D_CONTROL_UNDEFINED               0x00
#define UX_CLASS_AUDIO10_3D_ENABLE_CONTROL                  0x01
#define UX_CLASS_AUDIO10_3D_SPACIOUSNESS_CONTROL            0x02

/* Define Audio Class reverberation (RV) processing unit control selectors.  */

#define UX_CLASS_AUDIO10_RV_CONTROL_UNDEFINED               0x00
#define UX_CLASS_AUDIO10_RV_ENABLE_CONTROL                  0x01
#define UX_CLASS_AUDIO10_RV_LEVEL_CONTROL                   0x02
#define UX_CLASS_AUDIO10_RV_TIME_CONTROL                    0x03
#define UX_CLASS_AUDIO10_RV_FEEDBACK_CONTROL                0x04

/* Define Audio Class chorus (CH) processing unit control selectors.  */

#define UX_CLASS_AUDIO10_CHORUS_CONTROL_UNDEFINED           0x00
#define UX_CLASS_AUDIO10_CHORUS_ENABLE_CONTROL              0x01
#define UX_CLASS_AUDIO10_CHORUS_LEVEL_CONTROL               0x02
#define UX_CLASS_AUDIO10_CHORUS_RATE_CONTROL                0x03
#define UX_CLASS_AUDIO10_CHORUS_DEPTH_CONTROL               0x04

/* Define Audio Class dynamic range compressor (DR) processing unit control selectors.  */

#define UX_CLASS_AUDIO10_DR_CONTROL_UNDEFINED               0x00
#define UX_CLASS_AUDIO10_DR_ENABLE_CONTROL                  0x01
#define UX_CLASS_AUDIO10_DR_COMPRESSION_RATE_CONTROL        0x02
#define UX_CLASS_AUDIO10_DR_MAXAMPL_CONTROL                 0x03
#define UX_CLASS_AUDIO10_DR_THRESHOLD_CONTROL               0x04
#define UX_CLASS_AUDIO10_DR_ATTACK_TIME                     0x05
#define UX_CLASS_AUDIO10_DR_RELEASE_TIME                    0x06

/* Define Audio Class extension unit (XU) control selectors.  */

#define UX_CLASS_AUDIO10_XU_CONTROL_UNDEFINED               0x00
#define UX_CLASS_AUDIO10_XU_ENABLE_CONTROL                  0x01


/* Define Audio Class endpoint control selectors.  */

#define UX_CLASS_AUDIO10_EP_CONTROL_UNDEFINED               0x00
#define UX_CLASS_AUDIO10_EP_SAMPLING_FREQ_CONTROL           0x01
#define UX_CLASS_AUDIO10_EP_PITCH_CONTROL                   0x02


/* Define Audio Class format type codes.  */

#define UX_CLASS_AUDIO10_FORMAT_TYPE_UNDEFINED              0x00
#define UX_CLASS_AUDIO10_FORMAT_TYPE_I                      0x01
#define UX_CLASS_AUDIO10_FORMAT_TYPE_II                     0x02
#define UX_CLASS_AUDIO10_FORMAT_TYPE_III                    0x03

/* Define Audio Class format tag codes.  */

#define UX_CLASS_AUDIO10_FORMAT_TYPE_I_UNDEFINED                    0x0000
#define UX_CLASS_AUDIO10_FORMAT_TYPE_I_PCM                          0x0001
#define UX_CLASS_AUDIO10_FORMAT_TYPE_I_PCM8                         0x0002
#define UX_CLASS_AUDIO10_FORMAT_TYPE_I_IEEE_FLOAT                   0x0003
#define UX_CLASS_AUDIO10_FORMAT_TYPE_I_ALAW                         0x0004
#define UX_CLASS_AUDIO10_FORMAT_TYPE_I_MULAW                        0x0005

#define UX_CLASS_AUDIO10_FORMAT_TYPE_II_UNDEFINED                   0x1000
#define UX_CLASS_AUDIO10_FORMAT_TYPE_II_MPEG                        0x1001
#define UX_CLASS_AUDIO10_FORMAT_TYPE_II_AC3                         0x1002

#define UX_CLASS_AUDIO10_FORMAT_TYPE_III_UNDEFINED                  0x2000
#define UX_CLASS_AUDIO10_FORMAT_TYPE_III_IEC1937_AC3                0x2001
#define UX_CLASS_AUDIO10_FORMAT_TYPE_III_IEC1937_MPEG1_L1           0x2002
#define UX_CLASS_AUDIO10_FORMAT_TYPE_III_IEC1937_MPEG1_L2_3         0x2003
#define UX_CLASS_AUDIO10_FORMAT_TYPE_III_IEC1937_MPEG2_NOEXT        0x2003
#define UX_CLASS_AUDIO10_FORMAT_TYPE_III_IEC1937_MPEG2_EXT          0x2004
#define UX_CLASS_AUDIO10_FORMAT_TYPE_III_IEC1937_MPEG2_L1_LS        0x2005
#define UX_CLASS_AUDIO10_FORMAT_TYPE_III_IEC1937_MPEG2_L2_3_LS      0x2006


/* Define Audio Class MPEG (MP) control selectors.  */

#define UX_CLASS_AUDIO10_MP_CONTROL_UNDEFINED                       0x00
#define UX_CLASS_AUDIO10_MP_DUAL_CHANNEL_CONTROL                    0x01
#define UX_CLASS_AUDIO10_MP_SECOND_STEREO_CONTROL                   0x02
#define UX_CLASS_AUDIO10_MP_MULTILINGUAL_CONTROL                    0x03
#define UX_CLASS_AUDIO10_MP_DYN_RANGE_CONTROL                       0x04
#define UX_CLASS_AUDIO10_MP_SCALING_CONTROL                         0x05
#define UX_CLASS_AUDIO10_MP_HILO_SCALING_CONTROL                    0x06

/* Define Audio Class AC-3 (AC) control selectors.  */

#define UX_CLASS_AUDIO10_AC_CONTROL_UNDEFINED                       0x00
#define UX_CLASS_AUDIO10_AC_MODE_CONTROL                            0x01
#define UX_CLASS_AUDIO10_AC_DYN_RANGE_CONTROL                       0x02
#define UX_CLASS_AUDIO10_AC_SCALING_CONTROL                         0x03
#define UX_CLASS_AUDIO10_AC_HILO_SCALING_CONTROL                    0x04


/* Class descriptor structures (packed).
 * Typedefs to be used:
 * - for byte               : UCHAR/CHAR
 * - for word               : USHORT/SHORT
 * - for double word (dword): ULONG/LONG
 * - for 64-bit-width word  : ULONG64
 * Field offset considerations inside descriptor:
 * - Minimum fields alignment: byte (8-bit)
 * - Field is not byte and not aligned : field declared as bytes array (UCHAR[])
 * - Field is word and word aligned    : field declared as USHORT/SHORT
 * - Field is dword and dword aligned  : field declared as ULONG/LONG
 */


/* Audio Class AC interface header descriptors (bInCollection=1).  */

typedef struct UX_CLASS_AUDIO10_AC_HEADER_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bcdADC[2];
    UCHAR           wTotalLength[2];
    UCHAR           bInCollection;
    UCHAR           baInterfaceNr[1];
} UX_CLASS_AUDIO10_AC_HEADER_DESCRIPTOR;

/* Define Audio Class input terminal descriptor (ITD).  */

typedef struct UX_CLASS_AUDIO10_AC_INPUT_TERMINAL_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bTerminalID;
    USHORT          wTerminalType;
    UCHAR           bAssocTerminal;
    UCHAR           bNrChannels;
    USHORT          wChannelConfig;
    UCHAR           iChannelNames;
    UCHAR           iTerminal;
} UX_CLASS_AUDIO10_AC_INPUT_TERMINAL_DESCRIPTOR, UX_CLASS_AUDIO10_AC_ITD;

/* Define Audio Class output terminal descriptor (OTD).  */

typedef struct UX_CLASS_AUDIO10_AC_OUTPUT_TERMINAL_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bTerminalID;
    USHORT          wTerminalType;
    UCHAR           bAssocTerminal;
    UCHAR           bSourceID;
    UCHAR           iTerminal;
} UX_CLASS_AUDIO10_AC_OUTPUT_TERMINAL_DESCRIPTOR, UX_CLASS_AUDIO10_AC_OTD;

/* Define Audio Class mixer unit descriptor (MUD, bNrInPins=1, bmMixerControls N=1).  */

typedef struct UX_CLASS_AUDIO10_AC_MIXER_UNIT_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bUnitID;
    UCHAR           bNrInPins;
    UCHAR           baSourceID[1];
    UCHAR           bNrChannels;
    UCHAR           wChannelConfig[2];
    UCHAR           iChannelNames;
    UCHAR           bmControls[1];
    UCHAR           iMixer;
} UX_CLASS_AUDIO10_AC_MIXER_UNIT_DESCRIPTOR, UX_CLASS_AUDIO10_AC_MUD;

/* Define Audio Class selector unit descriptor (SUD, bNrInPins=1).  */

typedef struct UX_CLASS_AUDIO10_AC_SELECTOR_UNIT_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bUnitID;
    UCHAR           bNrInPins;
    UCHAR           baSourceID[1];
    UCHAR           iSelector;
} UX_CLASS_AUDIO10_AC_SELECTOR_UNIT_DESCRIPTOR, UX_CLASS_AUDIO10_AC_SUD;

/* Define Audio Class feature unit descriptor (FUD, ch=1, bControlSize=2).  */

typedef struct UX_CLASS_AUDIO10_AC_FEATURE_UNIT_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bUnitID;
    UCHAR           bSourceID;
    UCHAR           bControlSize;
    UCHAR           bmaControls[2 * 2];
    UCHAR           iFeature;
} UX_CLASS_AUDIO10_AC_FEATURE_UNIT_DESCRIPTOR, UX_CLASS_AUDIO10_AC_FUD;

/* FUD::bmControls.  */
#define UX_CLASS_AUDIO10_FUD_CONTROL_MUTE                               (1u << 0)
#define UX_CLASS_AUDIO10_FUD_CONTROL_VOLUME                             (1u << 1)
#define UX_CLASS_AUDIO10_FUD_CONTROL_BASS                               (1u << 2)
#define UX_CLASS_AUDIO10_FUD_CONTROL_MID                                (1u << 3)
#define UX_CLASS_AUDIO10_FUD_CONTROL_TREBLE                             (1u << 4)
#define UX_CLASS_AUDIO10_FUD_CONTROL_GRAPHIC_EQ                         (1u << 5)
#define UX_CLASS_AUDIO10_FUD_CONTROL_AUTO_GAIN                          (1u << 6)
#define UX_CLASS_AUDIO10_FUD_CONTROL_DELAY                              (1u << 7)
#define UX_CLASS_AUDIO10_FUD_CONTROL_BASS_BOOST                         (1u << 8)
#define UX_CLASS_AUDIO10_FUD_CONTROL_LOUDNESS                           (1u << 9)

/* Define Audio Class processing unit descriptor (PUD, bNrInPins=1,bControlSize=1).  */

typedef struct UX_CLASS_AUDIO10_AC_PROCESSING_UNIT_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bUnitID;
    USHORT          wProcessType;
    UCHAR           bNrInPins;
    UCHAR           baSourceID[1];
    UCHAR           bNrChannels;
    UCHAR           wChannelConfig;
    UCHAR           iChannelNames;
    UCHAR           bControlSize;
    UCHAR           bmControls[1];
    UCHAR           iProcessing;
} UX_CLASS_AUDIO10_AC_PROCESSING_UNIT_DESCRIPTOR, UX_CLASS_AUDIO10_AC_PUD;

/* Define Audio Class up/down processing unit descriptor (PUD, bNrInPins=1,bControlSize=1,bNrModes=1).  */

typedef struct UX_CLASS_AUDIO10_AC_UP_DOWN_PROCESSING_UNIT_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bUnitID;
    USHORT          wProcessType;
    UCHAR           bNrInPins;
    UCHAR           bSourceID;
    UCHAR           bNrChannels;
    UCHAR           wChannelConfig[2];
    UCHAR           iChannelNames;
    UCHAR           bControlSize;
    UCHAR           bmControls[1];
    UCHAR           iProcessing;
    UCHAR           bNrModes;
    UCHAR           waModes[2 * 1];
} UX_CLASS_AUDIO10_AC_UP_DOWN_PROCESSING_UNIT_DESCRIPTOR, UX_CLASS_AUDIO10_AC_UDD;

/* UDD::bmControls.  */
#define UX_CLASS_AUDIO10_UDD_CONTROL_ENABLE                             (1u << 0)
#define UX_CLASS_AUDIO10_UDD_CONTROL_MODE_SELECT                        (1u << 1)

/* Define Audio Class dolby prologic processing unit descriptor (DPD, bNrInPins=1,bControlSize=1,bNrModes=1).  */

typedef struct UX_CLASS_AUDIO10_AC_DOLBY_PROCESSING_UNIT_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bUnitID;
    USHORT          wProcessType;
    UCHAR           bNrInPins;
    UCHAR           bSourceID;
    UCHAR           bNrChannels;
    UCHAR           wChannelConfig[2];
    UCHAR           iChannelNames;
    UCHAR           bControlSize;
    UCHAR           bmControls[1];
    UCHAR           iProcessing;
    UCHAR           bNrModes;
    UCHAR           daModes[2 * 1];
} UX_CLASS_AUDIO10_AC_DOLBY_PROCESSING_UNIT_DESCRIPTOR, UX_CLASS_AUDIO10_AC_DPD;

/* DPD::bmaControls.  */
#define UX_CLASS_AUDIO10_DPD_CONTROL_ENABLE                                 (1u << 0)
#define UX_CLASS_AUDIO10_DPD_CONTROL_MODE_SELECT                            (1u << 1)

/* Define Audio Class 3D Stereo Extender (3D) Processing Unit Descriptor.  */
typedef UX_CLASS_AUDIO10_AC_PUD UX_CLASS_AUDIO10_AC_3D_STEREO_EXT_PROCESSING_UNIT_DESCRIPTOR;
typedef UX_CLASS_AUDIO10_AC_PUD UX_CLASS_AUDIO10_AC_3DD;

/* 3DD::bmaControls.  */
#define UX_CLASS_AUDIO10_3DD_CONTROL_ENABLE                                 (1u << 0)
#define UX_CLASS_AUDIO10_3DD_CONTROL_MODE_SELECT                            (1u << 1)

/* Define Audio Class Reverberation (RV) Processing Unit Descriptor.  */
typedef UX_CLASS_AUDIO10_AC_PUD UX_CLASS_AUDIO10_AC_REVERBERATION_PROCESSING_UNIT_DESCRIPTOR;
typedef UX_CLASS_AUDIO10_AC_PUD UX_CLASS_AUDIO10_AC_RVD;

/* RVD::bmaControls.  */
#define UX_CLASS_AUDIO10_RVD_CONTROL_ENABLE                                 (1u << 0)
#define UX_CLASS_AUDIO10_RVD_CONTROL_REVERB_TYPE                            (1u << 1)
#define UX_CLASS_AUDIO10_RVD_CONTROL_REVERB_LEVEL                           (1u << 2)
#define UX_CLASS_AUDIO10_RVD_CONTROL_REVERB_TIME                            (1u << 3)
#define UX_CLASS_AUDIO10_RVD_CONTROL_REVERB_DELAY_FEEDBACK                  (1u << 4)

/* Define Audio Class Chorus (CH) Processing Unit Descriptor.  */
typedef UX_CLASS_AUDIO10_AC_PUD UX_CLASS_AUDIO10_AC_CHORUS_PROCESSING_UNIT_DESCRIPTOR;
typedef UX_CLASS_AUDIO10_AC_PUD UX_CLASS_AUDIO10_AC_CHORUSD;

/* CHORUSD::bmaControls.  */
#define UX_CLASS_AUDIO10_CHORUSD_CONTROL_ENABLE                             (1u << 0)
#define UX_CLASS_AUDIO10_CHORUSD_CONTROL_CHORUS_LEVEL                       (1u << 1)
#define UX_CLASS_AUDIO10_CHORUSD_CONTROL_CHORUS_MODULATION_RATE             (1u << 2)
#define UX_CLASS_AUDIO10_CHORUSD_CONTROL_CHORUS_MODULATION_DEPTH            (1u << 3)

/* Define Audio Class Dynamic Range Compressor (DR) Processing Unit Descriptor.  */
typedef UX_CLASS_AUDIO10_AC_PUD UX_CLASS_AUDIO10_AC_DYN_RNG_COMP_PROCESSING_UNIT_DESCRIPTOR;
typedef UX_CLASS_AUDIO10_AC_PUD UX_CLASS_AUDIO10_AC_DRD;

/* DRD::bmaControls.  */
#define UX_CLASS_AUDIO10_DRD_CONTROL_ENABLE                                 (1u << 0)
#define UX_CLASS_AUDIO10_DRD_CONTROL_COMPRESSION_RATIO                      (1u << 1)
#define UX_CLASS_AUDIO10_DRD_CONTROL_MAXAMPL                                (1u << 2)
#define UX_CLASS_AUDIO10_DRD_CONTROL_THRESHOLD                              (1u << 3)
#define UX_CLASS_AUDIO10_DRD_CONTROL_ATTACH_TIME                            (1u << 4)
#define UX_CLASS_AUDIO10_DRD_CONTROL_RELEASE_TIME                           (1u << 5)

/* Define Audio Class Extension unit descriptor (XUD, bNrInPins=1,bControlSize=1).  */

typedef struct UX_CLASS_AUDIO10_AC_EXTENSION_UNIT_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bUnitID;
    USHORT          wExtensionCode;
    UCHAR           bNrInPins;
    UCHAR           baSourceID[1];
    UCHAR           bNrChannels;
    UCHAR           wChannelConfig[2];
    UCHAR           iChannelNames;
    UCHAR           bControlSize;
    UCHAR           bmControls[1];
    UCHAR           iExtension;
} UX_CLASS_AUDIO10_AC_EXTENSION_UNIT_DESCRIPTOR, UX_CLASS_AUDIO10_AC_XUD;

/* XUD::bmaControls.  */
#define UX_CLASS_AUDIO10_XUD_CONTROL_ENABLE                                 (1u << 0)

/* Define Audio Class Associated Interface descriptor (Association-specific x=1).  */

typedef struct UX_CLASS_AUDIO10_ASSOCIATED_INTERFACE_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bInterfaceNr;
    UCHAR           assoc_specific;
} UX_CLASS_AUDIO10_ASSOCIATED_INTERFACE_DESCRIPTOR;

/* Define Audio Class Interrupt/Isochronous Endpoint Descriptor.  */

typedef struct UX_CLASS_AUDIO10_ENDPOINT_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bEndpointAddress;
    UCHAR           bmAttributes;
    UCHAR           wMaxPacketSize;
    UCHAR           bInterval;
    UCHAR           bRefresh;
    UCHAR           bSynchAddress;
} UX_CLASS_AUDIO10_ENDPOINT_DESCRIPTOR, UX_CLASS_AUDIO10_EPD;

/* Audio class-specific AS interface descriptor.  */

typedef struct UX_CLASS_AUDIO10_AS_INTERFACE_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bTerminalLink;
    UCHAR           bDelay;
    UCHAR           wFormatTag[2];
} UX_CLASS_AUDIO10_AS_INTERFACE_DESCRIPTOR, UX_CLASS_AUDIO10_AS_IFACED;


/* Audio class-specific isochronous audio data endpoint descriptor (EPD).  */

typedef struct UX_CLASS_AUDIO10_ISOCH_ENDPOINT_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bmAttributes;
    UCHAR           bLockDelayUnits;
    UCHAR           wLockDelay[2];
} UX_CLASS_AUDIO10_ISOCH_ENDPOINT_DESCRIPTOR, UX_CLASS_AUDIO10_ISOCH_EPD;

/* EPD::bmAttributes.  */
#define UX_CLASS_AUDIO10_ISOCH_EPD_ATTR_SAMPLING_FREQ                       (0x1u << 0)
#define UX_CLASS_AUDIO10_ISOCH_EPD_ATTR_PITCH                               (0x1u << 1)
#define UX_CLASS_AUDIO10_ISOCH_EPD_ATTR_MAX_PACKET_SIZE_ONLY                (0x1u << 7)

/* EPD::bLockDelayUnits.  */
#define UX_CLASS_AUDIO10_EPD_LOCK_DELAY_UNITS_UNDEFINED                     0
#define UX_CLASS_AUDIO10_EPD_LOCK_DELAY_UNITS_MS                            1
#define UX_CLASS_AUDIO10_EPD_LOCK_DELAY_UNITS_DEC_PCM_SAMPLES               2


/* Audio class control request layout.  */

typedef struct UX_CLASS_AUDIO10_REQUEST_VALUE_CS_STRUCT {
    UCHAR   unused_zero;
    UCHAR   control_sel;        /* Control Selector      (CS)   */
} UX_CLASS_AUDIO10_REQUEST_VALUE_CS;

typedef struct UX_CLASS_AUDIO10_REQUEST_VALUE_MIXER_STRUCT {
    UCHAR   output_ch_num;      /* Output Channel Number (OCN)   */
    UCHAR   input_ch_num;       /* Input Channel Number  (ICN)   */
} UX_CLASS_AUDIO10_REQUEST_VALUE_MIXER;

typedef struct UX_CLASS_AUDIO10_REQUEST_VALUE_CONTROL_STRUCT {
    UCHAR   unused_zero;
    UCHAR   cs;                 /* CS       */
} UX_CLASS_AUDIO10_REQUEST_VALUE_CONTROL;

typedef struct UX_CLASS_AUDIO10_REQUEST_INDEX_EP_STRUCT {
    UCHAR   ep_addr;            /* Endpoint Address  */
    UCHAR   unused_zero;
} UX_CLASS_AUDIO10_REQUEST_INDEX_EP;

typedef struct UX_CLASS_AUDIO10_REQUEST_INDEX_INTERFACE_STRUCT {
    UCHAR   iface_num;          /* Interface number  */
    UCHAR   entity_id;
} UX_CLASS_AUDIO10_REQUEST_INDEX_INTERFACE;

typedef struct UX_CLASS_AUDIO10_REQUEST_INDEX_CONTROL_STRUCT {
    UCHAR   ep_iface;           /* Endpoint Address/Interface Number  */
    UCHAR   entity_id_zero;     /* Entity ID/Zero  */
} UX_CLASS_AUDIO10_REQUEST_INDEX_CONTROL;

typedef struct UX_CLASS_AUDIO10_REQUEST_STRUCT
{
    UCHAR           bmRequestType;
    UCHAR           bRequest;
    union UX_CLASS_AUDIO10_REQUEST_VALUE_UNION {
        USHORT      value;
        UX_CLASS_AUDIO10_REQUEST_VALUE_CS
                    control_cs;
        UX_CLASS_AUDIO10_REQUEST_VALUE_MIXER
                    control_mixer;
        UX_CLASS_AUDIO10_REQUEST_VALUE_CONTROL
                    control;
        USHORT      mem_offset;
    }               wValue;
    union UX_CLASS_AUDIO10_REQUEST_INDEX_UNION {
        USHORT      value;
        UX_CLASS_AUDIO10_REQUEST_INDEX_EP
                    ep;
        UX_CLASS_AUDIO10_REQUEST_INDEX_INTERFACE
                    iface;
        UX_CLASS_AUDIO10_REQUEST_INDEX_CONTROL
                    control;
    }               wIndex;
    USHORT          wLength;
} UX_CLASS_AUDIO10_REQUEST;

/* Audio Class 1.0 Copy Protect Control Parameter  */

typedef struct UX_CLASS_AUDIO10_COPY_PROTECT_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bCopyProtect;
} UX_CLASS_AUDIO10_COPY_PROTECT_CONTROL_PARAMETER;

#define UX_CLASS_AUDIO10_COPY_PROTECT_CONTROL_CPL0                          (1u << 0)
#define UX_CLASS_AUDIO10_COPY_PROTECT_CONTROL_CPL1                          (1u << 1)
#define UX_CLASS_AUDIO10_COPY_PROTECT_CONTROL_CPL2                          (1u << 2)

/* Audio Class 1.0 Mixer Control Parameter (specific control or 0xFF)  */

typedef struct UX_CLASS_AUDIO10_MIXER_CONTROL_PARAMETER_STRUCT
{
    USHORT          wMixer;
} UX_CLASS_AUDIO10_MIXER_CONTROL_PARAMETER;

typedef struct UX_CLASS_AUDIO10_MIXER_CONTROL_PARAMETER_FF_STRUCT
{
    USHORT          wMixer[1];
} UX_CLASS_AUDIO10_MIXER_CONTROL_PARAMETER_FF;

/* Audio Class 1.0 Selector Control Parameter  */

typedef struct UX_CLASS_AUDIO10_SELECTOR_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bSelector;
} UX_CLASS_AUDIO10_SELECTOR_CONTROL_PARAMETER;

/* Audio Class 1.0 Mute Control Parameter (specific CH or 0xFF)  */

typedef struct UX_CLASS_AUDIO10_MUTE_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bMute;
} UX_CLASS_AUDIO10_MUTE_CONTROL_PARAMETER;

typedef struct UX_CLASS_AUDIO10_MUTE_CONTROL_PARAMETER_FF_STRUCT
{
    UCHAR           bMute[1];
} UX_CLASS_AUDIO10_MUTE_CONTROL_PARAMETER_FF;

/* Audio Class 1.0 Volume Control Parameter (specific CH or 0xFF)  */

typedef struct UX_CLASS_AUDIO10_VOLUME_CONTROL_PARAMETER_STRUCT
{
    SHORT           wVolume;
} UX_CLASS_AUDIO10_VOLUME_CONTROL_PARAMETER;

typedef struct UX_CLASS_AUDIO10_VOLUME_CONTROL_PARAMETER_FF_STRUCT
{
    SHORT           wVolume[1];
} UX_CLASS_AUDIO10_VOLUME_CONTROL_PARAMETER_FF;

/* Audio Class 1.0 Bass Control Parameter (specific CH or 0xFF)  */

typedef struct UX_CLASS_AUDIO10_BASS_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bBass;
} UX_CLASS_AUDIO10_BASS_CONTROL_PARAMETER;

typedef struct UX_CLASS_AUDIO10_BASS_CONTROL_PARAMETER_FF_STRUCT
{
    UCHAR           bBass[1];
} UX_CLASS_AUDIO10_BASS_CONTROL_PARAMETER_FF;

/* Audio Class 1.0 Mid Control Parameter (specific CH or 0xFF)  */

typedef struct UX_CLASS_AUDIO10_MID_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bMid;
} UX_CLASS_AUDIO10_MID_CONTROL_PARAMETER;

typedef struct UX_CLASS_AUDIO10_MID_CONTROL_PARAMETER_FF_STRUCT
{
    UCHAR           bMid[1];
} UX_CLASS_AUDIO10_MID_CONTROL_PARAMETER_FF;

/* Audio Class 1.0 Treble Control Parameter (specific CH or 0xFF)  */

typedef struct UX_CLASS_AUDIO10_TREBLE_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bTreble;
} UX_CLASS_AUDIO10_TREBLE_CONTROL_PARAMETER;

typedef struct UX_CLASS_AUDIO10_TREBLE_CONTROL_PARAMETER_FF_STRUCT
{
    UCHAR           bTreble[1];
} UX_CLASS_AUDIO10_TREBLE_CONTROL_PARAMETER_FF;

/* Audio Class 1.0 Graphic Equalizer Control Parameter (NrBits=1)  */

typedef struct UX_CLASS_AUDIO10_GRAPHIC_EQ_CONTROL_PARAMETER_STRUCT
{
    ULONG           bmBandsPresent;
    UCHAR           bBand[1];
} UX_CLASS_AUDIO10_GRAPHIC_EQ_CONTROL_PARAMETER;

/* Audio Class 1.0 Automatic Gain Control Parameter (specific CH or 0xFF)  */

typedef struct UX_CLASS_AUDIO10_AG_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bAGC;
} UX_CLASS_AUDIO10_AG_CONTROL_PARAMETER;

typedef struct UX_CLASS_AUDIO10_AG_CONTROL_PARAMETER_FF_STRUCT
{
    UCHAR           bAGC[1];
} UX_CLASS_AUDIO10_AG_CONTROL_PARAMETER_FF;

/* Audio Class 1.0 Delay Control Parameter (specific CH or 0xFF)  */

typedef struct UX_CLASS_AUDIO10_DELAY_CONTROL_PARAMETER_STRUCT
{
    SHORT           wDelay;
} UX_CLASS_AUDIO10_DELAY_CONTROL_PARAMETER;

typedef struct UX_CLASS_AUDIO10_DELAY_CONTROL_PARAMETER_FF_STRUCT
{
    SHORT           wDelay[1];
} UX_CLASS_AUDIO10_DELAY_CONTROL_PARAMETER_FF;

/* Audio Class 1.0 BassBoost Control Parameter (specific CH or 0xFF)  */

typedef struct UX_CLASS_AUDIO10_BASSBOOST_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bBassBoost;
} UX_CLASS_AUDIO10_BASSBOOST_CONTROL_PARAMETER;

typedef struct UX_CLASS_AUDIO10_BASSBOOST_CONTROL_PARAMETER_FF_STRUCT
{
    UCHAR           bBassBoost[1];
} UX_CLASS_AUDIO10_BASSBOOST_CONTROL_PARAMETER_FF;

/* Audio Class 1.0 Loudness Control Parameter (specific CH or 0xFF)  */

typedef struct UX_CLASS_AUDIO10_LOUDNESS_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bLoudness;
} UX_CLASS_AUDIO10_LOUDNESS_CONTROL_PARAMETER;

typedef struct UX_CLASS_AUDIO10_LOUDNESS_CONTROL_PARAMETER_FF_STRUCT
{
    UCHAR           bLoudness[1];
} UX_CLASS_AUDIO10_LOUDNESS_CONTROL_PARAMETER_FF;

/* Audio Class 1.0 Enable Processing Control Parameter  */

typedef struct UX_CLASS_AUDIO10_ENABLE_PROCESSING_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bEnable;
} UX_CLASS_AUDIO10_ENABLE_PROCESSING_CONTROL_PARAMETER;

/* Audio Class 1.0 Spaciousness Control Parameter  */

typedef struct UX_CLASS_AUDIO10_SPACIOUSNESS_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bSpaciousness;
} UX_CLASS_AUDIO10_SPACIOUSNESS_CONTROL_PARAMETER;

/* Audio Class 1.0 ReverbType Control Parameter  */

typedef struct UX_CLASS_AUDIO10_REVERB_TYPE_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bReverbType;
} UX_CLASS_AUDIO10_REVERB_TYPE_CONTROL_PARAMETER;

#define UX_CLASS_AUDIO10_REVERB_TYPE_ROOM_1                             0
#define UX_CLASS_AUDIO10_REVERB_TYPE_SMALL_ROOM                         0
#define UX_CLASS_AUDIO10_REVERB_TYPE_ROOM_2                             1
#define UX_CLASS_AUDIO10_REVERB_TYPE_MEDIUM_ROOM                        1
#define UX_CLASS_AUDIO10_REVERB_TYPE_ROOM_3                             2
#define UX_CLASS_AUDIO10_REVERB_TYPE_LARGE_ROOM                         2
#define UX_CLASS_AUDIO10_REVERB_TYPE_HALL_1                             3
#define UX_CLASS_AUDIO10_REVERB_TYPE_MEDIUM_CONCERT_HALL                3
#define UX_CLASS_AUDIO10_REVERB_TYPE_HALL_2                             4
#define UX_CLASS_AUDIO10_REVERB_TYPE_LARGE_CONCERT_HALL                 4
#define UX_CLASS_AUDIO10_REVERB_TYPE_PLATE                              5
#define UX_CLASS_AUDIO10_REVERB_TYPE_PLATE_REVERBERATION                5
#define UX_CLASS_AUDIO10_REVERB_TYPE_DELAY                              6
#define UX_CLASS_AUDIO10_REVERB_TYPE_PANNING_DELAY                      7

/* Audio Class 1.0 ReverbLevel Control Parameter  */

typedef struct UX_CLASS_AUDIO10_REVERB_LEVEL_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bReverbLevel;
} UX_CLASS_AUDIO10_REVERB_LEVEL_CONTROL_PARAMETER;

/* Audio Class 1.0 ReverTime Control Parameter  */

typedef struct UX_CLASS_AUDIO10_REVERB_TIME_CONTROL_PARAMETER_STRUCT
{
    USHORT          wReverTime;
} UX_CLASS_AUDIO10_REVERB_TIME_CONTROL_PARAMETER;

/* Audio Class 1.0 ReverbDelayFeedback Control Parameter  */

typedef struct UX_CLASS_AUDIO10_REVERB_FEEDBACK_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bReverbFeedback;
} UX_CLASS_AUDIO10_REVERB_FEEDBACK_CONTROL_PARAMETER;

/* Audio Class 1.0 ChorusLevel Control Parameter  */

typedef struct UX_CLASS_AUDIO10_CHORUS_LEVEL_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bChorusLevel;
} UX_CLASS_AUDIO10_CHORUS_LEVEL_CONTROL_PARAMETER;

/* Audio Class 1.0 ChorusRate Control Parameter  */

typedef struct UX_CLASS_AUDIO10_CHORUS_RATE_CONTROL_PARAMETER_STRUCT
{
    USHORT          wChorusRate;
} UX_CLASS_AUDIO10_CHORUS_RATE_CONTROL_PARAMETER;

/* Audio Class 1.0 ChorusModulationDepth Control Parameter  */

typedef struct UX_CLASS_AUDIO10_CHORUS_DEPTH_CONTROL_PARAMETER_STRUCT
{
    USHORT          wChorusDepth;
} UX_CLASS_AUDIO10_CHORUS_DEPTH_CONTROL_PARAMETER;

/* Audio Class 1.0 Dynamic Range Compressor Compression Ratio Control Parameter  */

typedef struct UX_CLASS_AUDIO10_COMPRESSION_RATIO_CONTROL_PARAMETER_STRUCT
{
    USHORT          wRatio;
} UX_CLASS_AUDIO10_COMPRESSION_RATIO_CONTROL_PARAMETER;

/* Audio Class 1.0 Dynamic Range Compressor MaxAmpl Control Parameter  */

typedef struct UX_CLASS_AUDIO10_MAXAMPL_CONTROL_PARAMETER_STRUCT
{
    USHORT          wMaxAmpl;
} UX_CLASS_AUDIO10_MAXAMPL_CONTROL_PARAMETER;

/* Audio Class 1.0 Dynamic Range Compressor Threshold Control Parameter  */

typedef struct UX_CLASS_AUDIO10_THRESHOLD_CONTROL_PARAMETER_STRUCT
{
    USHORT          wThreshold;
} UX_CLASS_AUDIO10_THRESHOLD_CONTROL_PARAMETER;

/* Audio Class 1.0 Dynamic Range Compressor AttachTime Control Parameter  */

typedef struct UX_CLASS_AUDIO10_ATTACK_TIME_CONTROL_PARAMETER_STRUCT
{
    USHORT          wAttachTime;
} UX_CLASS_AUDIO10_ATTACK_TIME_CONTROL_PARAMETER;

/* Audio Class 1.0 Dynamic Range Compressor ReleaseTime Control Parameter  */

typedef struct UX_CLASS_AUDIO10_RELEASE_TIME_CONTROL_PARAMETER_STRUCT
{
    USHORT          wReleaseTime;
} UX_CLASS_AUDIO10_RELEASE_TIME_CONTROL_PARAMETER;

/* Audio Class 1.0 Enable Processing Control (XU_ENABLE_CONTROL) Parameter  */

typedef struct UX_CLASS_AUDIO10_XU_ENABLE_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bOn;
} UX_CLASS_AUDIO10_XU_ENABLE_CONTROL_PARAMETER;

/* Audio Class 1.0 Sampling Frequency Control (SAMPLING_FREQ_CONTROL) Parameter  */

typedef struct UX_CLASS_AUDIO10_SAMPLING_FREQ_CONTROL_PARAMETER_STRUCT
{
    UCHAR           tSampleFreq[3];
} UX_CLASS_AUDIO10_SAMPLING_FREQ_CONTROL_PARAMETER;

/* Audio Class 1.0 Pitch Control (PITCH_CONTROL) Parameter  */

typedef struct UX_CLASS_AUDIO10_PITCH_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bPitchEnable;
} UX_CLASS_AUDIO10_PITCH_CONTROL_PARAMETER;

/* Audio Class 1.0 Continuous Sampling Frequency.  */

typedef struct UX_CLASS_AUDIO10_CONTINUOUS_SAMPLING_FREQ_STRUCT
{
    UCHAR           tLowerSamFreq[3];
    UCHAR           tUpperSamFreq[3];
} UX_CLASS_AUDIO10_CONTINUOUS_SAMPLING_FREQ;

/* Audio Class 1.0 Discrete Sampling Frequency (N=1).  */

typedef struct UX_CLASS_AUDIO10_DISCRETE_SAMPLING_FREQ_STRUCT
{
    UCHAR           tSamFreq[3 * 1];
} UX_CLASS_AUDIO10_DISCRETE_SAMPLING_FREQ;

/* Audio Class 1.0 Type I Format Type Descriptor  */

typedef struct UX_CLASS_AUDIO10_TYPE_I_FORMAT_TYPE_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bFormatType;
    UCHAR           bNrChannels;
    UCHAR           bSubframeSize;
    UCHAR           bBitResolution;
    UCHAR           bSamFreqType;
} UX_CLASS_AUDIO10_TYPE_I_FORMAT_TYPE_DESCRIPTOR;

typedef struct UX_CLASS_AUDIO10_TYPE_I_FORMAT_TYPE_CONTINUOUS_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bFormatType;
    UCHAR           bNrChannels;
    UCHAR           bSubframeSize;
    UCHAR           bBitResolution;
    UCHAR           bSamFreqType;       /* 0  */
    UCHAR           tLowerSamFreq[3];
    UCHAR           tUpperSamFreq[3];
}
UX_CLASS_AUDIO10_TYPE_I_FORMAT_TYPE_CONTINUOUS_DESCRIPTOR,
UX_CLASS_AUDIO10_TYPE_I_FORMAT_TYPE_DESCRIPTOR_0;

typedef struct UX_CLASS_AUDIO10_TYPE_I_FORMAT_TYPE_DISCRETE_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bFormatType;
    UCHAR           bNrChannels;
    UCHAR           bSubframeSize;
    UCHAR           bBitResolution;
    UCHAR           bSamFreqType;       /* 1  */
    UCHAR           tSamFreq[3 * 1];
}
UX_CLASS_AUDIO10_TYPE_I_FORMAT_TYPE_DISCRETE_DESCRIPTOR,
UX_CLASS_AUDIO10_TYPE_I_FORMAT_TYPE_DESCRIPTOR_1;

typedef struct UX_CLASS_AUDIO10_TYPE_II_FORMAT_TYPE_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bFormatType;
    USHORT          wMaxBitRate;
    USHORT          wSamplesPerFrame;
    UCHAR           bSamFreqType;
} UX_CLASS_AUDIO10_TYPE_II_FORMAT_TYPE_DESCRIPTOR;

typedef struct UX_CLASS_AUDIO10_TYPE_II_FORMAT_TYPE_CONTINUOUS_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bFormatType;
    USHORT          wMaxBitRate;
    USHORT          wSamplesPerFrame;
    UCHAR           bSamFreqType;       /* 0  */
    UCHAR           tLowerSamFreq[3];
    UCHAR           tUpperSamFreq[3];
}
UX_CLASS_AUDIO10_TYPE_II_FORMAT_TYPE_CONTINUOUS_DESCRIPTOR,
UX_CLASS_AUDIO10_TYPE_II_FORMAT_TYPE_DESCRIPTOR_0;

typedef struct UX_CLASS_AUDIO10_TYPE_II_FORMAT_TYPE_DISCRETE_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bFormatType;
    USHORT          wMaxBitRate;
    USHORT          wSamplesPerFrame;
    UCHAR           bSamFreqType;       /* 1  */
    UCHAR           tSamFreq[3 * 1];
}
UX_CLASS_AUDIO10_TYPE_II_FORMAT_TYPE_DISCRETE_DESCRIPTOR,
UX_CLASS_AUDIO10_TYPE_II_FORMAT_TYPE_DESCRIPTOR_1;


/* Audio Class 1.0 MPEG (MP) Format-Specific Descriptor (MPEGD)  */

typedef struct UX_CLASS_AUDIO10_MPEG_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           wFormatTag[2];
    UCHAR           bmMPEGCapabilities[2];
    UCHAR           bmMPEGFeatures;
} UX_CLASS_AUDIO10_MPEG_DESCRIPTOR, UX_CLASS_AUDIO10_MPEGD;

/* MPEG::bmMPEGCapabilities.  */
#define UX_CLASS_AUDIO10_MPEGD_CAP_LAYER_MASK                           (0x7u << 0)
#define UX_CLASS_AUDIO10_MPEGD_CAP_LAYER_I                              (0x1u << 0)
#define UX_CLASS_AUDIO10_MPEGD_CAP_LAYER_II                             (0x1u << 1)
#define UX_CLASS_AUDIO10_MPEGD_CAP_LAYER_III                            (0x1u << 2)
#define UX_CLASS_AUDIO10_MPEGD_CAP_MPEG1_ONLY                           (0x1u << 3)
#define UX_CLASS_AUDIO10_MPEGD_CAP_MPEG1_DUAL_CH                        (0x1u << 4)
#define UX_CLASS_AUDIO10_MPEGD_CAP_MPEG2_STEREO                         (0x1u << 5)
#define UX_CLASS_AUDIO10_MPEGD_CAP_MPEG2_7_1_CH                         (0x1u << 6)
#define UX_CLASS_AUDIO10_MPEGD_CAP_ADAPTIVE_MULTI_CH_PREDICT            (0x1u << 7)
#define UX_CLASS_AUDIO10_MPEGD_CAP_MPEG2_MULTILINGUAL_MASK              (0x3u << 8)
#define UX_CLASS_AUDIO10_MPEGD_CAP_MPEG2_MULTI_NOT_SUPPORT              (0x0u << 8)
#define UX_CLASS_AUDIO10_MPEGD_CAP_MPEG2_MULTI_FS                       (0x1u << 8)
#define UX_CLASS_AUDIO10_MPEGD_CAP_MPEG2_MULTI_FS_HALF_FS               (0x3u << 8)

/* MPEG::bmMPEGFeatures.  */
#define UX_CLASS_AUDIO10_MPEGD_FEAT_IDYN_RNG_CTRL_MASK                  (0x3u << 4) /* Internal Dynamic Range Control  */
#define UX_CLASS_AUDIO10_MPEGD_FEAT_IDYN_RNG_CTRL_NOT_SUP               (0x0u << 4) /* Not support  */
#define UX_CLASS_AUDIO10_MPEGD_FEAT_IDYN_RNG_CTRL_NOT_SCAL              (0x1u << 4) /* Not scalable  */
#define UX_CLASS_AUDIO10_MPEGD_FEAT_IDYN_RNG_CTRL_SCAL_COMMON           (0x2u << 4) /* Common boost and cut scaling value  */
#define UX_CLASS_AUDIO10_MPEGD_FEAT_IDYN_RNG_CTRL_SCAL_SEPARA           (0x3u << 4) /* Separate boost and cut scaling value  */

/* Audio Class 1.0 Dual Channel Control  */

typedef struct UX_CLASS_AUDIO10_MP_DUAL_CHANNEL_CONTROL_PARAMETER_STRUCT
{
    UCHAR           BChannel2Enable;
} UX_CLASS_AUDIO10_MP_DUAL_CHANNEL_CONTROL_PARAMETER;

/* Audio Class 1.0 Second Stereo Control  */

typedef struct UX_CLASS_AUDIO10_MP_2ND_STEREO_CONTROL_PARAMETER_STRUCT
{
    UCHAR           B2ndStereoEnable;
} UX_CLASS_AUDIO10_MP_2ND_STEREO_CONTROL_PARAMETER;

/* Audio Class 1.0 Multilingual Control  */

typedef struct UX_CLASS_AUDIO10_MP_MULTILINGUAL_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bMultiLingual;
} UX_CLASS_AUDIO10_MP_MULTILINGUAL_CONTROL_PARAMETER;

/* bMultiLingual  */
#define UX_CLASS_AUDIO10_MP_MULTILINGUAL_DECODE_NO_CHANNEL              0
#define UX_CLASS_AUDIO10_MP_MULTILINGUAL_DECODE_CHANNEL_1               1
#define UX_CLASS_AUDIO10_MP_MULTILINGUAL_DECODE_CHANNEL_2               2
#define UX_CLASS_AUDIO10_MP_MULTILINGUAL_DECODE_CHANNEL_3               3
#define UX_CLASS_AUDIO10_MP_MULTILINGUAL_DECODE_CHANNEL_4               4
#define UX_CLASS_AUDIO10_MP_MULTILINGUAL_DECODE_CHANNEL_5               5
#define UX_CLASS_AUDIO10_MP_MULTILINGUAL_DECODE_CHANNEL_6               6
#define UX_CLASS_AUDIO10_MP_MULTILINGUAL_DECODE_CHANNEL_7               7

/* Audio Class 1.0 Dynamic Range Control (MP_DYN_RANGE_CONTROL)  */

typedef struct UX_CLASS_AUDIO10_MP_DYN_RANGE_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bEnable;
} UX_CLASS_AUDIO10_MP_DYN_RANGE_CONTROL_PARAMETER;

/* Audio Class 1.0 Scaling Control  */

typedef struct UX_CLASS_AUDIO10_MP_SCALING_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bScale;
} UX_CLASS_AUDIO10_MP_SCALING_CONTROL_PARAMETER;

/* Audio Class 1.0 High/Low (HILO) Scaling Control  */

typedef struct UX_CLASS_AUDIO10_MP_HILO_SCALING_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bLowScale;
    UCHAR           bHighScale;
} UX_CLASS_AUDIO10_MP_HILO_SCALING_CONTROL_PARAMETER;


/* Audio Class 1.0 AC-3 Format Descriptor  */

typedef struct UX_CLASS_AUDIO10_AS_AC_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubType;
    UCHAR           wFormatTag[2];
    UCHAR           bmBSID[4];
    UCHAR           bmAC3Features;
} UX_CLASS_AUDIO10_AS_AC_DESCRIPTOR, UX_CLASS_AUDIO10_AS_ACD;

/* AC3 DECODER::bmAC3Features.  */
#define UX_CLASS_AUDIO10_ACD_FEAT_RF_MODE                           (0x1u << 0)
#define UX_CLASS_AUDIO10_ACD_FEAT_LINE_MODE                         (0x1u << 1)
#define UX_CLASS_AUDIO10_ACD_FEAT_CUSTOM0_MODE                      (0x1u << 2)
#define UX_CLASS_AUDIO10_ACD_FEAT_CUSTOM1_MODE                      (0x1u << 3)
#define UX_CLASS_AUDIO10_ACD_FEAT_IDYN_RNG_CTRL_MASK                (0x3u << 4) /* Internal Dynamic Range Control  */
#define UX_CLASS_AUDIO10_ACD_FEAT_IDYN_RNG_CTRL_NOT_SUP             (0x0u << 4) /* Not support  */
#define UX_CLASS_AUDIO10_ACD_FEAT_IDYN_RNG_CTRL_NOT_SCAL            (0x3u << 4) /* Not scalable  */
#define UX_CLASS_AUDIO10_ACD_FEAT_IDYN_RNG_CTRL_SCAL_COMMON         (0x3u << 4) /* Common boost and cut scaling value  */
#define UX_CLASS_AUDIO10_ACD_FEAT_IDYN_RNG_CTRL_SCAL_SEPARATE       (0x3u << 4) /* Separate boost and cut scaling value  */

/* Audio Class 1.0 AC-3 Mode Control (AC_MODE_CONTROL)  */

typedef struct UX_CLASS_AUDIO10_AS_AC_MODE_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bMode;
} UX_CLASS_AUDIO10_AS_AC_MODE_CONTROL_PARAMETER;

/* AC-3 Compression Mode Control.  */
#define UX_CLASS_AUDIO10_AC_MODE_RF                                 (0x1u << 0)
#define UX_CLASS_AUDIO10_AC_MODE_LINE                               (0x1u << 1)
#define UX_CLASS_AUDIO10_AC_MODE_CUSTOM0                            (0x1u << 2)
#define UX_CLASS_AUDIO10_AC_MODE_CUSTOM1                            (0x1u << 3)

/* Audio Class 1.0 AC-3 Dynamic Range Control (AC_DYN_RANGE_CONTROL)  */

typedef struct UX_CLASS_AUDIO10_AS_AC_DYN_RANGE_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bMode;
} UX_CLASS_AUDIO10_AS_AC_DYN_RANGE_CONTROL_PARAMETER;

/* Audio Class 1.0 AC-3 Scaling Control (AC_SCALING_CONTROL)  */

typedef struct UX_CLASS_AUDIO10_AS_AC_SCALING_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bScale;
} UX_CLASS_AUDIO10_AS_AC_SCALING_CONTROL_PARAMETER;

/* Audio Class 1.0 AC-3 High/Low Scaling Control (AC_HILO_SCALING_CONTROL)  */

typedef struct UX_CLASS_AUDIO10_AS_AC_HILO_SCALING_CONTROL_PARAMETER_STRUCT
{
    UCHAR           bLowScale;
    UCHAR           bHighScale;
} UX_CLASS_AUDIO10_AS_AC_HILO_SCALING_CONTROL_PARAMETER;

typedef struct UX_CLASS_AUDIO10_TYPE_III_FORMAT_TYPE_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bFormatType;
    UCHAR           bNrChannels;
    UCHAR           bSubframeSize;
    UCHAR           bBitResolution;
    UCHAR           bSamFreqType;
} UX_CLASS_AUDIO10_TYPE_III_FORMAT_TYPE_DESCRIPTOR;

typedef struct UX_CLASS_AUDIO10_TYPE_III_FORMAT_TYPE_CONTINUOUS_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bFormatType;
    UCHAR           bNrChannels;
    UCHAR           bSubframeSize;
    UCHAR           bBitResolution;
    UCHAR           bSamFreqType;   /* 0  */
    UCHAR           tLowerSamFreq[3];
    UCHAR           tUpperSamFreq[3];
}
UX_CLASS_AUDIO10_TYPE_III_FORMAT_TYPE_CONTINUOUS_DESCRIPTOR,
UX_CLASS_AUDIO10_TYPE_III_FORMAT_TYPE_DESCRIPTOR_0;

typedef struct UX_CLASS_AUDIO10_TYPE_III_FORMAT_TYPE_DISCRETE_DESCRIPTOR_STRUCT
{
    UCHAR           bLength;
    UCHAR           bDescriptorType;
    UCHAR           bDescriptorSubtype;
    UCHAR           bFormatType;
    UCHAR           bNrChannels;
    UCHAR           bSubframeSize;
    UCHAR           bBitResolution;
    UCHAR           bSamFreqType;   /* 1  */
    UCHAR           tSamFreq[3 * 1];
}
UX_CLASS_AUDIO10_TYPE_III_FORMAT_TYPE_DISCRETE_DESCRIPTOR,
UX_CLASS_AUDIO10_TYPE_III_FORMAT_TYPE_DESCRIPTOR_1;

/* Audio Class 1.0 Interrupt Status Word  */
typedef struct UX_CLASS_AUDIO10_INT_STATUS_STRUCT
{
    UCHAR           bStatusType;
    UCHAR           bOriginator;
} UX_CLASS_AUDIO10_INT_STATUS;

/* Status Word::bStatusType.  */
#define UX_CLASS_AUDIO10_INT_STATUS_TYPE_PENDING                    (0x1u << 7)
#define UX_CLASS_AUDIO10_INT_STATUS_TYPE_MEM_CHANGED                (0x1u << 6)
#define UX_CLASS_AUDIO10_INT_STATUS_TYPE_ORIGINATOR_MASK            (0xFu << 0)
#define UX_CLASS_AUDIO10_INT_STATUS_TYPE_ORIGINATOR_AC              (0x0u << 0) /* AudioControl interface    */
#define UX_CLASS_AUDIO10_INT_STATUS_TYPE_ORIGINATOR_AS              (0x1u << 0) /* AudioStreaming interface  */
#define UX_CLASS_AUDIO10_INT_STATUS_TYPE_ORIGINATOR_AS_EP           (0x2u << 0) /* AudioStreaming endpoint   */


#endif
