dxd - dynax driver framework 2.1.0d73
cross platform open source driver development framework
Loading...
Searching...
No Matches
dx::asio< device_t, pin_t > Class Template Reference

#include <dx_asio.h>

+ Inheritance diagram for dx::asio< device_t, pin_t >:
+ Collaboration diagram for dx::asio< device_t, pin_t >:

Classes

class  pause
 

Public Member Functions

 asio (super::match match, const char *id, ::IUnknown *unknown, ::HRESULT *result)
 
 dx_catchall_rethrow (status=exception.error;) struct property
 

Protected Types

typedef device_t::desc desc
 
typedef driver< device_t > driver
 

Protected Member Functions

dx_catchall_handler(this,) using driver_t void arrived () override try
 notify device arrivals completed stub
 
virtual void arrived (device_t &)
 notify specific device arrival stub
 
::ASIOError canSampleRate (::ASIOSampleRate samplerate) noexcept override
 
 catch (...)
 
 catch (...)
 
 catch (...)
 
 catch (...)
 
 catch (...)
 
 catch (...)
 
 catch (...)
 
 catch (const dx::exception &__dx_exception)
 
 catch (const dx::exception &__dx_exception)
 
 catch (const dx::exception &__dx_exception)
 
 catch (const dx::exception &__dx_exception)
 
 catch (const dx::exception &__dx_exception)
 
 catch (const dx::exception &__dx_exception)
 
 catch (const dx::exception &__dx_exception)
 
 catch (const std::exception &__std_exception)
 
 catch (const std::exception &__std_exception)
 
 catch (const std::exception &__std_exception)
 
 catch (const std::exception &__std_exception)
 
 catch (const std::exception &__std_exception)
 
 catch (const std::exception &__std_exception)
 
 catch (const std::exception &__std_exception)
 
void clear () noexcept
 replaces std::deque::clear to call virtual notification methods
 
virtual void conclude () noexcept
 
void conclude () noexcept override
 
::ASIOError controlPanel () noexcept override
 
::CFStringRef copy () const
 
::ASIOError createBuffers (::ASIOBufferInfo *info, long channels, long iosize, ::ASIOCallbacks *callbacks) noexcept override
 
virtual void detach () noexcept
 
::ASIOError disposeBuffers () noexcept override
 
 dx_catchall () static void idle(int64_t nsec)
 
 dx_catchall () static void idle(uint64_t timeout) noexcept
 
void exception (const exception &exception, bool filtered=false) const noexcept override
 notification exception handler
 
device_t * find (std::string uid) const noexcept
 Finds the device by guid.
The user is responsible for making sure the device list cannot be modified during find().
 
virtual void free () noexcept
 
::ASIOError future (long selector, void *) noexcept override
 
::ASIOError getBufferSize (long *min, long *max, long *preferred, long *granularity) noexcept override
 
::ASIOError getChannelInfo (::ASIOChannelInfo *info) noexcept override
 
::ASIOError getChannels (long *ins, long *outs) noexcept override
 
::ASIOError getClockSources (::ASIOClockSource *clocks, long *sources) noexcept override
 
void getDriverName (char *name) noexcept override
 
long getDriverVersion () noexcept override
 
void getErrorMessage (char *string) noexcept override
 
::ASIOError getLatencies (long *rx, long *tx) noexcept override
 
::ASIOError getSamplePosition (::ASIOSamples *samples, ::ASIOTimeStamp *timestamp) noexcept override
 Inquires the sample position/time stamp pair.
 
::ASIOError getSampleRate (::ASIOSampleRate *samplerate) noexcept override
 
void halt () noexcept override
 stop streaming engine
 
CFTypeID id () noexcept
 
CFTypeID id () noexcept
 
CFTypeID id () noexcept
 
CFTypeID id () noexcept
 
CFTypeID id () noexcept
 
CFTypeID id () noexcept
 
CFTypeID id () noexcept
 
CFTypeID id () noexcept
 
CFTypeID id () noexcept
 
CFTypeID id () noexcept
 
::ASIOBool init (void *) noexcept override
 
referenceinitialize (cf_object_t cf_object, bool retain=true)
 
realtimeinitialize (const std::chrono::high_resolution_clock::duration &resolution)
 
void initialize (const typename clock_t::duration &duration)
 
template<unsigned int max_channels>
void initialize (uint32_t iosize, uint64_t channel_map[2][(max_channels+63)/64]) try
 
virtual void launch ()
 
virtual void launch ()
 
DECLARE_IUNKNOWN ::HRESULT STDMETHODCALLTYPE NonDelegatingQueryInterface (const ::IID &riid, void **object) noexcept override
 
void notify () noexcept override
 notify change from device requiring streaming reset
 
void notify (unsigned int samplerate) noexcept override
 notify sample rate change from device
 
 operator bool () const noexcept
 
 operator cf_object_t () const noexcept
 
 operator const char * () const
 
 operator double () const noexcept
 Skips whitespace; returns 0.0 on error.
 
 operator int32_t () const noexcept
 Skips whitespace; returns 0 on error, MAX or -MAX on overflow.
 
 operator std::string () const
 
template<typename petty_t = cf_object_t, typename = typename std::enable_if_t <!std::is_same_v<petty_t, ::CFTypeRef>>>
 operator type<> () const noexcept
 
bool operator!= (::CFStringRef value) const noexcept
 
bool operator!= (cf_object_t cf_object) const noexcept
 
bool operator!= (value_t value)
 
::CFMutableStringRef operator+ (::CFStringRef value) const noexcept
 
::CFMutableStringRef operator+ (const char *value) const noexcept
 
 operator::CFDataRef () const noexcept
 
 operator::CFRunLoopSourceRef () const noexcept
 
 operator::CFTypeID () const noexcept
 
template<typename petty_t = cf_object_t, typename = typename std::enable_if_t <!std::is_same_v<petty_t, ::CFTypeRef>>>
 operator::CFTypeRef () const noexcept
 
 operator::IONotificationPortRef () const noexcept
 
 operator::mach_port_t () const noexcept
 
bool operator< (::CFStringRef value) const noexcept
 
bool operator< (value_t value)
 
bool operator<= (::CFStringRef value) const noexcept
 
bool operator<= (value_t value)
 
bool operator== (::CFStringRef value) const noexcept
 
bool operator== (cf_object_t cf_object) const noexcept
 
bool operator== (value_t value)
 
bool operator> (::CFStringRef value) const noexcept
 
bool operator> (value_t value)
 
bool operator>= (::CFStringRef value) const noexcept
 
bool operator>= (value_t value)
 
::ASIOError outputReady () noexcept override
 
void overload () noexcept override
 
void process (int64_t timestamp) noexcept override
 
referencerelease () noexcept
 
virtual void removed () noexcept
 notify device removals completed stub
 
void removed (device_t &device) noexcept override
 notify specific device removal stub
 
referenceretain () noexcept
 
void run () override try
 start streaming engine
 
uint32_t samplerate () const try
 
void samplerate (uint32_t samplerate) try
 
::ASIOError setClockSource (long index) noexcept override
 
::ASIOError setSampleRate (::ASIOSampleRate samplerate) noexcept override
 
void sleep () override
 
::ASIOError start () noexcept override
 
::ASIOError stop () noexcept override
 
void sync (const std::chrono::high_resolution_clock::time_point &now) override try
 
virtual void sync (const typename clock_t::time_point &now)
 
void tick () override try
 
void update () noexcept try
 
void wait () try
 
void wake () override
 
 ~asio () noexcept
 

Static Protected Member Functions

::CFTypeID id () noexcept
 

Protected Attributes

struct { 
 
   circular_t *   circular [directions
 
   force_read   force_read 
 
   force_write   force_write 
 
   struct { 
 
      volatile uint32_t *   samplerate 
 
   }   observer 
 
   struct { 
 
      uint32_t   interval 
 clock resolution: HW stream frame size in samples More...
 
      uint32_t   linesize 
 
      circular *   reference 
 
      uint32_t   safety_offset [directions
 
      uint32_t   samplerate 
 
      int64_t   trigger 
 
   }   sync 
 
cache 
 
::ASIOCallbacks * callbacks = nullptr
 
redirect::file cerr
 
cf_object_t cf_object = nullptr
 
::CFStringRef cf_type_desc = nullptr
 
::CFStringRef cf_type_id = nullptr
 
redirect::file clog
 
std::shared_ptr< device_t > device
 
clock_t::duration duration = clock_t::duration::zero()
 
elements
 STL member.
 
uint64_t frame = 0
 
bool hw_clock = false
 
io_t ** io [directions][2] {}
 
uint32_t iosize = 0
 
bool kernel_streaming = false
 
bool launched = false
 
log log {}
 
dx::log log {}
 
std::string log_path
 
const match match
 
int64_t mmoffset = 0
 
dx::stream::clock::monitormonitor = nullptr
 io[directions][double buffer][channel][sample]
 
std::mutex mutex
 
clock_t::time_point objective
 
bool paused = false
 
std::shared_ptr< pin_t > pin [directions]
 
cf::preference preference
 
dx::registry preference
 
std::atomic< bool > running
 
uint64_t sample_position = 0
 
dx::generic::driver::setup setup
 
os_result status = not_initialized
 
bool streaming = false
 keeps track of the start/stop state of the streaming engine
 
bool time_code = false
 indicate to generate time code
 
bool time_info = false
 indicate ASIO host supports time info
 

Member Typedef Documentation

◆ desc

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
typedef device_t::desc dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::desc
inherited

◆ driver

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
typedef driver<device_t> dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::driver
protectedinherited

Constructor & Destructor Documentation

◆ ~asio()

template<typename device_t , typename pin_t >
dx::asio< device_t, pin_t >::~asio ( )
inlineprotectednoexcept

◆ asio()

template<typename device_t , typename pin_t >
dx::asio< device_t, pin_t >::asio ( super::match match,
const char * id,
::IUnknown * unknown,
::HRESULT * result )
inline

Member Function Documentation

◆ arrived() [1/2]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx_catchall_handler(this,) using driver_t void dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::arrived ( )
inlineoverrideprotectedvirtualinherited

notify device arrivals completed stub

pin creation exception caught here to allow device inspection even if streaming is not possible - most likely due to exclusive access.

Todo
forward pin creation exception to be thrown at engine::start()

Reimplemented from dx::driver< device_t >.

+ Here is the call graph for this function:

◆ arrived() [2/2]

template<class device_t = device>
virtual void dx::driver< device_t >::arrived ( device_t & )
inlineprotectedvirtualinherited

◆ canSampleRate()

template<typename device_t , typename pin_t >
::ASIOError dx::asio< device_t, pin_t >::canSampleRate ( ::ASIOSampleRate samplerate)
inlineoverrideprotectednoexcept
+ Here is the call graph for this function:

◆ catch() [1/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( ...)
inlineprotectedinherited

◆ catch() [2/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( ...)
inlineprotectedinherited

◆ catch() [3/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( ...)
inlineprotectedinherited

◆ catch() [4/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( ...)
inlineinherited

◆ catch() [5/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( ...)
inlineinherited

◆ catch() [6/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( ...)
inlineinherited

◆ catch() [7/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( ...)
inlineinherited

◆ catch() [8/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( const dx::exception & __dx_exception)
inlineprotectedinherited

◆ catch() [9/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( const dx::exception & __dx_exception)
inlineprotectedinherited

◆ catch() [10/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( const dx::exception & __dx_exception)
inlineprotectedinherited

◆ catch() [11/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( const dx::exception & __dx_exception)
inlineinherited

◆ catch() [12/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( const dx::exception & __dx_exception)
inlineinherited

◆ catch() [13/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( const dx::exception & __dx_exception)
inlineinherited

◆ catch() [14/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( const dx::exception & __dx_exception)
inlineinherited

◆ catch() [15/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( const std::exception & __std_exception)
inlineprotectedinherited

◆ catch() [16/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( const std::exception & __std_exception)
inlineprotectedinherited

◆ catch() [17/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( const std::exception & __std_exception)
inlineprotectedinherited

◆ catch() [18/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( const std::exception & __std_exception)
inlineinherited

◆ catch() [19/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( const std::exception & __std_exception)
inlineinherited

◆ catch() [20/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( const std::exception & __std_exception)
inlineinherited

◆ catch() [21/21]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::catch ( const std::exception & __std_exception)
inlineinherited

◆ clear()

template<class device_t = device>
void dx::driver< device_t >::clear ( )
inlineprotectednoexceptinherited

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

Todo
check if exception catching needed for device::conclude()
+ Here is the call graph for this function:

◆ conclude() [1/2]

template<class device_t = device>
virtual void dx::driver< device_t >::conclude ( )
inlinevirtualnoexceptinherited

Reimplemented from dx::generic::driver.

◆ conclude() [2/2]

template<class device_t = device>
void dx::driver< device_t >::conclude ( )
inlineoverridevirtualnoexceptinherited

Reimplemented from dx::generic::driver.

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

◆ controlPanel()

template<typename device_t , typename pin_t >
::ASIOError dx::asio< device_t, pin_t >::controlPanel ( )
inlineoverrideprotectednoexcept

◆ copy()

::CFStringRef dx::cf::__string< ::CFStringRef >::copy ( ) const
inlineinherited

◆ createBuffers()

template<typename device_t , typename pin_t >
::ASIOError dx::asio< device_t, pin_t >::createBuffers ( ::ASIOBufferInfo * info,
long channels,
long iosize,
::ASIOCallbacks * callbacks )
inlineoverrideprotectednoexcept
+ Here is the call graph for this function:

◆ detach()

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
virtual void dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::detach ( )
inlinevirtualnoexceptinherited
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ disposeBuffers()

template<typename device_t , typename pin_t >
::ASIOError dx::asio< device_t, pin_t >::disposeBuffers ( )
inlineoverrideprotectednoexcept
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dx_catchall() [1/2]

dx::generic::driver::dx_catchall ( )
inlineinherited
+ Here is the caller graph for this function:

◆ dx_catchall() [2/2]

dx::generic::driver::dx_catchall ( )
inlinenoexceptinherited

◆ dx_catchall_rethrow()

template<typename device_t , typename pin_t >
dx::asio< device_t, pin_t >::dx_catchall_rethrow ( status = exception.error;)
inline

◆ exception()

template<typename device_t , typename pin_t >
void dx::asio< device_t, pin_t >::exception ( const exception & exception,
bool filtered = false ) const
inlineoverrideprotectedvirtualnoexcept

notification exception handler

Reimplemented from dx::generic::driver.

+ Here is the call graph for this function:

◆ find()

template<class device_t = device>
device_t * dx::driver< device_t >::find ( std::string uid) const
inlinenoexceptinherited

Finds the device by guid.
The user is responsible for making sure the device list cannot be modified during find().

Exceptions
n/athis method does not throw exceptions

◆ free()

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
virtual void dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::free ( )
inlinevirtualnoexceptinherited
Todo
replace test for valid pin by overwise keeping track of allocated channels
+ Here is the caller graph for this function:

◆ future()

template<typename device_t , typename pin_t >
::ASIOError dx::asio< device_t, pin_t >::future ( long selector,
void *  )
inlineoverrideprotectednoexcept

◆ getBufferSize()

template<typename device_t , typename pin_t >
::ASIOError dx::asio< device_t, pin_t >::getBufferSize ( long * min,
long * max,
long * preferred,
long * granularity )
inlineoverrideprotectednoexcept

todo set limits for Windows clock if no ASIO clock IRQ is available or if HW clock is already in use

◆ getChannelInfo()

template<typename device_t , typename pin_t >
::ASIOError dx::asio< device_t, pin_t >::getChannelInfo ( ::ASIOChannelInfo * info)
inlineoverrideprotectednoexcept

◆ getChannels()

template<typename device_t , typename pin_t >
::ASIOError dx::asio< device_t, pin_t >::getChannels ( long * ins,
long * outs )
inlineoverrideprotectednoexcept

◆ getClockSources()

template<typename device_t , typename pin_t >
::ASIOError dx::asio< device_t, pin_t >::getClockSources ( ::ASIOClockSource * clocks,
long * sources )
inlineoverrideprotectednoexcept

◆ getDriverName()

template<typename device_t , typename pin_t >
void dx::asio< device_t, pin_t >::getDriverName ( char * name)
inlineoverrideprotectednoexcept

◆ getDriverVersion()

template<typename device_t , typename pin_t >
long dx::asio< device_t, pin_t >::getDriverVersion ( )
inlineoverrideprotectednoexcept

◆ getErrorMessage()

template<typename device_t , typename pin_t >
void dx::asio< device_t, pin_t >::getErrorMessage ( char * string)
inlineoverrideprotectednoexcept
+ Here is the call graph for this function:

◆ getLatencies()

template<typename device_t , typename pin_t >
::ASIOError dx::asio< device_t, pin_t >::getLatencies ( long * rx,
long * tx )
inlineoverrideprotectednoexcept

◆ getSamplePosition()

template<typename device_t , typename pin_t >
::ASIOError dx::asio< device_t, pin_t >::getSamplePosition ( ::ASIOSamples * samples,
::ASIOTimeStamp * timestamp )
inlineoverrideprotectednoexcept

Inquires the sample position/time stamp pair.

In order to be able to synchronize properly, the sample position / time stamp pair must refer to the current block, that is, the engine will call ASIOGetSamplePosition() in its bufferSwitch() callback and expect the time for the first sample of the current block. Thus, when requested in the very first bufferSwitch after ASIOStart(), the sample position should be zero, and the time stamp should refer to the very time where the stream was started. It also means that the sample position must be block aligned. The driver must ensure proper interpolation if the system time can not be determined for the block position. The driver is responsible for precise time stamps as it usually has most direct access to lower level resources. Proper behavior of ASIOGetSamplePosition() and ASIOGetLatencies() are essential for precise media synchronization!

Exceptions
Ifno input/output is present, ASE_NotPresent will be returned. If there is no clock, ASE_SPNotAdvancing will be returned.
Parameters
sampleswill hold the sample position on return. The sample position is reset to zero when ASIOStart() gets called.
timestampwill hold the system time on return when the sample position was latched
+ Here is the call graph for this function:

◆ getSampleRate()

template<typename device_t , typename pin_t >
::ASIOError dx::asio< device_t, pin_t >::getSampleRate ( ::ASIOSampleRate * samplerate)
inlineoverrideprotectednoexcept

◆ halt()

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
void dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::halt ( )
inlineoverridevirtualnoexceptinherited

stop streaming engine

Reimplemented from dx::clock< scope_t, clock_t >.

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

◆ id() [1/11]

template<typename cf_object_t >
::CFTypeID dx::cf::reference< cf_object_t >::id ( )
staticnoexceptinherited
+ Here is the caller graph for this function:

◆ id() [2/11]

CFTypeID dx::cf::reference<::CFDictionaryRef >::id ( )
inlinenoexceptinherited

◆ id() [3/11]

CFTypeID dx::cf::reference<::CFMutableDictionaryRef >::id ( )
inlinenoexceptinherited

◆ id() [4/11]

CFTypeID dx::cf::reference<::CFNumberRef >::id ( )
inlinenoexceptinherited

◆ id() [5/11]

CFTypeID dx::cf::reference<::CFStringRef >::id ( )
inlinenoexceptinherited

◆ id() [6/11]

CFTypeID dx::cf::reference<::CFArrayRef >::id ( )
inlinenoexceptinherited

◆ id() [7/11]

CFTypeID dx::cf::reference<::CFURLRef >::id ( )
inlinenoexceptinherited

◆ id() [8/11]

CFTypeID dx::cf::reference<::CFBundleRef >::id ( )
inlinenoexceptinherited

◆ id() [9/11]

CFTypeID dx::cf::reference<::CFDataRef >::id ( )
inlinenoexceptinherited

◆ id() [10/11]

CFTypeID dx::cf::reference<::CFUUIDRef >::id ( )
inlinenoexceptinherited

◆ id() [11/11]

CFTypeID dx::cf::reference<::SCPreferencesRef >::id ( )
inlinenoexceptinherited

◆ init()

template<typename device_t , typename pin_t >
::ASIOBool dx::asio< device_t, pin_t >::init ( void * )
inlineoverrideprotectednoexcept
+ Here is the call graph for this function:

◆ initialize() [1/4]

template<typename cf_object_t >
reference & dx::cf::reference< cf_object_t >::initialize ( cf_object_t cf_object,
bool retain = true )
inlineinherited
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ initialize() [2/4]

realtime & dx::thread::prio::realtime::initialize ( const std::chrono::high_resolution_clock::duration & resolution)
inlineinherited
Todo
dx::thread::prio: replace experimental hardcoded preemption limit with real limit obtained from machine
+ Here is the caller graph for this function:

◆ initialize() [3/4]

template<enum scope scope_t = user, typename clock_t = std::chrono::high_resolution_clock>
void dx::clock< scope_t, clock_t >::initialize ( const typename clock_t::duration & duration)
inlineinherited
+ Here is the caller graph for this function:

◆ initialize() [4/4]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
template<unsigned int max_channels>
void dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::initialize ( uint32_t iosize,
uint64_t channel_map[2][(max_channels+63)/64] )
inlineinherited
Todo
clock already runnning with different iosize: check if engine should be initialized with current iosize
Todo
stream::engine::initialize(): define sync reference pin
+ Here is the call graph for this function:

◆ launch() [1/2]

virtual void dx::generic::driver::launch ( )
inlinevirtualinherited
+ Here is the caller graph for this function:

◆ launch() [2/2]

virtual void dx::generic::driver::launch ( )
inlinevirtualinherited
+ Here is the call graph for this function:

◆ NonDelegatingQueryInterface()

template<typename device_t , typename pin_t >
DECLARE_IUNKNOWN ::HRESULT STDMETHODCALLTYPE dx::asio< device_t, pin_t >::NonDelegatingQueryInterface ( const ::IID & riid,
void ** object )
inlineoverrideprotectednoexcept

◆ notify() [1/2]

template<typename device_t , typename pin_t >
void dx::asio< device_t, pin_t >::notify ( )
inlineoverrideprotectedvirtualnoexcept

notify change from device requiring streaming reset

Reimplemented from dx::clock< scope_t, clock_t >.

+ Here is the call graph for this function:

◆ notify() [2/2]

template<typename device_t , typename pin_t >
void dx::asio< device_t, pin_t >::notify ( unsigned int )
inlineoverrideprotectedvirtualnoexcept

notify sample rate change from device

Reimplemented from dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >.

◆ operator bool()

template<typename cf_object_t >
dx::cf::reference< cf_object_t >::operator bool ( ) const
inlinenoexceptinherited

◆ operator cf_object_t()

template<typename cf_object_t >
dx::cf::reference< cf_object_t >::operator cf_object_t ( ) const
inlinenoexceptinherited

◆ operator const char *()

dx::cf::__string< ::CFStringRef >::operator const char * ( ) const
inlineinherited

◆ operator double()

dx::cf::__string< ::CFStringRef >::operator double ( ) const
inlinenoexceptinherited

Skips whitespace; returns 0.0 on error.

◆ operator int32_t()

dx::cf::__string< ::CFStringRef >::operator int32_t ( ) const
inlinenoexceptinherited

Skips whitespace; returns 0 on error, MAX or -MAX on overflow.

◆ operator std::string()

dx::cf::__string< ::CFStringRef >::operator std::string ( ) const
inlineinherited

◆ operator type<>()

template<typename cf_object_t >
template<typename petty_t = cf_object_t, typename = typename std::enable_if_t <!std::is_same_v<petty_t, ::CFTypeRef>>>
dx::cf::reference< cf_object_t >::operator type<> ( ) const
noexceptinherited

◆ operator!=() [1/3]

bool dx::cf::__string< ::CFStringRef >::operator!= ( ::CFStringRef value) const
inlinenoexceptinherited

◆ operator!=() [2/3]

template<typename cf_object_t >
bool dx::cf::reference< cf_object_t >::operator!= ( cf_object_t cf_object) const
inlinenoexceptinherited

◆ operator!=() [3/3]

bool dx::cf::__string< ::CFStringRef >::operator!= ( value_t value)
inlineinherited

◆ operator+() [1/2]

::CFMutableStringRef dx::cf::__string< ::CFStringRef >::operator+ ( ::CFStringRef value) const
inlinenoexceptinherited

◆ operator+() [2/2]

::CFMutableStringRef dx::cf::__string< ::CFStringRef >::operator+ ( const char * value) const
inlinenoexceptinherited

◆ operator::CFDataRef()

dx::cf::__string< ::CFStringRef >::operator::CFDataRef ( ) const
inlinenoexceptinherited

◆ operator::CFRunLoopSourceRef()

dx::io::power::operator::CFRunLoopSourceRef ( ) const
inlinenoexceptinherited

◆ operator::CFTypeID()

template<typename cf_object_t >
dx::cf::reference< cf_object_t >::operator::CFTypeID ( ) const
inlinenoexceptinherited

◆ operator::CFTypeRef()

template<typename cf_object_t >
template<typename petty_t = cf_object_t, typename = typename std::enable_if_t <!std::is_same_v<petty_t, ::CFTypeRef>>>
dx::cf::reference< cf_object_t >::operator::CFTypeRef ( ) const
inlinenoexceptinherited

◆ operator::IONotificationPortRef()

dx::io::power::operator::IONotificationPortRef ( ) const
inlinenoexceptinherited

◆ operator::mach_port_t()

dx::io::power::operator::mach_port_t ( ) const
inlinenoexceptinherited

◆ operator<() [1/2]

bool dx::cf::__string< ::CFStringRef >::operator< ( ::CFStringRef value) const
inlinenoexceptinherited

◆ operator<() [2/2]

bool dx::cf::__string< ::CFStringRef >::operator< ( value_t value)
inlineinherited

◆ operator<=() [1/2]

bool dx::cf::__string< ::CFStringRef >::operator<= ( ::CFStringRef value) const
inlinenoexceptinherited

◆ operator<=() [2/2]

bool dx::cf::__string< ::CFStringRef >::operator<= ( value_t value)
inlineinherited

◆ operator==() [1/3]

bool dx::cf::__string< ::CFStringRef >::operator== ( ::CFStringRef value) const
inlinenoexceptinherited

◆ operator==() [2/3]

template<typename cf_object_t >
bool dx::cf::reference< cf_object_t >::operator== ( cf_object_t cf_object) const
inlinenoexceptinherited

◆ operator==() [3/3]

bool dx::cf::__string< ::CFStringRef >::operator== ( value_t value)
inlineinherited

◆ operator>() [1/2]

bool dx::cf::__string< ::CFStringRef >::operator> ( ::CFStringRef value) const
inlinenoexceptinherited

◆ operator>() [2/2]

bool dx::cf::__string< ::CFStringRef >::operator> ( value_t value)
inlineinherited

◆ operator>=() [1/2]

bool dx::cf::__string< ::CFStringRef >::operator>= ( ::CFStringRef value) const
inlinenoexceptinherited

◆ operator>=() [2/2]

bool dx::cf::__string< ::CFStringRef >::operator>= ( value_t value)
inlineinherited

◆ outputReady()

template<typename device_t , typename pin_t >
::ASIOError dx::asio< device_t, pin_t >::outputReady ( )
inlineoverrideprotectednoexcept

◆ overload()

template<typename device_t , typename pin_t >
void dx::asio< device_t, pin_t >::overload ( )
inlineoverrideprotectedvirtualnoexcept

Reimplemented from dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >.

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

◆ process()

template<typename device_t , typename pin_t >
void dx::asio< device_t, pin_t >::process ( int64_t timestamp)
inlineoverrideprotectedvirtualnoexcept

Implements dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >.

+ Here is the call graph for this function:

◆ release()

template<typename cf_object_t >
reference & dx::cf::reference< cf_object_t >::release ( )
inlinenoexceptinherited
+ Here is the caller graph for this function:

◆ removed() [1/2]

template<class device_t = device>
virtual void dx::generic::driver::removed ( )
inlineprotectedvirtualnoexceptinherited

notify device removals completed stub

Reimplemented from dx::generic::driver.

◆ removed() [2/2]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
void dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::removed ( device_t & )
inlineoverrideprotectedvirtualnoexceptinherited

notify specific device removal stub

Reimplemented from dx::driver< device_t >.

+ Here is the call graph for this function:

◆ retain()

template<typename cf_object_t >
reference & dx::cf::reference< cf_object_t >::retain ( )
inlinenoexceptinherited
+ Here is the caller graph for this function:

◆ run()

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
void dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::run ( )
inlineoverridevirtualinherited

start streaming engine

Reimplemented from dx::clock< scope_t, clock_t >.

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

◆ samplerate() [1/2]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
uint32_t dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::samplerate ( ) const
inlineinherited

◆ samplerate() [2/2]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
void dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::samplerate ( uint32_t samplerate)
inlineinherited
+ Here is the call graph for this function:

◆ setClockSource()

template<typename device_t , typename pin_t >
::ASIOError dx::asio< device_t, pin_t >::setClockSource ( long index)
inlineoverrideprotectednoexcept

◆ setSampleRate()

template<typename device_t , typename pin_t >
::ASIOError dx::asio< device_t, pin_t >::setSampleRate ( ::ASIOSampleRate samplerate)
inlineoverrideprotectednoexcept
+ Here is the call graph for this function:

◆ sleep()

template<typename device_t , typename pin_t >
void dx::asio< device_t, pin_t >::sleep ( )
inlineoverrideprotectedvirtual

Reimplemented from dx::generic::driver.

+ Here is the call graph for this function:

◆ start()

template<typename device_t , typename pin_t >
::ASIOError dx::asio< device_t, pin_t >::start ( )
inlineoverrideprotectednoexcept
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ stop()

template<typename device_t , typename pin_t >
::ASIOError dx::asio< device_t, pin_t >::stop ( )
inlineoverrideprotectednoexcept
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sync() [1/2]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
void dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::sync ( const std::chrono::high_resolution_clock::time_point & now)
inlineoverrideprotectedinherited
+ Here is the call graph for this function:

◆ sync() [2/2]

template<enum scope scope_t = user, typename clock_t = std::chrono::high_resolution_clock>
virtual void dx::clock< scope_t, clock_t >::sync ( const typename clock_t::time_point & now)
inlineprotectedvirtualinherited
+ Here is the caller graph for this function:

◆ tick()

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
void dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::tick ( )
inlineoverrideprotectedvirtualinherited
Todo
enable re-sync with correct rx/tx position dependent clock event time point

Implements dx::clock< scope_t, clock_t >.

+ Here is the call graph for this function:

◆ update()

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
void dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::update ( )
inlineprotectednoexceptinherited
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ wait()

template<enum scope scope_t = user, typename clock_t = std::chrono::high_resolution_clock>
void dx::clock< scope_t, clock_t >::wait ( )
inlineinherited

◆ wake()

template<typename device_t , typename pin_t >
void dx::asio< device_t, pin_t >::wake ( )
inlineoverrideprotectedvirtual

Reimplemented from dx::generic::driver.

+ Here is the call graph for this function:

Member Data Documentation

◆ [struct]

struct { ... } dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::cache

◆ callbacks

template<typename device_t , typename pin_t >
::ASIOCallbacks* dx::asio< device_t, pin_t >::callbacks = nullptr
protected

◆ cerr

template<typename device_t , typename pin_t >
redirect::file dx::asio< device_t, pin_t >::cerr
protected

◆ cf_object

template<typename cf_object_t >
cf_object_t dx::cf::reference< cf_object_t >::cf_object = nullptr
protectedinherited

◆ cf_type_desc

template<typename cf_object_t >
::CFStringRef dx::cf::reference< cf_object_t >::cf_type_desc = nullptr
inherited

◆ cf_type_id

template<typename cf_object_t >
::CFStringRef dx::cf::reference< cf_object_t >::cf_type_id = nullptr
inherited

◆ circular

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
circular_t* dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::circular[directions]
inherited

◆ clog

template<typename device_t , typename pin_t >
redirect::file dx::asio< device_t, pin_t >::clog
protected

◆ device

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
std::shared_ptr<device_t> dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::device
protectedinherited

◆ duration

template<enum scope scope_t = user, typename clock_t = std::chrono::high_resolution_clock>
clock_t::duration dx::clock< scope_t, clock_t >::duration = clock_t::duration::zero()
protectedinherited
Todo
evaluate clock::status replacement (exception?)

◆ elements

T std::deque< T >::elements
inherited

STL member.

◆ force_read

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
force_read dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::force_read
inherited

◆ force_write

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
force_write dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::force_write
inherited

◆ frame

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
uint64_t dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::frame = 0
protectedinherited

◆ hw_clock

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
bool dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::hw_clock = false
protectedinherited

◆ interval

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
uint32_t dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::interval
inherited

clock resolution: HW stream frame size in samples

◆ io

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
io_t** dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::io[directions][2] {}
protectedinherited

◆ iosize

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
uint32_t dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::iosize = 0
protectedinherited

◆ kernel_streaming

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
bool dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::kernel_streaming = false
protectedinherited

◆ launched

template<class device_t = device>
bool dx::driver< device_t >::launched = false
inherited

◆ linesize

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
uint32_t dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::linesize
inherited

◆ log [1/2]

log dx::generic::driver::log {}
inherited

◆ log [2/2]

dx::log dx::generic::driver::log {}
inherited

◆ log_path

template<typename device_t , typename pin_t >
std::string dx::asio< device_t, pin_t >::log_path
protected

◆ match

template<typename device_t , typename pin_t >
const match dx::asio< device_t, pin_t >::match
protected

◆ mmoffset

template<typename device_t , typename pin_t >
int64_t dx::asio< device_t, pin_t >::mmoffset = 0
protected

◆ monitor

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
dx::stream::clock::monitor* dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::monitor = nullptr
protectedinherited

io[directions][double buffer][channel][sample]

◆ mutex

template<enum scope scope_t = user, typename clock_t = std::chrono::high_resolution_clock>
std::mutex dx::clock< scope_t, clock_t >::mutex
protectedinherited

◆ objective

template<enum scope scope_t = user, typename clock_t = std::chrono::high_resolution_clock>
clock_t::time_point dx::clock< scope_t, clock_t >::objective
protectedinherited

◆ [struct]

struct { ... } dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::observer

◆ paused

template<typename device_t , typename pin_t >
bool dx::asio< device_t, pin_t >::paused = false
protected

◆ pin

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
std::shared_ptr<pin_t> dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::pin[directions]
protectedinherited

◆ preference [1/2]

cf::preference dx::generic::driver::preference
inherited

◆ preference [2/2]

dx::registry dx::generic::driver::preference
inherited

◆ reference

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
circular* dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::reference
inherited

◆ running

template<enum scope scope_t = user, typename clock_t = std::chrono::high_resolution_clock>
std::atomic<bool> dx::clock< scope_t, clock_t >::running
protectedinherited

◆ safety_offset

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
uint32_t dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::safety_offset {}
inherited

◆ sample_position

template<typename device_t , typename pin_t >
uint64_t dx::asio< device_t, pin_t >::sample_position = 0
protected

◆ samplerate [1/2]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
volatile uint32_t* dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::samplerate
inherited

◆ samplerate [2/2]

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
uint32_t dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::samplerate
inherited

◆ setup

dx::generic::driver::setup dx::generic::driver::setup
inherited

◆ status

template<typename device_t , typename pin_t >
os_result dx::asio< device_t, pin_t >::status = not_initialized
protected

◆ streaming

template<typename device_t , typename pin_t >
bool dx::asio< device_t, pin_t >::streaming = false
protected

keeps track of the start/stop state of the streaming engine

◆ [struct]

struct { ... } dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::sync

◆ time_code

template<typename device_t , typename pin_t >
bool dx::asio< device_t, pin_t >::time_code = false
protected

indicate to generate time code

◆ time_info

template<typename device_t , typename pin_t >
bool dx::asio< device_t, pin_t >::time_info = false
protected

indicate ASIO host supports time info

◆ trigger

template<typename device_t , typename pin_t , typename io_t = int32_t, typename circular_t = typename pin_t::circular_t, typename driver_t = driver<device_t>>
int64_t dx::stream::engine< device_t, pin_t, io_t, circular_t, driver_t >::trigger
inherited

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

(c) copyright 2009 dynamic acoustics e.U. generated on Fri Nov 15 2024

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.