dxd - dynax driver framework 3.0.0d222
cross platform open source driver development framework
Loading...
Searching...
No Matches
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t > Class Template Reference

the consumer twin of a bus's producing group: it owns this group's pins, its io buffers and ring positions, and runs the consumer data path on the group's own clock - one thread per group, so every group of every device streams in parallel More...

#include <dx_stream_engine_group.h>

Inheritance diagram for dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >:
Collaboration diagram for dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >:

Public Types

typedef group_t::clock clock
typedef device_t::desc_t desc
typedef group_t::device_t device_t
typedef _io_t io_t
typedef _pin_t pin_t

Public Member Functions

void attach (const std::shared_ptr< pin_t > &pin) try
 takes one of this group's pins into the data path, deriving its format conversion and, where the pin's stream says so, the sync reference from it
 catch (...)
 catch (...)
 catch (...)
 catch (...)
 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)
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)
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)
 catch (const std::exception &__std_exception)
 catch (const std::exception &__std_exception)
 catch (const std::exception &__std_exception)
 catch (const std::exception &__std_exception)
virtual void detach () noexcept
 releases this group's pins, taking their streams and the clock registration with them: their shares end the session first, the tick works on its cache to the end
virtual DX_PRAGMA_IGNORE_RETURN_VALUE_END void free () noexcept
DX_PRAGMA_IGNORE_RETURN_VALUE_END void halt () noexcept override
 this group's streaming session ends with its last started stream
void initialize (uint32_t iosize, const std::vector< bool >(&channel_map)[dx::stream::direction::directions]) try
void run () override try
 this group's streaming session begins: the started streams brought it here
DX_PRAGMA_IGNORE_RETURN_VALUE_END uint32_t samplerate () const try
void samplerate (uint32_t samplerate) try
DX_PRAGMA_IGNORE_RETURN_VALUE_END void take (device_t &device) try
 takes a device's audio pins into this engine - the app's consumer beside the bus's own group
 ~group () override

Static Public Member Functions

static DX_PRAGMA_IGNORE_RETURN_VALUE_END groupattach (device_t &device) try
 builds the audio pins of a device and hands each to the group of its own stream, returning the group that took them - the app's entry into streaming a device
static DX_PRAGMA_IGNORE_RETURN_VALUE_END void detach (device_t &device) noexcept
 the symmetric teardown: every group of the device releases its pins while the device still stands - a pin destroyed with its group cascades into the device's group map, which is going by then

Public Attributes

dx::stream::clock::monitor asio_monitor {}
 this client's own asio level, in process: every client writes its asio slots (incl. roundtrip), so a shared segment could not attribute them - irq/isr stay in the device's shared segment, written once by the host
struct { 
   circular_t *   circular [direction::directions
   dx::stream::channel::control *   control 
 kernel streaming: the reference stream's buffer switch More...
   force_read   force_read 
   force_write   force_write 
   struct { 
      struct { 
         uint32_t   channels 
 the ring's interleave More...
         uint32_t   interval 
 clock resolution: HW stream frame size in samples More...
         uint32_t   linesize 
         struct { 
            uint32_t   channels 
            uint32_t   index 
         }   pin
 this group's slice of it More...
         uint32_t   safety_offset 
      }   io [direction::directions]
      direction::direction   reference 
      uint32_t   samplerate 
      int64_t   trigger 
 resync condition More...
   }   sync
cache
uint64_t frame = 0
bool hw_clock = false
io_t ** io [direction::directions][2] {}
uint32_t iosize = 0
bool kernel_streaming = false
dx::stream::clock::monitormonitor = &asio_monitor
std::function< void()> notify_hook = []{}
 a streaming reset this group's clock signals
std::function< void()> overload_hook = []{}
 a tick that came too late for its data
std::shared_ptr< pin_tpin [direction::directions]
volatile uint64_t position [direction::directions] {}
 this engine's own rx/tx positions into the shared circulars
std::function< void(int64_t timestamp)> process_hook = [](int64_t){}
 the app's places in this group's tick, set like every other hook of the control base
listener< dx::listen< std::function< void(const uint32_t &)> > > safety_offset_listener [direction::directions]
 a margin set mid-session reaches the tick: it reads the cache, never the promoted
std::function< void(uint32_t samplerate)> samplerate_hook = [](uint32_t){}

Protected Member Functions

 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)
 catch (const std::exception &__std_exception)
 catch (const std::exception &__std_exception)
void notify () noexcept override
virtual void notify (uint32_t samplerate) noexcept
 notify sample rate change from device
virtual void overload () noexcept
virtual void process (int64_t timestamp) noexcept
 the consumer's own processing place, set like every other hook of this group's control base
void sync (const typename clock::clock_t::time_point &now) override try
DX_PRAGMA_IGNORE_RETURN_VALUE_END void tick () override try
void update () noexcept try

Detailed Description

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
class dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >

the consumer twin of a bus's producing group: it owns this group's pins, its io buffers and ring positions, and runs the consumer data path on the group's own clock - one thread per group, so every group of every device streams in parallel

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

Member Typedef Documentation

◆ clock

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
typedef group_t::clock dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::clock

◆ desc

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
typedef device_t::desc_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::desc

◆ device_t

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
typedef group_t::device_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::device_t

◆ io_t

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
typedef _io_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::io_t

◆ pin_t

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
typedef _pin_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::pin_t

Constructor & Destructor Documentation

◆ ~group()

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::~group ( )
inlineoverride

Member Function Documentation

◆ attach() [1/2]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
void dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::attach ( const std::shared_ptr< pin_t > & pin)
inline

takes one of this group's pins into the data path, deriving its format conversion and, where the pin's stream says so, the sync reference from it

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

◆ attach() [2/2]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
DX_PRAGMA_IGNORE_RETURN_VALUE_END group * dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::attach ( device_t & device)
inlinestatic

builds the audio pins of a device and hands each to the group of its own stream, returning the group that took them - the app's entry into streaming a device

Exceptions
dx::exception

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

◆ catch() [1/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( ...)
inline

◆ catch() [2/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( ...)
inline

◆ catch() [3/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( ...)
inline

◆ catch() [4/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( ...)
inline

◆ catch() [5/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( ...)
inlineprotected

◆ catch() [6/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( ...)
inlineprotected

◆ catch() [7/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( ...)
inline

◆ catch() [8/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( ...)
inline

◆ catch() [9/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( ...)
inline

◆ catch() [10/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( const dx::exception & __dx_exception)
inline

◆ catch() [11/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( const dx::exception & __dx_exception)
inline

◆ catch() [12/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( const dx::exception & __dx_exception)
inline

◆ catch() [13/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( const dx::exception & __dx_exception)
inline

◆ catch() [14/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( const dx::exception & __dx_exception)
inlineprotected

◆ catch() [15/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( const dx::exception & __dx_exception)
inlineprotected

◆ catch() [16/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( const dx::exception & __dx_exception)
inline

◆ catch() [17/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( const dx::exception & __dx_exception)
inline

◆ catch() [18/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( const dx::exception & __dx_exception)
inline

◆ catch() [19/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( const std::exception & __std_exception)
inline

◆ catch() [20/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( const std::exception & __std_exception)
inline

◆ catch() [21/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( const std::exception & __std_exception)
inline

◆ catch() [22/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( const std::exception & __std_exception)
inline

◆ catch() [23/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( const std::exception & __std_exception)
inlineprotected

◆ catch() [24/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( const std::exception & __std_exception)
inlineprotected

◆ catch() [25/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( const std::exception & __std_exception)
inline

◆ catch() [26/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( const std::exception & __std_exception)
inline

◆ catch() [27/27]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::catch ( const std::exception & __std_exception)
inline

◆ detach() [1/2]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
virtual void dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::detach ( )
inlinevirtualnoexcept

releases this group's pins, taking their streams and the clock registration with them: their shares end the session first, the tick works on its cache to the end

◆ detach() [2/2]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
DX_PRAGMA_IGNORE_RETURN_VALUE_END void dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::detach ( device_t & device)
inlinestaticnoexcept

the symmetric teardown: every group of the device releases its pins while the device still stands - a pin destroyed with its group cascades into the device's group map, which is going by then

Here is the caller graph for this function:

◆ free()

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
virtual DX_PRAGMA_IGNORE_RETURN_VALUE_END void dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::free ( )
inlinevirtualnoexcept
Todo
replace test for valid pin by overwise keeping track of allocated channels

◆ halt()

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
DX_PRAGMA_IGNORE_RETURN_VALUE_END void dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::halt ( )
inlineoverridenoexcept

this group's streaming session ends with its last started stream

Here is the caller graph for this function:

◆ initialize()

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
void dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::initialize ( uint32_t iosize,
const std::vector< bool >(&) channel_map[dx::stream::direction::directions] )
inline
Todo
clock already runnning with different iosize: check if engine should be initialized with current iosize

◆ notify() [1/2]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
void dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::notify ( )
inlineoverrideprotectednoexcept

◆ notify() [2/2]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
virtual void dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::notify ( uint32_t samplerate)
inlineprotectedvirtualnoexcept

notify sample rate change from device

◆ overload()

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
virtual void dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::overload ( )
inlineprotectedvirtualnoexcept

◆ process()

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
virtual void dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::process ( int64_t timestamp)
inlineprotectedvirtualnoexcept

the consumer's own processing place, set like every other hook of this group's control base

◆ run()

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
void dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::run ( )
inlineoverride

this group's streaming session begins: the started streams brought it here

Here is the caller graph for this function:

◆ samplerate() [1/2]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
DX_PRAGMA_IGNORE_RETURN_VALUE_END uint32_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::samplerate ( ) const
inline

◆ samplerate() [2/2]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
void dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::samplerate ( uint32_t samplerate)
inline

◆ sync()

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
void dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::sync ( const typename clock::clock_t::time_point & now)
inlineoverrideprotected

◆ take()

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
DX_PRAGMA_IGNORE_RETURN_VALUE_END void dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::take ( device_t & device)
inline

takes a device's audio pins into this engine - the app's consumer beside the bus's own group

◆ tick()

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
DX_PRAGMA_IGNORE_RETURN_VALUE_END void dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::tick ( )
inlineoverrideprotected
Todo
enable re-sync with correct rx/tx position dependent clock event time point

◆ update()

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
void dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::update ( )
inlineprotectednoexcept
Here is the caller graph for this function:

Member Data Documentation

◆ asio_monitor

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::clock::monitor dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::asio_monitor {}

this client's own asio level, in process: every client writes its asio slots (incl. roundtrip), so a shared segment could not attribute them - irq/isr stay in the device's shared segment, written once by the host

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

◆ [struct]

struct { ... } dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::cache

◆ channels

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
uint32_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::channels

the ring's interleave

◆ circular

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
circular_t* dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::circular[direction::directions]

◆ control

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::channel::control* dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::control

kernel streaming: the reference stream's buffer switch

◆ force_read

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
force_read dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::force_read

◆ force_write

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
force_write dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::force_write

◆ frame

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
uint64_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::frame = 0

◆ hw_clock

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
bool dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::hw_clock = false

◆ index

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
uint32_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::index

◆ interval

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
uint32_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::interval

clock resolution: HW stream frame size in samples

◆ [struct] [1/2]

struct { ... } dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::io[direction::directions]

◆ io [2/2]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
io_t** dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::io[direction::directions][2] {}

◆ iosize

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
uint32_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::iosize = 0

◆ kernel_streaming

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
bool dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::kernel_streaming = false

◆ linesize

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
uint32_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::linesize

◆ monitor

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
dx::stream::clock::monitor* dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::monitor = &asio_monitor

◆ notify_hook

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
std::function<void()> dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::notify_hook = []{}

a streaming reset this group's clock signals

◆ overload_hook

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
std::function<void()> dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::overload_hook = []{}

a tick that came too late for its data

◆ [struct] [1/2]

struct { ... } dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::pin

this group's slice of it

◆ pin [2/2]

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
std::shared_ptr<pin_t> dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::pin[direction::directions]

◆ position

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
volatile uint64_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::position[direction::directions] {}

this engine's own rx/tx positions into the shared circulars

◆ process_hook

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
std::function<void(int64_t timestamp)> dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::process_hook = [](int64_t){}

the app's places in this group's tick, set like every other hook of the control base

its data path, running on this group's own thread

◆ reference

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
direction::direction dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::reference

◆ safety_offset

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
uint32_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::safety_offset

◆ safety_offset_listener

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
listener<dx::listen<std::function<void(const uint32_t&)> > > dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::safety_offset_listener[direction::directions]
Initial value:
{
{this->client::safety_offset[direction::out].listen, {[this](const uint32_t& ticks){auto& io= cache.sync.io[direction::out]; io.safety_offset= ticks* io.interval* io.linesize;}}},
{this->client::safety_offset[direction::in].listen, {[this](const uint32_t& ticks){auto& io= cache.sync.io[direction::in]; io.safety_offset= ticks* io.interval* io.linesize;}}},
}
struct dx::stream::engine::group::@045070022071263026070271135257226332234175321017 cache
@ in
Definition dx_stream.h:315
@ out
Definition dx_stream.h:315
io - IOKit namespace
Definition io_iterator.h:28
unsigned int uint32_t
Definition wdk/dxd_platform.h:111

a margin set mid-session reaches the tick: it reads the cache, never the promoted

◆ samplerate

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
uint32_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::samplerate

◆ samplerate_hook

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
std::function<void(uint32_t samplerate)> dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::samplerate_hook = [](uint32_t){}

◆ [struct]

struct { ... } dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::sync

◆ trigger

template<typename group_t, typename _pin_t, typename _io_t = int32_t, typename circular_t = typename _pin_t::circular_t>
int64_t dx::stream::engine::group< group_t, _pin_t, _io_t, circular_t >::trigger

resync condition


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.