10#ifndef SEMF_HARDWAREABSTRACTION_STM32_STM32I2CSLAVE_H_
11#define SEMF_HARDWAREABSTRACTION_STM32_STM32I2CSLAVE_H_
17#if defined(STM32) && defined(HAL_I2C_MODULE_ENABLED)
35 SystemIsrListen_EnableListenHalError,
36 SystemIsrListen_EnableListenHalBusy,
37 SystemIsrListen_EnableListenHalTimeout,
39 SystemIsrError_HalError,
40 ReadHardware_HalError,
42 ReadHardware_HalTimeout,
43 WriteHardware_HalError,
44 WriteHardware_HalBusy,
45 WriteHardware_HalTimeout,
46 StartListeningHardware_HalError,
47 StartListeningHardware_HalBusy,
48 StartListeningHardware_HalTimeout,
49 StopListeningHardware_HalError,
50 StopListeningHardware_HalBusy,
51 StopListeningHardware_HalTimeout
112 static void systemIsrAddressing(I2C_HandleTypeDef& hwHandle, uint8_t direction, uint16_t addrMatchCode);
121 void readHardware(uint8_t buffer[],
size_t bufferSize)
override;
128 void writeHardware(
const uint8_t data[],
size_t dataSize)
override;
158 I2C_HandleTypeDef* m_hwHandle;
162 uint8_t* m_readBuffer;
164 size_t m_readBufferSize;
166 static constexpr Error::ClassID kSemfClassId = Error::ClassID::Stm32I2cSlave;
This class can be used for using the I2C bus as a slave. Call startListening() for receiving I/O-requ...
uint8_t address() const override
Returns the I2C slave device address.
CommunicationHardware::Frame frame() const
Returns the actual frame mode setting.
LinkedQueue is an managed single linked queue implementation.
I2cSlaveHardware implementation for STM32.
void stopListeningHardware() override
void writeHardware(const uint8_t data[], size_t dataSize) override
Hardware will write data. After finished write operation, onDataWritten() function will be called.
void setFrequency(uint32_t hz) override
Sets the speed (I2C baud rate).
static void systemIsrAddressing(I2C_HandleTypeDef &hwHandle, uint8_t direction, uint16_t addrMatchCode)
I2C_HandleTypeDef * hardwareHandle()
Returns the hardware Handle.
virtual ~Stm32I2cSlave()=default
void readHardware(uint8_t buffer[], size_t bufferSize) override
Hardware will read data. After finished read operation, onDataAvailable() function will be called.
void setAddressHardware(uint8_t address) override
Sets the address of the i2c hardware.
static void systemIsrWritten(I2C_HandleTypeDef &hwHandle)
System-wide isr for data transmission on an I2C-bus.
static void systemIsrError(I2C_HandleTypeDef &hwHandle)
virtual uint32_t hardwareFrame(CommunicationHardware::Frame frame) const
Converts the frame information from semf to STM.
Stm32I2cSlave(const Stm32I2cSlave &other)=delete
static void systemIsrListen(I2C_HandleTypeDef &hwHandle)
System-wide isr for end of listening on an I2C-bus.
static void systemIsrRead(I2C_HandleTypeDef &hwHandle)
System-wide isr for data reception on an I2C-bus.
void stopWrite() override
Stm32I2cSlave(I2C_HandleTypeDef &hwHandle)
Constructor.
void startListeningHardware() override