From 64d817e3625ec0c165678697a1f7b235d4de0520 Mon Sep 17 00:00:00 2001 From: Shaun Reed Date: Sat, 15 Feb 2025 17:44:58 -0500 Subject: [PATCH] Move I2C into header file. --- esp/cpp/07_lcd-panel/main/display.cpp | 22 +------------ esp/cpp/07_lcd-panel/main/display.h | 12 ------- esp/cpp/07_lcd-panel/main/i2c.h | 41 ++++++++++++++++++++++++ esp/cpp/07_lcd-panel/main/main.cpp | 2 +- esp/cpp/07_lcd-panel/main/panel_device.h | 7 ++-- esp/cpp/07_lcd-panel/main/ssd1306.cpp | 2 -- 6 files changed, 45 insertions(+), 41 deletions(-) create mode 100644 esp/cpp/07_lcd-panel/main/i2c.h diff --git a/esp/cpp/07_lcd-panel/main/display.cpp b/esp/cpp/07_lcd-panel/main/display.cpp index fcd9313..b0f5a5d 100644 --- a/esp/cpp/07_lcd-panel/main/display.cpp +++ b/esp/cpp/07_lcd-panel/main/display.cpp @@ -10,7 +10,6 @@ #include #include #include -#include #include // LVGL library is not thread-safe, this example calls LVGL APIs from tasks. @@ -165,25 +164,6 @@ void Display::lvgl_increase_tick(void *) } } -I2C::I2C(gpio_num_t sda, gpio_num_t scl) : - i2c_bus_(nullptr), - bus_config_( - (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_LOGI(TAG, "Initialize I2C bus"); - ESP_ERROR_CHECK(i2c_new_master_bus(&bus_config_, &i2c_bus_)); -} - Panel::Panel(IPanelDevice *device) : device_(device), io_handle_(nullptr), @@ -191,7 +171,7 @@ Panel::Panel(IPanelDevice *device) : // According to SSD1306 datasheet panel_config_( (esp_lcd_panel_dev_config_t) { - .reset_gpio_num = device_->reset_gpio_num_, + .reset_gpio_num = PIN_RST, .bits_per_pixel = 1, // .vendor_config should be set in IPanelDevice::init_panel override } diff --git a/esp/cpp/07_lcd-panel/main/display.h b/esp/cpp/07_lcd-panel/main/display.h index 701a127..f587322 100644 --- a/esp/cpp/07_lcd-panel/main/display.h +++ b/esp/cpp/07_lcd-panel/main/display.h @@ -15,22 +15,10 @@ #include "panel_device.h" -#define I2C_BUS_PORT 0 #define LVGL_TICK_PERIOD_MS 5 #define LVGL_TASK_STACK_SIZE (4 * 1024) #define LVGL_TASK_PRIORITY 2 -struct I2C { - I2C(gpio_num_t sda, gpio_num_t scl); - - ~I2C() = default; - - i2c_master_bus_handle_t i2c_bus_; - -private: - i2c_master_bus_config_t bus_config_; -}; - struct ScopedLock { explicit ScopedLock() { _lock_acquire(&lock_); } diff --git a/esp/cpp/07_lcd-panel/main/i2c.h b/esp/cpp/07_lcd-panel/main/i2c.h new file mode 100644 index 0000000..ce7b2d2 --- /dev/null +++ b/esp/cpp/07_lcd-panel/main/i2c.h @@ -0,0 +1,41 @@ +#ifndef I2C_H +#define I2C_H + +#define I2C_BUS_PORT 0 + +#include +#include "soc/gpio_num.h" + +static const char *TAG = "lcd-panel"; + +struct I2C { + I2C(gpio_num_t sda, gpio_num_t scl, int rst = -1) : + i2c_bus_(nullptr), + rst_num_(rst), + bus_config_( + (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_LOGI(TAG, "Initialize I2C bus"); + ESP_ERROR_CHECK(i2c_new_master_bus(&bus_config_, &i2c_bus_)); + } + + ~I2C() = default; + + i2c_master_bus_handle_t i2c_bus_; + + int rst_num_; +private: + i2c_master_bus_config_t bus_config_; +}; + +#endif //I2C_H diff --git a/esp/cpp/07_lcd-panel/main/main.cpp b/esp/cpp/07_lcd-panel/main/main.cpp index ff916a2..7136de2 100644 --- a/esp/cpp/07_lcd-panel/main/main.cpp +++ b/esp/cpp/07_lcd-panel/main/main.cpp @@ -8,7 +8,7 @@ // TODO: Can this be static since there can only be one initialization? // TODO: Store RST in I2C and retrieve within SSD instead of the #define -I2C i2c(PIN_SDA, PIN_SCL); +I2C i2c(PIN_SDA, PIN_SCL, PIN_RST); void setup() { diff --git a/esp/cpp/07_lcd-panel/main/panel_device.h b/esp/cpp/07_lcd-panel/main/panel_device.h index 7d41021..a6c1319 100644 --- a/esp/cpp/07_lcd-panel/main/panel_device.h +++ b/esp/cpp/07_lcd-panel/main/panel_device.h @@ -9,16 +9,14 @@ #include #include "display/lv_display.h" -#define LVGL_PALETTE_SIZE 8 +#include "i2c.h" -static const char *TAG = "lcd-panel"; +#define LVGL_PALETTE_SIZE 8 class IPanelDevice { public: explicit IPanelDevice(i2c_master_bus_handle_t i2c, - int reset_gpio_num, esp_lcd_panel_io_i2c_config_t io_config) : - reset_gpio_num_(reset_gpio_num), i2c_bus_(i2c), io_config_(io_config) { } @@ -47,7 +45,6 @@ public: int32_t width_; int32_t height_; - int reset_gpio_num_; // LVGL reserves 2x4 bytes in the buffer to be used as a palette. size_t lv_buf_size_; diff --git a/esp/cpp/07_lcd-panel/main/ssd1306.cpp b/esp/cpp/07_lcd-panel/main/ssd1306.cpp index 081f80f..d10bcff 100644 --- a/esp/cpp/07_lcd-panel/main/ssd1306.cpp +++ b/esp/cpp/07_lcd-panel/main/ssd1306.cpp @@ -9,7 +9,6 @@ SSD1306::SSD1306(i2c_master_bus_handle_t i2c, int width, int height) : IPanelDevice(i2c, - PIN_RST, (esp_lcd_panel_io_i2c_config_t) { .dev_addr = I2C_HW_ADDR, .control_phase_bytes = 1, @@ -23,7 +22,6 @@ SSD1306::SSD1306(i2c_master_bus_handle_t i2c, { this->width_ = width; this->height_ = height; - this->reset_gpio_num_ = PIN_RST; this->lv_buf_size_ = width_ * height_ / 8 + LVGL_PALETTE_SIZE; }