libepaper 2.0.0
A C++23 library for controlling Waveshare e-paper displays on Raspberry Pi, featuring transparent sleep/wake management and a fluent builder API.
Loading...
Searching...
No Matches
/mnt/nas/libepaper/include/epaper/drivers/driver_concepts.hpp

Concept defining the required interface for a Display Driver.

Concept defining the required interface for a Display Driver.A valid driver must provide lifecycle management (init, sleep, wake), drawing operations (clear, display), and dimension queries (width, height).

Semantic Requirements (not enforced by concept):

Error Handling:

Buffer Format:

Move Semantics:

Template Parameters
TThe driver type to check
// Custom driver implementation
class MyCustomDriver {
public:
auto init(DisplayMode mode) -> std::expected<void, Error> {
// Initialize hardware
return {}; // Success
}
auto sleep() -> std::expected<void, Error> { return {}; }
auto wake() -> std::expected<void, Error> { return {}; }
auto clear() -> std::expected<void, Error> { return {}; }
auto display(std::span<const std::byte> buffer) -> std::expected<void, Error> {
// Transfer buffer to hardware
return {};
}
auto width() const -> std::size_t { return 264; }
auto height() const -> std::size_t { return 176; }
};
static_assert(Driver<MyCustomDriver>); // OK - satisfies concept
// Use with Display
auto display = create_display<MyCustomDriver>(device, DisplayMode::BlackWhite);
See also
Display, create_display(), driver_traits
#pragma once
#include <concepts>
#include <cstddef>
#include <expected>
#include <span>
namespace epaper {
template <typename T>
concept Driver = std::movable<T> && requires(T &d, DisplayMode mode, std::span<const std::byte> buffer) {
// Lifecycle
{ d.init(mode) } -> std::same_as<std::expected<void, Error>>;
{ d.sleep() } -> std::same_as<std::expected<void, Error>>;
{ d.wake() } -> std::same_as<std::expected<void, Error>>;
// Drawing
{ d.clear() } -> std::same_as<std::expected<void, Error>>;
{ d.display(buffer) } -> std::same_as<std::expected<void, Error>>;
// Dimensions (can be static or instance methods, but callable on instance)
{ d.width() } -> std::convertible_to<std::size_t>;
{ d.height() } -> std::convertible_to<std::size_t>;
};
} // namespace epaper
Definition color.hpp:5
DisplayMode
Definition driver.hpp:46