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#include "include/log_sources.h"
15
19namespace HAL::I2C {
20 struct bus_config_t {
21 i2c_port_num_t port;
22 gpio_num_t sda_pin;
23 gpio_num_t scl_pin;
24 };
25
27 uint16_t address;
28 uint32_t clock_speed;
29 i2c_addr_bit_len_t address_bit_length;
30 };
31
35 class Controller {
36 private:
37 static constexpr const char* TAG = "HAL::I2C";
38 static constexpr log_source LOG_SOURCE = LOG_SOURCE_HAL_I2C;
39
40 mutable SemaphoreHandle_t mutex;
41
42 bus_config_t config;
43 bool is_configured;
44
45 i2c_master_bus_handle_t bus_handle = nullptr;
46
47 std::vector<i2c_master_dev_handle_t> registered_devices;
48
49 private:
50 explicit Controller();
51 ~Controller();
52
53 public:
54 Controller(const Controller&) = delete;
55 Controller& operator=(const Controller&) = delete;
56
63 static Controller& get_instance() {
64 static Controller _instance;
65 return _instance;
66 }
67
73 void configure(const bus_config_t& config);
74
78 void shutdown();
79
83 void scan_for_devices() const;
84
94 i2c_master_dev_handle_t add_device(const device_config_t& config);
95
101 [[nodiscard]] i2c_master_bus_handle_t get_bus_handle() const { return bus_handle; }
102
111 void write(i2c_master_dev_handle_t device_handle,
112 const uint8_t* data,
113 size_t size,
114 int32_t timeout_ms = -1) const;
115
125 void read(i2c_master_dev_handle_t device_handle,
126 uint8_t* buffer,
127 size_t size,
128 int32_t timeout_ms = -1) const;
129
140 void write_read(i2c_master_dev_handle_t device_handle,
141 const uint8_t* write_data,
142 size_t write_size,
143 uint8_t* read_buffer,
144 size_t read_size,
145 int32_t timeout_ms = -1) const;
146 };
147}
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
Definition i2c.h:20
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
Definition i2c.h:26
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