dxd - dynax driver framework 2.7.0d222
cross platform open source driver development framework
Loading...
Searching...
No Matches
dx::usb::platform::pipe< device_t, interface_t > Class Template Referenceabstract

#include <dx_usb_device_platform.h>

Inheritance diagram for dx::usb::platform::pipe< device_t, interface_t >:
Collaboration diagram for dx::usb::platform::pipe< device_t, interface_t >:

Classes

struct  isoc

Public Types

typedef _device_t device_t
typedef _device_t device_t
enum class  type : uint8_t {
  control =::kUSBControl , isoc = ::kUSBIsoc , bulk = ::kUSBBulk , irq = ::kUSBInterrupt ,
  control =::UsbdPipeTypeControl , isoc = ::UsbdPipeTypeIsochronous , bulk = ::UsbdPipeTypeBulk , irq = ::UsbdPipeTypeInterrupt
}
enum class  type : unsigned char {
  control =::kUSBControl , isoc = ::kUSBIsoc , bulk = ::kUSBBulk , irq = ::kUSBInterrupt ,
  control =::UsbdPipeTypeControl , isoc = ::UsbdPipeTypeIsochronous , bulk = ::UsbdPipeTypeBulk , irq = ::UsbdPipeTypeInterrupt
}

Public Member Functions

pipeabort () try
virtual void callback ()
 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)
 catch (const std::exception &__std_exception)
 catch (const std::exception &__std_exception)
 catch (const std::exception &__std_exception)
 catch (const std::exception &__std_exception)
pipedrain (std::chrono::milliseconds timeout=std::chrono::milliseconds(250)) noexcept
 waits for already-submitted requests to complete on their own, without cancelling them
 dx_catchall_rethrow () os_result status() const noexcept
 dx_catchall_rethrow (try {const_cast< pipe * >(this) ->clear();} dx_catchall_handler(this,), "idx:%d size:%lld", idx, sizeof request) template< typename data_t > data_t submit(const control &control) const
 control request to pipe
virtual void exception (const exception &exception, bool filtered=false) const noexcept=0
 notification exception handler
void info (std::ostream &os) noexcept override try
void info (std::ostream &os) noexcept override try
virtual eventinitialize (bool signalled=false)
virtual eventinitialize (const std::string &, bool signalled=false)
 operator const os_event () const noexcept
 operator os_event () noexcept
 operator::HANDLE () const noexcept
 pipe (device_t &device, const endpoint &endpoint)
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
supersignal (uint64_t count=1) override try
supersignal (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 bool start (uint64_t=0, unsigned int starting=1)
virtual bool start (uint64_t=0, unsigned int starting=1)
virtual unsigned int stop (bool force=false) noexcept
virtual unsigned int stop (bool force=false) noexcept
template<typename data_t>
pipesubmit (const request< data_t > &request) const try
 standard request to pipe
bool try_conclude () noexcept
 atomically conclude()s if currently launched; returns whether this call did it
bool try_conclude () noexcept
 atomically conclude()s if currently launched; returns whether this call did it
bool try_launch ()
 atomically launch()es if not already launched; returns whether this call did it
bool try_launch ()
 atomically launch()es if not already launched; returns whether this call did it
DX_PRAGMA_IGNORE_RETURN_VALUE_END superwait (bool reset=false) override try
DX_PRAGMA_IGNORE_RETURN_VALUE_END superwait (bool reset=false) override try
template<typename rep_t, typename period_t>
DX_PRAGMA_IGNORE_RETURN_VALUE_END bool wait (const std::chrono::duration< rep_t, period_t > &timeout, bool reset=false) try
template<typename rep_t, typename period_t>
DX_PRAGMA_IGNORE_RETURN_VALUE_END bool wait (const std::chrono::duration< rep_t, period_t > &timeout, bool reset=false) try

Public Attributes

interface_t & interface
std::atomic< bool > launched {}
std::atomic< bool > launched {}
std::deque< std::function< void(control &)> > notify
std::deque< std::function< void(control &)> > notify
std::atomic< unsigned int > started
std::atomic< unsigned int > started
enum dx::usb::platform::pipe::type type

Static Public Attributes

static constexpr auto scope = kernel

Protected Member Functions

pipeabort () try
virtual void conclude () noexcept
 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. Called only through try_conclude() - never call this directly from outside the class hierarchy.
pipedrain (std::chrono::milliseconds timeout=std::chrono::milliseconds(250)) noexcept
 waits for already-submitted requests to complete on their own, without cancelling them
 dx_catchall_handler (this,) public
 dx_catchall_rethrow () os_result status() const noexcept
 dx_catchall_rethrow () pipe &max_frame_size(unsigned int frame_size)
 dx_catchall_rethrow () uint64_t frame() try
 dx_catchall_rethrow (try {clear();} dx_catchall(), "handle:%p idx:%d EP:%02x data:%p size:%lld", winusb.handle, idx, address, data, size) pipe &receive(void *data
 asynchronous USB isoc read request WinUSB limitation no microframe support only multiple of max package size requests allowed, even if only submiting a single package https://docs.microsoft.com/en-us/windows/win32/api/winusb/nf-winusb-winusb_readisochpipe is wrong!
 dx_catchall_rethrow (try {clear();} dx_catchall(), "handle:%p idx:%d EP:%02x data:%p size:%lld", winusb.handle, idx, address, data, size) pipe &transmit(const void *data
 asynchronous USB write request
 dx_catchall_rethrow (try {clear();} dx_catchall(), "handle:%p idx:%d EP:%02x data:%p size:%lld", winusb.handle, idx, address, data, size) template< typename data_t > pipe &operator<<(const data_t &data)
 dx_catchall_rethrow (try {clear();} dx_catchall(), "handle:%p idx:%d EP:%02x data:%p size:%lld", winusb.handle, idx, address, data, size) template< typename data_t > pipe &operator>>(data_t &data)
 dx_catchall_rethrow (try {clear();} dx_catchall(), "idx:%d EP:%02x", idx, address) pipe &clear() try
 dx_pass (rx==tx? overflow:ok, "too manny (%d) outstanding asynchronous transactions for endpoint %x", max, address)
virtual void flush ()
virtual void flush ()
void halt () noexcept override
 async IO thread control (required for Windows compatibility)
void halt () noexcept override try
 async IO thread control: joins the completion thread once this pipe's last start/stop reference is gone
 if (tx==max) tx=0
virtual void launch ()
 launch notification: object mounted and ready to use. Called only through try_launch() - never call this directly from outside the class hierarchy.
piperead (void *data, size_t size) try
 synchronous USB read request
pipereceive (void *data, size_t size) try
 asynchronous USB read request
virtual void received (os_result, size_t)
 virtual async callbacks
virtual void received (os_result, size_t)
 virtual async callbacks
virtual void received (os_result, size_t, int64_t, usb::isoc::frame *)
virtual void received (os_result, size_t, int64_t, usb::isoc::frame *)
virtual void transmitted (os_result, size_t)
virtual void transmitted (os_result, size_t)
virtual void transmitted (os_result, size_t, int64_t, usb::isoc::frame *)
virtual void transmitted (os_result, size_t, int64_t, usb::isoc::frame *)
pipewrite (const void *data, size_t size) try
 synchronous USB write request
 ~pipe () override

Protected Attributes

struct { 
address
uint8_t address = 0
_device_t & device
_device_t & device
uint64_t ::USBD_ISO_PACKET_DESCRIPTOR * frame
uint8_t idx = 0
struct { 
   class buffer
   }   buffer
   unsigned int   micro_frames = 0 
isoc
struct dx::usb::platform::pipe::isoc isoc
::HANDLE process = ::GetCurrentProcess()
uint64_tsequence
std::recursive_mutex start_stop_in_progress
 start/stop operation in progress
std::recursive_mutex start_stop_in_progress
 start/stop operation in progress
return * this
size_t size try
struct { 
   ::WINUSB_INTERFACE_HANDLE   handle 
winusb

Member Typedef Documentation

◆ device_t [1/2]

template<typename _device_t>
typedef _device_t dx::stream::object< _device_t >::device_t
inherited

◆ device_t [2/2]

template<typename _device_t>
typedef _device_t dx::stream::object< _device_t >::device_t
inherited

Member Enumeration Documentation

◆ type [1/2]

template<typename device_t, typename interface_t>
enum class enum dx::usb::platform::pipe::type dx::usb::platform::pipe< device_t, interface_t >::type
strong
Enumerator
control 
isoc 
bulk 
irq 
control 
isoc 
bulk 
irq 

◆ type [2/2]

template<typename device_t, typename interface_t>
enum class dx::usb::platform::pipe::type : unsigned char
strong
Enumerator
control 
isoc 
bulk 
irq 
control 
isoc 
bulk 
irq 

Constructor & Destructor Documentation

◆ ~pipe()

template<typename device_t, typename interface_t>
dx::usb::platform::pipe< device_t, interface_t >::~pipe ( )
inlineoverrideprotected

◆ pipe()

template<typename device_t, typename interface_t>
dx::usb::platform::pipe< device_t, interface_t >::pipe ( device_t & device,
const endpoint & endpoint )
inline

Member Function Documentation

◆ abort() [1/2]

template<typename device_t, typename interface_t>
pipe & dx::usb::platform::pipe< device_t, interface_t >::abort ( )
inline

◆ abort() [2/2]

template<typename device_t, typename interface_t>
pipe & dx::usb::platform::pipe< device_t, interface_t >::abort ( )
inlineprotected

◆ 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.

Here is the call graph for this function:

◆ catch() [1/12]

dx::event< user >::catch ( ...)
inlineinherited

◆ catch() [2/12]

dx::event< user >::catch ( ...)
inlineinherited

◆ catch() [3/12]

dx::event< user >::catch ( ...)
inlineinherited

◆ catch() [4/12]

dx::event< user >::catch ( ...)
inlineinherited

◆ catch() [5/12]

DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::event< user >::catch ( const dx::exception & __dx_exception)
inlineinherited

◆ catch() [6/12]

DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::event< user >::catch ( const dx::exception & __dx_exception)
inlineinherited

◆ catch() [7/12]

DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::event< user >::catch ( const dx::exception & __dx_exception)
inlineinherited

◆ catch() [8/12]

DX_PRAGMA_IGNORE_RETURN_VALUE_BEGIN dx::event< user >::catch ( const dx::exception & __dx_exception)
inlineinherited

◆ catch() [9/12]

dx::event< user >::catch ( const std::exception & __std_exception)
inlineinherited

◆ catch() [10/12]

dx::event< user >::catch ( const std::exception & __std_exception)
inlineinherited

◆ catch() [11/12]

dx::event< user >::catch ( const std::exception & __std_exception)
inlineinherited

◆ catch() [12/12]

dx::event< user >::catch ( const std::exception & __std_exception)
inlineinherited

◆ conclude()

◆ drain() [1/2]

template<typename device_t, typename interface_t>
pipe & dx::usb::platform::pipe< device_t, interface_t >::drain ( std::chrono::milliseconds timeout = std::chrono::milliseconds(250))
inlinenoexcept

waits for already-submitted requests to complete on their own, without cancelling them

Here is the caller graph for this function:

◆ drain() [2/2]

template<typename device_t, typename interface_t>
pipe & dx::usb::platform::pipe< device_t, interface_t >::drain ( std::chrono::milliseconds timeout = std::chrono::milliseconds(250))
inlineprotectednoexcept

waits for already-submitted requests to complete on their own, without cancelling them

◆ dx_catchall_handler()

template<typename device_t, typename interface_t>
dx::usb::platform::pipe< device_t, interface_t >::dx_catchall_handler ( this )
inlineprotected

◆ dx_catchall_rethrow() [1/10]

template<typename device_t, typename interface_t>
dx::usb::platform::pipe< device_t, interface_t >::dx_catchall_rethrow ( ) const
inlinenoexcept

◆ dx_catchall_rethrow() [2/10]

template<typename device_t, typename interface_t>
dx::usb::platform::pipe< device_t, interface_t >::dx_catchall_rethrow ( ) const
inlineprotectednoexcept

◆ dx_catchall_rethrow() [3/10]

template<typename device_t, typename interface_t>
dx::usb::platform::pipe< device_t, interface_t >::dx_catchall_rethrow ( ) &
inlineprotected

◆ dx_catchall_rethrow() [4/10]

template<typename device_t, typename interface_t>
dx::usb::platform::pipe< device_t, interface_t >::dx_catchall_rethrow ( )
inlineprotected

◆ dx_catchall_rethrow() [5/10]

template<typename device_t, typename interface_t>
dx::usb::platform::pipe< device_t, interface_t >::dx_catchall_rethrow ( try { clear);} dx_catchall(,
"handle:%p idx:%d EP:%02x data:%p size:%lld" ,
winusb. handle,
idx ,
address ,
data ,
size  ) &
protected

asynchronous USB isoc read request WinUSB limitation no microframe support only multiple of max package size requests allowed, even if only submiting a single package https://docs.microsoft.com/en-us/windows/win32/api/winusb/nf-winusb-winusb_readisochpipe is wrong!

◆ dx_catchall_rethrow() [6/10]

template<typename device_t, typename interface_t>
dx::usb::platform::pipe< device_t, interface_t >::dx_catchall_rethrow ( try { clear);} dx_catchall(,
"handle:%p idx:%d EP:%02x data:%p size:%lld" ,
winusb. handle,
idx ,
address ,
data ,
size  ) const &
protected

asynchronous USB write request

◆ dx_catchall_rethrow() [7/10]

template<typename device_t, typename interface_t>
dx::usb::platform::pipe< device_t, interface_t >::dx_catchall_rethrow ( try { clear);} dx_catchall(,
"handle:%p idx:%d EP:%02x data:%p size:%lld" ,
winusb. handle,
idx ,
address ,
data ,
size  ) const &
inlineprotected

◆ dx_catchall_rethrow() [8/10]

template<typename device_t, typename interface_t>
dx::usb::platform::pipe< device_t, interface_t >::dx_catchall_rethrow ( try { clear);} dx_catchall(,
"handle:%p idx:%d EP:%02x data:%p size:%lld" ,
winusb. handle,
idx ,
address ,
data ,
size  ) &
inlineprotected

◆ dx_catchall_rethrow() [9/10]

template<typename device_t, typename interface_t>
dx::usb::platform::pipe< device_t, interface_t >::dx_catchall_rethrow ( try { clear);} dx_catchall(,
"idx:%d EP:%02x" ,
idx ,
address  ) &
inlineprotected

◆ dx_catchall_rethrow() [10/10]

template<typename device_t, typename interface_t>
dx::usb::platform::pipe< device_t, interface_t >::dx_catchall_rethrow ( try {const_cast< pipe< device_t, interface_t > * > this) ->clear();} dx_catchall_handler(this,,
"idx:%d size:%lld" ,
idx ,
sizeof request ) const &
inline

control request to pipe

◆ dx_pass()

template<typename device_t, typename interface_t>
dx::usb::platform::pipe< device_t, interface_t >::dx_pass ( rx = =tx? overflow:ok,
"too manny (%d) outstanding asynchronous transactions for endpoint %x" ,
max ,
address  )
protected

◆ exception()

◆ flush() [1/2]

◆ flush() [2/2]

virtual void dx::stream::control< stream::object< device_t > >::flush ( )
inlineprotectedvirtualinherited

◆ halt() [1/2]

template<typename device_t, typename interface_t>
void dx::usb::platform::pipe< device_t, interface_t >::halt ( )
inlineoverrideprotectedvirtualnoexcept

async IO thread control (required for Windows compatibility)

Reimplemented from dx::stream::control< stream::object< device_t > >.

Reimplemented in dx::usb::stream::pipe< device_t, circular_t, stream_t >.

◆ halt() [2/2]

template<typename device_t, typename interface_t>
void dx::usb::platform::pipe< device_t, interface_t >::halt ( )
inlineoverrideprotectedvirtualnoexcept

async IO thread control: joins the completion thread once this pipe's last start/stop reference is gone

Reimplemented from dx::stream::control< stream::object< device_t > >.

◆ if()

template<typename device_t, typename interface_t>
dx::usb::platform::pipe< device_t, interface_t >::if ( tx = =max)
protectedpure virtual

◆ info() [1/2]

◆ info() [2/2]

◆ initialize() [1/2]

virtual event & dx::abstract::event::initialize ( bool signalled = false)
inlinevirtualinherited

◆ initialize() [2/2]

virtual event & dx::abstract::event::initialize ( const std::string & ,
bool signalled = false )
inlinevirtualinherited

Reimplemented in dx::shared::event.

◆ launch()

virtual void dx::object::launch ( )
inlineprotectedvirtualinherited

launch notification: object mounted and ready to use. Called only through try_launch() - never call this directly from outside the class hierarchy.

Reimplemented in dx::asio::client::driver< device_t, devices >, dx::map::driver< _device_t >, dx::map::driver< device<> >, dx::map::driver< device_t >, dx::proxy::driver< device_t >, dx::proxy::driver< device_t >, dx::proxy::driver< device_t >, dx::service::app, dx::service::client::_device< desc, preference, stream< device< desc, preference, stream > > >, dx::service::device< preference_t >, dx::service::device< dx::preference >, dx::service::device< super_device_t >, dx::stream::stream< device_t, dx::circular, usb::pipe< device_t > >, dx::usb::stream::_device< desc_t, dx::preference, pipe< device< desc_t, dx::preference, pipe > > >, and dx::virtuel::driver< device_t >.

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

◆ operator const os_event()

template<::HANDLE invalid_t = INVALID_HANDLE_VALUE>
dx::resource< invalid_t >::operator const os_event ( ) const
inlinenoexceptinherited

◆ operator os_event()

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

◆ operator::HANDLE()

template<::HANDLE invalid_t = INVALID_HANDLE_VALUE>
dx::resource< invalid_t >::operator::HANDLE ( ) const
inlinenoexceptinherited
Here is the caller graph for this function:

◆ read()

template<typename device_t, typename interface_t>
pipe & dx::usb::platform::pipe< device_t, interface_t >::read ( void * data,
size_t size )
inlineprotected

synchronous USB read request

◆ receive()

template<typename device_t, typename interface_t>
pipe & dx::usb::platform::pipe< device_t, interface_t >::receive ( void * data,
size_t size )
inlineprotected

asynchronous USB read request

◆ received() [1/4]

template<typename device_t, typename interface_t>
virtual void dx::usb::platform::pipe< device_t, interface_t >::received ( os_result ,
size_t  )
inlineprotectedvirtual

virtual async callbacks

Reimplemented in dx::usb::stream::pipe< device_t, circular_t, stream_t >.

◆ received() [2/4]

template<typename device_t, typename interface_t>
virtual void dx::usb::platform::pipe< device_t, interface_t >::received ( os_result ,
size_t  )
inlineprotectedvirtual

virtual async callbacks

◆ received() [3/4]

template<typename device_t, typename interface_t>
virtual void dx::usb::platform::pipe< device_t, interface_t >::received ( os_result ,
size_t ,
int64_t ,
usb::isoc::frame *  )
inlineprotectedvirtual

◆ received() [4/4]

template<typename device_t, typename interface_t>
virtual void dx::usb::platform::pipe< device_t, interface_t >::received ( os_result ,
size_t ,
int64_t ,
usb::isoc::frame *  )
inlineprotectedvirtual

◆ reset() [1/2]

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

Implements dx::abstract::event.

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

◆ reset() [2/2]

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

Implements dx::abstract::event.

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

◆ signal() [1/2]

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

Implements dx::abstract::event.

Here is the caller graph for this function:

◆ signal() [2/2]

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

Implements dx::abstract::event.

Here is the caller graph for this function:

◆ signalled() [1/2]

DX_PRAGMA_IGNORE_RETURN_VALUE_END uint64_t dx::event< user >::signalled ( ) const
inlineinherited
Here is the call graph for this function:
Here is the caller graph for this function:

◆ signalled() [2/2]

DX_PRAGMA_IGNORE_RETURN_VALUE_END uint64_t dx::event< user >::signalled ( ) const
inlineinherited
Here is the call graph for this function:
Here is the caller graph for this function:

◆ start() [1/2]

virtual bool dx::stream::control< dx::stream::object< device_t > >::start ( uint64_t = 0,
unsigned int starting = 1 )
inlinevirtualinherited

◆ start() [2/2]

virtual bool dx::stream::control< stream::object< device_t > >::start ( uint64_t = 0,
unsigned int starting = 1 )
inlinevirtualinherited

◆ stop() [1/2]

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

result indicates the amount of stopped start references

◆ stop() [2/2]

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

result indicates the amount of stopped start references

◆ submit()

template<typename device_t, typename interface_t>
template<typename data_t>
pipe & dx::usb::platform::pipe< device_t, interface_t >::submit ( const request< data_t > & request) const
inline

standard request to pipe

◆ transmitted() [1/4]

template<typename device_t, typename interface_t>
virtual void dx::usb::platform::pipe< device_t, interface_t >::transmitted ( os_result ,
size_t  )
inlineprotectedvirtual

◆ transmitted() [2/4]

template<typename device_t, typename interface_t>
virtual void dx::usb::platform::pipe< device_t, interface_t >::transmitted ( os_result ,
size_t  )
inlineprotectedvirtual

◆ transmitted() [3/4]

template<typename device_t, typename interface_t>
virtual void dx::usb::platform::pipe< device_t, interface_t >::transmitted ( os_result ,
size_t ,
int64_t ,
usb::isoc::frame *  )
inlineprotectedvirtual

◆ transmitted() [4/4]

template<typename device_t, typename interface_t>
virtual void dx::usb::platform::pipe< device_t, interface_t >::transmitted ( os_result ,
size_t ,
int64_t ,
usb::isoc::frame *  )
inlineprotectedvirtual

◆ try_conclude() [1/2]

bool dx::object::try_conclude ( )
inlinenoexceptinherited

atomically conclude()s if currently launched; returns whether this call did it

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

◆ try_conclude() [2/2]

bool dx::object::try_conclude ( )
inlinenoexceptinherited

atomically conclude()s if currently launched; returns whether this call did it

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

◆ try_launch() [1/2]

bool dx::object::try_launch ( )
inlineinherited

atomically launch()es if not already launched; returns whether this call did it

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

◆ try_launch() [2/2]

bool dx::object::try_launch ( )
inlineinherited

atomically launch()es if not already launched; returns whether this call did it

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

◆ wait() [1/4]

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

Implements dx::abstract::event.

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

◆ wait() [2/4]

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

Implements dx::abstract::event.

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

◆ wait() [3/4]

template<typename rep_t, typename period_t>
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

Here is the call graph for this function:

◆ wait() [4/4]

template<typename rep_t, typename period_t>
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

Here is the call graph for this function:

◆ write()

template<typename device_t, typename interface_t>
pipe & dx::usb::platform::pipe< device_t, interface_t >::write ( const void * data,
size_t size )
inlineprotected

synchronous USB write request

Member Data Documentation

◆ [struct] [1/2]

struct { ... } dx::usb::platform::pipe< device_t, interface_t >::address

◆ address [2/2]

template<typename device_t, typename interface_t>
uint8_t dx::usb::platform::pipe< device_t, interface_t >::address = 0
protected

◆ [class]

class { ... } ::buffer dx::usb::platform::pipe< device_t, interface_t >::buffer

◆ device [1/2]

template<typename _device_t>
_device_t& dx::stream::object< _device_t >::device
protectedinherited

◆ device [2/2]

template<typename _device_t>
_device_t& dx::stream::object< _device_t >::device
protectedinherited

◆ frame

template<typename device_t, typename interface_t>
uint64_t ::USBD_ISO_PACKET_DESCRIPTOR* dx::usb::platform::pipe< device_t, interface_t >::frame
protected

◆ handle

template<typename device_t, typename interface_t>
::WINUSB_INTERFACE_HANDLE dx::usb::platform::pipe< device_t, interface_t >::handle

◆ idx

template<typename device_t, typename interface_t>
uint8_t dx::usb::platform::pipe< device_t, interface_t >::idx = 0
protected

◆ interface

template<typename device_t, typename interface_t>
interface_t & dx::usb::platform::pipe< device_t, interface_t >::interface

◆ [struct] [1/2]

struct { ... } dx::usb::platform::pipe< device_t, interface_t >::isoc

◆ isoc [2/2]

template<typename device_t, typename interface_t>
struct dx::usb::platform::pipe::isoc dx::usb::platform::pipe< device_t, interface_t >::isoc
protected

◆ launched [1/2]

std::atomic<bool> dx::object::launched {}
inherited

◆ launched [2/2]

std::atomic<bool> dx::object::launched {}
inherited

◆ micro_frames

template<typename device_t, typename interface_t>
unsigned int dx::usb::platform::pipe< device_t, interface_t >::micro_frames = 0

◆ notify [1/2]

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

◆ notify [2/2]

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

◆ process

template<::HANDLE invalid_t = INVALID_HANDLE_VALUE>
::HANDLE dx::resource< invalid_t >::process = ::GetCurrentProcess()
protectedinherited

◆ scope

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

◆ sequence

template<typename device_t, typename interface_t>
uint64_t& dx::usb::platform::pipe< device_t, interface_t >::sequence
protected

◆ start_stop_in_progress [1/2]

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

start/stop operation in progress

◆ start_stop_in_progress [2/2]

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

start/stop operation in progress

◆ started [1/2]

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

◆ started [2/2]

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

◆ this

template<typename device_t, typename interface_t>
return* dx::usb::platform::pipe< device_t, interface_t >::this
protected

◆ try

template<typename device_t, typename interface_t>
size_t size dx::usb::platform::pipe< device_t, interface_t >::try
protected
Initial value:
{
this->device.driver.log.bus.operation>= log::level::debug||
this->device.driver.log.streaming.setup>= log::level::debug||
this->device.driver.log.streaming.operation>= log::level::debug){
std::lock_guard<std::recursive_mutex> lock(io_mutex);
std::clog<< class_name<<
"<"<< std::hex<< static_cast<unsigned int>(address)<< std::dec<< ">::"<<
__func__<<
" rq idx:"<< tx<<
" size:"<< size<<
std::endl;
}
dx_pass(::WinUsb_WritePipe(winusb.handle, address,
reinterpret_cast<unsigned char*>(const_cast<void*>(data)),
static_cast<::ULONG>(size), nullptr, &overlapped[tx++])? ok: ::GetLastError())
dx::driver< decltype(id), preference_t > & driver
Definition dx_device.h:54
log log
Definition dx_driver.h:128
return size
Definition macOS/dx_proxy_device.h:279
Definition macOS/dx_usb_device_platform.h:174
struct dx::usb::platform::pipe::@017370040100142072020265171334315165305204126212 address
return * this
Definition windows/dx_usb_device_platform.h:595
struct dx::usb::platform::pipe::@151026160312233036213326144324224037172051215215 winusb
#define dx_pass(test,...)
Definition dx_exception.h:55
@ ok
Definition macOS/dx_platform.h:177
std::recursive_mutex io_mutex
Definition dx_common.cpp:28
level setup
scope on module setup phase
Definition dx_common.h:164
@ debug
Definition dx_common.h:80
scope bus
monitor bus actions (low level PCI, USB, etc.)
Definition dx_common.h:248

◆ type

template<typename device_t, typename interface_t>
enum dx::usb::platform::pipe::type dx::usb::platform::pipe< device_t, interface_t >::type

◆ [struct]

struct { ... } dx::usb::platform::pipe< device_t, interface_t >::winusb

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

(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.