2003-07-26 05:07:12 +04:00
|
|
|
#ifndef USB_AUDIO_H
|
|
|
|
#define USB_AUDIO_H
|
|
|
|
|
2013-06-26 01:05:56 +04:00
|
|
|
// (Partial) USB Device Class Definition for Audio Devices
|
|
|
|
// R1: Release 1.0 March 18, 1998
|
|
|
|
// R2: Release 2.0 May 31, 2006
|
2003-07-26 05:07:12 +04:00
|
|
|
|
2013-06-26 01:05:56 +04:00
|
|
|
#include <SupportDefs.h>
|
2004-10-03 17:21:33 +04:00
|
|
|
|
2003-07-26 05:07:12 +04:00
|
|
|
#define USB_AUDIO_DEVICE_CLASS 0x01
|
|
|
|
#define USB_AUDIO_CLASS_VERSION 0x0100
|
|
|
|
|
|
|
|
enum {
|
|
|
|
USB_AUDIO_INTERFACE_AUDIO_CLASS = 0x01
|
|
|
|
};
|
|
|
|
|
2016-11-02 14:28:02 +03:00
|
|
|
enum { // Audio Interface Subclasses
|
|
|
|
USB_AUDIO_INTERFACE_UNDEFINED_SUBCLASS = 0x00,
|
2013-06-26 01:05:56 +04:00
|
|
|
USB_AUDIO_INTERFACE_AUDIOCONTROL_SUBCLASS = 0x01,
|
2016-11-02 14:28:02 +03:00
|
|
|
USB_AUDIO_INTERFACE_AUDIOSTREAMING_SUBCLASS,
|
|
|
|
USB_AUDIO_INTERFACE_MIDISTREAMING_SUBCLASS
|
2003-07-26 05:07:12 +04:00
|
|
|
};
|
|
|
|
|
2013-06-26 01:05:56 +04:00
|
|
|
enum { // Audio Interface Protocol Codes
|
2016-11-02 14:28:02 +03:00
|
|
|
USB_AUDIO_PROTOCOL_UNDEFINED = 0x00
|
2013-06-26 01:05:56 +04:00
|
|
|
};
|
|
|
|
|
2016-11-02 14:28:02 +03:00
|
|
|
enum { // Audio Interface Class-Specific Descriptor Types
|
2013-06-26 01:05:56 +04:00
|
|
|
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
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2003-07-26 05:07:12 +04:00
|
|
|
enum { // Audio Class-Specific AudioControl Interface descriptor subtypes
|
2013-06-26 01:05:56 +04:00
|
|
|
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
|
2003-07-26 05:07:12 +04:00
|
|
|
};
|
|
|
|
|
2013-06-26 01:05:56 +04:00
|
|
|
|
|
|
|
// 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;
|
2016-11-02 14:28:02 +03:00
|
|
|
uint8 interface_numbers[0];
|
2013-06-26 01:05:56 +04:00
|
|
|
} _PACKED r1;
|
|
|
|
|
|
|
|
struct {
|
|
|
|
uint8 function_category;
|
|
|
|
uint16 total_length;
|
|
|
|
uint8 bm_controls;
|
|
|
|
} _PACKED r2;
|
|
|
|
};
|
|
|
|
} _PACKED usb_audiocontrol_header_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];
|
|
|
|
// uint8 feature_string;
|
|
|
|
} _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;
|
|
|
|
|
|
|
|
|
2003-07-26 05:07:12 +04:00
|
|
|
enum { // Audio Class-Specific AudioStreaming Interface descriptor subtypes
|
2013-06-26 01:05:56 +04:00
|
|
|
USB_AUDIO_AS_DESCRIPTOR_UNDEFINED = 0x00,
|
|
|
|
USB_AUDIO_AS_GENERAL = 0x01,
|
|
|
|
USB_AUDIO_AS_FORMAT_TYPE = 0x02,
|
|
|
|
USB_AUDIO_AS_FORMAT_SPECIFIC = 0x03
|
2003-07-26 05:07:12 +04:00
|
|
|
};
|
|
|
|
|
2013-06-26 01:05:56 +04:00
|
|
|
// 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;
|
|
|
|
|
|
|
|
|
2003-07-26 05:07:12 +04:00
|
|
|
enum { // Processing Unit Process Types (for USB_AUDIO_AC_PROCESSING_UNIT)
|
2004-10-03 17:21:33 +04:00
|
|
|
USB_AUDIO_UPDOWNMIX_PROCESS = 0x01,
|
2003-07-26 05:07:12 +04:00
|
|
|
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
|
|
|
|
};
|
2004-10-03 17:21:33 +04:00
|
|
|
|
2013-06-26 01:05:56 +04:00
|
|
|
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
|
|
|
|
};
|
2004-10-03 17:21:33 +04:00
|
|
|
|
|
|
|
enum { // Terminal Control Selectors
|
|
|
|
USB_AUDIO_COPY_PROTECT_CONTROL = 0x01
|
|
|
|
};
|
|
|
|
|
2013-07-18 00:09:13 +04:00
|
|
|
// 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
|
|
|
|
};
|
|
|
|
|
2004-10-03 17:21:33 +04:00
|
|
|
/* A.10.2 Feature Unit Control Selectors */
|
2013-06-26 01:05:56 +04:00
|
|
|
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
|
|
|
|
};
|
2004-10-03 17:21:33 +04:00
|
|
|
|
|
|
|
/* 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 */
|
2013-06-26 01:05:56 +04:00
|
|
|
enum {
|
|
|
|
USB_AUDIO_EP_CONTROL_UNDEFINED = 0x00,
|
|
|
|
USB_AUDIO_SAMPLING_FREQ_CONTROL = 0x01,
|
|
|
|
USB_AUDIO_PITCH_CONTROL = 0x02
|
|
|
|
};
|
2004-10-03 17:21:33 +04:00
|
|
|
|
2013-06-26 01:05:56 +04:00
|
|
|
/*
|
2006-02-06 16:11:30 +03:00
|
|
|
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;
|
|
|
|
|
2004-10-03 17:21:33 +04:00
|
|
|
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;
|
2013-06-26 01:05:56 +04:00
|
|
|
*/
|
|
|
|
// 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
|
|
|
|
};
|
2004-10-03 17:21:33 +04:00
|
|
|
|
2003-07-26 05:07:12 +04:00
|
|
|
|
|
|
|
#endif // USB_AUDIO_H
|