11#include <soc/gpio_num.h>
12#include <driver/i2c_master.h>
13#include <freertos/FreeRTOS.h>
37 static constexpr const char* TAG =
"HAL::I2C";
40 mutable SemaphoreHandle_t mutex;
45 i2c_master_bus_handle_t bus_handle =
nullptr;
47 std::vector<i2c_master_dev_handle_t> registered_devices;
50 explicit Controller();
64 static Controller _instance;
101 [[nodiscard]] i2c_master_bus_handle_t
get_bus_handle()
const {
return bus_handle; }
111 void write(i2c_master_dev_handle_t device_handle,
114 int32_t timeout_ms = -1)
const;
125 void read(i2c_master_dev_handle_t device_handle,
128 int32_t timeout_ms = -1)
const;
140 void write_read(i2c_master_dev_handle_t device_handle,
141 const uint8_t* write_data,
143 uint8_t* read_buffer,
145 int32_t timeout_ms = -1)
const;
void configure(const bus_config_t &config)
Configures the I2C controller.
Definition i2c.cpp:39
i2c_master_bus_handle_t get_bus_handle() const
Gets the controller's I2C bus handle.
Definition i2c.h:101
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:159
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:112
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:147
static Controller & get_instance()
Returns a reference to the static controller instance.
Definition i2c.h:63
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:135
Controller(const Controller &)=delete
void shutdown()
Safely shuts down the I2C controller and removes all devices.
Definition i2c.cpp:65
void scan_for_devices() const
Scans for I2C devices and outputs all found addresses to the serial log.
Definition i2c.cpp:90
log_source
Definition log_sources.h:12
@ LOG_SOURCE_HAL_I2C
Definition log_sources.h:18
A namespace containing all components of the I2C hardware abstraction layer.
Definition i2c.h:19
i2c_port_num_t port
Definition i2c.h:21
gpio_num_t scl_pin
Definition i2c.h:23
gpio_num_t sda_pin
Definition i2c.h:22
uint16_t address
Definition i2c.h:27
i2c_addr_bit_len_t address_bit_length
Definition i2c.h:29
uint32_t clock_speed
Definition i2c.h:28