14#include <boost/capy/io_task.hpp>
15#include <memory_resource>
60 size_t single_transfer_limit,
61 std::pmr::memory_resource *memres = std::pmr::get_default_resource())
63 m_single_transfer_limit(single_transfer_limit)
67 template <detail::AnyBufferSequence BuffersTy>
70 auto exec =
co_await boost::capy::this_coro::executor;
71 auto stop =
co_await boost::capy::this_coro::stop_token;
73 const size_t transfers_used =
74 std::min(boost::capy::buffer_length(buffers), this->
m_view.
size());
75 std::stop_callback sb{stop, [&] ()
77 const auto end = this->
m_view.
begin() + transfers_used;
78 for (
auto iter = this->
m_view.
begin(); iter != end; iter++)
85 typename awaitable_t::await_state_t await_state(m_memres);
86 co_return co_await awaitable_t(&await_state, &this->
m_view, buffers, transfers_used,
87 m_single_transfer_limit);
91 std::pmr::memory_resource *m_memres;
92 size_t m_single_transfer_limit;
109 boost::capy::executor_ref exec, TSeq
const &tfer_seq,
size_t single_transfer_limit,
110 std::pmr::memory_resource *memres = std::pmr::get_default_resource())
111 : m_raw(exec, tfer_seq, single_transfer_limit, memres)
120 template <boost::capy::MutableBufferSequence BuffersTy>
122 inline auto read_some (BuffersTy
const &buffers) -> boost::capy::io_task<size_t>
124 return m_raw.submit(buffers);
133 template <boost::capy::MutableBufferSequence BuffersTy>
135 inline auto read (BuffersTy
const &buffers) -> boost::capy::io_task<size_t>
137 return m_raw.complete_submit(buffers);
140 template <boost::capy::ConstBufferSequence BuffersTy>
142 inline auto write_some (BuffersTy
const &buffers) -> boost::capy::io_task<size_t>
144 return m_raw.submit(buffers);
153 template <boost::capy::ConstBufferSequence BuffersTy>
155 inline auto write (BuffersTy
const &buffers) -> boost::capy::io_task<size_t>
157 return m_raw.complete_submit(buffers);
168 template <boost::capy::ConstBufferSequence BuffersTy>
170 inline auto write_eof (BuffersTy
const &buffers) -> boost::capy::io_task<size_t>
172 return m_raw.complete_submit(buffers);
180 template <boost::capy::ConstBufferSequence BuffersTy>
201template <detail::TransferSequence TSeq, endpo
int_direction EpDirection>
206 size_t single_transfer_limit,
207 std::chrono::milliseconds timeout_ms = std::chrono::milliseconds{0},
208 std::pmr::memory_resource *memres = std::pmr::get_default_resource())
210 single_transfer_limit, memres)
222template <detail::TransferSequence TSeq, endpo
int_direction EpDirection>
227 std::chrono::milliseconds timeout_ms = std::chrono::milliseconds{0},
228 std::pmr::memory_resource *memres = std::pmr::get_default_resource())
230 single_transfer_limit, memres)
242template <detail::TransferSequence TSeq, endpo
int_direction EpDirection>
247 size_t single_transfer_limit,
248 std::chrono::milliseconds timeout_ms = std::chrono::milliseconds{0},
249 std::pmr::memory_resource *memres = std::pmr::get_default_resource())
251 single_transfer_limit, memres)
266template <detail::TransferSequence TSeq, endpo
int_direction EpDirection>
271 int iso_packets,
size_t single_transfer_limit,
272 std::chrono::milliseconds timeout_ms = std::chrono::milliseconds{0},
273 std::pmr::memory_resource *memres = std::pmr::get_default_resource())
275 single_transfer_limit, memres)
289template <detail::TransferSequence TSeq, endpo
int_direction EpDirection>
294 uint32_t stream_id,
size_t single_transfer_limit,
295 std::chrono::milliseconds timeout_ms = std::chrono::milliseconds{0},
296 std::pmr::memory_resource *memres = std::pmr::get_default_resource())
298 single_transfer_limit, memres)
309template <detail::TransferSequence TSeq>
317template <detail::TransferSequence TSeq>
325template <detail::TransferSequence TSeq>
333template <detail::TransferSequence TSeq>
341template <detail::TransferSequence TSeq>
349template <detail::TransferSequence TSeq>
357template <detail::TransferSequence TSeq>
365template <detail::TransferSequence TSeq>
373template <detail::TransferSequence TSeq>
381template <detail::TransferSequence TSeq>
Unified concept for buffer sequences.
Implementation detail for co_usb::transfer::detail::complete_io_base.
USB endpoint aggregate templated on its direction.
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
Definition complete_io.hpp:18
Operations on transfer sequences.
Partial I/O adapters for transfer sequences.
Prefills the transfer sequence as bulk transfers and provides complete I/O operations.
Definition complete_io.hpp:224
bulk_complete_io(boost::capy::executor_ref exec, TSeq const &tfer_seq, endpoint< EpDirection > endpoint, size_t single_transfer_limit, std::chrono::milliseconds timeout_ms=std::chrono::milliseconds{0}, std::pmr::memory_resource *memres=std::pmr::get_default_resource())
Definition complete_io.hpp:225
Prefills the transfer sequence as bulk stream transfers and provides complete I/O operations.
Definition complete_io.hpp:291
bulk_stream_complete_io(boost::capy::executor_ref exec, TSeq const &tfer_seq, endpoint< EpDirection > endpoint, uint32_t stream_id, size_t single_transfer_limit, std::chrono::milliseconds timeout_ms=std::chrono::milliseconds{0}, std::pmr::memory_resource *memres=std::pmr::get_default_resource())
Definition complete_io.hpp:292
Prefills the transfer sequence as control transfers and provides complete I/O operations.
Definition complete_io.hpp:203
control_complete_io(boost::capy::executor_ref exec, TSeq const &tfer_seq, endpoint< EpDirection > endpoint, size_t single_transfer_limit, std::chrono::milliseconds timeout_ms=std::chrono::milliseconds{0}, std::pmr::memory_resource *memres=std::pmr::get_default_resource())
Definition complete_io.hpp:204
Complete I/O adapter for transfer sequences.
Definition complete_io.hpp:58
complete_io_base(boost::capy::executor_ref exec, TSeq const &tfer_seq, size_t single_transfer_limit, std::pmr::memory_resource *memres=std::pmr::get_default_resource())
Definition complete_io.hpp:59
auto complete_submit(BuffersTy const &buffers) -> boost::capy::io_task< size_t >
Definition complete_io.hpp:68
Definition complete_sequence_awaitable.hpp:31
Interface complying with Boost.Http's ReadSource and WriteSink concepts.
Definition complete_io.hpp:107
auto read(BuffersTy const &buffers) -> boost::capy::io_task< size_t >
Performs complete read to a buffer sequence.
Definition complete_io.hpp:135
auto write_eof() -> boost::capy::io_task<>
Indicates EOF and closes the sink.
Definition complete_io.hpp:182
auto write(BuffersTy const &buffers) -> boost::capy::io_task< size_t >
Performs complete write from a buffer sequence.
Definition complete_io.hpp:155
auto read_some(BuffersTy const &buffers) -> boost::capy::io_task< size_t >
Performs partial read to a buffer sequence.
Definition complete_io.hpp:122
direction_complete_io_base(boost::capy::executor_ref exec, TSeq const &tfer_seq, size_t single_transfer_limit, std::pmr::memory_resource *memres=std::pmr::get_default_resource())
Definition complete_io.hpp:108
auto write_some(BuffersTy const &buffers) -> boost::capy::io_task< size_t >
Definition complete_io.hpp:142
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
USB endpoint aggregate templated on its direction.
Definition endpoint.hpp:44
Prefills the transfer sequence as interrupt transfers and provides complete I/O operations.
Definition complete_io.hpp:244
interrupt_complete_io(boost::capy::executor_ref exec, TSeq const &tfer_seq, endpoint< EpDirection > endpoint, size_t single_transfer_limit, std::chrono::milliseconds timeout_ms=std::chrono::milliseconds{0}, std::pmr::memory_resource *memres=std::pmr::get_default_resource())
Definition complete_io.hpp:245
Prefills the transfer sequence as isochronous transfers and provides complete I/O operations.
Definition complete_io.hpp:268
isochronous_complete_io(boost::capy::executor_ref exec, TSeq const &tfer_seq, endpoint< EpDirection > endpoint, int iso_packets, size_t single_transfer_limit, std::chrono::milliseconds timeout_ms=std::chrono::milliseconds{0}, std::pmr::memory_resource *memres=std::pmr::get_default_resource())
Definition complete_io.hpp:269
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.