HF-FDO2 Driver 0.1.0-dev
UART driver for PyroScience FDO2-G2 (data sheet v5 ยง4: #MOXY, #MRAW, #VERS)
Loading...
Searching...
No Matches
fdo2_uart_interface.hpp
Go to the documentation of this file.
1
19#pragma once
20
21#include <cstddef>
22#include <cstdint>
23#include <type_traits>
24
25namespace fdo2 {
26
31template <typename Derived>
33public:
34 void write(const uint8_t* data, std::size_t length) noexcept {
35 static_cast<Derived*>(this)->write(data, length);
36 }
37
38 std::size_t read(uint8_t* out, std::size_t max, uint32_t timeout_ms) noexcept {
39 return static_cast<Derived*>(this)->read(out, max, timeout_ms);
40 }
41
42 void flush_rx() noexcept { static_cast<Derived*>(this)->flush_rx(); }
43
44 void delay_ms(uint32_t ms) noexcept {
45 if constexpr (HasDelay<Derived>::value) {
46 static_cast<Derived*>(this)->delay_ms_impl(ms);
47 } else {
48 (void)ms;
49 }
50 }
51
52private:
53 template <typename, typename = void>
54 struct HasDelay : std::false_type {};
55 template <typename T>
56 struct HasDelay<T, std::void_t<decltype(std::declval<T>().delay_ms_impl(0U))>>
57 : std::true_type {};
58};
59
60} // namespace fdo2
CRTP base for PSUP serial transport.
Definition fdo2_uart_interface.hpp:32
void write(const uint8_t *data, std::size_t length) noexcept
Definition fdo2_uart_interface.hpp:34
void flush_rx() noexcept
Definition fdo2_uart_interface.hpp:42
void delay_ms(uint32_t ms) noexcept
Definition fdo2_uart_interface.hpp:44
std::size_t read(uint8_t *out, std::size_t max, uint32_t timeout_ms) noexcept
Definition fdo2_uart_interface.hpp:38
Definition fdo2.hpp:19