Skip to content

Commit 0838403

Browse files
committed
Move drivers from the lv_port_esp32 to here
1 parent 5a32d98 commit 0838403

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+14977
-2
lines changed

CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
if(ESP_PLATFORM)
2+
3+
file(GLOB SOURCES *.c)
4+
5+
idf_component_register(SRCS ${SOURCES}
6+
INCLUDE_DIRS .
7+
REQUIRES lvgl)
8+
9+
endif()

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
1-
# lvgl_esp32_drivers
2-
Drivers for ESP32
1+
# lvgl esp32 drivers

component.mk

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# LVGL esp32 drivers
2+
3+
COMPONENT_SRCDIRS := .
4+
COMPONENT_ADD_INCLUDEDIRS := .

lvgl_helpers.c

Lines changed: 236 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,236 @@
1+
/**
2+
* @file lvgl_helpers.c
3+
*
4+
*/
5+
6+
/*********************
7+
* INCLUDES
8+
*********************/
9+
#include "sdkconfig.h"
10+
#include "lvgl_helpers.h"
11+
#include "esp_log.h"
12+
13+
#include "lvgl_tft/disp_spi.h"
14+
#include "lvgl_touch/tp_spi.h"
15+
16+
#include "lvgl_spi_conf.h"
17+
#include "lvgl_i2c_conf.h"
18+
19+
#include "driver/i2c.h"
20+
21+
#include "lvgl/src/lv_core/lv_refr.h"
22+
23+
/*********************
24+
* DEFINES
25+
*********************/
26+
27+
#define TAG "lvgl_helpers"
28+
29+
/**********************
30+
* TYPEDEFS
31+
**********************/
32+
33+
/**********************
34+
* STATIC PROTOTYPES
35+
**********************/
36+
37+
/**********************
38+
* STATIC VARIABLES
39+
**********************/
40+
41+
/**********************
42+
* MACROS
43+
**********************/
44+
45+
/**********************
46+
* GLOBAL FUNCTIONS
47+
**********************/
48+
49+
/* Interface and driver initialization */
50+
void lvgl_driver_init(void)
51+
{
52+
ESP_LOGI(TAG, "Display hor size: %d, ver size: %d", LV_HOR_RES_MAX, LV_VER_RES_MAX);
53+
ESP_LOGI(TAG, "Display buffer size: %d", DISP_BUF_SIZE);
54+
55+
#if defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_FT81X)
56+
ESP_LOGI(TAG, "Initializing SPI master for FT81X");
57+
58+
lvgl_spi_driver_init(TFT_SPI_HOST,
59+
DISP_SPI_MISO, DISP_SPI_MOSI, DISP_SPI_CLK,
60+
SPI_BUS_MAX_TRANSFER_SZ, 1,
61+
DISP_SPI_IO2, DISP_SPI_IO3);
62+
63+
disp_spi_add_device(TFT_SPI_HOST);
64+
disp_driver_init();
65+
66+
#if defined (CONFIG_LV_TOUCH_CONTROLLER_FT81X)
67+
touch_driver_init();
68+
#endif
69+
70+
return;
71+
#endif
72+
73+
#if defined (SHARED_SPI_BUS)
74+
ESP_LOGI(TAG, "Initializing shared SPI master");
75+
76+
lvgl_spi_driver_init(TFT_SPI_HOST,
77+
TP_SPI_MISO, DISP_SPI_MOSI, DISP_SPI_CLK,
78+
SPI_BUS_MAX_TRANSFER_SZ, 1,
79+
-1, -1);
80+
81+
disp_spi_add_device(TFT_SPI_HOST);
82+
tp_spi_add_device(TOUCH_SPI_HOST);
83+
84+
disp_driver_init();
85+
touch_driver_init();
86+
87+
return;
88+
#endif
89+
90+
#if defined (SHARED_I2C_BUS)
91+
ESP_LOGI(TAG, "Initializing shared I2C master");
92+
93+
lvgl_i2c_driver_init(DISP_I2C_PORT,
94+
DISP_I2C_SDA, DISP_I2C_SCL,
95+
DISP_I2C_SPEED_HZ);
96+
97+
disp_driver_init();
98+
touch_driver_init();
99+
100+
return;
101+
#endif
102+
103+
/* Display controller initialization */
104+
#if defined CONFIG_LV_TFT_DISPLAY_PROTOCOL_SPI
105+
ESP_LOGI(TAG, "Initializing SPI master for display");
106+
107+
lvgl_spi_driver_init(TFT_SPI_HOST,
108+
DISP_SPI_MISO, DISP_SPI_MOSI, DISP_SPI_CLK,
109+
SPI_BUS_MAX_TRANSFER_SZ, 1,
110+
DISP_SPI_IO2, DISP_SPI_IO3);
111+
112+
disp_spi_add_device(TFT_SPI_HOST);
113+
114+
disp_driver_init();
115+
#elif defined (CONFIG_LV_TFT_DISPLAY_PROTOCOL_I2C)
116+
ESP_LOGI(TAG, "Initializing I2C master for display");
117+
/* Init the i2c master on the display driver code */
118+
lvgl_i2c_driver_init(DISP_I2C_PORT,
119+
DISP_I2C_SDA, DISP_I2C_SCL,
120+
DISP_I2C_SPEED_HZ);
121+
122+
disp_driver_init();
123+
#else
124+
#error "No protocol defined for display controller"
125+
#endif
126+
127+
/* Touch controller initialization */
128+
#if CONFIG_LV_TOUCH_CONTROLLER != TOUCH_CONTROLLER_NONE
129+
#if defined (CONFIG_LV_TOUCH_DRIVER_PROTOCOL_SPI)
130+
ESP_LOGI(TAG, "Initializing SPI master for touch");
131+
132+
lvgl_spi_driver_init(TOUCH_SPI_HOST,
133+
TP_SPI_MISO, TP_SPI_MOSI, TP_SPI_CLK,
134+
0 /* Defaults to 4094 */, 2,
135+
-1, -1);
136+
137+
tp_spi_add_device(TOUCH_SPI_HOST);
138+
139+
touch_driver_init();
140+
#elif defined (CONFIG_LV_TOUCH_DRIVER_PROTOCOL_I2C)
141+
ESP_LOGI(TAG, "Initializing I2C master for touch");
142+
143+
lvgl_i2c_driver_init(TOUCH_I2C_PORT,
144+
TOUCH_I2C_SDA, TOUCH_I2C_SCL,
145+
TOUCH_I2C_SPEED_HZ);
146+
147+
touch_driver_init();
148+
#elif defined (CONFIG_LV_TOUCH_DRIVER_ADC)
149+
touch_driver_init();
150+
#elif defined (CONFIG_LV_TOUCH_DRIVER_DISPLAY)
151+
touch_driver_init();
152+
#else
153+
#error "No protocol defined for touch controller"
154+
#endif
155+
#else
156+
#endif
157+
}
158+
159+
/* Config the i2c master
160+
*
161+
* This should init the i2c master to be used on display and touch controllers.
162+
* So we should be able to know if the display and touch controllers shares the
163+
* same i2c master.
164+
*/
165+
bool lvgl_i2c_driver_init(int port, int sda_pin, int scl_pin, int speed_hz)
166+
{
167+
esp_err_t err;
168+
169+
ESP_LOGI(TAG, "Initializing I2C master port %d...", port);
170+
ESP_LOGI(TAG, "SDA pin: %d, SCL pin: %d, Speed: %d (Hz)",
171+
sda_pin, scl_pin, speed_hz);
172+
173+
i2c_config_t conf = {
174+
.mode = I2C_MODE_MASTER,
175+
.sda_io_num = sda_pin,
176+
.sda_pullup_en = GPIO_PULLUP_ENABLE,
177+
.scl_io_num = scl_pin,
178+
.scl_pullup_en = GPIO_PULLUP_ENABLE,
179+
.master.clk_speed = speed_hz,
180+
};
181+
182+
ESP_LOGI(TAG, "Setting I2C master configuration...");
183+
err = i2c_param_config(port, &conf);
184+
assert(ESP_OK == err);
185+
186+
ESP_LOGI(TAG, "Installing I2C master driver...");
187+
err = i2c_driver_install(port,
188+
I2C_MODE_MASTER,
189+
0, 0 /*I2C_MASTER_RX_BUF_DISABLE, I2C_MASTER_TX_BUF_DISABLE */,
190+
0 /* intr_alloc_flags */);
191+
assert(ESP_OK == err);
192+
193+
return ESP_OK != err;
194+
}
195+
196+
/* Initialize spi bus master */
197+
bool lvgl_spi_driver_init(int host,
198+
int miso_pin, int mosi_pin, int sclk_pin,
199+
int max_transfer_sz,
200+
int dma_channel,
201+
int quadwp_pin, int quadhd_pin)
202+
{
203+
#if defined (CONFIG_IDF_TARGET_ESP32)
204+
assert((SPI_HOST <= host) && (VSPI_HOST >= host));
205+
const char *spi_names[] = {
206+
"SPI_HOST", "HSPI_HOST", "VSPI_HOST"
207+
};
208+
#elif defined (CONFIG_IDF_TARGET_ESP32S2)
209+
assert((SPI_HOST <= host) && (HSPI_HOST >= host));
210+
const char *spi_names[] = {
211+
"SPI_HOST", "", ""
212+
};
213+
#endif
214+
215+
ESP_LOGI(TAG, "Configuring SPI host %s (%d)", spi_names[host], host);
216+
ESP_LOGI(TAG, "MISO pin: %d, MOSI pin: %d, SCLK pin: %d, IO2/WP pin: %d, IO3/HD pin: %d",
217+
miso_pin, mosi_pin, sclk_pin, quadwp_pin, quadhd_pin);
218+
219+
ESP_LOGI(TAG, "Max transfer size: %d (bytes)", max_transfer_sz);
220+
221+
spi_bus_config_t buscfg = {
222+
.miso_io_num = miso_pin,
223+
.mosi_io_num = mosi_pin,
224+
.sclk_io_num = sclk_pin,
225+
.quadwp_io_num = quadwp_pin,
226+
.quadhd_io_num = quadhd_pin,
227+
.max_transfer_sz = max_transfer_sz
228+
};
229+
230+
ESP_LOGI(TAG, "Initializing SPI bus...");
231+
esp_err_t ret = spi_bus_initialize(host, &buscfg, dma_channel);
232+
assert(ret == ESP_OK);
233+
234+
return ESP_OK != ret;
235+
}
236+

lvgl_helpers.h

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
/**
2+
* @file lvgl_helpers.h
3+
*/
4+
5+
#ifndef LVGL_HELPERS_H
6+
#define LVGL_HELPERS_H
7+
8+
#ifdef __cplusplus
9+
extern "C" {
10+
#endif
11+
12+
/*********************
13+
* INCLUDES
14+
*********************/
15+
#include <stdbool.h>
16+
17+
#include "lvgl_spi_conf.h"
18+
#include "lvgl_tft/disp_driver.h"
19+
#include "lvgl_touch/touch_driver.h"
20+
21+
/*********************
22+
* DEFINES
23+
*********************/
24+
#if defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7789)
25+
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 40)
26+
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7735S
27+
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 40)
28+
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_HX8357
29+
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 40)
30+
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_SH1107
31+
#define DISP_BUF_SIZE (CONFIG_LV_DISPLAY_WIDTH*CONFIG_LV_DISPLAY_HEIGHT)
32+
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9481
33+
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 40)
34+
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9486
35+
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 40)
36+
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9488
37+
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 40)
38+
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9341
39+
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 64)
40+
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_SSD1306
41+
#define DISP_BUF_SIZE (CONFIG_LV_DISPLAY_WIDTH*CONFIG_LV_DISPLAY_HEIGHT)
42+
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_FT81X)
43+
#define DISP_BUF_LINES 40
44+
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * DISP_BUF_LINES)
45+
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_IL3820)
46+
#define DISP_BUF_SIZE (CONFIG_LV_DISPLAY_HEIGHT * IL3820_COLUMNS)
47+
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_RA8875
48+
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 40)
49+
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_GC9A01)
50+
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 40)
51+
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_JD79653A)
52+
#define DISP_BUF_SIZE ((CONFIG_LV_DISPLAY_HEIGHT * CONFIG_LV_DISPLAY_WIDTH) / 8) // 5KB
53+
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_UC8151D)
54+
#define DISP_BUF_SIZE ((CONFIG_LV_DISPLAY_HEIGHT * CONFIG_LV_DISPLAY_WIDTH) / 8) // 2888 bytes
55+
#else
56+
#error "No display controller selected"
57+
#endif
58+
59+
/**********************
60+
* TYPEDEFS
61+
**********************/
62+
63+
/**********************
64+
* GLOBAL PROTOTYPES
65+
**********************/
66+
67+
/* Initialize detected SPI and I2C bus and devices */
68+
void lvgl_driver_init(void);
69+
70+
/* Initialize SPI master */
71+
bool lvgl_spi_driver_init(int host, int miso_pin, int mosi_pin, int sclk_pin,
72+
int max_transfer_sz, int dma_channel, int quadwp_pin, int quadhd_pin);
73+
/* Initialize I2C master */
74+
bool lvgl_i2c_driver_init(int port, int sda_pin, int scl_pin, int speed);
75+
76+
/**********************
77+
* MACROS
78+
**********************/
79+
80+
81+
#ifdef __cplusplus
82+
} /* extern "C" */
83+
#endif
84+
85+
#endif /* LVGL_HELPERS_H */

0 commit comments

Comments
 (0)