50template <
typename Derived>
57 void write(
const uint8_t* data, std::size_t length)
noexcept {
58 static_cast<Derived*
>(
this)->
write(data, length);
65 std::size_t
read(uint8_t* out, std::size_t max, uint32_t timeout_ms)
noexcept {
66 return static_cast<Derived*
>(
this)->
read(out, max, timeout_ms);
71 static_cast<Derived*
>(
this)->
flush_rx();
83 if constexpr (HasDelay<Derived>::value) {
84 static_cast<Derived*
>(
this)->delay_ms_impl(ms);
98 template <
typename... Args>
99 void log(
const char* tag,
const char* fmt, Args... args)
noexcept {
100 if constexpr (HasLog<Derived, Args...>::value) {
101 static_cast<Derived*
>(
this)->log_impl(tag, fmt, args...);
110 template <
typename,
typename =
void>
111 struct HasDelay : std::false_type {};
112 template <
typename T>
113 struct HasDelay<T, std::void_t<decltype(std::declval<T&>().delay_ms_impl(uint32_t{0}))>>
116 template <
typename T,
typename Void,
typename... Args>
117 struct HasLogImpl : std::false_type {};
118 template <
typename T,
typename... Args>
120 std::void_t<decltype(std::declval<T&>().log_impl(
121 static_cast<const char*>(nullptr), static_cast<const char*>(nullptr),
122 std::declval<Args>()...))>,
123 Args...> : std::true_type {};
124 template <
typename T,
typename... Args>
125 using HasLog = HasLogImpl<T, void, Args...>;
CRTP base for the BASIS-2 serial transport.
Definition alicat_basis2_uart_interface.hpp:51
std::size_t read(uint8_t *out, std::size_t max, uint32_t timeout_ms) noexcept
Read up to max bytes into out with a per-call timeout.
Definition alicat_basis2_uart_interface.hpp:65
void delay_ms(uint32_t ms) noexcept
Sleep at least ms milliseconds.
Definition alicat_basis2_uart_interface.hpp:82
void log(const char *tag, const char *fmt, Args... args) noexcept
Optional logging hook, printf-style.
Definition alicat_basis2_uart_interface.hpp:99
void flush_rx() noexcept
Drop any unread bytes from the RX path.
Definition alicat_basis2_uart_interface.hpp:70
void write(const uint8_t *data, std::size_t length) noexcept
Send length bytes synchronously.
Definition alicat_basis2_uart_interface.hpp:57
Definition alicat_basis2.hpp:52