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
capabilities.hpp
Go to the documentation of this file.
1#pragma once
2
67#include <concepts>
68#include <cstddef>
69
70namespace epaper {
71
110template <typename Driver> struct driver_traits;
111// Base template is empty/undefined to force specialization
112// Or we can leave it undefined so it fails instantiation if not specialized.
113
119template <typename T>
120concept DriverTraits = requires {
121 requires std::convertible_to<decltype(driver_traits<T>::max_mode), DisplayMode>;
122 requires std::convertible_to<decltype(driver_traits<T>::supports_grayscale), bool>;
123 requires std::convertible_to<decltype(driver_traits<T>::supports_partial_refresh), bool>;
124 requires std::convertible_to<decltype(driver_traits<T>::supports_power_control), bool>;
125 requires std::convertible_to<decltype(driver_traits<T>::supports_wake_from_sleep), bool>;
126 requires std::convertible_to<decltype(driver_traits<T>::max_width), std::size_t>;
127 requires std::convertible_to<decltype(driver_traits<T>::max_height), std::size_t>;
128};
129
171template <typename Driver>
172 requires DriverTraits<Driver>
173[[nodiscard]] constexpr auto supports_display_mode(DisplayMode mode) noexcept -> bool {
174 // Always support single-bit BW
175 if (mode == DisplayMode::BlackWhite) {
176 return true;
177 }
178
179 // Grayscale support is explicit
180 if (mode == DisplayMode::Grayscale4) {
182 }
183
184 // For color modes (BWR, BWY, Spectra6), strict matching is required.
185 // Inequality (<=) is unsafe because modes like BWR(2) and BWY(3) are mutually exclusive,
186 // not hierarchical. A Spectra6(5) driver might not support legacy BWR(2) commands.
187 return mode == driver_traits<Driver>::max_mode;
188}
189
190} // namespace epaper
Concept to check if a type is a valid driver with capabilities.
Definition capabilities.hpp:120
Definition color.hpp:5
constexpr auto supports_display_mode(DisplayMode mode) noexcept -> bool
Definition capabilities.hpp:173
DisplayMode
Definition driver.hpp:46
@ BlackWhite
1-bit black and white (2 colors)
@ Grayscale4
2-bit 4-level grayscale
Driver capabilities trait template.
Definition capabilities.hpp:110