co_usb
Loading...
Searching...
No Matches
co_usb::transfer::endpoint< Direction > Struct Template Reference

USB endpoint aggregate templated on its direction. More...

#include <endpoint.hpp>

Public Member Functions

uint8_t addr () const noexcept
 
auto devh () const noexcept -> libusb_device_handle *requires(Direction !=endpoint_direction::any)
 
template<endpoint_direction ToDirection>
requires (Direction == endpoint_direction::any && ToDirection != endpoint_direction::any)
std::optional< endpoint< ToDirection > > as () const noexcept
 Cast an any endpoint to a concrete direction.
 

Static Public Member Functions

template<co_usb::detail::DeviceHandleSource DevSourceTy>
requires (Direction != endpoint_direction::any)
static endpoint< Direction > make_safe (uint8_t ep, DevSourceTy const &dev_source) noexcept
 Makes an endpoint and completes address to proper value.
 
template<co_usb::detail::DeviceHandleSource DevSourceTy>
static endpoint< Direction > make_unsafe (uint8_t ep, DevSourceTy const &devh) noexcept
 
template<co_usb::detail::DeviceHandleSource DevSourceTy>
requires (Direction != endpoint_direction::any)
static endpoint< Direction > make_throwing (uint8_t ep, DevSourceTy const &devh)
 Creates an endpoint or throws if the address doesn't match expected direction.
 

Detailed Description

template<endpoint_direction Direction = endpoint_direction::any>
struct co_usb::transfer::endpoint< Direction >

USB endpoint aggregate templated on its direction.

Must be used with transfer types to provide directional information. Prefer make_safe function to construct a valid endpoint.

Template Parameters
Directiondirection of an endpoint. Value co_usb::ep_direction::any is semantically equal to an unknown endpoint direction and as such only allows casts to either in or out endpoint.

Member Function Documentation

◆ addr()

template<endpoint_direction Direction = endpoint_direction::any>
uint8_t co_usb::transfer::endpoint< Direction >::addr ( ) const
inlinenoexcept

◆ as()

template<endpoint_direction Direction = endpoint_direction::any>
template<endpoint_direction ToDirection>
requires (Direction == endpoint_direction::any && ToDirection != endpoint_direction::any)
std::optional< endpoint< ToDirection > > co_usb::transfer::endpoint< Direction >::as ( ) const
inlinenoexcept

Cast an any endpoint to a concrete direction.

Cast is performed on the basis of endpoint address containing LIBUSB_ENDPOINT_IN bit set to 1.

Returns
std::nullopt if the cast cannot be performed.
Optional value containing a properly typed endpoint if cast succeeded.

◆ devh()

template<endpoint_direction Direction = endpoint_direction::any>
auto co_usb::transfer::endpoint< Direction >::devh ( ) const -> libusb_device_handle * requires(Direction != endpoint_direction::any)
inlinenoexcept

◆ make_safe()

template<endpoint_direction Direction = endpoint_direction::any>
template<co_usb::detail::DeviceHandleSource DevSourceTy>
requires (Direction != endpoint_direction::any)
static endpoint< Direction > co_usb::transfer::endpoint< Direction >::make_safe ( uint8_t  ep,
DevSourceTy const &  dev_source 
)
inlinestaticnoexcept

Makes an endpoint and completes address to proper value.

Example:

  • ep_direction::out ep = 0x83 -> 0x03
  • ep_direction::in ep = 0x83 -> 0x83
  • ep_direction::in ep = 0x03 -> 0x83

◆ make_throwing()

template<endpoint_direction Direction = endpoint_direction::any>
template<co_usb::detail::DeviceHandleSource DevSourceTy>
requires (Direction != endpoint_direction::any)
static endpoint< Direction > co_usb::transfer::endpoint< Direction >::make_throwing ( uint8_t  ep,
DevSourceTy const &  devh 
)
inlinestatic

Creates an endpoint or throws if the address doesn't match expected direction.

Exceptions
std::invalid_argumentwhen endpoint address does not match Direction

◆ make_unsafe()

template<endpoint_direction Direction = endpoint_direction::any>
template<co_usb::detail::DeviceHandleSource DevSourceTy>
static endpoint< Direction > co_usb::transfer::endpoint< Direction >::make_unsafe ( uint8_t  ep,
DevSourceTy const &  devh 
)
inlinestaticnoexcept

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