2025-02-15 17:44:58 -05:00
|
|
|
#ifndef I2C_H
|
|
|
|
#define I2C_H
|
|
|
|
|
|
|
|
#define I2C_BUS_PORT 0
|
|
|
|
|
|
|
|
#include <driver/i2c_master.h>
|
|
|
|
|
|
|
|
static const char *TAG = "lcd-panel";
|
|
|
|
|
|
|
|
struct I2C {
|
|
|
|
I2C(gpio_num_t sda, gpio_num_t scl, int rst = -1) :
|
2025-02-15 18:26:26 -05:00
|
|
|
esp_i2c_bus_(nullptr),
|
2025-02-15 17:44:58 -05:00
|
|
|
rst_num_(rst),
|
2025-02-15 18:26:26 -05:00
|
|
|
esp_bus_config_(
|
2025-02-15 17:44:58 -05:00
|
|
|
(i2c_master_bus_config_t) {
|
|
|
|
.i2c_port = I2C_BUS_PORT,
|
|
|
|
.sda_io_num = sda,
|
|
|
|
.scl_io_num = scl,
|
|
|
|
.clk_source = I2C_CLK_SRC_DEFAULT,
|
|
|
|
.glitch_ignore_cnt = 7,
|
|
|
|
.flags {
|
|
|
|
.enable_internal_pullup = true,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
)
|
|
|
|
{
|
2025-02-15 18:26:26 -05:00
|
|
|
ESP_LOGI(TAG, "Initializing new master I2C bus");
|
|
|
|
ESP_ERROR_CHECK(i2c_new_master_bus(&esp_bus_config_, &esp_i2c_bus_));
|
2025-02-15 17:44:58 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
~I2C() = default;
|
|
|
|
|
2025-02-16 07:21:16 -05:00
|
|
|
// TODO: Can you use the I2C get_master_bus API in a static method?
|
2025-02-15 18:26:26 -05:00
|
|
|
i2c_master_bus_handle_t esp_i2c_bus_;
|
2025-02-15 17:44:58 -05:00
|
|
|
|
|
|
|
int rst_num_;
|
2025-02-15 18:26:26 -05:00
|
|
|
|
2025-02-15 17:44:58 -05:00
|
|
|
private:
|
2025-02-15 18:26:26 -05:00
|
|
|
i2c_master_bus_config_t esp_bus_config_;
|
2025-02-15 17:44:58 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif //I2C_H
|