dxd - dynax driver framework 2.1.0d48
cross platform open source driver development framework
Loading...
Searching...
No Matches
dxd::usb_stream_device::stream Class Reference

USB stream. More...

#include <dxd_usb_stream.h>

+ Inheritance diagram for dxd::usb_stream_device::stream:
+ Collaboration diagram for dxd::usb_stream_device::stream:

Public Member Functions

template<typename return_t = os_result, typename exec_t >
return_t each (exec_t exec)
 
void free ()
 frees circular backing store and frame buffers
 
os_result initialize (::IOMemoryDescriptor *iokit_memory_descriptor)
 IOKit memory initializer.
 
os_result initialize (::IOMemoryDescriptor *iokit_memory_descriptor)
 IOKit memory initializer.
 
os_result initialize (::IOMemoryDescriptor *iokit_memory_descriptor, size_t offset, size_t size)
 IOKit memory initializer.
 
os_result initialize (::IOMemoryDescriptor *iokit_memory_descriptor, size_t offset, size_t size)
 IOKit memory initializer.
 
os_result initialize (::IOMemoryDescriptor *iokit_memory_descriptor, size_t offset=0)
 IOKit kernel map initializer.
 
os_result initialize (const void *data, size_t size)
 IOKit memory initializer.
 
os_result initialize (const void *data, size_t size)
 IOKit memory initializer.
 
os_result initialize (const::MDL *mdl)
 
os_result initialize (const::MDL *mdl)
 
os_result initialize (const::MDL *mdl, size_t offset, size_t size)
 
os_result initialize (const::MDL *mdl, size_t offset, size_t size)
 
os_result initialize (size_t size, unsigned int limit=64, unsigned int alignment=0, bool contigous=false)
 IOKit buffer initializer.
 
os_result initialize (unsigned int buffers)
 creates circular backing store and frame buffers for non-isoc streaming
 
os_result initialize (unsigned int line_size, unsigned int cycles, unsigned int samplerate)
 creates circular backing store and frame buffers for isoc streaming
 
os_result initialize (void *data, size_t size)
 IOKit memory initializer.
 
os_result initialize (void *data, size_t size)
 IOKit memory initializer.
 
os_result line_size (unsigned int line_size)
 sets the line_size
 
 operator const dx::circular * () const
 
 operator const::IOMemoryDescriptor * () const
 IOKit IOMemoryDescriptor* implicit cast.
 
 operator const::IOMemoryDescriptor * () const
 IOKit IOMemoryDescriptor* implicit cast.
 
 operator const::IOMemoryMap * () const
 
 operator dx::circular * () const
 
 operator uint64_t () const
 IOKit physical address (only relevant for contigous memory)
 
 operator uint64_t () const
 IOKit physical address (only relevant for contigous memory)
 
dx::circularoperator-> ()
 
const dx::circularoperator-> () const
 operator to use mapping like pointer
 
 operator::IOMemoryDescriptor * ()
 
 operator::IOMemoryDescriptor * ()
 
 operator::IOMemoryMap * ()
 
 operator::MDL * () const
 
 operator::MDL * () const
 
item_t * pop ()
 pop item from head
 
doubly::linked::abstract::eventpop (doubly::linked::abstract::event *item)
 pop item
 
listprint ()
 
doubly::linked::abstract::eventpush (doubly::linked::abstract::event *item)
 push item to head
 
item_t * push (item_t *item)
 push item to head
 
template<typename reference_t >
int release (reference_t &reference)
 
void retain ()
 
dx::uint24 samplerate () const
 
os_result samplerate (dx::uint24 samplerate)
 sets the sampling rate
 
os_result signal ()
 
size_t size () const
 IOKit memory size.
 
size_t size () const
 IOKit memory size.
 
size_t size () const
 kernel mapping size
 
os_result start (bool force=false) override
 starts the USB streaming
 
os_result stop (bool force=false) override
 
 stream (class usb_stream_device &usb_stream_device, const dx::stream::open< dx::usb::endpoint > &open)
 USB endpoint constructor.
 
os_result synchronize ()
 synchronizes to isoc device cycles
 
 ~stream () override
 stream destructor
 

Public Attributes

event data
 data available event
 
event gap
 gap (space) available event
 
atomic< int > references {}
 
os_result status =not_initialized
 

Protected Types

enum  direction { in =::kEndpointDescriptorDirectionIn , out =::kEndpointDescriptorDirectionOut }
 
enum  type {
  isoc =::kEndpointDescriptorTransferTypeIsochronous , bulk =::kEndpointDescriptorTransferTypeBulk , interrupt =::kEndpointDescriptorTransferTypeInterrupt , control = ::UsbdPipeTypeControl ,
  isoc =::kEndpointDescriptorTransferTypeIsochronous , bulk =::kEndpointDescriptorTransferTypeBulk , interrupt =::kEndpointDescriptorTransferTypeInterrupt
}
 
enum  type {
  isoc =::kEndpointDescriptorTransferTypeIsochronous , bulk =::kEndpointDescriptorTransferTypeBulk , interrupt =::kEndpointDescriptorTransferTypeInterrupt , control = ::UsbdPipeTypeControl ,
  isoc =::kEndpointDescriptorTransferTypeIsochronous , bulk =::kEndpointDescriptorTransferTypeBulk , interrupt =::kEndpointDescriptorTransferTypeInterrupt
}
 

Protected Member Functions

os_result abort ()
 IOKit: abort all outstanding requests and waits until all requests have been finalized.
 
os_result abort ()
 WDK pipe abort.
 
os_result clear ()
 
os_result clear ()
 WDK pipe stall reset, toggle.
 
direction direction () const
 
direction direction () const
 
os_result max_frame_size (unsigned int frame_size)
 
os_result max_frame_size (unsigned int frame_size)
 
 operator::USBD_PIPE_HANDLE () const
 
os_result read (::IOMemoryDescriptor *memory, uint64_t &sequence, isoc_frame *frame, unsigned int frames) const
 IOKit: USB synchronous irq/bulk read request.
 
os_result read (::MDL *mdl, uint64_t &sequence, isoc_frame *frame, unsigned int frames)
 
os_result receive (::IOMemoryDescriptor *memory)
 IOKit: USB asynchronous irq/bulk receive request.
 
os_result receive (::IOMemoryDescriptor *memory, uint64_t &sequence, isoc_frame *frame, unsigned int frames)
 IOKit: USB asynchronous isochronous read request.
 
os_result receive (::MDL *mdl)
 WDK: USB asynchronous irq/bulk receive request.
 
os_result receive (::MDL *mdl, uint64_t &sequence, isoc_frame *frame, unsigned int frames)
 
os_result state () const
 IOKit: IOUSBPipe* implicit cast.
 
os_result transmit (const ::MDL *mdl)
 WDK: USB asynchronous irq/bulk transmit request.
 
os_result transmit (const ::MDL *mdl, uint64_t &sequence, isoc_frame *frame, unsigned int frames)
 
os_result transmit (const::IOMemoryDescriptor *memory, uint64_t &sequence, isoc_frame *frame, unsigned int frames)
 IOKit: USB asynchronous isochronous write request.
 
type type () const
 
type type () const
 
template<typename data_t >
os_result write (const data_t &data) const
 
template<dx::scope scope_t, typename data_t >
os_result write (const data_t &data) const
 
template<typename data_t >
os_result write (const data_t &data) const
 
os_result write (const void *data, size_t size) const
 
template<dx::scope scope_t>
os_result write (const void *data, size_t size) const
 
os_result write (const void *data, size_t size) const
 
os_result write (const::IOMemoryDescriptor *memory) const
 IOKit: USB synchronous irq/bulk write request.
 
os_result write (const::MDL *mdl) const
 WDK: USB synchronous isochronous write request.
 

Protected Attributes

dx::circular_vm
 kernel virtual address mapping
 
unsigned char address
 
unsigned short frame_size =1
 
unsigned char interval =1
 
::IOMemoryMap * iokit_memory_map
 

Friends

struct dx::circular
 

Detailed Description

USB stream.

Handling of high speed/low latency/high performance streams:

  • 3 requests with dedicated buffers are circulating: (a) actually handled - (p) to be prepared - (w) request waiting for device 0:(p) (a) (w) 1:(w) (p) (a) 2:(a) (w) (p) This way there is always at least one request scheduled(w). When data ready is signalled a new request is first scheduled(p) and the (a) actual data is handled. The cycle starts by scheduling (p) and (w).
Exceptions
os_resultan error returned by the underlaying KPIs is reflected by the methods return value. The object status can be retrieved by the status member.

Member Enumeration Documentation

◆ direction

Enumerator
in 
out 

◆ type [1/2]

Enumerator
isoc 
bulk 
interrupt 
control 
isoc 
bulk 
interrupt 

◆ type [2/2]

bills "compiler" still does exercises - until it learnt a bit more c++ enums need to go here to be available during rest of class definition.

Enumerator
isoc 
bulk 
interrupt 
control 
isoc 
bulk 
interrupt 

Constructor & Destructor Documentation

◆ stream()

dxd::usb_stream_device::stream::stream ( class usb_stream_device & usb_stream_device,
const dx::stream::open< dx::usb::endpoint > & open )
inline

USB endpoint constructor.

Checks the underlaying pipe construction state,

Todo
default sample rate from clock description
Todo
dxd::usb::stream: follow dxd stream changes

check process creation status

Parameters
usb_stream_deviceUSB device
openstream metrics
+ Here is the call graph for this function:

◆ ~stream()

dxd::usb_stream_device::stream::~stream ( )
inlineoverridevirtual

stream destructor

Reimplemented from dxd::stream.

+ Here is the call graph for this function:

Member Function Documentation

◆ abort() [1/2]

os_result dxd::usb_device::pipe::abort ( )
inlineinherited

IOKit: abort all outstanding requests and waits until all requests have been finalized.

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

◆ abort() [2/2]

os_result dxd::usb_device::pipe::abort ( )
inlineinherited

WDK pipe abort.

◆ clear() [1/2]

os_result dxd::usb_device::pipe::clear ( )
inlineinherited
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ clear() [2/2]

os_result dxd::usb_device::pipe::clear ( )
inlineinherited

WDK pipe stall reset, toggle.

◆ direction() [1/2]

direction dxd::usb_device::pipe::direction ( ) const
inlineinherited

◆ direction() [2/2]

direction dxd::usb_device::pipe::direction ( ) const
inlineinherited

◆ each()

template<typename item_t = link>
template<typename return_t = os_result, typename exec_t >
return_t dxd::linked::list< item_t >::each ( exec_t exec)
inlineinherited

◆ free()

void dxd::usb_stream_device::stream::free ( )
inline

frees circular backing store and frame buffers

stops any outstanding requests,

releases intermittent device frame buffer,

unmaps kernel mapping to backing store

and release backing store.

+ Here is the call graph for this function:

◆ initialize() [1/16]

template<dx::scope scope_t = dx::kernel>
os_result dxd::memory< scope_t >::initialize ( ::IOMemoryDescriptor * iokit_memory_descriptor)
inlineinherited

IOKit memory initializer.

+ Here is the call graph for this function:

◆ initialize() [2/16]

os_result dxd::memory< scope_t >::initialize ( ::IOMemoryDescriptor * iokit_memory_descriptor)
inlineinherited

IOKit memory initializer.

◆ initialize() [3/16]

os_result dxd::memory< scope_t >::initialize ( ::IOMemoryDescriptor * iokit_memory_descriptor,
size_t offset,
size_t size )
inlineinherited

IOKit memory initializer.

◆ initialize() [4/16]

template<dx::scope scope_t = dx::kernel>
os_result dxd::memory< scope_t >::initialize ( ::IOMemoryDescriptor * iokit_memory_descriptor,
size_t offset,
size_t size )
inlineinherited

IOKit memory initializer.

+ Here is the call graph for this function:

◆ initialize() [5/16]

os_result dxd::map< scope_t, dx::circular >::initialize ( ::IOMemoryDescriptor * iokit_memory_descriptor,
size_t offset = 0 )
inlineinherited

IOKit kernel map initializer.

map<kernel> maps an IOMemoryDescriptor (typically cast of a dxd::memory or buffer class) into the kernel address space.

https://developer.apple.com/library/content/qa/qa1197/_index.html

Allows re-initialization.

Checks buffer object,

maps the buffer into the kernel (will fail if offset is given)

and obtains a kernel virtual address (apply offset here instead).

Parameters
iokit_memory_descriptorIOMemoryDescriptor to be mapped into the kernel address space
offsetoffset into memory descriptor to create mapping

◆ initialize() [6/16]

template<dx::scope scope_t = dx::kernel>
os_result dxd::memory< scope_t >::initialize ( const void * data,
size_t size )
inherited

IOKit memory initializer.

Parameters
datavirtual base address of range to create memory descriptor from
sizesize of range to create memory descriptor from
+ Here is the caller graph for this function:

◆ initialize() [7/16]

os_result dxd::memory< scope_t >::initialize ( const void * data,
size_t size )
inherited

IOKit memory initializer.

Parameters
datavirtual base address of range to create memory descriptor from
sizesize of range to create memory descriptor from

◆ initialize() [8/16]

os_result dxd::memory< scope_t >::initialize ( const::MDL * mdl)
inlineinherited

in contrast to an IOKit MemoryDescriptor MDLs do not support reference counting. take care when creating a dxd::memory from a dxd::buffer: although the dxd::memory holds an MDL to the buffer the buffer itself is not retained after the dxd::buffer is released!

◆ initialize() [9/16]

template<dx::scope scope_t = dx::kernel>
os_result dxd::memory< scope_t >::initialize ( const::MDL * mdl)
inlineinherited

in contrast to an IOKit MemoryDescriptor MDLs do not support reference counting. take care when creating a dxd::memory from a dxd::buffer: although the dxd::memory holds an MDL to the buffer the buffer itself is not retained after the dxd::buffer is released!

+ Here is the call graph for this function:

◆ initialize() [10/16]

template<dx::scope scope_t = dx::kernel>
os_result dxd::memory< scope_t >::initialize ( const::MDL * mdl,
size_t offset,
size_t size )
inlineinherited
+ Here is the call graph for this function:

◆ initialize() [11/16]

os_result dxd::memory< scope_t >::initialize ( const::MDL * mdl,
size_t offset,
size_t size )
inlineinherited

◆ initialize() [12/16]

os_result dxd::buffer< scope_t, 64 , 0 , false >::initialize ( size_t size,
unsigned int limit = limit_t,
unsigned int alignment = alignment_t,
bool contigous = contigous_t )
inlineinherited

IOKit buffer initializer.

Allows re-initialization.

Creates a buffer and associated memory descriptor.

Wires down the backing store memory.

Parameters
sizesize to be alloced by buffer object
limitlimit physical memory address space
alignmentenforce physical memory alignment
contigousenforce contiguos physical memory

◆ initialize() [13/16]

os_result dxd::usb_stream_device::stream::initialize ( unsigned int buffers)
inline

creates circular backing store and frame buffers for non-isoc streaming

create streaming backing store (twice the required size to accomodate single request wrap arounds)

map it

initializes circular buffer

creates frames inside backing store for continously overlapped streaming requests

creates intermittent device frame buffer

+ Here is the call graph for this function:

◆ initialize() [14/16]

os_result dxd::usb_stream_device::stream::initialize ( unsigned int line_size,
unsigned int cycles,
unsigned int samplerate )
inline

creates circular backing store and frame buffers for isoc streaming

Todo
initialize also RX isoc when no extralines are required

generates isoc cycle metrics from sample rate,

update max frame size

Todo
reset max frame size when pipe is closed

create backing store memory,

map it

initializes circular buffer

+ Here is the call graph for this function:

◆ initialize() [15/16]

os_result dxd::memory< scope_t >::initialize ( void * data,
size_t size )
inherited

IOKit memory initializer.

Parameters
datavirtual base address of range to create memory descriptor from
sizesize of range to create memory descriptor from

◆ initialize() [16/16]

template<dx::scope scope_t = dx::kernel>
os_result dxd::memory< scope_t >::initialize ( void * data,
size_t size )
inherited

IOKit memory initializer.

Parameters
datavirtual base address of range to create memory descriptor from
sizesize of range to create memory descriptor from

◆ line_size()

os_result dxd::usb_stream_device::stream::line_size ( unsigned int line_size)
inline

sets the line_size

may reinitialize streaming (different buffering!)

+ Here is the call graph for this function:

◆ max_frame_size() [1/2]

os_result dxd::usb_device::pipe::max_frame_size ( unsigned int frame_size)
inlineinherited
+ Here is the call graph for this function:

◆ max_frame_size() [2/2]

os_result dxd::usb_device::pipe::max_frame_size ( unsigned int frame_size)
inlineinherited
Todo
implement WDK USB max_frame_size() bandwidth adjustment

◆ operator const dx::circular *()

dxd::map< scope_t, dx::circular >::operator const dx::circular * ( ) const
inlineinherited

◆ operator const::IOMemoryDescriptor *() [1/2]

template<dx::scope scope_t = dx::kernel>
dxd::memory< scope_t >::operator const::IOMemoryDescriptor * ( ) const
inlineinherited

IOKit IOMemoryDescriptor* implicit cast.

◆ operator const::IOMemoryDescriptor *() [2/2]

dxd::memory< scope_t >::operator const::IOMemoryDescriptor * ( ) const
inlineinherited

IOKit IOMemoryDescriptor* implicit cast.

◆ operator const::IOMemoryMap *()

dxd::map< scope_t, dx::circular >::operator const::IOMemoryMap * ( ) const
inlineinherited

◆ operator dx::circular *()

dxd::map< scope_t, dx::circular >::operator dx::circular * ( ) const
inlineinherited

◆ operator uint64_t() [1/2]

dxd::memory< scope_t >::operator uint64_t ( ) const
inlineinherited

IOKit physical address (only relevant for contigous memory)

◆ operator uint64_t() [2/2]

template<dx::scope scope_t = dx::kernel>
dxd::memory< scope_t >::operator uint64_t ( ) const
inlineinherited

IOKit physical address (only relevant for contigous memory)

◆ operator->() [1/2]

dx::circular * dxd::map< scope_t, dx::circular >::operator-> ( )
inlineinherited

◆ operator->() [2/2]

const dx::circular * dxd::map< scope_t, dx::circular >::operator-> ( ) const
inlineinherited

operator to use mapping like pointer

◆ operator::IOMemoryDescriptor *() [1/2]

template<dx::scope scope_t = dx::kernel>
dxd::memory< scope_t >::operator::IOMemoryDescriptor * ( )
inlineinherited

◆ operator::IOMemoryDescriptor *() [2/2]

dxd::memory< scope_t >::operator::IOMemoryDescriptor * ( )
inlineinherited

◆ operator::IOMemoryMap *()

dxd::map< scope_t, dx::circular >::operator::IOMemoryMap * ( )
inlineinherited

◆ operator::MDL *() [1/2]

dxd::memory< scope_t >::operator::MDL * ( ) const
inlineinherited

◆ operator::MDL *() [2/2]

template<dx::scope scope_t = dx::kernel>
dxd::memory< scope_t >::operator::MDL * ( ) const
inlineinherited

◆ operator::USBD_PIPE_HANDLE()

dxd::usb_device::pipe::operator::USBD_PIPE_HANDLE ( ) const
inlineinherited

◆ pop() [1/2]

template<typename item_t = link>
item_t * dxd::linked::list< item_t >::pop ( )
inlineinherited

pop item from head

+ Here is the caller graph for this function:

◆ pop() [2/2]

◆ print()

◆ push() [1/2]

◆ push() [2/2]

template<typename item_t = link>
item_t * dxd::linked::list< item_t >::push ( item_t * item)
inlineinherited

push item to head

+ Here is the caller graph for this function:

◆ read() [1/2]

os_result dxd::usb_device::pipe::read ( ::IOMemoryDescriptor * memory,
uint64_t & sequence,
isoc_frame * frame,
unsigned int frames ) const
inlineinherited

IOKit: USB synchronous irq/bulk read request.

IOKit: USB synchronous isochronous read request

Parameters
memorymemory descriptor of the data to be read
+ Here is the call graph for this function:

◆ read() [2/2]

os_result dxd::usb_device::pipe::read ( ::MDL * mdl,
uint64_t & sequence,
isoc_frame * frame,
unsigned int frames )
inlineinherited
Parameters
mdlmemory descriptor of the data to be read
+ Here is the call graph for this function:

◆ receive() [1/4]

os_result dxd::usb_device::pipe::receive ( ::IOMemoryDescriptor * memory)
inlineinherited

IOKit: USB asynchronous irq/bulk receive request.

Parameters
memorymemory descriptor of the data to be read
+ Here is the call graph for this function:

◆ receive() [2/4]

os_result dxd::usb_device::pipe::receive ( ::IOMemoryDescriptor * memory,
uint64_t & sequence,
isoc_frame * frame,
unsigned int frames )
inlineinherited

IOKit: USB asynchronous isochronous read request.

Parameters
memorymemory descriptor of the data to be read
+ Here is the call graph for this function:

◆ receive() [3/4]

os_result dxd::usb_device::pipe::receive ( ::MDL * mdl)
inlineinherited

WDK: USB asynchronous irq/bulk receive request.

+ Here is the call graph for this function:

◆ receive() [4/4]

os_result dxd::usb_device::pipe::receive ( ::MDL * mdl,
uint64_t & sequence,
isoc_frame * frame,
unsigned int frames )
inlineinherited
Parameters
mdlmemory descriptor of the data to be read
+ Here is the call graph for this function:

◆ release()

template<typename reference_t >
int dxd::referenced::release ( reference_t & reference)
inlineinherited

◆ retain()

void dxd::referenced::retain ( )
inlineinherited

◆ samplerate() [1/2]

dx::uint24 dxd::usb_stream_device::stream::samplerate ( ) const
inline
+ Here is the call graph for this function:

◆ samplerate() [2/2]

os_result dxd::usb_stream_device::stream::samplerate ( dx::uint24 samplerate)
inline

sets the sampling rate

may reinitialize streaming (different buffering!)

+ Here is the call graph for this function:

◆ signal()

os_result dxd::broadcast::signal ( )
inlineinherited
+ Here is the call graph for this function:

◆ size() [1/3]

template<dx::scope scope_t = dx::kernel>
size_t dxd::memory< scope_t >::size ( ) const
inlineinherited

IOKit memory size.

+ Here is the caller graph for this function:

◆ size() [2/3]

size_t dxd::memory< scope_t >::size ( ) const
inlineinherited

IOKit memory size.

◆ size() [3/3]

size_t dxd::map< scope_t, dx::circular >::size ( ) const
inlineinherited

kernel mapping size

◆ start()

os_result dxd::usb_stream_device::stream::start ( bool force = false)
inlineoverridevirtual

starts the USB streaming

initializes/resets circular buffer

synchronizes to isoc device cycles,

estimate upcoming timestamp

Todo
compute timestamp in ticks (not nsec)!

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

if stream is sync master

it starts the sync master thread

else starts the USB stream listener

initiates new async cycle: issue requests

Implements dxd::stream.

+ Here is the call graph for this function:

◆ state()

os_result dxd::usb_device::pipe::state ( ) const
inlineinherited

IOKit: IOUSBPipe* implicit cast.

IOKit: IOUSBPipe* operator

for internal use only

Deprecated
If you end-up using this operator in a consolidated driver source, you probably work around the dynax driver framework mechanics and should re-think your design.
Todo
find out if isInactive() is equivalent to getState()
+ Here is the caller graph for this function:

◆ stop()

os_result dxd::usb_stream_device::stream::stop ( bool force = false)
inlineoverridevirtual

If stream is sync master on bulk/irq pipe

it signals the sync master mode thread,

and waits for thread to finish

todo: move abort before master wait to avoid blocking if device doesn't handle transaction

Implements dxd::stream.

◆ synchronize()

os_result dxd::usb_stream_device::stream::synchronize ( )
inline

synchronizes to isoc device cycles

scheduling isoc sync request at least 1 complete cycles ahead; aligned to whole cycles,

correcting invalid frames

+ Here is the call graph for this function:

◆ transmit() [1/3]

os_result dxd::usb_device::pipe::transmit ( const ::MDL * mdl)
inlineinherited

WDK: USB asynchronous irq/bulk transmit request.

+ Here is the call graph for this function:

◆ transmit() [2/3]

os_result dxd::usb_device::pipe::transmit ( const ::MDL * mdl,
uint64_t & sequence,
isoc_frame * frame,
unsigned int frames )
inlineinherited
Parameters
mdlmemory descriptor of the data to be written
+ Here is the call graph for this function:

◆ transmit() [3/3]

os_result dxd::usb_device::pipe::transmit ( const::IOMemoryDescriptor * memory,
uint64_t & sequence,
isoc_frame * frame,
unsigned int frames )
inlineinherited

IOKit: USB asynchronous isochronous write request.

Parameters
memorymemory descriptor of the data to be written
+ Here is the call graph for this function:

◆ type() [1/2]

type dxd::usb_device::pipe::type ( ) const
inlineinherited

◆ type() [2/2]

type dxd::usb_device::pipe::type ( ) const
inlineinherited

◆ write() [1/8]

template<typename data_t >
os_result dxd::usb_device::pipe::write ( const data_t & data) const
inlineinherited
+ Here is the call graph for this function:

◆ write() [2/8]

template<dx::scope scope_t, typename data_t >
os_result dxd::usb_device::pipe::write ( const data_t & data) const
inlineinherited
+ Here is the call graph for this function:

◆ write() [3/8]

template<typename data_t >
os_result dxd::usb_device::pipe::write ( const data_t & data) const
inlineinherited
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ write() [4/8]

os_result dxd::usb_device::pipe::write ( const void * data,
size_t size ) const
inlineinherited
+ Here is the call graph for this function:

◆ write() [5/8]

template<dx::scope scope_t>
os_result dxd::usb_device::pipe::write ( const void * data,
size_t size ) const
inlineinherited
+ Here is the call graph for this function:

◆ write() [6/8]

os_result dxd::usb_device::pipe::write ( const void * data,
size_t size ) const
inlineinherited

◆ write() [7/8]

os_result dxd::usb_device::pipe::write ( const::IOMemoryDescriptor * memory) const
inlineinherited

IOKit: USB synchronous irq/bulk write request.

Parameters
memorymemory descriptor of the data to be written
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ write() [8/8]

os_result dxd::usb_device::pipe::write ( const::MDL * mdl) const
inlineinherited

WDK: USB synchronous isochronous write request.

Todo
return number of written bytes

WDK: USB synchronous irq/bulk write request

Todo
return number of written bytes

Friends And Related Symbol Documentation

◆ dx::circular

friend struct dx::circular
friend

Member Data Documentation

◆ _vm

dx::circular * dxd::map< scope_t, dx::circular >::_vm
protectedinherited

kernel virtual address mapping

◆ address

unsigned char dxd::usb_device::pipe::address
inherited

◆ data

event dxd::usb_stream_device::stream::data

data available event

◆ frame_size

unsigned short dxd::usb_device::pipe::frame_size =1
inherited

◆ gap

event dxd::usb_stream_device::stream::gap

gap (space) available event

◆ interval

unsigned char dxd::usb_device::pipe::interval =1
inherited

◆ iokit_memory_map

::IOMemoryMap* dxd::map< scope_t, dx::circular >::iokit_memory_map
protectedinherited

◆ references

atomic<int> dxd::referenced::references {}
inherited

◆ status

os_result dxd::usb_stream_device::stream::status =not_initialized

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

(c) copyright 2009 dynamic acoustics e.U. generated on Fri Feb 23 2024

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.