You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
/* * SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0*//** * @file esp_panel_board_custom_conf.h * @brief Configuration file for custom ESP development boards * @author * @link * * This file contains all the configurations needed for a custom board using ESP Panel. * Users can modify these configurations according to their hardware design.*/
#pragma once
// *INDENT-OFF*/** * @brief Flag to enable custom board configuration (0/1) * * Set to `1` to enable custom board configuration, `0` to disable*/
#defineESP_PANEL_BOARD_DEFAULT_USE_CUSTOM (1)
#if ESP_PANEL_BOARD_DEFAULT_USE_CUSTOM
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Please update the following macros to configure general parameters ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////** * @brief Board name (format: "Manufacturer:Model")*/
#defineESP_PANEL_BOARD_NAME"henjue:147"/** * @brief Panel resolution configuration in pixels*/
#defineESP_PANEL_BOARD_WIDTH (172) // Panel width (horizontal, in pixels)
#defineESP_PANEL_BOARD_HEIGHT (320) // Panel height (vertical, in pixels)//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Please update the following macros to configure the LCD panel //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////** * @brief LCD panel configuration flag (0/1) * * Set to `1` to enable LCD panel support, `0` to disable*/
#defineESP_PANEL_BOARD_USE_LCD (1)
#if ESP_PANEL_BOARD_USE_LCD
/** * @brief LCD controller selection * * Supported controllers: * - `AXS15231B` * - `EK9716B`, `EK79007` * - `GC9A01`, `GC9B71`, `GC9503` * - `HX8399` * - `ILI9341`, `ILI9881C` * - `JD9165`, `JD9365` * - `NV3022B` * - `SH8601` * - `SPD2010` * - `ST7262`, `ST7701`, `ST7703`, `ST7789`, `ST7796`, `ST77903`, `ST77916`, `ST77922`*/
#defineESP_PANEL_BOARD_LCD_CONTROLLER ST7789
/** * @brief LCD bus type selection * * Supported bus types: * - `ESP_PANEL_BUS_TYPE_SPI` * - `ESP_PANEL_BUS_TYPE_QSPI` * - `ESP_PANEL_BUS_TYPE_RGB` (ESP32-S3 only) * - `ESP_PANEL_BUS_TYPE_MIPI_DSI` (ESP32-P4 only)*/
#defineESP_PANEL_BOARD_LCD_BUS_TYPE (ESP_PANEL_BUS_TYPE_SPI)
#if (ESP_PANEL_BOARD_LCD_BUS_TYPE == ESP_PANEL_BUS_TYPE_SPI) || \
(ESP_PANEL_BOARD_LCD_BUS_TYPE == ESP_PANEL_BUS_TYPE_QSPI)
/** * If set to 1, the bus will skip to initialize the corresponding host. Users need to initialize the host in advance. * * For drivers which created by this library, even if they use the same host, the host will be initialized only once. * So it is not necessary to set the macro to `1`. For other drivers (like `Wire`), please set the macro to `1` * ensure that the host is initialized only once.*/
#defineESP_PANEL_BOARD_LCD_BUS_SKIP_INIT_HOST (0) // 0/1. Typically set to 0
#endif/** * @brief LCD bus parameters configuration * * Configure parameters based on the selected bus type. Parameters for other bus types will be ignored. * For detailed parameter explanations, see: * https://docs.espressif.com/projects/esp-idf/en/v5.3.1/esp32s3/api-reference/peripherals/lcd/index.html * https://docs.espressif.com/projects/esp-iot-solution/en/latest/display/lcd/index.html*/
#if ESP_PANEL_BOARD_LCD_BUS_TYPE == ESP_PANEL_BUS_TYPE_SPI
/** * @brief SPI bus*//* For general */
#defineESP_PANEL_BOARD_LCD_SPI_HOST_ID (1) // Typically set to 1
#if !ESP_PANEL_BOARD_LCD_BUS_SKIP_INIT_HOST
/* For host */
#defineESP_PANEL_BOARD_LCD_SPI_IO_SCK (12)
#defineESP_PANEL_BOARD_LCD_SPI_IO_MOSI (11)
#defineESP_PANEL_BOARD_LCD_SPI_IO_MISO (-1) // -1 if not used
#endif// ESP_PANEL_BOARD_LCD_BUS_SKIP_INIT_HOST/* For panel */
#defineESP_PANEL_BOARD_LCD_SPI_IO_CS (10) // -1 if not used
#defineESP_PANEL_BOARD_LCD_SPI_IO_DC (9)
#defineESP_PANEL_BOARD_LCD_SPI_MODE (3) // 0-3. Typically set to 0
#defineESP_PANEL_BOARD_LCD_SPI_CLK_HZ (10 * 1000 * 1000)
// Should be an integer divisor of 80M, typically set to 40M
#defineESP_PANEL_BOARD_LCD_SPI_CMD_BITS (8) // Typically set to 8
#defineESP_PANEL_BOARD_LCD_SPI_PARAM_BITS (8) // Typically set to 8
#elif ESP_PANEL_BOARD_LCD_BUS_TYPE == ESP_PANEL_BUS_TYPE_QSPI
/** * @brief QSPI bus*//* For general */
#defineESP_PANEL_BOARD_LCD_QSPI_HOST_ID (1) // Typically set to 1
#if !ESP_PANEL_BOARD_LCD_BUS_SKIP_INIT_HOST
/* For host */
#defineESP_PANEL_BOARD_LCD_QSPI_IO_SCK (9)
#defineESP_PANEL_BOARD_LCD_QSPI_IO_DATA0 (10)
#defineESP_PANEL_BOARD_LCD_QSPI_IO_DATA1 (11)
#defineESP_PANEL_BOARD_LCD_QSPI_IO_DATA2 (12)
#defineESP_PANEL_BOARD_LCD_QSPI_IO_DATA3 (13)
#endif// ESP_PANEL_BOARD_LCD_BUS_SKIP_INIT_HOST/* For panel */
#defineESP_PANEL_BOARD_LCD_QSPI_IO_CS (5) // -1 if not used
#defineESP_PANEL_BOARD_LCD_QSPI_MODE (0) // 0-3, typically set to 0
#defineESP_PANEL_BOARD_LCD_QSPI_CLK_HZ (40 * 1000 * 1000)
// Should be an integer divisor of 80M, typically set to 40M
#defineESP_PANEL_BOARD_LCD_QSPI_CMD_BITS (32) // Typically set to 32
#defineESP_PANEL_BOARD_LCD_QSPI_PARAM_BITS (8) // Typically set to 8
#elif ESP_PANEL_BOARD_LCD_BUS_TYPE == ESP_PANEL_BUS_TYPE_RGB
/** * @brief RGB bus*//** * Set to 0 if using simple "RGB" interface which does not contain "3-wire SPI" interface.*/
#defineESP_PANEL_BOARD_LCD_RGB_USE_CONTROL_PANEL (1) // 0/1. Typically set to 1
#if ESP_PANEL_BOARD_LCD_RGB_USE_CONTROL_PANEL
/* For control panel (3wire-SPI) */
#defineESP_PANEL_BOARD_LCD_RGB_SPI_IO_CS (0)
#defineESP_PANEL_BOARD_LCD_RGB_SPI_IO_SCK (1)
#defineESP_PANEL_BOARD_LCD_RGB_SPI_IO_SDA (2)
#defineESP_PANEL_BOARD_LCD_RGB_SPI_CS_USE_EXPNADER (0) // Set to 1 if the signal is controlled by an IO expander
#defineESP_PANEL_BOARD_LCD_RGB_SPI_SCL_USE_EXPNADER (0) // Set to 1 if the signal is controlled by an IO expander
#defineESP_PANEL_BOARD_LCD_RGB_SPI_SDA_USE_EXPNADER (0) // Set to 1 if the signal is controlled by an IO expander
#defineESP_PANEL_BOARD_LCD_RGB_SPI_MODE (0) // 0-3, typically set to 0
#defineESP_PANEL_BOARD_LCD_RGB_SPI_CMD_BYTES (1) // Typically set to 1
#defineESP_PANEL_BOARD_LCD_RGB_SPI_PARAM_BYTES (1) // Typically set to 1
#defineESP_PANEL_BOARD_LCD_RGB_SPI_USE_DC_BIT (1) // 0/1. Typically set to 1
#endif// ESP_PANEL_BOARD_LCD_RGB_USE_CONTROL_PANEL/* For refresh panel (RGB) */
#defineESP_PANEL_BOARD_LCD_RGB_CLK_HZ (16 * 1000 * 1000)
// To increase the upper limit of the PCLK, see: https://docs.espressif.com/projects/esp-faq/en/latest/software-framework/peripherals/lcd.html#how-can-i-increase-the-upper-limit-of-pclk-settings-on-esp32-s3-while-ensuring-normal-rgb-screen-display
#defineESP_PANEL_BOARD_LCD_RGB_HPW (10)
#defineESP_PANEL_BOARD_LCD_RGB_HBP (10)
#defineESP_PANEL_BOARD_LCD_RGB_HFP (20)
#defineESP_PANEL_BOARD_LCD_RGB_VPW (10)
#defineESP_PANEL_BOARD_LCD_RGB_VBP (10)
#defineESP_PANEL_BOARD_LCD_RGB_VFP (10)
#defineESP_PANEL_BOARD_LCD_RGB_PCLK_ACTIVE_NEG (0) // 0: rising edge, 1: falling edge. Typically set to 0// The following sheet shows the valid combinations of// data width and pixel bits:// ┏---------------------------------┳- -------------------------------┓
#defineESP_PANEL_BOARD_LCD_RGB_DATA_WIDTH (16) // | 16 | 8 |
#defineESP_PANEL_BOARD_LCD_RGB_PIXEL_BITS (ESP_PANEL_LCD_COLOR_BITS_RGB565) // | ESP_PANEL_LCD_COLOR_BITS_RGB565 | ESP_PANEL_LCD_COLOR_BITS_RGB888 |// ┗---------------------------------┻---------------------------------┛// To understand color format of RGB LCD, see: https://docs.espressif.com/projects/esp-iot-solution/en/latest/display/lcd/rgb_lcd.html#color-formats
#defineESP_PANEL_BOARD_LCD_RGB_BOUNCE_BUF_SIZE (ESP_PANEL_BOARD_WIDTH * 10)
// Bounce buffer size in bytes. It is used to avoid screen drift// for ESP32-S3. Typically set to `ESP_PANEL_BOARD_WIDTH * 10`// The size should satisfy `size * N = LCD_width * LCD_height`,// where N is an even number.// For more details, see: https://github.com/esp-arduino-libs/ESP32_Display_Panel/blob/master/docs/FAQ.md#how-to-fix-screen-drift-issue-when-driving-rgb-lcd-with-esp32-s3
#defineESP_PANEL_BOARD_LCD_RGB_IO_HSYNC (46)
#defineESP_PANEL_BOARD_LCD_RGB_IO_VSYNC (3)
#defineESP_PANEL_BOARD_LCD_RGB_IO_DE (17) // -1 if not used
#defineESP_PANEL_BOARD_LCD_RGB_IO_PCLK (9)
#defineESP_PANEL_BOARD_LCD_RGB_IO_DISP (-1) // -1 if not used. Typically set to -1// The following sheet shows the mapping of ESP GPIOs to// LCD data pins with different data width and color format:// ┏------┳- ------------┳--------------------------┓// | ESP: | 8-bit RGB888 | 16-bit RGB565 |// |------|--------------|--------------------------|// | LCD: | RGB888 | RGB565 | RGB666 | RGB888 |// ┗------|--------------|--------|--------|--------|
#defineESP_PANEL_BOARD_LCD_RGB_IO_DATA0 (10) // | D0 | B0 | B0-1 | B0-3 |
#defineESP_PANEL_BOARD_LCD_RGB_IO_DATA1 (11) // | D1 | B1 | B2 | B4 |
#defineESP_PANEL_BOARD_LCD_RGB_IO_DATA2 (12) // | D2 | B2 | B3 | B5 |
#defineESP_PANEL_BOARD_LCD_RGB_IO_DATA3 (13) // | D3 | B3 | B4 | B6 |
#defineESP_PANEL_BOARD_LCD_RGB_IO_DATA4 (14) // | D4 | B4 | B5 | B7 |
#defineESP_PANEL_BOARD_LCD_RGB_IO_DATA5 (21) // | D5 | G0 | G0 | G0-2 |
#defineESP_PANEL_BOARD_LCD_RGB_IO_DATA6 (47) // | D6 | G1 | G1 | G3 |
#defineESP_PANEL_BOARD_LCD_RGB_IO_DATA7 (48) // | D7 | G2 | G2 | G4 |
#if ESP_PANEL_BOARD_LCD_RGB_DATA_WIDTH > 8 // ┗--------------┫--------|--------|--------|
#defineESP_PANEL_BOARD_LCD_RGB_IO_DATA8 (45) // | G3 | G3 | G5 |
#defineESP_PANEL_BOARD_LCD_RGB_IO_DATA9 (38) // | G4 | G4 | G6 |
#defineESP_PANEL_BOARD_LCD_RGB_IO_DATA10 (39) // | G5 | G5 | G7 |
#defineESP_PANEL_BOARD_LCD_RGB_IO_DATA11 (40) // | R0 | R0-1 | R0-3 |
#defineESP_PANEL_BOARD_LCD_RGB_IO_DATA12 (41) // | R1 | R2 | R4 |
#defineESP_PANEL_BOARD_LCD_RGB_IO_DATA13 (42) // | R2 | R3 | R5 |
#defineESP_PANEL_BOARD_LCD_RGB_IO_DATA14 (2) // | R3 | R4 | R6 |
#defineESP_PANEL_BOARD_LCD_RGB_IO_DATA15 (1) // | R4 | R5 | R7 |// ┗--------┻--------┻--------┛
#endif// ESP_PANEL_BOARD_LCD_RGB_DATA_WIDTH
#elif ESP_PANEL_BOARD_LCD_BUS_TYPE == ESP_PANEL_BUS_TYPE_MIPI_DSI
/** * @brief MIPI DSI bus*//* For host */
#defineESP_PANEL_BOARD_LCD_MIPI_DSI_LANE_NUM (2) // ESP32-P4 supports 1 or 2 lanes
#defineESP_PANEL_BOARD_LCD_MIPI_DSI_LANE_RATE_MBPS (1000) // Single lane bit rate, should check the LCD drive IC// datasheet for the supported lane rate. Different// color format (RGB565/RGB888) may have different// lane bit rate requirements.// ESP32-P4 supports max 1500Mbps/* For refresh panel (DPI) */
#defineESP_PANEL_BOARD_LCD_MIPI_DPI_CLK_MHZ (52)
#defineESP_PANEL_BOARD_LCD_MIPI_DPI_PIXEL_BITS (ESP_PANEL_LCD_COLOR_BITS_RGB565)
// ESP_PANEL_LCD_COLOR_BITS_RGB565/RGB666/RGB888
#defineESP_PANEL_BOARD_LCD_MIPI_DPI_HPW (10)
#defineESP_PANEL_BOARD_LCD_MIPI_DPI_HBP (160)
#defineESP_PANEL_BOARD_LCD_MIPI_DPI_HFP (160)
#defineESP_PANEL_BOARD_LCD_MIPI_DPI_VPW (1)
#defineESP_PANEL_BOARD_LCD_MIPI_DPI_VBP (23)
#defineESP_PANEL_BOARD_LCD_MIPI_DPI_VFP (12)
/* For DSI power PHY */
#defineESP_PANEL_BOARD_LCD_MIPI_PHY_LDO_ID (3) // -1 if not used.
#else
#error "The function is not ready and will be implemented in the future."
#endif// ESP_PANEL_BOARD_LCD_BUS_TYPE/** * @brief LCD specific flags configuration * * These flags are specific to the "3-wire SPI + RGB" bus.*/
#if (ESP_PANEL_BOARD_LCD_BUS_TYPE == ESP_PANEL_BUS_TYPE_RGB) && ESP_PANEL_BOARD_LCD_RGB_USE_CONTROL_PANEL
/** * @brief Enable IO multiplex * * Set to 1 if the 3-wire SPI pins are sharing other pins of the RGB interface to save GPIOs. Then, the control panel * and its pins (except CS signal) will be released after LCD call `init()`. All `*_by_cmd` flags will be invalid.*/
#defineESP_PANEL_BOARD_LCD_FLAGS_ENABLE_IO_MULTIPLEX (0) // typically set to 0/** * @brief Mirror by command * * Set to 1 if the `mirror()` function will be implemented by LCD command. Otherwise, the function will be implemented by * software. Only valid when `ESP_PANEL_BOARD_LCD_FLAGS_ENABLE_IO_MULTIPLEX` is 0.*/
#defineESP_PANEL_BOARD_LCD_FLAGS_MIRROR_BY_CMD (!ESP_PANEL_BOARD_LCD_FLAGS_ENABLE_IO_MULTIPLEX)
#endif// ESP_PANEL_BOARD_LCD_RGB_USE_CONTROL_PANEL/** * @brief LCD vendor initialization commands * * Vendor specific initialization can be different between manufacturers, should consult the LCD supplier for * initialization sequence code. Please uncomment and change the following macro definitions. Otherwise, the LCD driver * will use the default initialization sequence code. * * The initialization sequence can be specified in two formats: * 1. Raw format: * {command, (uint8_t []){data0, data1, ...}, data_size, delay_ms} * 2. Helper macros: * - ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(delay_ms, command, {data0, data1, ...}) * - ESP_PANEL_LCD_CMD_WITH_NONE_PARAM(delay_ms, command)*//*#define ESP_PANEL_BOARD_LCD_VENDOR_INIT_CMD() \ { \ {0xFF, (uint8_t []){0x77, 0x01, 0x00, 0x00, 0x10}, 5, 0}, \ {0xC0, (uint8_t []){0x3B, 0x00}, 2, 0}, \ {0xC1, (uint8_t []){0x0D, 0x02}, 2, 0}, \ {0x29, (uint8_t []){0x00}, 0, 120}, \ or ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xFF, {0x77, 0x01, 0x00, 0x00, 0x10}), \ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xC0, {0x3B, 0x00}), \ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xC1, {0x0D, 0x02}), \ ESP_PANEL_LCD_CMD_WITH_NONE_PARAM(120, 0x29), \ }*//** * @brief LCD color configuration*/
#defineESP_PANEL_BOARD_LCD_COLOR_BITS (ESP_PANEL_LCD_COLOR_BITS_RGB565)
// ESP_PANEL_LCD_COLOR_BITS_RGB565/RGB666/RGB888
#defineESP_PANEL_BOARD_LCD_COLOR_BGR_ORDER (0) // 0: RGB, 1: BGR
#defineESP_PANEL_BOARD_LCD_COLOR_INEVRT_BIT (0) // 0/1/** * @brief LCD transformation configuration*/
#defineESP_PANEL_BOARD_LCD_SWAP_XY (0) // 0/1
#defineESP_PANEL_BOARD_LCD_MIRROR_X (0) // 0/1
#defineESP_PANEL_BOARD_LCD_MIRROR_Y (0) // 0/1
#defineESP_PANEL_BOARD_LCD_GAP_X (0) // [0, ESP_PANEL_BOARD_WIDTH]
#defineESP_PANEL_BOARD_LCD_GAP_Y (0) // [0, ESP_PANEL_BOARD_HEIGHT]/** * @brief LCD reset pin configuration*/
#defineESP_PANEL_BOARD_LCD_RST_IO (8) // Reset pin, -1 if not used
#defineESP_PANEL_BOARD_LCD_RST_LEVEL (0) // Reset active level, 0: low, 1: high
#endif// ESP_PANEL_BOARD_USE_LCD//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Please update the following macros to configure the touch panel ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////** * @brief Touch panel configuration flag (0/1) * * Set to `1` to enable touch panel support, `0` to disable*/
#defineESP_PANEL_BOARD_USE_TOUCH (0)
#if ESP_PANEL_BOARD_USE_TOUCH
/** * @brief Touch controller selection * * Supported controllers: * - `AXS15231B` * - `CHSC6540` * - `CST816S` * - `FT5x06` * - `GT911`, `GT1151` * - `SPD2010` * - `ST1633`, `ST7123` * - `STMPE610` * - `TT21100` * - `XPT2046`*/
#defineESP_PANEL_BOARD_TOUCH_CONTROLLER TT21100
/** * @brief Touch bus type selection * * Supported types: * - `ESP_PANEL_BUS_TYPE_I2C` * - `ESP_PANEL_BUS_TYPE_SPI`*/
#defineESP_PANEL_BOARD_TOUCH_BUS_TYPE (ESP_PANEL_BUS_TYPE_I2C)
#if (ESP_PANEL_BOARD_TOUCH_BUS_TYPE == ESP_PANEL_BUS_TYPE_I2C) || \
(ESP_PANEL_BOARD_TOUCH_BUS_TYPE == ESP_PANEL_BUS_TYPE_SPI)
/** * If set to 1, the bus will skip to initialize the corresponding host. Users need to initialize the host in advance. * * For drivers which created by this library, even if they use the same host, the host will be initialized only once. * So it is not necessary to set the macro to `1`. For other drivers (like `Wire`), please set the macro to `1` * ensure that the host is initialized only once.*/
#defineESP_PANEL_BOARD_TOUCH_BUS_SKIP_INIT_HOST (0) // 0/1. Typically set to 0
#endif/** * @brief Touch bus parameters configuration*/
#if ESP_PANEL_BOARD_TOUCH_BUS_TYPE == ESP_PANEL_BUS_TYPE_I2C
/** * @brief I2C bus*//* For general */
#defineESP_PANEL_BOARD_TOUCH_I2C_HOST_ID (0) // Typically set to 0
#if !ESP_PANEL_BOARD_TOUCH_BUS_SKIP_INIT_HOST
/* For host */
#defineESP_PANEL_BOARD_TOUCH_I2C_CLK_HZ (400 * 1000)
// Typically set to 400K
#defineESP_PANEL_BOARD_TOUCH_I2C_SCL_PULLUP (1) // 0/1. Typically set to 1
#defineESP_PANEL_BOARD_TOUCH_I2C_SDA_PULLUP (1) // 0/1. Typically set to 1
#defineESP_PANEL_BOARD_TOUCH_I2C_IO_SCL (18)
#defineESP_PANEL_BOARD_TOUCH_I2C_IO_SDA (8)
#endif/* For panel */
#defineESP_PANEL_BOARD_TOUCH_I2C_ADDRESS (0) // Typically set to 0 to use the default address.// - For touchs with only one address, set to 0// - For touchs with multiple addresses, set to 0 or// the address. Like GT911, there are two addresses:// 0x5D(default) and 0x14
#elif ESP_PANEL_BOARD_TOUCH_BUS_TYPE == ESP_PANEL_BUS_TYPE_SPI
/** * @brief SPI bus*//* For general */
#defineESP_PANEL_BOARD_TOUCH_SPI_HOST_ID (1) // Typically set to 1
#if !ESP_PANEL_BOARD_TOUCH_BUS_SKIP_INIT_HOST
/* For host */
#defineESP_PANEL_BOARD_TOUCH_SPI_IO_SCK (7)
#defineESP_PANEL_BOARD_TOUCH_SPI_IO_MOSI (6)
#defineESP_PANEL_BOARD_TOUCH_SPI_IO_MISO (9)
#endif/* For panel */
#defineESP_PANEL_BOARD_TOUCH_SPI_IO_CS (5)
#defineESP_PANEL_BOARD_TOUCH_SPI_CLK_HZ (1 * 1000 * 1000) // Should be integer divisor of 80M
#else
#error "The function is not ready and will be implemented in the future."
#endif// ESP_PANEL_BOARD_TOUCH_BUS_TYPE/** * @brief Touch panel transformation flags*/
#defineESP_PANEL_BOARD_TOUCH_SWAP_XY (0) // 0/1
#defineESP_PANEL_BOARD_TOUCH_MIRROR_X (0) // 0/1
#defineESP_PANEL_BOARD_TOUCH_MIRROR_Y (0) // 0/1/** * @brief Touch panel control pins*/
#defineESP_PANEL_BOARD_TOUCH_RST_IO (-1) // Reset pin, -1 if not used
#defineESP_PANEL_BOARD_TOUCH_RST_LEVEL (0) // Reset active level, 0: low, 1: high
#defineESP_PANEL_BOARD_TOUCH_INT_IO (-1) // Interrupt pin, -1 if not used
#defineESP_PANEL_BOARD_TOUCH_INT_LEVEL (0) // Interrupt active level, 0: low, 1: high
#endif// ESP_PANEL_BOARD_USE_TOUCH///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Please update the following macros to configure the backlight /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////** * @brief Backlight configuration flag (0/1) * * Set to `1` to enable backlight support, `0` to disable*/
#defineESP_PANEL_BOARD_USE_BACKLIGHT (1)
#if ESP_PANEL_BOARD_USE_BACKLIGHT
/** * @brief Backlight control type selection * * Supported types: * - `ESP_PANEL_BACKLIGHT_TYPE_SWITCH_GPIO`: Use GPIO switch to control the backlight, only support on/off * - `ESP_PANEL_BACKLIGHT_TYPE_SWITCH_EXPANDER`: Use IO expander to control the backlight, only support on/off * - `ESP_PANEL_BACKLIGHT_TYPE_PWM_LEDC`: Use LEDC PWM to control the backlight, support brightness adjustment * - `ESP_PANEL_BACKLIGHT_TYPE_CUSTOM`: Use custom function to control the backlight*/
#defineESP_PANEL_BOARD_BACKLIGHT_TYPE (ESP_PANEL_BACKLIGHT_TYPE_SWITCH_GPIO)
#if (ESP_PANEL_BOARD_BACKLIGHT_TYPE == ESP_PANEL_BACKLIGHT_TYPE_SWITCH_GPIO) || \
(ESP_PANEL_BOARD_BACKLIGHT_TYPE == ESP_PANEL_BACKLIGHT_TYPE_SWITCH_EXPANDER) || \
(ESP_PANEL_BOARD_BACKLIGHT_TYPE == ESP_PANEL_BACKLIGHT_TYPE_PWM_LEDC)
/** * @brief Backlight control pin configuration*/
#defineESP_PANEL_BOARD_BACKLIGHT_IO (7) // Output GPIO pin number
#defineESP_PANEL_BOARD_BACKLIGHT_ON_LEVEL (1) // Active level, 0: low, 1: high
#if ESP_PANEL_BOARD_BACKLIGHT_TYPE == ESP_PANEL_BACKLIGHT_TYPE_PWM_LEDC
/** * @brief PWM parameters configuration*/
#defineESP_PANEL_BOARD_BACKLIGHT_PWM_FREQ_HZ (5000) // LEDC timer frequency.// Different backlight driver chips may have different// frequency limits, please refer to the datasheet of// the specific chip.// https://github.com/esp-arduino-libs/ESP32_Display_Panel/issues/188
#defineESP_PANEL_BOARD_BACKLIGHT_PWM_DUTY_RESOLUTION (10) // LEDC timer duty resolution.// The frequency and duty resolution of the LEDC timer// need to be properly matched, please refer to:// https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/ledc.html#supported-range-of-frequency-and-duty-resolutions
#endif
#elif ESP_PANEL_BOARD_BACKLIGHT_TYPE == ESP_PANEL_BACKLIGHT_TYPE_CUSTOM
/** * @brief Custom backlight control function * * @param[in] percent Brightness percentage (0-100) * @param[in] user_data User data pointer, typically points to Board instance. * * @return true on success, false on failure*/
#defineESP_PANEL_BOARD_BACKLIGHT_CUSTOM_FUNCTION(percent, user_data) \
{ \
auto board = static_cast<Board *>(user_data); \
returntrue; \
}
#endif// ESP_PANEL_BOARD_BACKLIGHT_TYPE/** * @brief Backlight idle state configuration (0/1) * * Set to 1 if want to turn off the backlight after initializing. Otherwise, the backlight will be on.*/
#defineESP_PANEL_BOARD_BACKLIGHT_IDLE_OFF (0)
#endif// ESP_PANEL_BOARD_USE_BACKLIGHT///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Please update the following macros to configure the IO expander ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////** * @brief IO expander configuration flag (0/1) * * Set to `1` to enable IO expander support, `0` to disable*/
#defineESP_PANEL_BOARD_USE_EXPANDER (0)
#if ESP_PANEL_BOARD_USE_EXPANDER
/** * @brief IO expander chip selection * * Supported chips: * - `CH422G` * - `HT8574` * - `TCA95XX_8BIT` * - `TCA95XX_16BIT`*/
#defineESP_PANEL_BOARD_EXPANDER_CHIP TCA95XX_8BIT
/** * @brief IO expander I2C bus parameters configuration*//** * If set to 1, the bus will skip to initialize the corresponding host. Users need to initialize the host in advance. * * For drivers which created by this library, even if they use the same host, the host will be initialized only once. * So it is not necessary to set the macro to `1`. For other devices, please set the macro to `1` ensure that the * host is initialized only once.*/
#defineESP_PANEL_BOARD_EXPANDER_SKIP_INIT_HOST (0) // 0/1/* For general */
#defineESP_PANEL_BOARD_EXPANDER_I2C_HOST_ID (0) // Typically set to 0/* For host */
#if !ESP_PANEL_BOARD_EXPANDER_SKIP_INIT_HOST
#defineESP_PANEL_BOARD_EXPANDER_I2C_CLK_HZ (400 * 1000)
// Typically set to 400K
#defineESP_PANEL_BOARD_EXPANDER_I2C_SCL_PULLUP (1) // 0/1. Typically set to 1
#defineESP_PANEL_BOARD_EXPANDER_I2C_SDA_PULLUP (1) // 0/1. Typically set to 1
#defineESP_PANEL_BOARD_EXPANDER_I2C_IO_SCL (18)
#defineESP_PANEL_BOARD_EXPANDER_I2C_IO_SDA (8)
#endif// ESP_PANEL_BOARD_EXPANDER_SKIP_INIT_HOST/* For device */
#defineESP_PANEL_BOARD_EXPANDER_I2C_ADDRESS (0x20) // The actual I2C address. Even for the same model of IC,// the I2C address may be different, and confirmation based on// the actual hardware connection is required
#endif// ESP_PANEL_BOARD_USE_EXPANDER/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Please utilize the following macros to execute any additional code if required //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////** * @brief Pre-begin function for board initialization * * @param[in] p Pointer to the board object * @return true on success, false on failure*//*#define ESP_PANEL_BOARD_PRE_BEGIN_FUNCTION(p) \ { \ auto board = static_cast<Board *>(p); \ return true; \ }*//** * @brief Post-begin function for board initialization * * @param[in] p Pointer to the board object * @return true on success, false on failure*//*#define ESP_PANEL_BOARD_POST_BEGIN_FUNCTION(p) \ { \ auto board = static_cast<Board *>(p); \ return true; \ }*//** * @brief Pre-delete function for board initialization * * @param[in] p Pointer to the board object * @return true on success, false on failure*//*#define ESP_PANEL_BOARD_PRE_DEL_FUNCTION(p) \ { \ auto board = static_cast<Board *>(p); \ return true; \ }*//** * @brief Post-delete function for board initialization * * @param[in] p Pointer to the board object * @return true on success, false on failure*//*#define ESP_PANEL_BOARD_POST_DEL_FUNCTION(p) \ { \ auto board = static_cast<Board *>(p); \ return true; \ }*//** * @brief Pre-begin function for IO expander initialization * * @param[in] p Pointer to the board object * @return true on success, false on failure*//*#define ESP_PANEL_BOARD_EXPANDER_PRE_BEGIN_FUNCTION(p) \ { \ auto board = static_cast<Board *>(p); \ return true; \ }*//** * @brief Post-begin function for IO expander initialization * * @param[in] p Pointer to the board object * @return true on success, false on failure*//*#define ESP_PANEL_BOARD_EXPANDER_POST_BEGIN_FUNCTION(p) \ { \ auto board = static_cast<Board *>(p); \ return true; \ }*//** * @brief Pre-begin function for LCD initialization * * @param[in] p Pointer to the board object * @return true on success, false on failure*//*#define ESP_PANEL_BOARD_LCD_PRE_BEGIN_FUNCTION(p) \ { \ auto board = static_cast<Board *>(p); \ return true; \ }*//** * @brief Post-begin function for LCD initialization * * @param[in] p Pointer to the board object * @return true on success, false on failure*//*#define ESP_PANEL_BOARD_LCD_POST_BEGIN_FUNCTION(p) \ { \ auto board = static_cast<Board *>(p); \ return true; \ }*//** * @brief Pre-begin function for touch panel initialization * * @param[in] p Pointer to the board object * @return true on success, false on failure*//*#define ESP_PANEL_BOARD_TOUCH_PRE_BEGIN_FUNCTION(p) \ { \ auto board = static_cast<Board *>(p); \ return true; \ }*//** * @brief Post-begin function for touch panel initialization * * @param[in] p Pointer to the board object * @return true on success, false on failure*//*#define ESP_PANEL_BOARD_TOUCH_POST_BEGIN_FUNCTION(p) \ { \ auto board = static_cast<Board *>(p); \ return true; \ }*//** * @brief Pre-begin function for backlight initialization * * @param[in] p Pointer to the board object * @return true on success, false on failure*//*#define ESP_PANEL_BOARD_BACKLIGHT_PRE_BEGIN_FUNCTION(p) \ { \ auto board = static_cast<Board *>(p); \ return true; \ }*//** * @brief Post-begin function for backlight initialization * * @param[in] p Pointer to the board object * @return true on success, false on failure*//*#define ESP_PANEL_BOARD_BACKLIGHT_POST_BEGIN_FUNCTION(p) \ { \ auto board = static_cast<Board *>(p); \ return true; \ }*//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// File Version ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////** * Do not change the following versions. These version numbers are used to check compatibility between this * configuration file and the library. Rules for version numbers: * 1. Major version mismatch: Configurations are incompatible, must use library version * 2. Minor version mismatch: May be missing new configurations, recommended to update * 3. Patch version mismatch: No impact on functionality*/
#defineESP_PANEL_BOARD_CUSTOM_FILE_VERSION_MAJOR1
#defineESP_PANEL_BOARD_CUSTOM_FILE_VERSION_MINOR1
#defineESP_PANEL_BOARD_CUSTOM_FILE_VERSION_PATCH0
#endif// ESP_PANEL_BOARD_DEFAULT_USE_CUSTOM// *INDENT-ON*
lv_conf.h
/** * @file lv_conf.h * Configuration file for v8.4.0*//* * Copy this file as `lv_conf.h` * 1. simply next to the `lvgl` folder * 2. or any other places and * - define `LV_CONF_INCLUDE_SIMPLE` * - add the path as include path*//* clang-format off */
#if1/*Set it to "1" to enable content*/
#ifndef LV_CONF_H
#defineLV_CONF_H
#include<stdint.h>/*==================== COLOR SETTINGS *====================*//*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/
#defineLV_COLOR_DEPTH16// Will define in `platformio.ini` according to the LCD type.// For example: SPI LCD needs to enable it, but RGB LCD should disable it.// /*Swap the 2 bytes of RGB565 color. Useful if the display has an 8-bit interface (e.g. SPI)*/// #define LV_COLOR_16_SWAP 1/*Enable features to draw on transparent background. *It's required if opa, and transform_* style properties are used. *Can be also used if the UI is above another layer, e.g. an OSD menu or video player.*/
#defineLV_COLOR_SCREEN_TRANSP1/* Adjust color mix functions rounding. GPUs might calculate color mix (blending) differently. * 0: round down, 64: round up from x.75, 128: round up from half, 192: round up from x.25, 254: round up */
#defineLV_COLOR_MIX_ROUND_OFS0/*Images pixels with this color will not be drawn if they are chroma keyed)*/
#defineLV_COLOR_CHROMA_KEYlv_color_hex(0x00ff00) /*pure green*//*========================= MEMORY SETTINGS *=========================*//*1: use custom malloc/free, 0: use the built-in `lv_mem_alloc()` and `lv_mem_free()`*/
#defineLV_MEM_CUSTOM1
#if LV_MEM_CUSTOM == 0
/*Size of the memory available for `lv_mem_alloc()` in bytes (>= 2kB)*/
#defineLV_MEM_SIZE (48U * 1024U) /*[bytes]*//*Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too.*/
#defineLV_MEM_ADR0/*0: unused*//*Instead of an address give a memory allocator that will be called to get a memory pool for LVGL. E.g. my_malloc*/
#if LV_MEM_ADR == 0
#undef LV_MEM_POOL_INCLUDE
#undef LV_MEM_POOL_ALLOC
#endif
#else/*LV_MEM_CUSTOM*/
#defineLV_MEM_CUSTOM_INCLUDE <stdlib.h> /*Header for the dynamic memory function*/
#defineLV_MEM_CUSTOM_ALLOC malloc
#defineLV_MEM_CUSTOM_FREE free
#defineLV_MEM_CUSTOM_REALLOC realloc
#endif/*LV_MEM_CUSTOM*//*Number of the intermediate memory buffer used during rendering and other internal processing mechanisms. *You will see an error log message if there wasn't enough buffers. */
#defineLV_MEM_BUF_MAX_NUM16/*Use the standard `memcpy` and `memset` instead of LVGL's own functions. (Might or might not be faster).*/
#defineLV_MEMCPY_MEMSET_STD0/*==================== HAL SETTINGS *====================*//*Default display refresh period. LVG will redraw changed areas with this period time*/
#defineLV_DISP_DEF_REFR_PERIOD30/*[ms]*//*Input device read period in milliseconds*/
#defineLV_INDEV_DEF_READ_PERIOD30/*[ms]*//*Use a custom tick source that tells the elapsed time in milliseconds. *It removes the need to manually update the tick with `lv_tick_inc()`)*/
#defineLV_TICK_CUSTOM0
#if LV_TICK_CUSTOM
#defineLV_TICK_CUSTOM_INCLUDE"Arduino.h"/*Header for the system time function*/
#defineLV_TICK_CUSTOM_SYS_TIME_EXPR (millis()) /*Expression evaluating to current system time in ms*//*If using lvgl as ESP32 component*/// #define LV_TICK_CUSTOM_INCLUDE "esp_timer.h"// #define LV_TICK_CUSTOM_SYS_TIME_EXPR ((esp_timer_get_time() / 1000LL))
#endif/*LV_TICK_CUSTOM*//*Default Dot Per Inch. Used to initialize default sizes such as widgets sized, style paddings. *(Not so important, you can adjust it to modify default sizes and spaces)*/
#defineLV_DPI_DEF130/*[px/inch]*//*======================= * FEATURE CONFIGURATION *=======================*//*------------- * Drawing *-----------*//*Enable complex draw engine. *Required to draw shadow, gradient, rounded corners, circles, arc, skew lines, image transformations or any masks*/
#defineLV_DRAW_COMPLEX1
#if LV_DRAW_COMPLEX != 0
/*Allow buffering some shadow calculation. *LV_SHADOW_CACHE_SIZE is the max. shadow size to buffer, where shadow size is `shadow_width + radius` *Caching has LV_SHADOW_CACHE_SIZE^2 RAM cost*/
#defineLV_SHADOW_CACHE_SIZE0/* Set number of maximally cached circle data. * The circumference of 1/4 circle are saved for anti-aliasing * radius * 4 bytes are used per circle (the most often used radiuses are saved) * 0: to disable caching */
#defineLV_CIRCLE_CACHE_SIZE4
#endif/*LV_DRAW_COMPLEX*//** * "Simple layers" are used when a widget has `style_opa < 255` to buffer the widget into a layer * and blend it as an image with the given opacity. * Note that `bg_opa`, `text_opa` etc don't require buffering into layer) * The widget can be buffered in smaller chunks to avoid using large buffers. * * - LV_LAYER_SIMPLE_BUF_SIZE: [bytes] the optimal target buffer size. LVGL will try to allocate it * - LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE: [bytes] used if `LV_LAYER_SIMPLE_BUF_SIZE` couldn't be allocated. * * Both buffer sizes are in bytes. * "Transformed layers" (where transform_angle/zoom properties are used) use larger buffers * and can't be drawn in chunks. So these settings affects only widgets with opacity.*/
#defineLV_LAYER_SIMPLE_BUF_SIZE (24 * 1024)
#defineLV_LAYER_SIMPLE_FALLBACK_BUF_SIZE (3 * 1024)
/*Default image cache size. Image caching keeps the images opened. *If only the built-in image formats are used there is no real advantage of caching. (I.e. if no new image decoder is added) *With complex image decoders (e.g. PNG or JPG) caching can save the continuous open/decode of images. *However the opened images might consume additional RAM. *0: to disable caching*/
#defineLV_IMG_CACHE_DEF_SIZE0/*Number of stops allowed per gradient. Increase this to allow more stops. *This adds (sizeof(lv_color_t) + 1) bytes per additional stop*/
#defineLV_GRADIENT_MAX_STOPS2/*Default gradient buffer size. *When LVGL calculates the gradient "maps" it can save them into a cache to avoid calculating them again. *LV_GRAD_CACHE_DEF_SIZE sets the size of this cache in bytes. *If the cache is too small the map will be allocated only while it's required for the drawing. *0 mean no caching.*/
#defineLV_GRAD_CACHE_DEF_SIZE0/*Allow dithering the gradients (to achieve visual smooth color gradients on limited color depth display) *LV_DITHER_GRADIENT implies allocating one or two more lines of the object's rendering surface *The increase in memory consumption is (32 bits * object width) plus 24 bits * object width if using error diffusion */
#defineLV_DITHER_GRADIENT0
#if LV_DITHER_GRADIENT
/*Add support for error diffusion dithering. *Error diffusion dithering gets a much better visual result, but implies more CPU consumption and memory when drawing. *The increase in memory consumption is (24 bits * object's width)*/
#defineLV_DITHER_ERROR_DIFFUSION0
#endif/*Maximum buffer size to allocate for rotation. *Only used if software rotation is enabled in the display driver.*/
#defineLV_DISP_ROT_MAX_BUF (10*1024)
/*------------- * GPU *-----------*//*Use Arm's 2D acceleration library Arm-2D */
#defineLV_USE_GPU_ARM2D0/*Use STM32's DMA2D (aka Chrom Art) GPU*/
#defineLV_USE_GPU_STM32_DMA2D0
#if LV_USE_GPU_STM32_DMA2D
/*Must be defined to include path of CMSIS header of target processor e.g. "stm32f7xx.h" or "stm32f4xx.h"*/
#defineLV_GPU_DMA2D_CMSIS_INCLUDE
#endif/*Enable RA6M3 G2D GPU*/
#defineLV_USE_GPU_RA6M3_G2D0
#if LV_USE_GPU_RA6M3_G2D
/*include path of target processor e.g. "hal_data.h"*/
#defineLV_GPU_RA6M3_G2D_INCLUDE"hal_data.h"
#endif/*Use SWM341's DMA2D GPU*/
#defineLV_USE_GPU_SWM341_DMA2D0
#if LV_USE_GPU_SWM341_DMA2D
#defineLV_GPU_SWM341_DMA2D_INCLUDE"SWM341.h"
#endif/*Use NXP's PXP GPU iMX RTxxx platforms*/
#defineLV_USE_GPU_NXP_PXP0
#if LV_USE_GPU_NXP_PXP
/*1: Add default bare metal and FreeRTOS interrupt handling routines for PXP (lv_gpu_nxp_pxp_osa.c) * and call lv_gpu_nxp_pxp_init() automatically during lv_init(). Note that symbol SDK_OS_FREE_RTOS * has to be defined in order to use FreeRTOS OSA, otherwise bare-metal implementation is selected. *0: lv_gpu_nxp_pxp_init() has to be called manually before lv_init()*/
#defineLV_USE_GPU_NXP_PXP_AUTO_INIT0
#endif/*Use NXP's VG-Lite GPU iMX RTxxx platforms*/
#defineLV_USE_GPU_NXP_VG_LITE0/*Use SDL renderer API*/
#defineLV_USE_GPU_SDL0
#if LV_USE_GPU_SDL
#defineLV_GPU_SDL_INCLUDE_PATH <SDL2/SDL.h>
/*Texture cache size, 8MB by default*/
#defineLV_GPU_SDL_LRU_SIZE (1024 * 1024 * 8)
/*Custom blend mode for mask drawing, disable if you need to link with older SDL2 lib*/
#defineLV_GPU_SDL_CUSTOM_BLEND_MODE (SDL_VERSION_ATLEAST(2, 0, 6))
#endif/*------------- * Logging *-----------*//*Enable the log module*/
#defineLV_USE_LOG1
#if LV_USE_LOG
/*How important log should be added: *LV_LOG_LEVEL_TRACE A lot of logs to give detailed information *LV_LOG_LEVEL_INFO Log important events *LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't cause a problem *LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail *LV_LOG_LEVEL_USER Only logs added by the user *LV_LOG_LEVEL_NONE Do not log anything*/
#defineLV_LOG_LEVEL LV_LOG_LEVEL_WARN
/*1: Print the log with 'printf'; *0: User need to register a callback with `lv_log_register_print_cb()`*/
#defineLV_LOG_PRINTF1/*Enable/disable LV_LOG_TRACE in modules that produces a huge number of logs*/
#defineLV_LOG_TRACE_MEM1
#defineLV_LOG_TRACE_TIMER1
#defineLV_LOG_TRACE_INDEV1
#defineLV_LOG_TRACE_DISP_REFR1
#defineLV_LOG_TRACE_EVENT1
#defineLV_LOG_TRACE_OBJ_CREATE1
#defineLV_LOG_TRACE_LAYOUT1
#defineLV_LOG_TRACE_ANIM1
#endif/*LV_USE_LOG*//*------------- * Asserts *-----------*//*Enable asserts if an operation is failed or an invalid data is found. *If LV_USE_LOG is enabled an error message will be printed on failure*/
#defineLV_USE_ASSERT_NULL1/*Check if the parameter is NULL. (Very fast, recommended)*/
#defineLV_USE_ASSERT_MALLOC1/*Checks is the memory is successfully allocated or no. (Very fast, recommended)*/
#defineLV_USE_ASSERT_STYLE0/*Check if the styles are properly initialized. (Very fast, recommended)*/
#defineLV_USE_ASSERT_MEM_INTEGRITY0/*Check the integrity of `lv_mem` after critical operations. (Slow)*/
#defineLV_USE_ASSERT_OBJ0/*Check the object's type and existence (e.g. not deleted). (Slow)*//*Add a custom handler when assert happens e.g. to restart the MCU*/
#defineLV_ASSERT_HANDLER_INCLUDE <stdint.h>
#defineLV_ASSERT_HANDLERwhile(1); /*Halt by default*//*------------- * Others *-----------*//*1: Show CPU usage and FPS count*/
#defineLV_USE_PERF_MONITOR1
#if LV_USE_PERF_MONITOR
#defineLV_USE_PERF_MONITOR_POS LV_ALIGN_BOTTOM_RIGHT
#endif/*1: Show the used memory and the memory fragmentation * Requires LV_MEM_CUSTOM = 0*/
#defineLV_USE_MEM_MONITOR0
#if LV_USE_MEM_MONITOR
#defineLV_USE_MEM_MONITOR_POS LV_ALIGN_BOTTOM_LEFT
#endif/*1: Draw random colored rectangles over the redrawn areas*/
#defineLV_USE_REFR_DEBUG0/*Change the built in (v)snprintf functions*/
#defineLV_SPRINTF_CUSTOM0
#if LV_SPRINTF_CUSTOM
#defineLV_SPRINTF_INCLUDE <stdio.h>
#definelv_snprintf snprintf
#definelv_vsnprintf vsnprintf
#else/*LV_SPRINTF_CUSTOM*/
#defineLV_SPRINTF_USE_FLOAT0
#endif/*LV_SPRINTF_CUSTOM*/
#defineLV_USE_USER_DATA1/*Garbage Collector settings *Used if lvgl is bound to higher level language and the memory is managed by that language*/
#defineLV_ENABLE_GC0
#if LV_ENABLE_GC != 0
#defineLV_GC_INCLUDE"gc.h"/*Include Garbage Collector related things*/
#endif/*LV_ENABLE_GC*//*===================== * COMPILER SETTINGS *====================*//*For big endian systems set to 1*/
#defineLV_BIG_ENDIAN_SYSTEM0/*Define a custom attribute to `lv_tick_inc` function*/
#defineLV_ATTRIBUTE_TICK_INC/*Define a custom attribute to `lv_timer_handler` function*/
#defineLV_ATTRIBUTE_TIMER_HANDLER/*Define a custom attribute to `lv_disp_flush_ready` function*/
#defineLV_ATTRIBUTE_FLUSH_READY/*Required alignment size for buffers*/
#defineLV_ATTRIBUTE_MEM_ALIGN_SIZE1/*Will be added where memories needs to be aligned (with -Os data might not be aligned to boundary by default). * E.g. __attribute__((aligned(4)))*/
#defineLV_ATTRIBUTE_MEM_ALIGN/*Attribute to mark large constant arrays for example font's bitmaps*/
#defineLV_ATTRIBUTE_LARGE_CONST/*Compiler prefix for a big array declaration in RAM*/
#defineLV_ATTRIBUTE_LARGE_RAM_ARRAY/*Place performance critical functions into a faster memory (e.g RAM)*/
#defineLV_ATTRIBUTE_FAST_MEM/*Prefix variables that are used in GPU accelerated operations, often these need to be placed in RAM sections that are DMA accessible*/
#defineLV_ATTRIBUTE_DMA/*Export integer constant to binding. This macro is used with constants in the form of LV_<CONST> that *should also appear on LVGL binding API such as Micropython.*/
#defineLV_EXPORT_CONST_INT(int_value) struct_silence_gcc_warning/*The default value just prevents GCC warning*//*Extend the default -32k..32k coordinate range to -4M..4M by using int32_t for coordinates instead of int16_t*/
#defineLV_USE_LARGE_COORD0/*================== * FONT USAGE *===================*//*Montserrat fonts with ASCII range and some symbols using bpp = 4 *https://fonts.google.com/specimen/Montserrat*/
#defineLV_FONT_MONTSERRAT_81
#defineLV_FONT_MONTSERRAT_101
#defineLV_FONT_MONTSERRAT_121
#defineLV_FONT_MONTSERRAT_141
#defineLV_FONT_MONTSERRAT_161
#defineLV_FONT_MONTSERRAT_181
#defineLV_FONT_MONTSERRAT_201
#defineLV_FONT_MONTSERRAT_221
#defineLV_FONT_MONTSERRAT_241
#defineLV_FONT_MONTSERRAT_261
#defineLV_FONT_MONTSERRAT_281
#defineLV_FONT_MONTSERRAT_301
#defineLV_FONT_MONTSERRAT_321
#defineLV_FONT_MONTSERRAT_341
#defineLV_FONT_MONTSERRAT_361
#defineLV_FONT_MONTSERRAT_381
#defineLV_FONT_MONTSERRAT_401
#defineLV_FONT_MONTSERRAT_421
#defineLV_FONT_MONTSERRAT_441
#defineLV_FONT_MONTSERRAT_461
#defineLV_FONT_MONTSERRAT_481/*Demonstrate special features*/
#defineLV_FONT_MONTSERRAT_12_SUBPX0
#defineLV_FONT_MONTSERRAT_28_COMPRESSED0/*bpp = 3*/
#defineLV_FONT_DEJAVU_16_PERSIAN_HEBREW0/*Hebrew, Arabic, Persian letters and all their forms*/
#defineLV_FONT_SIMSUN_16_CJK0/*1000 most common CJK radicals*//*Pixel perfect monospace fonts*/
#defineLV_FONT_UNSCII_80
#defineLV_FONT_UNSCII_160/*Optionally declare custom fonts here. *You can use these fonts as default font too and they will be available globally. *E.g. #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) LV_FONT_DECLARE(my_font_2)*/
#defineLV_FONT_CUSTOM_DECLARE/*Always set a default font*/
#defineLV_FONT_DEFAULT &lv_font_montserrat_14
/*Enable handling large font and/or fonts with a lot of characters. *The limit depends on the font size, font face and bpp. *Compiler error will be triggered if a font needs it.*/
#defineLV_FONT_FMT_TXT_LARGE0/*Enables/disables support for compressed fonts.*/
#defineLV_USE_FONT_COMPRESSED0/*Enable subpixel rendering*/
#defineLV_USE_FONT_SUBPX0
#if LV_USE_FONT_SUBPX
/*Set the pixel order of the display. Physical order of RGB channels. Doesn't matter with "normal" fonts.*/
#defineLV_FONT_SUBPX_BGR0/*0: RGB; 1:BGR order*/
#endif/*Enable drawing placeholders when glyph dsc is not found*/
#defineLV_USE_FONT_PLACEHOLDER1/*================= * TEXT SETTINGS *=================*//** * Select a character encoding for strings. * Your IDE or editor should have the same character encoding * - LV_TXT_ENC_UTF8 * - LV_TXT_ENC_ASCII*/
#defineLV_TXT_ENC LV_TXT_ENC_UTF8
/*Can break (wrap) texts on these chars*/
#defineLV_TXT_BREAK_CHARS" ,.;:-_"/*If a word is at least this long, will break wherever "prettiest" *To disable, set to a value <= 0*/
#defineLV_TXT_LINE_BREAK_LONG_LEN0/*Minimum number of characters in a long word to put on a line before a break. *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/
#defineLV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN3/*Minimum number of characters in a long word to put on a line after a break. *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/
#defineLV_TXT_LINE_BREAK_LONG_POST_MIN_LEN3/*The control character to use for signalling text recoloring.*/
#defineLV_TXT_COLOR_CMD"#"/*Support bidirectional texts. Allows mixing Left-to-Right and Right-to-Left texts. *The direction will be processed according to the Unicode Bidirectional Algorithm: *https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/
#defineLV_USE_BIDI0
#if LV_USE_BIDI
/*Set the default direction. Supported values: *`LV_BASE_DIR_LTR` Left-to-Right *`LV_BASE_DIR_RTL` Right-to-Left *`LV_BASE_DIR_AUTO` detect texts base direction*/
#defineLV_BIDI_BASE_DIR_DEF LV_BASE_DIR_AUTO
#endif/*Enable Arabic/Persian processing *In these languages characters should be replaced with an other form based on their position in the text*/
#defineLV_USE_ARABIC_PERSIAN_CHARS0/*================== * WIDGET USAGE *================*//*Documentation of the widgets: https://docs.lvgl.io/latest/en/html/widgets/index.html*/
#defineLV_USE_ARC1
#defineLV_USE_BAR1
#defineLV_USE_BTN1
#defineLV_USE_BTNMATRIX1
#defineLV_USE_CANVAS1
#defineLV_USE_CHECKBOX1
#defineLV_USE_DROPDOWN1/*Requires: lv_label*/
#defineLV_USE_IMG1/*Requires: lv_label*/
#defineLV_USE_LABEL1
#if LV_USE_LABEL
#defineLV_LABEL_TEXT_SELECTION1/*Enable selecting text of the label*/
#defineLV_LABEL_LONG_TXT_HINT1/*Store some extra info in labels to speed up drawing of very long texts*/
#endif
#defineLV_USE_LINE1
#defineLV_USE_ROLLER1/*Requires: lv_label*/
#if LV_USE_ROLLER
#defineLV_ROLLER_INF_PAGES7/*Number of extra "pages" when the roller is infinite*/
#endif
#defineLV_USE_SLIDER1/*Requires: lv_bar*/
#defineLV_USE_SWITCH1
#defineLV_USE_TEXTAREA1/*Requires: lv_label*/
#if LV_USE_TEXTAREA != 0
#defineLV_TEXTAREA_DEF_PWD_SHOW_TIME1500/*ms*/
#endif
#defineLV_USE_TABLE1/*================== * EXTRA COMPONENTS *==================*//*----------- * Widgets *----------*/
#defineLV_USE_ANIMIMG1
#defineLV_USE_CALENDAR1
#if LV_USE_CALENDAR
#defineLV_CALENDAR_WEEK_STARTS_MONDAY0
#if LV_CALENDAR_WEEK_STARTS_MONDAY
#defineLV_CALENDAR_DEFAULT_DAY_NAMES {"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"}
#else
#defineLV_CALENDAR_DEFAULT_DAY_NAMES {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"}
#endif
#defineLV_CALENDAR_DEFAULT_MONTH_NAMES {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}
#defineLV_USE_CALENDAR_HEADER_ARROW1
#defineLV_USE_CALENDAR_HEADER_DROPDOWN1
#endif/*LV_USE_CALENDAR*/
#defineLV_USE_CHART1
#defineLV_USE_COLORWHEEL1
#defineLV_USE_IMGBTN1
#defineLV_USE_KEYBOARD1
#defineLV_USE_LED1
#defineLV_USE_LIST1
#defineLV_USE_MENU1
#defineLV_USE_METER1
#defineLV_USE_MSGBOX1
#defineLV_USE_SPAN1
#if LV_USE_SPAN
/*A line text can contain maximum num of span descriptor */
#defineLV_SPAN_SNIPPET_STACK_SIZE64
#endif
#defineLV_USE_SPINBOX1
#defineLV_USE_SPINNER1
#defineLV_USE_TABVIEW1
#defineLV_USE_TILEVIEW1
#defineLV_USE_WIN1/*----------- * Themes *----------*//*A simple, impressive and very complete theme*/
#defineLV_USE_THEME_DEFAULT1
#if LV_USE_THEME_DEFAULT
/*0: Light mode; 1: Dark mode*/
#defineLV_THEME_DEFAULT_DARK0/*1: Enable grow on press*/
#defineLV_THEME_DEFAULT_GROW1/*Default transition time in [ms]*/
#defineLV_THEME_DEFAULT_TRANSITION_TIME80
#endif/*LV_USE_THEME_DEFAULT*//*A very simple theme that is a good starting point for a custom theme*/
#defineLV_USE_THEME_BASIC1/*A theme designed for monochrome displays*/
#defineLV_USE_THEME_MONO1/*----------- * Layouts *----------*//*A layout similar to Flexbox in CSS.*/
#defineLV_USE_FLEX1/*A layout similar to Grid in CSS.*/
#defineLV_USE_GRID1/*--------------------- * 3rd party libraries *--------------------*//*File system interfaces for common APIs *//*API for fopen, fread, etc*/
#defineLV_USE_FS_STDIO0
#if LV_USE_FS_STDIO
#defineLV_FS_STDIO_LETTER'\0'/*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/
#defineLV_FS_STDIO_PATH""/*Set the working directory. File/directory paths will be appended to it.*/
#defineLV_FS_STDIO_CACHE_SIZE0/*>0 to cache this number of bytes in lv_fs_read()*/
#endif/*API for open, read, etc*/
#defineLV_USE_FS_POSIX0
#if LV_USE_FS_POSIX
#defineLV_FS_POSIX_LETTER'\0'/*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/
#defineLV_FS_POSIX_PATH""/*Set the working directory. File/directory paths will be appended to it.*/
#defineLV_FS_POSIX_CACHE_SIZE0/*>0 to cache this number of bytes in lv_fs_read()*/
#endif/*API for CreateFile, ReadFile, etc*/
#defineLV_USE_FS_WIN320
#if LV_USE_FS_WIN32
#defineLV_FS_WIN32_LETTER'\0'/*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/
#defineLV_FS_WIN32_PATH""/*Set the working directory. File/directory paths will be appended to it.*/
#defineLV_FS_WIN32_CACHE_SIZE0/*>0 to cache this number of bytes in lv_fs_read()*/
#endif/*API for FATFS (needs to be added separately). Uses f_open, f_read, etc*/
#defineLV_USE_FS_FATFS0
#if LV_USE_FS_FATFS
#defineLV_FS_FATFS_LETTER'\0'/*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/
#defineLV_FS_FATFS_CACHE_SIZE0/*>0 to cache this number of bytes in lv_fs_read()*/
#endif/*API for LittleFS (library needs to be added separately). Uses lfs_file_open, lfs_file_read, etc*/
#defineLV_USE_FS_LITTLEFS0
#if LV_USE_FS_LITTLEFS
#defineLV_FS_LITTLEFS_LETTER'\0'/*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/
#defineLV_FS_LITTLEFS_CACHE_SIZE0/*>0 to cache this number of bytes in lv_fs_read()*/
#endif/*PNG decoder library*/
#defineLV_USE_PNG0/*BMP decoder library*/
#defineLV_USE_BMP0/* JPG + split JPG decoder library. * Split JPG is a custom format optimized for embedded systems. */
#defineLV_USE_SJPG0/*GIF decoder library*/
#defineLV_USE_GIF0/*QR code library*/
#defineLV_USE_QRCODE0/*FreeType library*/
#defineLV_USE_FREETYPE0
#if LV_USE_FREETYPE
/*Memory used by FreeType to cache characters [bytes] (-1: no caching)*/
#defineLV_FREETYPE_CACHE_SIZE (16 * 1024)
#if LV_FREETYPE_CACHE_SIZE >= 0
/* 1: bitmap cache use the sbit cache, 0:bitmap cache use the image cache. *//* sbit cache:it is much more memory efficient for small bitmaps(font size < 256) *//* if font size >= 256, must be configured as image cache */
#defineLV_FREETYPE_SBIT_CACHE0/* Maximum number of opened FT_Face/FT_Size objects managed by this cache instance. *//* (0:use system defaults) */
#defineLV_FREETYPE_CACHE_FT_FACES0
#defineLV_FREETYPE_CACHE_FT_SIZES0
#endif
#endif/*Tiny TTF library*/
#defineLV_USE_TINY_TTF0
#if LV_USE_TINY_TTF
/*Load TTF data from files*/
#defineLV_TINY_TTF_FILE_SUPPORT0
#endif/*Rlottie library*/
#defineLV_USE_RLOTTIE0/*FFmpeg library for image decoding and playing videos *Supports all major image formats so do not enable other image decoder with it*/
#defineLV_USE_FFMPEG0
#if LV_USE_FFMPEG
/*Dump input information to stderr*/
#defineLV_FFMPEG_DUMP_FORMAT0
#endif/*----------- * Others *----------*//*1: Enable API to take snapshot for object*/
#defineLV_USE_SNAPSHOT0/*1: Enable Monkey test*/
#defineLV_USE_MONKEY0/*1: Enable grid navigation*/
#defineLV_USE_GRIDNAV0/*1: Enable lv_obj fragment*/
#defineLV_USE_FRAGMENT0/*1: Support using images as font in label or span widgets */
#defineLV_USE_IMGFONT0/*1: Enable a published subscriber based messaging system */
#defineLV_USE_MSG0/*1: Enable Pinyin input method*//*Requires: lv_keyboard*/
#defineLV_USE_IME_PINYIN0
#if LV_USE_IME_PINYIN
/*1: Use default thesaurus*//*If you do not use the default thesaurus, be sure to use `lv_ime_pinyin` after setting the thesauruss*/
#defineLV_IME_PINYIN_USE_DEFAULT_DICT1/*Set the maximum number of candidate panels that can be displayed*//*This needs to be adjusted according to the size of the screen*/
#defineLV_IME_PINYIN_CAND_TEXT_NUM6/*Use 9 key input(k9)*/
#defineLV_IME_PINYIN_USE_K9_MODE1
#if LV_IME_PINYIN_USE_K9_MODE == 1
#defineLV_IME_PINYIN_K9_CAND_TEXT_NUM3
#endif// LV_IME_PINYIN_USE_K9_MODE
#endif/*==================* EXAMPLES*==================*//*Enable the examples to be built with the library*/
#defineLV_BUILD_EXAMPLES1/*=================== * DEMO USAGE ====================*//*Show some widget. It might be required to increase `LV_MEM_SIZE` */
#defineLV_USE_DEMO_WIDGETS1
#if LV_USE_DEMO_WIDGETS
#defineLV_DEMO_WIDGETS_SLIDESHOW0
#endif/*Demonstrate the usage of encoder and keyboard*/
#defineLV_USE_DEMO_KEYPAD_AND_ENCODER0/*Benchmark your system*/
#defineLV_USE_DEMO_BENCHMARK1
#if LV_USE_DEMO_BENCHMARK
/*Use RGB565A8 images with 16 bit color depth instead of ARGB8565*/
#defineLV_DEMO_BENCHMARK_RGB565A80
#endif/*Stress test for LVGL*/
#defineLV_USE_DEMO_STRESS0/*Music player demo*/
#defineLV_USE_DEMO_MUSIC1
#if LV_USE_DEMO_MUSIC
#defineLV_DEMO_MUSIC_SQUARE0
#defineLV_DEMO_MUSIC_LANDSCAPE0
#defineLV_DEMO_MUSIC_ROUND0
#defineLV_DEMO_MUSIC_LARGE0
#defineLV_DEMO_MUSIC_AUTO_PLAY1
#endif/*--END OF LV_CONF_H--*/
#endif /*LV_CONF_H*/
#endif /*End of "Content enable"*/
Please confirm whether the display is normal when not rotated. If it is normal, I guess there is a GAP after the screen is rotated. You can try using lcd->setGapX() to adjust it.
esp_panel_board_custom_conf.h
lv_conf.h
ST7789.pdf
焊接式SPEC ZJY147TC-IG01.pdf
The text was updated successfully, but these errors were encountered: