dxd - dynax driver framework 3.0.2
cross platform open source driver development framework
Loading...
Searching...
No Matches
dx::usb::isoc::session< group_t > Struct Template Reference

the streaming session's tick over a group's pipelines, the same in every environment More...

#include <dx_usb_isoc.h>

Public Member Functions

 session(group_t& group)
uint32_t tick(uint64_t frame, correlation& correlation, int64_t period)

Public Attributes

uint32_t advance{}
 the reference stream's lines the tick before: what a bulk out pipe's device took meanwhile
uint8_t feedback [offsetof(dx::circular, data)+2* sizeof(uint32_t) *max_micro_frames *max_requests]
 the group's feedback: the lines an asynchronous in pipe delivers per micro frame, which an asynchronous out pipe's requests follow a round behind - its lead a round, seeded by every charge; bundled completions swing it around the seed, so its room is two rounds
group_t& group
bool running{}
 a pipe ran this tick: the session's end waits for its pipes to run out
os_result status{}
 the group's last charge: failed, the group rests

Static Public Attributes

static constexpr unsigned int run_out{2* max_requests}
 the frames a session takes to run out at most: a round of the direction stopping first, then one of the other

Detailed Description

template<typename group_t>
struct dx::usb::isoc::session< group_t >

the streaming session's tick over a group's pipelines, the same in every environment

One tick at bus frame frame charges the group as a unit - every pipe once as it stands idle after its start(), a failed charge resting the whole group at its default settings and charging it again every 250 ms, so each attempt reserves the group's bandwidth whole or none -, then moves every charged pipe's data by its pipeline and runs the clock domain by the reference stream's advance. The environment's group supplies its thread and timer, and:

  • each(f): visits every isoc pipe of the session as f(idx, pipe), idx its stream's index - the pipes the session charges, rests and moves
  • reference: the stream whose advance drives the clock domain, by the index each() names it
  • os_result readout(uint64_t& frame, int64_t& timestamp) / int64_t now(): the correlation's source
  • void tick(uint32_t samples, uint64_t frame, int64_t timestamp): the clock domain's advance
  • bool locking(): the device's clock is still locking to a sample rate set (desc::clock::lock_delay)
  • order: the direction the device stops first (desc::start_stop_order): the other one runs on until it ran out
  • void rest(): every pipe's requests ended, its slots its own again (charged cleared), its interface at the default setting

Constructor & Destructor Documentation

◆ session()

template<typename group_t>
dx::usb::isoc::session<group_t>::session(group_t& group)
inline
Here is the call graph for this function:

Member Function Documentation

◆ tick()

template<typename group_t>
uint32_t dx::usb::isoc::session<group_t>::tick(uint64_t frame, correlation& correlation, int64_t period)
inline
Here is the call graph for this function:

Member Data Documentation

◆ advance

template<typename group_t>
uint32_t dx::usb::isoc::session<group_t>::advance{}

the reference stream's lines the tick before: what a bulk out pipe's device took meanwhile

◆ feedback

template<typename group_t>
uint8_t dx::usb::isoc::session<group_t>::feedback[offsetof(dx::circular, data)+2 *sizeof(uint32_t) *max_micro_frames *max_requests]

the group's feedback: the lines an asynchronous in pipe delivers per micro frame, which an asynchronous out pipe's requests follow a round behind - its lead a round, seeded by every charge; bundled completions swing it around the seed, so its room is two rounds

◆ group

template<typename group_t>
group_t& dx::usb::isoc::session<group_t>::group

◆ run_out

template<typename group_t>
unsigned int dx::usb::isoc::session<group_t>::run_out{2* max_requests}
staticconstexpr

the frames a session takes to run out at most: a round of the direction stopping first, then one of the other

◆ running

template<typename group_t>
bool dx::usb::isoc::session<group_t>::running{}

a pipe ran this tick: the session's end waits for its pipes to run out

◆ status

template<typename group_t>
os_result dx::usb::isoc::session<group_t>::status{}

the group's last charge: failed, the group rests


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