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
Namespaces | Concepts | Functions
capabilities.hpp File Reference

Compile-time driver capability traits system. More...

#include "epaper/drivers/driver.hpp"
#include <concepts>
#include <cstddef>
Include dependency graph for capabilities.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Namespaces

namespace  epaper
 

Concepts

concept  epaper::DriverTraits
 Concept to check if a type is a valid driver with capabilities.
 

Functions

template<typename Driver >
requires DriverTraits<Driver>
constexpr auto epaper::supports_display_mode (DisplayMode mode) noexcept -> bool
 

Detailed Description

Compile-time driver capability traits system.

Provides template specialization-based mechanism for querying driver capabilities at compile time. Used for static validation, optimization, and feature detection.

Design Pattern:

Trait Class Pattern (Compile-Time Introspection)
├─ Specialization: Each driver specializes driver_traits<Driver>
├─ Constexpr Fields: All capabilities are compile-time constants
├─ Zero Runtime Cost: All queries resolved at compile time
└─ Validation: DriverTraits concept enforces complete specialization

Capabilities Provided:

Specialization Template:

template <>
struct driver_traits<MyDriver> {
static constexpr DisplayMode max_mode = DisplayMode::BWR;
static constexpr bool supports_grayscale = true;
static constexpr bool supports_partial_refresh = false;
static constexpr bool supports_power_control = true;
static constexpr bool supports_wake_from_sleep = true;
static constexpr std::size_t max_width = 264;
static constexpr std::size_t max_height = 176;
};

Usage Patterns:

// Compile-time capability check
if constexpr (driver_traits<EPD27>::supports_grayscale) {
// Use Grayscale4 mode
}
// Static assertion for required features
static_assert(driver_traits<MyDriver>::supports_power_control,
"This application requires sleep mode support");
// Mode validation
bool can_use_bwr = supports_display_mode<EPD27>(DisplayMode::BWR);

Mode Support Logic:

See also
Driver, DisplayMode, supports_display_mode()