11#include <soc/gpio_num.h>
12#include <driver/i2c_master.h>
13#include <freertos/FreeRTOS.h>
36 static constexpr const char* TAG =
"HAL::I2C";
38 mutable SemaphoreHandle_t mutex;
43 i2c_master_bus_handle_t bus_handle =
nullptr;
45 std::vector<i2c_master_dev_handle_t> registered_devices;
48 explicit Controller();
62 static Controller _instance;
99 [[nodiscard]] i2c_master_bus_handle_t
get_bus_handle()
const {
return bus_handle; }
109 void write(i2c_master_dev_handle_t device_handle,
const uint8_t* data,
size_t size, int32_t timeout_ms = -1)
const;
120 void read(i2c_master_dev_handle_t device_handle, uint8_t* buffer,
size_t size, int32_t timeout_ms = -1)
const;
132 void write_read(i2c_master_dev_handle_t device_handle,
const uint8_t* write_data,
size_t write_size, uint8_t* read_buffer,
size_t
133 read_size, int32_t timeout_ms = -1)
const;
void configure(const bus_config_t &config)
Configures the I2C controller.
Definition i2c.cpp:33
i2c_master_bus_handle_t get_bus_handle() const
Gets the controller's I2C bus handle.
Definition i2c.h:99
Controller & operator=(const Controller &)=delete
void write_read(i2c_master_dev_handle_t device_handle, const uint8_t *write_data, size_t write_size, uint8_t *read_buffer, size_t read_size, int32_t timeout_ms=-1) const
Write-read operation (Repeated Start, Recommended for reading on most devices).
Definition i2c.cpp:146
i2c_master_dev_handle_t add_device(const device_config_t &config)
Adds a device to the I2C bus and returns its handle.
Definition i2c.cpp:106
void read(i2c_master_dev_handle_t device_handle, uint8_t *buffer, size_t size, int32_t timeout_ms=-1) const
Reads data from a specific device (For reading data, write_read should be preferred,...
Definition i2c.cpp:137
static Controller & get_instance()
Returns a reference to the static controller instance.
Definition i2c.h:61
void write(i2c_master_dev_handle_t device_handle, const uint8_t *data, size_t size, int32_t timeout_ms=-1) const
Writes data to a specific device.
Definition i2c.cpp:128
Controller(const Controller &)=delete
void shutdown()
Safely shuts down the I2C controller and removes all devices.
Definition i2c.cpp:59
void scan_for_devices() const
Scans for I2C devices and outputs all found addresses to the serial log.
Definition i2c.cpp:84
A namespace containing all components of the I2C hardware abstraction layer.
Definition i2c.h:18
i2c_port_num_t port
Definition i2c.h:20
gpio_num_t scl_pin
Definition i2c.h:22
gpio_num_t sda_pin
Definition i2c.h:21
uint16_t address
Definition i2c.h:26
i2c_addr_bit_len_t address_bit_length
Definition i2c.h:28
uint32_t clock_speed
Definition i2c.h:27