#include "i2c.h" #include "esp_err.h" #include i2c_master_bus_handle_t bus; void i2c_init(int sda, int scl) { i2c_master_bus_config_t cfg = { .i2c_port = I2C_PORT, .sda_io_num = sda, .scl_io_num = scl, .clk_source = I2C_CLK_SRC_DEFAULT, .glitch_ignore_cnt = 7, .flags.enable_internal_pullup = true, }; i2c_new_master_bus(&cfg, &bus); } esp_err_t i2c_write_reg(uint8_t addr, uint8_t reg, uint8_t val) { uint8_t data[2] = {reg, val}; i2c_master_dev_handle_t dev; i2c_device_config_t dev_cfg = { .device_address = addr, .scl_speed_hz = 400000, }; i2c_master_bus_add_device(bus, &dev_cfg, &dev); esp_err_t r = i2c_master_transmit(dev, data, 2, -1); i2c_master_bus_rm_device(dev); return r; } esp_err_t i2c_read_reg(uint8_t addr, uint8_t reg, uint8_t *val) { i2c_master_dev_handle_t dev; i2c_device_config_t dev_cfg = { .device_address = addr, .scl_speed_hz = 400000, }; i2c_master_bus_add_device(bus, &dev_cfg, &dev); i2c_master_transmit_receive(dev, ®, 1, val, 1, -1); i2c_master_bus_rm_device(dev); return ESP_OK; } esp_err_t i2c_read_multi(uint8_t addr, uint8_t reg, uint8_t *buf, int len) { i2c_master_dev_handle_t dev; i2c_device_config_t dev_cfg = { .device_address = addr, .scl_speed_hz = 400000, }; i2c_master_bus_add_device(bus, &dev_cfg, &dev); i2c_master_transmit_receive(dev, ®, 1, buf, len, -1); i2c_master_bus_rm_device(dev); return ESP_OK; } esp_err_t i2c_read_reg_multi(uint8_t addr, uint8_t reg, uint8_t *buf, size_t len) { i2c_master_dev_handle_t dev; i2c_device_config_t cfg = { .device_address = addr, .scl_speed_hz = 400000, }; esp_err_t err; err = i2c_master_bus_add_device(bus, &cfg, &dev); if (err != ESP_OK) return err; err = i2c_master_transmit_receive(dev, ®, 1, buf, len, -1); i2c_master_bus_rm_device(dev); return err; }