root/headers/os/drivers/usb/USB_audio.h
#ifndef USB_AUDIO_H
#define USB_AUDIO_H

// (Partial) USB Device Class Definition for Audio Devices
// R1: Release 1.0 March 18, 1998
// R2: Release 2.0 May 31, 2006

#include <SupportDefs.h>

#define USB_AUDIO_DEVICE_CLASS                  0x01
#define USB_AUDIO_CLASS_VERSION_1               0x0100
#define USB_AUDIO_CLASS_VERSION_2               0x0200

enum {
        USB_AUDIO_INTERFACE_AUDIO_CLASS         = 0x01
};

enum { // Audio Interface Subclasses
        USB_AUDIO_INTERFACE_UNDEFINED_SUBCLASS =        0x00,
        USB_AUDIO_INTERFACE_AUDIOCONTROL_SUBCLASS =     0x01,
        USB_AUDIO_INTERFACE_AUDIOSTREAMING_SUBCLASS,
        USB_AUDIO_INTERFACE_MIDISTREAMING_SUBCLASS
};

enum { // Audio Interface Protocol Codes
        USB_AUDIO_PROTOCOL_UNDEFINED = 0x00
};

enum { // Audio Interface Class-Specific Descriptor Types
        USB_AUDIO_CS_UNDEFINED                          = 0x20,
        USB_AUDIO_CS_DEVICE                                     = 0x21,
        USB_AUDIO_CS_CONFIGURATION                      = 0x22,
        USB_AUDIO_CS_STRING                                     = 0x23,
        USB_AUDIO_CS_INTERFACE                          = 0x24,
        USB_AUDIO_CS_ENDPOINT                           = 0x25
};


enum { // Audio Class-Specific AudioControl Interface descriptor subtypes
        USB_AUDIO_AC_DESCRIPTOR_UNDEFINED       = 0x00,
        USB_AUDIO_AC_HEADER                                     = 0x01,
        USB_AUDIO_AC_INPUT_TERMINAL                     = 0x02,
        USB_AUDIO_AC_OUTPUT_TERMINAL            = 0x03,
        USB_AUDIO_AC_MIXER_UNIT                         = 0x04,
        USB_AUDIO_AC_SELECTOR_UNIT                      = 0x05,
        USB_AUDIO_AC_FEATURE_UNIT                       = 0x06,
        USB_AUDIO_AC_PROCESSING_UNIT            = 0x07,
        USB_AUDIO_AC_EXTENSION_UNIT                     = 0x08,
        USB_AUDIO_AC_EFFECT_UNIT_R2                     = 0x07,
        USB_AUDIO_AC_PROCESSING_UNIT_R2         = 0x08,
        USB_AUDIO_AC_EXTENSION_UNIT_R2          = 0x09,
        USB_AUDIO_AC_CLOCK_SOURCE_R2            = 0x0A,
        USB_AUDIO_AC_CLOCK_SELECTOR_R2          = 0x0B,
        USB_AUDIO_AC_CLOCK_MULTIPLIER_R2        = 0x0C,
        USB_AUDIO_AC_SAMPLE_RATE_CONVERTER_R2 = 0x0D
};


// Class Specific Audio Control Interface Header
// R1: Table 4-2 p.37 / R2: Table 4-5 p.48
typedef struct {
        uint8   length;
        uint8   descriptor_type;                // USB_AUDIO_CS_INTERFACE
        uint8   descriptor_subtype;     // USB_AUDIO_AC_HEADER
        uint16  bcd_release_no;
        union {
                struct {
                        uint16  total_length;
                        uint8   in_collection;
                        uint8   interface_numbers[0];
                } _PACKED r1;

                struct {
                        uint8   function_category;
                        uint16  total_length;
                        uint8   bm_controls;
                } _PACKED r2;
        };
} _PACKED usb_audiocontrol_header_descriptor;

// Clock Source Descriptor
// R2: Table 4-6 p.49
typedef struct {
        uint8 length;
        uint8 descriptor_type; // USB_AUDIO_CS_INTERFACE
        uint8 descriptor_subtype; // USB_AUDIO_CLOCKSOURCE_HEADER
        uint8 clock_id;
        uint8 bm_attributes;
        uint8 bm_controls;
        uint8 assoc_terminal;
        uint8 clock_source_idx;
} _PACKED usb_audio_clocksource_descriptor;

// Clock Selector Descriptor
// R2: Table 4-7 p.50
typedef struct {
        uint8 length;
        uint8 descriptor_type; // USB_AUDIO_CS_INTERFACE
        uint8 descriptor_subtype; // USB_AUDIO_CLOCKSELECTOR_HEADER
        uint8 clock_id;
        uint8 nrinpins;
        uint8 Csourceid[1];
        uint8 bm_controls;
        uint8 clockselector;
} _PACKED usb_audio_clockselector_descriptor;

// Clock Multiplier Descriptor
// R2: Table 4-8 p.51
typedef struct {
        uint8   length;
        uint8   descriptor_type;                // USB_AUDIO_CS_INTERFACE
        uint8   descriptor_subtype;     // USB_AUDIO_CLOCKMULTIPLIER
        uint8   clockid;
        uint8   clksourceid;
        uint8   bm_controls;
        uint8   clockmultiplier;
} _PACKED usb_audio_clockmultiplier_descriptor;

// Input Terminal Descriptor
// R1: Table 4-3 p.39 / R2: Table 4-9, page 53
typedef struct {
        uint8   length;
        uint8   descriptor_type;                // USB_AUDIO_CS_INTERFACE
        uint8   descriptor_subtype;     // USB_AUDIO_AC_INPUT_TERMINAL
        uint8   terminal_id;
        uint16  terminal_type;
        uint8   assoc_terminal;
        union {
                struct {
                        uint8   num_channels;
                        uint8   channel_config;
                        uint8   channel_names;
                        uint8   terminal;
                } _PACKED r1;

                struct {
                        uint8   clock_source_id;
                        uint8   num_channels;
                        uint32  channel_config;
                        uint8   channel_names;
                        uint16  bm_controls;
                        uint8   terminal;
                } _PACKED r2;
        };
} _PACKED usb_audio_input_terminal_descriptor;


// Output Terminal Descriptor
// R1: Table 4-4 p.40 / R2: Table 4-10, page 54
typedef struct {
        uint8   length;
        uint8   descriptor_type;                // USB_AUDIO_CS_INTERFACE
        uint8   descriptor_subtype;     // USB_AUDIO_AC_OUTPUT_TERMINAL
        uint8   terminal_id;
        uint16  terminal_type;
        uint8   assoc_terminal;
        uint8 source_id;
        union {
                struct {
                        uint8 terminal;
                } _PACKED r1;

                struct {
                        uint8 clock_source_id;
                        uint16 bm_controls;
                        uint8 terminal;
                } _PACKED r2;
        };
} _PACKED usb_audio_output_terminal_descriptor;


// pseudo-descriptor for a section corresponding to logical output channels
// used in mixer, processing and extension descriptions.
typedef struct {
        uint8   num_output_pins;                // number of mixer output pins
        uint16  channel_config;                 // location of logical channels
        uint8   channel_names;                  // id of name string of first logical channel
} _PACKED usb_audio_output_channels_descriptor_r1;

typedef struct {
        uint8   num_output_pins;                // number of mixer output pins
        uint32  channel_config;                 // location of logical channels
        uint8   channel_names;                  // id of name string of first logical channel
} _PACKED usb_audio_output_channels_descriptor;


// Mixer Unit Descriptor
// R1: Table 4-5 p.41 / R2: Table 4-11, page 57
typedef struct {
        uint8   length;
        uint8   descriptor_type;                // USB_AUDIO_CS_INTERFACE
        uint8   descriptor_subtype;     // USB_AUDIO_AC_MIXER_UNIT
        uint8   unit_id;
        uint8   num_input_pins;
        uint8   input_pins[1];
        // use usb_audio_output_channels_descriptor to parse the rest
} _PACKED usb_audio_mixer_unit_descriptor;


// Selector Unit Descriptor
// R1: Table 4-6 p.43 / R2: Table 4-12, page 58
typedef struct {
        uint8   length;
        uint8   descriptor_type;                // USB_AUDIO_CS_INTERFACE
        uint8   descriptor_subtype;     // USB_AUDIO_AC_SELECTOR_UNIT
        uint8   unit_id;
        uint8   num_input_pins;
        uint8   input_pins[1];
        // uint8 selector_string;
} _PACKED usb_audio_selector_unit_descriptor;


// Feature Unit Descriptor
// R1: Table 4-7 p.43 / R2: Table 4-13, page 59
typedef struct {
        uint8   length;
        uint8   descriptor_type;                // USB_AUDIO_CS_INTERFACE
        uint8   descriptor_subtype;     // USB_AUDIO_AC_FEATURE_UNIT
        uint8   unit_id;
        uint8   source_id;
        union {
                struct {
                        uint8 control_size;
                        uint8 bma_controls[1];
                //      uint8   feature_string;
                } _PACKED r1;

                struct {
                        uint32 bma_controls[1];
                } _PACKED r2;
        };
} _PACKED usb_audio_feature_unit_descriptor;


// Processing Unit Descriptor
// R1: Table 4-8 p.45 / R2: Table 4-20, page 66
typedef struct {
        uint8 length;
        uint8 descriptor_type;          // USB_AUDIO_CS_INTERFACE
        uint8 descriptor_subtype;       // USB_AUDIO_AC_PROCESSING_UNIT
        uint8 unit_id;
        uint16 process_type;
        uint8 num_input_pins;
        uint8 input_pins[1];
        // use usb_audio_output_channels_descriptor to parse the rest
// TODO - the bmControl!!!!
} _PACKED usb_audio_processing_unit_descriptor;

// Extension Unit Descriptor
// R1: Table 4-15, p. 56 / R2: Table 4-24, p.73
typedef struct {
        uint8   length;
        uint8   descriptor_type;                // USB_AUDIO_CS_INTERFACE
        uint8   descriptor_subtype;     // USB_AUDIO_AC_EXTENSION_UNIT
        uint8   unit_id;
        uint16  extension_code;
        uint8   num_input_pins;
        uint8   input_pins[1];
        // use usb_audio_output_channels_descriptor to parse the rest
} _PACKED usb_audio_extension_unit_descriptor;


enum { // Audio Class-Specific AudioStreaming Interface descriptor subtypes
        USB_AUDIO_AS_DESCRIPTOR_UNDEFINED       = 0x00,
        USB_AUDIO_AS_GENERAL                            = 0x01,
        USB_AUDIO_AS_FORMAT_TYPE                        = 0x02,
        USB_AUDIO_AS_FORMAT_SPECIFIC            = 0x03
};

// Class Specific Audio Streaming Interface Descriptor
// R1: Table 4-19 p.60 / R2: Table 4-27 p.76
typedef struct {
        uint8   length;
        uint8   descriptor_type;                // USB_AUDIO_CS_INTERFACE
        uint8   descriptor_subtype;     // USB_AUDIO_AS_GENERAL
        uint8   terminal_link;
        union {
                struct {
                        uint8   delay;
                        uint16  format_tag;
                } _PACKED r1;

                struct {
                        uint8   bm_controls;
                        uint8   format_type;
                        uint32  bm_formats;
                        uint8   num_output_pins;
                        uint32  channel_config;
                        uint8   channel_names;
                } _PACKED r2;
        };
} _PACKED usb_audio_streaming_interface_descriptor;


// Class-specific As Isochronous Audio Data Endpoint descriptor
// R1: Table 4-21, p. 62 / R2: Table 4-34, page 87
typedef struct {
        uint8 length;
        uint8 descriptor_type;          // USB_AUDIO_CS_ENDPOINT
        uint8 descriptor_subtype;       // USB_AUDIO_EP_GENERAL
        uint8 attributes;
        uint8 lock_delay_units;
        uint16 lock_delay;
} _PACKED usb_audio_streaming_endpoint_descriptor;


// Sampling Rate are represented as 3-byte integer
typedef struct {
        uint8   bytes[3];
} _PACKED usb_audio_sampling_freq;


// Format Type I/II/III Descriptors
// T1: Table 2-1, p.10 etc.
// T2: Table 2-2, p.15 etc.
typedef struct {
        uint8 length;
        uint8 descriptor_type;                          // USB_AUDIO_CS_INTERFACE
        uint8 descriptor_subtype;                       // USB_AUDIO_AS_FORMAT_TYPE
        uint8 format_type;                                      // USB_AUDIO_FORMAT_TYPE_I/II/III
        union {
                struct {
                        uint8 nr_channels;
                        uint8 subframe_size;
                        uint8 bit_resolution;
                        uint8 sam_freq_type;
                        usb_audio_sampling_freq sam_freqs[1];
                } _PACKED typeI;

                struct {
                        uint16 max_bit_rate;
                        uint16 samples_per_frame;
                        uint8 sam_freq_type;
                        usb_audio_sampling_freq sam_freqs[1];
                } _PACKED typeII;

                struct {
                        uint8 nr_channels;
                        uint8 subframe_size;
                        uint8 bit_resolution;
                        uint8 sam_freq_type;
                        usb_audio_sampling_freq sam_freqs[1];
                } _PACKED typeIII;
        };
} _PACKED usb_audio_format_descriptor;


enum { // Processing Unit Process Types  (for USB_AUDIO_AC_PROCESSING_UNIT)
        USB_AUDIO_UPDOWNMIX_PROCESS     = 0x01,
        USB_AUDIO_DOLBY_PROLOGIC_PROCESS,
        USB_AUDIO_3D_STEREO_EXTENDER_PROCESS,
        USB_AUDIO_REVERBERATION_PROCESS,
        USB_AUDIO_CHORUS_PROCESS,
        USB_AUDIO_DYN_RANGE_COMP_PROCESS
};

enum { // Audio Class-Specific Request Codes
        USB_AUDIO_SET_CUR               = 0x01,
        USB_AUDIO_GET_CUR               = 0x81,
        USB_AUDIO_SET_MIN               = 0x02,
        USB_AUDIO_GET_MIN               = 0x82,
        USB_AUDIO_SET_MAX               = 0x03,
        USB_AUDIO_GET_MAX               = 0x83,
        USB_AUDIO_SET_RES               = 0x04,
        USB_AUDIO_GET_RES               = 0x84,
        USB_AUDIO_SET_MEM               = 0x05,
        USB_AUDIO_GET_MEM               = 0x85,
        USB_AUDIO_GET_STATUS    = 0xFF
};

enum { // Terminal Control Selectors
        USB_AUDIO_COPY_PROTECT_CONTROL = 0x01
};

// R2: A.17.5 Mixer Unit Control Selectors
enum {
        USB_AUDIO_MU_CONTROL_UNDEFINED          = 0x00,
        USB_AUDIO_MIXER_CONTROL                         = 0x01,
        USB_AUDIO_CLUSTER_CONTROL                       = 0x02,
        USB_AUDIO_UNDERFLOW_CONTROL                     = 0x03,
        USB_AUDIO_OVERFLOW_CONTROL                      = 0x04,
        USB_AUDIO_LATENCY_CONTROL                       = 0x05
};

/* A.10.2 Feature Unit Control Selectors */
enum {
        USB_AUDIO_AC_FU_CONTROL_UNDEFINED       = 0x00,
        USB_AUDIO_MUTE_CONTROL                          = 0x01,
        USB_AUDIO_VOLUME_CONTROL                        = 0x02,
        USB_AUDIO_BASS_CONTROL                          = 0x03,
        USB_AUDIO_MID_CONTROL                           = 0x04,
        USB_AUDIO_TREBLE_CONTROL                        = 0x05,
        USB_AUDIO_GRAPHIC_EQUALIZER_CONTROL     = 0x06,
        USB_AUDIO_AUTOMATIC_GAIN_CONTROL        = 0x07,
        USB_AUDIO_DELAY_CONTROL                         = 0x08,
        USB_AUDIO_BASS_BOOST_CONTROL            = 0x09,
        USB_AUDIO_LOUDNESS_CONTROL                      = 0x0A
};

/* A.10.3.1 Up/Down-mix Processing Unit Control Selectors */
#define USB_AUDIO_UD_CONTROL_UNDEFINED 0x00
#define USB_AUDIO_UD_ENABLED_CONTROL 0x01
#define USB_AUDIO_UD_MODE_SELECT_CONTROL 0x02

/* A.10.3.2 Dolby Prologic(tm) Processing Unit Control Selectors */
#define USB_AUDIO_DP_CONTROL_UNDEFINED 0x00
#define USB_AUDIO_DP_ENABLE_CONTROL 0x01
#define USB_AUDIO_DP_MODE_SELECT_CONTROL 0x02

/* A.10.3.3 3D Stereo Extender Processing Unit Control Selectors */
#define USB_AUDIO_3D_CONTROL_UNDEFINED 0x00
#define USB_AUDIO_3D_ENABLED_CONTROL 0x01
#define USB_AUDIO_3D_SPACIOUSNESS_CONTROL 0x03

/* A.10.3.4 Reverberation Processing Unit Control Selectors */
#define USB_AUDIO_RV_CONTROL_UNDEFINED 0x00
#define USB_AUDIO_RV_ENABLE_CONTROL 0x01
#define USB_AUDIO_RV_REVERB_LEVEL_CONTROL 0x02
#define USB_AUDIO_RV_REVERB_TIME_CONTROL 0x03
#define USB_AUDIO_RV_REVERB_FEEDBACK_CONTROL 0x04

/* A.10.3.5 Chorus Processing Unit Control Selectors */
#define USB_AUDIO_CH_CONTROL_UNDEFINED 0x00
#define USB_AUDIO_CH_ENABLE_CONTROL 0x01
#define USB_AUDIO_CHORUS_LEVEL_CONTROL 0x02
#define USB_AUDIO_CHORUS_RATE_CONTROL 0x03
#define USB_AUDIO_CHORUS_DETH_CONTROL 0x04

/* A.10.3.6 Dynamic Range Compressor Processing Unit Control Selectors */
#define USB_AUDIO_DR_CONTROL_UNDEFINED 0x00
#define USB_AUDIO_DR_ENABLE_CONTROL 0x01
#define USB_AUDIO_COMPRESSION_RATE_CONTROL 0x02
#define USB_AUDIO_MAXAMPL_CONTROL 0x03
#define USB_AUDIO_THRESHOLD_CONTROL 0x04
#define USB_AUDIO_ATTACK_TIME 0x05
#define USB_AUDIO_RELEASE_TIME 0x06

/* A.10.4 Extension Unit Control Selectors */
#define USB_AUDIO_XU_CONTROL_UNDEFINED 0x00
#define USB_AUDIO_XU_ENABLE_CONTROL 0x01

/* A.10.5 Endpoint Control Selectors */
enum {
        USB_AUDIO_EP_CONTROL_UNDEFINED                  = 0x00,
        USB_AUDIO_SAMPLING_FREQ_CONTROL                 = 0x01,
        USB_AUDIO_PITCH_CONTROL                                 = 0x02
};

/*
typedef struct
{
        uint8 length;
        uint8 type;
        uint8 subtype;
        uint8 unit_id;
        uint8 source_id;
        uint8 control_size;
        uint16 controls[0];
} _PACKED usb_audio_feature_unit_descriptor;

typedef struct {
        uint8 length;
        uint8 type;
        uint8 subtype;
        uint8 format_type;
        uint8 num_channels;
        uint8 subframe_size;
        uint8 bit_resolution;
        uint8 sample_freq_type;
        uint8 sample_freq[3];   // [0] + [1] << 8 + [2] << 16
        //  if sample_freq_type != 1,
        // (sample_freq_type - 1) x uint8 sample_freq[3] follows...
} _PACKED usb_audio_format_type_descriptor;
*/
// bitset for feature control bitmap
// Table 4-7, page 44, bmaControls field
enum {
        BMA_CTL_MUTE_R1                 = 0X0001,
        BMA_CTL_VOLUME_R1               = 0X0002,
        BMA_CTL_BASS_R1                 = 0X0004,
        BMA_CTL_MID_R1                  = 0X0008,
        BMA_CTL_TREBLE_R1               = 0X0010,
        BMA_CTL_GRAPHEQ_R1              = 0X0020,
        BMA_CTL_AUTOGAIN_R1             = 0X0040,
        BMA_CTL_DELAY_R1                = 0X0080,
        BMA_CTL_BASSBOOST_R1    = 0X0100,
        BMA_CTL_LOUDNESS_R1             = 0X0200,
        // Release 2.0
        BMA_CTL_MUTE                    = 0X00000003,
        BMA_CTL_VOLUME                  = 0X0000000C,
        BMA_CTL_BASS                    = 0X00000030,
        BMA_CTL_MID                             = 0X000000C0,
        BMA_CTL_TREBLE                  = 0X00000300,
        BMA_CTL_GRAPHEQ                 = 0X00000C00,
        BMA_CTL_AUTOGAIN                = 0X00003000,
        BMA_CTL_DELAY                   = 0X0000C000,
        BMA_CTL_BASSBOOST               = 0X00030000,
        BMA_CTL_LOUDNESS                = 0X000C0000,
        BMA_CTL_INPUTGAIN               = 0X00300000,
        BMA_CTL_INPUTGAINPAD    = 0X00C00000,
        BMA_CTL_PHASEINVERTER   = 0X03000000,
        BMA_CTL_UNDERFLOW               = 0X0C000000,
        BMA_CTL_OVERFLOW                = 0X30000000
};

// Table A-4, page 30
// Format Type Codes
enum {
        USB_AUDIO_FORMAT_TYPE_UNDEFINED         = 0x00,
        USB_AUDIO_FORMAT_TYPE_I                         = 0x01,
        USB_AUDIO_FORMAT_TYPE_II                        = 0x02,
        USB_AUDIO_FORMAT_TYPE_III                       = 0x03
};

// Table A-1, page 29, wFormatTag
// Audio Data Format Type I codes
enum {
        USB_AUDIO_FORMAT_TYPE_I_UNDEFINED       = 0x0000,
        USB_AUDIO_FORMAT_PCM                            = 0x0001,
        USB_AUDIO_FORMAT_PCM8                           = 0x0002,
        USB_AUDIO_FORMAT_IEEE_FLOAT                     = 0x0003,
        USB_AUDIO_FORMAT_ALAW                           = 0x0004,
        USB_AUDIO_FORMAT_MULAW                          = 0x0005
};


enum {
        // USB Terminal Types
        USB_AUDIO_UNDEFINED_USB_IO                      = 0x100,
        USB_AUDIO_STREAMING_USB_IO                      = 0x101,
        USB_AUDIO_VENDOR_USB_IO                         = 0x1ff,
        // Input Terminal Types
        USB_AUDIO_UNDEFINED_IN                          = 0x200,
        USB_AUDIO_MICROPHONE_IN                         = 0x201,
        USB_AUDIO_DESKTOPMIC_IN                         = 0x202,
        USB_AUDIO_PERSONALMIC_IN                        = 0x203,
        USB_AUDIO_OMNI_MIC_IN                           = 0x204,
        USB_AUDIO_MICS_ARRAY_IN                         = 0x205,
        USB_AUDIO_PROC_MICS_ARRAY_IN            = 0x206,
        // Output Terminal Types
        USB_AUDIO_UNDEFINED_OUT                         = 0x300,
        USB_AUDIO_SPEAKER_OUT                           = 0x301,
        USB_AUDIO_HEAD_PHONES_OUT                       = 0x302,
        USB_AUDIO_HMD_AUDIO_OUT                         = 0x303,
        USB_AUDIO_DESKTOP_SPEAKER                       = 0x304,
        USB_AUDIO_ROOM_SPEAKER                          = 0x305,
        USB_AUDIO_COMM_SPEAKER                          = 0x306,
        USB_AUDIO_LFE_SPEAKER                           = 0x307,
        // Bi-directional Terminal Types
        USB_AUDIO_UNDEFINED_IO                          = 0x400,
        USB_AUDIO_HANDSET_IO                            = 0x401,
        USB_AUDIO_HEADSET_IO                            = 0x402,
        USB_AUDIO_SPEAKER_PHONE_IO                      = 0x403,
        USB_AUDIO_SPEAKER_PHONEES_IO            = 0x404,
        USB_AUDIO_SPEAKER_PHONEEC_IO            = 0x405,
        // Telephony Terminal Types
        USB_AUDIO_UNDEF_TELEPHONY_IO            = 0x500,
        USB_AUDIO_PHONE_LINE_IO                         = 0x501,
        USB_AUDIO_TELEPHONE_IO                          = 0x502,
        USB_AUDIO_DOWNLINE_PHONE_IO                     = 0x503,
        // External Terminal Types
        USB_AUDIO_UNDEFINEDEXT_IO                       = 0x600,
        USB_AUDIO_ANALOG_CONNECTOR_IO           = 0x601,
        USB_AUDIO_DAINTERFACE_IO                        = 0x602,
        USB_AUDIO_LINE_CONNECTOR_IO                     = 0x603,
        USB_AUDIO_LEGACY_CONNECTOR_IO           = 0x604,
        USB_AUDIO_SPDIF_INTERFACE_IO            = 0x605,
        USB_AUDIO_DA1394_STREAM_IO                      = 0x606,
        USB_AUDIO_DV1394_STREAMSOUND_IO         = 0x607,
        USB_AUDIO_ADAT_LIGHTPIPE_IO                     = 0x608,
        USB_AUDIO_TDIF_IO                                       = 0x609,
        USB_AUDIO_MADI_IO                                       = 0x60a,
        // Embedded Terminal Types
        USB_AUDIO_UNDEF_EMBEDDED_IO                     = 0x700,
        USB_AUDIO_LC_NOISE_SOURCE_OUT           = 0x701,
        USB_AUDIO_EQUALIZATION_NOISE_OUT        = 0x702,
        USB_AUDIO_CDPLAYER_IN                           = 0x703,
        USB_AUDIO_DAT_IO                                        = 0x704,
        USB_AUDIO_DCC_IO                                        = 0x705,
        USB_AUDIO_MINI_DISK_IO                          = 0x706,
        USB_AUDIO_ANALOG_TAPE_IO                        = 0x707,
        USB_AUDIO_PHONOGRAPH_IN                         = 0x708,
        USB_AUDIO_VCR_AUDIO_IN                          = 0x709,
        USB_AUDIO_VIDEO_DISC_AUDIO_IN           = 0x70a,
        USB_AUDIO_DVD_AUDIO_IN                          = 0x70b,
        USB_AUDIO_TV_TUNER_AUDIO_IN                     = 0x70c,
        USB_AUDIO_SAT_RECEIVER_AUDIO_IN         = 0x70d,
        USB_AUDIO_CABLE_TUNER_AUDIO_IN          = 0x70e,
        USB_AUDIO_DSS_AUDIO_IN                          = 0x70f,
        USB_AUDIO_RADIO_RECEIVER_IN                     = 0x710,
        USB_AUDIO_RADIO_TRANSMITTER_IN          = 0x711,
        USB_AUDIO_MULTI_TRACK_RECORDER_IO       = 0x712,
        USB_AUDIO_SYNTHESIZER_IO                        = 0x713,
        USB_AUDIO_PIANO_IO                                      = 0x714,
        USB_AUDIO_GUITAR_IO                                     = 0x715,
        USB_AUDIO_DRUMS_IO                                      = 0x716,
        USB_AUDIO_INSTRUMENT_IO                         = 0x717
};


#endif  // USB_AUDIO_H