dxd - dynax driver framework 3.0.2
cross platform open source driver development framework
Loading...
Searching...
No Matches
dx_usb_audio.h File Reference
#include "dx_circular.h"
#include "dx_midi.h"
#include "dx_usb.h"
Include dependency graph for dx_usb_audio.h:
This graph shows which files directly or indirectly include this file:

Classes

union  dx::usb::audio::descriptor
 USB audio class descriptors. More...
union  dx::usb::audio::descriptor::endpoint
union  dx::usb::audio::descriptor::endpoint::midi
struct  dx::usb::audio::descriptor::endpoint::midi::general<jacks>
union  dx::usb::audio::descriptor::endpoint::streaming
struct  dx::usb::audio::descriptor::endpoint::streaming::general
struct  dx::usb::audio::descriptor::endpoint::subtype
struct  dx::usb::audio::descriptor::head
union  dx::usb::audio::descriptor::interface
 USB audio class interface descriptors. More...
union  dx::usb::audio::descriptor::interface::control
 USB audio class control interface descriptors. More...
struct  dx::usb::audio::descriptor::interface::control::clock_multiplier
struct  dx::usb::audio::descriptor::interface::control::clock_selector<pins>
struct  dx::usb::audio::descriptor::interface::control::clock_source
struct  dx::usb::audio::descriptor::interface::control::effect_unit<channels>
struct  dx::usb::audio::descriptor::interface::control::extension_unit<pins>
struct  dx::usb::audio::descriptor::interface::control::feature_unit<channels>
struct  dx::usb::audio::descriptor::interface::control::head
struct  dx::usb::audio::descriptor::interface::control::header
union  dx::usb::audio::descriptor::interface::control::input_terminal
struct  dx::usb::audio::descriptor::interface::control::input_terminal::head
struct  dx::usb::audio::descriptor::interface::control::input_terminal::v1
struct  dx::usb::audio::descriptor::interface::control::input_terminal::v2
union  dx::usb::audio::descriptor::interface::control::mixer_unit<pins>
struct  dx::usb::audio::descriptor::interface::control::mixer_unit<pins>::head
struct  dx::usb::audio::descriptor::interface::control::mixer_unit<pins>::v1
struct  dx::usb::audio::descriptor::interface::control::mixer_unit<pins>::v2
union  dx::usb::audio::descriptor::interface::control::output_terminal
struct  dx::usb::audio::descriptor::interface::control::output_terminal::head
struct  dx::usb::audio::descriptor::interface::control::output_terminal::v1
struct  dx::usb::audio::descriptor::interface::control::output_terminal::v2
struct  dx::usb::audio::descriptor::interface::control::processing_unit<pins>
struct  dx::usb::audio::descriptor::interface::control::samplerate_converter
struct  dx::usb::audio::descriptor::interface::control::selector_unit<pins>
struct  dx::usb::audio::descriptor::interface::control::subtype
union  dx::usb::audio::descriptor::interface::control::v1
 every control entity as Audio Device Class 1.0 lays it out; v2 below is the same set in 2.0 - the header's bcdADC says which a device speaks, and dxd configures ADC1 devices More...
struct  dx::usb::audio::descriptor::interface::control::v1::clock_selector1
struct  dx::usb::audio::descriptor::interface::control::v1::clock_selector<channels>
struct  dx::usb::audio::descriptor::interface::control::v1::effect_unit1
struct  dx::usb::audio::descriptor::interface::control::v1::effect_unit<channels>
struct  dx::usb::audio::descriptor::interface::control::v1::extension_unit1
struct  dx::usb::audio::descriptor::interface::control::v1::extension_unit<channels>
struct  dx::usb::audio::descriptor::interface::control::v1::feature_unit1
struct  dx::usb::audio::descriptor::interface::control::v1::feature_unit<channels>
struct  dx::usb::audio::descriptor::interface::control::v1::mixer_unit1
struct  dx::usb::audio::descriptor::interface::control::v1::mixer_unit<pins>
struct  dx::usb::audio::descriptor::interface::control::v1::processing_unit1
struct  dx::usb::audio::descriptor::interface::control::v1::processing_unit<channels>
struct  dx::usb::audio::descriptor::interface::control::v1::selector_unit1
struct  dx::usb::audio::descriptor::interface::control::v1::selector_unit<channels>
union  dx::usb::audio::descriptor::interface::control::v2
struct  dx::usb::audio::descriptor::interface::control::v2::clock_selector1
struct  dx::usb::audio::descriptor::interface::control::v2::clock_selector<channels>
struct  dx::usb::audio::descriptor::interface::control::v2::effect_unit1
struct  dx::usb::audio::descriptor::interface::control::v2::effect_unit<channels>
struct  dx::usb::audio::descriptor::interface::control::v2::extension_unit1
struct  dx::usb::audio::descriptor::interface::control::v2::extension_unit<channels>
struct  dx::usb::audio::descriptor::interface::control::v2::feature_unit1
struct  dx::usb::audio::descriptor::interface::control::v2::feature_unit<channels>
struct  dx::usb::audio::descriptor::interface::control::v2::mixer_unit1
struct  dx::usb::audio::descriptor::interface::control::v2::mixer_unit<pins>
struct  dx::usb::audio::descriptor::interface::control::v2::processing_unit1
struct  dx::usb::audio::descriptor::interface::control::v2::processing_unit<channels>
struct  dx::usb::audio::descriptor::interface::control::v2::selector_unit1
struct  dx::usb::audio::descriptor::interface::control::v2::selector_unit<channels>
struct  dx::usb::audio::descriptor::interface::head
union  dx::usb::audio::descriptor::interface::midi
struct  dx::usb::audio::descriptor::interface::midi::element<pins, caps>
struct  dx::usb::audio::descriptor::interface::midi::head
struct  dx::usb::audio::descriptor::interface::midi::header
union  dx::usb::audio::descriptor::interface::midi::jack
struct  dx::usb::audio::descriptor::interface::midi::jack::head
struct  dx::usb::audio::descriptor::interface::midi::jack::in
struct  dx::usb::audio::descriptor::interface::midi::jack::out<pins>
struct  dx::usb::audio::descriptor::interface::midi::subtype
union  dx::usb::audio::descriptor::interface::streaming
 USB audio class streaming interface descriptors. More...
struct  dx::usb::audio::descriptor::interface::streaming::encoder
union  dx::usb::audio::descriptor::interface::streaming::format
union  dx::usb::audio::descriptor::interface::streaming::format::ex
struct  dx::usb::audio::descriptor::interface::streaming::format::ex::type1
struct  dx::usb::audio::descriptor::interface::streaming::format::ex::type2
struct  dx::usb::audio::descriptor::interface::streaming::format::ex::type3
struct  dx::usb::audio::descriptor::interface::streaming::format::head
union  dx::usb::audio::descriptor::interface::streaming::format::type1
struct  dx::usb::audio::descriptor::interface::streaming::format::type1::v1
struct  dx::usb::audio::descriptor::interface::streaming::format::type1::v2
union  dx::usb::audio::descriptor::interface::streaming::format::type2
struct  dx::usb::audio::descriptor::interface::streaming::format::type2::v1
struct  dx::usb::audio::descriptor::interface::streaming::format::type2::v2
struct  dx::usb::audio::descriptor::interface::streaming::format::type4
union  dx::usb::audio::descriptor::interface::streaming::format::v1
union  dx::usb::audio::descriptor::interface::streaming::format::v2
union  dx::usb::audio::descriptor::interface::streaming::format::v2::ex
union  dx::usb::audio::descriptor::interface::streaming::general
struct  dx::usb::audio::descriptor::interface::streaming::general::v1
struct  dx::usb::audio::descriptor::interface::streaming::general::v2
struct  dx::usb::audio::descriptor::interface::streaming::head
struct  dx::usb::audio::descriptor::interface::streaming::subtype
union  dx::usb::audio::descriptor::interface::streaming::v1
union  dx::usb::audio::descriptor::interface::streaming::v2
struct  dx::usb::audio::descriptor::type
struct  dx::usb::audio::isoc
 the isochronous cycle of one pipe: the slots a session rotates through, each carrying the bus frame it is scheduled for, its request size and the lines its micro frames hold. More...
struct  dx::usb::audio::isoc::cycle
struct  dx::usb::audio::isoc::cycle::tick
struct  dx::usb::audio::range<ranges_t>
 an ADC2 control's answer: subranges of minimum, maximum and resolution More...
struct  dx::usb::audio::subclass
struct  dx::usb::midi<buffer_t>
 USB MIDI packetizer. More...
union  dx::usb::midi<buffer_t>::msg
 USB MIDI endpoint element types: defining the element size for a single USB MIDI pipe request. More...

Namespaces

namespace  dx
 dynax driver framework interface namespace
namespace  dx::usb
 the verbs of a USB device as its system names them
namespace  dx::usb::audio
 generic USB audio 1.0
namespace  dx::usb::audio::to
namespace  dx::usb::terminal

Enumerations

enum  dx::usb::audio::endpoint_control : uint16_t { dx::usb::audio::sampling_frequency = 0x0100 }
enum  dx::usb::audio::feature_control : uint16_t { dx::usb::audio::mute = 0x0100 , dx::usb::audio::volume = 0x0200 }
enum  dx::usb::audio::request : uint8_t {
  dx::usb::audio::set_cur = 0x01 , dx::usb::audio::set_min , dx::usb::audio::set_max , dx::usb::audio::set_res ,
  dx::usb::audio::set_mem , dx::usb::audio::get_cur = 0x81 , dx::usb::audio::get_min , dx::usb::audio::get_max ,
  dx::usb::audio::get_res , dx::usb::audio::get_mem , dx::usb::audio::get_stat = 0xff
}
enum  dx::usb::audio::selector_control : uint16_t { dx::usb::audio::selector_v1 = 0x0000 , dx::usb::audio::selector_v2 = 0x0100 }
enum  dx::usb::audio::terminal : uint16_t {
  dx::usb::audio::usb_undefined = 0x0100 , dx::usb::audio::usb_streaming = 0x0101 , dx::usb::audio::usb_vendor = 0x01ff , dx::usb::audio::input_undefined = 0x0200 ,
  dx::usb::audio::microphone = 0x0201 , dx::usb::audio::desktop_microphone = 0x0202 , dx::usb::audio::personal_microphone = 0x0203 , dx::usb::audio::omni_microphone = 0x0204 ,
  dx::usb::audio::microphone_array = 0x0205 , dx::usb::audio::processing_microphone = 0x0206 , dx::usb::audio::output_undefined = 0x0300 , dx::usb::audio::speaker = 0x0301 ,
  dx::usb::audio::headphones = 0x0302 , dx::usb::audio::head_mounted = 0x0303 , dx::usb::audio::desktop_speaker = 0x0304 , dx::usb::audio::room_speaker = 0x0305 ,
  dx::usb::audio::communication_speaker = 0x0306 , dx::usb::audio::lfe_speaker = 0x0307 , dx::usb::audio::bidirectional_undefined =0x0400 , dx::usb::audio::handset = 0x0401 ,
  dx::usb::audio::headset = 0x0402 , dx::usb::audio::speakerphone = 0x0403 , dx::usb::audio::echo_suppressing = 0x0404 , dx::usb::audio::echo_canceling = 0x0405 ,
  dx::usb::audio::telephony_undefined = 0x0500 , dx::usb::audio::phone_line = 0x0501 , dx::usb::audio::telephone = 0x0502 , dx::usb::audio::down_line_phone = 0x0503 ,
  dx::usb::audio::external_undefined = 0x0600 , dx::usb::audio::analog_connector = 0x0601 , dx::usb::audio::digital_interface = 0x0602 , dx::usb::audio::line_connector = 0x0603 ,
  dx::usb::audio::legacy_connector = 0x0604 , dx::usb::audio::spdif = 0x0605 , dx::usb::audio::da_stream = 0x0606 , dx::usb::audio::dv_stream = 0x0607 ,
  dx::usb::audio::embedded_undefined = 0x0700 , dx::usb::audio::calibration_noise = 0x0701 , dx::usb::audio::equalization_noise = 0x0702 , dx::usb::audio::cd_player = 0x0703 ,
  dx::usb::audio::dat = 0x0704 , dx::usb::audio::dcc = 0x0705 , dx::usb::audio::minidisk = 0x0706 , dx::usb::audio::analog_tape = 0x0707 ,
  dx::usb::audio::phonograph = 0x0708 , dx::usb::audio::vcr = 0x0709 , dx::usb::audio::video_disc = 0x070a , dx::usb::audio::dvd = 0x070b ,
  dx::usb::audio::tv_tuner = 0x070c , dx::usb::audio::satellite = 0x070d , dx::usb::audio::cable_tuner = 0x070e , dx::usb::audio::dss = 0x070f ,
  dx::usb::audio::radio_receiver = 0x0710 , dx::usb::audio::radio_transmitter = 0x0711 , dx::usb::audio::multitrack = 0x0712 , dx::usb::audio::synthesizer = 0x0713
}
 the terminal types of the audio class ("Universal Serial Bus Device Class Definition for Terminal Types", A.2): what wTerminalType holds, and what a CoreAudio HAL answers as a stream's terminal type for a USB device and for the machine's own More...
enum class  dx::usb::terminal::types {
  dx::usb::terminal::usb_undefined = 0x0100 , dx::usb::terminal::streaming , dx::usb::terminal::vendor_specific = 0x01ff , dx::usb::terminal::input_undefined = 0x0200 ,
  dx::usb::terminal::microphone , dx::usb::terminal::desktop_microphone , dx::usb::terminal::personal_microphone , dx::usb::terminal::omni_directional_microphone ,
  dx::usb::terminal::microphone_array , dx::usb::terminal::processing_microphone_array , dx::usb::terminal::output_undefined = 0x300 , dx::usb::terminal::speaker ,
  dx::usb::terminal::headphones , dx::usb::terminal::head_mounted_display_audio , dx::usb::terminal::desktop_speaker , dx::usb::terminal::room_speaker ,
  dx::usb::terminal::communication_speaker , dx::usb::terminal::low_frequency_effects_speaker
}

Functions

template<typename desc_t>
bool dx::usb::audio::configure(desc_t& desc, const void* configuration, size_t length) noexcept
 a class compliant device's desc from its configuration descriptor: the clocks, streams and pins of the audio class descriptors, walked in place - bLength and wTotalLength are device supplied and untrusted, every step is bounded by them. ADC1 only, an ADC2 device leaves the desc as it is. A vendor specific interface (bInterfaceClass vendor) with the audio subclasses is read like the class's own: what makes it audio is its class descriptors, and a setting without them yields nothing.
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::endpoint)& endpoint)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::control::clock_multiplier)& clock_multiplier)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::control::clock_selector1)& clock_selector1)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::control::clock_source)& clock_source)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::control::effect_unit1)& effect_unit1)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::control::extension_unit1)& extension_unit1)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::control::feature_unit1)& feature_unit1)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::control::processing_unit1)& processing_unit1)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::control::samplerate_converter)& samplerate_converter)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::control::selector_unit1)& selector_unit1)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::control::v1)& control)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::control::v2)& control)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::midi)& midi)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::midi::header)& header)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::midi::jack)& jack)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::streaming::encoder)& encoder)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::streaming::format::ex::type1)& format)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::streaming::format::type1::v1)& format)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::streaming::format::type1::v2)& format)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::streaming::format::type2::v1)& format)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::streaming::format::type2::v2)& format)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::streaming::format::v1)& format)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::streaming::format::v2)& format)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::streaming::general::v1)& general)
 usb::audio::descriptor::interface::streaming logging
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::streaming::general::v2)& general)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::streaming::v1)& streaming)
std::ostream& dx::usb::operator <<(std::ostream& os, const decltype(audio::descriptor::interface::streaming::v2)& streaming)
std::ostream& dx::usb::operator <<(std::ostream& os, const struct audio::descriptor::interface::control::header& header)
 usb::audio::descriptor::interface::control logging
std::ostream& dx::usb::operator <<(std::ostream& os, const struct audio::descriptor::interface::control::input_terminal::v1& input_terminal)
std::ostream& dx::usb::operator <<(std::ostream& os, const struct audio::descriptor::interface::control::input_terminal::v2& input_terminal)
std::ostream& dx::usb::operator <<(std::ostream& os, const struct audio::descriptor::interface::control::mixer_unit<1>::v1& mixer_unit1)
std::ostream& dx::usb::operator <<(std::ostream& os, const struct audio::descriptor::interface::control::mixer_unit<1>::v2& mixer_unit1)
std::ostream& dx::usb::operator <<(std::ostream& os, const struct audio::descriptor::interface::control::output_terminal::v1& output_terminal)
std::ostream& dx::usb::operator <<(std::ostream& os, const struct audio::descriptor::interface::control::output_terminal::v2& output_terminal)
dx::stream::plug::plug dx::usb::audio::to::plug(uint32_t terminalterminal) noexcept
template<typename request_t>
os_result dx::usb::audio::rate(uint32_t value, request_t&& requestrequest)
 the domain's sampling frequency at a rated endpoint, taken at its session's charge in the alternate setting the charge selected - the endpoint exists there alone: set, then read back; a device running another rate than the domain's fails the charge. request(rate, set) is the platform's class request to the endpoint, ok returned
template<typename desc_t>
uint32_t dx::usb::audio::rated(const desc_t& desc, const typename desc_t::configuration& active, const void* configuration, size_t length) noexcept
 the streams of a desc, in the stream configurations active runs, whose endpoints take the sampling frequency control, a bit per desc.stream[]: the class endpoint descriptor states it (bmAttributes D0) - or, none stating it, every audio stream of a configuration carrying an AudioControl header (ADC1); a configuration without one takes no class request. A stream stating options.quirk.samplerate does the opposite of what its descriptor states, and the fallback leaves it alone
bool dx::usb::audio::within(const decltype(usb::descriptor::head)* head, uint8_t type, uint8_t subtype) noexcept
 a class specific descriptor of the type and subtype: those of an interface setting run up to its next interface descriptor