semf
spislavehardware.h
Go to the documentation of this file.
1
10#ifndef SEMF_COMMUNICATION_SPISLAVEHARDWARE_H_
11#define SEMF_COMMUNICATION_SPISLAVEHARDWARE_H_
12
15
16namespace semf
17{
25{
26public:
30 enum class ErrorCode : uint8_t
31 {
32 Write_IsBusy = 0,
33 Write_DataIsNullptr,
34 Write_DataSizeIsZero,
35 Read_IsBusy,
36 Read_BufferIsNullptr,
37 Read_BufferSizeIsZero,
38 SetFormat_IsBusy,
39 StopWrite_IsNotWriting,
40 StopRead_IsNotReading,
41 WriteRead_IsBusy,
42 WriteRead_WriteDataIsNullptr,
43 WriteRead_ReadBufferIsNullptr,
44 WriteRead_SizeIsZero,
45 };
46
47 virtual ~SpiSlaveHardware() = default;
48
55 void write(const uint8_t data[], size_t dataSize) override;
62 void read(uint8_t buffer[], size_t bufferSize) override;
63 bool isBusyReading() const override;
64 bool isBusyWriting() const override;
69 void stopRead() override;
74 void stopWrite() override;
75 void setFrame(Frame frame) override;
83 void writeRead(const uint8_t writeData[], uint8_t readBuffer[], size_t size) override;
88 void setFormat(uint8_t bits, TransmissionMode transmission, WireMode wire) override;
89
90protected:
95 void onError(Error thrown);
97 void onDataAvailable();
99 void onDataWritten();
104 void setBusy(bool busy);
110 virtual void writeHardware(const uint8_t data[], size_t dataSize) = 0;
116 virtual void readHardware(uint8_t buffer[], size_t bufferSize) = 0;
123 virtual void writeReadHardware(const uint8_t writeData[], uint8_t readBuffer[], size_t size) = 0;
125 virtual void stopReadHardware() = 0;
127 virtual void stopWriteHardware() = 0;
134 virtual void setFormatHardware(uint8_t bits, TransmissionMode transmission, WireMode wire) = 0;
139 void setWireMode(WireMode mode);
145
146private:
148 bool m_isBusy = false;
150 WireMode m_wire;
152 TransmissionMode m_transmission;
154 static constexpr Error::ClassID kSemfClassId = Error::ClassID::SpiSlaveHardware;
155};
156} /* namespace semf */
157#endif /* SEMF_COMMUNICATION_SPISLAVEHARDWARE_H_ */
This interface standardized the read and write interface for synchronous slave hardware,...
Class for representing errors. Every error should have a unique source code. As a user feel encourage...
Definition: error.h:22
ClassID
Semf class IDs.
Definition: error.h:28
Interface for SPI specific functionalities, which are not solved in a generic way in CommunicationHar...
Definition: spi.h:25
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 ...
void setWireMode(WireMode mode)
Sets the wire mode.
void onError(Error thrown)
Error routine, emits the error signal.
void setFrame(Frame frame) override
Sets the selected usage of start and stop condition.
bool isBusyReading() const override
Communication hardware is busy reading at the moment.
virtual ~SpiSlaveHardware()=default
void setFormat(uint8_t bits, TransmissionMode transmission, WireMode wire) override
Sets the format for the spi slave device.
virtual void readHardware(uint8_t buffer[], size_t bufferSize)=0
Accesses the spi hardware in order to read bufferSize bytes and stores them in buffer.
bool isBusyWriting() const override
Communication hardware is busy writing at the moment.
virtual void stopReadHardware()=0
void read(uint8_t buffer[], size_t bufferSize) override
For reading data, dataAvailable signal will be emitted after successful read.
virtual void stopWriteHardware()=0
virtual void writeReadHardware(const uint8_t writeData[], uint8_t readBuffer[], size_t size)=0
Accesses the spi hardware in order to perform a full duplex read/write.
void setBusy(bool busy)
Sets the flag m_isBusy.
ErrorCode
Error IDs for this class. Error ID identify a unique error() / onError call (excluding transferring).
void setTransmissionMode(TransmissionMode mode)
Sets the transmission mode.
virtual void writeHardware(const uint8_t data[], size_t dataSize)=0
Accesses the spi hardware in order to write dataSize bytes of data.
virtual void setFormatHardware(uint8_t bits, TransmissionMode transmission, WireMode wire)=0
Configures the hardware for insuring the given configuration.
void write(const uint8_t data[], size_t dataSize) override
For writing data, dataWritten signal will be emitted after successful write.
void writeRead(const uint8_t writeData[], uint8_t readBuffer[], size_t size) override
For writing and reading data parallel through the communication hardware 1) For interrupt or one shot...