16#include <boost/capy/buffers.hpp>
17#include <boost/capy/ex/executor_ref.hpp>
18#include <boost/capy/ex/this_coro.hpp>
19#include <boost/capy/io_task.hpp>
73 template <detail::AnyBufferSequence BuffersTy>
74 auto submit (BuffersTy
const &buffers) -> boost::capy::io_task<size_t>
76 auto exec =
co_await boost::capy::this_coro::executor;
77 auto stop =
co_await boost::capy::this_coro::stop_token;
79 const size_t transfers_used = std::min(boost::capy::buffer_length(buffers),
m_view.
size());
80 std::stop_callback sb{stop, [&] ()
83 for (
auto iter =
m_view.
begin(); iter != end; iter++)
90 typename awaitable_t::await_state_t await_state;
91 co_return co_await awaitable_t(&await_state, &
m_view, buffers, transfers_used);
104template <detail::TransferSequence TSeq, endpo
int_direction EpDirection>
108 : m_stream(exec, tfer_seq)
117 template <boost::capy::MutableBufferSequence BuffersTy>
119 inline auto read_some (BuffersTy
const &buffers) -> boost::capy::io_task<size_t>
121 return m_stream.submit(buffers);
129 template <boost::capy::ConstBufferSequence BuffersTy>
131 inline auto write_some (BuffersTy
const &buffers) -> boost::capy::io_task<size_t>
133 return m_stream.submit(buffers);
149template <detail::TransferSequence TSeq, endpo
int_direction EpDirection>
154 std::chrono::milliseconds timeout_ms = std::chrono::milliseconds{0})
168template <detail::TransferSequence TSeq, endpo
int_direction EpDirection>
173 std::chrono::milliseconds timeout_ms = std::chrono::milliseconds{0})
186template <detail::TransferSequence TSeq, endpo
int_direction EpDirection>
191 std::chrono::milliseconds timeout_ms = std::chrono::milliseconds{0})
208template <detail::TransferSequence TSeq, endpo
int_direction EpDirection>
213 int iso_packets, std::chrono::milliseconds timeout_ms = std::chrono::milliseconds{0})
228template <detail::TransferSequence TSeq, endpo
int_direction EpDirection>
233 uint32_t stream_id, std::chrono::milliseconds timeout_ms = std::chrono::milliseconds{0})
245template <detail::TransferSequence TSeq>
253template <detail::TransferSequence TSeq>
261template <detail::TransferSequence TSeq>
269template <detail::TransferSequence TSeq>
277template <detail::TransferSequence TSeq>
285template <detail::TransferSequence TSeq>
293template <detail::TransferSequence TSeq>
301template <detail::TransferSequence TSeq>
309template <detail::TransferSequence TSeq>
317template <detail::TransferSequence TSeq>
Unified concept for buffer sequences.
USB endpoint aggregate templated on its direction.
Type-erased reference to any event handler.
constexpr auto transfer_of(Ty const &tfer_res) -> libusb_transfer *
Uniform accessor for obtaining a libusb_transfer * from a co_usb::transfer::detail::TransferResource.
Definition transfer_sequence.hpp:41
constexpr auto prefill_bulk_stream(TSeq const &tfer_seq, endpoint< EpDirection > ep, uint32_t stream_id, std::chrono::milliseconds timeout_ms=std::chrono::milliseconds{0})
Prefills transfer sequence as bulk stream transfers.
Definition operations.hpp:136
constexpr auto cancel_transfer(TSeq const &tfer_seq)
Cancels transfers from a sequence.
Definition operations.hpp:28
constexpr auto prefill_interrupt(TSeq const &tfer_seq, endpoint< EpDirection > ep, std::chrono::milliseconds timeout_ms=std::chrono::milliseconds{0})
Prefills transfer sequence as interrupt transfers.
Definition operations.hpp:91
constexpr auto prefill_bulk(TSeq const &tfer_seq, endpoint< EpDirection > ep, std::chrono::milliseconds timeout_ms=std::chrono::milliseconds{0})
Prefills transfer sequence as bulk transfers.
Definition operations.hpp:71
constexpr auto prefill_isochronous(TSeq const &tfer_seq, endpoint< EpDirection > ep, int iso_packets, std::chrono::milliseconds timeout_ms=std::chrono::milliseconds{0})
Prefills transfer sequence as isochronous transfers.
Definition operations.hpp:114
constexpr auto prefill_control(TSeq const &tfer_seq, endpoint< EpDirection > ep, std::chrono::milliseconds timeout_ms=std::chrono::milliseconds{0})
Prefills transfer sequence as control transfers.
Definition operations.hpp:47
Capy execution_context service wrapping a libusb event handler.
Definition complete_io.hpp:18
Definition flag_type.hpp:6
Operations on transfer sequences.
Implementation detail for co_usb::transfer::detail::partial_io_base.
View of a certain transfer sequence. Provides a uniform range interface.
Type-erased reference to any event handler.
Definition event_handler_ref.hpp:34
Prefills the transfer sequence as bulk transfers and provides partial I/O operations.
Definition partial_io.hpp:170
bulk_partial_io(boost::capy::executor_ref exec, TSeq const &tfer_seq, endpoint< EpDirection > endpoint, std::chrono::milliseconds timeout_ms=std::chrono::milliseconds{0})
Definition partial_io.hpp:171
Prefills the transfer sequence as bulk stream transfers and provides partial I/O operations.
Definition partial_io.hpp:230
bulk_stream_partial_io(boost::capy::executor_ref exec, TSeq const &tfer_seq, endpoint< EpDirection > endpoint, uint32_t stream_id, std::chrono::milliseconds timeout_ms=std::chrono::milliseconds{0})
Definition partial_io.hpp:231
Prefills the transfer sequence as control transfers and provides partial I/O operations.
Definition partial_io.hpp:151
control_partial_io(boost::capy::executor_ref exec, TSeq const &tfer_seq, endpoint< EpDirection > endpoint, std::chrono::milliseconds timeout_ms=std::chrono::milliseconds{0})
Definition partial_io.hpp:152
Provides Capy ReadStream-/WriteStream-compliant interface for partial transfer I/O.
Definition partial_io.hpp:106
auto read_some(BuffersTy const &buffers) -> boost::capy::io_task< size_t >
Performs partial read to a buffer sequence.
Definition partial_io.hpp:119
auto write_some(BuffersTy const &buffers) -> boost::capy::io_task< size_t >
Performs partial read to a buffer sequence.
Definition partial_io.hpp:131
direction_partial_io_base(boost::capy::executor_ref exec, TSeq const &tfer_seq)
Definition partial_io.hpp:107
Zero-allocation adapter around a transfer sequence enabling the use of asynchronous partial I/O opera...
Definition partial_io.hpp:62
sequence_view< TSeq > m_view
Definition partial_io.hpp:96
ev::event_handler_ref m_ev_ref
Definition partial_io.hpp:95
partial_io_base(boost::capy::executor_ref exec, TSeq const &tfer_seq)
Definition partial_io.hpp:63
auto submit(BuffersTy const &buffers) -> boost::capy::io_task< size_t >
Submit a transfer sequence for a buffer sequence.
Definition partial_io.hpp:74
Definition sequence_awaitable.hpp:28
USB endpoint aggregate templated on its direction.
Definition endpoint.hpp:44
Prefills the transfer sequence as interrupt transfers and provides partial I/O operations.
Definition partial_io.hpp:188
interrupt_partial_io(boost::capy::executor_ref exec, TSeq const &tfer_seq, endpoint< EpDirection > endpoint, std::chrono::milliseconds timeout_ms=std::chrono::milliseconds{0})
Definition partial_io.hpp:189
Prefills the transfer sequence as isochronous transfers and provides partial I/O operations.
Definition partial_io.hpp:210
isochronous_partial_io(boost::capy::executor_ref exec, TSeq const &tfer_seq, endpoint< EpDirection > endpoint, int iso_packets, std::chrono::milliseconds timeout_ms=std::chrono::milliseconds{0})
Definition partial_io.hpp:211
View of a certain transfer sequence. Provides a uniform range interface.
Definition sequence_view.hpp:28
auto size() const noexcept -> size_t
Definition sequence_view.hpp:43
auto begin() const noexcept
Definition sequence_view.hpp:48
Transfer resource and transfer sequence concepts.