42 template<auto Context,
template<auto>
typename I2CImpl>
46 using Impl = I2CImpl<Context>;
54 static auto init(
auto ... args) {
55 return Impl::init(args...);
65 return Impl::deinit(args...);
77 std::array<
u8,
sizeof(T)> data;
78 Impl::read(address, data);
80 return bit_cast<T>(data);
93 std::array<
u8,
sizeof(T)> data;
94 Impl::write(address, std::array<u8, 1>{ reg });
95 Impl::read(address, data);
97 return bit_cast<T>(data);
109 std::array<
u8,
sizeof(T)> data;
110 std::memcpy(data.data(), &value,
sizeof(T));
112 Impl::write(address, data);
125 std::array<
u8,
sizeof(T) + 1> data;
127 std::memcpy(data.data() + 1, &value,
sizeof(T));
129 Impl::write(address, data);