10#ifndef SEMF_HARDWAREABSTRACTION_STM32_STM32I2CMASTER_H_
11#define SEMF_HARDWAREABSTRACTION_STM32_STM32I2CMASTER_H_
18#if defined(STM32) && defined(HAL_I2C_MODULE_ENABLED)
44 ReadHardware_HalError,
46 ReadHardware_HalTimeout,
47 WriteHardware_HalError,
48 WriteHardware_HalBusy,
49 WriteHardware_HalTimeout,
122 void isrRead(I2C_HandleTypeDef& i2c);
133 void isrError(I2C_HandleTypeDef& i2c);
138 void isrAbort(I2C_HandleTypeDef& i2c);
158 void readHardware(uint8_t buffer[],
size_t bufferSize)
override;
165 void writeHardware(
const uint8_t data[],
size_t dataSize)
override;
171 void onAddressChecked();
176 SEMF_SLOT(m_canceledSlot,
Signal<>, canceled, emitSignal);
178 SEMF_SLOT(m_onAddressCheckedSlot,
Stm32I2cMaster, *
this, onAddressChecked);
180 I2C_HandleTypeDef* m_hwHandle;
184 static constexpr Error::ClassID kSemfClassId = Error::ClassID::Stm32I2cMaster;
For using the I2C in master mode.
CommunicationHardware::Frame frame() const
Returns the actual frame mode setting.
uint8_t address() const override
Returns the I2C slave device address.
LinkedQueue is an managed single linked queue implementation.
Signal for lightweight signal/slot implementation. One signal can be connected to multiple slots and ...
I2cMasterHardware implementation for STM32.
void isrError(I2C_HandleTypeDef &i2c)
Interrupt service routine for i2c object error.
void writeHardware(const uint8_t data[], size_t dataSize) override
Hardware will write data. After finished write operation, onDataWritten() function will be called.
I2C_HandleTypeDef * hardwareHandle()
Returns the hardware handle.
virtual uint32_t hardwareFrame(CommunicationHardware::Frame frame) const
Converts the frame information from semf to STM.
void checkAddress(uint8_t address) override
Checks if the given address is available on the bus. Emits address found if successful (ACK)....
void stopWrite() override
void isrWritten(I2C_HandleTypeDef &i2c)
Interrupt service routine for i2c object transmit.
virtual ~Stm32I2cMaster()=default
static void systemIsrWritten(I2C_HandleTypeDef &i2c)
System-wide interrupt service routine for i2c transmit.
static LinkedQueue< Stm32I2cMaster > * queue()
Get the list with all i2c.
void readHardware(uint8_t buffer[], size_t bufferSize) override
Hardware will read data. After finished read operation, onDataAvailable() function will be called.
void setFrequency(uint32_t hz) override
Sets the speed (I2C baud rate).
void isrRead(I2C_HandleTypeDef &i2c)
Interrupt service routine for i2c object receive.
static void systemIsrError(I2C_HandleTypeDef &i2c)
System-wide interrupt service routine for i2c error.
Stm32I2cMaster(const Stm32I2cMaster &other)=delete
void isrAbort(I2C_HandleTypeDef &i2c)
Interrupt service routine for i2c object abort.
Stm32I2cMaster(I2C_HandleTypeDef &hwHandle)
Constructor.
static void systemIsrAbort(I2C_HandleTypeDef &i2c)
System-wide interrupt service routine for process canceling.
static void systemIsrRead(I2C_HandleTypeDef &i2c)
System-wide interrupt service routine for i2c receive.