idfxx 1.0.0
Modern C++23 components for ESP-IDF
Loading...
Searching...
No Matches
master.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 Chris Leishman
3
4#pragma once
5
20#include <idfxx/cpu>
21#include <idfxx/error>
22#include <idfxx/flags>
23#include <idfxx/gpio>
24#include <idfxx/intr_alloc>
25
26#include <driver/spi_master.h>
27#include <optional>
28#include <string>
29
91
92template<>
94
95namespace idfxx::spi {
96
150
159public:
160#ifdef CONFIG_COMPILER_CXX_EXCEPTIONS
171 [[nodiscard]] explicit master_bus(enum host_device host, enum dma_chan dma_chan, struct bus_config config);
172#endif
173
184 make(enum host_device host, enum dma_chan dma_chan, struct bus_config config);
185
187
188 master_bus(const master_bus&) = delete;
189 master_bus& operator=(const master_bus&) = delete;
190
192 master_bus(master_bus&& other) noexcept;
193
195 master_bus& operator=(master_bus&& other) noexcept;
196
198 [[nodiscard]] enum host_device host() const { return _host; }
199
200private:
201 explicit master_bus(enum host_device host);
202
203 enum host_device _host;
204 bool _initialized = true;
205};
206
// end of idfxx_spi
208
209} // namespace idfxx::spi
210
211namespace idfxx {
212
220[[nodiscard]] inline std::string to_string(spi::host_device h) {
221 switch (h) {
223 return "SPI1";
225 return "SPI2";
226#if SOC_SPI_PERIPH_NUM > 2
228 return "SPI3";
229#endif
230 default:
231 return "unknown(" + std::to_string(static_cast<int>(h)) + ")";
232 }
233}
234
235} // namespace idfxx
236
237#include "sdkconfig.h"
238#ifdef CONFIG_IDFXX_STD_FORMAT
240#include <algorithm>
241#include <format>
242namespace std {
243template<>
244struct formatter<idfxx::spi::host_device> {
245 constexpr auto parse(format_parse_context& ctx) { return ctx.begin(); }
246
247 template<typename FormatContext>
248 auto format(idfxx::spi::host_device h, FormatContext& ctx) const {
249 auto s = idfxx::to_string(h);
250 return std::copy(s.begin(), s.end(), ctx.out());
251 }
252};
253} // namespace std
255#endif // CONFIG_IDFXX_STD_FORMAT
Type-safe set of flags from a scoped enum.
Definition flags.hpp:88
A GPIO pin.
Definition gpio.hpp:61
static constexpr gpio nc()
Returns a GPIO representing "not connected".
Definition gpio.hpp:254
A SPI master bus.
Definition master.hpp:158
master_bus(master_bus &&other) noexcept
Move constructor.
master_bus(const master_bus &)=delete
static result< master_bus > make(enum host_device host, enum dma_chan dma_chan, struct bus_config config)
Creates a new SPI master bus.
master_bus(enum host_device host, enum dma_chan dma_chan, struct bus_config config)
Constructs a new SPI master bus.
enum host_device host() const
Returns the host device ID the bus is using.
Definition master.hpp:198
master_bus & operator=(master_bus &&other) noexcept
Move assignment.
master_bus & operator=(const master_bus &)=delete
std::string to_string(core_id c)
Returns a string representation of a CPU core identifier.
Definition cpu.hpp:52
dma_chan
SPI DMA channel selection.
Definition master.hpp:52
bus_flags
SPI bus capability and configuration flags.
Definition master.hpp:70
host_device
General purpose SPI Host Controller ID.
Definition master.hpp:40
@ ch_auto
Auto select DMA channel.
@ slp_allow_pd
Allow to power down the peripheral during light sleep, and auto recover then.
@ slave
Bus supports slave mode.
@ iomux_pins
Bus uses IOMUX pins.
@ octal
Check existing of MOSI/MISO/WP/HD/SPIIO4/SPIIO5/SPIIO6/SPIIO7 pins as output.
@ dual
Check MOSI and MISO pins can output. Or indicates bus able to work under DIO mode.
@ quad
Check existing of MOSI/MISO/WP/HD pins as output.
@ io4_io7
Check existing of IO4~IO7 pins. Or indicates IO4~IO7 pins initialized.
@ wphd
Check existing of WP and HD pins. Or indicates WP & HD pins initialized.
@ native_pins
Bus uses native pins.
@ mosi
Check existing of MOSI pin. Or indicates MOSI line initialized.
@ miso
Check existing of MISO pin. Or indicates MISO line initialized.
@ master
Bus supports master mode.
@ sclk
Check existing of SCLK pin. Or indicates CLK line initialized.
SPI driver classes.
Definition master.hpp:34
std::expected< T, std::error_code > result
result type wrapping a value or error code.
Definition error.hpp:120
SPI bus configuration.
Definition master.hpp:113
idfxx::flags< idfxx::intr_flag > intr_flags
Behavioral interrupt flags.
Definition master.hpp:145
int max_transfer_sz
Maximum transfer size, in bytes.
Definition master.hpp:137
idfxx::gpio data4_io_num
GPIO pin for spi data4 signal in octal mode, or gpio::nc() if not used.
Definition master.hpp:131
idfxx::gpio data6_io_num
GPIO pin for spi data6 signal in octal mode, or gpio::nc() if not used.
Definition master.hpp:133
idfxx::gpio data2_io_num
GPIO pin for spi data2 signal in quad/octal mode, or gpio::nc() if not used.
Definition master.hpp:125
idfxx::gpio mosi_io_num
GPIO pin for Master Out Slave In (=spi_d) signal.
Definition master.hpp:115
idfxx::gpio data1_io_num
GPIO pin for spi data1 signal in quad/octal mode.
Definition master.hpp:120
idfxx::gpio quadhd_io_num
GPIO pin for HD (Hold) signal, or gpio::nc() if not used.
Definition master.hpp:128
idfxx::gpio data0_io_num
GPIO pin for spi data0 signal in quad/octal mode.
Definition master.hpp:116
idfxx::gpio data5_io_num
GPIO pin for spi data5 signal in octal mode, or gpio::nc() if not used.
Definition master.hpp:132
idfxx::gpio quadwp_io_num
GPIO pin for WP (Write Protect) signal, or gpio::nc() if not used.
Definition master.hpp:124
idfxx::gpio data3_io_num
GPIO pin for spi data3 signal in quad/octal mode, or gpio::nc() if not used.
Definition master.hpp:129
idfxx::gpio miso_io_num
GPIO pin for Master In Slave Out (=spi_q) signal.
Definition master.hpp:119
idfxx::gpio sclk_io_num
GPIO pin for SPI Clock signal.
Definition master.hpp:122
std::optional< idfxx::core_id > isr_cpu_id
Select cpu core to register SPI ISR.
Definition master.hpp:142
idfxx::gpio data7_io_num
GPIO pin for spi data7 signal in octal mode, or gpio::nc() if not used.
Definition master.hpp:134
bool data_io_default_level
Output data IO default level when no transaction.
Definition master.hpp:136