dxd - dynax driver framework 3.0.2
cross platform open source driver development framework
Loading...
Searching...
No Matches
dx::asio::client::group< device_t > Class Template Reference

an ASIO client's own streaming group: the underlying SDK driver runs its session, ticked by the driver's own bufferSwitch callback More...

#include <dx_asio_client_device.h>

Inheritance diagram for dx::asio::client::group< device_t >:
Collaboration diagram for dx::asio::client::group< device_t >:

Public Types

typedef settings<device_t>::client client
typedef dx::clock<dx::free_run<dx::event<>>> clock
 the one clock of this group, its source freely selectable
typedef device_t device_t
typedef settings_promoted<device_t, store>::type promoted
typedef settings_promoted<device_t, store>::type promoted
typedef device_t::stream_t stream_t
typedef settings<device_t>::transport transport
 the group's two sides, reached as transport::/client:: members

Public Member Functions

void conclude() noexcept
template<typename... args_t>
 group(args_t&&... args)
void run() override
 the session starts on the registered streams, held until its thread ends

Static Public Member Functions

static std::string key(direction::direction direction, uint32_t)
static std::string key(direction::direction direction, uint32_t strategy)

Public Attributes

listener<dx::listen<std::function<void(const uint32_t &)>>> iosize_listener
 a margin defaulted by the device's iosize (a host's tick is its buffer) reloads with it
promoted safety_offset [direction::directions]
promoted safety_offset [direction::directions]
promoted<uint32_t> start{0}
promoted<bool> started{false}
std::map<decltype(stream_t::target.idx()), std::weak_ptr<stream_t>> streams
 shared stream ownership: central weak reference per stream, guarded by device
promoted sync_strategy
promoted sync_strategy

Protected Member Functions

void discharge() noexcept override
 the thread's last act: the session's streams are released on the thread that visited them
void tick() override
 the plain container has no transport of its own: a bus whose group moves the data overrides this, a group fed from outside (service, kernel, SDK callback) has nothing to do here

Protected Attributes

device_t& device
 also the mutex serializing membership
std::function<void()> flush_hook= []{}
std::function<void()> halt_hook= []{}
std::vector<std::shared_ptr<stream_t>> members
 the session's streams: taken before the thread starts, released at its end - the tick visits them without a lock
dx::stream::clock::monitor* monitor
 device.monitor cached at the session's start: the tick never maps shared memory
std::function<void()> run_hook= []{}
const struct device_t::desc_t::stream* sync_reference
 device.sync_reference cached: the tick never reads the promoted

Detailed Description

template<typename device_t>
class dx::asio::client::group< device_t >

an ASIO client's own streaming group: the underlying SDK driver runs its session, ticked by the driver's own bufferSwitch callback

Member Typedef Documentation

◆ client

◆ clock

the one clock of this group, its source freely selectable

◆ device_t

typedef device_t dx::stream::group<device_t, dx::free_run<dx::event<>>>::device_t
inherited

◆ promoted [1/2]

template<typename device_t, bool store= true>
typedef settings_promoted<device_t,store>::type dx::stream::settings<device_t, store>::promoted
inherited

◆ promoted [2/2]

typedef settings_promoted<device_t,store>::type dx::stream::settings<device_t, store>::promoted
inherited

◆ stream_t

typedef device_t::stream_t dx::stream::group<device_t, dx::free_run<dx::event<>>>::stream_t
inherited

◆ transport

the group's two sides, reached as transport::/client:: members

Constructor & Destructor Documentation

◆ group()

template<typename device_t>
template<typename... args_t>
dx::asio::client::group<device_t>::group(args_t&&... args)
inline

Member Function Documentation

◆ conclude()

◆ discharge()

void dx::stream::group<device_t, dx::free_run<dx::event<>>>::discharge()
inlineoverrideprotectednoexceptinherited

the thread's last act: the session's streams are released on the thread that visited them

◆ key() [1/2]

template<typename device_t, bool store= true>
std::string dx::stream::settings<device_t, store>::client::key(direction::direction direction, uint32_t)
inlinestaticinherited
Here is the caller graph for this function:

◆ key() [2/2]

template<typename device_t, bool store= true>
std::string dx::stream::settings<device_t, store>::transport::key(direction::direction direction, uint32_t strategy)
inlinestaticinherited
Here is the caller graph for this function:

◆ run()

void dx::stream::group<device_t, dx::free_run<dx::event<>>>::run()
inlineoverrideinherited

the session starts on the registered streams, held until its thread ends

◆ tick()

void dx::stream::group<device_t, dx::free_run<dx::event<>>>::tick()
inlineoverrideprotectedinherited

the plain container has no transport of its own: a bus whose group moves the data overrides this, a group fed from outside (service, kernel, SDK callback) has nothing to do here

Member Data Documentation

◆ device

device_t& dx::stream::group<device_t, dx::free_run<dx::event<>>>::device
protectedinherited

also the mutex serializing membership

◆ flush_hook

template<typename object_t>
std::function<void()> dx::stream::control<object_t>::flush_hook= []{}
protectedinherited

◆ halt_hook

template<typename object_t>
std::function<void()> dx::stream::control<object_t>::halt_hook= []{}
protectedinherited

◆ iosize_listener

template<typename device_t, bool store= true>
listener<dx::listen<std::function<void(const uint32_t&)>>> dx::stream::settings<device_t, store>::client::iosize_listener
inherited

a margin defaulted by the device's iosize (a host's tick is its buffer) reloads with it

◆ members

std::vector<std::shared_ptr<stream_t>> dx::stream::group<device_t, dx::free_run<dx::event<>>>::members
protectedinherited

the session's streams: taken before the thread starts, released at its end - the tick visits them without a lock

◆ monitor

device.monitor cached at the session's start: the tick never maps shared memory

◆ run_hook

template<typename object_t>
std::function<void()> dx::stream::control<object_t>::run_hook= []{}
protectedinherited

◆ safety_offset [1/2]

template<typename device_t, bool store= true>
promoted dx::stream::settings<device_t, store>::safety_offset[direction::directions]
inherited

◆ safety_offset [2/2]

promoted dx::stream::settings<device_t, store>::safety_offset[direction::directions]
inherited

◆ start

template<typename object_t>
promoted<uint32_t> dx::stream::control<object_t>::start{0}
inherited

◆ started

template<typename object_t>
promoted<bool> dx::stream::control<object_t>::started{false}
inherited

◆ streams

std::map<decltype(stream_t::target.idx()), std::weak_ptr<stream_t>> dx::stream::group<device_t, dx::free_run<dx::event<>>>::streams
inherited

shared stream ownership: central weak reference per stream, guarded by device

◆ sync_reference

const struct device_t::desc_t::stream* dx::stream::group<device_t, dx::free_run<dx::event<>>>::sync_reference
protectedinherited

device.sync_reference cached: the tick never reads the promoted

◆ sync_strategy [1/2]

template<typename device_t, bool store= true>
promoted dx::stream::settings<device_t, store>::sync_strategy
inherited

◆ sync_strategy [2/2]


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