HF Interface Wrapper 0.1.0-dev
Embedded C++ hardware abstraction layer
Loading...
Searching...
No Matches
EspSpiDevice Class Reference

Represents a single SPI device on a bus (CS/config/handle). More...

#include <EspSpi.h>

Inheritance diagram for EspSpiDevice:
[legend]
Collaboration diagram for EspSpiDevice:
[legend]

Public Member Functions

 EspSpiDevice (EspSpiBus *parent, const hf_spi_device_config_t &config)
 Construct a new EspSpiDevice.
 
 ~EspSpiDevice () noexcept override
 Destructor. Automatically deinitializes the device if needed.
 
bool Initialize () noexcept override
 Initialize the SPI device (no-op if already initialized).
 
bool Deinitialize () noexcept override
 Deinitialize the SPI device and free resources.
 
bool MarkAsDeinitialized () noexcept
 Mark the device as deinitialized without ESP-IDF cleanup.
 
hf_spi_err_t Transfer (const hf_u8_t *tx_data, hf_u8_t *rx_data, hf_u16_t length, hf_u32_t timeout_ms=0) noexcept override
 Perform a full-duplex SPI transfer.
 
const void * GetDeviceConfig () const noexcept override
 Get the device configuration for this SPI device.
 
hf_spi_err_t AcquireBus (hf_u32_t timeout_ms) noexcept
 Acquire the SPI bus for exclusive use by this device.
 
hf_spi_err_t ReleaseBus () noexcept
 Release the bus lock after operations.
 
spi_device_handle_t GetHandle () const noexcept
 Get the ESP-IDF device handle.
 
const hf_spi_device_config_tGetConfig () const noexcept
 Get the device configuration.
 
hf_spi_err_t GetActualClockFrequency (hf_u32_t &actual_freq_hz) const noexcept
 Get the actual clock frequency used by this device.
 
- Public Member Functions inherited from BaseSpi
virtual ~BaseSpi () noexcept=default
 Virtual destructor ensures proper cleanup in derived classes.
 
 BaseSpi (const BaseSpi &)=delete
 
BaseSpioperator= (const BaseSpi &)=delete
 
 BaseSpi (BaseSpi &&)=delete
 
BaseSpioperator= (BaseSpi &&)=delete
 
bool EnsureInitialized () noexcept
 Ensures that the SPI bus is initialized (lazy initialization).
 
bool EnsureDeinitialized () noexcept
 Ensures that the SPI bus is deinitialized (lazy deinitialization).
 
bool IsInitialized () const noexcept
 Checks if the bus is initialized.
 
virtual bool Open () noexcept
 Legacy compatibility: Open and initialize the SPI bus.
 
virtual bool Close () noexcept
 Legacy compatibility: Close and de-initialize the SPI bus.
 
virtual bool Transfer (const hf_u8_t *tx_data, hf_u8_t *rx_data, hf_u16_t length) noexcept
 Legacy compatibility: Transfer with boolean return.
 
virtual hf_spi_err_t Write (const hf_u8_t *data, hf_u16_t length, hf_u32_t timeout_ms=0) noexcept
 Write data to SPI bus.
 
virtual hf_spi_err_t Read (hf_u8_t *data, hf_u16_t length, hf_u32_t timeout_ms=0) noexcept
 Read data from SPI bus.
 
virtual bool Write (const hf_u8_t *data, hf_u16_t length) noexcept
 Legacy compatibility: Write with boolean return.
 
virtual bool Read (hf_u8_t *data, hf_u16_t length) noexcept
 Legacy compatibility: Read with boolean return.
 
virtual bool WriteByte (hf_u8_t data) noexcept
 Write single byte to SPI bus.
 
virtual bool ReadByte (hf_u8_t &data) noexcept
 Read single byte from SPI bus.
 
virtual bool TransferByte (hf_u8_t tx_data, hf_u8_t &rx_data) noexcept
 Write single byte and read response.
 
virtual hf_spi_err_t ResetStatistics () noexcept
 Reset SPI operation statistics.
 
virtual hf_spi_err_t ResetDiagnostics () noexcept
 Reset SPI diagnostic information.
 
virtual hf_spi_err_t GetStatistics (hf_spi_statistics_t &statistics) const noexcept
 Get SPI operation statistics.
 
virtual hf_spi_err_t GetDiagnostics (hf_spi_diagnostics_t &diagnostics) const noexcept
 Get SPI diagnostic information.
 

Private Attributes

EspSpiBusparent_bus_
 Parent SPI bus.
 
spi_device_handle_t handle_
 ESP-IDF device handle.
 
hf_spi_device_config_t config_
 Device configuration.
 
bool initialized_
 Initialization state.
 
PlatformMutex mutex_
 Thread safety.
 

Additional Inherited Members

- Protected Member Functions inherited from BaseSpi
 BaseSpi () noexcept
 Protected default constructor.
 
- Protected Attributes inherited from BaseSpi
bool initialized_
 Initialization state.
 
hf_spi_statistics_t statistics_
 SPI operation statistics.
 
hf_spi_diagnostics_t diagnostics_
 SPI diagnostic information.
 

Detailed Description

Represents a single SPI device on a bus (CS/config/handle).

Inherits from BaseSpi and delegates transfers to the parent bus. Provides full configuration and control for a single SPI device, including DMA, queueing, and advanced ESP-IDF v5.5+ features.

Note
Thread-safe. All operations are protected by PlatformMutex.

Constructor & Destructor Documentation

◆ EspSpiDevice()

EspSpiDevice::EspSpiDevice ( EspSpiBus * parent,
const hf_spi_device_config_t & config )

Construct a new EspSpiDevice.

Parameters
parentPointer to the parent EspSpiBus
configDevice configuration (hf_spi_device_config_t)

◆ ~EspSpiDevice()

EspSpiDevice::~EspSpiDevice ( )
overridenoexcept

Destructor. Automatically deinitializes the device if needed.

Member Function Documentation

◆ AcquireBus()

hf_spi_err_t EspSpiDevice::AcquireBus ( hf_u32_t timeout_ms)
noexcept

Acquire the SPI bus for exclusive use by this device.

Parameters
timeout_msTimeout in milliseconds for acquiring the bus lock (0 = wait indefinitely)
Returns
hf_spi_err_t result code
Note
Use with ReleaseBus() for back-to-back transactions

◆ Deinitialize()

bool EspSpiDevice::Deinitialize ( )
overridevirtualnoexcept

Deinitialize the SPI device and free resources.

Returns
true if successful, false otherwise

Implements BaseSpi.

◆ GetActualClockFrequency()

hf_spi_err_t EspSpiDevice::GetActualClockFrequency ( hf_u32_t & actual_freq_hz) const
noexcept

Get the actual clock frequency used by this device.

Parameters
actual_freq_hzReference to store the actual frequency (Hz)
Returns
hf_spi_err_t

◆ GetConfig()

const hf_spi_device_config_t & EspSpiDevice::GetConfig ( ) const
noexcept

Get the device configuration.

Returns
const hf_spi_device_config_t&

◆ GetDeviceConfig()

const void * EspSpiDevice::GetDeviceConfig ( ) const
overridevirtualnoexcept

Get the device configuration for this SPI device.

Returns
Pointer to device configuration

Implements BaseSpi.

◆ GetHandle()

spi_device_handle_t EspSpiDevice::GetHandle ( ) const
noexcept

Get the ESP-IDF device handle.

Returns
spi_device_handle_t

◆ Initialize()

bool EspSpiDevice::Initialize ( )
overridevirtualnoexcept

Initialize the SPI device (no-op if already initialized).

Returns
true if successful, false otherwise

Implements BaseSpi.

◆ MarkAsDeinitialized()

bool EspSpiDevice::MarkAsDeinitialized ( )
noexcept

Mark the device as deinitialized without ESP-IDF cleanup.

Returns
true if successful, false otherwise
Note
ESP-IDF cleanup is handled by the parent bus

◆ ReleaseBus()

hf_spi_err_t EspSpiDevice::ReleaseBus ( )
noexcept

Release the bus lock after operations.

Returns
hf_spi_err_t

◆ Transfer()

hf_spi_err_t EspSpiDevice::Transfer ( const hf_u8_t * tx_data,
hf_u8_t * rx_data,
hf_u16_t length,
hf_u32_t timeout_ms = 0 )
overridevirtualnoexcept

Perform a full-duplex SPI transfer.

Parameters
tx_dataPointer to transmit buffer (can be nullptr)
rx_dataPointer to receive buffer (can be nullptr)
lengthNumber of bytes to transfer
timeout_msTimeout in milliseconds (0 = default)
Returns
SPI operation result (hf_spi_err_t)

Implements BaseSpi.

Member Data Documentation

◆ config_

hf_spi_device_config_t EspSpiDevice::config_
private

Device configuration.

◆ handle_

spi_device_handle_t EspSpiDevice::handle_
private

ESP-IDF device handle.

◆ initialized_

bool EspSpiDevice::initialized_
private

Initialization state.

◆ mutex_

PlatformMutex EspSpiDevice::mutex_
private

Thread safety.

◆ parent_bus_

EspSpiBus* EspSpiDevice::parent_bus_
private

Parent SPI bus.


The documentation for this class was generated from the following files: