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

STM32 SPI device — manages chip-select and delegates transfers to parent bus. More...

#include <StmSpi.h>

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

Public Member Functions

 StmSpiDevice (StmSpiBus *parent, const hf_spi_device_config_t &config) noexcept
 
 ~StmSpiDevice () noexcept override
 
bool Initialize () noexcept override
 Initialize the SPI bus.
 
bool Deinitialize () noexcept override
 Deinitialize the SPI bus.
 
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.
 
const hf_spi_device_config_tGetConfig () const noexcept
 Get the device configuration.
 
- 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 Member Functions

void AssertCS () noexcept
 Assert CS (drive low/high depending on active_low flag)
 
void DeassertCS () noexcept
 Deassert CS.
 
hf_u32_t GetEffectiveTimeout (hf_u32_t requested_ms) const noexcept
 Get effective timeout.
 

Static Private Member Functions

static hf_spi_err_t ConvertHalStatus (hf_u32_t hal_status) noexcept
 Convert HAL status to SPI error.
 

Private Attributes

StmSpiBusparent_bus_
 Parent bus reference.
 
hf_spi_device_config_t config_
 Device configuration.
 

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

STM32 SPI device — manages chip-select and delegates transfers to parent bus.

Each device has its own CS pin (managed via HAL_GPIO_WritePin). The actual SPI peripheral (SCK/MOSI/MISO) is shared via the parent bus.

Constructor & Destructor Documentation

◆ StmSpiDevice()

StmSpiDevice::StmSpiDevice ( StmSpiBus * parent,
const hf_spi_device_config_t & config )
noexcept

◆ ~StmSpiDevice()

StmSpiDevice::~StmSpiDevice ( )
overridenoexcept

Member Function Documentation

◆ AssertCS()

void StmSpiDevice::AssertCS ( )
privatenoexcept

Assert CS (drive low/high depending on active_low flag)

◆ ConvertHalStatus()

hf_spi_err_t StmSpiDevice::ConvertHalStatus ( hf_u32_t hal_status)
staticprivatenoexcept

Convert HAL status to SPI error.

◆ DeassertCS()

void StmSpiDevice::DeassertCS ( )
privatenoexcept

Deassert CS.

◆ Deinitialize()

bool StmSpiDevice::Deinitialize ( )
overridevirtualnoexcept

Deinitialize the SPI bus.

Returns
true if successful, false otherwise
Note
Must be implemented by concrete classes.

Implements BaseSpi.

◆ GetConfig()

const hf_spi_device_config_t & StmSpiDevice::GetConfig ( ) const
inlinenoexcept

Get the device configuration.

◆ GetDeviceConfig()

const void * StmSpiDevice::GetDeviceConfig ( ) const
overridevirtualnoexcept

Get the device configuration for this SPI device.

Returns
Device-specific configuration information

Implements BaseSpi.

◆ GetEffectiveTimeout()

hf_u32_t StmSpiDevice::GetEffectiveTimeout ( hf_u32_t requested_ms) const
privatenoexcept

Get effective timeout.

◆ Initialize()

bool StmSpiDevice::Initialize ( )
overridevirtualnoexcept

Initialize the SPI bus.

Returns
true if successful, false otherwise
Note
Must be implemented by concrete classes.

Implements BaseSpi.

◆ Transfer()

hf_spi_err_t StmSpiDevice::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_dataTransmit data buffer (can be nullptr for read-only)
rx_dataReceive data buffer (can be nullptr for write-only)
lengthNumber of bytes to transfer
timeout_msTimeout in milliseconds (0 = use default)
Returns
hf_spi_err_t result code
Note
Must be implemented by concrete classes.
Chip select is managed automatically by the device implementation.

Implements BaseSpi.

Member Data Documentation

◆ config_

hf_spi_device_config_t StmSpiDevice::config_
private

Device configuration.

◆ parent_bus_

StmSpiBus* StmSpiDevice::parent_bus_
private

Parent bus reference.


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