66 lines
1.9 KiB
C
66 lines
1.9 KiB
C
/*#############################################################################
|
|
## Author: Shaun Reed ##
|
|
## Legal: All Content (c) 2025 Shaun Reed, all rights reserved ##
|
|
## ##
|
|
## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com ##
|
|
##############################################################################
|
|
*/
|
|
#ifndef I2C_H
|
|
#define I2C_H
|
|
|
|
#define I2C_BUS_PORT 0
|
|
|
|
#include <driver/i2c_master.h>
|
|
#include <esp_log.h>
|
|
|
|
/// Tag used for ESP logging.
|
|
static const char* I2C_TAG = "I2C component";
|
|
|
|
/**
|
|
* Construct an ESP I2C master bus given a specific ESP I2C configuration.
|
|
* An I2C constructor may only be called one time in any application.
|
|
*
|
|
* @param config ESP I2C master bus configuration.
|
|
*/
|
|
static void I2C_config_init(const i2c_master_bus_config_t config)
|
|
{
|
|
i2c_master_bus_handle_t i2c;
|
|
ESP_LOGI(I2C_TAG, "Initializing new master I2C bus");
|
|
ESP_ERROR_CHECK(i2c_new_master_bus(&config, &i2c));
|
|
}
|
|
|
|
/**
|
|
* Construct and initialize an ESP I2C master bus.
|
|
* An I2C constructor may only be called one time in any application.
|
|
*
|
|
* @param sda GPIO pin for SDA
|
|
* @param scl GPIO pin for SCL
|
|
*/
|
|
static void I2C_init(gpio_num_t sda, gpio_num_t scl)
|
|
{
|
|
return I2C_config_init((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,
|
|
},
|
|
});
|
|
}
|
|
|
|
/**
|
|
* ESP I2C master bus handle getter.
|
|
* This will fail if an I2C instance was never constructed.
|
|
*/
|
|
static i2c_master_bus_handle_t I2C_get()
|
|
{
|
|
i2c_master_bus_handle_t i2c = NULL;
|
|
ESP_ERROR_CHECK(i2c_master_get_bus_handle(0, &i2c));
|
|
return i2c;
|
|
}
|
|
|
|
#endif // I2C_H
|