dxd - dynax driver framework 2.7.0d222
cross platform open source driver development framework
Loading...
Searching...
No Matches
dx::wasapi::client::driver< device_t > Class Template Referenceabstract

WASAPI client driver interface class. More...

#include <dx_wasapi_client_driver.h>

Inheritance diagram for dx::wasapi::client::driver< device_t >:
Collaboration diagram for dx::wasapi::client::driver< device_t >:

Classes

struct  property

Public Member Functions

virtual DX_PRAGMA_IGNORE_RETURN_VALUE_END bool boot () try
virtual DX_PRAGMA_IGNORE_RETURN_VALUE_END bool boot () try
DX_PRAGMA_IGNORE_RETURN_VALUE_END void exception (const class exception &exception, bool filtered=false) const noexcept override try
 notification exception handler
DX_PRAGMA_IGNORE_RETURN_VALUE_END void exception (const class exception &exception, bool filtered=false) const noexcept override try
 notification exception handler
virtual void exception (const exception &exception, bool filtered=false) const noexcept=0
 notification exception handler
virtual void exception (const exception &exception, bool filtered=false) const noexcept=0
 notification exception handler
virtual bool shutdown () try
 client driver::shutdown/boot(): override to shutdown/boot host driver
virtual bool shutdown () try
 client driver::shutdown/boot(): override to shutdown/boot host driver
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

Public Attributes

elements
 STL member.
elements
 STL member.
dx::promoted< dx::loghost
 host logging control
dx::promoted< dx::loghost
 host logging control
keys
 STL member.
keys
 STL member.
std::atomic< bool > launched
std::atomic< bool > launched {}
log log {}
log log
preference_t preference
decltype(device_t::preference) preference
const char * product_id
const char * product_id
promoted< os_resultstatus {driver_not_connected}
promoted< os_resultstatus
uint32_t version = DX_VERSION32
uint32_t version

Protected Types

typedef decltype(device_t::id) device_id_t

Protected Member Functions

virtual void add (const device_id_t &)=0
 adds a new device to the device list
virtual void add (const decltype(device_t::id) &)=0
 adds a new device to the device list
void add (const device_id_t &device_id) override
 adds a new device to the device list
virtual void arrived ()
 notify device arrivals completed stub
virtual void arrived (device_t &)
 notify specific device arrival stub
 catch (...)
 catch (...)
 catch (...)
DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN catch (const dx::exception &__dx_exception)
DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN catch (const dx::exception &__dx_exception)
DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN catch (const dx::exception &__dx_exception)
 catch (const std::exception &__std_exception)
 catch (const std::exception &__std_exception)
 catch (const std::exception &__std_exception)
virtual DX_PRAGMA_IGNORE_RETURN_VALUE_END void clear () noexcept try
 replaces std::map::clear to call virtual notification methods
void conclude () noexcept override
 conclude notification: object will be removed. If you overwrite conclude() you also need to overwrite destructor and check if its needed to be called from there. Called only through try_conclude() - never call this directly from outside the class hierarchy.
 driver (const match &matching_ids, const char *product_id, const decltype(super::preference)&preference, dx::log log={})
 the WASAPI client driver interface class constructor
 driver (const match &matching_ids, const char *product_id, dx::log log={})
 dx_catchall_handler (this,) virtual driver &operator<<(std
 restores device settings
void info (std::ostream &os) noexcept override
 log object class information
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.
bool matches (::IMMDevice *endpoint) const
virtual operator bool () const noexcept
virtual driveroperator<< (const char *file)
virtual driveroperator>> (const char *file) const
virtual driveroperator>> (std::ostream &ostream) const
 saves device tree
virtual void remove (const device_id_t &)=0
 finds and removes a device from the device list
virtual void remove (const decltype(device_t::id) &)=0
 finds and removes a device from the device list
void remove (const device_id_t &device_id) override try
 finds and removes a device from the device list
virtual void removed () noexcept
 notify device removals completed stub
virtual void removed (device_t &) noexcept
 notify specific device removal stub
virtual void scan () try
void sleep () override
 < notify system will sleep
void wake () override
 ~driver () override

Protected Attributes

promoted< uint32_tconnection_id
dx_catchall_rethrow() public typedef decltype(matching_idsmatch
std::set< std::string > matching_ids
 case-insensitive substrings of the KS filter device interface ID; empty matches every endpoint

Detailed Description

template<class device_t>
class dx::wasapi::client::driver< device_t >

WASAPI client driver interface class.

One device per active endpoint (render and capture endpoints of one audio adapter are separate devices), identified by the MMDevice endpoint ID and matched by substrings of the endpoint's KS filter device interface ID. Arrival and removal come from the endpoint notification callback.

Exceptions
incase of an error returned by the underlaying API the driver class throws a dx::exception.

Member Typedef Documentation

◆ device_id_t

typedef decltype(device_t::id) dx::map::driver< device_t >::device_id_t
protectedinherited

Constructor & Destructor Documentation

◆ driver() [1/2]

template<class device_t>
dx::wasapi::client::driver< device_t >::driver ( const match & matching_ids,
const char * product_id,
const decltype(super::preference)& preference,
dx::log log = {} )
inlineprotected

the WASAPI client driver interface class constructor

Parameters
matching_idsthe matching KS filter device interface ID substrings
product_idWASAPI client driver ID
preferencepreference
loglog settings

◆ driver() [2/2]

template<class device_t>
dx::wasapi::client::driver< device_t >::driver ( const match & matching_ids,
const char * product_id,
dx::log log = {} )
inlineprotected

◆ ~driver()

template<class device_t>
dx::wasapi::client::driver< device_t >::~driver ( )
inlineoverrideprotected
Here is the call graph for this function:

Member Function Documentation

◆ add() [1/3]

template<typename device_id_t, typename preference_t>
virtual void dx::driver< device_id_t, preference_t >::add ( const device_id_t & )
protectedpure virtualinherited

adds a new device to the device list

Exceptions
dx::exception

◆ add() [2/3]

virtual void dx::driver< decltype(device_t::id), decltype(device_t::preference) >::add ( const decltype(device_t::id) & )
protectedpure virtualinherited

adds a new device to the device list

Exceptions
dx::exception

◆ add() [3/3]

void dx::map::driver< device_t >::add ( const device_id_t & device_id)
inlineoverrideprotectedinherited

adds a new device to the device list

Exceptions
dx::exception
Here is the call graph for this function:
Here is the caller graph for this function:

◆ arrived() [1/2]

( )
protectedvirtualinherited

notify device arrivals completed stub

Reimplemented from dx::driver< device_id_t, preference_t >.

Here is the caller graph for this function:

◆ arrived() [2/2]

virtual void dx::map::driver< device_t >::arrived ( device_t & )
inlineprotectedvirtualinherited

notify specific device arrival stub

Reimplemented in dx::stream::driver< dx::map::driver< device_t > >, and dx::stream::driver< map::driver< device_t > >.

Here is the caller graph for this function:

◆ boot() [1/2]

template<typename device_id_t, typename preference_t>
virtual DX_PRAGMA_IGNORE_RETURN_VALUE_END bool dx::driver< device_id_t, preference_t >::boot ( )
inlinevirtualinherited
Here is the caller graph for this function:

◆ boot() [2/2]

virtual DX_PRAGMA_IGNORE_RETURN_VALUE_END bool dx::driver< decltype(device_t::id), decltype(device_t::preference) >::boot ( )
inlinevirtualinherited

◆ catch() [1/9]

dx::map::driver< device_t >::catch ( ...)
inlineprotectedinherited

◆ catch() [2/9]

dx::map::driver< device_t >::catch ( ...)
inlineprotectedinherited

◆ catch() [3/9]

dx::map::driver< device_t >::catch ( ...)
inlineprotectedinherited

◆ catch() [4/9]

DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::map::driver< device_t >::catch ( const dx::exception & __dx_exception)
inlineprotectedinherited

◆ catch() [5/9]

DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::map::driver< device_t >::catch ( const dx::exception & __dx_exception)
inlineprotectedinherited

◆ catch() [6/9]

DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::map::driver< device_t >::catch ( const dx::exception & __dx_exception)
inlineprotectedinherited

◆ catch() [7/9]

dx::map::driver< device_t >::catch ( const std::exception & __std_exception)
inlineprotectedinherited

◆ catch() [8/9]

dx::map::driver< device_t >::catch ( const std::exception & __std_exception)
inlineprotectedinherited

◆ catch() [9/9]

dx::map::driver< device_t >::catch ( const std::exception & __std_exception)
inlineprotectedinherited

◆ clear()

virtual DX_PRAGMA_IGNORE_RETURN_VALUE_END void dx::map::driver< device_t >::clear ( )
inlineprotectedvirtualnoexceptinherited

replaces std::map::clear to call virtual notification methods

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

◆ conclude()

template<class device_t>
void dx::wasapi::client::driver< device_t >::conclude ( )
inlineoverrideprotectedvirtualnoexcept

conclude notification: object will be removed. If you overwrite conclude() you also need to overwrite destructor and check if its needed to be called from there. Called only through try_conclude() - never call this directly from outside the class hierarchy.

Reimplemented from dx::map::driver< device_t >.

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

◆ dx_catchall_handler()

dx::map::driver< device_t >::dx_catchall_handler ( this ) &
inlineprotectedinherited

restores device settings

◆ exception() [1/4]

template<typename device_id_t, typename preference_t>
DX_PRAGMA_IGNORE_RETURN_VALUE_END void dx::driver< device_id_t, preference_t >::exception ( const class exception & exception,
bool filtered = false ) const
inlineoverridenoexceptinherited

notification exception handler

Here is the caller graph for this function:

◆ exception() [2/4]

DX_PRAGMA_IGNORE_RETURN_VALUE_END void dx::driver< decltype(device_t::id), decltype(device_t::preference) >::exception ( const class exception & exception,
bool filtered = false ) const
inlineoverridenoexceptinherited

notification exception handler

◆ exception() [3/4]

virtual void dx::object::exception ( const exception & exception,
bool filtered = false ) const
pure virtualnoexceptinherited

notification exception handler

◆ exception() [4/4]

virtual void dx::object::exception ( const exception & exception,
bool filtered = false ) const
pure virtualnoexceptinherited

◆ info()

template<class device_t>
void dx::wasapi::client::driver< device_t >::info ( std::ostream & os)
inlineoverrideprotectedvirtualnoexcept

log object class information

Reimplemented from dx::map::driver< device_t >.

Here is the call graph for this function:

◆ launch()

template<class device_t>
void dx::wasapi::client::driver< device_t >::launch ( )
inlineoverrideprotectedvirtual

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::map::driver< device_t >.

Here is the call graph for this function:

◆ matches()

template<class device_t>
bool dx::wasapi::client::driver< device_t >::matches ( ::IMMDevice * endpoint) const
inlineprotected
Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator bool()

template<class device_t>
virtual dx::wasapi::client::driver< device_t >::operator bool ( ) const
inlineprotectedvirtualnoexcept

◆ operator<<()

virtual driver & dx::map::driver< device_t >::operator<< ( const char * file)
inlineprotectedvirtualinherited
Here is the call graph for this function:

◆ operator>>() [1/2]

virtual driver & dx::map::driver< device_t >::operator>> ( const char * file) const
inlineprotectedvirtualinherited

◆ operator>>() [2/2]

virtual driver & dx::map::driver< device_t >::operator>> ( std::ostream & ostream) const
inlineprotectedvirtualinherited

saves device tree

Reimplemented in dx::coreaudio::driver< device_t >.

◆ remove() [1/3]

template<typename device_id_t, typename preference_t>
virtual void dx::driver< device_id_t, preference_t >::remove ( const device_id_t & )
protectedpure virtualinherited

finds and removes a device from the device list

◆ remove() [2/3]

virtual void dx::driver< decltype(device_t::id), decltype(device_t::preference) >::remove ( const decltype(device_t::id) & )
protectedpure virtualinherited

finds and removes a device from the device list

◆ remove() [3/3]

void dx::map::driver< device_t >::remove ( const device_id_t & device_id)
inlineoverrideprotectedinherited

finds and removes a device from the device list

Exceptions
dx::exception
Here is the call graph for this function:
Here is the caller graph for this function:

◆ removed() [1/2]

( )
protectedvirtualinherited

notify device removals completed stub

Reimplemented from dx::driver< device_id_t, preference_t >.

Here is the caller graph for this function:

◆ removed() [2/2]

virtual void dx::map::driver< device_t >::removed ( device_t & )
inlineprotectedvirtualnoexceptinherited

notify specific device removal stub

◆ scan()

template<class device_t>
virtual void dx::wasapi::client::driver< device_t >::scan ( )
inlineprotectedvirtual
Here is the call graph for this function:
Here is the caller graph for this function:

◆ shutdown() [1/2]

template<typename device_id_t, typename preference_t>
virtual bool dx::driver< device_id_t, preference_t >::shutdown ( )
inlinevirtualinherited

client driver::shutdown/boot(): override to shutdown/boot host driver

Reimplemented in dx::coreaudio::driver< device_t >.

Here is the caller graph for this function:

◆ shutdown() [2/2]

virtual bool dx::driver< decltype(device_t::id), decltype(device_t::preference) >::shutdown ( )
inlinevirtualinherited

client driver::shutdown/boot(): override to shutdown/boot host driver

◆ sleep()

void dx::map::driver< device_t >::sleep ( )
inlineoverrideprotectedinherited

< notify system will sleep

notify system wake completed stub

Here is the call graph for this function:

◆ 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

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

◆ 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

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

◆ wake()

void dx::map::driver< device_t >::wake ( )
inlineoverrideprotectedinherited
Here is the call graph for this function:

Member Data Documentation

◆ connection_id

template<class device_t>
promoted<uint32_t> dx::wasapi::client::driver< device_t >::connection_id
protected

◆ elements [1/2]

T std::map< K, T >::elements
inherited

STL member.

◆ elements [2/2]

T std::map< K, T >::elements
inherited

STL member.

◆ host [1/2]

template<typename device_id_t, typename preference_t>
dx::promoted<dx::log> dx::driver< device_id_t, preference_t >::host
inherited

host logging control

◆ host [2/2]

dx::promoted<dx::log> dx::driver< decltype(device_t::id), decltype(device_t::preference) >::host
inherited

host logging control

◆ keys [1/2]

K std::map< K, T >::keys
inherited

STL member.

◆ keys [2/2]

K std::map< K, T >::keys
inherited

STL member.

◆ launched [1/2]

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

◆ launched [2/2]

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

◆ log [1/2]

template<typename device_id_t, typename preference_t>
log dx::driver< device_id_t, preference_t >::log {}
inherited

◆ log [2/2]

log dx::driver< decltype(device_t::id), decltype(device_t::preference) >::log
inherited

◆ match

template<class device_t>
dx_catchall_rethrow () public typedef decltype(matching_ids) dx::wasapi::client::driver< device_t >::match
protected

◆ matching_ids

template<class device_t>
std::set<std::string> dx::wasapi::client::driver< device_t >::matching_ids
protected

case-insensitive substrings of the KS filter device interface ID; empty matches every endpoint

◆ preference [1/2]

template<typename device_id_t, typename preference_t>
preference_t dx::driver< device_id_t, preference_t >::preference
inherited

◆ preference [2/2]

decltype(device_t::preference) dx::driver< decltype(device_t::id), decltype(device_t::preference) >::preference
inherited

◆ product_id [1/2]

template<typename device_id_t, typename preference_t>
const char* dx::driver< device_id_t, preference_t >::product_id
inherited

◆ product_id [2/2]

const char* dx::driver< decltype(device_t::id), decltype(device_t::preference) >::product_id
inherited

◆ status [1/2]

template<typename device_id_t, typename preference_t>
promoted<os_result> dx::driver< device_id_t, preference_t >::status {driver_not_connected}
inherited

◆ status [2/2]

promoted<os_result> dx::driver< decltype(device_t::id), decltype(device_t::preference) >::status
inherited

◆ version [1/2]

template<typename device_id_t, typename preference_t>
uint32_t dx::driver< device_id_t, preference_t >::version = DX_VERSION32
inherited

◆ version [2/2]

uint32_t dx::driver< decltype(device_t::id), decltype(device_t::preference) >::version
inherited

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.