semf
stm32spislave.h
Go to the documentation of this file.
1
10#ifndef SEMF_HARDWAREABSTRACTION_STM32_STM32SPISLAVE_H_
11#define SEMF_HARDWAREABSTRACTION_STM32_STM32SPISLAVE_H_
12
17
18#if defined(STM32) && defined(HAL_SPI_MODULE_ENABLED)
19namespace semf
20{
24class Stm32SpiSlave : public SpiSlaveHardware, public LinkedQueue<Stm32SpiSlave>::Node
25{
26public:
28 enum class ErrorCode : uint8_t
29 {
30 Init_HalError = 0,
31 Init_HalBusy,
32 Init_HalTimeout,
33 Deinit_HalError,
34 Deinit_HalBusy,
35 Deinit_HalTimeout,
36 SystemIsrError_Isr,
37 SetFormatHardware_BitsNotSupported,
38 StopWriteHardware_HalError,
39 StopWriteHardware_HalBusy,
40 StopWriteHardware_HalTimeout,
41 StopReadHardware_HalError,
42 StopReadHardware_HalBusy,
43 StopReadHardware_HalTimeout,
44 WriteHardware_HalError,
45 WriteHardware_HalBusy,
46 WriteHardware_HalTimeout,
47 ReadHardware_HalError,
48 ReadHardware_HalBusy,
49 ReadHardware_HalTimeout,
50 WriteReadHardware_HalError,
51 WriteReadHardware_HalBusy,
52 WriteReadHardware_HalTimeout
53 };
54
59 explicit Stm32SpiSlave(SPI_HandleTypeDef& hwHandle);
60 explicit Stm32SpiSlave(const Stm32SpiSlave& other) = delete;
61 virtual ~Stm32SpiSlave() = default;
62
69 void init() override;
76 void deinit() override;
81 static void systemIsrRead(SPI_HandleTypeDef& hwHandle);
86 static void systemIsrWritten(SPI_HandleTypeDef& hwHandle);
91 static void systemIsrWrittenAndRead(SPI_HandleTypeDef& hwHandle);
96 static void systemIsrError(SPI_HandleTypeDef& hwHandle);
101 static void systemIsrAbort(SPI_HandleTypeDef& hwHandle);
102
103protected:
110 void writeHardware(const uint8_t data[], size_t dataSize) override;
117 void readHardware(uint8_t buffer[], size_t bufferSize) override;
124 void writeReadHardware(const uint8_t writeData[], uint8_t readBuffer[], size_t size) override;
131 void stopReadHardware() override;
138 void stopWriteHardware() override;
140 void onReadWritten();
144 void onAbortedHardware();
145 void setFormatHardware(uint8_t bits, TransmissionMode transmission, WireMode wire) override;
146
147private:
149 SPI_HandleTypeDef* m_hwHandle;
151 static LinkedQueue<Stm32SpiSlave> m_queue;
153 Signal<> aborted;
155 SEMF_SLOT(m_abortedSlot, Signal<>, writeStopped, emitSignal);
157 uint8_t* m_writeData;
159 size_t m_writeDataSize;
161 uint8_t* m_readBuffer;
163 static constexpr Error::ClassID kSemfClassId = Error::ClassID::Stm32SpiSlave;
164};
165} // namespace semf
166#endif
167#endif /* SEMF_HARDWAREABSTRACTION_STM32_STM32SPISLAVE_H_ */
ClassID
Semf class IDs.
Definition: error.h:28
LinkedQueue is an managed single linked queue implementation.
Definition: linkedqueue.h:38
Signal for lightweight signal/slot implementation. One signal can be connected to multiple slots and ...
Definition: signal.h:41
WireMode
Definition: spi.h:37
TransmissionMode
Definition: spi.h:29
Class for using spi hardware in slave mode. In order of being a SPI slave IO-operations will not get ...
SpiSlaveHardware implementation for STM32.
Definition: stm32spislave.h:25
static void systemIsrWrittenAndRead(SPI_HandleTypeDef &hwHandle)
Handles the global receive transmit complete callback.
static void systemIsrError(SPI_HandleTypeDef &hwHandle)
Handles the global error callback.
static void systemIsrAbort(SPI_HandleTypeDef &hwHandle)
Handles the global abort callback.
static void systemIsrRead(SPI_HandleTypeDef &hwHandle)
Handles the global receive complete callback.
void writeReadHardware(const uint8_t writeData[], uint8_t readBuffer[], size_t size) override
Accesses the spi hardware in order to perform a full duplex read/write.
Stm32SpiSlave(SPI_HandleTypeDef &hwHandle)
Constructor.
void readHardware(uint8_t buffer[], size_t bufferSize) override
Accesses the spi hardware in order to read bufferSize bytes and stores them in buffer.
void deinit() override
void writeHardware(const uint8_t data[], size_t dataSize) override
Accesses the spi hardware in order to write dataSize bytes of data.
static void systemIsrWritten(SPI_HandleTypeDef &hwHandle)
Handles the global transmit complete callback.
void setFormatHardware(uint8_t bits, TransmissionMode transmission, WireMode wire) override
Configures the hardware for insuring the given configuration.
void stopWriteHardware() override
virtual ~Stm32SpiSlave()=default
void init() override
void stopReadHardware() override
Stm32SpiSlave(const Stm32SpiSlave &other)=delete