// // Created by erki on 11/02/24. // #pragma once #include #include #include namespace Peripherals::Hal { enum class Edge { Rising, Falling }; template concept Gpio = requires(T t, const T ct) { t.set(true); t.toggle(); { ct.read() } -> std::same_as; }; template concept SerialInterface = requires(T t, std::uint8_t* data, const std::uint32_t len) { { t.transmit(data, len) } -> std::same_as; { t.transmit(std::array{}) } -> std::same_as; { t.receive(data, len) } -> std::same_as; { t.receive(std::array{}) } -> std::same_as; }; template concept RegisterInterface = requires(T t, RegName reg, std::uint8_t* data, const std::uint32_t len) { t.writerRegister(reg, std::uint8_t{}); t.writeRegisterMultibyte(reg, data, len); { t.readRegister(reg, std::uint32_t{}) } -> std::same_as; t.readRegisterMultibyte(reg, data, len, std::uint32_t{}); }; }// namespace Peripherals::Hal