33 #include <type_traits>
50 template<auto Context,
template<auto>
typename SPIImpl>
54 using Impl = SPIImpl<Context>;
62 static auto init(
auto ... args) {
63 return Impl::init(args...);
73 return Impl::deinit(args...);
84 std::array<
u8,
sizeof(T)> data;
87 return bit_cast<T>(data);
97 static void write(
const T &value) {
98 if constexpr (std::is_pointer<T>::value) {
99 constexpr
size_t Size =
sizeof(std::remove_pointer<T>);
101 std::array<u8, Size> data;
102 std::memcpy(data.data(), value, Size);
105 constexpr
size_t Size =
sizeof(T);
107 std::array<u8, Size> data;
108 std::memcpy(data.data(), &value, Size);