50template <
typename Port>
52 std::declval<const uint8_t*>(), std::declval<uint8_t*>(), std::declval<std::size_t>()));
55template <
typename Port>
57 std::is_same_v<std::remove_cv_t<std::remove_reference_t<TransferResult<Port>>>,
bool>;
65template <
typename Port>
66inline bool Transfer(Port& port,
const uint8_t* tx, uint8_t* rx, std::size_t len) {
68 static_assert(std::is_void_v<Result> || kTransferReportsStatus<Port>,
69 "as5047u: the port's transfer(tx, rx, len) must return bool (true = frame "
70 "clocked, false = bus error), or void for a port that never reports errors");
71 if constexpr (std::is_void_v<Result>) {
72 port.transfer(tx, rx, len);
75 return static_cast<bool>(port.transfer(tx, rx, len));
97 bool transfer(
const uint8_t* tx, uint8_t* rx, std::size_t len) {
Definition as5047u_spi_interface.hpp:81
~SpiInterface()=default
Protected destructor.
SpiInterface()=default
Protected constructor to prevent direct instantiation.
SpiInterface(const SpiInterface &)=delete
SpiInterface(SpiInterface &&)=default
SpiInterface & operator=(SpiInterface &&)=default
bool transfer(const uint8_t *tx, uint8_t *rx, std::size_t len)
Perform a full-duplex SPI data transfer.
Definition as5047u_spi_interface.hpp:97
SpiInterface & operator=(const SpiInterface &)=delete
bool Transfer(Port &port, const uint8_t *tx, uint8_t *rx, std::size_t len)
Call the port's transfer() and return its status.
Definition as5047u_spi_interface.hpp:66
decltype(std::declval< Port & >().transfer(std::declval< const uint8_t * >(), std::declval< uint8_t * >(), std::declval< std::size_t >())) TransferResult
Return type of Port::transfer(const uint8_t*, uint8_t*, std::size_t).
Definition as5047u_spi_interface.hpp:52
constexpr bool kTransferReportsStatus
True when the port's transfer() reports a status (returns bool).
Definition as5047u_spi_interface.hpp:56
Definition as5047u.hpp:52