|
size_t | decode (uint64_t &rx, union msg &msg, uint8_t cable) |
| USB MIDI msg word to OS MIDI stream format decoder.
|
|
uint64_t | empty () const |
|
uint64_t | empty (uint64_t position) const |
|
bool | encode (const uint8_t *os_midi_package, size_t length, uint8_t cable) |
| OS MIDI stream to USB MIDI msg word format encoder.
|
|
template<typename ext_t , typename circular_t = ext_t> |
hide_if_ptr< ext_t > | force_read (ext_t *const *dst, uint64_t bulk=1, uint32_t channels_circular=1, uint32_t channels_dst=1, uint32_t circular_offset=0, uint32_t interleaved=1) |
|
template<typename ext_t , typename circular_t = ext_t> |
hide_if_ptr< ext_t > | force_read (ext_t *dst, uint64_t bulk=1, uint32_t channels_circular=1, uint32_t circular_offset=0, uint32_t interleaved=1) |
|
template<typename ext_t , typename circular_t = ext_t> |
bool | force_read (volatile uint64_t &position, ext_t *const *dst, uint64_t bulk, uint32_t channels_circular=1, uint32_t channels_dst=1, uint32_t circular_offset=0, uint32_t interleaved=1) |
| multi channel interleaved bulk read from circular buffer with format conversion if applicable
|
|
template<typename ext_t , typename circular_t = ext_t> |
hide_if_ptr< ext_t > | force_read (volatile uint64_t &position, ext_t *dst, uint64_t bulk=1, uint32_t channels_circular=1, uint32_t circular_offset=0, uint32_t interleaved=1) |
|
template<typename ext_t , typename circular_t = ext_t> |
bool | force_write (const ext_t *const *src, uint64_t bulk=1, uint32_t channels_circular=1, uint32_t channels_src=1, uint32_t circular_offset=0, uint32_t interleaved=1) |
|
template<typename ext_t , typename circular_t = ext_t> |
hide_if_ptr< ext_t > | force_write (const ext_t *src, uint64_t bulk=1, uint32_t channels_circular=1, uint32_t circular_offset=0, uint32_t interleaved=1) |
|
template<typename data_t > |
bool | force_write (data_t *const *const *src, uint64_t clients, uint64_t channels, uint64_t bulk) |
|
template<typename circular_t , typename src_t > |
bool | force_write (src_t *const *const *src, uint32_t clients, uint32_t channels=1, uint64_t bulk=1) |
| multi channel multi client bulk mix into circular buffer with format conversion if applicable src[client][channel][sample]
|
|
template<typename ext_t , typename circular_t = ext_t> |
bool | force_write (volatile uint64_t &position, const ext_t *const *src, uint64_t bulk, uint32_t channels_circular=1, uint32_t channels_src=1, uint32_t circular_offset=0, uint32_t interleaved=1) |
| multi channel interleaved bulk write into circular buffer with format conversion if applicable
|
|
template<typename ext_t , typename circular_t = ext_t> |
hide_if_ptr< ext_t > | force_write (volatile uint64_t &position, const ext_t *src, uint64_t bulk=1, uint32_t channels_circular=1, uint32_t circular_offset=0, uint32_t interleaved=1) |
| single channel convenience access templates
|
|
void | initialize () |
|
void | initialize (uint64_t backingstore_size) |
|
uint64_t | loop () const |
|
template<typename callback_t > |
void | move (callback_t &callback, uint64_t max) |
|
template<typename data_t > |
hide_if_ptr< data_t > | operator<< (const data_t &src) |
|
template<typename data_t > |
hide_if_ptr< data_t > | operator>> (data_t &dst) |
|
template<typename ext_t , typename circular_t = ext_t> |
hide_if_ptr< ext_t > | read (ext_t *const *dst, uint64_t bulk=1, uint32_t channels_circular=1, uint32_t channels_dst=1, uint32_t circular_offset=0, uint32_t interleaved=1) |
|
template<typename ext_t , typename circular_t = ext_t> |
hide_if_ptr< ext_t > | read (ext_t *dst, uint64_t bulk=1, uint32_t channels_circular=1, uint32_t circular_offset=0, uint32_t interleaved=1) |
|
template<typename ext_t , typename circular_t = ext_t> |
hide_if_ptr< ext_t > | read (volatile uint64_t &position, ext_t *const *dst, uint64_t bulk=1, uint32_t channels_circular=1, uint32_t channels_dst=1, uint32_t circular_offset=0, uint32_t interleaved=1) |
|
template<typename ext_t , typename circular_t = ext_t> |
hide_if_ptr< ext_t > | read (volatile uint64_t &position, ext_t *dst, uint64_t bulk=1, uint32_t channels_circular=1, uint32_t circular_offset=0, uint32_t interleaved=1) |
|
template<typename dst_t = uint8_t> |
dst_t * | simulate_read (uint64_t bulk=1) |
|
template<typename dst_t = uint8_t> |
dst_t * | simulate_read (volatile uint64_t &position, uint64_t bulk) |
|
uint8_t * | simulate_write (uint64_t bulk) |
| simulate write by advancing write idx and take care of wrap write optimization
|
|
uint64_t | used () const |
|
uint64_t | used (uint64_t position) const |
|
template<typename ext_t , typename circular_t = ext_t> |
bool | write (const ext_t *const *src, uint64_t bulk=1, uint32_t channels_circular=1, uint32_t channels_src=1, uint32_t circular_offset=0, uint32_t interleaved=1) |
|
template<typename ext_t , typename circular_t = ext_t> |
hide_if_ptr< ext_t > | write (const ext_t *src, uint64_t bulk=1, uint32_t channels_circular=1, uint32_t circular_offset=0, uint32_t interleaved=1) |
|
template<typename ext_t , typename circular_t = ext_t> |
bool | write (volatile uint64_t &position, const ext_t *const *src, uint64_t bulk=1, uint32_t channels_circular=1, uint32_t channels_src=1, uint32_t circular_offset=0, uint32_t interleaved=1) |
| bulk write into circular buffer with format conversion if applicable
|
|
template<typename ext_t , typename circular_t = ext_t> |
hide_if_ptr< ext_t > | write (volatile uint64_t &position, const ext_t *src, uint64_t bulk=1, uint32_t channels_circular=1, uint32_t circular_offset=0, uint32_t interleaved=1) |
|
template<
class buffer_t = dx::circular>
struct dx::usb::midi< buffer_t >
USB MIDI packetizer.
OS MIDI stream to USB MIDI msg word format encoder.
Encodes USB midi message from OS MIDI package and pushes it to USB MIDI backingstore buffer. It does not signal the buffer though so encode can be called for multiple MIDI packages and then manually signalled together. Although generally unusual handles SYSEX midi and any combination of general MIDI and SYSEX in the same OS package.
checks OS MIDI msg type validy,
handles SYSEX data
- Todo
- cleanup issue with stl not available in kernel:
checks for sysex termination prior end of os_midi_stream
checks if USB SYSEX msg fits and pushes msg to the backingstore without signalization.
handles general USB MIDI messages
computes USB MIDI msg nibbles,
checks OS MIDI msg size,
selects MIDI cable number and synthesize USB MIDI msg word,
checks if USB MIDI msg fits and pushes msg to the backingstore without signalization.
- Parameters
-
os_midi_package | OS MIDI package |
length | length of the OS MIDI package |
cable | USB MIDI cable number |