38 lines
1001 B
C++
38 lines
1001 B
C++
//
|
|
// Created by erki on 11/02/24.
|
|
//
|
|
|
|
#pragma once
|
|
|
|
#include <array>
|
|
#include <concepts>
|
|
#include <cstdint>
|
|
|
|
namespace Peripherals::Hal
|
|
{
|
|
|
|
template<typename T>
|
|
concept Gpio = requires (T t, const T ct) {
|
|
t.set(true);
|
|
t.toggle();
|
|
{ ct.read() } -> std::same_as<bool>;
|
|
};
|
|
|
|
template<typename T>
|
|
concept SerialInterface = requires (T t, std::uint8_t* data, const std::uint32_t len) {
|
|
{ t.transmit(data, len) } -> std::same_as<bool>;
|
|
{ t.transmit(std::array<std::uint8_t, 10>{}) } -> std::same_as<bool>;
|
|
{ t.receive(data, len) } -> std::same_as<bool>;
|
|
{ t.receive(std::array<std::uint8_t, 10>{}) } -> std::same_as<bool>;
|
|
};
|
|
|
|
template<typename T, typename RegName>
|
|
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<std::uint8_t>;
|
|
t.readRegisterMultibyte(reg, data, len, std::uint32_t{});
|
|
};
|
|
|
|
}
|