dxd - dynax driver framework 2.6.0d204
cross platform open source driver development framework
Loading...
Searching...
No Matches
dx::usb::stream::pipe< device_t, circular_t, stream_t > Class Template Reference

#include <dx_usb_stream_pipe.h>

Inheritance diagram for dx::usb::stream::pipe< device_t, circular_t, stream_t >:
Collaboration diagram for dx::usb::stream::pipe< device_t, circular_t, stream_t >:

Classes

struct  cache
struct  isoc

Public Types

typedef struct device_t::desc::stream desc
typedef device<> device_t
typedef device<> device_t
typedef event< kernelevent_t
enum  type

Public Member Functions

pipeabort () try
streamattach (channel_t **[2], uint64_t[(channels+63)/64])
virtual void callback ()
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.
 dx_catchall_rethrow () os_result status() const noexcept
 dx_catchall_rethrow (;,"endpoint:%x interface:%d setting:%d", endpoint.address, endpoint.interface, endpoint.setting) pipe &max_frame_size(uint32_t frame_size)
void exception (const class exception &exception, bool filtered=false) const noexcept override
DX_PRAGMA_IGNORE_RETURN_VALUE_END void flush () override
void launch () override try
 operator dx::circular * () const noexcept
 operator os_event () noexcept
dx::circularoperator-> () const noexcept
pipeoperator<< (const data_t &data)
 synchronous USB write request
pipeoperator>> (data_t &data)
 synchronous USB read request
DX_PRAGMA_IGNORE_RETURN_VALUE_END eventreset (uint64_t count=0) override try
DX_PRAGMA_IGNORE_RETURN_VALUE_END eventreset (uint64_t count=0) override try
eventsignal (uint64_t count=1) override try
eventsignal (uint64_t count=1) override try
DX_PRAGMA_IGNORE_RETURN_VALUE_END uint64_t signalled () const
DX_PRAGMA_IGNORE_RETURN_VALUE_END uint64_t signalled () const
virtual unsigned int stop (bool force=false) noexcept
virtual unsigned int stop (bool force=false) noexcept
virtual bool submit (dx::stream::encoder::index::type, unsigned int, uint8_t)
 submit encoder stage to device return true if successfully submitted; if false is returned the encode state machine will not update the stage value (i.e. if the stage can't be submitted during streaming pause), given the chance to submit the stage at start().
pipesubmit (const request< data_t > &request) const try
 standard request to pipe
DX_PRAGMA_IGNORE_RETURN_VALUE_END eventwait (bool reset=false) override try
DX_PRAGMA_IGNORE_RETURN_VALUE_END eventwait (bool reset=false) override try
DX_PRAGMA_IGNORE_RETURN_VALUE_END bool wait (const std::chrono::duration< rep_t, period_t > &timeout, bool reset=false) try
DX_PRAGMA_IGNORE_RETURN_VALUE_END bool wait (const std::chrono::duration< rep_t, period_t > &timeout, bool reset=false) try

Public Attributes

const usb::endpoint::attributesattributes
std::deque< union audio::descriptor::endpointaudio
class buffer
buffer
event_t data [direction::directions]
 event signalising data arrival(in) or draining(out)
uint32_t granularity
::WINUSB_INTERFACE_HANDLE handle
const decltype(desc::target.idx()) id
interface & interface
uint32_t latency
bool launched
bool launched
uint32_t linesize
unsigned int micro_frames
dx::stream::clock::monitormonitor
std::deque< std::function< void(control &)> > notify
std::deque< std::function< void(control &)> > notify
decltype(device_t::samplerate) & samplerate
std::atomic< unsigned int > started
std::atomic< unsigned int > started

Static Public Attributes

static constexpr auto scope

Protected Member Functions

 __dx_catchall (this->started=0;std::cerr<< dx::exception(&exception, exception.error, __PRETTY_FUNCTION__, __FILE__, __LINE__)<< std::endl;,) public
 creates this->circular streaming backing store and frame buffers
 __dx_catchall (this->started=0;std::cerr<< dx::exception(&exception, exception.error, __PRETTY_FUNCTION__, __FILE__, __LINE__)<< std::endl;,) void pump_in() noexcept try
 data driven streaming in
 __dx_catchall (this->started=0;std::cerr<< dx::exception(&exception, exception.error, __PRETTY_FUNCTION__, __FILE__, __LINE__)<< std::endl;,) void pump_out() noexcept try
 data driven streaming out
void alloc (size_t=0, bool free=true) override
 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)
 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)
 dx_catchall_handler (this,) ~pipe() override
float encoder (dx::stream::encoder::index::type type, unsigned int index) const override
bool encoder (dx::stream::encoder::index::type type, unsigned int index, float value) override
void exception (const dx::exception &exception, bool filtered=false) const noexcept override
 notification exception handler
void free () noexcept override
DX_PRAGMA_IGNORE_RETURN_VALUE_END void halt () noexcept override
void info (std::ostream &os) noexcept override try
 log object class information
void initialize (uint32_t packet_size, uint32_t micro_frames)
void initialize (uint32_t samplerate, uint32_t line_size, uint32_t micro_frames, bool implicit_feedback)
void initialize () override
void received (os_result status, size_t size) override try
 virtual async callbacks
DX_PRAGMA_IGNORE_RETURN_VALUE_END void received (os_result status, size_t size, int64_t timestamp, usb::isoc::frame *frame) override try
 async isoc read callback
bool start (uint64_t frame, unsigned int starting=1) override try
DX_PRAGMA_IGNORE_RETURN_VALUE_END void transmitted (os_result status, size_t size) override try
 async write callback
DX_PRAGMA_IGNORE_RETURN_VALUE_END void transmitted (os_result status, size_t size, int64_t timestamp, usb::isoc::frame *) override try
 async isoc write callback
DX_PRAGMA_IGNORE_RETURN_VALUE_END void watchdog () noexcept try
 observer watchdog thread: for clock driven endpoints

Protected Attributes

struct { 
address
struct { 
   volatile uint32_t   completion 
   os_result   status 
 streaming status for observer thread More...
   uint32_t   submit 
async
struct dx::usb::stream::pipe::cache cache
dx::circularcircular
device<> & device
device<> & device
uint8_t idx
struct dx::usb::stream::pipe::isoc isoc
std::recursive_mutex start_stop_in_progress
 start/stop operation in progress
std::recursive_mutex start_stop_in_progress
 start/stop operation in progress
struct { 
   struct { 
      unsigned int   ticks 
      struct { 
         unsigned int   count 
      }   transaction
   }   cycle
sync
struct dx::usb::audio::isoc::cycle::tick * tick = nullptr
struct { 
   ::WINUSB_INTERFACE_HANDLE   handle 
winusb

Friends

class pause

Member Typedef Documentation

◆ desc

typedef struct device_t::desc::stream dx::stream::stream< device_t, dx::circular, usb::pipe< device_t >, event<kernel> >::desc
inherited

◆ device_t [1/2]

typedef device<> dx::stream::object< device<> >::device_t
inherited

◆ device_t [2/2]

typedef device<> dx::stream::object< device<> >::device_t
inherited

◆ event_t

Member Enumeration Documentation

◆ type

Member Function Documentation

◆ __dx_catchall() [1/3]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
dx::usb::stream::pipe< device_t, circular_t, stream_t >::__dx_catchall ( this-> started = 0; std::cerr<< dx::exception(&exceptionexception.error__PRETTY_FUNCTION__, __FILE__, __LINE__)<< std::endl;)
inlineprotected

creates this->circular streaming backing store and frame buffers

◆ __dx_catchall() [2/3]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
dx::usb::stream::pipe< device_t, circular_t, stream_t >::__dx_catchall ( this-> started = 0; std::cerr<< dx::exception(&exceptionexception.error__PRETTY_FUNCTION__, __FILE__, __LINE__)<< std::endl;)
inlineprotectednoexcept

data driven streaming in

postponed

◆ __dx_catchall() [3/3]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
dx::usb::stream::pipe< device_t, circular_t, stream_t >::__dx_catchall ( this-> started = 0; std::cerr<< dx::exception(&exceptionexception.error__PRETTY_FUNCTION__, __FILE__, __LINE__)<< std::endl;)
inlineprotectednoexcept

data driven streaming out

◆ abort()

pipe & dx::usb::platform::pipe< device<>, interface >::abort ( )
inlineinherited
Here is the caller graph for this function:

◆ alloc()

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
void dx::usb::stream::pipe< device_t, circular_t, stream_t >::alloc ( size_t = 0,
bool free = true )
inlineoverrideprotectedvirtual

generates isoc cycle metrics from sample rate,

requests buffers to fit at least 3x max iosize with isoc cycle size granularity

update max frame size

Todo
reset max frame size when pipe is closed

Reimplemented from dx::stream::stream< device_t, dx::circular, usb::pipe< device_t > >.

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

◆ attach()

stream & dx::stream::stream< device_t, dx::circular, usb::pipe< device_t >, event<kernel> >::attach ( channel_t ** [2],
uint64_t [(channels+63)/64] )
inlineinherited

◆ callback()

virtual void dx::event< kernel >::callback ( )
inlinevirtualinherited

The default implementation is based on event<user> which is signalled when triggered via callback() from kernel. This is to achieve compatibility with Windows events. Its probably more adequate to overwrite callback() and do the work here if feasible.

◆ catch() [1/15]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
dx::usb::stream::pipe< device_t, circular_t, stream_t >::catch ( ...)
inlineprotected

◆ catch() [2/15]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
dx::usb::stream::pipe< device_t, circular_t, stream_t >::catch ( ...)
inlineprotected

◆ catch() [3/15]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
dx::usb::stream::pipe< device_t, circular_t, stream_t >::catch ( ...)
inlineprotected

◆ catch() [4/15]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
dx::usb::stream::pipe< device_t, circular_t, stream_t >::catch ( ...)
inlineprotected

◆ catch() [5/15]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
dx::usb::stream::pipe< device_t, circular_t, stream_t >::catch ( ...)
inlineprotected

◆ catch() [6/15]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::usb::stream::pipe< device_t, circular_t, stream_t >::catch ( const dx::exception & __dx_exception)
inlineprotected

◆ catch() [7/15]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::usb::stream::pipe< device_t, circular_t, stream_t >::catch ( const dx::exception & __dx_exception)
inlineprotected

◆ catch() [8/15]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::usb::stream::pipe< device_t, circular_t, stream_t >::catch ( const dx::exception & __dx_exception)
inlineprotected

◆ catch() [9/15]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::usb::stream::pipe< device_t, circular_t, stream_t >::catch ( const dx::exception & __dx_exception)
inlineprotected

◆ catch() [10/15]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::usb::stream::pipe< device_t, circular_t, stream_t >::catch ( const dx::exception & __dx_exception)
inlineprotected

◆ catch() [11/15]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
dx::usb::stream::pipe< device_t, circular_t, stream_t >::catch ( const std::exception & __std_exception)
inlineprotected

◆ catch() [12/15]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
dx::usb::stream::pipe< device_t, circular_t, stream_t >::catch ( const std::exception & __std_exception)
inlineprotected

◆ catch() [13/15]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
dx::usb::stream::pipe< device_t, circular_t, stream_t >::catch ( const std::exception & __std_exception)
inlineprotected

◆ catch() [14/15]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
dx::usb::stream::pipe< device_t, circular_t, stream_t >::catch ( const std::exception & __std_exception)
inlineprotected

◆ catch() [15/15]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
dx::usb::stream::pipe< device_t, circular_t, stream_t >::catch ( const std::exception & __std_exception)
inlineprotected

◆ conclude()

void dx::usb::pipe< device_t >::conclude ( )
inlineoverridevirtualnoexceptinherited

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.

Reimplemented from dx::object.

◆ dx_catchall_handler()

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
dx::usb::stream::pipe< device_t, circular_t, stream_t >::dx_catchall_handler ( this )
inlineoverrideprotected

◆ dx_catchall_rethrow() [1/2]

dx::usb::platform::pipe< device<>, interface >::dx_catchall_rethrow ( ) const
inlinenoexceptinherited

◆ dx_catchall_rethrow() [2/2]

dx::usb::pipe< device_t >::dx_catchall_rethrow ( ; ,
"endpoint:%x interface:%d setting:%d" ,
endpoint. address,
endpoint. interface,
endpoint. setting ) &
inlineinherited

◆ encoder() [1/2]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
float dx::usb::stream::pipe< device_t, circular_t, stream_t >::encoder ( dx::stream::encoder::index::type type,
unsigned int index ) const
inlineoverrideprotected
Here is the call graph for this function:

◆ encoder() [2/2]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
bool dx::usb::stream::pipe< device_t, circular_t, stream_t >::encoder ( dx::stream::encoder::index::type type,
unsigned int index,
float value )
inlineoverrideprotectedvirtual

Reimplemented from dx::stream::stream< device_t, dx::circular, usb::pipe< device_t > >.

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

◆ exception() [1/2]

void dx::stream::stream< device_t, dx::circular, usb::pipe< device_t >, event<kernel> >::exception ( const class exception & exception,
bool filtered = false ) const
inlineoverridenoexceptinherited

◆ exception() [2/2]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
void dx::usb::stream::pipe< device_t, circular_t, stream_t >::exception ( const dx::exception & exception,
bool filtered = false ) const
inlineoverrideprotectedvirtualnoexcept

notification exception handler

Implements dx::object.

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

◆ flush()

DX_PRAGMA_IGNORE_RETURN_VALUE_END void dx::stream::stream< device_t, dx::circular, usb::pipe< device_t >, event<kernel> >::flush ( )
inlineoverridevirtualinherited

◆ free()

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
void dx::usb::stream::pipe< device_t, circular_t, stream_t >::free ( )
inlineoverrideprotectedvirtualnoexcept

Reimplemented from dx::stream::stream< device_t, dx::circular, usb::pipe< device_t > >.

Here is the caller graph for this function:

◆ halt()

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
DX_PRAGMA_IGNORE_RETURN_VALUE_END void dx::usb::stream::pipe< device_t, circular_t, stream_t >::halt ( )
inlineoverrideprotectedvirtualnoexcept

Reimplemented from dx::stream::stream< device_t, dx::circular, usb::pipe< device_t > >.

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

◆ info()

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
void dx::usb::stream::pipe< device_t, circular_t, stream_t >::info ( std::ostream & os)
inlineoverrideprotectedvirtualnoexcept

log object class information

Reimplemented from dx::stream::stream< device_t, dx::circular, usb::pipe< device_t > >.

Here is the call graph for this function:

◆ initialize() [1/3]

void dx::usb::audio::isoc::cycle::initialize ( uint32_t packet_size,
uint32_t micro_frames )
inlineinherited

◆ initialize() [2/3]

void dx::usb::audio::isoc::cycle::initialize ( uint32_t samplerate,
uint32_t line_size,
uint32_t micro_frames,
bool implicit_feedback )
inlineinherited
Here is the call graph for this function:

◆ initialize() [3/3]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
void dx::usb::stream::pipe< device_t, circular_t, stream_t >::initialize ( )
inlineoverrideprotectedvirtual

Reimplemented from dx::stream::stream< device_t, dx::circular, usb::pipe< device_t > >.

Here is the call graph for this function:

◆ launch()

void dx::stream::stream< device_t, dx::circular, usb::pipe< device_t >, event<kernel> >::launch ( )
inlineoverridevirtualinherited

Reimplemented from dx::object.

◆ operator dx::circular *()

dx::stream::stream< device_t, dx::circular, usb::pipe< device_t >, event<kernel> >::operator dx::circular * ( ) const
inlinenoexceptinherited

◆ operator os_event()

dx::event< kernel >::operator os_event ( )
inlinenoexceptinherited

◆ operator->()

dx::circular * dx::stream::stream< device_t, dx::circular, usb::pipe< device_t >, event<kernel> >::operator-> ( ) const
inlinenoexceptinherited

◆ operator<<()

pipe & dx::usb::pipe< device_t >::operator<< ( const data_t & data)
inlineinherited

synchronous USB write request

◆ operator>>()

pipe & dx::usb::pipe< device_t >::operator>> ( data_t & data)
inlineinherited

synchronous USB read request

◆ received() [1/2]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
void dx::usb::stream::pipe< device_t, circular_t, stream_t >::received ( os_result ,
size_t  )
inlineoverrideprotectedvirtual

virtual async callbacks

Todo
evaluate non-transaction size transmit handling
Todo
log async write callback

generates timestamp

Reimplemented from dx::usb::platform::pipe< device_t, interface >.

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

◆ received() [2/2]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
DX_PRAGMA_IGNORE_RETURN_VALUE_END void dx::usb::stream::pipe< device_t, circular_t, stream_t >::received ( os_result status,
size_t size,
int64_t timestamp,
usb::isoc::frame * frame )
inlineoverrideprotected

async isoc read callback

Todo
usb::stream::pipe::received(): evaluate checking for valid sizes
Here is the call graph for this function:

◆ reset() [1/2]

DX_PRAGMA_IGNORE_RETURN_VALUE_END event & dx::event< user >::reset ( uint64_t count = 0)
inlineoverrideinherited

◆ reset() [2/2]

DX_PRAGMA_IGNORE_RETURN_VALUE_END event & dx::event< user >::reset ( uint64_t count = 0)
inlineoverrideinherited

◆ signal() [1/2]

event & dx::event< user >::signal ( uint64_t count = 1)
inlineoverrideinherited
Here is the caller graph for this function:

◆ signal() [2/2]

event & dx::event< user >::signal ( uint64_t count = 1)
inlineoverrideinherited

◆ signalled() [1/2]

DX_PRAGMA_IGNORE_RETURN_VALUE_END uint64_t dx::event< user >::signalled ( ) const
inlineinherited

◆ signalled() [2/2]

DX_PRAGMA_IGNORE_RETURN_VALUE_END uint64_t dx::event< user >::signalled ( ) const
inlineinherited

◆ start()

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
bool dx::usb::stream::pipe< device_t, circular_t, stream_t >::start ( uint64_t ,
unsigned int starting = 1 )
inlineoverrideprotectedvirtual

result indicates if start changed the state.

estimate upcoming timestamp

scheduling all but one isoc requests at least 1 sequence ahead; aligned to whole cycles,

Reimplemented from dx::stream::stream< device_t, dx::circular, usb::pipe< device_t > >.

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

◆ stop() [1/2]

virtual unsigned int dx::stream::control< stream::object< device<> > >::stop ( bool force = false)
inlinevirtualnoexceptinherited

result indicates the amount of stopped start references

◆ stop() [2/2]

virtual unsigned int dx::stream::control< dx::stream::object< device<> > >::stop ( bool force = false)
inlinevirtualnoexceptinherited

result indicates the amount of stopped start references

◆ submit() [1/2]

submit encoder stage to device return true if successfully submitted; if false is returned the encode state machine will not update the stage value (i.e. if the stage can't be submitted during streaming pause), given the chance to submit the stage at start().

◆ submit() [2/2]

pipe & dx::usb::platform::pipe< device<>, interface >::submit ( const request< data_t > & request) const
inlineinherited

standard request to pipe

◆ transmitted() [1/2]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
DX_PRAGMA_IGNORE_RETURN_VALUE_END void dx::usb::stream::pipe< device_t, circular_t, stream_t >::transmitted ( os_result status,
size_t size )
inlineoverrideprotectedvirtual

async write callback

Todo
evaluate non-transaction size transmit handling
Todo
log async write callback
Todo
evaluate transaction size vs. ring buffer read size
Todo
USB HW clock support: hardcoded to USB/out - needs to be handled by clock class

generates timestamp

Reimplemented from dx::usb::platform::pipe< device_t, interface >.

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

◆ transmitted() [2/2]

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
DX_PRAGMA_IGNORE_RETURN_VALUE_END void dx::usb::stream::pipe< device_t, circular_t, stream_t >::transmitted ( os_result status,
size_t size,
int64_t timestamp,
usb::isoc::frame *  )
inlineoverrideprotected

async isoc write callback

Todo
usb::stream::pipe::received(): evaluate checking for valid sizes
Todo
USB HW clock support: hardcoded to USB/out - needs to be handled by clock class
Here is the call graph for this function:

◆ wait() [1/4]

DX_PRAGMA_IGNORE_RETURN_VALUE_END event & dx::event< user >::wait ( bool reset = false)
inlineoverrideinherited

◆ wait() [2/4]

DX_PRAGMA_IGNORE_RETURN_VALUE_END event & dx::event< user >::wait ( bool reset = false)
inlineoverrideinherited

◆ wait() [3/4]

DX_PRAGMA_IGNORE_RETURN_VALUE_END bool dx::event< user >::wait ( const std::chrono::duration< rep_t, period_t > & timeout,
bool reset = false )
inlineinherited

wait with duration timeout returns true: signalled false: timed out

◆ wait() [4/4]

DX_PRAGMA_IGNORE_RETURN_VALUE_END bool dx::event< user >::wait ( const std::chrono::duration< rep_t, period_t > & timeout,
bool reset = false )
inlineinherited

wait with duration timeout returns true: signalled false: timed out

◆ watchdog()

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
DX_PRAGMA_IGNORE_RETURN_VALUE_END void dx::usb::stream::pipe< device_t, circular_t, stream_t >::watchdog ( )
inlineprotectednoexcept

observer watchdog thread: for clock driven endpoints

Todo
usb::stream::pipe::thread(): evaluate to bail out @ async.status
Here is the call graph for this function:
Here is the caller graph for this function:

◆ pause

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
friend class pause
friend

Member Data Documentation

◆ [struct]

struct { ... } dx::usb::platform::pipe< device<>, interface >::address

◆ [struct]

struct { ... } dx::usb::stream::pipe< device_t, circular_t, stream_t >::async

◆ attributes

const usb::endpoint::attributes& dx::usb::pipe< device_t >::attributes
inherited

◆ audio

◆ [class]

class { ... } ::buffer dx::usb::platform::pipe< device<>, interface >::buffer

◆ cache

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
struct dx::usb::stream::pipe::cache dx::usb::stream::pipe< device_t, circular_t, stream_t >::cache
protected

◆ circular

◆ completion

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
volatile uint32_t dx::usb::stream::pipe< device_t, circular_t, stream_t >::completion

◆ count

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
unsigned int dx::usb::stream::pipe< device_t, circular_t, stream_t >::count

◆ [struct]

struct { ... } dx::usb::stream::pipe< device_t, circular_t, stream_t >::cycle

◆ data

event_t dx::stream::stream< device_t, dx::circular, usb::pipe< device_t >, event<kernel> >::data[direction::directions]
inherited

event signalising data arrival(in) or draining(out)

◆ device [1/2]

device<>& dx::stream::object< device<> >::device
protectedinherited

◆ device [2/2]

device<>& dx::stream::object< device<> >::device
protectedinherited

◆ granularity

◆ handle

::WINUSB_INTERFACE_HANDLE dx::usb::platform::pipe< device<>, interface >::handle
inherited

◆ id

const decltype(desc::target.idx()) dx::stream::stream< device_t, dx::circular, usb::pipe< device_t >, event<kernel> >::id
inherited

◆ idx

uint8_t dx::usb::platform::pipe< device<>, interface >::idx
protectedinherited

◆ interface

interface & dx::usb::platform::pipe< device<>, interface >::interface
inherited

◆ isoc

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
struct dx::usb::stream::pipe::isoc dx::usb::stream::pipe< device_t, circular_t, stream_t >::isoc
protected

◆ latency

◆ launched [1/2]

bool dx::object::launched
inherited

◆ launched [2/2]

bool dx::object::launched
inherited

◆ linesize

◆ micro_frames

unsigned int dx::usb::platform::pipe< device<>, interface >::micro_frames
inherited

◆ monitor

◆ notify [1/2]

std::deque<std::function<void(control&)> > dx::stream::control< stream::object< device<> > >::notify
inherited

◆ notify [2/2]

std::deque<std::function<void(control&)> > dx::stream::control< dx::stream::object< device<> > >::notify
inherited

◆ samplerate

decltype(device_t::samplerate) & dx::stream::stream< device_t, dx::circular, usb::pipe< device_t >, event<kernel> >::samplerate
inherited

◆ scope

constexpr auto dx::event< kernel >::scope
staticconstexprinherited

◆ start_stop_in_progress [1/2]

std::recursive_mutex dx::stream::control< stream::object< device<> > >::start_stop_in_progress
protectedinherited

start/stop operation in progress

◆ start_stop_in_progress [2/2]

std::recursive_mutex dx::stream::control< dx::stream::object< device<> > >::start_stop_in_progress
protectedinherited

start/stop operation in progress

◆ started [1/2]

std::atomic<unsigned int> dx::stream::control< stream::object< device<> > >::started
inherited

◆ started [2/2]

std::atomic<unsigned int> dx::stream::control< dx::stream::object< device<> > >::started
inherited

◆ status

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
os_result dx::usb::stream::pipe< device_t, circular_t, stream_t >::status

streaming status for observer thread

◆ submit

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
uint32_t dx::usb::stream::pipe< device_t, circular_t, stream_t >::submit

◆ [struct]

struct { ... } dx::usb::stream::pipe< device_t, circular_t, stream_t >::sync

◆ tick

struct dx::usb::audio::isoc::cycle::tick* dx::usb::audio::isoc::cycle::tick = nullptr
inherited

◆ ticks

template<typename device_t, typename circular_t = dx::circular, template< typename ... > typename stream_t = dx::stream::stream>
unsigned int dx::usb::stream::pipe< device_t, circular_t, stream_t >::ticks

◆ [struct]

struct { ... } dx::usb::stream::pipe< device_t, circular_t, stream_t >::transaction

◆ [struct]

struct { ... } dx::usb::platform::pipe< device<>, interface >::winusb

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.