HF Interface Wrapper 0.1.0-dev
Embedded C++ hardware abstraction layer
Loading...
Searching...
No Matches
StmSpi.h
Go to the documentation of this file.
1
33#pragma once
34
35#include "BaseSpi.h"
36#include "StmTypes.h"
37#include <vector>
38#include <memory>
39
40class StmSpiBus;
41
48class StmSpiDevice : public BaseSpi {
49public:
50 StmSpiDevice(StmSpiBus* parent, const hf_spi_device_config_t& config) noexcept;
51 ~StmSpiDevice() noexcept override;
52
53 bool Initialize() noexcept override;
54 bool Deinitialize() noexcept override;
55
56 hf_spi_err_t Transfer(const hf_u8_t* tx_data, hf_u8_t* rx_data,
57 hf_u16_t length, hf_u32_t timeout_ms = 0) noexcept override;
58
59 const void* GetDeviceConfig() const noexcept override;
60
62 const hf_spi_device_config_t& GetConfig() const noexcept { return config_; }
63
64private:
66 void AssertCS() noexcept;
67
69 void DeassertCS() noexcept;
70
72 hf_u32_t GetEffectiveTimeout(hf_u32_t requested_ms) const noexcept;
73
75 static hf_spi_err_t ConvertHalStatus(hf_u32_t hal_status) noexcept;
76
79};
80
86class StmSpiBus {
87public:
88 explicit StmSpiBus(const hf_spi_bus_config_t& config) noexcept;
89
91 explicit StmSpiBus(SPI_HandleTypeDef* hal_handle, hf_u32_t timeout_ms = 1000) noexcept;
92
93 ~StmSpiBus() noexcept;
94
95 bool Initialize() noexcept;
96 bool IsInitialized() const noexcept;
97 bool Deinitialize() noexcept;
98
99 int CreateDevice(const hf_spi_device_config_t& device_config) noexcept;
100 BaseSpi* GetDevice(int device_index) noexcept;
101 const BaseSpi* GetDevice(int device_index) const noexcept;
102 std::size_t GetDeviceCount() const noexcept;
103 bool RemoveDevice(int device_index) noexcept;
104 const hf_spi_bus_config_t& GetConfig() const noexcept;
105
107 SPI_HandleTypeDef* GetHalHandle() const noexcept;
108
109private:
111 bool initialized_{false};
112 std::vector<std::unique_ptr<StmSpiDevice>> devices_;
113};
Abstract base class for SPI device implementations in the HardFOC system.
hf_spi_err_t
Definition BaseSpi.h:84
uint32_t hf_u32_t
Platform-agnostic 32-bit unsigned integer type.
Definition HardwareTypes.h:52
uint8_t hf_u8_t
Platform-agnostic 8-bit unsigned integer type.
Definition HardwareTypes.h:40
uint16_t hf_u16_t
Platform-agnostic 16-bit unsigned integer type.
Definition HardwareTypes.h:46
STM32 platform-specific type definitions for hardware abstraction.
Abstract base class for SPI device implementations.
Definition BaseSpi.h:184
bool IsInitialized() const noexcept
Checks if the bus is initialized.
Definition BaseSpi.h:223
bool initialized_
Initialization state.
Definition BaseSpi.h:430
STM32 SPI bus — manages the HAL handle and device collection.
Definition StmSpi.h:86
std::vector< std::unique_ptr< StmSpiDevice > > devices_
Definition StmSpi.h:112
hf_spi_bus_config_t config_
Definition StmSpi.h:110
STM32 SPI device — manages chip-select and delegates transfers to parent bus.
Definition StmSpi.h:48
hf_u32_t GetEffectiveTimeout(hf_u32_t requested_ms) const noexcept
Get effective timeout.
Definition StmSpi.cpp:118
void DeassertCS() noexcept
Deassert CS.
Definition StmSpi.cpp:112
const hf_spi_device_config_t & GetConfig() const noexcept
Get the device configuration.
Definition StmSpi.h:62
const void * GetDeviceConfig() const noexcept override
Get the device configuration for this SPI device.
Definition StmSpi.cpp:101
bool Deinitialize() noexcept override
Deinitialize the SPI bus.
Definition StmSpi.cpp:50
void AssertCS() noexcept
Assert CS (drive low/high depending on active_low flag)
Definition StmSpi.cpp:105
bool Initialize() noexcept override
Initialize the SPI bus.
Definition StmSpi.cpp:37
StmSpiBus * parent_bus_
Parent bus reference.
Definition StmSpi.h:77
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.
Definition StmSpi.cpp:58
static hf_spi_err_t ConvertHalStatus(hf_u32_t hal_status) noexcept
Convert HAL status to SPI error.
Definition StmSpi.cpp:124
~StmSpiDevice() noexcept override
Definition StmSpi.cpp:33
hf_spi_device_config_t config_
Device configuration.
Definition StmSpi.h:78
StmSpiDevice(StmSpiBus *parent, const hf_spi_device_config_t &config) noexcept
Definition StmSpi.cpp:30
Platform-agnostic SPI bus configuration for STM32.
Definition EspTypes_SPI.h:150
SPI device configuration for STM32.
Definition EspTypes_SPI.h:210