dxd - dynax driver framework 3.0.0d222
cross platform open source driver development framework
Loading...
Searching...
No Matches
dx::usb::stream::device< desc_t, preference_t, stream_t, group_t > Class Template Reference

< the app's consumer group (dx::stream::engine::group) wraps this bus's own More...

#include <dx_usb_stream_device.h>

Inheritance diagram for dx::usb::stream::device< desc_t, preference_t, stream_t, group_t >:
Collaboration diagram for dx::usb::stream::device< desc_t, preference_t, stream_t, group_t >:

Public Types

typedef desc_t desc_t
typedef event event_t
typedef std::conditional_t< std::is_void_v< group< device< desc_t, dx::preference, pipe, group > > >, dx::stream::group< device >, group< device< desc_t, dx::preference, pipe, group > > > group_t
 bus devices driving their groups' tick pass their own group type
typedef std::set< std::string > keys
typedef promoted< uint32_t >::template preference< decltype(usb::device< dx::preference >::preference)> source_t
typedef pipe< device< desc_t, dx::preference, pipe, group > > stream_t
enum  type

Public Member Functions

usb::interfaceat (uint8_t number)
void attach (channel_t **io[dx::stream::direction::directions][2], const std::vector< bool >(&channel_map)[2])
 catch (...)
 catch (...)
deviceclear ()
deviceclose (bool force=false) noexcept
void conclude () noexcept override
 ends every group's session before the device's resources go; the start counts stay with their holders
uint8_t configuration () const
uint8_t configuration (uint8_t configuration) override
uint8_t configurations () const
virtual void configure ()
auto count () const noexcept
auto count () const noexcept
void ctl (uint32_t ioctl) const
class end ()
registryerase (const char *subkey=nullptr) noexcept
void exception (const dx::exception &exception, bool filtered=false) const noexcept override
 notification exception handler
uint64_t frame (int64_t *timestamp=nullptr) const
 current bus frame number; timestamp: dx::timestamp() of the readout
virtual void free () noexcept
value_t get () const
value_t get (::CFStringRef key) const
::CFTypeRef get (::CFStringRef key) const
::CFTypeRef get (::CFStringRef key) const
value_t get (::CFStringRef key, ::CFTypeRef dflt) const noexcept
::CFTypeRef get (::CFStringRef key, ::CFTypeRef dflt) const noexcept
::CFTypeRef get (::CFStringRef key, ::CFTypeRef dflt) const noexcept
value_t get (::CFStringRef key, value_t dflt) const noexcept
value_t get (::CFStringRef key, value_t dflt) const noexcept
value_t get (key_t key) const
::CFTypeRef get (key_t key) const
::CFTypeRef get (key_t key) const
bool get (value_t &value) const
virtual bool hw_clock () const noexcept
virtual void hw_clock (abstract::event *hw_clock, uint32_t iosize)
hide_if_scalar_or_ptr< rx_t > ictl (uint32_t ioctl) const
 member ioctl
size_t ictl (unsigned int ioctl, rx_t &rx) const
void info (std::ostream &os) noexcept override
 log object class information
registryinitialize (::HKEY root, ::REGSAM rights=KEY_ALL_ACCESS)
registryinitialize (::REGSAM rights=KEY_ALL_ACCESS, ::HKEY root=HKEY_CURRENT_USER)
void initialize (const char *name, ::DWORD access=GENERIC_READ|GENERIC_WRITE, ::DWORD share=FILE_SHARE_READ|FILE_SHARE_WRITE)
 (re-)initialization the underlaying windows API is CreateFile(). for detailed information see http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx
registryinitialize (const std::string &key, ::HKEY root=HKEY_CURRENT_USER, ::REGSAM rights=KEY_ALL_ACCESS)
size_t ioctl (uint32_t ioctl, const tx_t &tx, rx_t &rx) const
rx_t ioctl (unsigned int ioctl, const tx_t &tx) const
void launch () override
 launch notification: object mounted and ready to use. Called only through try_launch() - never call this directly from outside the class hierarchy.
deviceoctl (uint32_t ioctl, const tx_t &tx)
void octl (unsigned int ioctl, const tx_t &tx) const
deviceopen ()
 opens the USB device for exclusice access
 operator const ::io_registry_entry_t & () const noexcept
 auto converter into const io_object
 operator const ::io_registry_entry_t & () const noexcept
 auto converter into const io_object
 operator const ::io_registry_entry_t & () const noexcept
 auto converter into const io_object
 operator const os_event () const noexcept
 operator const std::string & () const noexcept
 identifying device string, mirroring macOS' io::registry conversion
 operator os_event () noexcept
 operator uint64_t () const
 operator uint64_t () const
::IOUSBDeviceInterface650 * operator-> () const
 operator::CFMutableDictionaryRef () const
 operator::CFMutableDictionaryRef () const
 operator::CFStringRef () const
 operator::CFStringRef () const
 operator::HANDLE () const noexcept
 operator::HKEY () const noexcept
 operator::io_registry_entry_t & () noexcept
 auto converter into io_object
 operator::io_registry_entry_t & () noexcept
 auto converter into io_object
 operator::io_registry_entry_t & () noexcept
 auto converter into io_object
 operator::io_registry_entry_t * () noexcept
 auto converter into io_object pointer
 operator::io_registry_entry_t * () noexcept
 auto converter into io_object pointer
 operator::io_registry_entry_t * () noexcept
 auto converter into io_object pointer
 operator::IOUSBDeviceInterface650 ** () const
bool operator== (::io_registry_entry_t io_object) const noexcept
bool operator== (::io_registry_entry_t io_object) const noexcept
virtual deviceoperator>> (std::ostream &) const
virtual deviceoperator>> (std::ostream &) const
::CFTypeRef operator[] (::CFStringRef key) const
group< device< desc_t, dx::preference, pipe, group > > & operator[] (const typename desc_t::stream::desc &stream)
 the stream's group, created on first use
::CFTypeRef operator[] (key_t key) const
registry parent () const
registry parent () const
devicereenumerate ()
devicereset ()
referenceretain ()
referenceretain ()
registryrun ()
registryset (::CFStringRef key, ::CFTypeRef value)
registryset (::CFStringRef key, ::CFTypeRef value)
registryset (::CFStringRef key, value_t value)
registryset (::CFStringRef key, value_t value)
deviceset (::CFTypeRef properties)
 Setting properties in a registry entry is not generally supported, it is more common to support setting of properties of the connection based property setting of dx::device.
registryset (::CFTypeRef properties)
 Setting properties in a registry entry is not generally supported, it is more common to support setting of properties of the connection based property setting of dx::device.
registryset (::DWORD type, const void *value, size_t size)
registryset (key_t key, ::CFTypeRef value)
registryset (key_t key, ::CFTypeRef value)
registryset (key_t key, value_t value)
registryset (key_t key, value_t value)
size_t size () const noexcept
virtual void sleep ()
 notify system will sleep stub
virtual void sleep ()
 notify system will sleep stub
virtual std::pair< source_t &, bool > source (const struct desc_t::stream &stream)
 the stream's source selector, created on first use: the preference by stream target, the value an index into the stream's sources
os_result status () const noexcept
std::string string (uint8_t idx, enum language language=language::standard)
std::string string (uint8_t idx, enum language language=language::standard)
std::string string (uint8_t) const
std::string string (unsigned char idx, enum language language=language::standard) const
devicesubmit (const request< data_t > &request)
 standard device request
bool try_conclude () noexcept
 atomically conclude()s if currently launched; returns whether this call did it
bool try_conclude () noexcept
 atomically conclude()s if currently launched; returns whether this call did it
bool try_launch ()
 atomically launch()es if not already launched; returns whether this call did it
bool try_launch ()
 atomically launch()es if not already launched; returns whether this call did it
type type () const noexcept
void wake () override

Static Public Member Functions

static void assign (const self_t &self, const value_t &value)
static registry at (const self_t &self)
static container_t children (const self_t &self) noexcept
static void create (const char *product_id, const ::GUID &guid, const std::string &id, const desc_t &desc)
 persisted software device: PnP keeps it enumerated after the creating handle closes
static void destroy (const char *product_id, const ::GUID &guid, const std::string &id)
 re-acquires the persisted device and binds it to the closing handle; PnP keeps the removed device's node as a phantom, uninstalled here
static bool fetch (const self_t &self, value_t &value)
static std::pair< std::string, std::string > identity (::io_service_t id)
 the device class constructor
static bool nested (const self_t &self) noexcept
static void purge (const self_t &self) noexcept
static size_t size (const self_t &self) noexcept

Public Attributes

struct { 
   union { 
      struct { 
         struct { 
            struct { 
               uint8_t   id 
            }   selector
            struct { 
               uint8_t   id 
            }   source
         }   clock
      }   v2
   } 
   uint8_t   interface 
 the AudioControl interface: class requests to units address it More...
adc
uint16_t bcdADC
cf::string bundle_id
struct { 
   struct { 
      uint8_t   id 
   }   selector
   struct { 
      uint8_t   id 
   }   source
clock
std::atomic< int64_tclock_locked
 dx::timestamp() from which the device's clock is locked to the sample rate last set (desc::clock::lock_delay): the transport charges its pipes no earlier, a session live across the change is re-charged then
promoted< uint32_t >::preference< decltype(super::preference)> clocksource
bool composite
 indicate WinUSB matched against single interface of composite device;
dx::driver< decltype(id), dx::preference > & driver
dx::driver< decltype(id), dx::preference > & driver
std::weak_ptr< dx::circularfeedback
 the line count an out slot carries per frame - produced by an implicit feedback in pipe, consumed by the asynchronous out pipe
std::map< decltype(desc_t::stream::group), group< device< desc_t, dx::preference, pipe, group > > > group
 streaming groups by desc::stream::group id: every stream of this device is registered with its group - behind the settings its groups listen to, so they go first
::WINUSB_INTERFACE_HANDLE handle
struct { 
   dx::shared::guard< std::map< abstract::event *, dx::stream::clock::consumer > >   clock 
 event -> its own iosize and sample counter More...
   uint32_t   iosize 
 staging value for registration paths without their own iosize argument (macOS CF property bridge) More...
hw
promoted< std::string >::preference< decltype(super::preference)> icon
uint8_t id
uint8_t interface
 the AudioControl interface: class requests to units address it
promoted< uint32_t >::preference< decltype(super::preference)> iosize
uint32_t iosize
 staging value for registration paths without their own iosize argument (macOS CF property bridge)
std::string key
std::atomic< bool > launched
std::atomic< bool > launched
std::deque< std::function< void()> > listen
dx::stream::device::monitor monitor
dx::preference preference
dx::preference preference
std::string puid
 persistent UID - system unique - could change with location
std::string puid
 persistent UID - system unique - could change with location
std::string puuid
 persistent universal UID - universally unique ID (i.e. serial number)
std::string puuid
 persistent universal UID - universally unique ID (i.e. serial number)
promoted< uint32_t >::preference< decltype(super::preference)> samplerate
bool schedule_erase
struct { 
   uint8_t   id 
selector
struct { 
   uint8_t   id 
source
std::map< decltype(desc_t::stream::target.idx()), source_tsources
enum speed speed
promoted< structdesc_t::stream * >::template preference< decltype(super::preference), uint32_tsync_reference
struct { 
   struct { 
      struct { 
         uint8_t   id 
      }   selector
      struct { 
         uint8_t   id 
      }   source
   }   clock
v2
dx::stream::device::monitor version

Static Public Attributes

static constexpr bool hosted
 the transport's settings belong to another process' device: a hosted device mirrors them through its chains, it keeps no store of them

Protected Types

typedef service::request< service::stream::data< typename super_device_t::desc_t > > request
typedef pipe< request >::template server< user_client, std::weak_ptr< device > > server
 pipe::server connecting user_clients The pipe holds a std::weak_ptr<device> as a temporary by the pipe::server::args variadic tuple to create shared device references for the user_client. At time of device construction there is not yet a std::shared_ptr<device>, therefore the pipe::server::args weak_ptr assignment happens at service::device::launch().

Protected Member Functions

std::string canonical (const std::string &name) const
virtual void grouped (group< device< desc_t, dx::preference, pipe, group > > &)
 operator[](): a group just came into existence, a host wires its per-group transports here
void grouped (typename super::group< device< desc_t, dx::preference, pipe, group > > &group) override
void initialize (::IOCFPlugInInterface **cf_interface, ::CFUUIDRef uuid)
registryinitialize (const std::string &key, ::REGSAM rights, ::HKEY root, const char *path=nullptr)

Protected Attributes

bool connected
std::unique_ptr< uint8_t[]> descriptors
 the selected configuration's complete descriptor, wTotalLength bytes
std::list< promoted > group_server
 per-group chains, wired as each group comes into existence (grouped())
struct { 
   cf::string   bundle_id 
   cf::string   class_name 
kernel
std::atomic< int > opened
class dx::service::device::promoted pipe
server pipe
io::port port
::HANDLE process
decltype(super::samplerate) ::chain samplerate_server
struct { 
   ::WINUSB_INTERFACE_HANDLE   handle 
winusb

Detailed Description

template<typename desc_t, typename preference_t = dx::preference, template< typename, typename=dx::circular, template< typename ... > typename=dx::stream::stream > typename stream_t = pipe, template< typename ... > typename group_t = group>
class dx::usb::stream::device< desc_t, preference_t, stream_t, group_t >

< the app's consumer group (dx::stream::engine::group) wraps this bus's own

Member Typedef Documentation

◆ desc_t

◆ event_t

◆ group_t

bus devices driving their groups' tick pass their own group type

◆ keys

typedef std::set<std::string> dx::registry::keys
inherited

◆ request

typedef service::request<service::stream::data<typename super_device_t::desc_t> > dx::service::device< dx::preference >::request
protectedinherited

◆ server

typedef pipe<request>::template server<user_client, std::weak_ptr<device> > dx::service::device< dx::preference >::server
protectedinherited

pipe::server connecting user_clients The pipe holds a std::weak_ptr<device> as a temporary by the pipe::server::args variadic tuple to create shared device references for the user_client. At time of device construction there is not yet a std::shared_ptr<device>, therefore the pipe::server::args weak_ptr assignment happens at service::device::launch().

◆ source_t

◆ stream_t

Member Enumeration Documentation

◆ type

enum dx::registry::type : ::DWORD
stronginherited

Member Function Documentation

◆ assign()

void dx::registry::assign ( const self_t & self,
const value_t & value )
inlinestaticinherited

◆ at() [1/2]

registry dx::registry::at ( const self_t & self)
inlinestaticinherited

dx::key_value_tree<registry> contract: resolves self's parent chain into one real key/value position, then delegates below - the only place a registry[k1][k2]..[kN] chain becomes real subkeys/values.

◆ at() [2/2]

usb::interface & dx::usb::device< dx::preference >::at ( uint8_t number)
inlineinherited

the interface of that number - a list position is no interface number: a device may number them sparsely, and one whose exclusive owner refused it never entered the list

◆ attach()

void dx::stream::device< usb::device< dx::preference >, desc_t, pipe< device< desc_t, dx::preference, pipe, group > >, group< device< desc_t, dx::preference, pipe, group > > >::attach ( channel_t ** io[dx::stream::direction::directions][2],
const std::vector< bool >(&) channel_map[2] )
inlineinherited

◆ canonical()

std::string dx::registry::canonical ( const std::string & name) const
inlineprotectedinherited

◆ catch() [1/2]

dx::registry::catch ( ...)
inlineinherited

◆ catch() [2/2]

dx::registry::catch ( ...)
inlineinherited

◆ children()

container_t dx::registry::children ( const self_t & self)
inlinestaticnoexceptinherited

self's own child names as any string container, yielding an empty one when the key is absent or inaccessible. Stays a static, not a dx::key_value_tree-style operator container_t(): registry is a dependent base of key_value_tree<registry> (inherited via the tree_t template parameter), and key_value_tree's own operator value_t() becomes entirely unreachable once a dependent base declares a same-shaped operator container_t() template of its own.

◆ clear()

device & dx::usb::platform::device< dx::preference >::clear ( )
inlineinherited

◆ close()

device & dx::usb::platform::device< dx::preference >::close ( bool force = false)
inlinenoexceptinherited

◆ conclude()

void dx::stream::device< usb::device< dx::preference >, desc_t, pipe< device< desc_t, dx::preference, pipe, group > >, group< device< desc_t, dx::preference, pipe, group > > >::conclude ( )
inlineoverridenoexceptinherited

ends every group's session before the device's resources go; the start counts stay with their holders

◆ configuration() [1/2]

uint8_t dx::usb::platform::device< dx::preference >::configuration ( ) const
inlineinherited

◆ configuration() [2/2]

uint8_t dx::usb::device< dx::preference >::configuration ( uint8_t configuration)
inlineoverrideinherited

◆ configurations()

uint8_t dx::usb::platform::device< dx::preference >::configurations ( ) const
inlineinherited

◆ configure()

virtual void dx::usb::stream::_device< desc_t, dx::preference, pipe< device< desc_t, dx::preference, pipe, group > >, group< device< desc_t, dx::preference, pipe, group > > >::configure ( )
inlinevirtualinherited

a desc without streams takes them from the configuration's audio class descriptors

◆ count() [1/2]

auto io::reference< ::io_registry_entry_t >::count ( ) const
inlinenoexceptinherited

◆ count() [2/2]

auto io::reference< ::io_registry_entry_t >::count ( ) const
inlinenoexceptinherited

◆ create()

void dx::proxy::device< dx::preference >::create ( const char * product_id,
const ::GUID & guid,
const std::string & id,
const desc_t & desc )
inlinestaticinherited

persisted software device: PnP keeps it enumerated after the creating handle closes

◆ ctl()

void dx::proxy::device< dx::preference >::ctl ( uint32_t ioctl) const
inlineinherited

◆ destroy()

void dx::proxy::device< dx::preference >::destroy ( const char * product_id,
const ::GUID & guid,
const std::string & id )
inlinestaticinherited

re-acquires the persisted device and binds it to the closing handle; PnP keeps the removed device's node as a phantom, uninstalled here

◆ end()

class dx::usb::device< dx::preference >::end ( )
inherited

◆ erase()

registry & dx::registry::erase ( const char * subkey = nullptr)
inlinenoexceptinherited

◆ exception()

void dx::usb::device< dx::preference >::exception ( const dx::exception & exception,
bool filtered = false ) const
inlineoverridenoexceptinherited

notification exception handler

◆ fetch()

bool dx::registry::fetch ( const self_t & self,
value_t & value )
inlinestaticinherited

a value that serializes itself into a tree node recurses through its own named children; only what has no such serialization reaches the flat position below, where a struct would become one opaque REG_BINARY of its layout

◆ frame()

uint64_t dx::usb::platform::device< dx::preference >::frame ( int64_t * timestamp = nullptr) const
inlineinherited

current bus frame number; timestamp: dx::timestamp() of the readout

◆ free()

virtual void dx::resource< invalid_t >::free ( )
inlinevirtualnoexceptinherited

◆ get() [1/13]

value_t dx::registry::get ( ) const
inlineinherited

stays a named method: base and derived conversion function templates are simultaneous overload candidates, so an operator value_t() here would compete with dx::key_value_tree's own.

◆ get() [2/13]

value_t io::registry::get ( ::CFStringRef key) const
inlineinherited

◆ get() [3/13]

::CFTypeRef io::registry::get ( ::CFStringRef key) const
inlineinherited

◆ get() [4/13]

::CFTypeRef io::registry::get ( ::CFStringRef key) const
inlineinherited

◆ get() [5/13]

value_t io::registry::get ( ::CFStringRef key,
::CFTypeRef dflt ) const
inlinenoexceptinherited

◆ get() [6/13]

::CFTypeRef io::registry::get ( ::CFStringRef key,
::CFTypeRef dflt ) const
inlinenoexceptinherited

◆ get() [7/13]

::CFTypeRef io::registry::get ( ::CFStringRef key,
::CFTypeRef dflt ) const
inlinenoexceptinherited

◆ get() [8/13]

value_t io::registry::get ( ::CFStringRef key,
value_t dflt ) const
inlinenoexceptinherited

◆ get() [9/13]

value_t io::registry::get ( ::CFStringRef key,
value_t dflt ) const
inlinenoexceptinherited

◆ get() [10/13]

value_t io::registry::get ( key_t key) const
inlineinherited

◆ get() [11/13]

::CFTypeRef io::registry::get ( key_t key) const
inlineinherited

◆ get() [12/13]

::CFTypeRef io::registry::get ( key_t key) const
inlineinherited

◆ get() [13/13]

bool dx::registry::get ( value_t & value) const
inlineinherited

like get<value_t>() but returns false for ERROR_FILE_NOT_FOUND, from either RegQueryValueExA or value_of() itself; any other failure throws.

◆ grouped() [1/2]

virtual void dx::stream::device< usb::device< dx::preference >, desc_t, pipe< device< desc_t, dx::preference, pipe, group > >, group< device< desc_t, dx::preference, pipe, group > > >::grouped ( group< device< desc_t, dx::preference, pipe, group > > & )
inlineprotectedvirtualinherited

operator[](): a group just came into existence, a host wires its per-group transports here

◆ grouped() [2/2]

void dx::service::device< dx::preference >::grouped ( typename super::group< device< desc_t, dx::preference, pipe, group > > & group)
inlineoverrideprotectedinherited

◆ hw_clock() [1/2]

virtual bool dx::stream::device< usb::device< dx::preference >, desc_t, pipe< device< desc_t, dx::preference, pipe, group > >, group< device< desc_t, dx::preference, pipe, group > > >::hw_clock ( ) const
inlinevirtualnoexceptinherited

◆ hw_clock() [2/2]

virtual void dx::stream::device< usb::device< dx::preference >, desc_t, pipe< device< desc_t, dx::preference, pipe, group > >, group< device< desc_t, dx::preference, pipe, group > > >::hw_clock ( abstract::event * hw_clock,
uint32_t iosize )
inlinevirtualinherited

◆ ictl() [1/2]

hide_if_scalar_or_ptr< rx_t > dx::proxy::device< dx::preference >::ictl ( uint32_t ioctl) const
inlineinherited

member ioctl

this member retreives data from the device by providing an IOCTL code. the template argument defines the type of data to be retreived. this member is intended as a convinient way to retreive only small amounts of data since there is an intermediate stack copy involved in returning the data.

◆ ictl() [2/2]

size_t dx::file::ictl ( unsigned int ioctl,
rx_t & rx ) const
inlineinherited

◆ identity()

std::pair< std::string, std::string > dx::usb::platform::device< dx::preference >::identity ( ::io_service_t id)
inlinestaticinherited

the device class constructor

Exceptions
kIOReturnNoMemory means that the system couldn't allocate the class defined in the drivers plist, or nub which ever its trying connecting to

the registry holds the device's string descriptors before anyone opens it: vendor, product and serial name the device, the path locates it; without a serial the path stands for both

◆ info()

◆ initialize() [1/6]

registry & dx::registry::initialize ( ::HKEY root,
::REGSAM rights = KEY_ALL_ACCESS )
inlineinherited

◆ initialize() [2/6]

void cf::interface< ::IOUSBDeviceInterface650 >::initialize ( ::IOCFPlugInInterface ** cf_interface,
::CFUUIDRef uuid )
inlineprotectedinherited

◆ initialize() [3/6]

registry & dx::registry::initialize ( ::REGSAM rights = KEY_ALL_ACCESS,
::HKEY root = HKEY_CURRENT_USER )
inlineinherited

◆ initialize() [4/6]

void dx::file::initialize ( const char * name,
::DWORD access = GENERIC_READ| GENERIC_WRITE,
::DWORD share = FILE_SHARE_READ| FILE_SHARE_WRITE )
inlineinherited

(re-)initialization the underlaying windows API is CreateFile(). for detailed information see http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx

Exceptions
n/amicrosoft does not give information about what possible errors values are provided by its OS

◆ initialize() [5/6]

registry & dx::registry::initialize ( const std::string & key,
::HKEY root = HKEY_CURRENT_USER,
::REGSAM rights = KEY_ALL_ACCESS )
inlineinherited

◆ initialize() [6/6]

registry & dx::registry::initialize ( const std::string & key,
::REGSAM rights,
::HKEY root,
const char * path = nullptr )
inlineprotectedinherited

◆ ioctl() [1/2]

size_t dx::proxy::device< dx::preference >::ioctl ( uint32_t ioctl,
const tx_t & tx,
rx_t & rx ) const
inlineinherited

◆ ioctl() [2/2]

rx_t dx::file::ioctl ( unsigned int ioctl,
const tx_t & tx ) const
inlineinherited

◆ launch()

void dx::usb::stream::_device< desc_t, dx::preference, pipe< device< desc_t, dx::preference, pipe, group > >, group< device< desc_t, dx::preference, pipe, group > > >::launch ( )
inlineoverridevirtualinherited

launch notification: object mounted and ready to use. Called only through try_launch() - never call this directly from outside the class hierarchy.

Reimplemented from dx::object.

◆ nested()

bool dx::registry::nested ( const self_t & self)
inlinestaticnoexceptinherited

◆ octl() [1/2]

device & dx::proxy::device< dx::preference >::octl ( uint32_t ioctl,
const tx_t & tx )
inlineinherited

◆ octl() [2/2]

void dx::file::octl ( unsigned int ioctl,
const tx_t & tx ) const
inlineinherited

◆ open()

device & dx::usb::platform::device< dx::preference >::open ( )
inlineinherited

opens the USB device for exclusice access

◆ operator const ::io_registry_entry_t &() [1/3]

io::reference< ::io_registry_entry_t >::operator const ::io_registry_entry_t & ( ) const
inlinenoexceptinherited

auto converter into const io_object

◆ operator const ::io_registry_entry_t &() [2/3]

io::reference< ::io_registry_entry_t >::operator const ::io_registry_entry_t & ( ) const
inlinenoexceptinherited

auto converter into const io_object

◆ operator const ::io_registry_entry_t &() [3/3]

io::reference< ::io_registry_entry_t >::operator const ::io_registry_entry_t & ( ) const
inlinenoexceptinherited

auto converter into const io_object

◆ operator const os_event()

dx::resource< invalid_t >::operator const os_event ( ) const
inlinenoexceptinherited

◆ operator const std::string &()

dx::proxy::device< dx::preference >::operator const std::string & ( ) const
inlinenoexceptinherited

identifying device string, mirroring macOS' io::registry conversion

◆ operator os_event()

dx::resource< invalid_t >::operator os_event ( )
inlinenoexceptinherited

◆ operator uint64_t() [1/2]

io::registry::operator uint64_t ( ) const
inlineexplicitinherited

◆ operator uint64_t() [2/2]

io::registry::operator uint64_t ( ) const
inlineexplicitinherited

◆ operator->()

::IOUSBDeviceInterface650 * cf::interface< ::IOUSBDeviceInterface650 >::operator-> ( ) const
inlineinherited

◆ operator::CFMutableDictionaryRef() [1/2]

io::registry::operator::CFMutableDictionaryRef ( ) const
inlineexplicitinherited

◆ operator::CFMutableDictionaryRef() [2/2]

io::registry::operator::CFMutableDictionaryRef ( ) const
inlineexplicitinherited

◆ operator::CFStringRef() [1/2]

io::registry::operator::CFStringRef ( ) const
inlineexplicitinherited

◆ operator::CFStringRef() [2/2]

io::registry::operator::CFStringRef ( ) const
inlineexplicitinherited

◆ operator::HANDLE()

dx::resource< invalid_t >::operator::HANDLE ( ) const
inlinenoexceptinherited

◆ operator::HKEY()

dx::registry::operator::HKEY ( ) const
inlinenoexceptinherited

◆ operator::io_registry_entry_t &() [1/3]

io::reference< ::io_registry_entry_t >::operator ::io_registry_entry_t & ( )
inlinenoexceptinherited

auto converter into io_object

◆ operator::io_registry_entry_t &() [2/3]

io::reference< ::io_registry_entry_t >::operator ::io_registry_entry_t & ( )
inlinenoexceptinherited

auto converter into io_object

◆ operator::io_registry_entry_t &() [3/3]

io::reference< ::io_registry_entry_t >::operator ::io_registry_entry_t & ( )
inlinenoexceptinherited

auto converter into io_object

◆ operator::io_registry_entry_t *() [1/3]

io::reference< ::io_registry_entry_t >::operator ::io_registry_entry_t * ( )
inlinenoexceptinherited

auto converter into io_object pointer

◆ operator::io_registry_entry_t *() [2/3]

io::reference< ::io_registry_entry_t >::operator ::io_registry_entry_t * ( )
inlinenoexceptinherited

auto converter into io_object pointer

◆ operator::io_registry_entry_t *() [3/3]

io::reference< ::io_registry_entry_t >::operator ::io_registry_entry_t * ( )
inlinenoexceptinherited

auto converter into io_object pointer

◆ operator::IOUSBDeviceInterface650 **()

cf::interface< ::IOUSBDeviceInterface650 >::operator ::IOUSBDeviceInterface650 ** ( ) const
inlineinherited

◆ operator==() [1/2]

bool io::reference< ::io_registry_entry_t >::operator== ( ::io_registry_entry_t io_object) const
inlinenoexceptinherited

◆ operator==() [2/2]

bool io::reference< ::io_registry_entry_t >::operator== ( ::io_registry_entry_t io_object) const
inlinenoexceptinherited

◆ operator>>() [1/2]

virtual device & dx::device< ::io_service_t, dx::preference >::operator>> ( std::ostream & ) const
inlinevirtualinherited

◆ operator>>() [2/2]

virtual device & dx::device< ::io_service_t, dx::preference >::operator>> ( std::ostream & ) const
inlinevirtualinherited

◆ operator[]() [1/3]

::CFTypeRef io::registry::operator[] ( ::CFStringRef key) const
inlineinherited

◆ operator[]() [2/3]

group< device< desc_t, dx::preference, pipe, group > > & dx::stream::device< usb::device< dx::preference >, desc_t, pipe< device< desc_t, dx::preference, pipe, group > >, group< device< desc_t, dx::preference, pipe, group > > >::operator[] ( const typename desc_t::stream::desc & stream)
inlineinherited

the stream's group, created on first use

◆ operator[]() [3/3]

::CFTypeRef io::registry::operator[] ( key_t key) const
inlineinherited

◆ parent() [1/2]

registry io::registry::parent ( ) const
inlineinherited

◆ parent() [2/2]

registry io::registry::parent ( ) const
inlineinherited

◆ purge()

void dx::registry::purge ( const self_t & self)
inlinestaticnoexceptinherited

◆ reenumerate()

device & dx::usb::platform::device< dx::preference >::reenumerate ( )
inlineinherited

◆ reset()

device & dx::usb::platform::device< dx::preference >::reset ( )
inlineinherited

◆ retain() [1/2]

reference & io::reference< ::io_registry_entry_t >::retain ( )
inlineinherited

◆ retain() [2/2]

reference & io::reference< ::io_registry_entry_t >::retain ( )
inlineinherited

◆ run()

registry & dx::registry::run ( )
inlineinherited

◆ set() [1/11]

registry & io::registry::set ( ::CFStringRef key,
::CFTypeRef value )
inlineinherited

◆ set() [2/11]

registry & io::registry::set ( ::CFStringRef key,
::CFTypeRef value )
inlineinherited

◆ set() [3/11]

registry & io::registry::set ( ::CFStringRef key,
value_t value )
inlineinherited

◆ set() [4/11]

registry & io::registry::set ( ::CFStringRef key,
value_t value )
inlineinherited

◆ set() [5/11]

device & dx::proxy::device< dx::preference >::set ( ::CFTypeRef properties)
inlineinherited

Setting properties in a registry entry is not generally supported, it is more common to support setting of properties of the connection based property setting of dx::device.

◆ set() [6/11]

registry & io::registry::set ( ::CFTypeRef properties)
inlineinherited

Setting properties in a registry entry is not generally supported, it is more common to support setting of properties of the connection based property setting of dx::device.

◆ set() [7/11]

registry & dx::registry::set ( ::DWORD type,
const void * value,
size_t size )
inlineinherited

a sibling thread/process may delete the containing key between value_of()'s create and the set - retry recreates the whole chain in that case

◆ set() [8/11]

registry & io::registry::set ( key_t key,
::CFTypeRef value )
inlineinherited

◆ set() [9/11]

registry & io::registry::set ( key_t key,
::CFTypeRef value )
inlineinherited

◆ set() [10/11]

registry & io::registry::set ( key_t key,
value_t value )
inlineinherited

◆ set() [11/11]

registry & io::registry::set ( key_t key,
value_t value )
inlineinherited

◆ size() [1/2]

size_t dx::registry::size ( ) const
inlinenoexceptinherited

subkey+value count, 0 if the key doesn't exist (key_of()'s non-throwing overload - an ordinary, expected outcome here, not a genuine error).

◆ size() [2/2]

size_t dx::registry::size ( const self_t & self)
inlinestaticnoexceptinherited

◆ sleep() [1/2]

virtual void dx::device< ::io_service_t, dx::preference >::sleep ( )
inlinevirtualinherited

notify system will sleep stub

◆ sleep() [2/2]

virtual void dx::device< ::io_service_t, dx::preference >::sleep ( )
inlinevirtualinherited

notify system will sleep stub

◆ source()

virtual std::pair< source_t &, bool > dx::stream::device< usb::device< dx::preference >, desc_t, pipe< device< desc_t, dx::preference, pipe, group > >, group< device< desc_t, dx::preference, pipe, group > > >::source ( const struct desc_t::stream & stream)
inlinevirtualinherited

the stream's source selector, created on first use: the preference by stream target, the value an index into the stream's sources

◆ status()

os_result dx::usb::platform::device< dx::preference >::status ( ) const
inlinenoexceptinherited

◆ string() [1/4]

std::string dx::usb::device< dx::preference >::string ( uint8_t idx,
enum language language = language::standard )
inlineinherited

◆ string() [2/4]

std::string dx::usb::device< dx::preference >::string ( uint8_t idx,
enum language language = language::standard )
inlineinherited

◆ string() [3/4]

std::string dx::proxy::device< dx::preference >::string ( uint8_t ) const
inlineinherited

◆ string() [4/4]

std::string dx::usb::platform::device< dx::preference >::string ( unsigned char idx,
enum language language = language::standard ) const
inlineinherited

◆ submit()

device & dx::usb::platform::device< dx::preference >::submit ( const request< data_t > & request)
inlineinherited

standard device request

◆ try_conclude() [1/2]

bool dx::object::try_conclude ( )
inlinenoexceptinherited

atomically conclude()s if currently launched; returns whether this call did it

◆ try_conclude() [2/2]

bool dx::object::try_conclude ( )
inlinenoexceptinherited

atomically conclude()s if currently launched; returns whether this call did it

◆ try_launch() [1/2]

bool dx::object::try_launch ( )
inlineinherited

atomically launch()es if not already launched; returns whether this call did it

◆ try_launch() [2/2]

bool dx::object::try_launch ( )
inlineinherited

atomically launch()es if not already launched; returns whether this call did it

◆ type()

type dx::registry::type ( ) const
inlinenoexceptinherited

◆ wake()

Member Data Documentation

◆ [struct]

◆ bcdADC

◆ bundle_id

◆ [struct]

◆ clock_locked

dx::timestamp() from which the device's clock is locked to the sample rate last set (desc::clock::lock_delay): the transport charges its pipes no earlier, a session live across the change is re-charged then

◆ clocksource

◆ composite

bool dx::usb::platform::device< dx::preference >::composite
inherited

indicate WinUSB matched against single interface of composite device;

◆ connected

bool dx::proxy::device< dx::preference >::connected
protectedinherited

◆ descriptors

std::unique_ptr<uint8_t[]> dx::usb::device< dx::preference >::descriptors
protectedinherited

the selected configuration's complete descriptor, wTotalLength bytes

◆ driver [1/2]

dx::driver<decltype(id), dx::preference>& dx::device< ::io_service_t, dx::preference >::driver
inherited

◆ driver [2/2]

dx::driver<decltype(id), dx::preference>& dx::device< ::io_service_t, dx::preference >::driver
inherited

◆ feedback

the line count an out slot carries per frame - produced by an implicit feedback in pipe, consumed by the asynchronous out pipe

◆ group

std::map<decltype(desc_t::stream::group), group< device< desc_t, dx::preference, pipe, group > >> dx::stream::device< usb::device< dx::preference >, desc_t, pipe< device< desc_t, dx::preference, pipe, group > >, group< device< desc_t, dx::preference, pipe, group > > >::group
inherited

streaming groups by desc::stream::group id: every stream of this device is registered with its group - behind the settings its groups listen to, so they go first

◆ group_server

std::list<promoted> dx::service::device< dx::preference >::group_server
protectedinherited

per-group chains, wired as each group comes into existence (grouped())

◆ handle

::WINUSB_INTERFACE_HANDLE dx::usb::platform::device< dx::preference >::handle
inherited

◆ hosted

the transport's settings belong to another process' device: a hosted device mirrors them through its chains, it keeps no store of them

◆ [struct]

Todo
migrate hw clock generation/distribution into a dedicated clock class

◆ icon

◆ id

◆ interface

the AudioControl interface: class requests to units address it

◆ iosize [1/2]

◆ iosize [2/2]

staging value for registration paths without their own iosize argument (macOS CF property bridge)

◆ [struct]

struct { ... } dx::service::device< dx::preference >::kernel

◆ key

std::string dx::registry::key
inherited

◆ launched [1/2]

std::atomic<bool> dx::object::launched
inherited

◆ launched [2/2]

std::atomic<bool> dx::object::launched
inherited

◆ listen

std::deque<std::function<void()> > dx::registry::listen
inherited

◆ monitor

◆ opened

std::atomic< int > dx::usb::platform::device< dx::preference >::opened
protectedinherited
Todo
add runloop ////////////////////////////////////////////////////////////////////////////

◆ pipe [1/2]

◆ pipe [2/2]

◆ port

io::port dx::proxy::device< dx::preference >::port
protectedinherited

◆ preference [1/2]

dx::preference dx::device< ::io_service_t, dx::preference >::preference
inherited

◆ preference [2/2]

dx::preference dx::device< ::io_service_t, dx::preference >::preference
inherited

◆ process

::HANDLE dx::resource< invalid_t >::process
protectedinherited

◆ puid [1/2]

std::string dx::device< ::io_service_t, dx::preference >::puid
inherited

persistent UID - system unique - could change with location

◆ puid [2/2]

std::string dx::device< ::io_service_t, dx::preference >::puid
inherited

persistent UID - system unique - could change with location

◆ puuid [1/2]

std::string dx::device< ::io_service_t, dx::preference >::puuid
inherited

persistent universal UID - universally unique ID (i.e. serial number)

◆ puuid [2/2]

std::string dx::device< ::io_service_t, dx::preference >::puuid
inherited

persistent universal UID - universally unique ID (i.e. serial number)

◆ samplerate

◆ samplerate_server

decltype(super::samplerate) ::chain dx::usb::stream::_device< desc_t, dx::preference, pipe< device< desc_t, dx::preference, pipe, group > >, group< device< desc_t, dx::preference, pipe, group > > >::samplerate_server
protectedinherited

◆ schedule_erase

◆ [struct]

◆ [struct]

◆ sources

std::map<decltype(desc_t::stream::target.idx()), source_t> dx::stream::device< usb::device< dx::preference >, desc_t, pipe< device< desc_t, dx::preference, pipe, group > >, group< device< desc_t, dx::preference, pipe, group > > >::sources
inherited

source selectors by stream target: a stream with sources gets its own on first use

◆ speed

◆ sync_reference

promoted<structdesc_t::stream*>::template preference<decltype(super::preference), uint32_t> dx::stream::device< usb::device< dx::preference >, desc_t, pipe< device< desc_t, dx::preference, pipe, group > >, group< device< desc_t, dx::preference, pipe, group > > >::sync_reference
inherited

◆ [struct]

◆ version

◆ [struct]

struct { ... } dx::usb::platform::device< dx::preference >::winusb

The documentation for this class was generated from the following file:

(c) copyright 2009 dynamic acoustics e.U. generated on

a closed source license may be obtained by requesting a written permission from dynamic acoustics e.U.
however - governmental use generally and military use especially is strictly prohibited though.