1#ifdef USE_ESP32_VARIANT_ESP32S3
11 esp_lcd_rgb_panel_config_t config{};
12 config.flags.fb_in_psram = 1;
13 config.bounce_buffer_size_px = this->
width_ * 10;
15 config.timings.h_res = this->
width_;
16 config.timings.v_res = this->
height_;
25 config.clk_src = LCD_CLK_SRC_PLL160M;
27 for (
size_t i = 0; i != data_pin_count; i++) {
30 config.data_width = data_pin_count;
31 config.disp_gpio_num = -1;
36 esp_err_t err = esp_lcd_new_rgb_panel(&config, &this->
handle_);
38 ESP_LOGE(TAG,
"lcd_new_rgb_panel failed: %s", esp_err_to_name(err));
42 ESP_ERROR_CHECK(esp_lcd_panel_reset(this->
handle_));
43 ESP_ERROR_CHECK(esp_lcd_panel_init(this->
handle_));
47 esp_lcd_rgb_panel_restart(this->
handle_);
57 return display::Display::draw_pixels_at(x_start, y_start, w,
h, ptr, order, bitness, big_endian, x_offset, y_offset,
62 esp_err_t err = ESP_OK;
64 if (x_offset == 0 && x_pad == 0 && y_offset == 0) {
66 err = esp_lcd_panel_draw_bitmap(this->
handle_, x_start, y_start, x_start + w, y_start +
h, ptr);
69 auto stride = x_offset + w + x_pad;
70 for (
int y = 0;
y !=
h;
y++) {
71 err = esp_lcd_panel_draw_bitmap(this->
handle_, x_start,
y + y_start, x_start + w,
y + y_start + 1,
72 ptr + ((
y + y_offset) * stride + x_offset) * 2);
78 ESP_LOGE(TAG,
"lcd_lcd_panel_draw_bitmap failed: %s", esp_err_to_name(err));
129 ESP_LOGCONFIG(
"",
"RPI_DPI_RGB LCD");
134 LOG_PIN(
" DE Pin: ", this->
de_pin_);
139 for (
size_t i = 0; i != data_pin_count; i++) {
141 ESP_LOGCONFIG(TAG,
" Data pin %d: %s", i, pin_summary);
void feed_wdt(uint32_t time=0)
virtual void mark_failed()
Mark this component as failed.
virtual void digital_write(bool value)=0
virtual size_t dump_summary(char *buffer, size_t len) const
Write a summary of this pin to the provided buffer.
virtual uint8_t get_pin() const =0
static uint16_t color_to_565(Color color, ColorOrder color_order=ColorOrder::COLOR_ORDER_RGB)
Rect get_clipping() const
Get the current the clipping rectangle.
DisplayRotation rotation_
virtual void draw_pixels_at(int x_start, int y_start, int w, int h, const uint8_t *ptr, ColorOrder order, ColorBitness bitness, bool big_endian, int x_offset, int y_offset, int x_pad)
Given an array of pixels encoded in the nominated format, draw these into the display's buffer.
InternalGPIOPin * data_pins_[16]
void draw_pixels_at(int x_start, int y_start, int w, int h, const uint8_t *ptr, display::ColorOrder order, display::ColorBitness bitness, bool big_endian, int x_offset, int y_offset, int x_pad) override
int get_height_internal() override
uint16_t vsync_back_porch_
InternalGPIOPin * de_pin_
InternalGPIOPin * pclk_pin_
int get_height() override
InternalGPIOPin * hsync_pin_
InternalGPIOPin * vsync_pin_
uint16_t vsync_pulse_width_
uint16_t hsync_pulse_width_
uint16_t vsync_front_porch_
esp_lcd_panel_handle_t handle_
void dump_config() override
uint16_t hsync_front_porch_
int get_width_internal() override
void draw_pixel_at(int x, int y, Color color) override
void reset_display_() const
uint16_t hsync_back_porch_
@ DISPLAY_ROTATION_0_DEGREES
@ DISPLAY_ROTATION_270_DEGREES
@ DISPLAY_ROTATION_180_DEGREES
@ DISPLAY_ROTATION_90_DEGREES
Providing packet encoding functions for exchanging data with a remote host.
constexpr T convert_big_endian(T val)
Convert a value between host byte order and big endian (most significant byte first) order.
constexpr size_t GPIO_SUMMARY_MAX_LEN
Maximum buffer size for dump_summary output.
void IRAM_ATTR HOT delay(uint32_t ms)
Application App
Global storage of Application pointer - only one Application can exist.