Merge branch 'master' into master
This commit is contained in:
commit
0636e2605b
48 changed files with 931 additions and 1269 deletions
|
@ -111,31 +111,14 @@ void GC9A01_init(void)
|
|||
|
||||
};
|
||||
|
||||
#if GC9A01_BCKL == 15
|
||||
gpio_config_t io_conf;
|
||||
io_conf.intr_type = GPIO_PIN_INTR_DISABLE;
|
||||
io_conf.mode = GPIO_MODE_OUTPUT;
|
||||
io_conf.pin_bit_mask = GPIO_SEL_15;
|
||||
io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
|
||||
io_conf.pull_up_en = GPIO_PULLUP_DISABLE;
|
||||
gpio_config(&io_conf);
|
||||
#endif
|
||||
|
||||
//Initialize non-SPI GPIOs
|
||||
gpio_pad_select_gpio(GC9A01_DC);
|
||||
gpio_pad_select_gpio(GC9A01_DC);
|
||||
gpio_set_direction(GC9A01_DC, GPIO_MODE_OUTPUT);
|
||||
|
||||
#if GC9A01_USE_RST
|
||||
gpio_pad_select_gpio(GC9A01_RST);
|
||||
gpio_pad_select_gpio(GC9A01_RST);
|
||||
gpio_set_direction(GC9A01_RST, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
|
||||
#if GC9A01_ENABLE_BACKLIGHT_CONTROL
|
||||
gpio_pad_select_gpio(GC9A01_BCKL);
|
||||
gpio_set_direction(GC9A01_BCKL, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
|
||||
#if GC9A01_USE_RST
|
||||
//Reset the display
|
||||
gpio_set_level(GC9A01_RST, 0);
|
||||
vTaskDelay(100 / portTICK_RATE_MS);
|
||||
|
@ -156,8 +139,6 @@ void GC9A01_init(void)
|
|||
cmd++;
|
||||
}
|
||||
|
||||
GC9A01_enable_backlight(true);
|
||||
|
||||
GC9A01_set_orientation(CONFIG_LV_DISPLAY_ORIENTATION);
|
||||
|
||||
#if GC9A01_INVERT_COLORS == 1
|
||||
|
@ -197,22 +178,6 @@ void GC9A01_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * colo
|
|||
GC9A01_send_color((void*)color_map, size * 2);
|
||||
}
|
||||
|
||||
void GC9A01_enable_backlight(bool backlight)
|
||||
{
|
||||
#if GC9A01_ENABLE_BACKLIGHT_CONTROL
|
||||
ESP_LOGI(TAG, "%s backlight.", backlight ? "Enabling" : "Disabling");
|
||||
uint32_t tmp = 0;
|
||||
|
||||
#if (GC9A01_BCKL_ACTIVE_LVL==1)
|
||||
tmp = backlight ? 1 : 0;
|
||||
#else
|
||||
tmp = backlight ? 0 : 1;
|
||||
#endif
|
||||
|
||||
gpio_set_level(GC9A01_BCKL, tmp);
|
||||
#endif
|
||||
}
|
||||
|
||||
void GC9A01_sleep_in()
|
||||
{
|
||||
uint8_t data[] = {0x08};
|
||||
|
|
|
@ -25,19 +25,9 @@ extern "C" {
|
|||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
#define GC9A01_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define GC9A01_RST CONFIG_LV_DISP_PIN_RST
|
||||
#define GC9A01_USE_RST CONFIG_LV_DISP_USE_RST
|
||||
#define GC9A01_BCKL CONFIG_LV_DISP_PIN_BCKL
|
||||
|
||||
#define GC9A01_ENABLE_BACKLIGHT_CONTROL CONFIG_LV_ENABLE_BACKLIGHT_CONTROL
|
||||
|
||||
#if CONFIG_LV_BACKLIGHT_ACTIVE_LVL
|
||||
#define GC9A01_BCKL_ACTIVE_LVL 1
|
||||
#else
|
||||
#define GC9A01_BCKL_ACTIVE_LVL 0
|
||||
#endif
|
||||
|
||||
#define GC9A01_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define GC9A01_RST CONFIG_LV_DISP_PIN_RST
|
||||
#define GC9A01_USE_RST CONFIG_LV_DISP_USE_RST
|
||||
#define GC9A01_INVERT_COLORS CONFIG_LV_INVERT_COLORS
|
||||
|
||||
/**********************
|
||||
|
@ -50,7 +40,6 @@ extern "C" {
|
|||
|
||||
void GC9A01_init(void);
|
||||
void GC9A01_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map);
|
||||
void GC9A01_enable_backlight(bool backlight);
|
||||
void GC9A01_sleep_in(void);
|
||||
void GC9A01_sleep_out(void);
|
||||
|
||||
|
|
305
lvgl_tft/Kconfig
305
lvgl_tft/Kconfig
|
@ -22,7 +22,7 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
select LV_TFT_DISPLAY_CONTROLLER_ILI9341
|
||||
select LV_TFT_DISPLAY_PROTOCOL_SPI
|
||||
config LV_PREDEFINED_DISPLAY_M5CORE2
|
||||
bool "M5Core2"
|
||||
bool "M5Core2"
|
||||
select LV_TFT_DISPLAY_CONTROLLER_ILI9341
|
||||
select LV_TFT_DISPLAY_PROTOCOL_SPI
|
||||
config LV_PREDEFINED_DISPLAY_M5STICK
|
||||
|
@ -50,7 +50,7 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
config LV_PREDEFINED_DISPLAY_WEMOS_LOLIN
|
||||
bool "Wemos Lolin OLED"
|
||||
select LV_TFT_DISPLAY_CONTROLLER_SSD1306
|
||||
select LV_TFT_DISPLAY_PROTOCOL_I2C
|
||||
select LV_I2C_DISPLAY
|
||||
select LV_TFT_DISPLAY_MONOCHROME
|
||||
select LV_THEME_MONO
|
||||
config LV_PREDEFINED_DISPLAY_ATAG
|
||||
|
@ -179,6 +179,10 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
help
|
||||
ILI9163C display controller.
|
||||
|
||||
config LV_TFT_DISPLAY_CONTROLLER_PCD8544
|
||||
bool
|
||||
help
|
||||
PCD8544 display controller (Nokia 3110/5110)
|
||||
# Display controller communication protocol
|
||||
#
|
||||
# This symbols define the communication protocol used by the
|
||||
|
@ -197,7 +201,7 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
help
|
||||
Display controller protocol SPI
|
||||
|
||||
config LV_TFT_DISPLAY_PROTOCOL_I2C
|
||||
config LV_I2C_DISPLAY
|
||||
bool
|
||||
help
|
||||
Display controller protocol I2C
|
||||
|
@ -205,24 +209,24 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
# Used in display init function to send display orientation commands
|
||||
choice DISPLAY_ORIENTATION
|
||||
prompt "Display orientation"
|
||||
default DISPLAY_ORIENTATION_PORTRAIT if !LV_TFT_DISPLAY_CONTROLLER_SSD1306
|
||||
default DISPLAY_ORIENTATION_LANDSCAPE if LV_TFT_DISPLAY_CONTROLLER_SSD1306
|
||||
config DISPLAY_ORIENTATION_PORTRAIT
|
||||
default LV_DISPLAY_ORIENTATION_PORTRAIT if !LV_TFT_DISPLAY_CONTROLLER_SSD1306
|
||||
default LV_DISPLAY_ORIENTATION_LANDSCAPE if LV_TFT_DISPLAY_CONTROLLER_SSD1306
|
||||
config LV_DISPLAY_ORIENTATION_PORTRAIT
|
||||
bool "Portrait" if !LV_TFT_DISPLAY_CONTROLLER_SSD1306
|
||||
config DISPLAY_ORIENTATION_PORTRAIT_INVERTED
|
||||
config LV_DISPLAY_ORIENTATION_PORTRAIT_INVERTED
|
||||
bool "Portrait inverted" if !LV_TFT_DISPLAY_CONTROLLER_SSD1306
|
||||
config DISPLAY_ORIENTATION_LANDSCAPE
|
||||
config LV_DISPLAY_ORIENTATION_LANDSCAPE
|
||||
bool "Landscape"
|
||||
config DISPLAY_ORIENTATION_LANDSCAPE_INVERTED
|
||||
config LV_DISPLAY_ORIENTATION_LANDSCAPE_INVERTED
|
||||
bool "Landscape inverted"
|
||||
endchoice
|
||||
|
||||
config LV_DISPLAY_ORIENTATION
|
||||
int
|
||||
default 0 if DISPLAY_ORIENTATION_PORTRAIT
|
||||
default 1 if DISPLAY_ORIENTATION_PORTRAIT_INVERTED
|
||||
default 2 if DISPLAY_ORIENTATION_LANDSCAPE
|
||||
default 3 if DISPLAY_ORIENTATION_LANDSCAPE_INVERTED
|
||||
default 0 if LV_DISPLAY_ORIENTATION_PORTRAIT
|
||||
default 1 if LV_DISPLAY_ORIENTATION_PORTRAIT_INVERTED
|
||||
default 2 if LV_DISPLAY_ORIENTATION_LANDSCAPE
|
||||
default 3 if LV_DISPLAY_ORIENTATION_LANDSCAPE_INVERTED
|
||||
|
||||
config LV_TFT_DISPLAY_OFFSETS
|
||||
bool
|
||||
|
@ -231,14 +235,14 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
|
||||
config LV_TFT_DISPLAY_X_OFFSET
|
||||
depends on LV_TFT_DISPLAY_OFFSETS
|
||||
int
|
||||
int "X offset"
|
||||
default 40 if LV_PREDEFINED_DISPLAY_TTGO && (LV_DISPLAY_ORIENTATION_LANDSCAPE || LV_DISPLAY_ORIENTATION_LANDSCAPE_INVERTED)
|
||||
default 53 if LV_PREDEFINED_DISPLAY_TTGO && (LV_DISPLAY_ORIENTATION_PORTRAIT || LV_DISPLAY_ORIENTATION_PORTRAIT_INVERTED)
|
||||
default 0
|
||||
|
||||
config LV_TFT_DISPLAY_Y_OFFSET
|
||||
depends on LV_TFT_DISPLAY_OFFSETS
|
||||
int
|
||||
int "Y offset"
|
||||
default 53 if LV_PREDEFINED_DISPLAY_TTGO && (LV_DISPLAY_ORIENTATION_LANDSCAPE || LV_DISPLAY_ORIENTATION_LANDSCAPE_INVERTED)
|
||||
default 40 if LV_PREDEFINED_DISPLAY_TTGO && (LV_DISPLAY_ORIENTATION_PORTRAIT || LV_DISPLAY_ORIENTATION_PORTRAIT_INVERTED)
|
||||
default 0
|
||||
|
@ -324,7 +328,7 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
config LV_TFT_DISPLAY_USER_CONTROLLER_SSD1306
|
||||
bool "SSD1306"
|
||||
select LV_TFT_DISPLAY_CONTROLLER_SSD1306
|
||||
select LV_TFT_DISPLAY_PROTOCOL_I2C
|
||||
select LV_I2C_DISPLAY
|
||||
select LV_TFT_DISPLAY_MONOCHROME
|
||||
config LV_TFT_DISPLAY_USER_CONTROLLER_FT81X
|
||||
bool "FT81X"
|
||||
|
@ -353,6 +357,11 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
bool "ILI9163C"
|
||||
select LV_TFT_DISPLAY_CONTROLLER_ILI9163C
|
||||
select LV_TFT_DISPLAY_PROTOCOL_SPI
|
||||
config LV_TFT_DISPLAY_USER_CONTROLLER_PCD8544
|
||||
bool "PCD8544"
|
||||
select LV_TFT_DISPLAY_CONTROLLER_PCD8544
|
||||
select LV_TFT_DISPLAY_PROTOCOL_SPI
|
||||
select LV_TFT_DISPLAY_MONOCHROME
|
||||
endchoice
|
||||
|
||||
config CUSTOM_DISPLAY_BUFFER_SIZE
|
||||
|
@ -472,20 +481,15 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
endchoice
|
||||
|
||||
choice
|
||||
prompt "TFT SPI Bus." if LV_TFT_DISPLAY_PROTOCOL_SPI && \
|
||||
!LV_PREDEFINED_DISPLAY_TTGO
|
||||
default LV_TFT_DISPLAY_SPI_VSPI if LV_PREDEFINED_DISPLAY_TTGO && \
|
||||
!IDF_TARGET_ESP32S2
|
||||
default LV_TFT_DISPLAY_SPI_FSPI if IDF_TARGET_ESP32S2
|
||||
prompt "TFT SPI Bus." if LV_TFT_DISPLAY_PROTOCOL_SPI
|
||||
default LV_TFT_DISPLAY_SPI2_HOST
|
||||
help
|
||||
Select the SPI Bus the TFT Display is attached to.
|
||||
|
||||
config LV_TFT_DISPLAY_SPI_HSPI
|
||||
bool "HSPI"
|
||||
config LV_TFT_DISPLAY_SPI_VSPI
|
||||
bool "VSPI" if !IDF_TARGET_ESP32S2
|
||||
config LV_TFT_DISPLAY_SPI_FSPI
|
||||
bool "FSPI" if IDF_TARGET_ESP32S2
|
||||
config LV_TFT_DISPLAY_SPI2_HOST
|
||||
bool "SPI2_HOST"
|
||||
config LV_TFT_DISPLAY_SPI3_HOST
|
||||
bool "SPI3_HOST"
|
||||
endchoice
|
||||
|
||||
choice
|
||||
|
@ -516,18 +520,6 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
depends on LV_TFT_DISPLAY_SPI_TRANS_MODE_SIO
|
||||
endchoice
|
||||
|
||||
choice
|
||||
prompt "Display I2C port" if LV_TFT_DISPLAY_PROTOCOL_I2C
|
||||
default LV_DISPLAY_I2C_PORT_0
|
||||
help
|
||||
Select the I2C port used by the display controller.
|
||||
|
||||
config LV_DISPLAY_I2C_PORT_0
|
||||
bool "I2C PORT 0"
|
||||
config LV_DISPLAY_I2C_PORT_1
|
||||
bool "I2C PORT 1"
|
||||
endchoice
|
||||
|
||||
config LV_TFT_USE_CUSTOM_SPI_CLK_DIVIDER
|
||||
bool "Use custom SPI clock frequency." if LV_TFT_DISPLAY_PROTOCOL_SPI
|
||||
default n
|
||||
|
@ -605,6 +597,16 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
default 80 if LV_TFT_SPI_CLK_DIVIDER_80
|
||||
default 2
|
||||
|
||||
config LV_M5STICKC_HANDLE_AXP192
|
||||
bool "Handle Backlight and TFT power for M5StickC using AXP192." if LV_PREDEFINED_DISPLAY_M5STICKC || LV_TFT_DISPLAY_CONTROLLER_ST7735S
|
||||
default y if LV_PREDEFINED_DISPLAY_M5STICKC
|
||||
select LV_I2C_DISPLAY
|
||||
help
|
||||
Display and TFT power supply on M5StickC is controlled using an
|
||||
AXP192 Power Mangerment IC. Select yes if you want to enable TFT IC
|
||||
(LDO3) and backlight power using AXP192 by LVGL, or select no if you
|
||||
want to take care of power management in your own code.
|
||||
|
||||
config LV_INVERT_DISPLAY
|
||||
bool "IN DEPRECATION - Invert display." if LV_TFT_DISPLAY_CONTROLLER_RA8875
|
||||
default n
|
||||
|
@ -618,31 +620,6 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
If the colors look inverted on your display, try enabling this.
|
||||
If it didn't help try LVGL configuration -> Swap the 2 bytes of RGB565 color.
|
||||
|
||||
config LV_M5STICKC_HANDLE_AXP192
|
||||
bool "Handle Backlight and TFT power for M5StickC using AXP192." if LV_PREDEFINED_DISPLAY_M5STICKC || LV_TFT_DISPLAY_CONTROLLER_ST7735S
|
||||
default y if LV_PREDEFINED_DISPLAY_M5STICKC
|
||||
help
|
||||
Display and TFT power supply on M5StickC is controlled using an AXP192 Power Mangerment IC.
|
||||
Select yes if you want to enable TFT IC (LDO3) and backlight power using AXP192 by LVGL, or select no if you want to take care of
|
||||
power management in your own code.
|
||||
|
||||
config LV_AXP192_PIN_SDA
|
||||
int "GPIO for AXP192 I2C SDA"
|
||||
depends on LV_M5STICKC_HANDLE_AXP192
|
||||
range 0 39
|
||||
default 21 if LV_PREDEFINED_DISPLAY_M5STICKC
|
||||
default 21
|
||||
help
|
||||
Configure the AXP192 I2C SDA pin here.
|
||||
|
||||
config LV_AXP192_PIN_SCL
|
||||
int "GPIO for AXP192 I2C SCL"
|
||||
depends on LV_M5STICKC_HANDLE_AXP192
|
||||
range 0 39
|
||||
default 22 if LV_PREDEFINED_DISPLAY_M5STICKC
|
||||
default 22
|
||||
help
|
||||
Configure the AXP192 I2C SDA pin here.
|
||||
|
||||
# menu will be visible only when LV_PREDEFINED_DISPLAY_NONE is y
|
||||
menu "Display RA8875 Configuration"
|
||||
|
@ -783,10 +760,6 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
|
||||
config LV_DISP_SPI_MOSI
|
||||
int "GPIO for MOSI (Master Out Slave In)" if LV_TFT_DISPLAY_PROTOCOL_SPI
|
||||
range 0 39 if IDF_TARGET_ESP32
|
||||
range 0 43 if IDF_TARGET_ESP32S2
|
||||
range 0 21 if IDF_TARGET_ESP32C3
|
||||
|
||||
default 23 if LV_PREDEFINED_DISPLAY_WROVER4
|
||||
default 23 if LV_PREDEFINED_DISPLAY_ATAG
|
||||
default 23 if LV_PREDEFINED_DISPLAY_M5STACK || LV_PREDEFINED_DISPLAY_M5STICK
|
||||
|
@ -798,7 +771,6 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
default 19 if LV_PREDEFINED_DISPLAY_TTGO_CAMERA_PLUS
|
||||
default 13 if LV_PREDEFINED_DISPLAY_WT32_SC01
|
||||
default 13
|
||||
|
||||
help
|
||||
Configure the display MOSI pin here.
|
||||
|
||||
|
@ -813,10 +785,6 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
config LV_DISP_SPI_MISO
|
||||
int "GPIO for MISO (Master In Slave Out)" if LV_TFT_DISPLAY_PROTOCOL_SPI
|
||||
depends on LV_DISPLAY_USE_SPI_MISO
|
||||
range 0 39 if IDF_TARGET_ESP32
|
||||
range 0 43 if IDF_TARGET_ESP32S2
|
||||
range 0 21 if IDF_TARGET_ESP32C3
|
||||
|
||||
default 19 if LV_PREDEFINED_PINS_TKOALA
|
||||
default 38 if LV_PREDEFINED_DISPLAY_M5CORE2
|
||||
default 0
|
||||
|
@ -836,10 +804,6 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
config LV_DISP_SPI_IO2
|
||||
int "GPIO for Quad SPI IO2/WP" if LV_TFT_DISPLAY_PROTOCOL_SPI
|
||||
depends on LV_TFT_DISPLAY_SPI_TRANS_MODE_QIO
|
||||
range -1 39 if IDF_TARGET_ESP32
|
||||
range -1 43 if IDF_TARGET_ESP32S2
|
||||
range 0 21 if IDF_TARGET_ESP32C3
|
||||
|
||||
default 22 if LV_PREDEFINED_PINS_TKOALA && LV_TFT_DISPLAY_SPI_TRANS_MODE_QIO
|
||||
default -1
|
||||
help
|
||||
|
@ -848,10 +812,6 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
config LV_DISP_SPI_IO3
|
||||
int "GPIO for Quad SPI IO3/HD" if LV_TFT_DISPLAY_PROTOCOL_SPI
|
||||
depends on LV_TFT_DISPLAY_SPI_TRANS_MODE_QIO
|
||||
range -1 39 if IDF_TARGET_ESP32
|
||||
range -1 43 if IDF_TARGET_ESP32S2
|
||||
range 0 21 if IDF_TARGET_ESP32C3
|
||||
|
||||
default 21 if LV_PREDEFINED_PINS_TKOALA && LV_TFT_DISPLAY_SPI_TRANS_MODE_QIO
|
||||
default -1
|
||||
help
|
||||
|
@ -859,10 +819,6 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
|
||||
config LV_DISP_SPI_CLK
|
||||
int "GPIO for CLK (SCK / Serial Clock)" if LV_TFT_DISPLAY_PROTOCOL_SPI
|
||||
range 0 39 if IDF_TARGET_ESP32
|
||||
range 0 43 if IDF_TARGET_ESP32S2
|
||||
range 0 21 if IDF_TARGET_ESP32C3
|
||||
|
||||
default 18 if LV_PREDEFINED_DISPLAY_M5STACK || LV_PREDEFINED_DISPLAY_M5STICK
|
||||
default 18 if LV_PREDEFINED_DISPLAY_M5CORE2
|
||||
default 13 if LV_PREDEFINED_DISPLAY_M5STICKC
|
||||
|
@ -888,10 +844,6 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
config LV_DISP_SPI_CS
|
||||
int "GPIO for CS (Slave Select)" if LV_TFT_DISPLAY_PROTOCOL_SPI
|
||||
depends on LV_DISPLAY_USE_SPI_CS
|
||||
range 0 39 if IDF_TARGET_ESP32
|
||||
range 0 43 if IDF_TARGET_ESP32S2
|
||||
range 0 21 if IDF_TARGET_ESP32C3
|
||||
|
||||
default 5 if LV_PREDEFINED_PINS_38V1
|
||||
default 14 if LV_PREDEFINED_DISPLAY_M5STACK || LV_PREDEFINED_DISPLAY_M5STICK
|
||||
default 5 if LV_PREDEFINED_DISPLAY_M5CORE2
|
||||
|
@ -917,10 +869,6 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
|
||||
config LV_DISP_PIN_DC
|
||||
int "GPIO for DC (Data / Command)" if LV_TFT_DISPLAY_PROTOCOL_SPI
|
||||
range 0 39 if IDF_TARGET_ESP32
|
||||
range 0 43 if IDF_TARGET_ESP32S2
|
||||
range 0 21 if IDF_TARGET_ESP32C3
|
||||
|
||||
depends on LV_DISPLAY_USE_DC
|
||||
default 19 if LV_PREDEFINED_PINS_38V1
|
||||
default 17 if LV_PREDEFINED_PINS_38V4
|
||||
|
@ -955,10 +903,6 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
config LV_DISP_PIN_RST
|
||||
int "GPIO for Reset" if LV_TFT_DISPLAY_PROTOCOL_SPI && !LV_DISP_ST7789_SOFT_RESET
|
||||
depends on LV_DISP_USE_RST
|
||||
range 0 39 if IDF_TARGET_ESP32
|
||||
range 0 43 if IDF_TARGET_ESP32S2
|
||||
range 0 21 if IDF_TARGET_ESP32C3
|
||||
|
||||
default 18 if LV_PREDEFINED_PINS_38V1
|
||||
default 25 if LV_PREDEFINED_PINS_38V4
|
||||
default 33 if LV_PREDEFINED_DISPLAY_M5STACK || LV_PREDEFINED_DISPLAY_M5STICK
|
||||
|
@ -977,10 +921,6 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
|
||||
config LV_DISP_PIN_BUSY
|
||||
int "GPIO for Busy" if LV_TFT_DISPLAY_CONTROLLER_IL3820 || LV_TFT_DISPLAY_CONTROLLER_JD79653A || LV_TFT_DISPLAY_CONTROLLER_UC8151D
|
||||
range 0 39 if IDF_TARGET_ESP32
|
||||
range 0 43 if IDF_TARGET_ESP32S2
|
||||
range 0 21 if IDF_TARGET_ESP32C3
|
||||
|
||||
default 35 if LV_TFT_DISPLAY_CONTROLLER_IL3820 || LV_TFT_DISPLAY_CONTROLLER_JD79653A || LV_TFT_DISPLAY_CONTROLLER_UC8151D
|
||||
default 35 if IDF_TARGET_ESP32 || IDF_TARGET_ESP32S2
|
||||
default 21 if IDF_TARGET_ESP32C3
|
||||
|
@ -988,79 +928,96 @@ menu "LVGL TFT/Epaper Display controller"
|
|||
help
|
||||
Configure the display Busy pin here.
|
||||
|
||||
config LV_ENABLE_BACKLIGHT_CONTROL
|
||||
bool "Enable control of the display backlight by using an GPIO." if \
|
||||
( LV_PREDEFINED_DISPLAY_NONE && ! ( LV_TFT_DISPLAY_CONTROLLER_SH1107 || LV_TFT_DISPLAY_CONTROLLER_SSD1306 ) ) \
|
||||
|| LV_PREDEFINED_DISPLAY_RPI_MPI3501
|
||||
default y if LV_PREDEFINED_DISPLAY_M5STACK
|
||||
default n if LV_PREDEFINED_DISPLAY_M5CORE2
|
||||
default y if LV_PREDEFINED_DISPLAY_WROVER4
|
||||
default y if LV_PREDEFINED_DISPLAY_ERTFT0356
|
||||
default y if LV_PREDEFINED_DISPLAY_TTGO
|
||||
default y if LV_PREDEFINED_DISPLAY_TTGO_CAMERA_PLUS
|
||||
default y if LV_PREDEFINED_DISPLAY_WT32_SC01
|
||||
help
|
||||
Enable controlling the display backlight using an GPIO
|
||||
|
||||
config LV_BACKLIGHT_ACTIVE_LVL
|
||||
bool "Is backlight turn on with a HIGH (1) logic level?"
|
||||
depends on LV_ENABLE_BACKLIGHT_CONTROL
|
||||
default y if LV_PREDEFINED_DISPLAY_M5STACK
|
||||
default y if LV_PREDEFINED_DISPLAY_ERTFT0356
|
||||
default y if LV_PREDEFINED_DISPLAY_TTGO
|
||||
default y if LV_PREDEFINED_DISPLAY_TTGO_CAMERA_PLUS
|
||||
default y if LV_PREDEFINED_DISPLAY_WT32_SC01
|
||||
help
|
||||
Some backlights are turned on with a high signal, others held low.
|
||||
If enabled, a value of 1 will be sent to the display to enable the backlight,
|
||||
otherwise a 0 will be expected to enable it.
|
||||
|
||||
config LV_DISP_PIN_BCKL
|
||||
int "GPIO for Backlight Control"
|
||||
depends on LV_ENABLE_BACKLIGHT_CONTROL
|
||||
range 0 39 if IDF_TARGET_ESP32
|
||||
range 0 43 if IDF_TARGET_ESP32S2
|
||||
range 0 21 if IDF_TARGET_ESP32C3
|
||||
|
||||
default 23 if LV_PREDEFINED_PINS_38V1
|
||||
default 26 if LV_PREDEFINED_PINS_38V4
|
||||
default 32 if LV_PREDEFINED_DISPLAY_M5STACK
|
||||
default 5 if LV_PREDEFINED_DISPLAY_WROVER4
|
||||
default 2 if LV_PREDEFINED_DISPLAY_ADA_FEATHERWING
|
||||
default 27 if LV_PREDEFINED_DISPLAY_ERTFT0356
|
||||
default 0 if LV_PREDEFINED_PINS_TKOALA
|
||||
default 4 if LV_PREDEFINED_DISPLAY_TTGO
|
||||
default 2 if LV_PREDEFINED_DISPLAY_TTGO_CAMERA_PLUS
|
||||
default 23 if LV_PREDEFINED_DISPLAY_WT32_SC01
|
||||
default 27
|
||||
|
||||
help
|
||||
Configure the display BCLK (LED) pin here.
|
||||
|
||||
config LV_DISP_PIN_SDA
|
||||
int "GPIO for I2C SDA" if LV_TFT_DISPLAY_PROTOCOL_I2C
|
||||
range 0 39 if IDF_TARGET_ESP32
|
||||
range 0 43 if IDF_TARGET_ESP32S2
|
||||
range 0 21 if IDF_TARGET_ESP32C3
|
||||
|
||||
default 5 if LV_PREDEFINED_DISPLAY_WEMOS_LOLIN
|
||||
default 5
|
||||
|
||||
help
|
||||
Configure the I2C SDA pin here.
|
||||
|
||||
config LV_DISP_PIN_SCL
|
||||
int "GPIO for I2C SCL" if LV_TFT_DISPLAY_PROTOCOL_I2C
|
||||
range 0 39 if IDF_TARGET_ESP32
|
||||
range 0 43 if IDF_TARGET_ESP32S2
|
||||
range 0 21 if IDF_TARGET_ESP32C3
|
||||
|
||||
default 4 if LV_PREDEFINED_DISPLAY_WEMOS_LOLIN
|
||||
default 4
|
||||
|
||||
help
|
||||
Configure the I2C SCL pin here.
|
||||
|
||||
endmenu
|
||||
|
||||
choice
|
||||
prompt "Select an I2C port for the display"
|
||||
default LV_I2C_DISPLAY_PORT_0
|
||||
depends on LV_I2C_DISPLAY
|
||||
|
||||
config LV_I2C_DISPLAY_PORT_0
|
||||
bool
|
||||
prompt "I2C port 0"
|
||||
help
|
||||
I2C is shared peripheral managed by I2C Manager. In order to configure I2C Manager (pinout, etc.) see menu
|
||||
Component config->I2C Port Settings.
|
||||
|
||||
config LV_I2C_DISPLAY_PORT_1
|
||||
bool
|
||||
prompt "I2C port 1"
|
||||
help
|
||||
I2C is shared peripheral managed by I2C Manager. In order to configure I2C Manager (pinout, etc.) see menu
|
||||
Component config->I2C Port Settings.
|
||||
|
||||
endchoice
|
||||
|
||||
choice
|
||||
default LV_DISP_BACKLIGHT_SWITCH
|
||||
prompt "Backlight Control" if \
|
||||
(! ( LV_TFT_DISPLAY_CONTROLLER_SH1107 || LV_TFT_DISPLAY_CONTROLLER_SSD1306 ) )
|
||||
|
||||
config LV_DISP_BACKLIGHT_OFF
|
||||
bool
|
||||
prompt "Not Used"
|
||||
help
|
||||
Display backlight is not controlled by this driver, must be hardwired in hardware.
|
||||
|
||||
config LV_DISP_BACKLIGHT_SWITCH
|
||||
bool
|
||||
prompt "Switch control"
|
||||
help
|
||||
Display backlight can be switched on or off.
|
||||
|
||||
config LV_DISP_BACKLIGHT_PWM
|
||||
bool
|
||||
prompt "PWM control"
|
||||
help
|
||||
Display backlight is controlled by pulse-width modulation, allowing brightness settings.
|
||||
|
||||
endchoice
|
||||
|
||||
config LV_BACKLIGHT_ACTIVE_LVL
|
||||
bool "Is backlight turn on with a HIGH (1) logic level?" if \
|
||||
( LV_PREDEFINED_DISPLAY_NONE && ! ( LV_TFT_DISPLAY_CONTROLLER_SH1107 || LV_TFT_DISPLAY_CONTROLLER_SSD1306 ) ) \
|
||||
|| LV_PREDEFINED_DISPLAY_RPI_MPI3501
|
||||
depends on !LV_DISP_BACKLIGHT_OFF
|
||||
default y if LV_PREDEFINED_DISPLAY_M5STACK
|
||||
default y if LV_PREDEFINED_DISPLAY_ERTFT0356
|
||||
default y if LV_PREDEFINED_DISPLAY_TTGO
|
||||
default y if LV_PREDEFINED_DISPLAY_TTGO_CAMERA_PLUS
|
||||
default y if LV_PREDEFINED_DISPLAY_WT32_SC01
|
||||
help
|
||||
Some backlights are turned on with a high signal, others held low.
|
||||
If enabled, a value of 1 will be sent to the display to enable the backlight,
|
||||
otherwise a 0 will be expected to enable it.
|
||||
|
||||
config LV_DISP_PIN_BCKL
|
||||
int "GPIO for Backlight Control" if \
|
||||
( LV_PREDEFINED_DISPLAY_NONE && ! ( LV_TFT_DISPLAY_CONTROLLER_SH1107 || LV_TFT_DISPLAY_CONTROLLER_SSD1306 ) ) \
|
||||
|| LV_PREDEFINED_DISPLAY_RPI_MPI3501
|
||||
depends on !LV_DISP_BACKLIGHT_OFF
|
||||
default 23 if LV_PREDEFINED_PINS_38V1
|
||||
default 26 if LV_PREDEFINED_PINS_38V4
|
||||
default 32 if LV_PREDEFINED_DISPLAY_M5STACK
|
||||
default 5 if LV_PREDEFINED_DISPLAY_WROVER4
|
||||
default 2 if LV_PREDEFINED_DISPLAY_ADA_FEATHERWING
|
||||
default 27 if LV_PREDEFINED_DISPLAY_ERTFT0356
|
||||
default 0 if LV_PREDEFINED_PINS_TKOALA
|
||||
default 4 if LV_PREDEFINED_DISPLAY_TTGO
|
||||
default 2 if LV_PREDEFINED_DISPLAY_TTGO_CAMERA_PLUS
|
||||
default 23 if LV_PREDEFINED_DISPLAY_WT32_SC01
|
||||
default -1
|
||||
|
||||
help
|
||||
Configure the display BCLK (LED) pin here.
|
||||
|
||||
config LV_I2C
|
||||
bool
|
||||
default y if LV_I2C_DISPLAY
|
||||
|
||||
config LV_I2C_DISPLAY_PORT
|
||||
int
|
||||
default 1 if LV_I2C_DISPLAY_PORT_1
|
||||
default 0
|
||||
|
||||
endmenu
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
|
||||
#include "disp_driver.h"
|
||||
#include "disp_spi.h"
|
||||
|
||||
#include "esp_lcd_backlight.h"
|
||||
#include "sdkconfig.h"
|
||||
|
||||
void *disp_driver_init(void)
|
||||
{
|
||||
|
|
|
@ -310,7 +310,12 @@ static void IRAM_ATTR spi_ready(spi_transaction_t *trans)
|
|||
disp = lv_refr_get_disp_refreshing();
|
||||
#endif
|
||||
|
||||
#if LVGL_VERSION_MAJOR < 8
|
||||
lv_disp_flush_ready(&disp->driver);
|
||||
#else
|
||||
lv_disp_flush_ready(disp->driver);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
if (chained_post_cb) {
|
||||
|
|
107
lvgl_tft/esp_lcd_backlight.c
Normal file
107
lvgl_tft/esp_lcd_backlight.c
Normal file
|
@ -0,0 +1,107 @@
|
|||
/**
|
||||
* @file esp_lcd_backlight.c
|
||||
*
|
||||
*/
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include "esp_lcd_backlight.h"
|
||||
#include "driver/ledc.h"
|
||||
#include "driver/gpio.h"
|
||||
#include "esp_log.h"
|
||||
#include "soc/ledc_periph.h" // to invert LEDC output on IDF version < v4.3
|
||||
|
||||
typedef struct {
|
||||
bool pwm_control; // true: LEDC is used, false: GPIO is used
|
||||
int index; // Either GPIO or LEDC channel
|
||||
} disp_backlight_t;
|
||||
|
||||
static const char *TAG = "disp_backlight";
|
||||
|
||||
disp_backlight_h disp_backlight_new(const disp_backlight_config_t *config)
|
||||
{
|
||||
// Check input parameters
|
||||
if (config == NULL)
|
||||
return NULL;
|
||||
if (!GPIO_IS_VALID_OUTPUT_GPIO(config->gpio_num)) {
|
||||
ESP_LOGW(TAG, "Invalid GPIO number");
|
||||
return NULL;
|
||||
}
|
||||
disp_backlight_t *bckl_dev = calloc(1, sizeof(disp_backlight_t));
|
||||
if (bckl_dev == NULL){
|
||||
ESP_LOGW(TAG, "Not enough memory");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (config->pwm_control){
|
||||
// Configure LED (Backlight) pin as PWM for Brightness control.
|
||||
bckl_dev->pwm_control = true;
|
||||
bckl_dev->index = config->channel_idx;
|
||||
const ledc_channel_config_t LCD_backlight_channel = {
|
||||
.gpio_num = config->gpio_num,
|
||||
.speed_mode = LEDC_LOW_SPEED_MODE,
|
||||
.channel = config->channel_idx,
|
||||
.intr_type = LEDC_INTR_DISABLE,
|
||||
.timer_sel = config->timer_idx,
|
||||
.duty = 0,
|
||||
.hpoint = 0
|
||||
};
|
||||
const ledc_timer_config_t LCD_backlight_timer = {
|
||||
.speed_mode = LEDC_LOW_SPEED_MODE,
|
||||
.bit_num = LEDC_TIMER_10_BIT,
|
||||
.timer_num = config->timer_idx,
|
||||
.freq_hz = 5000,
|
||||
.clk_cfg = LEDC_AUTO_CLK};
|
||||
|
||||
ESP_ERROR_CHECK(ledc_timer_config(&LCD_backlight_timer));
|
||||
ESP_ERROR_CHECK(ledc_channel_config(&LCD_backlight_channel));
|
||||
gpio_matrix_out(config->gpio_num, ledc_periph_signal[LEDC_LOW_SPEED_MODE].sig_out0_idx + config->channel_idx, config->output_invert, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Configure GPIO for output
|
||||
bckl_dev->index = config->gpio_num;
|
||||
gpio_pad_select_gpio(config->gpio_num);
|
||||
ESP_ERROR_CHECK(gpio_set_direction(config->gpio_num, GPIO_MODE_OUTPUT));
|
||||
gpio_matrix_out(config->gpio_num, SIG_GPIO_OUT_IDX, config->output_invert, false);
|
||||
}
|
||||
|
||||
return (disp_backlight_h)bckl_dev;
|
||||
}
|
||||
|
||||
void disp_backlight_set(disp_backlight_h bckl, int brightness_percent)
|
||||
{
|
||||
// Check input paramters
|
||||
if (bckl == NULL)
|
||||
return;
|
||||
if (brightness_percent > 100)
|
||||
brightness_percent = 100;
|
||||
if (brightness_percent < 0)
|
||||
brightness_percent = 0;
|
||||
|
||||
disp_backlight_t *bckl_dev = (disp_backlight_t *) bckl;
|
||||
ESP_LOGI(TAG, "Setting LCD backlight: %d%%", brightness_percent);
|
||||
|
||||
if (bckl_dev->pwm_control) {
|
||||
uint32_t duty_cycle = (1023 * brightness_percent) / 100; // LEDC resolution set to 10bits, thus: 100% = 1023
|
||||
ESP_ERROR_CHECK(ledc_set_duty(LEDC_LOW_SPEED_MODE, bckl_dev->index, duty_cycle));
|
||||
ESP_ERROR_CHECK(ledc_update_duty(LEDC_LOW_SPEED_MODE, bckl_dev->index));
|
||||
} else {
|
||||
ESP_ERROR_CHECK(gpio_set_level(bckl_dev->index, brightness_percent));
|
||||
}
|
||||
}
|
||||
|
||||
void disp_backlight_delete(disp_backlight_h bckl)
|
||||
{
|
||||
if (bckl == NULL)
|
||||
return;
|
||||
|
||||
disp_backlight_t *bckl_dev = (disp_backlight_t *) bckl;
|
||||
if (bckl_dev->pwm_control) {
|
||||
ledc_stop(LEDC_LOW_SPEED_MODE, bckl_dev->index, 0);
|
||||
} else {
|
||||
gpio_reset_pin(bckl_dev->index);
|
||||
}
|
||||
free (bckl);
|
||||
}
|
67
lvgl_tft/esp_lcd_backlight.h
Normal file
67
lvgl_tft/esp_lcd_backlight.h
Normal file
|
@ -0,0 +1,67 @@
|
|||
/**
|
||||
* @file esp_lcd_backlight.h
|
||||
*/
|
||||
|
||||
#ifndef ESP_LCD_BACKLIGHT_H
|
||||
#define ESP_LCD_BACKLIGHT_H
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include <stdbool.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" { /* extern "C" */
|
||||
#endif
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
/**
|
||||
* @brief Display backlight controller handle
|
||||
*
|
||||
*/
|
||||
typedef void * disp_backlight_h;
|
||||
|
||||
/**
|
||||
* @brief Configuration structure of backlight controller
|
||||
*
|
||||
* Must be passed to disp_backlight_new() for correct configuration
|
||||
*/
|
||||
typedef struct {
|
||||
bool pwm_control;
|
||||
bool output_invert;
|
||||
int gpio_num; // see gpio_num_t
|
||||
|
||||
// Relevant only for PWM controlled backlight
|
||||
// Ignored for switch (ON/OFF) backlight control
|
||||
int timer_idx; // ledc_timer_t
|
||||
int channel_idx; // ledc_channel_t
|
||||
} disp_backlight_config_t;
|
||||
|
||||
/**
|
||||
* @brief Create new backlight controller
|
||||
*
|
||||
* @param[in] config Configuration structure of backlight controller
|
||||
* @return Display backlight controller handle
|
||||
*/
|
||||
disp_backlight_h disp_backlight_new(const disp_backlight_config_t *config);
|
||||
|
||||
/**
|
||||
* @brief Set backlight
|
||||
*
|
||||
* Brightness parameter can be 0-100 for PWM controlled backlight.
|
||||
* GPIO controlled backlight (ON/OFF) is turned off witch value 0 and turned on with any positive value.
|
||||
*
|
||||
* @param bckl Backlight controller handle
|
||||
* @param[in] brightness_percent Brightness in [%]
|
||||
*/
|
||||
void disp_backlight_set(disp_backlight_h bckl, int brightness_percent);
|
||||
void disp_backlight_delete(disp_backlight_h bckl);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /*ESP_LCD_BACKLIGHT_H*/
|
|
@ -160,20 +160,13 @@ static uint8_t displayType = HX8357D;
|
|||
void hx8357_init(void)
|
||||
{
|
||||
//Initialize non-SPI GPIOs
|
||||
gpio_pad_select_gpio(HX8357_DC);
|
||||
gpio_pad_select_gpio(HX8357_DC);
|
||||
gpio_set_direction(HX8357_DC, GPIO_MODE_OUTPUT);
|
||||
|
||||
#if HX8357_USE_RST
|
||||
gpio_pad_select_gpio(HX8357_RST);
|
||||
gpio_pad_select_gpio(HX8357_RST);
|
||||
gpio_set_direction(HX8357_RST, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
|
||||
#if HX8357_ENABLE_BACKLIGHT_CONTROL
|
||||
gpio_pad_select_gpio(HX8357_BCKL);
|
||||
gpio_set_direction(HX8357_BCKL, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
|
||||
#if HX8357_USE_RST
|
||||
//Reset the display
|
||||
gpio_set_level(HX8357_RST, 0);
|
||||
vTaskDelay(10 / portTICK_RATE_MS);
|
||||
|
@ -210,8 +203,6 @@ void hx8357_init(void)
|
|||
#else
|
||||
hx8357_send_cmd(HX8357_INVOFF);
|
||||
#endif
|
||||
|
||||
hx8357_enable_backlight(true);
|
||||
}
|
||||
|
||||
|
||||
|
@ -248,23 +239,6 @@ void hx8357_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * colo
|
|||
hx8357_send_color((void*)color_map, size * 2);
|
||||
}
|
||||
|
||||
void hx8357_enable_backlight(bool backlight)
|
||||
{
|
||||
#if HX8357_ENABLE_BACKLIGHT_CONTROL
|
||||
ESP_LOGD(TAG, "%s backlight.\n", backlight ? "Enabling" : "Disabling");
|
||||
uint32_t tmp = 0;
|
||||
|
||||
#if (HX8357_BCKL_ACTIVE_LVL==1)
|
||||
tmp = backlight ? 1 : 0;
|
||||
#else
|
||||
tmp = backlight ? 0 : 1;
|
||||
#endif
|
||||
|
||||
gpio_set_level(HX8357_BCKL, tmp);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void hx8357_set_rotation(uint8_t r)
|
||||
{
|
||||
r = r & 3; // can't be higher than 3
|
||||
|
|
|
@ -35,19 +35,10 @@ extern "C" {
|
|||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
#define HX8357_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define HX8357_RST CONFIG_LV_DISP_PIN_RST
|
||||
#define HX8357_USE_RST CONFIG_LV_DISP_USE_RST
|
||||
#define HX8357_BCKL CONFIG_LV_DISP_PIN_BCKL
|
||||
|
||||
#define HX8357_ENABLE_BACKLIGHT_CONTROL CONFIG_LV_ENABLE_BACKLIGHT_CONTROL
|
||||
#define HX8357_INVERT_COLORS CONFIG_LV_INVERT_COLORS
|
||||
|
||||
#if CONFIG_LV_BACKLIGHT_ACTIVE_LVL
|
||||
#define HX8357_BCKL_ACTIVE_LVL 1
|
||||
#else
|
||||
#define HX8357_BCKL_ACTIVE_LVL 0
|
||||
#endif
|
||||
#define HX8357_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define HX8357_RST CONFIG_LV_DISP_PIN_RST
|
||||
#define HX8357_USE_RST CONFIG_LV_DISP_USE_RST
|
||||
#define HX8357_INVERT_COLORS CONFIG_LV_INVERT_COLORS
|
||||
|
||||
|
||||
/*******************
|
||||
|
@ -136,7 +127,6 @@ extern "C" {
|
|||
|
||||
void hx8357_init(void);
|
||||
void hx8357_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map);
|
||||
void hx8357_enable_backlight(bool backlight);
|
||||
void hx8357_set_rotation(uint8_t r);
|
||||
|
||||
/**********************
|
||||
|
|
|
@ -199,15 +199,13 @@ void il3820_init(void)
|
|||
gpio_pad_select_gpio(IL3820_DC_PIN);
|
||||
gpio_set_direction(IL3820_DC_PIN, GPIO_MODE_OUTPUT);
|
||||
|
||||
#if IL3820_USE_RST
|
||||
gpio_pad_select_gpio(IL3820_RST_PIN);
|
||||
gpio_set_direction(IL3820_RST_PIN, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
|
||||
gpio_pad_select_gpio(IL3820_BUSY_PIN);
|
||||
gpio_set_direction(IL3820_BUSY_PIN, GPIO_MODE_INPUT);
|
||||
|
||||
#if IL3820_USE_RST
|
||||
gpio_pad_select_gpio(IL3820_RST_PIN);
|
||||
gpio_set_direction(IL3820_RST_PIN, GPIO_MODE_OUTPUT);
|
||||
|
||||
/* Harware reset */
|
||||
gpio_set_level( IL3820_RST_PIN, 0);
|
||||
vTaskDelay(IL3820_RESET_DELAY / portTICK_RATE_MS);
|
||||
|
|
|
@ -143,10 +143,6 @@ void ili9163c_init(void)
|
|||
gpio_pad_select_gpio(ILI9163C_RST);
|
||||
gpio_set_direction(ILI9163C_RST, GPIO_MODE_OUTPUT);
|
||||
|
||||
#if ILI9163C_ENABLE_BACKLIGHT_CONTROL
|
||||
gpio_pad_select_gpio(ILI9163C_BCKL);
|
||||
gpio_set_direction(ILI9163C_BCKL, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
//Reset the display
|
||||
gpio_set_level(ILI9163C_RST, 0);
|
||||
vTaskDelay(100 / portTICK_RATE_MS);
|
||||
|
@ -166,8 +162,6 @@ void ili9163c_init(void)
|
|||
cmd++;
|
||||
}
|
||||
|
||||
ili9163c_enable_backlight(true);
|
||||
|
||||
ili9163c_set_orientation(CONFIG_LV_DISPLAY_ORIENTATION);
|
||||
}
|
||||
|
||||
|
@ -199,22 +193,6 @@ void ili9163c_flush(lv_disp_drv_t *drv, const lv_area_t *area, lv_color_t *color
|
|||
ili9163c_send_color((void *)color_map, size * 2);
|
||||
}
|
||||
|
||||
void ili9163c_enable_backlight(bool backlight)
|
||||
{
|
||||
#if ILI9163C_ENABLE_BACKLIGHT_CONTROL
|
||||
ESP_LOGD(TAG, "%s backlight.", backlight ? "Enabling" : "Disabling");
|
||||
uint32_t tmp = 0;
|
||||
|
||||
#if (ILI9163C_BCKL_ACTIVE_LVL == 1)
|
||||
tmp = backlight ? 1 : 0;
|
||||
#else
|
||||
tmp = backlight ? 0 : 1;
|
||||
#endif
|
||||
|
||||
gpio_set_level(ILI9163C_BCKL, tmp);
|
||||
#endif
|
||||
}
|
||||
|
||||
void ili9163c_sleep_in()
|
||||
{
|
||||
uint8_t data[] = {0x08};
|
||||
|
|
|
@ -26,35 +26,24 @@ extern "C"
|
|||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
#define ILI9163C_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define ILI9163C_RST CONFIG_LV_DISP_PIN_RST
|
||||
#define ILI9163C_BCKL CONFIG_LV_DISP_PIN_BCKL
|
||||
|
||||
#define ILI9163C_ENABLE_BACKLIGHT_CONTROL CONFIG_LV_ENABLE_BACKLIGHT_CONTROL
|
||||
|
||||
#if CONFIG_LV_BACKLIGHT_ACTIVE_LVL
|
||||
#define ILI9163C_BCKL_ACTIVE_LVL 1
|
||||
#else
|
||||
#define ILI9163C_BCKL_ACTIVE_LVL 0
|
||||
#endif
|
||||
|
||||
#define ILI9163C_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define ILI9163C_RST CONFIG_LV_DISP_PIN_RST
|
||||
#define ILI9163C_INVERT_COLORS CONFIG_LV_INVERT_COLORS
|
||||
|
||||
/**********************
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
void ili9163c_init(void);
|
||||
void ili9163c_flush(lv_disp_drv_t *drv, const lv_area_t *area, lv_color_t *color_map);
|
||||
void ili9163c_enable_backlight(bool backlight);
|
||||
void ili9163c_sleep_in(void);
|
||||
void ili9163c_sleep_out(void);
|
||||
void ili9163c_init(void);
|
||||
void ili9163c_flush(lv_disp_drv_t *drv, const lv_area_t *area, lv_color_t *color_map);
|
||||
void ili9163c_sleep_in(void);
|
||||
void ili9163c_sleep_out(void);
|
||||
|
||||
/**********************
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
|
|
|
@ -80,30 +80,14 @@ void ili9341_init(void)
|
|||
{0, {0}, 0xff},
|
||||
};
|
||||
|
||||
#if ILI9341_BCKL == 15
|
||||
gpio_config_t io_conf;
|
||||
io_conf.intr_type = GPIO_PIN_INTR_DISABLE;
|
||||
io_conf.mode = GPIO_MODE_OUTPUT;
|
||||
io_conf.pin_bit_mask = GPIO_SEL_15;
|
||||
io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
|
||||
io_conf.pull_up_en = GPIO_PULLUP_DISABLE;
|
||||
gpio_config(&io_conf);
|
||||
#endif
|
||||
|
||||
//Initialize non-SPI GPIOs
|
||||
gpio_pad_select_gpio(ILI9341_DC);
|
||||
gpio_pad_select_gpio(ILI9341_DC);
|
||||
gpio_set_direction(ILI9341_DC, GPIO_MODE_OUTPUT);
|
||||
|
||||
#if ILI9341_USE_RST
|
||||
gpio_pad_select_gpio(ILI9341_RST);
|
||||
gpio_pad_select_gpio(ILI9341_RST);
|
||||
gpio_set_direction(ILI9341_RST, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
|
||||
#if ILI9341_ENABLE_BACKLIGHT_CONTROL
|
||||
gpio_pad_select_gpio(ILI9341_BCKL);
|
||||
gpio_set_direction(ILI9341_BCKL, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
|
||||
#if ILI9341_USE_RST
|
||||
//Reset the display
|
||||
gpio_set_level(ILI9341_RST, 0);
|
||||
vTaskDelay(100 / portTICK_RATE_MS);
|
||||
|
@ -124,9 +108,7 @@ void ili9341_init(void)
|
|||
cmd++;
|
||||
}
|
||||
|
||||
ili9341_enable_backlight(true);
|
||||
|
||||
ili9341_set_orientation(CONFIG_LV_DISPLAY_ORIENTATION);
|
||||
ili9341_set_orientation(CONFIG_LV_DISPLAY_ORIENTATION);
|
||||
|
||||
#if ILI9341_INVERT_COLORS == 1
|
||||
ili9341_send_cmd(0x21);
|
||||
|
@ -158,29 +140,10 @@ void ili9341_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * col
|
|||
|
||||
/*Memory write*/
|
||||
ili9341_send_cmd(0x2C);
|
||||
|
||||
|
||||
uint32_t size = lv_area_get_width(area) * lv_area_get_height(area);
|
||||
|
||||
ili9341_send_color((void*)color_map, size * 2);
|
||||
}
|
||||
|
||||
void ili9341_enable_backlight(bool backlight)
|
||||
{
|
||||
#if ILI9341_ENABLE_BACKLIGHT_CONTROL
|
||||
ESP_LOGI(TAG, "%s backlight.", backlight ? "Enabling" : "Disabling");
|
||||
uint32_t tmp = 0;
|
||||
|
||||
#if (ILI9341_BCKL_ACTIVE_LVL==1)
|
||||
tmp = backlight ? 1 : 0;
|
||||
#else
|
||||
tmp = backlight ? 0 : 1;
|
||||
#endif
|
||||
|
||||
gpio_set_level(ILI9341_BCKL, tmp);
|
||||
#endif
|
||||
}
|
||||
|
||||
void ili9341_sleep_in()
|
||||
{
|
||||
uint8_t data[] = {0x08};
|
||||
|
|
|
@ -20,7 +20,8 @@ extern "C" {
|
|||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
#include "../lvgl_helpers.h"
|
||||
|
||||
#include "sdkconfig.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
@ -28,16 +29,6 @@ extern "C" {
|
|||
#define ILI9341_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define ILI9341_USE_RST CONFIG_LV_DISP_USE_RST
|
||||
#define ILI9341_RST CONFIG_LV_DISP_PIN_RST
|
||||
#define ILI9341_BCKL CONFIG_LV_DISP_PIN_BCKL
|
||||
|
||||
#define ILI9341_ENABLE_BACKLIGHT_CONTROL CONFIG_LV_ENABLE_BACKLIGHT_CONTROL
|
||||
|
||||
#if CONFIG_LV_BACKLIGHT_ACTIVE_LVL
|
||||
#define ILI9341_BCKL_ACTIVE_LVL 1
|
||||
#else
|
||||
#define ILI9341_BCKL_ACTIVE_LVL 0
|
||||
#endif
|
||||
|
||||
#define ILI9341_INVERT_COLORS CONFIG_LV_INVERT_COLORS
|
||||
|
||||
/**********************
|
||||
|
@ -50,7 +41,6 @@ extern "C" {
|
|||
|
||||
void ili9341_init(void);
|
||||
void ili9341_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map);
|
||||
void ili9341_enable_backlight(bool backlight);
|
||||
void ili9341_sleep_in(void);
|
||||
void ili9341_sleep_out(void);
|
||||
|
||||
|
|
|
@ -80,14 +80,7 @@ void ili9481_init(void)
|
|||
#if ILI9481_USE_RST
|
||||
gpio_pad_select_gpio(ILI9481_RST);
|
||||
gpio_set_direction(ILI9481_RST, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
|
||||
#if ILI9481_ENABLE_BACKLIGHT_CONTROL
|
||||
gpio_pad_select_gpio(ILI9481_BCKL);
|
||||
gpio_set_direction(ILI9481_BCKL, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
|
||||
#if ILI9481_USE_RST
|
||||
//Reset the display
|
||||
gpio_set_level(ILI9481_RST, 0);
|
||||
vTaskDelay(100 / portTICK_RATE_MS);
|
||||
|
@ -112,8 +105,6 @@ void ili9481_init(void)
|
|||
cmd++;
|
||||
}
|
||||
|
||||
ili9481_enable_backlight(true);
|
||||
|
||||
ili9481_set_orientation(ILI9481_DISPLAY_ORIENTATION);
|
||||
}
|
||||
|
||||
|
@ -173,22 +164,6 @@ void ili9481_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * col
|
|||
heap_caps_free(mybuf);
|
||||
}
|
||||
|
||||
void ili9481_enable_backlight(bool backlight)
|
||||
{
|
||||
#if ILI9481_ENABLE_BACKLIGHT_CONTROL
|
||||
ESP_LOGI(TAG, "%s backlight.", backlight ? "Enabling" : "Disabling");
|
||||
uint32_t tmp = 0;
|
||||
|
||||
#if (ILI9481_BCKL_ACTIVE_LVL==1)
|
||||
tmp = backlight ? 1 : 0;
|
||||
#else
|
||||
tmp = backlight ? 0 : 1;
|
||||
#endif
|
||||
|
||||
gpio_set_level(ILI9481_BCKL, tmp);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**********************
|
||||
* STATIC FUNCTIONS
|
||||
**********************/
|
||||
|
|
|
@ -25,20 +25,12 @@ extern "C" {
|
|||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
#define ILI9481_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define ILI9481_RST CONFIG_LV_DISP_PIN_RST
|
||||
#define ILI9481_USE_RST CONFIG_LV_DISP_USE_RST
|
||||
#define ILI9481_BCKL CONFIG_LV_DISP_PIN_BCKL
|
||||
|
||||
#define ILI9481_ENABLE_BACKLIGHT_CONTROL CONFIG_LV_ENABLE_BACKLIGHT_CONTROL
|
||||
#define ILI9481_INVERT_COLORS CONFIG_LV_INVERT_COLORS
|
||||
#define ILI9481_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define ILI9481_RST CONFIG_LV_DISP_PIN_RST
|
||||
#define ILI9481_USE_RST CONFIG_LV_DISP_USE_RST
|
||||
#define ILI9481_INVERT_COLORS CONFIG_LV_INVERT_COLORS
|
||||
#define ILI9481_DISPLAY_ORIENTATION CONFIG_LV_DISPLAY_ORIENTATION
|
||||
|
||||
#if CONFIG_LV_BACKLIGHT_ACTIVE_LVL
|
||||
#define ILI9481_BCKL_ACTIVE_LVL 1
|
||||
#else
|
||||
#define ILI9481_BCKL_ACTIVE_LVL 0
|
||||
#endif
|
||||
|
||||
/*******************
|
||||
* ILI9481 REGS
|
||||
|
@ -118,7 +110,6 @@ extern "C" {
|
|||
|
||||
void ili9481_init(void);
|
||||
void ili9481_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map);
|
||||
void ili9481_enable_backlight(bool backlight);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
|
|
|
@ -65,31 +65,14 @@ void ili9486_init(void)
|
|||
{0x00, {0}, 0xff},
|
||||
};
|
||||
|
||||
#if ILI9486_BCKL == 15
|
||||
gpio_config_t io_conf;
|
||||
io_conf.intr_type = GPIO_PIN_INTR_DISABLE;
|
||||
io_conf.mode = GPIO_MODE_OUTPUT;
|
||||
io_conf.pin_bit_mask = GPIO_SEL_15;
|
||||
io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
|
||||
io_conf.pull_up_en = GPIO_PULLUP_DISABLE;
|
||||
gpio_config(&io_conf);
|
||||
#endif
|
||||
|
||||
//Initialize non-SPI GPIOs
|
||||
gpio_pad_select_gpio(ILI9486_DC);
|
||||
gpio_pad_select_gpio(ILI9486_DC);
|
||||
gpio_set_direction(ILI9486_DC, GPIO_MODE_OUTPUT);
|
||||
|
||||
#if ILI9486_USE_RST
|
||||
gpio_pad_select_gpio(ILI9486_RST);
|
||||
gpio_pad_select_gpio(ILI9486_RST);
|
||||
gpio_set_direction(ILI9486_RST, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
|
||||
#if ILI9486_ENABLE_BACKLIGHT_CONTROL
|
||||
gpio_pad_select_gpio(ILI9486_BCKL);
|
||||
gpio_set_direction(ILI9486_BCKL, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
|
||||
#if ILI9486_USE_RST
|
||||
//Reset the display
|
||||
gpio_set_level(ILI9486_RST, 0);
|
||||
vTaskDelay(100 / portTICK_RATE_MS);
|
||||
|
@ -110,9 +93,7 @@ void ili9486_init(void)
|
|||
cmd++;
|
||||
}
|
||||
|
||||
ili9486_enable_backlight(true);
|
||||
|
||||
ili9486_set_orientation(CONFIG_LV_DISPLAY_ORIENTATION);
|
||||
ili9486_set_orientation(CONFIG_LV_DISPLAY_ORIENTATION);
|
||||
}
|
||||
|
||||
void ili9486_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map)
|
||||
|
@ -144,22 +125,6 @@ void ili9486_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * col
|
|||
ili9486_send_color((void*) color_map, size * 2);
|
||||
}
|
||||
|
||||
void ili9486_enable_backlight(bool backlight)
|
||||
{
|
||||
#if ILI9486_ENABLE_BACKLIGHT_CONTROL
|
||||
ESP_LOGI(TAG, "%s backlight.", backlight ? "Enabling" : "Disabling");
|
||||
uint32_t tmp = 0;
|
||||
|
||||
#if (ILI9486_BCKL_ACTIVE_LVL==1)
|
||||
tmp = backlight ? 1 : 0;
|
||||
#else
|
||||
tmp = backlight ? 0 : 1;
|
||||
#endif
|
||||
|
||||
gpio_set_level(ILI9486_BCKL, tmp);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**********************
|
||||
* STATIC FUNCTIONS
|
||||
**********************/
|
||||
|
|
|
@ -28,15 +28,7 @@ extern "C" {
|
|||
#define ILI9486_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define ILI9486_RST CONFIG_LV_DISP_PIN_RST
|
||||
#define ILI9486_USE_RST CONFIG_LV_DISP_USE_RST
|
||||
#define ILI9486_BCKL CONFIG_LV_DISP_PIN_BCKL
|
||||
|
||||
#define ILI9486_ENABLE_BACKLIGHT_CONTROL CONFIG_LV_ENABLE_BACKLIGHT_CONTROL
|
||||
|
||||
#if CONFIG_LV_BACKLIGHT_ACTIVE_LVL
|
||||
#define ILI9486_BCKL_ACTIVE_LVL 1
|
||||
#else
|
||||
#define ILI9486_BCKL_ACTIVE_LVL 0
|
||||
#endif
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
|
@ -48,7 +40,6 @@ extern "C" {
|
|||
|
||||
void ili9486_init(void);
|
||||
void ili9486_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map);
|
||||
void ili9486_enable_backlight(bool backlight);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
|
|
|
@ -76,20 +76,13 @@ void ili9488_init(void)
|
|||
};
|
||||
|
||||
//Initialize non-SPI GPIOs
|
||||
gpio_pad_select_gpio(ILI9488_DC);
|
||||
gpio_pad_select_gpio(ILI9488_DC);
|
||||
gpio_set_direction(ILI9488_DC, GPIO_MODE_OUTPUT);
|
||||
|
||||
#if ILI9488_USE_RST
|
||||
gpio_pad_select_gpio(ILI9488_RST);
|
||||
gpio_pad_select_gpio(ILI9488_RST);
|
||||
gpio_set_direction(ILI9488_RST, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
|
||||
#if ILI9488_ENABLE_BACKLIGHT_CONTROL
|
||||
gpio_pad_select_gpio(ILI9488_BCKL);
|
||||
gpio_set_direction(ILI9488_BCKL, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
|
||||
#if ILI9488_USE_RST
|
||||
//Reset the display
|
||||
gpio_set_level(ILI9488_RST, 0);
|
||||
vTaskDelay(100 / portTICK_RATE_MS);
|
||||
|
@ -114,9 +107,7 @@ void ili9488_init(void)
|
|||
cmd++;
|
||||
}
|
||||
|
||||
ili9488_enable_backlight(true);
|
||||
|
||||
ili9488_set_orientation(CONFIG_LV_DISPLAY_ORIENTATION);
|
||||
ili9488_set_orientation(CONFIG_LV_DISPLAY_ORIENTATION);
|
||||
}
|
||||
|
||||
// Flush function based on mvturnho repo
|
||||
|
@ -175,22 +166,6 @@ void ili9488_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * col
|
|||
heap_caps_free(mybuf);
|
||||
}
|
||||
|
||||
void ili9488_enable_backlight(bool backlight)
|
||||
{
|
||||
#if ILI9488_ENABLE_BACKLIGHT_CONTROL
|
||||
ESP_LOGI(TAG, "%s backlight.", backlight ? "Enabling" : "Disabling");
|
||||
uint32_t tmp = 0;
|
||||
|
||||
#if (ILI9488_BCKL_ACTIVE_LVL==1)
|
||||
tmp = backlight ? 1 : 0;
|
||||
#else
|
||||
tmp = backlight ? 0 : 1;
|
||||
#endif
|
||||
|
||||
gpio_set_level(ILI9488_BCKL, tmp);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**********************
|
||||
* STATIC FUNCTIONS
|
||||
**********************/
|
||||
|
|
|
@ -27,16 +27,7 @@ extern "C" {
|
|||
*********************/
|
||||
#define ILI9488_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define ILI9488_RST CONFIG_LV_DISP_PIN_RST
|
||||
#define ILI9488_USE_RST CONFIG_LV_DISP_USE_RST
|
||||
#define ILI9488_BCKL CONFIG_LV_DISP_PIN_BCKL
|
||||
|
||||
#define ILI9488_ENABLE_BACKLIGHT_CONTROL CONFIG_LV_ENABLE_BACKLIGHT_CONTROL
|
||||
|
||||
#if CONFIG_LV_BACKLIGHT_ACTIVE_LVL
|
||||
#define ILI9488_BCKL_ACTIVE_LVL 1
|
||||
#else
|
||||
#define ILI9488_BCKL_ACTIVE_LVL 0
|
||||
#endif
|
||||
#define ILI9488_USE_RST CONFIG_LV_DISP_USE_RSTS
|
||||
|
||||
/*******************
|
||||
* ILI9488 REGS
|
||||
|
@ -155,7 +146,6 @@ typedef struct {
|
|||
|
||||
void ili9488_init(void);
|
||||
void ili9488_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map);
|
||||
void ili9488_enable_backlight(bool backlight);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
|
|
148
lvgl_tft/pcd8544.c
Normal file
148
lvgl_tft/pcd8544.c
Normal file
|
@ -0,0 +1,148 @@
|
|||
/**
|
||||
* @file pcd8544.c
|
||||
*
|
||||
* Roughly based on:
|
||||
* https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library
|
||||
* https://github.com/olikraus/u8g2
|
||||
*/
|
||||
|
||||
#include "disp_spi.h"
|
||||
#include "driver/gpio.h"
|
||||
|
||||
#include <esp_log.h>
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
|
||||
#include "pcd8544.h"
|
||||
|
||||
#define TAG "lv_pcd8544"
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
#define BIT_SET(a,b) ((a) |= (1U<<(b)))
|
||||
#define BIT_CLEAR(a,b) ((a) &= ~(1U<<(b)))
|
||||
|
||||
/**********************
|
||||
* STATIC FUNCTIONS
|
||||
**********************/
|
||||
|
||||
static void pcd8544_send_cmd(uint8_t cmd)
|
||||
{
|
||||
disp_wait_for_pending_transactions();
|
||||
gpio_set_level(PCD8544_DC, 0); /*Command mode*/
|
||||
disp_spi_send_data(&cmd, 1);
|
||||
}
|
||||
|
||||
static void pcd8544_send_data(void * data, uint16_t length)
|
||||
{
|
||||
disp_wait_for_pending_transactions();
|
||||
gpio_set_level(PCD8544_DC, 1); /*Data mode*/
|
||||
disp_spi_send_data(data, length);
|
||||
}
|
||||
|
||||
static void pcd8544_send_colors(void * data, uint16_t length)
|
||||
{
|
||||
gpio_set_level(PCD8544_DC, 1); /*Data mode*/
|
||||
disp_spi_send_colors(data, length);
|
||||
}
|
||||
|
||||
/**********************
|
||||
* GLOBAL FUNCTIONS
|
||||
**********************/
|
||||
|
||||
void pcd8544_init(void){
|
||||
|
||||
// TODO: orientation
|
||||
|
||||
// Initialize non-SPI GPIOs
|
||||
gpio_pad_select_gpio(PCD8544_DC);
|
||||
gpio_set_direction(PCD8544_DC, GPIO_MODE_OUTPUT);
|
||||
gpio_pad_select_gpio(PCD8544_RST);
|
||||
gpio_set_direction(PCD8544_RST, GPIO_MODE_OUTPUT);
|
||||
|
||||
// Reset the display
|
||||
gpio_set_level(PCD8544_RST, 0);
|
||||
vTaskDelay(100 / portTICK_RATE_MS);
|
||||
gpio_set_level(PCD8544_RST, 1);
|
||||
vTaskDelay(100 / portTICK_RATE_MS);
|
||||
|
||||
pcd8544_send_cmd(0x21); /* activate chip (PD=0), horizontal increment (V=0), enter extended command set (H=1) */
|
||||
pcd8544_send_cmd(0x06); /* temp. control: b10 = 2 */
|
||||
pcd8544_send_cmd(0x13); /* bias system 1:48 */
|
||||
pcd8544_send_cmd(0xc0); /* medium Vop = Contrast 0x40 = 64 */
|
||||
|
||||
pcd8544_send_cmd(0x20); /* activate chip (PD=0), horizontal increment (V=0), enter extended command set (H=0) */
|
||||
pcd8544_send_cmd(0x0c); /* display mode normal */
|
||||
}
|
||||
|
||||
void pcd8544_set_contrast (uint8_t contrast){
|
||||
if (contrast > 0x7f){
|
||||
contrast = 0x7f;
|
||||
}
|
||||
pcd8544_send_cmd(0x21); /* activate chip (PD=0), horizontal increment (V=0), enter extended command set (H=1) */
|
||||
pcd8544_send_cmd(0x80 | contrast); /* medium Vop = Contrast */
|
||||
}
|
||||
|
||||
void pcd8544_rounder(lv_disp_drv_t * disp_drv, lv_area_t *area){
|
||||
uint8_t hor_max = disp_drv->hor_res;
|
||||
uint8_t ver_max = disp_drv->ver_res;
|
||||
|
||||
area->x1 = 0;
|
||||
area->y1 = 0;
|
||||
area->x2 = hor_max - 1;
|
||||
area->y2 = ver_max - 1;
|
||||
}
|
||||
|
||||
void pcd8544_set_px_cb(lv_disp_drv_t * disp_drv, uint8_t * buf, lv_coord_t buf_w, lv_coord_t x, lv_coord_t y,
|
||||
lv_color_t color, lv_opa_t opa){
|
||||
|
||||
uint8_t set = (color.full == 0) && (LV_OPA_TRANSP != opa);
|
||||
|
||||
uint16_t byte_index = x + (( y>>3 ) * buf_w);
|
||||
uint8_t bit_index = y & 0x7;
|
||||
|
||||
if (set) {
|
||||
BIT_SET(buf[byte_index], bit_index);
|
||||
} else {
|
||||
BIT_CLEAR(buf[byte_index], bit_index);
|
||||
}
|
||||
}
|
||||
|
||||
void pcd8544_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_map){
|
||||
|
||||
pcd8544_send_cmd(0x20); /* activate chip (PD=0), horizontal increment (V=0), enter extended command set (H=0) */
|
||||
|
||||
uint8_t * buf = (uint8_t *) color_map;
|
||||
|
||||
// Check if the whole frame buffer can be sent in a single SPI transaction
|
||||
|
||||
if ((area->x1 == 0) && (area->y1 == 0) && (area->x2 == (disp_drv->hor_res - 1)) && (area->y2 == (disp_drv->ver_res - 1))){
|
||||
|
||||
// send complete frame buffer at once.
|
||||
// NOTE: disp_spi_send_colors triggers lv_disp_flush_ready
|
||||
|
||||
pcd8544_send_cmd(0x40); /* set Y address */
|
||||
pcd8544_send_cmd(0x80); /* set X address */
|
||||
pcd8544_send_colors(buf, disp_drv->hor_res * disp_drv->ver_res / 8);
|
||||
|
||||
} else {
|
||||
|
||||
// send horizontal tiles
|
||||
|
||||
uint16_t bank_start = area->y1 / 8;
|
||||
uint16_t bank_end = area->y2 / 8;
|
||||
|
||||
uint16_t bank;
|
||||
uint16_t cols_to_update = area->x2 - area->x1 + 1;
|
||||
for (bank = bank_start ; bank <= bank_end ; bank++ ){
|
||||
pcd8544_send_cmd(0x40 | bank ); /* set Y address */
|
||||
pcd8544_send_cmd(0x80 | area->x1 ); /* set X address */
|
||||
uint16_t offset = bank * disp_drv->hor_res + area->x1;
|
||||
pcd8544_send_data(&buf[offset], cols_to_update);
|
||||
}
|
||||
|
||||
lv_disp_flush_ready(disp_drv);
|
||||
}
|
||||
}
|
57
lvgl_tft/pcd8544.h
Normal file
57
lvgl_tft/pcd8544.h
Normal file
|
@ -0,0 +1,57 @@
|
|||
|
||||
/**
|
||||
* @file pcd8544.h
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef PCD8544_H
|
||||
#define PCD8544_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include <stdbool.h>
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
#define PCD8544_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define PCD8544_RST CONFIG_LV_DISP_PIN_RST
|
||||
#define PCD8544_BCKL CONFIG_LV_DISP_PIN_BCKL
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
void pcd8544_init(void);
|
||||
void pcd8544_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map);
|
||||
void pcd8544_rounder(lv_disp_drv_t * disp_drv, lv_area_t *area);
|
||||
void pcd8544_set_px_cb(lv_disp_drv_t * disp_drv, uint8_t * buf, lv_coord_t buf_w, lv_coord_t x, lv_coord_t y,
|
||||
lv_color_t color, lv_opa_t opa);
|
||||
void pcd8544_set_contrast(uint8_t contrast);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /*PCD8544_H*/
|
|
@ -148,29 +148,12 @@ void ra8875_init(void)
|
|||
|
||||
ESP_LOGI(TAG, "Initializing RA8875...");
|
||||
|
||||
#if (CONFIG_LV_DISP_PIN_BCKL == 15)
|
||||
gpio_config_t io_conf;
|
||||
io_conf.intr_type = GPIO_PIN_INTR_DISABLE;
|
||||
io_conf.mode = GPIO_MODE_OUTPUT;
|
||||
io_conf.pin_bit_mask = GPIO_SEL_15;
|
||||
io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
|
||||
io_conf.pull_up_en = GPIO_PULLUP_DISABLE;
|
||||
gpio_config(&io_conf);
|
||||
#endif
|
||||
|
||||
// Initialize non-SPI GPIOs
|
||||
|
||||
#if RA8875_USE_RST
|
||||
gpio_pad_select_gpio(RA8875_RST);
|
||||
gpio_set_direction(RA8875_RST, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_LV_DISP_PIN_BCKL
|
||||
gpio_pad_select_gpio(CONFIG_LV_DISP_PIN_BCKL);
|
||||
gpio_set_direction(CONFIG_LV_DISP_PIN_BCKL, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
|
||||
#if RA8875_USE_RST
|
||||
// Reset the RA8875
|
||||
gpio_set_level(RA8875_RST, 0);
|
||||
vTaskDelay(DIV_ROUND_UP(100, portTICK_RATE_MS));
|
||||
|
@ -200,28 +183,8 @@ void ra8875_init(void)
|
|||
ESP_LOGW(TAG, "WARNING: Memory clear timed out; RA8875 may be unresponsive.");
|
||||
}
|
||||
|
||||
// Enable the display and backlight
|
||||
// Enable the display
|
||||
ra8875_enable_display(true);
|
||||
ra8875_enable_backlight(true);
|
||||
}
|
||||
|
||||
void ra8875_enable_backlight(bool backlight)
|
||||
{
|
||||
#if CONFIG_LV_ENABLE_BACKLIGHT_CONTROL
|
||||
ESP_LOGI(TAG, "%s backlight.", backlight ? "Enabling" : "Disabling");
|
||||
uint32_t tmp = 0;
|
||||
|
||||
#if CONFIG_LV_BACKLIGHT_ACTIVE_LVL
|
||||
tmp = backlight ? 1 : 0;
|
||||
#else
|
||||
tmp = backlight ? 0 : 1;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_LV_DISP_PIN_BCKL
|
||||
gpio_set_level(CONFIG_LV_DISP_PIN_BCKL, tmp);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
void ra8875_enable_display(bool enable)
|
||||
|
|
|
@ -97,7 +97,6 @@ extern "C" {
|
|||
**********************/
|
||||
|
||||
void ra8875_init(void);
|
||||
void ra8875_enable_backlight(bool backlight);
|
||||
void ra8875_enable_display(bool enable);
|
||||
void ra8875_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map);
|
||||
|
||||
|
|
|
@ -13,10 +13,9 @@
|
|||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include "driver/i2c.h"
|
||||
#include "assert.h"
|
||||
|
||||
#include "lvgl_i2c_conf.h"
|
||||
#include "lvgl_i2c/i2c_manager.h"
|
||||
|
||||
#include "ssd1306.h"
|
||||
|
||||
|
@ -25,6 +24,7 @@
|
|||
*********************/
|
||||
#define TAG "SSD1306"
|
||||
|
||||
#define OLED_I2C_PORT (CONFIG_LV_I2C_DISPLAY_PORT)
|
||||
// SLA (0x3C) + WRITE_MODE (0x00) = 0x78 (0b01111000)
|
||||
#define OLED_I2C_ADDRESS 0x3C
|
||||
#define OLED_WIDTH 128
|
||||
|
@ -70,8 +70,6 @@
|
|||
// Charge Pump (pg.62)
|
||||
#define OLED_CMD_SET_CHARGE_PUMP 0x8D // follow with 0x14
|
||||
|
||||
#define OLED_IIC_FREQ_HZ 400000 // I2C colock frequency
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
@ -101,10 +99,10 @@ void ssd1306_init(void)
|
|||
uint8_t orientation_1 = 0;
|
||||
uint8_t orientation_2 = 0;
|
||||
|
||||
#if defined (CONFIG_DISPLAY_ORIENTATION_LANDSCAPE)
|
||||
#if defined (CONFIG_LV_DISPLAY_ORIENTATION_LANDSCAPE)
|
||||
orientation_1 = OLED_CMD_SET_SEGMENT_REMAP;
|
||||
orientation_2 = OLED_CMD_SET_COM_SCAN_MODE_REMAP;
|
||||
#elif defined (CONFIG_DISPLAY_ORIENTATION_LANDSCAPE_INVERTED)
|
||||
#elif defined (CONFIG_LV_DISPLAY_ORIENTATION_LANDSCAPE_INVERTED)
|
||||
orientation_1 = 0xA0;
|
||||
orientation_2 = OLED_CMD_SET_COM_SCAN_MODE_NORMAL;
|
||||
#else
|
||||
|
@ -213,44 +211,15 @@ void ssd1306_sleep_out(void)
|
|||
static uint8_t send_data(lv_disp_drv_t *disp_drv, void *bytes, size_t bytes_len)
|
||||
{
|
||||
(void) disp_drv;
|
||||
esp_err_t err;
|
||||
|
||||
uint8_t *data = (uint8_t *) bytes;
|
||||
|
||||
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
|
||||
|
||||
i2c_master_start(cmd);
|
||||
i2c_master_write_byte(cmd, (OLED_I2C_ADDRESS << 1) | I2C_MASTER_WRITE, true);
|
||||
|
||||
for (size_t idx = 0; idx < bytes_len; idx++) {
|
||||
i2c_master_write_byte(cmd, data[idx], true);
|
||||
}
|
||||
|
||||
i2c_master_stop(cmd);
|
||||
|
||||
/* Send queued commands */
|
||||
err = i2c_master_cmd_begin(DISP_I2C_PORT, cmd, 10 / portTICK_PERIOD_MS);
|
||||
i2c_cmd_link_delete(cmd);
|
||||
|
||||
return ESP_OK == err ? 0 : 1;
|
||||
return lvgl_i2c_write(OLED_I2C_PORT, OLED_I2C_ADDRESS, data[0], data + 1, bytes_len - 1 );
|
||||
}
|
||||
|
||||
static uint8_t send_pixels(lv_disp_drv_t *disp_drv, void *color_buffer, size_t buffer_len)
|
||||
{
|
||||
(void) disp_drv;
|
||||
esp_err_t err;
|
||||
|
||||
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
|
||||
i2c_master_start(cmd);
|
||||
i2c_master_write_byte(cmd, (OLED_I2C_ADDRESS << 1) | I2C_MASTER_WRITE, true);
|
||||
|
||||
i2c_master_write_byte(cmd, OLED_CONTROL_BYTE_DATA_STREAM, true);
|
||||
i2c_master_write(cmd, (uint8_t *) color_buffer, buffer_len, true);
|
||||
i2c_master_stop(cmd);
|
||||
|
||||
/* Send queued commands */
|
||||
err = i2c_master_cmd_begin(DISP_I2C_PORT, cmd, 10 / portTICK_PERIOD_MS);
|
||||
i2c_cmd_link_delete(cmd);
|
||||
|
||||
return ESP_OK == err ? 0 : 1;
|
||||
return lvgl_i2c_write(OLED_I2C_PORT, OLED_I2C_ADDRESS, OLED_CONTROL_BYTE_DATA_STREAM, color_buffer, buffer_len);
|
||||
}
|
||||
|
|
|
@ -25,8 +25,6 @@ extern "C" {
|
|||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
#define SSD1306_SDA CONFIG_LV_DISP_PIN_SDA
|
||||
#define SSD1306_SCL CONFIG_LV_DISP_PIN_SCL
|
||||
#define SSD1306_DISPLAY_ORIENTATION TFT_ORIENTATION_LANDSCAPE
|
||||
|
||||
/**********************
|
||||
|
|
|
@ -8,12 +8,15 @@
|
|||
*********************/
|
||||
#include "st7735s.h"
|
||||
#include "disp_spi.h"
|
||||
#include "driver/i2c.h"
|
||||
#include "driver/gpio.h"
|
||||
#include "esp_log.h"
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
|
||||
#ifdef CONFIG_LV_M5STICKC_HANDLE_AXP192
|
||||
#include "lvgl_i2c/i2c_manager.h"
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
@ -38,7 +41,6 @@ static void st7735s_send_cmd(uint8_t cmd);
|
|||
static void st7735s_send_data(void * data, uint16_t length);
|
||||
static void st7735s_send_color(void * data, uint16_t length);
|
||||
static void st7735s_set_orientation(uint8_t orientation);
|
||||
static void i2c_master_init();
|
||||
static void axp192_write_byte(uint8_t addr, uint8_t data);
|
||||
static void axp192_init();
|
||||
static void axp192_sleep_in();
|
||||
|
@ -60,7 +62,6 @@ uint8_t st7735s_portrait_mode = 0;
|
|||
void st7735s_init(void)
|
||||
{
|
||||
#ifdef CONFIG_LV_M5STICKC_HANDLE_AXP192
|
||||
i2c_master_init();
|
||||
axp192_init();
|
||||
#endif
|
||||
|
||||
|
@ -163,12 +164,16 @@ void st7735s_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * col
|
|||
void st7735s_sleep_in()
|
||||
{
|
||||
st7735s_send_cmd(0x10);
|
||||
axp192_sleep_in();
|
||||
#ifdef CONFIG_LV_M5STICKC_HANDLE_AXP192
|
||||
axp192_sleep_in();
|
||||
#endif
|
||||
}
|
||||
|
||||
void st7735s_sleep_out()
|
||||
{
|
||||
axp192_sleep_out();
|
||||
#ifdef CONFIG_LV_M5STICKC_HANDLE_AXP192
|
||||
axp192_sleep_out();
|
||||
#endif
|
||||
st7735s_send_cmd(0x11);
|
||||
}
|
||||
|
||||
|
@ -218,55 +223,35 @@ static void st7735s_set_orientation(uint8_t orientation)
|
|||
st7735s_send_data((void *) &data[orientation], 1);
|
||||
}
|
||||
|
||||
static void i2c_master_init()
|
||||
{
|
||||
i2c_config_t i2c_config = {
|
||||
.mode = I2C_MODE_MASTER,
|
||||
.sda_io_num = AXP192_SDA,
|
||||
.scl_io_num = AXP192_SCL,
|
||||
.sda_pullup_en = GPIO_PULLUP_ENABLE,
|
||||
.scl_pullup_en = GPIO_PULLUP_ENABLE,
|
||||
.master.clk_speed = 400000
|
||||
};
|
||||
i2c_param_config(I2C_NUM_0, &i2c_config);
|
||||
i2c_driver_install(I2C_NUM_0, I2C_MODE_MASTER, 0, 0, 0);
|
||||
}
|
||||
#ifdef CONFIG_LV_M5STICKC_HANDLE_AXP192
|
||||
|
||||
static void axp192_write_byte(uint8_t addr, uint8_t data)
|
||||
{
|
||||
esp_err_t ret;
|
||||
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
|
||||
static void axp192_write_byte(uint8_t addr, uint8_t data)
|
||||
{
|
||||
err = lvgl_i2c_write(CONFIG_LV_I2C_DISPLAY_PORT, AXP192_I2C_ADDRESS, addr, &data, 1);
|
||||
if (ret != ESP_OK) {
|
||||
ESP_LOGE(TAG, "AXP192 send failed. code: 0x%.2X", ret);
|
||||
}
|
||||
}
|
||||
|
||||
i2c_master_start(cmd);
|
||||
i2c_master_write_byte(cmd, (AXP192_I2C_ADDRESS << 1) | I2C_MASTER_WRITE, true);
|
||||
i2c_master_write_byte(cmd, addr, true);
|
||||
i2c_master_write_byte(cmd, data, true);
|
||||
i2c_master_stop(cmd);
|
||||
static void axp192_init()
|
||||
{
|
||||
// information on how to init and use AXP192 ifor M5StickC taken from
|
||||
// https://forum.m5stack.com/topic/1025/m5stickc-turn-off-screen-completely
|
||||
|
||||
ret = i2c_master_cmd_begin(I2C_NUM_0, cmd, 10/portTICK_PERIOD_MS);
|
||||
if (ret != ESP_OK) {
|
||||
ESP_LOGE(TAG, "AXP192 send failed. code: 0x%.2X", ret);
|
||||
}
|
||||
i2c_cmd_link_delete(cmd);
|
||||
}
|
||||
axp192_write_byte(0x10, 0xFF); // OLED_VPP Enable
|
||||
axp192_write_byte(0x28, 0xCC); // Enable LDO2&LDO3, LED&TFT 3.0V
|
||||
axp192_sleep_out();
|
||||
ESP_LOGI(TAG, "AXP192 initialized, power enabled for LDO2 and LDO3");
|
||||
}
|
||||
|
||||
static void axp192_init()
|
||||
{
|
||||
// information on how to init and use AXP192 ifor M5StickC taken from
|
||||
// https://forum.m5stack.com/topic/1025/m5stickc-turn-off-screen-completely
|
||||
static void axp192_sleep_in()
|
||||
{
|
||||
axp192_write_byte(0x12, 0x4b);
|
||||
}
|
||||
|
||||
axp192_write_byte(0x10, 0xFF); // OLED_VPP Enable
|
||||
axp192_write_byte(0x28, 0xCC); // Enable LDO2&LDO3, LED&TFT 3.0V
|
||||
axp192_sleep_out();
|
||||
ESP_LOGI(TAG, "AXP192 initialized, power enabled for LDO2 and LDO3");
|
||||
}
|
||||
static void axp192_sleep_out()
|
||||
{
|
||||
axp192_write_byte(0x12, 0x4d);
|
||||
}
|
||||
|
||||
static void axp192_sleep_in()
|
||||
{
|
||||
axp192_write_byte(0x12, 0x4b);
|
||||
}
|
||||
|
||||
static void axp192_sleep_out()
|
||||
{
|
||||
axp192_write_byte(0x12, 0x4d);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -29,9 +29,6 @@ extern "C" {
|
|||
#define ST7735S_RST CONFIG_LV_DISP_PIN_RST
|
||||
#define ST7735S_USE_RST CONFIG_LV_DISP_USE_RST
|
||||
|
||||
#define AXP192_SDA CONFIG_LV_AXP192_PIN_SDA
|
||||
#define AXP192_SCL CONFIG_LV_AXP192_PIN_SCL
|
||||
|
||||
#define ST7735S_INVERT_COLORS CONFIG_LV_INVERT_COLORS
|
||||
|
||||
// Defines are taken from
|
||||
|
@ -134,7 +131,6 @@ extern "C" {
|
|||
|
||||
void st7735s_init(void);
|
||||
void st7735s_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map);
|
||||
void st7735s_enable_backlight(bool backlight);
|
||||
void st7735s_sleep_in(void);
|
||||
void st7735s_sleep_out(void);
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ typedef struct {
|
|||
**********************/
|
||||
static void st7789_set_orientation(uint8_t orientation);
|
||||
|
||||
static void st7789_send_color(void *data, uint16_t length);
|
||||
static void st7789_send_color(void *data, size_t length);
|
||||
|
||||
/**********************
|
||||
* STATIC VARIABLES
|
||||
|
@ -94,11 +94,6 @@ void st7789_init(void)
|
|||
gpio_set_direction(ST7789_RST, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
|
||||
#if ST7789_ENABLE_BACKLIGHT_CONTROL
|
||||
gpio_pad_select_gpio(ST7789_BCKL);
|
||||
gpio_set_direction(ST7789_BCKL, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
|
||||
//Reset the display
|
||||
#if !defined(ST7789_SOFT_RST)
|
||||
gpio_set_level(ST7789_RST, 0);
|
||||
|
@ -122,30 +117,12 @@ void st7789_init(void)
|
|||
cmd++;
|
||||
}
|
||||
|
||||
st7789_enable_backlight(true);
|
||||
|
||||
st7789_set_orientation(CONFIG_LV_DISPLAY_ORIENTATION);
|
||||
}
|
||||
|
||||
void st7789_enable_backlight(bool backlight)
|
||||
{
|
||||
#if ST7789_ENABLE_BACKLIGHT_CONTROL
|
||||
printf("%s backlight.\n", backlight ? "Enabling" : "Disabling");
|
||||
uint32_t tmp = 0;
|
||||
|
||||
#if (ST7789_BCKL_ACTIVE_LVL==1)
|
||||
tmp = backlight ? 1 : 0;
|
||||
#else
|
||||
tmp = backlight ? 0 : 1;
|
||||
#endif
|
||||
|
||||
gpio_set_level(ST7789_BCKL, tmp);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* The ST7789 display controller can drive 320*240 displays, when using a 240*240
|
||||
* display there's a gap of 80px, we need to edit the coordinates to take into
|
||||
* account that gap, this is not necessary in all orientations. */
|
||||
/* The ST7789 display controller can drive up to 320*240 displays, when using a 240*240 or 240*135
|
||||
* displays there's a gap of 80px or 40/52/53px respectively. 52px or 53x offset depends on display orientation.
|
||||
* We need to edit the coordinates to take into account those gaps, this is not necessary in all orientations. */
|
||||
void st7789_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map)
|
||||
{
|
||||
uint8_t data[4] = {0};
|
||||
|
@ -162,13 +139,29 @@ void st7789_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * colo
|
|||
offsety2 += CONFIG_LV_TFT_DISPLAY_Y_OFFSET;
|
||||
|
||||
#elif (LV_HOR_RES_MAX == 240) && (LV_VER_RES_MAX == 240)
|
||||
#if (CONFIG_LV_DISPLAY_ORIENTATION_PORTRAIT)
|
||||
offsetx1 += 80;
|
||||
offsetx2 += 80;
|
||||
#elif (CONFIG_LV_DISPLAY_ORIENTATION_LANDSCAPE_INVERTED)
|
||||
offsety1 += 80;
|
||||
offsety2 += 80;
|
||||
#endif
|
||||
#if (CONFIG_LV_DISPLAY_ORIENTATION_PORTRAIT)
|
||||
offsetx1 += 80;
|
||||
offsetx2 += 80;
|
||||
#elif (CONFIG_LV_DISPLAY_ORIENTATION_LANDSCAPE_INVERTED)
|
||||
offsety1 += 80;
|
||||
offsety2 += 80;
|
||||
#endif
|
||||
#elif (LV_HOR_RES_MAX == 240) && (LV_VER_RES_MAX == 135)
|
||||
#if (CONFIG_LV_DISPLAY_ORIENTATION_PORTRAIT) || \
|
||||
(CONFIG_LV_DISPLAY_ORIENTATION_PORTRAIT_INVERTED)
|
||||
offsetx1 += 40;
|
||||
offsetx2 += 40;
|
||||
offsety1 += 53;
|
||||
offsety2 += 53;
|
||||
#endif
|
||||
#elif (LV_HOR_RES_MAX == 135) && (LV_VER_RES_MAX == 240)
|
||||
#if (CONFIG_LV_DISPLAY_ORIENTATION_LANDSCAPE) || \
|
||||
(CONFIG_LV_DISPLAY_ORIENTATION_LANDSCAPE_INVERTED)
|
||||
offsetx1 += 52;
|
||||
offsetx2 += 52;
|
||||
offsety1 += 40;
|
||||
offsety2 += 40;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*Column addresses*/
|
||||
|
@ -190,7 +183,7 @@ void st7789_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * colo
|
|||
/*Memory write*/
|
||||
st7789_send_cmd(ST7789_RAMWR);
|
||||
|
||||
uint32_t size = lv_area_get_width(area) * lv_area_get_height(area);
|
||||
size_t size = (size_t)lv_area_get_width(area) * (size_t)lv_area_get_height(area);
|
||||
|
||||
st7789_send_color((void*)color_map, size * 2);
|
||||
|
||||
|
@ -213,7 +206,7 @@ void st7789_send_data(void * data, uint16_t length)
|
|||
disp_spi_send_data(data, length);
|
||||
}
|
||||
|
||||
static void st7789_send_color(void * data, uint16_t length)
|
||||
static void st7789_send_color(void * data, size_t length)
|
||||
{
|
||||
disp_wait_for_pending_transactions();
|
||||
gpio_set_level(ST7789_DC, 1);
|
||||
|
|
|
@ -23,7 +23,6 @@ extern "C"
|
|||
|
||||
#define ST7789_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define ST7789_RST CONFIG_LV_DISP_PIN_RST
|
||||
#define ST7789_BCKL CONFIG_LV_DISP_PIN_BCKL
|
||||
|
||||
#if CONFIG_LV_DISP_USE_RST
|
||||
#if CONFIG_LV_DISP_ST7789_SOFT_RESET
|
||||
|
@ -33,16 +32,8 @@ extern "C"
|
|||
#define ST7789_SOFT_RST
|
||||
#endif
|
||||
|
||||
|
||||
#define ST7789_ENABLE_BACKLIGHT_CONTROL CONFIG_LV_ENABLE_BACKLIGHT_CONTROL
|
||||
#define ST7789_INVERT_COLORS CONFIG_LV_INVERT_COLORS
|
||||
|
||||
#if CONFIG_LV_BACKLIGHT_ACTIVE_LVL
|
||||
#define ST7789_BCKL_ACTIVE_LVL 1
|
||||
#else
|
||||
#define ST7789_BCKL_ACTIVE_LVL 0
|
||||
#endif
|
||||
|
||||
/* ST7789 commands */
|
||||
#define ST7789_NOP 0x00
|
||||
#define ST7789_SWRESET 0x01
|
||||
|
@ -121,7 +112,6 @@ extern "C"
|
|||
|
||||
void st7789_init(void);
|
||||
void st7789_flush(lv_disp_drv_t *drv, const lv_area_t *area, lv_color_t *color_map);
|
||||
void st7789_enable_backlight(bool backlight);
|
||||
|
||||
void st7789_send_cmd(uint8_t cmd);
|
||||
void st7789_send_data(void *data, uint16_t length);
|
||||
|
|
|
@ -81,16 +81,6 @@ void st7796s_init(void)
|
|||
{0, {0}, 0xff},
|
||||
};
|
||||
|
||||
#if ST7796S_BCKL == 15
|
||||
gpio_config_t io_conf;
|
||||
io_conf.intr_type = GPIO_PIN_INTR_DISABLE;
|
||||
io_conf.mode = GPIO_MODE_OUTPUT;
|
||||
io_conf.pin_bit_mask = GPIO_SEL_15;
|
||||
io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
|
||||
io_conf.pull_up_en = GPIO_PULLUP_DISABLE;
|
||||
gpio_config(&io_conf);
|
||||
#endif
|
||||
|
||||
//Initialize non-SPI GPIOs
|
||||
gpio_pad_select_gpio(ST7796S_DC);
|
||||
gpio_set_direction(ST7796S_DC, GPIO_MODE_OUTPUT);
|
||||
|
@ -98,14 +88,7 @@ void st7796s_init(void)
|
|||
#if ST7796S_USE_RST
|
||||
gpio_pad_select_gpio(ST7796S_RST);
|
||||
gpio_set_direction(ST7796S_RST, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
|
||||
#if ST7796S_ENABLE_BACKLIGHT_CONTROL
|
||||
gpio_pad_select_gpio(ST7796S_BCKL);
|
||||
gpio_set_direction(ST7796S_BCKL, GPIO_MODE_OUTPUT);
|
||||
#endif
|
||||
|
||||
#if ST7796S_USE_RST
|
||||
//Reset the display
|
||||
gpio_set_level(ST7796S_RST, 0);
|
||||
vTaskDelay(100 / portTICK_RATE_MS);
|
||||
|
@ -128,8 +111,6 @@ void st7796s_init(void)
|
|||
cmd++;
|
||||
}
|
||||
|
||||
st7796s_enable_backlight(true);
|
||||
|
||||
st7796s_set_orientation(CONFIG_LV_DISPLAY_ORIENTATION);
|
||||
|
||||
#if ST7796S_INVERT_COLORS == 1
|
||||
|
@ -167,22 +148,6 @@ void st7796s_flush(lv_disp_drv_t *drv, const lv_area_t *area, lv_color_t *color_
|
|||
st7796s_send_color((void *)color_map, size * 2);
|
||||
}
|
||||
|
||||
void st7796s_enable_backlight(bool backlight)
|
||||
{
|
||||
#if ST7796S_ENABLE_BACKLIGHT_CONTROL
|
||||
ESP_LOGI(TAG, "%s backlight.", backlight ? "Enabling" : "Disabling");
|
||||
uint32_t tmp = 0;
|
||||
|
||||
#if (ST7796S_BCKL_ACTIVE_LVL == 1)
|
||||
tmp = backlight ? 1 : 0;
|
||||
#else
|
||||
tmp = backlight ? 0 : 1;
|
||||
#endif
|
||||
|
||||
gpio_set_level(ST7796S_BCKL, tmp);
|
||||
#endif
|
||||
}
|
||||
|
||||
void st7796s_sleep_in()
|
||||
{
|
||||
uint8_t data[] = {0x08};
|
||||
|
|
|
@ -26,20 +26,12 @@ extern "C"
|
|||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
#define ST7796S_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define ST7796S_RST CONFIG_LV_DISP_PIN_RST
|
||||
#define ST7796S_USE_RST CONFIG_LV_DISP_USE_RST
|
||||
#define ST7796S_BCKL CONFIG_LV_DISP_PIN_BCKL
|
||||
|
||||
#define ST7796S_ENABLE_BACKLIGHT_CONTROL CONFIG_LV_ENABLE_BACKLIGHT_CONTROL
|
||||
#define ST7796S_INVERT_COLORS CONFIG_LV_INVERT_COLORS
|
||||
#define ST7796S_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define ST7796S_RST CONFIG_LV_DISP_PIN_RST
|
||||
#define ST7796S_USE_RST CONFIG_LV_DISP_USE_RST
|
||||
#define ST7796S_INVERT_COLORS CONFIG_LV_INVERT_COLORS
|
||||
#define ST7796S_DISPLAY_ORIENTATION CONFIG_LV_DISPLAY_ORIENTATION
|
||||
|
||||
#if CONFIG_LV_BACKLIGHT_ACTIVE_LVL
|
||||
#define ST7796S_BCKL_ACTIVE_LVL 1
|
||||
#else
|
||||
#define ST7796S_BCKL_ACTIVE_LVL 0
|
||||
#endif
|
||||
|
||||
/*******************
|
||||
* ST7796S REGS
|
||||
|
@ -119,7 +111,6 @@ extern "C"
|
|||
|
||||
void st7796s_init(void);
|
||||
void st7796s_flush(lv_disp_drv_t *drv, const lv_area_t *area, lv_color_t *color_map);
|
||||
void st7796s_enable_backlight(bool backlight);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue