From cc5bffd1e7325f4cbcde233a918a6f0fdfc81abd Mon Sep 17 00:00:00 2001 From: Shaun Reed Date: Sat, 15 Feb 2025 10:23:59 -0500 Subject: [PATCH] Store configs used in ctors. --- esp/cpp/07_lcd-panel/main/display.cpp | 72 ++++++++++++++++----------- esp/cpp/07_lcd-panel/main/display.h | 6 +++ esp/cpp/07_lcd-panel/sdkconfig | 1 + 3 files changed, 49 insertions(+), 30 deletions(-) diff --git a/esp/cpp/07_lcd-panel/main/display.cpp b/esp/cpp/07_lcd-panel/main/display.cpp index 1392934..8f57dda 100644 --- a/esp/cpp/07_lcd-panel/main/display.cpp +++ b/esp/cpp/07_lcd-panel/main/display.cpp @@ -84,15 +84,16 @@ void Display::set_text(const char *text, ESP_LOGI(TAG, "Display LVGL Scroll Text"); lv_obj_t *scr = lv_display_get_screen_active(display_); objects_[name] = lv_label_create(scr); - // Circular scroll - lv_label_set_long_mode(objects_[name], long_mode); - lv_label_set_text(objects_[name], text); + + // Circular scroll. + auto obj = objects_[name]; + lv_label_set_long_mode(obj, long_mode); + lv_label_set_text(obj, text); // Set the size of the screen. // If you use rotation 90 or 270 use lv_display_get_vertical_resolution. - lv_obj_set_width(objects_[name], - lv_display_get_horizontal_resolution(display_)); - lv_obj_align(objects_[name], align, 0, 0); + lv_obj_set_width(obj, lv_display_get_horizontal_resolution(display_)); + lv_obj_align(obj, align, 0, 0); } bool Display::lvgl_flush_ready(esp_lcd_panel_io_handle_t, @@ -166,49 +167,60 @@ void Display::lvgl_increase_tick(void *) } } -I2C::I2C() : i2c_bus_(nullptr) +I2C::I2C() : + i2c_bus_(nullptr), + bus_config_( + (i2c_master_bus_config_t) { + .i2c_port = I2C_BUS_PORT, + .sda_io_num = PIN_SDA, + .scl_io_num = PIN_SCL, + .clk_source = I2C_CLK_SRC_DEFAULT, + .glitch_ignore_cnt = 7, + .flags { + .enable_internal_pullup = true, + }, + } + ) { ESP_LOGI(TAG, "Initialize I2C bus"); - i2c_master_bus_config_t bus_config = { - .i2c_port = I2C_BUS_PORT, - .sda_io_num = PIN_SDA, - .scl_io_num = PIN_SCL, - .clk_source = I2C_CLK_SRC_DEFAULT, - .glitch_ignore_cnt = 7, - .flags { - .enable_internal_pullup = true, - }, - }; - ESP_ERROR_CHECK(i2c_new_master_bus(&bus_config, &i2c_bus_)); + ESP_ERROR_CHECK(i2c_new_master_bus(&bus_config_, &i2c_bus_)); } Panel::Panel(i2c_master_bus_handle_t i2c) : io_handle_(nullptr), panel_(nullptr), panel_config_( - { + (esp_lcd_panel_dev_config_t) { .reset_gpio_num = PIN_RST, .bits_per_pixel = 1, } + ), + io_config_( + (esp_lcd_panel_io_i2c_config_t) { + .dev_addr = I2C_HW_ADDR, + .control_phase_bytes = 1, // According to SSD1306 datasheet + .dc_bit_offset = 6, // According to SSD1306 datasheet + .lcd_cmd_bits = LCD_CMD_BITS, // According to SSD1306 datasheet + .lcd_param_bits = LCD_CMD_BITS, // According to SSD1306 datasheet + .scl_speed_hz = LCD_PIXEL_CLOCK_HZ, + } ) { ESP_LOGI(TAG, "Install panel IO"); - esp_lcd_panel_io_i2c_config_t io_config = { - .dev_addr = I2C_HW_ADDR, - .control_phase_bytes = 1, // According to SSD1306 datasheet - .dc_bit_offset = 6, // According to SSD1306 datasheet - .lcd_cmd_bits = LCD_CMD_BITS, // According to SSD1306 datasheet - .lcd_param_bits = LCD_CMD_BITS, // According to SSD1306 datasheet - .scl_speed_hz = LCD_PIXEL_CLOCK_HZ, - }; - ESP_ERROR_CHECK( - esp_lcd_new_panel_io_i2c(i2c, &io_config, &io_handle_)); + ESP_ERROR_CHECK(esp_lcd_new_panel_io_i2c(i2c, &io_config_, &io_handle_)); ESP_LOGI(TAG, "Install SSD1306 panel driver"); - SSD1306 ssd1306({.height = LCD_V_RES}); + SSD1306 ssd1306( + (esp_lcd_panel_ssd1306_config_t) { + .height = LCD_V_RES, + } + ); ssd1306.create_panel(panel_config_, io_handle_, panel_); + ESP_LOGI(TAG, "Resetting panel display"); ESP_ERROR_CHECK(esp_lcd_panel_reset(panel_)); + ESP_LOGI(TAG, "Initializing panel display"); ESP_ERROR_CHECK(esp_lcd_panel_init(panel_)); + ESP_LOGI(TAG, "Turning on panel display"); ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_, true)); } diff --git a/esp/cpp/07_lcd-panel/main/display.h b/esp/cpp/07_lcd-panel/main/display.h index 51ec9f9..8ada444 100644 --- a/esp/cpp/07_lcd-panel/main/display.h +++ b/esp/cpp/07_lcd-panel/main/display.h @@ -7,6 +7,7 @@ #include #include #include +#include #include "misc/lv_types.h" #include "misc/lv_area.h" #include "display/lv_display.h" @@ -27,6 +28,9 @@ struct I2C { ~I2C() = default; i2c_master_bus_handle_t i2c_bus_; + +private: + i2c_master_bus_config_t bus_config_; }; struct ScopedLock { @@ -62,6 +66,8 @@ public: private: esp_lcd_panel_dev_config_t panel_config_; + + esp_lcd_panel_io_i2c_config_t io_config_; }; class Display { diff --git a/esp/cpp/07_lcd-panel/sdkconfig b/esp/cpp/07_lcd-panel/sdkconfig index d8ae671..7feaadd 100644 --- a/esp/cpp/07_lcd-panel/sdkconfig +++ b/esp/cpp/07_lcd-panel/sdkconfig @@ -2091,6 +2091,7 @@ CONFIG_MDNS_TASK_STACK_SIZE=4096 CONFIG_MDNS_TASK_AFFINITY_CPU0=y # CONFIG_MDNS_TASK_AFFINITY_CPU1 is not set CONFIG_MDNS_TASK_AFFINITY=0x0 +CONFIG_MDNS_TASK_CREATE_FROM_INTERNAL=y CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS=2000 CONFIG_MDNS_TIMER_PERIOD_MS=100 # CONFIG_MDNS_NETWORKING_SOCKET is not set