18 bool transmit(uint16_t address, uint8_t *data,
size_t size,
20 std::lock_guard lock{mtx_};
21 if (HAL_I2C_Master_Transmit_IT(hi2c_, address << 1, data, size) != HAL_OK) {
25 while (hi2c_->State != HAL_I2C_STATE_READY) {
27 if (elapsed >= timeout) {
35 bool receive(uint16_t address, uint8_t *data,
size_t size, uint32_t timeout) {
36 std::lock_guard lock{mtx_};
38 if (HAL_I2C_Master_Receive_IT(hi2c_, address << 1, data, size) != HAL_OK) {
41 while (hi2c_->State != HAL_I2C_STATE_READY) {
43 if (elapsed >= timeout) {
54 I2C_HandleTypeDef *hi2c_;
static uint32_t get_ticks()
Definition kernel.hpp:14
static void delay(uint32_t ticks)
Definition thread.hpp:32
Definition i2c_master.hpp:14
I2CMaster(I2C_HandleTypeDef *hi2c)
Definition i2c_master.hpp:16
I2C_HandleTypeDef * get_hal_handle()
Definition i2c_master.hpp:51
bool receive(uint16_t address, uint8_t *data, size_t size, uint32_t timeout)
Definition i2c_master.hpp:35
bool transmit(uint16_t address, uint8_t *data, size_t size, uint32_t timeout)
Definition i2c_master.hpp:18