11#include <unordered_map>
40 constexpr explicit Pin(std::uint8_t pin_number) : pin_(pin_number) {}
42 [[nodiscard]]
constexpr auto number() const noexcept -> std::uint8_t {
return pin_; }
215 [[nodiscard]]
auto init() -> std::expected<void, Error>;
227 auto
spi_transfer(std::uint8_t value) const -> std::uint8_t;
228 auto
spi_write(std::span<const std::
byte> data) const ->
void;
231 static auto
delay_ms(std::uint32_t milliseconds) ->
void;
232 static auto
delay_us(std::uint32_t microseconds) ->
void;
288 auto rebuild_line_request() -> bool;
289 auto cleanup() noexcept ->
void;
291 struct gpiod_chip *chip_ =
nullptr;
292 struct gpiod_line_request *line_request_ =
nullptr;
293 std::unordered_map<std::uint8_t,
PinConfig> pin_configs_;
295 bool initialized_ = false;
296 bool spi_initialized_ = false;
Definition device.hpp:240
HalOutput(Device &dev, Pin pin)
Definition device.hpp:242
auto write(bool level) -> void
Definition device.hpp:243
Definition device.hpp:262
auto transfer(std::uint8_t byte) -> std::uint8_t
Definition device.hpp:265
HalSpi(Device &dev)
Definition device.hpp:264
auto write(std::span< const std::byte > data) -> void
Definition device.hpp:266
Definition device.hpp:158
auto spi_transfer(std::uint8_t value) const -> std::uint8_t
Definition device.cpp:277
~Device() noexcept
Destructor. Cleans up GPIO and SPI resources.
Definition device.cpp:118
static auto delay_ms(std::uint32_t milliseconds) -> void
Definition device.cpp:328
auto spi_write(std::span< const std::byte > data) const -> void
Definition device.cpp:302
auto read_pin(Pin pin) -> bool
Definition device.cpp:263
static auto delay_us(std::uint32_t microseconds) -> void
Definition device.cpp:332
auto set_pin_output(Pin pin) -> void
Definition device.cpp:207
Device(const Device &)=delete
auto set_pin_input(Pin pin) -> void
Definition device.cpp:229
auto get_spi() -> HalSpi
Definition device.hpp:285
auto write_pin(Pin pin, bool value) -> void
Definition device.cpp:250
auto get_input(Pin pin) -> HalInput
Definition device.hpp:280
auto operator=(const Device &) -> Device &=delete
auto get_output(Pin pin) -> HalOutput
Definition device.hpp:275
auto is_initialized() const noexcept -> bool
Definition device.cpp:205
Device()
Construct a Device with default configuration.
Definition device.cpp:114
auto init() -> std::expected< void, Error >
Initialize the GPIO (libgpiod) and SPI (SPIdev) interfaces.
Definition device.cpp:152
constexpr auto number() const noexcept -> std::uint8_t
Definition device.hpp:42
constexpr Pin(std::uint8_t pin_number)
Definition device.hpp:40
Concept for a raw SPI data transfer bus.
Definition spi.hpp:124
GPIO pin concepts for hardware abstraction.
SPI bus concept for hardware abstraction.
std::uint32_t spi_speed_hz
SPI clock speed in Hz (~1.95MHz)
Definition device.hpp:81
std::string spi_device
Path to SPI device.
Definition device.hpp:80
std::string gpio_chip
Path to GPIO chip device.
Definition device.hpp:79
Definition device.hpp:234
static auto delay_ms(std::uint32_t ms) -> void
Definition device.hpp:235
Pin configuration tracking (internal use).
Definition device.hpp:94
bool is_output
Definition device.hpp:96
enum gpiod_line_value initial_value
Definition device.hpp:97
unsigned int offset
Definition device.hpp:95