Boboter
Loading...
Searching...
No Matches
i2c.h
Go to the documentation of this file.
1
7
8#pragma once
9
10#include <vector>
11#include <soc/gpio_num.h>
12#include <driver/i2c_master.h>
13#include <freertos/FreeRTOS.h>
14
18namespace HAL::I2C {
19 struct bus_config_t {
20 i2c_port_num_t port;
21 gpio_num_t sda_pin;
22 gpio_num_t scl_pin;
23 };
24
26 uint16_t address;
27 uint32_t clock_speed;
28 i2c_addr_bit_len_t address_bit_length;
29 };
30
34 class Controller {
35 private:
36 static constexpr const char* TAG = "HAL::I2C";
37
38 mutable SemaphoreHandle_t mutex;
39
40 bus_config_t config;
41 bool is_configured;
42
43 i2c_master_bus_handle_t bus_handle = nullptr;
44
45 std::vector<i2c_master_dev_handle_t> registered_devices;
46
47 private:
48 explicit Controller();
49 ~Controller();
50
51 public:
52 Controller(const Controller&) = delete;
53 Controller& operator=(const Controller&) = delete;
54
61 static Controller& get_instance() {
62 static Controller _instance;
63 return _instance;
64 }
65
71 void configure(const bus_config_t& config);
72
76 void shutdown();
77
81 void scan_for_devices() const;
82
92 i2c_master_dev_handle_t add_device(const device_config_t& config);
93
99 [[nodiscard]] i2c_master_bus_handle_t get_bus_handle() const { return bus_handle; }
100
109 void write(i2c_master_dev_handle_t device_handle, const uint8_t* data, size_t size, int32_t timeout_ms = -1) const;
110
120 void read(i2c_master_dev_handle_t device_handle, uint8_t* buffer, size_t size, int32_t timeout_ms = -1) const;
121
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;
134 };
135}
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
Definition i2c.h:19
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
Definition i2c.h:25
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