dxd - dynax driver framework 3.0.1d223
cross platform open source driver development framework
Loading...
Searching...
No Matches
dx::usb::platform::device< preference_t > Class Template Reference

the platform half of a USB device: the IOKit registry entry, the IOUSBLib device interface and the open count over it - what dx::usb::device puts its descriptors and interfaces on More...

#include <dx_usb_platform_device.h>

Inheritance diagram for dx::usb::platform::device< preference_t >:
Collaboration diagram for dx::usb::platform::device< preference_t >:

Classes

struct  void_struct

Public Types

typedef shared::event event_t
typedef std::set< std::string > keys
enum  type
 the value types this store keeps - a scalar rides as REG_DWORD/REG_QWORD rather than as a byte copy, so a value written here reads like any other in the registry editor More...

Public Member Functions

 catch (...)
 catch (...)
device & clear ()
device & close () noexcept
device & close (bool force=false) noexcept
void conclude () noexcept override
 conclude notification: device will be removed from tree
uint8_t configuration () const
unsigned char configuration () const noexcept
virtual uint8_t configuration (uint8_t configuration)
virtual unsigned char configuration (unsigned char configuration)
uint8_t configurations () const
unsigned char configurations () const noexcept
auto count () const noexcept
auto count () const noexcept
void ctl (uint32_t ioctl) const
 device (decltype(super::driver)&driver, ::io_service_t id, const std::pair< std::string, std::string > &identity={})
 device (decltype(super::driver)&driver, decltype(super::id)&id, const std::pair< std::string, std::string > &identity={})
 the device class constructor
registry & erase (const char *subkey=nullptr) noexcept
void exception (const dx::exception &exception, bool filtered=false) const noexcept override
 notification exception handler
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
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
::CFTypeRef get (::CFStringRef key) const
::CFTypeRef get (::CFStringRef key, ::CFTypeRef dflt) const noexcept
value_t get (::CFStringRef key, value_t dflt) const noexcept
::CFTypeRef get (key_t key) const
bool get (value_t &value) const
template<typename value_t, typename = cf::enable_if_convertible<value_t>>
value_t get (::CFStringRef key) const
::CFTypeRef get (::CFStringRef key) const
template<typename value_t, typename = cf::enable_if_convertible<value_t>>
value_t get (::CFStringRef key, ::CFTypeRef dflt) const noexcept
::CFTypeRef get (::CFStringRef key, ::CFTypeRef dflt) const noexcept
template<typename value_t, typename = cf::enable_if_convertible<value_t>>
value_t get (::CFStringRef key, value_t dflt) const noexcept
template<typename key_t, typename value_t, typename = cf::enable_if_convertible<key_t>, typename = cf::enable_if_convertible<value_t>>
value_t get (key_t key) const
template<typename key_t, typename = cf::enable_if_convertible<key_t>>
::CFTypeRef get (key_t key) const
template<typename rx_t>
size_t ictl (unsigned int ioctl, rx_t &rx) const
hide_if_scalar_or_ptr< rx_t > ictl (uint32_t ioctl) const
 member ioctl
void info (std::ostream &os) noexcept override
 log object class information
registry & initialize (::HKEY root, ::REGSAM rights=KEY_ALL_ACCESS)
registry & initialize (::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
registry & initialize (const std::string &key, ::HKEY root=HKEY_CURRENT_USER, ::REGSAM rights=KEY_ALL_ACCESS)
template<typename rx_t, typename tx_t>
rx_t ioctl (unsigned int ioctl, const tx_t &tx) const
size_t ioctl (uint32_t ioctl, const tx_t &tx, rx_t &rx) 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.
template<typename tx_t>
void octl (unsigned int ioctl, const tx_t &tx) const
device & octl (uint32_t ioctl, const tx_t &tx)
device & open ()
 opens the USB device for exclusice access
device & open ()
 for macOS compatibility only
 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
 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
bool operator== (::io_registry_entry_t io_object) const noexcept
bool operator== (::io_registry_entry_t io_object) const noexcept
virtual device & operator>> (std::ostream &) const
 the device's own diagnostics, beyond dx::object::info
virtual device & operator>> (std::ostream &) const
 the device's own diagnostics, beyond dx::object::info
::CFTypeRef operator[] (::CFStringRef key) const
::CFTypeRef operator[] (key_t key) const
::CFTypeRef operator[] (::CFStringRef key) const
template<typename key_t, typename = cf::enable_if_convertible<key_t>>
::CFTypeRef operator[] (key_t key) const
registry parent () const
registry parent () const
device & reenumerate ()
device & reenumerate ()
device & reset ()
device & reset ()
reference & retain ()
reference & retain ()
registry & run ()
device & set (::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.
registry & set (::DWORD typetype, const void *value, size_t size)
registry & set (::CFStringRef key, ::CFTypeRef value)
registry & set (::CFStringRef key, value_t value)
registry & set (key_t key, ::CFTypeRef value)
registry & set (key_t key, value_t value)
registry & set (::CFStringRef key, ::CFTypeRef value)
template<typename value_t, typename = cf::enable_if_convertible<value_t>>
registry & set (::CFStringRef key, value_t value)
registry & set (::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.
template<typename key_t, typename = cf::enable_if_convertible<key_t>>
registry & set (key_t key, ::CFTypeRef value)
template<typename key_t, typename value_t, typename = cf::enable_if_convertible<key_t>, typename = cf::enable_if_convertible<value_t>>
registry & set (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
os_result status () const noexcept
std::string string (uint8_t) const
template<size_t size = 0x100>
std::string string (unsigned char idx, enum languagelanguage languagelanguage=language::standard) const
device & submit (const control &control)
template<typename data_t>
data_t submit (const control &control)
 device control request
template<typename data_t = void_struct>
data_t submit (const control &control, bool autoclear=true) const
template<typename data_t>
device & submit (const requestrequest< data_t > &requestrequest)
 standard device request
template<typename data_t>
device & submit (const requestrequest< data_t > &requestrequest, bool autoclear=true) const
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. A launch() that throws is concluded before the exception leaves: the object never claims a launch it did not finish
bool try_launch ()
 atomically launch()es if not already launched; returns whether this call did it. A launch() that throws is concluded before the exception leaves: the object never claims a launch it did not finish
type type () const noexcept
virtual void wake ()
 notify system wake completed stub
virtual void wake ()
 notify system wake completed stub
 ~device () noexcept override=default
 ~device () 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

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
const ::io_service_t id
const ::io_service_t id
std::string key
std::atomic< bool > launched
std::atomic< bool > launched
std::deque< std::function< void()> > listen
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)
bool schedule_erase
enum speed speed

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
void grouped (typename super::group_t &group) override
void initialize (::IOCFPlugInInterface **cf_interface, ::CFUUIDRef uuid)
registry & initialize (const std::string &key, ::REGSAM rights, ::HKEY root, const char *path=nullptr)
virtual void launch ()
 launch notification: object mounted and ready to use. Called only through try_launch() - never call this directly from outside the class hierarchy.
::IOUSBDeviceInterface650 * operator-> () const
 operator::IOUSBDeviceInterface650 ** () const

Protected Attributes

class dx::service::device::promoted clocksource
bool connected
std::list< promoted > group_server
 per-group chains, wired as each group comes into existence (grouped())
::HANDLE handle
struct dx::service::device:: { ... }  kernel
std::atomic< int > opened {}
class dx::service::device::promoted pipe
server pipe
io::port port
::HANDLE process
class dx::service::device::promoted samplerate
struct dx::usb::platform::device:: { ... }  winusb

Detailed Description

template<typename preference_t = dx::preference>
class dx::usb::platform::device< preference_t >

the platform half of a USB device: the IOKit registry entry, the IOUSBLib device interface and the open count over it - what dx::usb::device puts its descriptors and interfaces on

the platform half of a USB device: the WinUSB handle over the device interface the proxy base opened. composite marks a package that matched one interface of a composite device rather than the whole of it

Member Typedef Documentation

◆ event_t

typedef shared::event dx::service::device< dx::preference >::event_t
inherited

◆ 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().

Member Enumeration Documentation

◆ type

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

the value types this store keeps - a scalar rides as REG_DWORD/REG_QWORD rather than as a byte copy, so a value written here reads like any other in the registry editor

Constructor & Destructor Documentation

◆ device() [1/2]

template<typename preference_t = dx::preference>
dx::usb::platform::device< preference_t >::device ( decltype(super::driver)& driver,
::io_service_t id,
const std::pair< std::string, std::string > & identity = {} )
inline

statically gets the device speed

Parameters
idthe IOService object to open the device connection for. This will be held (but not retained) during device class lifetime

◆ ~device() [1/2]

template<typename preference_t = dx::preference>
dx::usb::platform::device< preference_t >::~device ( )
inlineoverride

◆ device() [2/2]

template<typename preference_t = dx::preference>
dx::usb::platform::device< preference_t >::device ( decltype(super::driver)& driver,
decltype(super::id)& id,
const std::pair< std::string, std::string > & identity = {} )
inline

the device class constructor

statically gets the device speed

◆ ~device() [2/2]

template<typename preference_t = dx::preference>
dx::usb::platform::device< preference_t >::~device ( )
overridedefaultnoexcept

Member Function Documentation

◆ assign()

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

◆ at()

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.

◆ 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()

template<typename preference_t = dx::preference>
device & dx::usb::platform::device< preference_t >::clear ( )
inline

◆ close() [1/2]

template<typename preference_t = dx::preference>
device & dx::usb::platform::device< preference_t >::close ( )
inlinenoexcept

◆ close() [2/2]

template<typename preference_t = dx::preference>
device & dx::usb::platform::device< preference_t >::close ( bool force = false)
inlinenoexcept

◆ conclude()

template<typename preference_t = dx::preference>
void dx::usb::platform::device< preference_t >::conclude ( )
inlineoverridevirtualnoexcept

conclude notification: device will be removed from tree

Reimplemented from dx::object.

◆ configuration() [1/4]

template<typename preference_t = dx::preference>
uint8_t dx::usb::platform::device< preference_t >::configuration ( ) const
inline

◆ configuration() [2/4]

template<typename preference_t = dx::preference>
unsigned char dx::usb::platform::device< preference_t >::configuration ( ) const
inlinenoexcept

◆ configuration() [3/4]

template<typename preference_t = dx::preference>
virtual uint8_t dx::usb::platform::device< preference_t >::configuration ( uint8_t configuration)
inlinevirtual

◆ configuration() [4/4]

template<typename preference_t = dx::preference>
virtual unsigned char dx::usb::platform::device< preference_t >::configuration ( unsigned char configuration)
inlinevirtual

◆ configurations() [1/2]

template<typename preference_t = dx::preference>
uint8_t dx::usb::platform::device< preference_t >::configurations ( ) const
inline

◆ configurations() [2/2]

template<typename preference_t = dx::preference>
unsigned char dx::usb::platform::device< preference_t >::configurations ( ) const
inlinenoexcept

◆ 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
Here is the caller graph for this function:

◆ 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

◆ erase()

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

◆ exception() [1/2]

template<typename preference_t = dx::preference>
void dx::usb::platform::device< preference_t >::exception ( const dx::exception & exception,
bool filtered = false ) const
inlineoverridevirtualnoexcept

notification exception handler

Reimplemented from dx::device<::io_service_t, dx::preference >.

◆ exception() [2/2]

template<typename preference_t = dx::preference>
void dx::usb::platform::device< preference_t >::exception ( const dx::exception & exception,
bool filtered = false ) const
inlineoverridevirtualnoexcept

notification exception handler

Reimplemented from dx::device<::io_service_t, dx::preference >.

◆ 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() [1/2]

template<typename preference_t = dx::preference>
uint64_t dx::usb::platform::device< preference_t >::frame ( int64_t * timestamp = nullptr) const
inline

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

◆ frame() [2/2]

template<typename preference_t = dx::preference>
uint64_t dx::usb::platform::device< preference_t >::frame ( int64_t * timestamp = nullptr) const
inline

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]

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

◆ get() [3/13]

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

◆ get() [4/13]

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

◆ get() [5/13]

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

◆ get() [6/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.

◆ get() [7/13]

template<typename value_t, typename = cf::enable_if_convertible<value_t>>
value_t io::registry::get ( ::CFStringRef key) const
inlineinherited
Here is the call graph for this function:

◆ get() [8/13]

::CFTypeRef io::registry::get ( ::CFStringRef key) const
inlineinherited
Here is the call graph for this function:
Here is the caller graph for this function:

◆ get() [9/13]

template<typename value_t, typename = cf::enable_if_convertible<value_t>>
value_t io::registry::get ( ::CFStringRef key,
::CFTypeRef dflt ) const
inlinenoexceptinherited
Here is the call graph for this function:

◆ get() [10/13]

::CFTypeRef io::registry::get ( ::CFStringRef key,
::CFTypeRef dflt ) const
inlinenoexceptinherited
Here is the call graph for this function:

◆ get() [11/13]

template<typename value_t, typename = cf::enable_if_convertible<value_t>>
value_t io::registry::get ( ::CFStringRef key,
value_t dflt ) const
inlinenoexceptinherited
Here is the call graph for this function:

◆ get() [12/13]

template<typename key_t, typename value_t, typename = cf::enable_if_convertible<key_t>, typename = cf::enable_if_convertible<value_t>>
value_t io::registry::get ( key_t key) const
inlineinherited
Here is the call graph for this function:

◆ get() [13/13]

template<typename key_t, typename = cf::enable_if_convertible<key_t>>
::CFTypeRef io::registry::get ( key_t key) const
inlineinherited
Here is the call graph for this function:
Here is the caller graph for this function:

◆ grouped()

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

◆ ictl() [1/2]

template<typename rx_t>
size_t dx::file::ictl ( unsigned int ioctl,
rx_t & rx ) const
inlineinherited
Here is the call graph for this function:

◆ ictl() [2/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.

◆ identity()

template<typename preference_t = dx::preference>
std::pair< std::string, std::string > dx::usb::platform::device< preference_t >::identity ( ::io_service_t id)
inlinestatic

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]

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

◆ initialize() [2/6]

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

◆ 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]

template<typename rx_t, typename tx_t>
rx_t dx::file::ioctl ( unsigned int ioctl,
const tx_t & tx ) const
inlineinherited
Here is the call graph for this function:

◆ ioctl() [2/2]

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

◆ launch() [1/2]

virtual void dx::object::launch ( )
inlineprotectedvirtualinherited

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

◆ launch() [2/2]

void dx::service::device< dx::preference >::launch ( )
inlineoverrideinherited

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

◆ nested()

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

◆ octl() [1/2]

template<typename tx_t>
void dx::file::octl ( unsigned int ioctl,
const tx_t & tx ) const
inlineinherited
Here is the call graph for this function:

◆ octl() [2/2]

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

◆ open() [1/2]

template<typename preference_t = dx::preference>
device & dx::usb::platform::device< preference_t >::open ( )
inline

opens the USB device for exclusice access

◆ open() [2/2]

template<typename preference_t = dx::preference>
device & dx::usb::platform::device< preference_t >::open ( )
inline

for macOS compatibility only

◆ 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
Here is the call graph for this function:
Here is the caller graph for this function:

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

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

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

io::registry::operator::CFStringRef ( ) const
inlineexplicitinherited
Here is the caller graph for this function:

◆ 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

the device's own diagnostics, beyond dx::object::info

◆ operator>>() [2/2]

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

the device's own diagnostics, beyond dx::object::info

◆ operator[]() [1/4]

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

◆ operator[]() [2/4]

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

◆ operator[]() [3/4]

::CFTypeRef io::registry::operator[] ( ::CFStringRef key) const
inlineinherited
Here is the call graph for this function:

◆ operator[]() [4/4]

template<typename key_t, typename = cf::enable_if_convertible<key_t>>
::CFTypeRef io::registry::operator[] ( key_t key) const
inlineinherited
Here is the call graph for this function:

◆ parent() [1/2]

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

◆ parent() [2/2]

registry io::registry::parent ( ) const
inlineinherited
Here is the call graph for this function:
Here is the caller graph for this function:

◆ purge()

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

◆ reenumerate() [1/2]

template<typename preference_t = dx::preference>
device & dx::usb::platform::device< preference_t >::reenumerate ( )
inline

◆ reenumerate() [2/2]

template<typename preference_t = dx::preference>
device & dx::usb::platform::device< preference_t >::reenumerate ( )
inline

◆ reset() [1/2]

template<typename preference_t = dx::preference>
device & dx::usb::platform::device< preference_t >::reset ( )
inline

◆ reset() [2/2]

template<typename preference_t = dx::preference>
device & dx::usb::platform::device< preference_t >::reset ( )
inline

◆ retain() [1/2]

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

◆ retain() [2/2]

reference & io::reference< ::io_registry_entry_t >::retain ( )
inlineinherited
Here is the caller graph for this function:

◆ run()

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

◆ set() [1/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() [2/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() [3/11]

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

◆ set() [4/11]

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

◆ set() [5/11]

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

◆ set() [6/11]

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

◆ set() [7/11]

registry & io::registry::set ( ::CFStringRef key,
::CFTypeRef value )
inlineinherited
Here is the call graph for this function:

◆ set() [8/11]

template<typename value_t, typename = cf::enable_if_convertible<value_t>>
registry & io::registry::set ( ::CFStringRef key,
value_t value )
inlineinherited
Here is the call graph for this function:

◆ set() [9/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.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ set() [10/11]

template<typename key_t, typename = cf::enable_if_convertible<key_t>>
registry & io::registry::set ( key_t key,
::CFTypeRef value )
inlineinherited
Here is the call graph for this function:

◆ set() [11/11]

template<typename key_t, typename value_t, typename = cf::enable_if_convertible<key_t>, typename = cf::enable_if_convertible<value_t>>
registry & io::registry::set ( key_t key,
value_t value )
inlineinherited
Here is the call graph for this function:

◆ 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

◆ status()

template<typename preference_t = dx::preference>
os_result dx::usb::platform::device< preference_t >::status ( ) const
inlinenoexcept

◆ string() [1/2]

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

◆ string() [2/2]

template<typename preference_t = dx::preference>
template<size_t size = 0x100>
std::string dx::usb::platform::device< preference_t >::string ( unsigned char idx,
enum language language = language::standard ) const
inline

◆ submit() [1/5]

template<typename preference_t = dx::preference>
device & dx::usb::platform::device< preference_t >::submit ( const control & control)
inline

◆ submit() [2/5]

template<typename preference_t = dx::preference>
template<typename data_t>
data_t dx::usb::platform::device< preference_t >::submit ( const control & control)
inline

device control request

◆ submit() [3/5]

template<typename preference_t = dx::preference>
template<typename data_t = void_struct>
data_t dx::usb::platform::device< preference_t >::submit ( const control & control,
bool autoclear = true ) const
inline

◆ submit() [4/5]

template<typename preference_t = dx::preference>
template<typename data_t>
device & dx::usb::platform::device< preference_t >::submit ( const request< data_t > & request)
inline

standard device request

◆ submit() [5/5]

template<typename preference_t = dx::preference>
template<typename data_t>
device & dx::usb::platform::device< preference_t >::submit ( const request< data_t > & request,
bool autoclear = true ) const
inline

◆ 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. A launch() that throws is concluded before the exception leaves: the object never claims a launch it did not finish

◆ try_launch() [2/2]

bool dx::object::try_launch ( )
inlineinherited

atomically launch()es if not already launched; returns whether this call did it. A launch() that throws is concluded before the exception leaves: the object never claims a launch it did not finish

◆ type()

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

◆ wake() [1/2]

◆ wake() [2/2]

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

notify system wake completed stub

Member Data Documentation

◆ clocksource

◆ composite

template<typename preference_t = dx::preference>
bool dx::usb::platform::device< preference_t >::composite {}

indicate WinUSB matched against single interface of composite device;

◆ connected

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

◆ 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

◆ 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

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

◆ id [1/2]

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

◆ id [2/2]

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

◆ kernel

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

◆ opened

template<typename preference_t = dx::preference>
std::atomic< int > dx::usb::platform::device< preference_t >::opened {}
protected
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]

◆ 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

◆ schedule_erase

◆ speed

template<typename preference_t = dx::preference>
enum speed dx::usb::platform::device< preference_t >::speed

◆ winusb

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

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

(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.