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
epaper::hal::SpiBus Concept Reference

Concept for a raw SPI data transfer bus. More...

#include <spi.hpp>

Concept definition

template<typename T>
concept epaper::hal::SpiBus = requires(T bus, std::uint8_t byte, std::span<const std::byte> data) {
{ bus.transfer(byte) } -> std::same_as<std::uint8_t>;
{ bus.write(data) } -> std::same_as<void>;
}
Concept for a raw SPI data transfer bus.
Definition spi.hpp:124

Detailed Description

Concept for a raw SPI data transfer bus.

Provides full-duplex byte transfer and bulk write capabilities. Does NOT handle Chip Select (CS) or Data/Command (DC) signals - these are managed externally via GPIO pins.

Required Operations:

  1. transfer(byte): Full-duplex single-byte exchange (write + simultaneous read)
  2. write(data): Bulk write (transmit-only, ignore received data)

Method Signatures:

auto transfer(std::uint8_t byte) -> std::uint8_t;
auto write(std::span<const std::byte> data) -> void;

Semantic Requirements:

SPI Mode Configuration (not part of concept):

Chip Select (CS) Protocol:

cs.write(false); // Assert CS (active-low)
spi.write(data); // Transfer data
cs.write(true); // Deassert CS

Data/Command (DC) Protocol:

dc.write(false); // DC=0 for command
cs.write(false);
spi.transfer(0x2C); // Send command byte
cs.write(true);
dc.write(true); // DC=1 for data
cs.write(false);
spi.write(framebuffer);
cs.write(true);
Template Parameters
TType to check for SpiBus conformance
See also
DigitalOutput (for CS/DC control), MockSPI