mirror of
https://github.com/ddv2005/AirsoftTracker.git
synced 2025-08-17 17:16:10 +00:00
Initial commit
This commit is contained in:
241
lib/lvgl_esp32_drivers/lvgl_helpers.c
Normal file
241
lib/lvgl_esp32_drivers/lvgl_helpers.c
Normal file
@@ -0,0 +1,241 @@
|
||||
/**
|
||||
* @file lvgl_helpers.c
|
||||
*
|
||||
*/
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include "sdkconfig.h"
|
||||
#include "lv_conf.h"
|
||||
#include "lvgl_helpers.h"
|
||||
#include "esp_log.h"
|
||||
|
||||
#include "lvgl_tft/disp_spi.h"
|
||||
#include "lvgl_touch/tp_spi.h"
|
||||
|
||||
#include "lvgl_spi_conf.h"
|
||||
#include "lvgl_i2c_conf.h"
|
||||
|
||||
#include "driver/i2c.h"
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "src/lv_core/lv_refr.h"
|
||||
#else
|
||||
#include "lvgl/src/lv_core/lv_refr.h"
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
#define TAG "lvgl_helpers"
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* STATIC PROTOTYPES
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* STATIC VARIABLES
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL FUNCTIONS
|
||||
**********************/
|
||||
|
||||
/* Interface and driver initialization */
|
||||
void lvgl_driver_init(void)
|
||||
{
|
||||
ESP_LOGI(TAG, "Display hor size: %d, ver size: %d", LV_HOR_RES_MAX, LV_VER_RES_MAX);
|
||||
ESP_LOGI(TAG, "Display buffer size: %d", DISP_BUF_SIZE);
|
||||
|
||||
#if defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_FT81X)
|
||||
ESP_LOGI(TAG, "Initializing SPI master for FT81X");
|
||||
|
||||
lvgl_spi_driver_init(TFT_SPI_HOST,
|
||||
DISP_SPI_MISO, DISP_SPI_MOSI, DISP_SPI_CLK,
|
||||
SPI_BUS_MAX_TRANSFER_SZ, 1,
|
||||
DISP_SPI_IO2, DISP_SPI_IO3);
|
||||
|
||||
disp_spi_add_device(TFT_SPI_HOST);
|
||||
disp_driver_init();
|
||||
|
||||
#if defined (CONFIG_LV_TOUCH_CONTROLLER_FT81X)
|
||||
touch_driver_init();
|
||||
#endif
|
||||
|
||||
return;
|
||||
#endif
|
||||
|
||||
#if defined (SHARED_SPI_BUS)
|
||||
ESP_LOGI(TAG, "Initializing shared SPI master");
|
||||
|
||||
lvgl_spi_driver_init(TFT_SPI_HOST,
|
||||
TP_SPI_MISO, DISP_SPI_MOSI, DISP_SPI_CLK,
|
||||
SPI_BUS_MAX_TRANSFER_SZ, 1,
|
||||
-1, -1);
|
||||
|
||||
disp_spi_add_device(TFT_SPI_HOST);
|
||||
tp_spi_add_device(TOUCH_SPI_HOST);
|
||||
|
||||
disp_driver_init();
|
||||
touch_driver_init();
|
||||
|
||||
return;
|
||||
#endif
|
||||
|
||||
#if defined (SHARED_I2C_BUS)
|
||||
ESP_LOGI(TAG, "Initializing shared I2C master");
|
||||
|
||||
lvgl_i2c_driver_init(DISP_I2C_PORT,
|
||||
DISP_I2C_SDA, DISP_I2C_SCL,
|
||||
DISP_I2C_SPEED_HZ);
|
||||
|
||||
disp_driver_init();
|
||||
touch_driver_init();
|
||||
|
||||
return;
|
||||
#endif
|
||||
|
||||
/* Display controller initialization */
|
||||
#if defined CONFIG_LV_TFT_DISPLAY_PROTOCOL_SPI
|
||||
ESP_LOGI(TAG, "Initializing SPI master for display");
|
||||
|
||||
lvgl_spi_driver_init(TFT_SPI_HOST,
|
||||
DISP_SPI_MISO, DISP_SPI_MOSI, DISP_SPI_CLK,
|
||||
SPI_BUS_MAX_TRANSFER_SZ, 1,
|
||||
DISP_SPI_IO2, DISP_SPI_IO3);
|
||||
|
||||
disp_spi_add_device(TFT_SPI_HOST);
|
||||
|
||||
disp_driver_init();
|
||||
#elif defined (CONFIG_LV_TFT_DISPLAY_PROTOCOL_I2C)
|
||||
ESP_LOGI(TAG, "Initializing I2C master for display");
|
||||
/* Init the i2c master on the display driver code */
|
||||
lvgl_i2c_driver_init(DISP_I2C_PORT,
|
||||
DISP_I2C_SDA, DISP_I2C_SCL,
|
||||
DISP_I2C_SPEED_HZ);
|
||||
|
||||
disp_driver_init();
|
||||
#else
|
||||
#error "No protocol defined for display controller"
|
||||
#endif
|
||||
|
||||
/* Touch controller initialization */
|
||||
#if CONFIG_LV_TOUCH_CONTROLLER != TOUCH_CONTROLLER_NONE
|
||||
#if defined (CONFIG_LV_TOUCH_DRIVER_PROTOCOL_SPI)
|
||||
ESP_LOGI(TAG, "Initializing SPI master for touch");
|
||||
|
||||
lvgl_spi_driver_init(TOUCH_SPI_HOST,
|
||||
TP_SPI_MISO, TP_SPI_MOSI, TP_SPI_CLK,
|
||||
0 /* Defaults to 4094 */, 2,
|
||||
-1, -1);
|
||||
|
||||
tp_spi_add_device(TOUCH_SPI_HOST);
|
||||
|
||||
touch_driver_init();
|
||||
#elif defined (CONFIG_LV_TOUCH_DRIVER_PROTOCOL_I2C)
|
||||
ESP_LOGI(TAG, "Initializing I2C master for touch");
|
||||
|
||||
lvgl_i2c_driver_init(TOUCH_I2C_PORT,
|
||||
TOUCH_I2C_SDA, TOUCH_I2C_SCL,
|
||||
TOUCH_I2C_SPEED_HZ);
|
||||
|
||||
touch_driver_init();
|
||||
#elif defined (CONFIG_LV_TOUCH_DRIVER_ADC)
|
||||
touch_driver_init();
|
||||
#elif defined (CONFIG_LV_TOUCH_DRIVER_DISPLAY)
|
||||
touch_driver_init();
|
||||
#else
|
||||
#error "No protocol defined for touch controller"
|
||||
#endif
|
||||
#else
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Config the i2c master
|
||||
*
|
||||
* This should init the i2c master to be used on display and touch controllers.
|
||||
* So we should be able to know if the display and touch controllers shares the
|
||||
* same i2c master.
|
||||
*/
|
||||
bool lvgl_i2c_driver_init(int port, int sda_pin, int scl_pin, int speed_hz)
|
||||
{
|
||||
esp_err_t err;
|
||||
|
||||
ESP_LOGI(TAG, "Initializing I2C master port %d...", port);
|
||||
ESP_LOGI(TAG, "SDA pin: %d, SCL pin: %d, Speed: %d (Hz)",
|
||||
sda_pin, scl_pin, speed_hz);
|
||||
|
||||
i2c_config_t conf = {
|
||||
.mode = I2C_MODE_MASTER,
|
||||
.sda_io_num = sda_pin,
|
||||
.sda_pullup_en = GPIO_PULLUP_ENABLE,
|
||||
.scl_io_num = scl_pin,
|
||||
.scl_pullup_en = GPIO_PULLUP_ENABLE,
|
||||
.master.clk_speed = speed_hz,
|
||||
};
|
||||
|
||||
ESP_LOGI(TAG, "Setting I2C master configuration...");
|
||||
err = i2c_param_config(port, &conf);
|
||||
assert(ESP_OK == err);
|
||||
|
||||
ESP_LOGI(TAG, "Installing I2C master driver...");
|
||||
err = i2c_driver_install(port,
|
||||
I2C_MODE_MASTER,
|
||||
0, 0 /*I2C_MASTER_RX_BUF_DISABLE, I2C_MASTER_TX_BUF_DISABLE */,
|
||||
0 /* intr_alloc_flags */);
|
||||
assert(ESP_OK == err);
|
||||
|
||||
return ESP_OK != err;
|
||||
}
|
||||
|
||||
/* Initialize spi bus master */
|
||||
bool lvgl_spi_driver_init(int host,
|
||||
int miso_pin, int mosi_pin, int sclk_pin,
|
||||
int max_transfer_sz,
|
||||
int dma_channel,
|
||||
int quadwp_pin, int quadhd_pin)
|
||||
{
|
||||
#if defined (CONFIG_IDF_TARGET_ESP32)
|
||||
assert((SPI_HOST <= host) && (VSPI_HOST >= host));
|
||||
const char *spi_names[] = {
|
||||
"SPI_HOST", "HSPI_HOST", "VSPI_HOST"
|
||||
};
|
||||
#elif defined (CONFIG_IDF_TARGET_ESP32S2)
|
||||
assert((SPI_HOST <= host) && (HSPI_HOST >= host));
|
||||
const char *spi_names[] = {
|
||||
"SPI_HOST", "", ""
|
||||
};
|
||||
#endif
|
||||
|
||||
ESP_LOGI(TAG, "Configuring SPI host %s (%d)", spi_names[host], host);
|
||||
ESP_LOGI(TAG, "MISO pin: %d, MOSI pin: %d, SCLK pin: %d, IO2/WP pin: %d, IO3/HD pin: %d",
|
||||
miso_pin, mosi_pin, sclk_pin, quadwp_pin, quadhd_pin);
|
||||
|
||||
ESP_LOGI(TAG, "Max transfer size: %d (bytes)", max_transfer_sz);
|
||||
|
||||
spi_bus_config_t buscfg = {
|
||||
.miso_io_num = miso_pin,
|
||||
.mosi_io_num = mosi_pin,
|
||||
.sclk_io_num = sclk_pin,
|
||||
.quadwp_io_num = quadwp_pin,
|
||||
.quadhd_io_num = quadhd_pin,
|
||||
.max_transfer_sz = max_transfer_sz
|
||||
};
|
||||
|
||||
ESP_LOGI(TAG, "Initializing SPI bus...");
|
||||
esp_err_t ret = spi_bus_initialize(host, &buscfg, dma_channel);
|
||||
assert(ret == ESP_OK);
|
||||
|
||||
return ESP_OK != ret;
|
||||
}
|
||||
|
85
lib/lvgl_esp32_drivers/lvgl_helpers.h
Normal file
85
lib/lvgl_esp32_drivers/lvgl_helpers.h
Normal file
@@ -0,0 +1,85 @@
|
||||
/**
|
||||
* @file lvgl_helpers.h
|
||||
*/
|
||||
|
||||
#ifndef LVGL_HELPERS_H
|
||||
#define LVGL_HELPERS_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "lvgl_spi_conf.h"
|
||||
#include "lvgl_tft/disp_driver.h"
|
||||
#include "lvgl_touch/touch_driver.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
#if defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7789)
|
||||
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 40)
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7735S
|
||||
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 40)
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_HX8357
|
||||
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 40)
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_SH1107
|
||||
#define DISP_BUF_SIZE (CONFIG_LV_DISPLAY_WIDTH*CONFIG_LV_DISPLAY_HEIGHT)
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9481
|
||||
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 40)
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9486
|
||||
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 40)
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9488
|
||||
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 40)
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9341
|
||||
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 64)
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_SSD1306
|
||||
#define DISP_BUF_SIZE (CONFIG_LV_DISPLAY_WIDTH*CONFIG_LV_DISPLAY_HEIGHT)
|
||||
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_FT81X)
|
||||
#define DISP_BUF_LINES 40
|
||||
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * DISP_BUF_LINES)
|
||||
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_IL3820)
|
||||
#define DISP_BUF_SIZE (CONFIG_LV_DISPLAY_HEIGHT * IL3820_COLUMNS)
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_RA8875
|
||||
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 40)
|
||||
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_GC9A01)
|
||||
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 40)
|
||||
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_JD79653A)
|
||||
#define DISP_BUF_SIZE ((CONFIG_LV_DISPLAY_HEIGHT * CONFIG_LV_DISPLAY_WIDTH) / 8) // 5KB
|
||||
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_UC8151D)
|
||||
#define DISP_BUF_SIZE ((CONFIG_LV_DISPLAY_HEIGHT * CONFIG_LV_DISPLAY_WIDTH) / 8) // 2888 bytes
|
||||
#else
|
||||
#error "No display controller selected"
|
||||
#endif
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
/* Initialize detected SPI and I2C bus and devices */
|
||||
void lvgl_driver_init(void);
|
||||
|
||||
/* Initialize SPI master */
|
||||
bool lvgl_spi_driver_init(int host, int miso_pin, int mosi_pin, int sclk_pin,
|
||||
int max_transfer_sz, int dma_channel, int quadwp_pin, int quadhd_pin);
|
||||
/* Initialize I2C master */
|
||||
bool lvgl_i2c_driver_init(int port, int sda_pin, int scl_pin, int speed);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* LVGL_HELPERS_H */
|
116
lib/lvgl_esp32_drivers/lvgl_i2c_conf.h
Normal file
116
lib/lvgl_esp32_drivers/lvgl_i2c_conf.h
Normal file
@@ -0,0 +1,116 @@
|
||||
/**
|
||||
* @file lvgl_i2c_config.h
|
||||
*/
|
||||
|
||||
#ifndef LVGL_I2C_CONF_H
|
||||
#define LVGL_I2C_CONF_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
/* TODO: Define the I2C bus clock based on the selected display or touch
|
||||
* controllers. */
|
||||
|
||||
/* Do both display and touch controllers uses I2C? */
|
||||
#if defined (CONFIG_LV_TOUCH_DRIVER_PROTOCOL_I2C) && \
|
||||
defined (CONFIG_LV_TFT_DISPLAY_PROTOCOL_I2C)
|
||||
|
||||
#if defined (CONFIG_LV_DISPLAY_I2C_PORT_0) && \
|
||||
defined (CONFIG_LV_TOUCH_I2C_PORT_0)
|
||||
#define SHARED_I2C_PORT
|
||||
#define DISP_I2C_PORT I2C_NUM_0
|
||||
#endif
|
||||
|
||||
#if defined (CONFIG_LV_DISPLAY_I2C_PORT_1) && \
|
||||
defined (CONFIG_LV_TOUCH_I2C_PORT_1)
|
||||
#define SHARED_I2C_PORT
|
||||
#define DISP_I2C_PORT I2C_NUM_1
|
||||
#endif
|
||||
|
||||
#if !defined (SHARED_I2C_PORT)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined (SHARED_I2C_PORT)
|
||||
/* If the port is shared the display and touch controllers must use the same
|
||||
* SCL and SDA pins, otherwise let the user know with an error. */
|
||||
#if (CONFIG_LV_DISP_PIN_SDA != CONFIG_LV_TOUCH_I2C_SDA) || \
|
||||
(CONFIG_LV_DISP_PIN_SCL != CONFIG_LV_TOUCH_I2C_SCL)
|
||||
#error "To share I2C port you need to choose the same SDA and SCL pins on both display and touch configurations"
|
||||
#endif
|
||||
|
||||
#define DISP_I2C_SDA CONFIG_LV_DISP_PIN_SDA
|
||||
#define DISP_I2C_SCL CONFIG_LV_DISP_PIN_SCL
|
||||
#define DISP_I2C_ORIENTATION TFT_ORIENTATION_LANDSCAPE
|
||||
|
||||
/* Setting the I2C speed to the slowest one */
|
||||
#if DISP_I2C_SPEED_HZ < TOUCH_I2C_SPEED_HZ
|
||||
#define DISP_I2C_SPEED_HZ 400000 /* DISP_I2C_SPEED_HZ */
|
||||
#else
|
||||
#define DISP_I2C_SPEED_HZ 400000 /* DISP_I2C_SPEED_HZ */
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
/* lets check if the touch controller uses I2C... */
|
||||
#if defined (CONFIG_LV_TOUCH_DRIVER_PROTOCOL_I2C)
|
||||
#if defined (CONFIG_LV_TOUCH_I2C_PORT_0)
|
||||
#define TOUCH_I2C_PORT I2C_NUM_0
|
||||
#else
|
||||
#define TOUCH_I2C_PORT I2C_NUM_1
|
||||
#endif
|
||||
#define TOUCH_I2C_SDA CONFIG_LV_TOUCH_I2C_SDA
|
||||
#define TOUCH_I2C_SCL CONFIG_LV_TOUCH_I2C_SCL
|
||||
#define TOUCH_I2C_SPEED_HZ 400000
|
||||
#endif
|
||||
|
||||
/* lets check if the display controller uses I2C... */
|
||||
#if defined (CONFIG_LV_TFT_DISPLAY_PROTOCOL_I2C)
|
||||
#if defined (CONFIG_LV_DISPLAY_I2C_PORT_0)
|
||||
#define DISP_I2C_PORT I2C_NUM_0
|
||||
#else
|
||||
#define DISP_I2C_PORT I2C_NUM_1
|
||||
#endif
|
||||
|
||||
#define DISP_I2C_SDA CONFIG_LV_DISP_PIN_SDA
|
||||
#define DISP_I2C_SCL CONFIG_LV_DISP_PIN_SCL
|
||||
#define DISP_I2C_ORIENTATION TFT_ORIENTATION_LANDSCAPE
|
||||
#define DISP_I2C_SPEED_HZ 400000
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /*LVGL_I2C_CONF_H*/
|
198
lib/lvgl_esp32_drivers/lvgl_spi_conf.h
Normal file
198
lib/lvgl_esp32_drivers/lvgl_spi_conf.h
Normal file
@@ -0,0 +1,198 @@
|
||||
/**
|
||||
* @file lvgl_spi_conf.h
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef LVGL_SPI_CONF_H
|
||||
#define LVGL_SPI_CONF_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
// DISPLAY PINS
|
||||
#define DISP_SPI_MOSI CONFIG_LV_DISP_SPI_MOSI
|
||||
#if defined (CONFIG_LV_DISPLAY_USE_SPI_MISO)
|
||||
#define DISP_SPI_MISO CONFIG_LV_DISP_SPI_MISO
|
||||
#define DISP_SPI_INPUT_DELAY_NS CONFIG_LV_DISP_SPI_INPUT_DELAY_NS
|
||||
#else
|
||||
#define DISP_SPI_MISO (-1)
|
||||
#define DISP_SPI_INPUT_DELAY_NS (0)
|
||||
#endif
|
||||
#if defined(CONFIG_LV_DISP_SPI_IO2)
|
||||
#define DISP_SPI_IO2 CONFIG_LV_DISP_SPI_IO2
|
||||
#else
|
||||
#define DISP_SPI_IO2 (-1)
|
||||
#endif
|
||||
#if defined(CONFIG_LV_DISP_SPI_IO3)
|
||||
#define DISP_SPI_IO3 CONFIG_LV_DISP_SPI_IO3
|
||||
#else
|
||||
#define DISP_SPI_IO3 (-1)
|
||||
#endif
|
||||
#define DISP_SPI_CLK CONFIG_LV_DISP_SPI_CLK
|
||||
#if defined (CONFIG_LV_DISPLAY_USE_SPI_CS)
|
||||
#define DISP_SPI_CS CONFIG_LV_DISP_SPI_CS
|
||||
#else
|
||||
#define DISP_SPI_CS (-1)
|
||||
#endif
|
||||
|
||||
/* Define TOUCHPAD PINS when selecting a touch controller */
|
||||
#if !defined (CONFIG_LV_TOUCH_CONTROLLER_NONE)
|
||||
|
||||
/* Handle FT81X special case */
|
||||
#if defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_FT81X) && \
|
||||
defined (CONFIG_LV_TOUCH_CONTROLLER_FT81X)
|
||||
|
||||
#define TP_SPI_MOSI CONFIG_LV_DISP_SPI_MOSI
|
||||
#define TP_SPI_MISO CONFIG_LV_DISP_SPI_MISO
|
||||
#define TP_SPI_CLK CONFIG_LV_DISP_SPI_CLK
|
||||
#define TP_SPI_CS CONFIG_LV_DISP_SPI_CS
|
||||
#else
|
||||
#define TP_SPI_MOSI CONFIG_LV_TOUCH_SPI_MOSI
|
||||
#define TP_SPI_MISO CONFIG_LV_TOUCH_SPI_MISO
|
||||
#define TP_SPI_CLK CONFIG_LV_TOUCH_SPI_CLK
|
||||
#define TP_SPI_CS CONFIG_LV_TOUCH_SPI_CS
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define ENABLE_TOUCH_INPUT CONFIG_LV_ENABLE_TOUCH
|
||||
|
||||
#if defined (CONFIG_LV_TFT_DISPLAY_SPI_HSPI)
|
||||
#define TFT_SPI_HOST HSPI_HOST
|
||||
#elif defined (CONFIG_LV_TFT_DISPLAY_SPI_VSPI)
|
||||
#define TFT_SPI_HOST VSPI_HOST
|
||||
#elif defined (CONFIG_LV_TFT_DISPLAY_SPI_FSPI)
|
||||
#define TFT_SPI_HOST FSPI_HOST
|
||||
#endif
|
||||
|
||||
#if defined (CONFIG_LV_TFT_DISPLAY_SPI_HALF_DUPLEX)
|
||||
#define DISP_SPI_HALF_DUPLEX
|
||||
#else
|
||||
#define DISP_SPI_FULL_DUPLEX
|
||||
#endif
|
||||
|
||||
#if defined (CONFIG_LV_TFT_DISPLAY_SPI_TRANS_MODE_DIO)
|
||||
#define DISP_SPI_TRANS_MODE_DIO
|
||||
#elif defined (CONFIG_LV_TFT_DISPLAY_SPI_TRANS_MODE_QIO)
|
||||
#define DISP_SPI_TRANS_MODE_QIO
|
||||
#else
|
||||
#define DISP_SPI_TRANS_MODE_SIO
|
||||
#endif
|
||||
|
||||
#if defined (CONFIG_LV_TOUCH_CONTROLLER_SPI_HSPI)
|
||||
#define TOUCH_SPI_HOST HSPI_HOST
|
||||
#elif defined (CONFIG_LV_TOUCH_CONTROLLER_SPI_VSPI)
|
||||
#define TOUCH_SPI_HOST VSPI_HOST
|
||||
#elif defined (CONFIG_LV_TOUCH_CONTROLLER_SPI_FSPI)
|
||||
#define TOUCH_SPI_HOST FSPI_HOST
|
||||
#endif
|
||||
|
||||
/* Handle the FT81X Special case */
|
||||
#if defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_FT81X)
|
||||
|
||||
#if defined (CONFIG_LV_TOUCH_CONTROLLER_FT81X)
|
||||
#define SHARED_SPI_BUS
|
||||
#else
|
||||
/* Empty */
|
||||
#endif
|
||||
|
||||
#else
|
||||
// Detect the use of a shared SPI Bus and verify the user specified the same SPI bus for both touch and tft
|
||||
#if defined (CONFIG_LV_TOUCH_DRIVER_PROTOCOL_SPI) && TP_SPI_MOSI == DISP_SPI_MOSI && TP_SPI_CLK == DISP_SPI_CLK
|
||||
#if TFT_SPI_HOST != TOUCH_SPI_HOST
|
||||
#error You must specify the same SPI host (HSPI, VSPI or FSPI) for both display and touch driver
|
||||
#endif
|
||||
|
||||
#define SHARED_SPI_BUS
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
#if defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9481) || \
|
||||
defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9488)
|
||||
|
||||
#define SPI_BUS_MAX_TRANSFER_SZ (DISP_BUF_SIZE * 3)
|
||||
|
||||
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9341) || \
|
||||
defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7789) || \
|
||||
defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7735S) || \
|
||||
defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_HX8357) || \
|
||||
defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_SH1107) || \
|
||||
defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_FT81X) || \
|
||||
defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_IL3820) || \
|
||||
defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_JD79653A)
|
||||
|
||||
#define SPI_BUS_MAX_TRANSFER_SZ (DISP_BUF_SIZE * 2)
|
||||
|
||||
#else
|
||||
#define SPI_BUS_MAX_TRANSFER_SZ (DISP_BUF_SIZE * 2)
|
||||
#endif
|
||||
|
||||
#if defined (CONFIG_LV_TFT_USE_CUSTOM_SPI_CLK_DIVIDER)
|
||||
#define SPI_TFT_CLOCK_SPEED_HZ ((80 * 1000 * 1000) / CONFIG_LV_TFT_CUSTOM_SPI_CLK_DIVIDER)
|
||||
#else
|
||||
#if defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7789)
|
||||
#define SPI_TFT_CLOCK_SPEED_HZ (20*1000*1000)
|
||||
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7735S)
|
||||
#define SPI_TFT_CLOCK_SPEED_HZ (40*1000*1000)
|
||||
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_HX8357)
|
||||
#define SPI_TFT_CLOCK_SPEED_HZ (26*1000*1000)
|
||||
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_SH1107)
|
||||
#define SPI_TFT_CLOCK_SPEED_HZ (8*1000*1000)
|
||||
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9481)
|
||||
#define SPI_TFT_CLOCK_SPEED_HZ (16*1000*1000)
|
||||
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9486)
|
||||
#define SPI_TFT_CLOCK_SPEED_HZ (20*1000*1000)
|
||||
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9488)
|
||||
#define SPI_TFT_CLOCK_SPEED_HZ (40*1000*1000)
|
||||
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9341)
|
||||
#define SPI_TFT_CLOCK_SPEED_HZ (40*1000*1000)
|
||||
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_FT81X)
|
||||
#define SPI_TFT_CLOCK_SPEED_HZ (32*1000*1000)
|
||||
#else
|
||||
#define SPI_TFT_CLOCK_SPEED_HZ (40*1000*1000)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#if defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7789)
|
||||
#define SPI_TFT_SPI_MODE (2)
|
||||
#else
|
||||
#define SPI_TFT_SPI_MODE (0)
|
||||
#endif
|
||||
|
||||
/* Touch driver */
|
||||
#if (CONFIG_LV_TOUCH_CONTROLLER == TOUCH_CONTROLLER_STMPE610)
|
||||
#define SPI_TOUCH_CLOCK_SPEED_HZ (1*1000*1000)
|
||||
#define SPI_TOUCH_SPI_MODE (1)
|
||||
#else
|
||||
#define SPI_TOUCH_CLOCK_SPEED_HZ (2*1000*1000)
|
||||
#define SPI_TOUCH_SPI_MODE (0)
|
||||
#endif
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /*LVGL_SPI_CONF_H*/
|
53
lib/lvgl_esp32_drivers/lvgl_tft/CMakeLists.txt
Normal file
53
lib/lvgl_esp32_drivers/lvgl_tft/CMakeLists.txt
Normal file
@@ -0,0 +1,53 @@
|
||||
if(ESP_PLATFORM)
|
||||
|
||||
set(SOURCES "disp_driver.c")
|
||||
|
||||
# Include only the source file of the selected
|
||||
# display controller.
|
||||
if(CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9341)
|
||||
list(APPEND SOURCES "ili9341.c")
|
||||
elseif(CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9481)
|
||||
list(APPEND SOURCES "ili9481.c")
|
||||
elseif(CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9486)
|
||||
list(APPEND SOURCES "ili9486.c")
|
||||
elseif(CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9488)
|
||||
list(APPEND SOURCES "ili9488.c")
|
||||
elseif(CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7789)
|
||||
list(APPEND SOURCES "st7789.c")
|
||||
elseif(CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7735S)
|
||||
list(APPEND SOURCES "st7735s.c")
|
||||
elseif(CONFIG_LV_TFT_DISPLAY_CONTROLLER_HX8357)
|
||||
list(APPEND SOURCES "hx8357.c")
|
||||
elseif(CONFIG_LV_TFT_DISPLAY_CONTROLLER_SH1107)
|
||||
list(APPEND SOURCES "sh1107.c")
|
||||
elseif(CONFIG_LV_TFT_DISPLAY_CONTROLLER_SSD1306)
|
||||
list(APPEND SOURCES "ssd1306.c")
|
||||
elseif(CONFIG_LV_TFT_DISPLAY_CONTROLLER_FT81X)
|
||||
list(APPEND SOURCES "EVE_commands.c")
|
||||
list(APPEND SOURCES "FT81x.c")
|
||||
elseif(CONFIG_LV_TFT_DISPLAY_CONTROLLER_IL3820)
|
||||
list(APPEND SOURCES "il3820.c")
|
||||
elseif(CONFIG_LV_TFT_DISPLAY_CONTROLLER_JD79653A)
|
||||
list(APPEND SOURCES "jd79653a.c")
|
||||
elseif(CONFIG_LV_TFT_DISPLAY_CONTROLLER_UC8151D)
|
||||
list(APPEND SOURCES "uc8151d.c")
|
||||
elseif(CONFIG_LV_TFT_DISPLAY_CONTROLLER_RA8875)
|
||||
list(APPEND SOURCES "ra8875.c")
|
||||
elseif(CONFIG_LV_TFT_DISPLAY_CONTROLLER_GC9A01)
|
||||
list(APPEND SOURCES "GC9A01.c")
|
||||
else()
|
||||
message("DISPLAY CONTROLLER NOT DEFINED")
|
||||
endif()
|
||||
|
||||
if(CONFIG_LV_TFT_DISPLAY_PROTOCOL_SPI)
|
||||
list(APPEND SOURCES "disp_spi.c")
|
||||
endif()
|
||||
|
||||
# Print the included source files
|
||||
message("SOURCES contents: " "${SOURCES}")
|
||||
|
||||
idf_component_register(SRCS ${SOURCES}
|
||||
INCLUDE_DIRS .
|
||||
REQUIRES lvgl)
|
||||
|
||||
endif()
|
842
lib/lvgl_esp32_drivers/lvgl_tft/EVE.h
Normal file
842
lib/lvgl_esp32_drivers/lvgl_tft/EVE.h
Normal file
@@ -0,0 +1,842 @@
|
||||
/*
|
||||
@file EVE.h
|
||||
@brief Contains FT80x/FT81x/BT81x API definitions
|
||||
@version 4.1 LvGL edition
|
||||
@date 2020-04-15
|
||||
@author Rudolph Riedel, David Jade
|
||||
|
||||
@section LICENSE
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2016-2020 Rudolph Riedel and David Jade
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
@section History
|
||||
|
||||
4.1 LvGL edition
|
||||
|
||||
- This version is a heavily modified version of the MIT licensed FT81x code from https://github.com/RudolphRiedel/FT800-FT813
|
||||
This version is based on a fork by David Jade that added native SPI DMA support and stripped out non-ESP32 code.
|
||||
It has also been trimmed down to suit LvGL's needs. Extra features can be enabled by defining FT81X_FULL
|
||||
*/
|
||||
|
||||
#if defined (ESP_PLATFORM)
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
|
||||
#include "EVE_config.h"
|
||||
|
||||
#ifndef EVE_H_
|
||||
#define EVE_H_
|
||||
|
||||
|
||||
#define DL_CLEAR 0x26000000UL /* requires OR'd arguments */
|
||||
#define DL_CLEAR_RGB 0x02000000UL /* requires OR'd arguments */
|
||||
#define DL_COLOR_RGB 0x04000000UL /* requires OR'd arguments */
|
||||
#define DL_POINT_SIZE 0x0D000000UL /* requires OR'd arguments */
|
||||
#define DL_END 0x21000000UL
|
||||
#define DL_BEGIN 0x1F000000UL /* requires OR'd arguments */
|
||||
#define DL_DISPLAY 0x00000000UL
|
||||
|
||||
#define CLR_COL 0x4
|
||||
#define CLR_STN 0x2
|
||||
#define CLR_TAG 0x1
|
||||
|
||||
/* SPI SIO/DIO/QIO tranfer widths */
|
||||
#define SPI_WIDTH_SIO 0x0
|
||||
#define SPI_WIDTH_DIO 0x1
|
||||
#define SPI_WIDTH_QIO 0x2
|
||||
|
||||
|
||||
/* Host commands */
|
||||
#define EVE_ACTIVE 0x00 /* place FT8xx in active state */
|
||||
#define EVE_STANDBY 0x41 /* place FT8xx in Standby (clk running) */
|
||||
#define EVE_SLEEP 0x42 /* place FT8xx in Sleep (clk off) */
|
||||
#define EVE_PWRDOWN 0x50 /* place FT8xx in Power Down (core off) */
|
||||
#define EVE_CLKEXT 0x44 /* select external clock source */
|
||||
#define EVE_CLKINT 0x48 /* select internal clock source */
|
||||
#define EVE_CORERST 0x68 /* reset core - all registers default and processors reset */
|
||||
#define EVE_CLK48M 0x62 /* select 48MHz PLL output */
|
||||
#define EVE_CLK36M 0x61 /* select 36MHz PLL output */
|
||||
|
||||
|
||||
/* defines used for graphics commands */
|
||||
#define EVE_NEVER 0UL
|
||||
#define EVE_LESS 1UL
|
||||
#define EVE_LEQUAL 2UL
|
||||
#define EVE_GREATER 3UL
|
||||
#define EVE_GEQUAL 4UL
|
||||
#define EVE_EQUAL 5UL
|
||||
#define EVE_NOTEQUAL 6UL
|
||||
#define EVE_ALWAYS 7UL
|
||||
|
||||
|
||||
/* Bitmap formats */
|
||||
#define EVE_ARGB1555 0UL
|
||||
#define EVE_L1 1UL
|
||||
#define EVE_L4 2UL
|
||||
#define EVE_L8 3UL
|
||||
#define EVE_RGB332 4UL
|
||||
#define EVE_ARGB2 5UL
|
||||
#define EVE_ARGB4 6UL
|
||||
#define EVE_RGB565 7UL
|
||||
#define EVE_PALETTED 8UL
|
||||
#define EVE_TEXT8X8 9UL
|
||||
#define EVE_TEXTVGA 10UL
|
||||
#define EVE_BARGRAPH 11UL
|
||||
|
||||
|
||||
/* Bitmap filter types */
|
||||
#define EVE_NEAREST 0UL
|
||||
#define EVE_BILINEAR 1UL
|
||||
|
||||
|
||||
/* Bitmap wrap types */
|
||||
#define EVE_BORDER 0UL
|
||||
#define EVE_REPEAT 1UL
|
||||
|
||||
|
||||
/* Stencil defines */
|
||||
#define EVE_KEEP 1UL
|
||||
#define EVE_REPLACE 2UL
|
||||
#define EVE_INCR 3UL
|
||||
#define EVE_DECR 4UL
|
||||
#define EVE_INVERT 5UL
|
||||
|
||||
|
||||
/* Graphics display list swap defines */
|
||||
#define EVE_DLSWAP_DONE 0UL
|
||||
#define EVE_DLSWAP_LINE 1UL
|
||||
#define EVE_DLSWAP_FRAME 2UL
|
||||
|
||||
|
||||
/* Interrupt bits */
|
||||
#define EVE_INT_SWAP 0x01
|
||||
#define EVE_INT_TOUCH 0x02
|
||||
#define EVE_INT_TAG 0x04
|
||||
#define EVE_INT_SOUND 0x08
|
||||
#define EVE_INT_PLAYBACK 0x10
|
||||
#define EVE_INT_CMDEMPTY 0x20
|
||||
#define EVE_INT_CMDFLAG 0x40
|
||||
#define EVE_INT_CONVCOMPLETE 0x80
|
||||
|
||||
|
||||
/* Touch mode */
|
||||
#define EVE_TMODE_OFF 0
|
||||
#define EVE_TMODE_ONESHOT 1
|
||||
#define EVE_TMODE_FRAME 2
|
||||
#define EVE_TMODE_CONTINUOUS 3
|
||||
|
||||
|
||||
/* Alpha blending */
|
||||
#define EVE_ZERO 0UL
|
||||
#define EVE_ONE 1UL
|
||||
#define EVE_SRC_ALPHA 2UL
|
||||
#define EVE_DST_ALPHA 3UL
|
||||
#define EVE_ONE_MINUS_SRC_ALPHA 4UL
|
||||
#define EVE_ONE_MINUS_DST_ALPHA 5UL
|
||||
|
||||
|
||||
/* Graphics primitives */
|
||||
#define EVE_BITMAPS 1UL
|
||||
#define EVE_POINTS 2UL
|
||||
#define EVE_LINES 3UL
|
||||
#define EVE_LINE_STRIP 4UL
|
||||
#define EVE_EDGE_STRIP_R 5UL
|
||||
#define EVE_EDGE_STRIP_L 6UL
|
||||
#define EVE_EDGE_STRIP_A 7UL
|
||||
#define EVE_EDGE_STRIP_B 8UL
|
||||
#define EVE_RECTS 9UL
|
||||
|
||||
|
||||
/* Widget command */
|
||||
#define EVE_OPT_MONO 1
|
||||
#define EVE_OPT_NODL 2
|
||||
#define EVE_OPT_FLAT 256
|
||||
#define EVE_OPT_CENTERX 512
|
||||
#define EVE_OPT_CENTERY 1024
|
||||
#define EVE_OPT_CENTER (EVE_OPT_CENTERX | EVE_OPT_CENTERY)
|
||||
#define EVE_OPT_NOBACK 4096
|
||||
#define EVE_OPT_NOTICKS 8192
|
||||
#define EVE_OPT_NOHM 16384
|
||||
#define EVE_OPT_NOPOINTER 16384
|
||||
#define EVE_OPT_NOSECS 32768
|
||||
#define EVE_OPT_NOHANDS 49152
|
||||
#define EVE_OPT_RIGHTX 2048
|
||||
#define EVE_OPT_SIGNED 256
|
||||
|
||||
|
||||
/* Defines related to inbuilt font */
|
||||
#define EVE_NUMCHAR_PERFONT (128L) /* number of font characters per bitmap handle */
|
||||
#define EVE_FONT_TABLE_SIZE (148L) /* size of the font table - utilized for loopup by the graphics engine */
|
||||
#define EVE_FONT_TABLE_POINTER (0xFFFFCUL) /* pointer to the inbuilt font tables starting from bitmap handle 16 */
|
||||
|
||||
|
||||
/* Audio sample type defines */
|
||||
#define EVE_LINEAR_SAMPLES 0UL /* 8bit signed samples */
|
||||
#define EVE_ULAW_SAMPLES 1UL /* 8bit ulaw samples */
|
||||
#define EVE_ADPCM_SAMPLES 2UL /* 4bit ima adpcm samples */
|
||||
|
||||
|
||||
/* Synthesized sound */
|
||||
#define EVE_SILENCE 0x00
|
||||
#define EVE_SQUAREWAVE 0x01
|
||||
#define EVE_SINEWAVE 0x02
|
||||
#define EVE_SAWTOOTH 0x03
|
||||
#define EVE_TRIANGLE 0x04
|
||||
#define EVE_BEEPING 0x05
|
||||
#define EVE_ALARM 0x06
|
||||
#define EVE_WARBLE 0x07
|
||||
#define EVE_CAROUSEL 0x08
|
||||
#define EVE_PIPS(n) (0x0F + (n))
|
||||
#define EVE_HARP 0x40
|
||||
#define EVE_XYLOPHONE 0x41
|
||||
#define EVE_TUBA 0x42
|
||||
#define EVE_GLOCKENSPIEL 0x43
|
||||
#define EVE_ORGAN 0x44
|
||||
#define EVE_TRUMPET 0x45
|
||||
#define EVE_PIANO 0x46
|
||||
#define EVE_CHIMES 0x47
|
||||
#define EVE_MUSICBOX 0x48
|
||||
#define EVE_BELL 0x49
|
||||
#define EVE_CLICK 0x50
|
||||
#define EVE_SWITCH 0x51
|
||||
#define EVE_COWBELL 0x52
|
||||
#define EVE_NOTCH 0x53
|
||||
#define EVE_HIHAT 0x54
|
||||
#define EVE_KICKDRUM 0x55
|
||||
#define EVE_POP 0x56
|
||||
#define EVE_CLACK 0x57
|
||||
#define EVE_CHACK 0x58
|
||||
#define EVE_MUTE 0x60
|
||||
#define EVE_UNMUTE 0x61
|
||||
|
||||
|
||||
/* Synthesized sound frequencies, midi note */
|
||||
#define EVE_MIDI_A0 21
|
||||
#define EVE_MIDI_A_0 22
|
||||
#define EVE_MIDI_B0 23
|
||||
#define EVE_MIDI_C1 24
|
||||
#define EVE_MIDI_C_1 25
|
||||
#define EVE_MIDI_D1 26
|
||||
#define EVE_MIDI_D_1 27
|
||||
#define EVE_MIDI_E1 28
|
||||
#define EVE_MIDI_F1 29
|
||||
#define EVE_MIDI_F_1 30
|
||||
#define EVE_MIDI_G1 31
|
||||
#define EVE_MIDI_G_1 32
|
||||
#define EVE_MIDI_A1 33
|
||||
#define EVE_MIDI_A_1 34
|
||||
#define EVE_MIDI_B1 35
|
||||
#define EVE_MIDI_C2 36
|
||||
#define EVE_MIDI_C_2 37
|
||||
#define EVE_MIDI_D2 38
|
||||
#define EVE_MIDI_D_2 39
|
||||
#define EVE_MIDI_E2 40
|
||||
#define EVE_MIDI_F2 41
|
||||
#define EVE_MIDI_F_2 42
|
||||
#define EVE_MIDI_G2 43
|
||||
#define EVE_MIDI_G_2 44
|
||||
#define EVE_MIDI_A2 45
|
||||
#define EVE_MIDI_A_2 46
|
||||
#define EVE_MIDI_B2 47
|
||||
#define EVE_MIDI_C3 48
|
||||
#define EVE_MIDI_C_3 49
|
||||
#define EVE_MIDI_D3 50
|
||||
#define EVE_MIDI_D_3 51
|
||||
#define EVE_MIDI_E3 52
|
||||
#define EVE_MIDI_F3 53
|
||||
#define EVE_MIDI_F_3 54
|
||||
#define EVE_MIDI_G3 55
|
||||
#define EVE_MIDI_G_3 56
|
||||
#define EVE_MIDI_A3 57
|
||||
#define EVE_MIDI_A_3 58
|
||||
#define EVE_MIDI_B3 59
|
||||
#define EVE_MIDI_C4 60
|
||||
#define EVE_MIDI_C_4 61
|
||||
#define EVE_MIDI_D4 62
|
||||
#define EVE_MIDI_D_4 63
|
||||
#define EVE_MIDI_E4 64
|
||||
#define EVE_MIDI_F4 65
|
||||
#define EVE_MIDI_F_4 66
|
||||
#define EVE_MIDI_G4 67
|
||||
#define EVE_MIDI_G_4 68
|
||||
#define EVE_MIDI_A4 69
|
||||
#define EVE_MIDI_A_4 70
|
||||
#define EVE_MIDI_B4 71
|
||||
#define EVE_MIDI_C5 72
|
||||
#define EVE_MIDI_C_5 73
|
||||
#define EVE_MIDI_D5 74
|
||||
#define EVE_MIDI_D_5 75
|
||||
#define EVE_MIDI_E5 76
|
||||
#define EVE_MIDI_F5 77
|
||||
#define EVE_MIDI_F_5 78
|
||||
#define EVE_MIDI_G5 79
|
||||
#define EVE_MIDI_G_5 80
|
||||
#define EVE_MIDI_A5 81
|
||||
#define EVE_MIDI_A_5 82
|
||||
#define EVE_MIDI_B5 83
|
||||
#define EVE_MIDI_C6 84
|
||||
#define EVE_MIDI_C_6 85
|
||||
#define EVE_MIDI_D6 86
|
||||
#define EVE_MIDI_D_6 87
|
||||
#define EVE_MIDI_E6 88
|
||||
#define EVE_MIDI_F6 89
|
||||
#define EVE_MIDI_F_6 90
|
||||
#define EVE_MIDI_G6 91
|
||||
#define EVE_MIDI_G_6 92
|
||||
#define EVE_MIDI_A6 93
|
||||
#define EVE_MIDI_A_6 94
|
||||
#define EVE_MIDI_B6 95
|
||||
#define EVE_MIDI_C7 96
|
||||
#define EVE_MIDI_C_7 97
|
||||
#define EVE_MIDI_D7 98
|
||||
#define EVE_MIDI_D_7 99
|
||||
#define EVE_MIDI_E7 100
|
||||
#define EVE_MIDI_F7 101
|
||||
#define EVE_MIDI_F_7 102
|
||||
#define EVE_MIDI_G7 103
|
||||
#define EVE_MIDI_G_7 104
|
||||
#define EVE_MIDI_A7 105
|
||||
#define EVE_MIDI_A_7 106
|
||||
#define EVE_MIDI_B7 107
|
||||
#define EVE_MIDI_C8 108
|
||||
|
||||
|
||||
/* GPIO bits */
|
||||
#define EVE_GPIO0 0
|
||||
#define EVE_GPIO1 1 /* default gpio pin for audio shutdown, 1 - enable, 0 - disable */
|
||||
#define EVE_GPIO7 7 /* default gpio pin for display enable, 1 - enable, 0 - disable */
|
||||
|
||||
|
||||
/* Display rotation */
|
||||
#define EVE_DISPLAY_0 0 /* 0 degrees rotation */
|
||||
#define EVE_DISPLAY_180 1 /* 180 degrees rotation */
|
||||
|
||||
|
||||
/* commands common to EVE/EVE2/EVE3 */
|
||||
#define CMD_APPEND 0xFFFFFF1E
|
||||
#define CMD_BGCOLOR 0xFFFFFF09
|
||||
#define CMD_BUTTON 0xFFFFFF0D
|
||||
#define CMD_CALIBRATE 0xFFFFFF15
|
||||
#define CMD_CLOCK 0xFFFFFF14
|
||||
#define CMD_COLDSTART 0xFFFFFF32
|
||||
#define CMD_DIAL 0xFFFFFF2D
|
||||
#define CMD_DLSTART 0xFFFFFF00
|
||||
#define CMD_FGCOLOR 0xFFFFFF0A
|
||||
#define CMD_GAUGE 0xFFFFFF13
|
||||
#define CMD_GETMATRIX 0xFFFFFF33
|
||||
#define CMD_GETPROPS 0xFFFFFF25
|
||||
#define CMD_GETPTR 0xFFFFFF23
|
||||
#define CMD_GRADCOLOR 0xFFFFFF34
|
||||
#define CMD_GRADIENT 0xFFFFFF0B
|
||||
#define CMD_INFLATE 0xFFFFFF22
|
||||
#define CMD_INTERRUPT 0xFFFFFF02
|
||||
#define CMD_KEYS 0xFFFFFF0E
|
||||
#define CMD_LOADIDENTITY 0xFFFFFF26
|
||||
#define CMD_LOADIMAGE 0xFFFFFF24
|
||||
#define CMD_LOGO 0xFFFFFF31
|
||||
#define CMD_MEMCPY 0xFFFFFF1D
|
||||
#define CMD_MEMCRC 0xFFFFFF18
|
||||
#define CMD_MEMSET 0xFFFFFF1B
|
||||
#define CMD_MEMWRITE 0xFFFFFF1A
|
||||
#define CMD_MEMZERO 0xFFFFFF1C
|
||||
#define CMD_NUMBER 0xFFFFFF2E
|
||||
#define CMD_PROGRESS 0xFFFFFF0F
|
||||
#define CMD_REGREAD 0xFFFFFF19
|
||||
#define CMD_ROTATE 0xFFFFFF29
|
||||
#define CMD_SCALE 0xFFFFFF28
|
||||
#define CMD_SCREENSAVER 0xFFFFFF2F
|
||||
#define CMD_SCROLLBAR 0xFFFFFF11
|
||||
#define CMD_SETFONT 0xFFFFFF2B
|
||||
#define CMD_SETMATRIX 0xFFFFFF2A
|
||||
#define CMD_SKETCH 0xFFFFFF30
|
||||
#define CMD_SLIDER 0xFFFFFF10
|
||||
#define CMD_SNAPSHOT 0xFFFFFF1F
|
||||
#define CMD_SPINNER 0xFFFFFF16
|
||||
#define CMD_STOP 0xFFFFFF17
|
||||
#define CMD_SWAP 0xFFFFFF01
|
||||
#define CMD_TEXT 0xFFFFFF0C
|
||||
#define CMD_TOGGLE 0xFFFFFF12
|
||||
#define CMD_TRACK 0xFFFFFF2C
|
||||
#define CMD_TRANSLATE 0xFFFFFF27
|
||||
|
||||
|
||||
/* the following are undocumented commands that therefore should not be used */
|
||||
#if 0
|
||||
#define CMD_CRC 0xFFFFFF03
|
||||
#define CMD_HAMMERAUX 0xFFFFFF04
|
||||
#define CMD_MARCH 0xFFFFFF05
|
||||
#define CMD_IDCT 0xFFFFFF06
|
||||
#define CMD_EXECUTE 0xFFFFFF07
|
||||
#define CMD_GETPOINT 0xFFFFFF08
|
||||
#define CMD_TOUCH_TRANSFORM 0xFFFFFF20
|
||||
#endif
|
||||
|
||||
|
||||
/* FT8xx graphics engine specific macros useful for static display list generation */
|
||||
#define ALPHA_FUNC(func,ref) ((9UL<<24)|(((func)&7UL)<<8)|(((ref)&255UL)<<0))
|
||||
#define BEGIN(prim) ((31UL<<24)|(((prim)&15UL)<<0))
|
||||
#define BITMAP_HANDLE(handle) ((5UL<<24)|(((handle)&31UL)<<0))
|
||||
#define BITMAP_LAYOUT(format,linestride,height) ((7UL<<24)|(((format)&31UL)<<19)|(((linestride)&1023UL)<<9)|(((height)&511UL)<<0))
|
||||
#define BITMAP_SIZE(filter,wrapx,wrapy,width,height) ((8UL<<24)|(((filter)&1UL)<<20)|(((wrapx)&1UL)<<19)|(((wrapy)&1UL)<<18)|(((width)&511UL)<<9)|(((height)&511UL)<<0))
|
||||
#define BITMAP_TRANSFORM_A(a) ((21UL<<24)|(((a)&131071UL)<<0))
|
||||
#define BITMAP_TRANSFORM_B(b) ((22UL<<24)|(((b)&131071UL)<<0))
|
||||
#define BITMAP_TRANSFORM_C(c) ((23UL<<24)|(((c)&16777215UL)<<0))
|
||||
#define BITMAP_TRANSFORM_D(d) ((24UL<<24)|(((d)&131071UL)<<0))
|
||||
#define BITMAP_TRANSFORM_E(e) ((25UL<<24)|(((e)&131071UL)<<0))
|
||||
#define BITMAP_TRANSFORM_F(f) ((26UL<<24)|(((f)&16777215UL)<<0))
|
||||
#define BLEND_FUNC(src,dst) ((11UL<<24)|(((src)&7UL)<<3)|(((dst)&7UL)<<0))
|
||||
#define CALL(dest) ((29UL<<24)|(((dest)&65535UL)<<0))
|
||||
#define CELL(cell) ((6UL<<24)|(((cell)&127UL)<<0))
|
||||
#define CLEAR(c,s,t) ((38UL<<24)|(((c)&1UL)<<2)|(((s)&1UL)<<1)|(((t)&1UL)<<0))
|
||||
#define CLEAR_COLOR_A(alpha) ((15UL<<24)|(((alpha)&255UL)<<0))
|
||||
#define CLEAR_COLOR_RGB(red,green,blue) ((2UL<<24)|(((red)&255UL)<<16)|(((green)&255UL)<<8)|(((blue)&255UL)<<0))
|
||||
#define CLEAR_STENCIL(s) ((17UL<<24)|(((s)&255UL)<<0))
|
||||
#define CLEAR_TAG(s) ((18UL<<24)|(((s)&255UL)<<0))
|
||||
#define COLOR_A(alpha) ((16UL<<24)|(((alpha)&255UL)<<0))
|
||||
#define COLOR_MASK(r,g,b,a) ((32UL<<24)|(((r)&1UL)<<3)|(((g)&1UL)<<2)|(((b)&1UL)<<1)|(((a)&1UL)<<0))
|
||||
#define COLOR_RGB(red,green,blue) ((4UL<<24)|(((red)&255UL)<<16)|(((green)&255UL)<<8)|(((blue)&255UL)<<0))
|
||||
/* #define DISPLAY() ((0UL<<24)) */
|
||||
#define END() ((33UL<<24))
|
||||
#define JUMP(dest) ((30UL<<24)|(((dest)&65535UL)<<0))
|
||||
#define LINE_WIDTH(width) ((14UL<<24)|(((width)&4095UL)<<0))
|
||||
#define MACRO(m) ((37UL<<24)|(((m)&1UL)<<0))
|
||||
#define POINT_SIZE(size) ((13UL<<24)|(((size)&8191UL)<<0))
|
||||
#define RESTORE_CONTEXT() ((35UL<<24))
|
||||
#define RETURN() ((36UL<<24))
|
||||
#define SAVE_CONTEXT() ((34UL<<24))
|
||||
#define STENCIL_FUNC(func,ref,mask) ((10UL<<24)|(((func)&7UL)<<16)|(((ref)&255UL)<<8)|(((mask)&255UL)<<0))
|
||||
#define STENCIL_MASK(mask) ((19UL<<24)|(((mask)&255UL)<<0))
|
||||
#define STENCIL_OP(sfail,spass) ((12UL<<24)|(((sfail)&7UL)<<3)|(((spass)&7UL)<<0))
|
||||
#define TAG(s) ((3UL<<24)|(((s)&255UL)<<0))
|
||||
#define TAG_MASK(mask) ((20UL<<24)|(((mask)&1UL)<<0))
|
||||
#define VERTEX2F(x,y) ((1UL<<30)|(((x)&32767UL)<<15)|(((y)&32767UL)<<0))
|
||||
#define VERTEX2II(x,y,handle,cell) ((2UL<<30)|(((x)&511UL)<<21)|(((y)&511UL)<<12)|(((handle)&31UL)<<7)|(((cell)&127UL)<<0))
|
||||
|
||||
|
||||
/* ----------------- BT81x exclusive definitions -----------------*/
|
||||
#if defined (BT81X_ENABLE)
|
||||
|
||||
#define EVE_GLFORMAT 31UL /* used with BITMAP_LAYOUT to indicate bitmap-format is specified by BITMAP_EXT_FORMAT */
|
||||
|
||||
#define DL_BITMAP_EXT_FORMAT 0x2E000000 /* requires OR'd arguments */
|
||||
|
||||
/* extended Bitmap formats */
|
||||
#define EVE_COMPRESSED_RGBA_ASTC_4x4_KHR 37808UL
|
||||
#define EVE_COMPRESSED_RGBA_ASTC_5x4_KHR 37809UL
|
||||
#define EVE_COMPRESSED_RGBA_ASTC_5x5_KHR 37810UL
|
||||
#define EVE_COMPRESSED_RGBA_ASTC_6x5_KHR 37811UL
|
||||
#define EVE_COMPRESSED_RGBA_ASTC_6x6_KHR 37812UL
|
||||
#define EVE_COMPRESSED_RGBA_ASTC_8x5_KHR 37813UL
|
||||
#define EVE_COMPRESSED_RGBA_ASTC_8x6_KHR 37814UL
|
||||
#define EVE_COMPRESSED_RGBA_ASTC_8x8_KHR 37815UL
|
||||
#define EVE_COMPRESSED_RGBA_ASTC_10x5_KHR 37816UL
|
||||
#define EVE_COMPRESSED_RGBA_ASTC_10x6_KHR 37817UL
|
||||
#define EVE_COMPRESSED_RGBA_ASTC_10x8_KHR 37818UL
|
||||
#define EVE_COMPRESSED_RGBA_ASTC_10x10_KHR 37819UL
|
||||
#define EVE_COMPRESSED_RGBA_ASTC_12x10_KHR 37820UL
|
||||
#define EVE_COMPRESSED_RGBA_ASTC_12x12_KHR 37821UL
|
||||
|
||||
|
||||
#define EVE_RAM_ERR_REPORT 0x309800UL /* max 128 bytes null terminated string */
|
||||
#define EVE_RAM_FLASH 0x800000UL
|
||||
#define EVE_RAM_FLASH_POSTBLOB 0x801000UL
|
||||
|
||||
#define EVE_OPT_FLASH 64UL
|
||||
#define EVE_OPT_FORMAT 4096UL
|
||||
#define EVE_OPT_FILL 8192UL
|
||||
|
||||
|
||||
/* additional commands for BT81x */
|
||||
#define CMD_BITMAP_TRANSFORM 0xFFFFFF21
|
||||
#define CMD_SYNC 0xFFFFFF42 /* does not need a dedicated function, just use EVE_cmd_dl(CMD_SYNC) */
|
||||
#define CMD_FLASHERASE 0xFFFFFF44 /* does not need a dedicated function, just use EVE_cmd_dl(CMD_FLASHERASE) */
|
||||
#define CMD_FLASHWRITE 0xFFFFFF45
|
||||
#define CMD_FLASHREAD 0xFFFFFF46
|
||||
#define CMD_FLASHUPDATE 0xFFFFFF47
|
||||
#define CMD_FLASHDETACH 0xFFFFFF48 /* does not need a dedicated function, just use EVE_cmd_dl(CMD_FLASHDETACH) */
|
||||
#define CMD_FLASHATTACH 0xFFFFFF49 /* does not need a dedicated function, just use EVE_cmd_dl(CMD_FLASHATTACH) */
|
||||
#define CMD_FLASHFAST 0xFFFFFF4A
|
||||
#define CMD_FLASHSPIDESEL 0xFFFFFF4B /* does not need a dedicated function, just use EVE_cmd_dl(CMD_FLASHSPIDESEL) */
|
||||
#define CMD_FLASHSPITX 0xFFFFFF4C
|
||||
#define CMD_FLASHSPIRX 0xFFFFFF4D
|
||||
#define CMD_FLASHSOURCE 0xFFFFFF4E
|
||||
#define CMD_CLEARCACHE 0xFFFFFF4F /* does not need a dedicated function, just use EVE_cmd_dl(CMD_CLEARCACHE) */
|
||||
#define CMD_INFLATE2 0xFFFFFF50
|
||||
#define CMD_ROTATEAROUND 0xFFFFFF51
|
||||
#define CMD_RESETFONTS 0xFFFFFF52 /* does not need a dedicated function, just use EVE_cmd_dl(CMD_RESETFONTS) */
|
||||
#define CMD_ANIMSTART 0xFFFFFF53
|
||||
#define CMD_ANIMSTOP 0xFFFFFF54
|
||||
#define CMD_ANIMXY 0xFFFFFF55
|
||||
#define CMD_ANIMDRAW 0xFFFFFF56
|
||||
#define CMD_GRADIENTA 0xFFFFFF57
|
||||
#define CMD_FILLWIDTH 0xFFFFFF58
|
||||
#define CMD_APPENDF 0xFFFFFF59
|
||||
#define CMD_ANIMFRAME 0xFFFFFF5A
|
||||
#define CMD_VIDEOSTARTF 0xFFFFFF5F /* does not need a dedicated function, just use EVE_cmd_dl(CMD_VIDEOSTARTF) */
|
||||
|
||||
#if 0
|
||||
/* some undocumented commands for BT81x */
|
||||
#define CMD_NOP 0xFFFFFF5B
|
||||
#define CMD_SHA1 0xFFFFFF5C
|
||||
#define CMD_HMAC 0xFFFFFF5D
|
||||
#define CMD_LAST_ 0xFFFFFF5E
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/* additional registers for BT81x */
|
||||
#define REG_ADAPTIVE_FRAMERATE 0x30257cUL
|
||||
#define REG_PLAYBACK_PAUSE 0x3025ecUL
|
||||
#define REG_FLASH_STATUS 0x3025f0UL
|
||||
#define REG_FLASH_SIZE 0x309024UL
|
||||
#define REG_PLAY_CONTROL 0x30914eUL
|
||||
#define REG_COPRO_PATCH_DTR 0x309162UL
|
||||
|
||||
|
||||
/* BT81x graphics engine specific macros */
|
||||
#define BITMAP_EXT_FORMAT(format) ((46UL<<24)|(((format)&65535UL)<<0))
|
||||
#define BITMAP_SWIZZLE(r,g,b,a) ((47UL<<24)|(((r)&7UL)<<9)|(((g)&7UL)<<6)|(((b)&7UL)<<3)|(((a)&7UL)<<0))
|
||||
#define BITMAP_SOURCE2(flash_or_ram, addr) ((1UL<<24)|((flash_or_ram) << 23)|(((addr)&8388607UL)<<0))
|
||||
#define INT_FRR() ((48UL<<24))
|
||||
|
||||
#undef BITMAP_TRANSFORM_A
|
||||
#undef BITMAP_TRANSFORM_B
|
||||
#undef BITMAP_TRANSFORM_D
|
||||
#undef BITMAP_TRANSFORM_E
|
||||
|
||||
#define BITMAP_TRANSFORM_A_EXT(p,v) ((21UL<<24)|(((p)&1UL)<<17)|(((v)&131071UL)<<0))
|
||||
#define BITMAP_TRANSFORM_B_EXT(p,v) ((22UL<<24)|(((p)&1UL)<<17)|(((v)&131071UL)<<0))
|
||||
#define BITMAP_TRANSFORM_D_EXT(p,v) ((24UL<<24)|(((p)&1UL)<<17)|(((v)&131071UL)<<0))
|
||||
#define BITMAP_TRANSFORM_E_EXT(p,v) ((25UL<<24)|(((p)&1UL)<<17)|(((v)&131071UL)<<0))
|
||||
|
||||
#define BITMAP_TRANSFORM_A(a) BITMAP_TRANSFORM_A_EXT(0,a)
|
||||
#define BITMAP_TRANSFORM_B(b) BITMAP_TRANSFORM_B_EXT(0,b)
|
||||
#define BITMAP_TRANSFORM_D(d) BITMAP_TRANSFORM_D_EXT(0,d)
|
||||
#define BITMAP_TRANSFORM_E(e) BITMAP_TRANSFORM_E_EXT(0,e)
|
||||
|
||||
#endif
|
||||
|
||||
/* ----------------- FT81x / BT81x exclusive definitions -----------------*/
|
||||
#if defined (FT81X_ENABLE)
|
||||
|
||||
|
||||
/* Host commands */
|
||||
#define EVE_CLKSEL 0x61 /* configure system clock */
|
||||
#define EVE_RST_PULSE 0x68 /* reset core - all registers default and processors reset */
|
||||
#define EVE_PINDRIVE 0x70 /* setup drive strength for various pins */
|
||||
#define EVE_PIN_PD_STATE 0x71 /* setup how pins behave during power down */
|
||||
|
||||
|
||||
/* Memory definitions */
|
||||
#define EVE_RAM_G 0x000000UL
|
||||
#define EVE_ROM_CHIPID 0x0C0000UL
|
||||
#define EVE_ROM_FONT 0x1E0000UL
|
||||
#define EVE_ROM_FONT_ADDR 0x2FFFFCUL
|
||||
#define EVE_RAM_DL 0x300000UL
|
||||
#define EVE_RAM_REG 0x302000UL
|
||||
#define EVE_RAM_CMD 0x308000UL
|
||||
|
||||
|
||||
/* Memory buffer sizes */
|
||||
#define EVE_RAM_G_SIZE 1024*1024L
|
||||
#define EVE_CMDFIFO_SIZE 4*1024L
|
||||
#define EVE_RAM_DL_SIZE 8*1024L
|
||||
|
||||
|
||||
/* various additional defines for FT81x */
|
||||
#define EVE_ADC_DIFFERENTIAL 1UL
|
||||
#define EVE_ADC_SINGLE_ENDED 0UL
|
||||
|
||||
#define EVE_INT_G8 18UL
|
||||
#define EVE_INT_L8C 12UL
|
||||
#define EVE_INT_VGA 13UL
|
||||
|
||||
#define EVE_OPT_MEDIAFIFO 16UL
|
||||
#define EVE_OPT_FULLSCREEN 8UL
|
||||
#define EVE_OPT_NOTEAR 4UL
|
||||
#define EVE_OPT_SOUND 32UL
|
||||
|
||||
#define EVE_PALETTED565 14UL
|
||||
#define EVE_PALETTED4444 15UL
|
||||
#define EVE_PALETTED8 16UL
|
||||
#define EVE_L2 17UL
|
||||
|
||||
|
||||
/* additional commands for FT81x */
|
||||
#define CMD_MEDIAFIFO 0xFFFFFF39
|
||||
#define CMD_PLAYVIDEO 0xFFFFFF3A
|
||||
#define CMD_ROMFONT 0xFFFFFF3F
|
||||
#define CMD_SETBASE 0xFFFFFF38
|
||||
#define CMD_SETBITMAP 0xFFFFFF43
|
||||
#define CMD_SETFONT2 0xFFFFFF3B
|
||||
#define CMD_SETROTATE 0xFFFFFF36
|
||||
#define CMD_SETSCRATCH 0xFFFFFF3C
|
||||
#define CMD_SNAPSHOT2 0xFFFFFF37
|
||||
#define CMD_VIDEOFRAME 0xFFFFFF41
|
||||
#define CMD_VIDEOSTART 0xFFFFFF40
|
||||
|
||||
|
||||
/* the following are undocumented commands that therefore should not be used */
|
||||
#if 0
|
||||
#define CMD_CSKETCH 0xFFFFFF35
|
||||
#define CMD_INT_RAMSHARED 0xFFFFFF3D
|
||||
#define CMD_INT_SWLOADIMAGE 0xFFFFFF3E
|
||||
#endif
|
||||
|
||||
|
||||
/* Register definitions */
|
||||
#define REG_ANA_COMP 0x302184UL /* only listed in datasheet */
|
||||
#define REG_BIST_EN 0x302174UL /* only listed in datasheet */
|
||||
#define REG_CLOCK 0x302008UL
|
||||
#define REG_CMDB_SPACE 0x302574UL
|
||||
#define REG_CMDB_WRITE 0x302578UL
|
||||
#define REG_CMD_DL 0x302100UL
|
||||
#define REG_CMD_READ 0x3020f8UL
|
||||
#define REG_CMD_WRITE 0x3020fcUL
|
||||
#define REG_CPURESET 0x302020UL
|
||||
#define REG_CSPREAD 0x302068UL
|
||||
#define REG_CTOUCH_EXTENDED 0x302108UL
|
||||
#define REG_CTOUCH_TOUCH0_XY 0x302124UL /* only listed in datasheet */
|
||||
#define REG_CTOUCH_TOUCH4_X 0x30216cUL
|
||||
#define REG_CTOUCH_TOUCH4_Y 0x302120UL
|
||||
#define REG_CTOUCH_TOUCH1_XY 0x30211cUL
|
||||
#define REG_CTOUCH_TOUCH2_XY 0x30218cUL
|
||||
#define REG_CTOUCH_TOUCH3_XY 0x302190UL
|
||||
#define REG_TOUCH_CONFIG 0x302168UL
|
||||
#define REG_DATESTAMP 0x302564UL /* only listed in datasheet */
|
||||
#define REG_DITHER 0x302060UL
|
||||
#define REG_DLSWAP 0x302054UL
|
||||
#define REG_FRAMES 0x302004UL
|
||||
#define REG_FREQUENCY 0x30200cUL
|
||||
#define REG_GPIO 0x302094UL
|
||||
#define REG_GPIOX 0x30209cUL
|
||||
#define REG_GPIOX_DIR 0x302098UL
|
||||
#define REG_GPIO_DIR 0x302090UL
|
||||
#define REG_HCYCLE 0x30202cUL
|
||||
#define REG_HOFFSET 0x302030UL
|
||||
#define REG_HSIZE 0x302034UL
|
||||
#define REG_HSYNC0 0x302038UL
|
||||
#define REG_HSYNC1 0x30203cUL
|
||||
#define REG_ID 0x302000UL
|
||||
#define REG_INT_EN 0x3020acUL
|
||||
#define REG_INT_FLAGS 0x3020a8UL
|
||||
#define REG_INT_MASK 0x3020b0UL
|
||||
#define REG_MACRO_0 0x3020d8UL
|
||||
#define REG_MACRO_1 0x3020dcUL
|
||||
#define REG_MEDIAFIFO_READ 0x309014UL /* only listed in programmers guide */
|
||||
#define REG_MEDIAFIFO_WRITE 0x309018UL /* only listed in programmers guide */
|
||||
#define REG_OUTBITS 0x30205cUL
|
||||
#define REG_PCLK 0x302070UL
|
||||
#define REG_PCLK_POL 0x30206cUL
|
||||
#define REG_PLAY 0x30208cUL
|
||||
#define REG_PLAYBACK_FORMAT 0x3020c4UL
|
||||
#define REG_PLAYBACK_FREQ 0x3020c0UL
|
||||
#define REG_PLAYBACK_LENGTH 0x3020b8UL
|
||||
#define REG_PLAYBACK_LOOP 0x3020c8UL
|
||||
#define REG_PLAYBACK_PLAY 0x3020ccUL
|
||||
#define REG_PLAYBACK_READPTR 0x3020bcUL
|
||||
#define REG_PLAYBACK_START 0x3020b4UL
|
||||
#define REG_PWM_DUTY 0x3020d4UL
|
||||
#define REG_PWM_HZ 0x3020d0UL
|
||||
#define REG_RENDERMODE 0x302010UL /* only listed in datasheet */
|
||||
#define REG_ROTATE 0x302058UL
|
||||
#define REG_SNAPFORMAT 0x30201cUL /* only listed in datasheet */
|
||||
#define REG_SNAPSHOT 0x302018UL /* only listed in datasheet */
|
||||
#define REG_SNAPY 0x302014UL /* only listed in datasheet */
|
||||
#define REG_SOUND 0x302088UL
|
||||
#define REG_SPI_WIDTH 0x302188UL /* listed with false offset in programmers guide V1.1 */
|
||||
#define REG_SWIZZLE 0x302064UL
|
||||
#define REG_TAG 0x30207cUL
|
||||
#define REG_TAG_X 0x302074UL
|
||||
#define REG_TAG_Y 0x302078UL
|
||||
#define REG_TAP_CRC 0x302024UL /* only listed in datasheet */
|
||||
#define REG_TAP_MASK 0x302028UL /* only listed in datasheet */
|
||||
#define REG_TOUCH_ADC_MODE 0x302108UL
|
||||
#define REG_TOUCH_CHARGE 0x30210cUL
|
||||
#define REG_TOUCH_DIRECT_XY 0x30218cUL
|
||||
#define REG_TOUCH_DIRECT_Z1Z2 0x302190UL
|
||||
#define REG_TOUCH_MODE 0x302104UL
|
||||
#define REG_TOUCH_OVERSAMPLE 0x302114UL
|
||||
#define REG_TOUCH_RAW_XY 0x30211cUL
|
||||
#define REG_TOUCH_RZ 0x302120UL
|
||||
#define REG_TOUCH_RZTHRESH 0x302118UL
|
||||
#define REG_TOUCH_SCREEN_XY 0x302124UL
|
||||
#define REG_TOUCH_SETTLE 0x302110UL
|
||||
#define REG_TOUCH_TAG 0x30212cUL
|
||||
#define REG_TOUCH_TAG1 0x302134UL /* only listed in datasheet */
|
||||
#define REG_TOUCH_TAG1_XY 0x302130UL /* only listed in datasheet */
|
||||
#define REG_TOUCH_TAG2 0x30213cUL /* only listed in datasheet */
|
||||
#define REG_TOUCH_TAG2_XY 0x302138UL /* only listed in datasheet */
|
||||
#define REG_TOUCH_TAG3 0x302144UL /* only listed in datasheet */
|
||||
#define REG_TOUCH_TAG3_XY 0x302140UL /* only listed in datasheet */
|
||||
#define REG_TOUCH_TAG4 0x30214cUL /* only listed in datasheet */
|
||||
#define REG_TOUCH_TAG4_XY 0x302148UL /* only listed in datasheet */
|
||||
#define REG_TOUCH_TAG_XY 0x302128UL
|
||||
#define REG_TOUCH_TRANSFORM_A 0x302150UL
|
||||
#define REG_TOUCH_TRANSFORM_B 0x302154UL
|
||||
#define REG_TOUCH_TRANSFORM_C 0x302158UL
|
||||
#define REG_TOUCH_TRANSFORM_D 0x30215cUL
|
||||
#define REG_TOUCH_TRANSFORM_E 0x302160UL
|
||||
#define REG_TOUCH_TRANSFORM_F 0x302164UL
|
||||
#define REG_TRACKER 0x309000UL /* only listed in programmers guide */
|
||||
#define REG_TRACKER_1 0x309004UL /* only listed in programmers guide */
|
||||
#define REG_TRACKER_2 0x309008UL /* only listed in programmers guide */
|
||||
#define REG_TRACKER_3 0x30900cUL /* only listed in programmers guide */
|
||||
#define REG_TRACKER_4 0x309010UL /* only listed in programmers guide */
|
||||
#define REG_TRIM 0x302180UL
|
||||
#define REG_VCYCLE 0x302040UL
|
||||
#define REG_VOFFSET 0x302044UL
|
||||
#define REG_VOL_PB 0x302080UL
|
||||
#define REG_VOL_SOUND 0x302084UL
|
||||
#define REG_VSIZE 0x302048UL
|
||||
#define REG_VSYNC0 0x30204cUL
|
||||
#define REG_VSYNC1 0x302050UL
|
||||
|
||||
#if 0
|
||||
#define REG_BUSYBITS 0x3020e8UL /* only listed as "reserved" in datasheet */
|
||||
#define REG_CRC 0x302178UL /* only listed as "reserved" in datasheet */
|
||||
#define REG_SPI_EARLY_TX 0x30217cUL /* only listed as "reserved" in datasheet */
|
||||
#define REG_ROMSUB_SEL 0x3020f0UL /* only listed as "reserved" in datasheet */
|
||||
#define REG_TOUCH_FAULT 0x302170UL /* only listed as "reserved" in datasheet */
|
||||
#endif
|
||||
|
||||
|
||||
/* FT81x graphics engine specific macros useful for static display list generation */
|
||||
|
||||
/* beware, these are different to FTDIs implementation as these take the original values as parameters and not only the upper bits */
|
||||
#define BITMAP_LAYOUT_H(linestride,height) ((40UL<<24)|((((linestride&0xC00)>>10)&3UL)<<2)|((((height&0x600)>>9)&3UL)<<0))
|
||||
#define BITMAP_SIZE_H(width,height) ((41UL<<24)|((((width&0x600)>>9)&3UL)<<2)|((((height&0x600)>>9)&3UL)<<0))
|
||||
|
||||
#define BITMAP_SOURCE(addr) ((1UL<<24)|(((addr)&4194303UL)<<0))
|
||||
//#define NOP() ((45UL<<24))
|
||||
#define PALETTE_SOURCE(addr) ((42UL<<24)|(((addr)&4194303UL)<<0))
|
||||
#define SCISSOR_SIZE(width,height) ((28UL<<24)|(((width)&4095UL)<<12)|(((height)&4095UL)<<0))
|
||||
#define SCISSOR_XY(x,y) ((27UL<<24)|(((x)&2047UL)<<11)|(((y)&2047UL)<<0))
|
||||
#define VERTEX_FORMAT(frac) ((39UL<<24)|(((frac)&7UL)<<0))
|
||||
#define VERTEX_TRANSLATE_X(x) ((43UL<<24)|(((x)&131071UL)<<0))
|
||||
#define VERTEX_TRANSLATE_Y(y) ((44UL<<24)|(((y)&131071UL)<<0))
|
||||
|
||||
|
||||
|
||||
/* ----------------- FT80x exclusive definitions -----------------*/
|
||||
#else
|
||||
|
||||
/* Memory definitions */
|
||||
#define EVE_RAM_G 0x000000UL
|
||||
#define EVE_ROM_CHIPID 0x0C0000UL
|
||||
#define EVE_ROM_FONT 0x0BB23CUL
|
||||
#define EVE_ROM_FONT_ADDR 0x0FFFFCUL
|
||||
#define EVE_RAM_DL 0x100000UL
|
||||
#define EVE_RAM_PAL 0x102000UL
|
||||
#define EVE_RAM_CMD 0x108000UL
|
||||
#define EVE_RAM_SCREENSHOT 0x1C2000UL
|
||||
|
||||
|
||||
/* Memory buffer sizes */
|
||||
#define EVE_RAM_G_SIZE 256*1024L
|
||||
#define EVE_CMDFIFO_SIZE 4*1024L
|
||||
#define EVE_RAM_DL_SIZE 8*1024L
|
||||
#define EVE_RAM_PAL_SIZE 1*1024L
|
||||
|
||||
|
||||
/* Register definitions */
|
||||
#define REG_ID 0x102400UL
|
||||
#define REG_FRAMES 0x102404UL
|
||||
#define REG_CLOCK 0x102408UL
|
||||
#define REG_FREQUENCY 0x10240CUL
|
||||
#define REG_SCREENSHOT_EN 0x102410UL
|
||||
#define REG_SCREENSHOT_Y 0x102414UL
|
||||
#define REG_SCREENSHOT_START 0x102418UL
|
||||
#define REG_CPURESET 0x10241CUL
|
||||
#define REG_TAP_CRC 0x102420UL
|
||||
#define REG_TAP_MASK 0x102424UL
|
||||
#define REG_HCYCLE 0x102428UL
|
||||
#define REG_HOFFSET 0x10242CUL
|
||||
#define REG_HSIZE 0x102430UL
|
||||
#define REG_HSYNC0 0x102434UL
|
||||
#define REG_HSYNC1 0x102438UL
|
||||
#define REG_VCYCLE 0x10243CUL
|
||||
#define REG_VOFFSET 0x102440UL
|
||||
#define REG_VSIZE 0x102444UL
|
||||
#define REG_VSYNC0 0x102448UL
|
||||
#define REG_VSYNC1 0x10244CUL
|
||||
#define REG_DLSWAP 0x102450UL
|
||||
#define REG_ROTATE 0x102454UL
|
||||
#define REG_OUTBITS 0x102458UL
|
||||
#define REG_DITHER 0x10245CUL
|
||||
#define REG_SWIZZLE 0x102460UL
|
||||
#define REG_CSPREAD 0x102464UL
|
||||
#define REG_PCLK_POL 0x102468UL
|
||||
#define REG_PCLK 0x10246CUL
|
||||
#define REG_TAG_X 0x102470UL
|
||||
#define REG_TAG_Y 0x102474UL
|
||||
#define REG_TAG 0x102478UL
|
||||
#define REG_VOL_PB 0x10247CUL
|
||||
#define REG_VOL_SOUND 0x102480UL
|
||||
#define REG_SOUND 0x102484UL
|
||||
#define REG_PLAY 0x102488UL
|
||||
#define REG_GPIO_DIR 0x10248CUL
|
||||
#define REG_GPIO 0x102490UL
|
||||
#define REG_INT_FLAGS 0x102498UL
|
||||
#define REG_INT_EN 0x10249CUL
|
||||
#define REG_INT_MASK 0x1024A0UL
|
||||
#define REG_PLAYBACK_START 0x1024A4UL
|
||||
#define REG_PLAYBACK_LENGTH 0x1024A8UL
|
||||
#define REG_PLAYBACK_READPTR 0x1024ACUL
|
||||
#define REG_PLAYBACK_FREQ 0x1024B0UL
|
||||
#define REG_PLAYBACK_FORMAT 0x1024B4UL
|
||||
#define REG_PLAYBACK_LOOP 0x1024B8UL
|
||||
#define REG_PLAYBACK_PLAY 0x1024BCUL
|
||||
#define REG_PWM_HZ 0x1024C0UL
|
||||
#define REG_PWM_DUTY 0x1024C4UL
|
||||
#define REG_MACRO_0 0x1024C8UL
|
||||
#define REG_MACRO_1 0x1024CCUL
|
||||
#define REG_SCREENSHOT_BUSY 0x1024D8UL
|
||||
#define REG_CMD_READ 0x1024E4UL
|
||||
#define REG_CMD_WRITE 0x1024E8UL
|
||||
#define REG_CMD_DL 0x1024ECUL
|
||||
#define REG_TOUCH_MODE 0x1024F0UL
|
||||
#define REG_TOUCH_ADC_MODE 0x1024F4UL
|
||||
#define REG_TOUCH_CHARGE 0x1024F8UL
|
||||
#define REG_TOUCH_SETTLE 0x1024FCUL
|
||||
#define REG_TOUCH_OVERSAMPLE 0x102500UL
|
||||
#define REG_TOUCH_RZTHRESH 0x102504UL
|
||||
#define REG_TOUCH_RAW_XY 0x102508UL
|
||||
#define REG_TOUCH_RZ 0x10250CUL
|
||||
#define REG_TOUCH_SCREEN_XY 0x102510UL
|
||||
#define REG_TOUCH_TAG_XY 0x102514UL
|
||||
#define REG_TOUCH_TAG 0x102518UL
|
||||
#define REG_TOUCH_TRANSFORM_A 0x10251CUL
|
||||
#define REG_TOUCH_TRANSFORM_B 0x102520UL
|
||||
#define REG_TOUCH_TRANSFORM_C 0x102524UL
|
||||
#define REG_TOUCH_TRANSFORM_D 0x102528UL
|
||||
#define REG_TOUCH_TRANSFORM_E 0x10252CUL
|
||||
#define REG_TOUCH_TRANSFORM_F 0x102530UL
|
||||
#define REG_SCREENSHOT_READ 0x102554UL
|
||||
#define REG_TRIM 0x10256CUL
|
||||
#define REG_TOUCH_DIRECT_XY 0x102574UL
|
||||
#define REG_TOUCH_DIRECT_Z1Z2 0x102578UL
|
||||
#define REG_TRACKER 0x109000UL
|
||||
|
||||
/* FT80x graphics engine specific macros useful for static display list generation */
|
||||
#define BITMAP_SOURCE(addr) ((1UL<<24)|(((addr)&1048575UL)<<0))
|
||||
#define SCISSOR_SIZE(width,height) ((28UL<<24)|(((width)&1023UL)<<10)|(((height)&1023UL)<<0))
|
||||
#define SCISSOR_XY(x,y) ((27UL<<24)|(((x)&511UL)<<9)|(((y)&511UL)<<0))
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* EVE_H_ */
|
2314
lib/lvgl_esp32_drivers/lvgl_tft/EVE_commands.c
Normal file
2314
lib/lvgl_esp32_drivers/lvgl_tft/EVE_commands.c
Normal file
File diff suppressed because it is too large
Load Diff
204
lib/lvgl_esp32_drivers/lvgl_tft/EVE_commands.h
Normal file
204
lib/lvgl_esp32_drivers/lvgl_tft/EVE_commands.h
Normal file
@@ -0,0 +1,204 @@
|
||||
/*
|
||||
@file EVE_commands.h
|
||||
@brief contains FT8xx / BT8xx function prototypes
|
||||
@version 4.1 LvGL edition
|
||||
@date 2020-04-13
|
||||
@author Rudolph Riedel, David Jade
|
||||
|
||||
@section LICENSE
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2016-2020 Rudolph Riedel and David Jade
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
@section History
|
||||
|
||||
4.1 LvGL edition
|
||||
|
||||
- This version is a heavily modified version of the MIT licensed FT81x code from https://github.com/RudolphRiedel/FT800-FT813
|
||||
This version is based on a fork by David Jade that added native SPI DMA support and stripped out non-ESP32 code.
|
||||
It has also been trimmed down to suit LvGL's needs. Extra features can be enabled by defining FT81X_FULL
|
||||
*/
|
||||
|
||||
#include "EVE.h"
|
||||
|
||||
#ifndef EVE_COMMANDS_H_
|
||||
#define EVE_COMMANDS_H_
|
||||
|
||||
#define BLOCK_TRANSFER_SIZE 3840 // block transfer size when write data to CMD buffer
|
||||
|
||||
void DELAY_MS(uint16_t ms);
|
||||
void EVE_pdn_set(void);
|
||||
void EVE_pdn_clear(void);
|
||||
void spi_acquire();
|
||||
void spi_release();
|
||||
|
||||
void EVE_cmdWrite(uint8_t command, uint8_t parameter);
|
||||
|
||||
uint8_t EVE_memRead8(uint32_t ftAddress);
|
||||
uint16_t EVE_memRead16(uint32_t ftAddress);
|
||||
uint32_t EVE_memRead32(uint32_t ftAddress);
|
||||
|
||||
void EVE_memWrite8(uint32_t ftAddress, uint8_t ftData8);
|
||||
void EVE_memWrite16(uint32_t ftAddress, uint16_t ftData16);
|
||||
void EVE_memWrite32(uint32_t ftAddress, uint32_t ftData32);
|
||||
|
||||
void EVE_memWrite_buffer(uint32_t ftAddress, const uint8_t *data, uint32_t len, bool LvGL_Flush);
|
||||
|
||||
uint8_t EVE_busy(void);
|
||||
|
||||
void EVE_get_cmdoffset(void);
|
||||
|
||||
|
||||
/* commands to operate on memory: */
|
||||
void EVE_cmd_memzero(uint32_t ptr, uint32_t num);
|
||||
void EVE_cmd_memset(uint32_t ptr, uint8_t value, uint32_t num);
|
||||
void EVE_cmd_memwrite(uint32_t dest, uint32_t num, const uint8_t *data);
|
||||
void EVE_cmd_memcpy(uint32_t dest, uint32_t src, uint32_t num);
|
||||
|
||||
#if FT81X_FULL
|
||||
void block_transfer(const uint8_t *data, uint32_t len);
|
||||
/* commands for loading image data into FT8xx memory: */
|
||||
void EVE_cmd_inflate(uint32_t ptr, const uint8_t *data, uint16_t len);
|
||||
void EVE_cmd_loadimage(uint32_t ptr, uint32_t options, const uint8_t *data, uint16_t len);
|
||||
|
||||
#if defined (FT81X_ENABLE)
|
||||
void EVE_cmd_mediafifo(uint32_t ptr, uint32_t size);
|
||||
#endif
|
||||
#endif // FT81X_FULL
|
||||
|
||||
void EVE_cmd_start(void);
|
||||
void EVE_cmd_execute(void);
|
||||
|
||||
void EVE_start_cmd_burst(void);
|
||||
void EVE_end_cmd_burst(void);
|
||||
|
||||
void EVE_cmd_dl(uint32_t command);
|
||||
|
||||
|
||||
#if FT81X_FULL
|
||||
/* EVE3 commands */
|
||||
#if defined (BT81X_ENABLE)
|
||||
|
||||
void EVE_cmd_flashwrite(uint32_t ptr, uint32_t num, const uint8_t *data);
|
||||
void EVE_cmd_flashread(uint32_t dest, uint32_t src, uint32_t num);
|
||||
void EVE_cmd_flashupdate(uint32_t dest, uint32_t src, uint32_t num);
|
||||
void EVE_cmd_flasherase(void);
|
||||
void EVE_cmd_flashattach(void);
|
||||
void EVE_cmd_flashdetach(void);
|
||||
void EVE_cmd_flashspidesel(void);
|
||||
uint32_t EVE_cmd_flashfast(void);
|
||||
void EVE_cmd_flashspitx(uint32_t num, const uint8_t *data);
|
||||
void EVE_cmd_flashspirx(uint32_t dest, uint32_t num);
|
||||
void EVE_cmd_flashsource(uint32_t ptr);
|
||||
|
||||
void EVE_cmd_inflate2(uint32_t ptr, uint32_t options, const uint8_t *data, uint16_t len);
|
||||
void EVE_cmd_rotatearound(int32_t x0, int32_t y0, int32_t angle, int32_t scale);
|
||||
void EVE_cmd_animstart(int32_t ch, uint32_t aoptr, uint32_t loop);
|
||||
void EVE_cmd_animstop(int32_t ch);
|
||||
void EVE_cmd_animxy(int32_t ch, int16_t x0, int16_t y0);
|
||||
void EVE_cmd_animdraw(int32_t ch);
|
||||
void EVE_cmd_animframe(int16_t x0, int16_t y0, uint32_t aoptr, uint32_t frame);
|
||||
void EVE_cmd_gradienta(int16_t x0, int16_t y0, uint32_t argb0, int16_t x1, int16_t y1, uint32_t argb1);
|
||||
void EVE_cmd_fillwidth(uint32_t s);
|
||||
void EVE_cmd_appendf(uint32_t ptr, uint32_t num);
|
||||
|
||||
uint8_t EVE_init_flash(void);
|
||||
#endif
|
||||
|
||||
|
||||
/* commands to draw graphics objects: */
|
||||
|
||||
#if defined (BT81X_ENABLE)
|
||||
void EVE_cmd_text_var(int16_t x0, int16_t y0, int16_t font, uint16_t options, const char* text, uint8_t numargs, ...);
|
||||
void EVE_cmd_button_var(int16_t x0, int16_t y0, int16_t w0, int16_t h0, int16_t font, uint16_t options, const char* text, uint8_t num_args, ...);
|
||||
void EVE_cmd_toggle_var(int16_t x0, int16_t y0, int16_t w0, int16_t font, uint16_t options, uint16_t state, const char* text, uint8_t num_args, ...);
|
||||
#endif
|
||||
|
||||
void EVE_cmd_text(int16_t x0, int16_t y0, int16_t font, uint16_t options, const char* text);
|
||||
void EVE_cmd_button(int16_t x0, int16_t y0, int16_t w0, int16_t h0, int16_t font, uint16_t options, const char* text);
|
||||
void EVE_cmd_clock(int16_t x0, int16_t y0, int16_t r0, uint16_t options, uint16_t hours, uint16_t minutes, uint16_t seconds, uint16_t millisecs);
|
||||
void EVE_color_rgb(uint8_t red, uint8_t green, uint8_t blue);
|
||||
void EVE_cmd_bgcolor(uint32_t color);
|
||||
void EVE_cmd_fgcolor(uint32_t color);
|
||||
void EVE_cmd_gradcolor(uint32_t color);
|
||||
void EVE_cmd_gauge(int16_t x0, int16_t y0, int16_t r0, uint16_t options, uint16_t major, uint16_t minor, uint16_t val, uint16_t range);
|
||||
void EVE_cmd_gradient(int16_t x0, int16_t y0, uint32_t rgb0, int16_t x1, int16_t y1, uint32_t rgb1);
|
||||
void EVE_cmd_keys(int16_t x0, int16_t y0, int16_t w0, int16_t h0, int16_t font, uint16_t options, const char* text);
|
||||
void EVE_cmd_progress(int16_t x0, int16_t y0, int16_t w0, int16_t h0, uint16_t options, uint16_t val, uint16_t range);
|
||||
void EVE_cmd_scrollbar(int16_t x0, int16_t y0, int16_t w0, int16_t h0, uint16_t options, uint16_t val, uint16_t size, uint16_t range);
|
||||
void EVE_cmd_slider(int16_t x1, int16_t y1, int16_t w1, int16_t h1, uint16_t options, uint16_t val, uint16_t range);
|
||||
void EVE_cmd_dial(int16_t x0, int16_t y0, int16_t r0, uint16_t options, uint16_t val);
|
||||
void EVE_cmd_toggle(int16_t x0, int16_t y0, int16_t w0, int16_t font, uint16_t options, uint16_t state, const char* text);
|
||||
void EVE_cmd_number(int16_t x0, int16_t y0, int16_t font, uint16_t options, int32_t number);
|
||||
#endif // FT81X_FULL
|
||||
|
||||
#if defined (FT81X_ENABLE)
|
||||
#if FT81X_FULL
|
||||
void EVE_cmd_setbase(uint32_t base);
|
||||
#endif
|
||||
void EVE_cmd_setbitmap(uint32_t addr, uint16_t fmt, uint16_t width, uint16_t height);
|
||||
#endif
|
||||
|
||||
|
||||
#if FT81X_FULL
|
||||
void EVE_cmd_append(uint32_t ptr, uint32_t num);
|
||||
|
||||
|
||||
/* commands for setting the bitmap transform matrix: */
|
||||
void EVE_cmd_getmatrix(int32_t a, int32_t b, int32_t c, int32_t d, int32_t e, int32_t f);
|
||||
void EVE_cmd_translate(int32_t tx, int32_t ty);
|
||||
void EVE_cmd_scale(int32_t sx, int32_t sy);
|
||||
void EVE_cmd_rotate(int32_t ang);
|
||||
|
||||
|
||||
/* other commands: */
|
||||
void EVE_cmd_calibrate(void);
|
||||
void EVE_cmd_interrupt(uint32_t ms);
|
||||
void EVE_cmd_setfont(uint32_t font, uint32_t ptr);
|
||||
#if defined (FT81X_ENABLE)
|
||||
void EVE_cmd_romfont(uint32_t font, uint32_t romslot);
|
||||
void EVE_cmd_setfont2(uint32_t font, uint32_t ptr, uint32_t firstchar);
|
||||
void EVE_cmd_setrotate(uint32_t r);
|
||||
void EVE_cmd_setscratch(uint32_t handle);
|
||||
#endif
|
||||
void EVE_cmd_sketch(int16_t x0, int16_t y0, uint16_t w0, uint16_t h0, uint32_t ptr, uint16_t format);
|
||||
void EVE_cmd_snapshot(uint32_t ptr);
|
||||
#if defined (FT81X_ENABLE)
|
||||
void EVE_cmd_snapshot2(uint32_t fmt, uint32_t ptr, int16_t x0, int16_t y0, int16_t w0, int16_t h0);
|
||||
#endif
|
||||
void EVE_cmd_spinner(int16_t x0, int16_t y0, uint16_t style, uint16_t scale);
|
||||
void EVE_cmd_track(int16_t x0, int16_t y0, int16_t w0, int16_t h0, int16_t tag);
|
||||
|
||||
|
||||
/* commands that return values by writing to the command-fifo */
|
||||
uint32_t EVE_cmd_memcrc(uint32_t ptr, uint32_t num);
|
||||
uint32_t EVE_cmd_getptr(void);
|
||||
uint32_t EVE_cmd_regread(uint32_t ptr);
|
||||
void EVE_LIB_GetProps(uint32_t *pointer, uint32_t *width, uint32_t *height);
|
||||
|
||||
|
||||
/* meta-commands, sequences of several display-list entries condensed into simpler to use functions at the price of some overhead */
|
||||
void EVE_cmd_point(int16_t x0, int16_t y0, uint16_t size);
|
||||
void EVE_cmd_line(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t w0);
|
||||
void EVE_cmd_rect(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t corner);
|
||||
|
||||
void EVE_calibrate_manual(uint16_t height);
|
||||
#endif // FT81X_FULL
|
||||
|
||||
|
||||
/* startup FT8xx: */
|
||||
uint8_t EVE_init(void);
|
||||
|
||||
#endif /* EVE_COMMANDS_H_ */
|
1047
lib/lvgl_esp32_drivers/lvgl_tft/EVE_config.h
Normal file
1047
lib/lvgl_esp32_drivers/lvgl_tft/EVE_config.h
Normal file
File diff suppressed because it is too large
Load Diff
352
lib/lvgl_esp32_drivers/lvgl_tft/FT81x.c
Normal file
352
lib/lvgl_esp32_drivers/lvgl_tft/FT81x.c
Normal file
@@ -0,0 +1,352 @@
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "driver/gpio.h"
|
||||
|
||||
#include "FT81x.h"
|
||||
|
||||
#include "EVE.h"
|
||||
#include "EVE_commands.h"
|
||||
|
||||
/* some pre-definded colors */
|
||||
#define RED 0xff0000UL
|
||||
#define ORANGE 0xffa500UL
|
||||
#define GREEN 0x00ff00UL
|
||||
#define BLUE 0x0000ffUL
|
||||
#define BLUE_1 0x5dade2L
|
||||
#define YELLOW 0xffff00UL
|
||||
#define PINK 0xff00ffUL
|
||||
#define PURPLE 0x800080UL
|
||||
#define WHITE 0xffffffUL
|
||||
#define BLACK 0x000000UL
|
||||
|
||||
/* memory-map defines */
|
||||
#define SCREEN_BITMAP_ADDR 0x00000000 // full screen buffer (0x00000000 - 0x000BBE40)
|
||||
|
||||
uint8_t tft_active = 0;
|
||||
|
||||
void touch_calibrate(void)
|
||||
{
|
||||
|
||||
/* send pre-recorded touch calibration values, depending on the display the code is compiled for */
|
||||
|
||||
#if defined (EVE_CFAF240400C1_030SC)
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_A, 0x0000ed11);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_B, 0x00001139);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_C, 0xfff76809);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_D, 0x00000000);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_E, 0x00010690);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_F, 0xfffadf2e);
|
||||
#endif
|
||||
|
||||
#if defined (EVE_CFAF320240F_035T)
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_A, 0x00005614);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_B, 0x0000009e);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_C, 0xfff43422);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_D, 0x0000001d);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_E, 0xffffbda4);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_F, 0x00f8f2ef);
|
||||
#endif
|
||||
|
||||
#if defined (EVE_CFAF480128A0_039TC)
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_A, 0x00010485);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_B, 0x0000017f);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_C, 0xfffb0bd3);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_D, 0x00000073);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_E, 0x0000e293);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_F, 0x00069904);
|
||||
#endif
|
||||
|
||||
#if defined (EVE_CFAF800480E0_050SC)
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_A, 0x000107f9);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_B, 0xffffff8c);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_C, 0xfff451ae);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_D, 0x000000d2);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_E, 0x0000feac);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_F, 0xfffcfaaf);
|
||||
#endif
|
||||
|
||||
#if defined (EVE_PAF90)
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_A, 0x00000159);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_B, 0x0001019c);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_C, 0xfff93625);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_D, 0x00010157);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_E, 0x00000000);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_F, 0x0000c101);
|
||||
#endif
|
||||
|
||||
#if defined (EVE_RiTFT43)
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_A, 0x000062cd);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_B, 0xfffffe45);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_C, 0xfff45e0a);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_D, 0x000001a3);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_E, 0x00005b33);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_F, 0xFFFbb870);
|
||||
#endif
|
||||
|
||||
#if defined (EVE_EVE2_38)
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_A, 0x00007bed);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_B, 0x000001b0);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_C, 0xfff60aa5);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_D, 0x00000095);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_E, 0xffffdcda);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_F, 0x00829c08);
|
||||
#endif
|
||||
|
||||
#if defined (EVE_EVE2_35G)
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_A, 0x000109E4);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_B, 0x000007A6);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_C, 0xFFEC1EBA);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_D, 0x0000072C);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_E, 0x0001096A);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_F, 0xFFF469CF);
|
||||
#endif
|
||||
|
||||
#if defined (EVE_EVE2_43G)
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_A, 0x0000a1ff);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_B, 0x00000680);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_C, 0xffe54cc2);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_D, 0xffffff53);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_E, 0x0000912c);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_F, 0xfffe628d);
|
||||
#endif
|
||||
|
||||
#if defined (EVE_EVE2_50G)
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_A, 0x000109E4);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_B, 0x000007A6);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_C, 0xFFEC1EBA);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_D, 0x0000072C);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_E, 0x0001096A);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_F, 0xFFF469CF);
|
||||
#endif
|
||||
|
||||
#if defined (EVE_EVE2_70G)
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_A, 0x000105BC);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_B, 0xFFFFFA8A);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_C, 0x00004670);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_D, 0xFFFFFF75);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_E, 0x00010074);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_F, 0xFFFF14C8);
|
||||
#endif
|
||||
|
||||
#if defined (EVE_NHD_35)
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_A, 0x0000f78b);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_B, 0x00000427);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_C, 0xfffcedf8);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_D, 0xfffffba4);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_E, 0x0000f756);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_F, 0x0009279e);
|
||||
#endif
|
||||
|
||||
#if defined (EVE_RVT70)
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_A, 0x000074df);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_B, 0x000000e6);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_C, 0xfffd5474);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_D, 0x000001af);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_E, 0x00007e79);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_F, 0xffe9a63c);
|
||||
#endif
|
||||
|
||||
#if defined (EVE_FT811CB_HY50HD)
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_A, 66353);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_B, 712);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_C, 4293876677);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_D, 4294966157);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_E, 67516);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_F, 418276);
|
||||
#endif
|
||||
|
||||
#if defined (EVE_ADAM101)
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_A, 0x000101E3);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_B, 0x00000114);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_C, 0xFFF5EEBA);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_D, 0xFFFFFF5E);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_E, 0x00010226);
|
||||
EVE_memWrite32(REG_TOUCH_TRANSFORM_F, 0x0000C783);
|
||||
#endif
|
||||
|
||||
/* activate this if you are using a module for the first time or if you need to re-calibrate it */
|
||||
/* write down the numbers on the screen and either place them in one of the pre-defined blocks above or make a new block */
|
||||
// Note: requires FT81x_FULL to be defined
|
||||
#if 0
|
||||
/* calibrate touch and displays values to screen */
|
||||
EVE_cmd_dl(CMD_DLSTART);
|
||||
EVE_cmd_dl(DL_CLEAR_RGB | BLACK);
|
||||
EVE_cmd_dl(DL_CLEAR | CLR_COL | CLR_STN | CLR_TAG);
|
||||
EVE_cmd_text((EVE_HSIZE/2), 50, 26, EVE_OPT_CENTER, "Please tap on the dot.");
|
||||
EVE_cmd_calibrate();
|
||||
EVE_cmd_dl(DL_DISPLAY);
|
||||
EVE_cmd_dl(CMD_SWAP);
|
||||
EVE_cmd_execute();
|
||||
|
||||
uint32_t touch_a, touch_b, touch_c, touch_d, touch_e, touch_f;
|
||||
|
||||
touch_a = EVE_memRead32(REG_TOUCH_TRANSFORM_A);
|
||||
touch_b = EVE_memRead32(REG_TOUCH_TRANSFORM_B);
|
||||
touch_c = EVE_memRead32(REG_TOUCH_TRANSFORM_C);
|
||||
touch_d = EVE_memRead32(REG_TOUCH_TRANSFORM_D);
|
||||
touch_e = EVE_memRead32(REG_TOUCH_TRANSFORM_E);
|
||||
touch_f = EVE_memRead32(REG_TOUCH_TRANSFORM_F);
|
||||
|
||||
EVE_cmd_dl(CMD_DLSTART);
|
||||
EVE_cmd_dl(DL_CLEAR_RGB | BLACK);
|
||||
EVE_cmd_dl(DL_CLEAR | CLR_COL | CLR_STN | CLR_TAG);
|
||||
EVE_cmd_dl(TAG(0));
|
||||
|
||||
EVE_cmd_text(5, 15, 26, 0, "TOUCH_TRANSFORM_A:");
|
||||
EVE_cmd_text(5, 30, 26, 0, "TOUCH_TRANSFORM_B:");
|
||||
EVE_cmd_text(5, 45, 26, 0, "TOUCH_TRANSFORM_C:");
|
||||
EVE_cmd_text(5, 60, 26, 0, "TOUCH_TRANSFORM_D:");
|
||||
EVE_cmd_text(5, 75, 26, 0, "TOUCH_TRANSFORM_E:");
|
||||
EVE_cmd_text(5, 90, 26, 0, "TOUCH_TRANSFORM_F:");
|
||||
|
||||
#if defined (FT81X_ENABLE)
|
||||
EVE_cmd_setbase(16L); /* FT81x only */
|
||||
EVE_cmd_number(310, 15, 26, EVE_OPT_RIGHTX|8, touch_a);
|
||||
EVE_cmd_number(310, 30, 26, EVE_OPT_RIGHTX|8, touch_b);
|
||||
EVE_cmd_number(310, 45, 26, EVE_OPT_RIGHTX|8, touch_c);
|
||||
EVE_cmd_number(310, 60, 26, EVE_OPT_RIGHTX|8, touch_d);
|
||||
EVE_cmd_number(310, 75, 26, EVE_OPT_RIGHTX|8, touch_e);
|
||||
EVE_cmd_number(310, 90, 26, EVE_OPT_RIGHTX|8, touch_f);
|
||||
#else
|
||||
EVE_cmd_number(310, 15, 26, EVE_OPT_RIGHTX, touch_a);
|
||||
EVE_cmd_number(310, 30, 26, EVE_OPT_RIGHTX, touch_b);
|
||||
EVE_cmd_number(310, 45, 26, EVE_OPT_RIGHTX, touch_c);
|
||||
EVE_cmd_number(310, 60, 26, EVE_OPT_RIGHTX, touch_d);
|
||||
EVE_cmd_number(310, 75, 26, EVE_OPT_RIGHTX, touch_e);
|
||||
EVE_cmd_number(310, 90, 26, EVE_OPT_RIGHTX, touch_f);
|
||||
#endif
|
||||
|
||||
EVE_cmd_dl(DL_DISPLAY); /* instruct the graphics processor to show the list */
|
||||
EVE_cmd_dl(CMD_SWAP); /* make this list active */
|
||||
EVE_cmd_execute();
|
||||
|
||||
while(1);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
// set up a display list for a fullscreen writable bitmap
|
||||
void TFT_bitmap_display(void)
|
||||
{
|
||||
if(tft_active != 0)
|
||||
{
|
||||
EVE_start_cmd_burst(); /* start writing to the cmd-fifo as one stream of bytes, only sending the address once */
|
||||
|
||||
EVE_cmd_dl(CMD_DLSTART); /* start the display list */
|
||||
|
||||
EVE_cmd_dl(DL_CLEAR_RGB | BLACK); /* set the default clear color to black */
|
||||
EVE_cmd_dl(DL_CLEAR | CLR_COL | CLR_STN | CLR_TAG); /* clear the screen - this and the previous prevent artifacts between lists, Attributes are the color, stencil and tag buffers */
|
||||
|
||||
EVE_cmd_dl(TAG(0));
|
||||
|
||||
// fullscreen bitmap for memory-mapped direct access
|
||||
EVE_cmd_dl(TAG(20));
|
||||
#ifdef FT81X_ARGB4
|
||||
EVE_cmd_setbitmap(SCREEN_BITMAP_ADDR, EVE_ARGB4, EVE_HSIZE, EVE_VSIZE);
|
||||
#else
|
||||
EVE_cmd_setbitmap(SCREEN_BITMAP_ADDR, EVE_RGB565, EVE_HSIZE, EVE_VSIZE);
|
||||
#endif
|
||||
EVE_cmd_dl(DL_BEGIN | EVE_BITMAPS);
|
||||
EVE_cmd_dl(VERTEX2F(0, 0));
|
||||
EVE_cmd_dl(DL_END);
|
||||
|
||||
EVE_cmd_dl(TAG(0));
|
||||
|
||||
EVE_cmd_dl(DL_DISPLAY); /* instruct the graphics processor to show the list */
|
||||
|
||||
EVE_cmd_dl(CMD_SWAP); /* make this list active */
|
||||
|
||||
EVE_end_cmd_burst(); /* stop writing to the cmd-fifo */
|
||||
|
||||
EVE_cmd_start(); /* order the command co-processor to start processing its FIFO queue but do not wait for completion */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void FT81x_init(void)
|
||||
{
|
||||
gpio_pad_select_gpio(EVE_PDN);
|
||||
gpio_set_level(EVE_CS, 1);
|
||||
gpio_set_direction(EVE_PDN, GPIO_MODE_OUTPUT);
|
||||
|
||||
spi_acquire();
|
||||
|
||||
if(EVE_init())
|
||||
{
|
||||
tft_active = 1;
|
||||
|
||||
EVE_memWrite8(REG_PWM_DUTY, 0x30); /* setup backlight, range is from 0 = off to 0x80 = max */
|
||||
|
||||
touch_calibrate();
|
||||
|
||||
EVE_cmd_memset(SCREEN_BITMAP_ADDR, BLACK, SCREEN_BUFFER_SIZE); // clear screen buffer
|
||||
EVE_cmd_execute();
|
||||
|
||||
TFT_bitmap_display(); // set DL for fullscreen bitmap display
|
||||
}
|
||||
|
||||
spi_release();
|
||||
}
|
||||
|
||||
|
||||
// write fullscreen bitmap directly
|
||||
void TFT_WriteScreen(uint8_t* Bitmap)
|
||||
{
|
||||
EVE_memWrite_buffer(SCREEN_BITMAP_ADDR, Bitmap, SCREEN_BUFFER_SIZE, false);
|
||||
}
|
||||
|
||||
|
||||
// write bitmap directly, line-by-line
|
||||
void TFT_WriteBitmap(uint8_t* Bitmap, uint16_t X, uint16_t Y, uint16_t Width, uint16_t Height)
|
||||
{
|
||||
// calc base address
|
||||
uint32_t addr = SCREEN_BITMAP_ADDR + (Y * BYTES_PER_LINE) + (X * BYTES_PER_PIXEL);
|
||||
|
||||
// can we do a fast full width block transfer?
|
||||
if(X == 0 && Width == EVE_HSIZE)
|
||||
{
|
||||
#ifdef FT81X_ARGB4
|
||||
uint32_t *ptr32 = (uint32_t *)Bitmap;
|
||||
uint16_t *ptr16 = (uint16_t *)Bitmap;
|
||||
for (uint16_t i = 0; i < Width*Height; i++)
|
||||
{
|
||||
uint32_t c = *ptr32;
|
||||
*ptr16 = ((c & 0xF0000000)>>16) | ((c & 0x00F00000)>>12) | ((c & 0x0000F000)>>8) | ((c & 0x000000F0)>>4);
|
||||
ptr16++;
|
||||
ptr32++;
|
||||
}
|
||||
#endif
|
||||
|
||||
EVE_memWrite_buffer(addr, Bitmap, (Height * BYTES_PER_LINE), true);
|
||||
}
|
||||
else
|
||||
{
|
||||
// line by line mode
|
||||
#ifdef FT81X_ARGB4
|
||||
uint32_t *ptr32 = (uint32_t *)Bitmap;
|
||||
uint16_t *ptr16 = (uint16_t *)Bitmap;
|
||||
#endif
|
||||
uint32_t bpl = Width * BYTES_PER_PIXEL;
|
||||
for (uint16_t i = 0; i < Height; i++)
|
||||
{
|
||||
#ifdef FT81X_ARGB4
|
||||
for (uint16_t j = 0; j < Width; j++)
|
||||
{
|
||||
uint32_t c = *ptr32;
|
||||
*ptr16 = ((c & 0xF0000000)>>16) | ((c & 0x00F00000)>>12) | ((c & 0x0000F000)>>8) | ((c & 0x000000F0)>>4);
|
||||
ptr16++;
|
||||
ptr32++;
|
||||
}
|
||||
#endif
|
||||
EVE_memWrite_buffer(addr, Bitmap + (i * bpl), bpl, (i == Height - 1));
|
||||
addr += BYTES_PER_LINE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// LittlevGL flush callback
|
||||
void FT81x_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map)
|
||||
{
|
||||
TFT_WriteBitmap((uint8_t*)color_map, area->x1, area->y1, lv_area_get_width(area), lv_area_get_height(area));
|
||||
}
|
17
lib/lvgl_esp32_drivers/lvgl_tft/FT81x.h
Normal file
17
lib/lvgl_esp32_drivers/lvgl_tft/FT81x.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#ifndef FT81X_H_
|
||||
#define FT81X_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
#include "../lvgl_helpers.h"
|
||||
|
||||
void FT81x_init(void);
|
||||
|
||||
void FT81x_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map);
|
||||
|
||||
#endif /* FT81X_H_ */
|
65
lib/lvgl_esp32_drivers/lvgl_tft/GC9A01.h
Normal file
65
lib/lvgl_esp32_drivers/lvgl_tft/GC9A01.h
Normal file
@@ -0,0 +1,65 @@
|
||||
/**
|
||||
* @file lv_templ.h
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GC9A01_H
|
||||
#define GC9A01_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
|
||||
#include "../lvgl_helpers.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
#define GC9A01_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define GC9A01_RST CONFIG_LV_DISP_PIN_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_INVERT_COLORS CONFIG_LV_INVERT_COLORS
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
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);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /*GC9A01_H*/
|
1000
lib/lvgl_esp32_drivers/lvgl_tft/Kconfig
Normal file
1000
lib/lvgl_esp32_drivers/lvgl_tft/Kconfig
Normal file
File diff suppressed because it is too large
Load Diff
4
lib/lvgl_esp32_drivers/lvgl_tft/component.mk
Normal file
4
lib/lvgl_esp32_drivers/lvgl_tft/component.mk
Normal file
@@ -0,0 +1,4 @@
|
||||
# TFT drivers
|
||||
|
||||
COMPONENT_SRCDIRS := .
|
||||
COMPONENT_ADD_INCLUDEDIRS := .
|
107
lib/lvgl_esp32_drivers/lvgl_tft/disp_driver.c
Normal file
107
lib/lvgl_esp32_drivers/lvgl_tft/disp_driver.c
Normal file
@@ -0,0 +1,107 @@
|
||||
/**
|
||||
* @file disp_driver.c
|
||||
*/
|
||||
|
||||
#include "disp_driver.h"
|
||||
#include "disp_spi.h"
|
||||
|
||||
void disp_driver_init(void)
|
||||
{
|
||||
#if defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9341
|
||||
ili9341_init();
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9481
|
||||
ili9481_init();
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9488
|
||||
ili9488_init();
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7789
|
||||
st7789_init();
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7735S
|
||||
st7735s_init();
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_HX8357
|
||||
hx8357_init();
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9486
|
||||
ili9486_init();
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_SH1107
|
||||
sh1107_init();
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_SSD1306
|
||||
ssd1306_init();
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_FT81X
|
||||
FT81x_init();
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_IL3820
|
||||
il3820_init();
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_RA8875
|
||||
ra8875_init();
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_GC9A01
|
||||
GC9A01_init();
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_JD79653A
|
||||
jd79653a_init();
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_UC8151D
|
||||
uc8151d_init();
|
||||
#endif
|
||||
}
|
||||
|
||||
void disp_driver_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map)
|
||||
{
|
||||
#if defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9341
|
||||
ili9341_flush(drv, area, color_map);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9481
|
||||
ili9481_flush(drv, area, color_map);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9488
|
||||
ili9488_flush(drv, area, color_map);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7789
|
||||
st7789_flush(drv, area, color_map);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7735S
|
||||
st7735s_flush(drv, area, color_map);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_HX8357
|
||||
hx8357_flush(drv, area, color_map);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9486
|
||||
ili9486_flush(drv, area, color_map);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_SH1107
|
||||
sh1107_flush(drv, area, color_map);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_SSD1306
|
||||
ssd1306_flush(drv, area, color_map);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_FT81X
|
||||
FT81x_flush(drv, area, color_map);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_IL3820
|
||||
il3820_flush(drv, area, color_map);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_RA8875
|
||||
ra8875_flush(drv, area, color_map);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_GC9A01
|
||||
GC9A01_flush(drv, area, color_map);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_JD79653A
|
||||
jd79653a_lv_fb_flush(drv, area, color_map);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_UC8151D
|
||||
uc8151d_lv_fb_flush(drv, area, color_map);
|
||||
#endif
|
||||
}
|
||||
|
||||
void disp_driver_rounder(lv_disp_drv_t * disp_drv, lv_area_t * area)
|
||||
{
|
||||
#if defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_SSD1306
|
||||
ssd1306_rounder(disp_drv, area);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_SH1107
|
||||
sh1107_rounder(disp_drv, area);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_IL3820
|
||||
il3820_rounder(disp_drv, area);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_JD79653A
|
||||
jd79653a_lv_rounder_cb(disp_drv, area);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_UC8151D
|
||||
uc8151d_lv_rounder_cb(disp_drv, area);
|
||||
#endif
|
||||
}
|
||||
|
||||
void disp_driver_set_px(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)
|
||||
{
|
||||
#if defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_SSD1306
|
||||
ssd1306_set_px_cb(disp_drv, buf, buf_w, x, y, color, opa);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_SH1107
|
||||
sh1107_set_px_cb(disp_drv, buf, buf_w, x, y, color, opa);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_IL3820
|
||||
il3820_set_px_cb(disp_drv, buf, buf_w, x, y, color, opa);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_JD79653A
|
||||
jd79653a_lv_set_fb_cb(disp_drv, buf, buf_w, x, y, color, opa);
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_UC8151D
|
||||
uc8151d_lv_set_fb_cb(disp_drv, buf, buf_w, x, y, color, opa);
|
||||
#endif
|
||||
}
|
86
lib/lvgl_esp32_drivers/lvgl_tft/disp_driver.h
Normal file
86
lib/lvgl_esp32_drivers/lvgl_tft/disp_driver.h
Normal file
@@ -0,0 +1,86 @@
|
||||
/**
|
||||
* @file disp_driver.h
|
||||
*/
|
||||
|
||||
#ifndef DISP_DRIVER_H
|
||||
#define DISP_DRIVER_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
|
||||
#if defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9341
|
||||
#include "ili9341.h"
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9481
|
||||
#include "ili9481.h"
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9488
|
||||
#include "ili9488.h"
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7789
|
||||
#include "st7789.h"
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7735S
|
||||
#include "st7735s.h"
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_HX8357
|
||||
#include "hx8357.h"
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9486
|
||||
#include "ili9486.h"
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_SH1107
|
||||
#include "sh1107.h"
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_SSD1306
|
||||
#include "ssd1306.h"
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_FT81X
|
||||
#include "FT81x.h"
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_IL3820
|
||||
#include "il3820.h"
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_RA8875
|
||||
#include "ra8875.h"
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_GC9A01
|
||||
#include "GC9A01.h"
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_JD79653A
|
||||
#include "jd79653a.h"
|
||||
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_UC8151D
|
||||
#include "uc8151d.h"
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
/* Initialize display */
|
||||
void disp_driver_init(void);
|
||||
|
||||
/* Display flush callback */
|
||||
void disp_driver_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map);
|
||||
|
||||
/* Display rounder callback, used with monochrome dispays */
|
||||
void disp_driver_rounder(lv_disp_drv_t * disp_drv, lv_area_t * area);
|
||||
|
||||
/* Display set_px callback, used with monochrome dispays */
|
||||
void disp_driver_set_px(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);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /*DISP_DRIVER_H*/
|
320
lib/lvgl_esp32_drivers/lvgl_tft/disp_spi.c
Normal file
320
lib/lvgl_esp32_drivers/lvgl_tft/disp_spi.c
Normal file
@@ -0,0 +1,320 @@
|
||||
/**
|
||||
* @file disp_spi.c
|
||||
*
|
||||
*/
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include "esp_system.h"
|
||||
#include "driver/gpio.h"
|
||||
#include "driver/spi_master.h"
|
||||
#include "esp_log.h"
|
||||
|
||||
#define TAG "disp_spi"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <freertos/FreeRTOS.h>
|
||||
#include <freertos/semphr.h>
|
||||
#include <freertos/task.h>
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
|
||||
#include "disp_spi.h"
|
||||
#include "disp_driver.h"
|
||||
|
||||
#include "../lvgl_helpers.h"
|
||||
#include "../lvgl_spi_conf.h"
|
||||
|
||||
/******************************************************************************
|
||||
* Notes about DMA spi_transaction_ext_t structure pooling
|
||||
*
|
||||
* An xQueue is used to hold a pool of reusable SPI spi_transaction_ext_t
|
||||
* structures that get used for all DMA SPI transactions. While an xQueue may
|
||||
* seem like overkill it is an already built-in RTOS feature that comes at
|
||||
* little cost. xQueues are also ISR safe if it ever becomes necessary to
|
||||
* access the pool in the ISR callback.
|
||||
*
|
||||
* When a DMA request is sent, a transaction structure is removed from the
|
||||
* pool, filled out, and passed off to the esp32 SPI driver. Later, when
|
||||
* servicing pending SPI transaction results, the transaction structure is
|
||||
* recycled back into the pool for later reuse. This matches the DMA SPI
|
||||
* transaction life cycle requirements of the esp32 SPI driver.
|
||||
*
|
||||
* When polling or synchronously sending SPI requests, and as required by the
|
||||
* esp32 SPI driver, all pending DMA transactions are first serviced. Then the
|
||||
* polling SPI request takes place.
|
||||
*
|
||||
* When sending an asynchronous DMA SPI request, if the pool is empty, some
|
||||
* small percentage of pending transactions are first serviced before sending
|
||||
* any new DMA SPI transactions. Not too many and not too few as this balance
|
||||
* controls DMA transaction latency.
|
||||
*
|
||||
* It is therefore not the design that all pending transactions must be
|
||||
* serviced and placed back into the pool with DMA SPI requests - that
|
||||
* will happen eventually. The pool just needs to contain enough to float some
|
||||
* number of in-flight SPI requests to speed up the overall DMA SPI data rate
|
||||
* and reduce transaction latency. If however a display driver uses some
|
||||
* polling SPI requests or calls disp_wait_for_pending_transactions() directly,
|
||||
* the pool will reach the full state more often and speed up DMA queuing.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
#define SPI_TRANSACTION_POOL_SIZE 50 /* maximum number of DMA transactions simultaneously in-flight */
|
||||
|
||||
/* DMA Transactions to reserve before queueing additional DMA transactions. A 1/10th seems to be a good balance. Too many (or all) and it will increase latency. */
|
||||
#define SPI_TRANSACTION_POOL_RESERVE_PERCENTAGE 10
|
||||
#if SPI_TRANSACTION_POOL_SIZE >= SPI_TRANSACTION_POOL_RESERVE_PERCENTAGE
|
||||
#define SPI_TRANSACTION_POOL_RESERVE (SPI_TRANSACTION_POOL_SIZE / SPI_TRANSACTION_POOL_RESERVE_PERCENTAGE)
|
||||
#else
|
||||
#define SPI_TRANSACTION_POOL_RESERVE 1 /* defines minimum size */
|
||||
#endif
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* STATIC PROTOTYPES
|
||||
**********************/
|
||||
static void IRAM_ATTR spi_ready (spi_transaction_t *trans);
|
||||
|
||||
/**********************
|
||||
* STATIC VARIABLES
|
||||
**********************/
|
||||
static spi_host_device_t spi_host;
|
||||
static spi_device_handle_t spi;
|
||||
static QueueHandle_t TransactionPool = NULL;
|
||||
static transaction_cb_t chained_post_cb;
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL FUNCTIONS
|
||||
**********************/
|
||||
void disp_spi_add_device_config(spi_host_device_t host, spi_device_interface_config_t *devcfg)
|
||||
{
|
||||
spi_host=host;
|
||||
chained_post_cb=devcfg->post_cb;
|
||||
devcfg->post_cb=spi_ready;
|
||||
esp_err_t ret=spi_bus_add_device(host, devcfg, &spi);
|
||||
assert(ret==ESP_OK);
|
||||
}
|
||||
|
||||
void disp_spi_add_device(spi_host_device_t host)
|
||||
{
|
||||
disp_spi_add_device_with_speed(host, SPI_TFT_CLOCK_SPEED_HZ);
|
||||
}
|
||||
|
||||
void disp_spi_add_device_with_speed(spi_host_device_t host, int clock_speed_hz)
|
||||
{
|
||||
ESP_LOGI(TAG, "Adding SPI device");
|
||||
ESP_LOGI(TAG, "Clock speed: %dHz, mode: %d, CS pin: %d",
|
||||
clock_speed_hz, SPI_TFT_SPI_MODE, DISP_SPI_CS);
|
||||
|
||||
spi_device_interface_config_t devcfg={
|
||||
.clock_speed_hz = clock_speed_hz,
|
||||
.mode = SPI_TFT_SPI_MODE,
|
||||
.spics_io_num=DISP_SPI_CS, // CS pin
|
||||
.input_delay_ns=DISP_SPI_INPUT_DELAY_NS,
|
||||
.queue_size=SPI_TRANSACTION_POOL_SIZE,
|
||||
.pre_cb=NULL,
|
||||
.post_cb=NULL,
|
||||
#if defined(DISP_SPI_HALF_DUPLEX)
|
||||
.flags = SPI_DEVICE_NO_DUMMY | SPI_DEVICE_HALFDUPLEX, /* dummy bits should be explicitly handled via DISP_SPI_VARIABLE_DUMMY as needed */
|
||||
#else
|
||||
#if defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_FT81X)
|
||||
.flags = 0,
|
||||
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_RA8875)
|
||||
.flags = SPI_DEVICE_NO_DUMMY,
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
|
||||
disp_spi_add_device_config(host, &devcfg);
|
||||
|
||||
/* create the transaction pool and fill it with ptrs to spi_transaction_ext_t to reuse */
|
||||
if(TransactionPool == NULL) {
|
||||
TransactionPool = xQueueCreate(SPI_TRANSACTION_POOL_SIZE, sizeof(spi_transaction_ext_t*));
|
||||
assert(TransactionPool != NULL);
|
||||
for (size_t i = 0; i < SPI_TRANSACTION_POOL_SIZE; i++)
|
||||
{
|
||||
spi_transaction_ext_t* pTransaction = (spi_transaction_ext_t*)heap_caps_malloc(sizeof(spi_transaction_ext_t), MALLOC_CAP_DMA);
|
||||
assert(pTransaction != NULL);
|
||||
memset(pTransaction, 0, sizeof(spi_transaction_ext_t));
|
||||
xQueueSend(TransactionPool, &pTransaction, portMAX_DELAY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void disp_spi_change_device_speed(int clock_speed_hz)
|
||||
{
|
||||
if (clock_speed_hz <= 0) {
|
||||
clock_speed_hz = SPI_TFT_CLOCK_SPEED_HZ;
|
||||
}
|
||||
ESP_LOGI(TAG, "Changing SPI device clock speed: %d", clock_speed_hz);
|
||||
disp_spi_remove_device();
|
||||
disp_spi_add_device_with_speed(spi_host, clock_speed_hz);
|
||||
}
|
||||
|
||||
void disp_spi_remove_device()
|
||||
{
|
||||
/* Wait for previous pending transaction results */
|
||||
disp_wait_for_pending_transactions();
|
||||
|
||||
esp_err_t ret=spi_bus_remove_device(spi);
|
||||
assert(ret==ESP_OK);
|
||||
}
|
||||
|
||||
void disp_spi_transaction(const uint8_t *data, size_t length,
|
||||
disp_spi_send_flag_t flags, uint8_t *out,
|
||||
uint64_t addr, uint8_t dummy_bits)
|
||||
{
|
||||
if (0 == length) {
|
||||
return;
|
||||
}
|
||||
|
||||
spi_transaction_ext_t t = {0};
|
||||
|
||||
/* transaction length is in bits */
|
||||
t.base.length = length * 8;
|
||||
|
||||
if (length <= 4 && data != NULL) {
|
||||
t.base.flags = SPI_TRANS_USE_TXDATA;
|
||||
memcpy(t.base.tx_data, data, length);
|
||||
} else {
|
||||
t.base.tx_buffer = data;
|
||||
}
|
||||
|
||||
if (flags & DISP_SPI_RECEIVE) {
|
||||
assert(out != NULL && (flags & (DISP_SPI_SEND_POLLING | DISP_SPI_SEND_SYNCHRONOUS)));
|
||||
t.base.rx_buffer = out;
|
||||
|
||||
#if defined(DISP_SPI_HALF_DUPLEX)
|
||||
t.base.rxlength = t.base.length;
|
||||
t.base.length = 0; /* no MOSI phase in half-duplex reads */
|
||||
#else
|
||||
t.base.rxlength = 0; /* in full-duplex mode, zero means same as tx length */
|
||||
#endif
|
||||
}
|
||||
|
||||
if (flags & DISP_SPI_ADDRESS_8) {
|
||||
t.address_bits = 8;
|
||||
} else if (flags & DISP_SPI_ADDRESS_16) {
|
||||
t.address_bits = 16;
|
||||
} else if (flags & DISP_SPI_ADDRESS_24) {
|
||||
t.address_bits = 24;
|
||||
} else if (flags & DISP_SPI_ADDRESS_32) {
|
||||
t.address_bits = 32;
|
||||
}
|
||||
if (t.address_bits) {
|
||||
t.base.addr = addr;
|
||||
t.base.flags |= SPI_TRANS_VARIABLE_ADDR;
|
||||
}
|
||||
|
||||
#if defined(DISP_SPI_HALF_DUPLEX)
|
||||
if (flags & DISP_SPI_MODE_DIO) {
|
||||
t.base.flags |= SPI_TRANS_MODE_DIO;
|
||||
} else if (flags & DISP_SPI_MODE_QIO) {
|
||||
t.base.flags |= SPI_TRANS_MODE_QIO;
|
||||
}
|
||||
|
||||
if (flags & DISP_SPI_MODE_DIOQIO_ADDR) {
|
||||
t.base.flags |= SPI_TRANS_MODE_DIOQIO_ADDR;
|
||||
}
|
||||
|
||||
if ((flags & DISP_SPI_VARIABLE_DUMMY) && dummy_bits) {
|
||||
t.dummy_bits = dummy_bits;
|
||||
t.base.flags |= SPI_TRANS_VARIABLE_DUMMY;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Save flags for pre/post transaction processing */
|
||||
t.base.user = (void *) flags;
|
||||
|
||||
/* Poll/Complete/Queue transaction */
|
||||
if (flags & DISP_SPI_SEND_POLLING) {
|
||||
disp_wait_for_pending_transactions(); /* before polling, all previous pending transactions need to be serviced */
|
||||
spi_device_polling_transmit(spi, (spi_transaction_t *) &t);
|
||||
} else if (flags & DISP_SPI_SEND_SYNCHRONOUS) {
|
||||
disp_wait_for_pending_transactions(); /* before synchronous queueing, all previous pending transactions need to be serviced */
|
||||
spi_device_transmit(spi, (spi_transaction_t *) &t);
|
||||
} else {
|
||||
|
||||
/* if necessary, ensure we can queue new transactions by servicing some previous transactions */
|
||||
if(uxQueueMessagesWaiting(TransactionPool) == 0) {
|
||||
spi_transaction_t *presult;
|
||||
while(uxQueueMessagesWaiting(TransactionPool) < SPI_TRANSACTION_POOL_RESERVE) {
|
||||
if (spi_device_get_trans_result(spi, &presult, 1) == ESP_OK) {
|
||||
xQueueSend(TransactionPool, &presult, portMAX_DELAY); /* back to the pool to be reused */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
spi_transaction_ext_t *pTransaction = NULL;
|
||||
xQueueReceive(TransactionPool, &pTransaction, portMAX_DELAY);
|
||||
memcpy(pTransaction, &t, sizeof(t));
|
||||
if (spi_device_queue_trans(spi, (spi_transaction_t *) pTransaction, portMAX_DELAY) != ESP_OK) {
|
||||
xQueueSend(TransactionPool, &pTransaction, portMAX_DELAY); /* send failed transaction back to the pool to be reused */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void disp_wait_for_pending_transactions(void)
|
||||
{
|
||||
spi_transaction_t *presult;
|
||||
|
||||
while(uxQueueMessagesWaiting(TransactionPool) < SPI_TRANSACTION_POOL_SIZE) { /* service until the transaction reuse pool is full again */
|
||||
if (spi_device_get_trans_result(spi, &presult, 1) == ESP_OK) {
|
||||
xQueueSend(TransactionPool, &presult, portMAX_DELAY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void disp_spi_acquire(void)
|
||||
{
|
||||
esp_err_t ret = spi_device_acquire_bus(spi, portMAX_DELAY);
|
||||
assert(ret == ESP_OK);
|
||||
}
|
||||
|
||||
void disp_spi_release(void)
|
||||
{
|
||||
spi_device_release_bus(spi);
|
||||
}
|
||||
|
||||
/**********************
|
||||
* STATIC FUNCTIONS
|
||||
**********************/
|
||||
|
||||
static void IRAM_ATTR spi_ready(spi_transaction_t *trans)
|
||||
{
|
||||
disp_spi_send_flag_t flags = (disp_spi_send_flag_t) trans->user;
|
||||
|
||||
if (flags & DISP_SPI_SIGNAL_FLUSH) {
|
||||
lv_disp_t * disp = NULL;
|
||||
|
||||
#if (LVGL_VERSION_MAJOR >= 7)
|
||||
disp = _lv_refr_get_disp_refreshing();
|
||||
#else /* Before v7 */
|
||||
disp = lv_refr_get_disp_refreshing();
|
||||
#endif
|
||||
|
||||
lv_disp_flush_ready(&disp->driver);
|
||||
}
|
||||
|
||||
if (chained_post_cb) {
|
||||
chained_post_cb(trans);
|
||||
}
|
||||
}
|
||||
|
81
lib/lvgl_esp32_drivers/lvgl_tft/disp_spi.h
Normal file
81
lib/lvgl_esp32_drivers/lvgl_tft/disp_spi.h
Normal file
@@ -0,0 +1,81 @@
|
||||
/**
|
||||
* @file disp_spi.h
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef DISP_SPI_H
|
||||
#define DISP_SPI_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <driver/spi_master.h>
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
typedef enum _disp_spi_send_flag_t {
|
||||
DISP_SPI_SEND_QUEUED = 0x00000000,
|
||||
DISP_SPI_SEND_POLLING = 0x00000001,
|
||||
DISP_SPI_SEND_SYNCHRONOUS = 0x00000002,
|
||||
DISP_SPI_SIGNAL_FLUSH = 0x00000004,
|
||||
DISP_SPI_RECEIVE = 0x00000008,
|
||||
DISP_SPI_CMD_8 = 0x00000010, /* Reserved */
|
||||
DISP_SPI_CMD_16 = 0x00000020, /* Reserved */
|
||||
DISP_SPI_ADDRESS_8 = 0x00000040,
|
||||
DISP_SPI_ADDRESS_16 = 0x00000080,
|
||||
DISP_SPI_ADDRESS_24 = 0x00000100,
|
||||
DISP_SPI_ADDRESS_32 = 0x00000200,
|
||||
DISP_SPI_MODE_DIO = 0x00000400,
|
||||
DISP_SPI_MODE_QIO = 0x00000800,
|
||||
DISP_SPI_MODE_DIOQIO_ADDR = 0x00001000,
|
||||
DISP_SPI_VARIABLE_DUMMY = 0x00002000,
|
||||
} disp_spi_send_flag_t;
|
||||
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
void disp_spi_add_device(spi_host_device_t host);
|
||||
void disp_spi_add_device_config(spi_host_device_t host, spi_device_interface_config_t *devcfg);
|
||||
void disp_spi_add_device_with_speed(spi_host_device_t host, int clock_speed_hz);
|
||||
void disp_spi_change_device_speed(int clock_speed_hz);
|
||||
void disp_spi_remove_device();
|
||||
|
||||
/* Important!
|
||||
All buffers should also be 32-bit aligned and DMA capable to prevent extra allocations and copying.
|
||||
When DMA reading (even in polling mode) the ESP32 always read in 4-byte chunks even if less is requested.
|
||||
Extra space will be zero filled. Always ensure the out buffer is large enough to hold at least 4 bytes!
|
||||
*/
|
||||
void disp_spi_transaction(const uint8_t *data, size_t length,
|
||||
disp_spi_send_flag_t flags, uint8_t *out, uint64_t addr, uint8_t dummy_bits);
|
||||
|
||||
void disp_wait_for_pending_transactions(void);
|
||||
void disp_spi_acquire(void);
|
||||
void disp_spi_release(void);
|
||||
|
||||
static inline void disp_spi_send_data(uint8_t *data, size_t length) {
|
||||
disp_spi_transaction(data, length, DISP_SPI_SEND_POLLING, NULL, 0, 0);
|
||||
}
|
||||
|
||||
static inline void disp_spi_send_colors(uint8_t *data, size_t length) {
|
||||
disp_spi_transaction(data, length,
|
||||
DISP_SPI_SEND_QUEUED | DISP_SPI_SIGNAL_FLUSH,
|
||||
NULL, 0, 0);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /*DISP_SPI_H*/
|
151
lib/lvgl_esp32_drivers/lvgl_tft/hx8357.h
Normal file
151
lib/lvgl_esp32_drivers/lvgl_tft/hx8357.h
Normal file
@@ -0,0 +1,151 @@
|
||||
/**
|
||||
* @file HX8357.h
|
||||
*
|
||||
* Roughly based on the Adafruit_HX8357_Library
|
||||
*
|
||||
* This library should work with:
|
||||
* Adafruit 3.5" TFT 320x480 + Touchscreen Breakout
|
||||
* http://www.adafruit.com/products/2050
|
||||
*
|
||||
* Adafruit TFT FeatherWing - 3.5" 480x320 Touchscreen for Feathers
|
||||
* https://www.adafruit.com/product/3651
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef HX8357_H
|
||||
#define HX8357_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
#include "../lvgl_helpers.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
#define HX8357_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define HX8357_RST CONFIG_LV_DISP_PIN_RST
|
||||
#define HX8357_BCKL CONFIG_LV_DISP_PIN_BCKL
|
||||
|
||||
#define HX8357_ENABLE_BACKLIGHT_CONTROL CONFIG_LV_ENABLE_BACKLIGHT_CONTROL
|
||||
|
||||
#if CONFIG_LV_BACKLIGHT_ACTIVE_LVL
|
||||
#define HX8357_BCKL_ACTIVE_LVL 1
|
||||
#else
|
||||
#define HX8357_BCKL_ACTIVE_LVL 0
|
||||
#endif
|
||||
|
||||
// if text/images are backwards, try setting this to 1
|
||||
#define HX8357_INVERT_DISPLAY CONFIG_LV_INVERT_DISPLAY
|
||||
|
||||
|
||||
/*******************
|
||||
* HX8357B/D REGS
|
||||
*********************/
|
||||
#define HX8357D 0xD ///< Our internal const for D type
|
||||
#define HX8357B 0xB ///< Our internal const for B type
|
||||
|
||||
#define HX8357_TFTWIDTH 320 ///< 320 pixels wide
|
||||
#define HX8357_TFTHEIGHT 480 ///< 480 pixels tall
|
||||
|
||||
#define HX8357_NOP 0x00 ///< No op
|
||||
#define HX8357_SWRESET 0x01 ///< software reset
|
||||
#define HX8357_RDDID 0x04 ///< Read ID
|
||||
#define HX8357_RDDST 0x09 ///< (unknown)
|
||||
|
||||
#define HX8357_RDPOWMODE 0x0A ///< Read power mode Read power mode
|
||||
#define HX8357_RDMADCTL 0x0B ///< Read MADCTL
|
||||
#define HX8357_RDCOLMOD 0x0C ///< Column entry mode
|
||||
#define HX8357_RDDIM 0x0D ///< Read display image mode
|
||||
#define HX8357_RDDSDR 0x0F ///< Read dosplay signal mode
|
||||
|
||||
#define HX8357_SLPIN 0x10 ///< Enter sleep mode
|
||||
#define HX8357_SLPOUT 0x11 ///< Exit sleep mode
|
||||
#define HX8357B_PTLON 0x12 ///< Partial mode on
|
||||
#define HX8357B_NORON 0x13 ///< Normal mode
|
||||
|
||||
#define HX8357_INVOFF 0x20 ///< Turn off invert
|
||||
#define HX8357_INVON 0x21 ///< Turn on invert
|
||||
#define HX8357_DISPOFF 0x28 ///< Display on
|
||||
#define HX8357_DISPON 0x29 ///< Display off
|
||||
|
||||
#define HX8357_CASET 0x2A ///< Column addr set
|
||||
#define HX8357_PASET 0x2B ///< Page addr set
|
||||
#define HX8357_RAMWR 0x2C ///< Write VRAM
|
||||
#define HX8357_RAMRD 0x2E ///< Read VRAm
|
||||
|
||||
#define HX8357B_PTLAR 0x30 ///< (unknown)
|
||||
#define HX8357_TEON 0x35 ///< Tear enable on
|
||||
#define HX8357_TEARLINE 0x44 ///< (unknown)
|
||||
#define HX8357_MADCTL 0x36 ///< Memory access control
|
||||
#define HX8357_COLMOD 0x3A ///< Color mode
|
||||
|
||||
#define HX8357_SETOSC 0xB0 ///< Set oscillator
|
||||
#define HX8357_SETPWR1 0xB1 ///< Set power control
|
||||
#define HX8357B_SETDISPLAY 0xB2 ///< Set display mode
|
||||
#define HX8357_SETRGB 0xB3 ///< Set RGB interface
|
||||
#define HX8357D_SETCOM 0xB6 ///< Set VCOM voltage
|
||||
|
||||
#define HX8357B_SETDISPMODE 0xB4 ///< Set display mode
|
||||
#define HX8357D_SETCYC 0xB4 ///< Set display cycle reg
|
||||
#define HX8357B_SETOTP 0xB7 ///< Set OTP memory
|
||||
#define HX8357D_SETC 0xB9 ///< Enable extension command
|
||||
|
||||
#define HX8357B_SET_PANEL_DRIVING 0xC0 ///< Set panel drive mode
|
||||
#define HX8357D_SETSTBA 0xC0 ///< Set source option
|
||||
#define HX8357B_SETDGC 0xC1 ///< Set DGC settings
|
||||
#define HX8357B_SETID 0xC3 ///< Set ID
|
||||
#define HX8357B_SETDDB 0xC4 ///< Set DDB
|
||||
#define HX8357B_SETDISPLAYFRAME 0xC5 ///< Set display frame
|
||||
#define HX8357B_GAMMASET 0xC8 ///< Set Gamma correction
|
||||
#define HX8357B_SETCABC 0xC9 ///< Set CABC
|
||||
#define HX8357_SETPANEL 0xCC ///< Set Panel
|
||||
|
||||
#define HX8357B_SETPOWER 0xD0 ///< Set power control
|
||||
#define HX8357B_SETVCOM 0xD1 ///< Set VCOM
|
||||
#define HX8357B_SETPWRNORMAL 0xD2 ///< Set power normal
|
||||
|
||||
#define HX8357B_RDID1 0xDA ///< Read ID #1
|
||||
#define HX8357B_RDID2 0xDB ///< Read ID #2
|
||||
#define HX8357B_RDID3 0xDC ///< Read ID #3
|
||||
#define HX8357B_RDID4 0xDD ///< Read ID #4
|
||||
|
||||
#define HX8357D_SETGAMMA 0xE0 ///< Set Gamma
|
||||
|
||||
#define HX8357B_SETGAMMA 0xC8 ///< Set Gamma
|
||||
#define HX8357B_SETPANELRELATED 0xE9 ///< Set panel related
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
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);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /*HX8357_H*/
|
113
lib/lvgl_esp32_drivers/lvgl_tft/il3820.h
Normal file
113
lib/lvgl_esp32_drivers/lvgl_tft/il3820.h
Normal file
@@ -0,0 +1,113 @@
|
||||
/**
|
||||
* @file il3820.h
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef IL3820_H
|
||||
#define IL3820_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
#include "sdkconfig.h"
|
||||
|
||||
/* Values for Waveshare 2.9inch e-Paper Module, this values shouldn't be
|
||||
* swapped to change display orientation */
|
||||
#define EPD_PANEL_WIDTH CONFIG_LV_DISPLAY_WIDTH /* 128 */
|
||||
#define EPD_PANEL_HEIGHT CONFIG_LV_DISPLAY_HEIGHT /* 296 */
|
||||
|
||||
/* 128 = panel width */
|
||||
#define IL3820_COLUMNS (EPD_PANEL_WIDTH / 8)
|
||||
|
||||
#define IL3820_DC_PIN CONFIG_LV_DISP_PIN_DC
|
||||
#define IL3820_RST_PIN CONFIG_LV_DISP_PIN_RST
|
||||
#define IL3820_BUSY_PIN CONFIG_LV_DISP_PIN_BUSY
|
||||
#define IL3820_BUSY_LEVEL 1
|
||||
|
||||
/* IL3820 commands */
|
||||
#define IL3820_CMD_GDO_CTRL 0x01
|
||||
#define IL3820_CMD_GDV_CTRL 0x03
|
||||
#define IL3820_CMD_SDV_CTRL 0x04
|
||||
#define IL3820_CMD_SOFTSTART 0x0c
|
||||
#define IL3820_CMD_GSCAN_START 0x0f
|
||||
#define IL3820_CMD_SLEEP_MODE 0x10
|
||||
#define IL3820_CMD_ENTRY_MODE 0x11
|
||||
#define IL3820_CMD_SW_RESET 0x12
|
||||
#define IL3820_CMD_TSENS_CTRL 0x1a
|
||||
#define IL3820_CMD_MASTER_ACTIVATION 0x20
|
||||
#define IL3820_CMD_UPDATE_CTRL1 0x21
|
||||
#define IL3820_CMD_UPDATE_CTRL2 0x22
|
||||
#define IL3820_CMD_WRITE_RAM 0x24
|
||||
#define IL3820_CMD_WRITE_RED_RAM 0x26
|
||||
#define IL3820_CMD_VCOM_SENSE 0x28
|
||||
#define IL3820_CMD_VCOM_SENSE_DURATON 0x29
|
||||
#define IL3820_CMD_PRGM_VCOM_OTP 0x2a
|
||||
#define IL3820_CMD_VCOM_VOLTAGE 0x2c
|
||||
#define IL3820_CMD_PRGM_WS_OTP 0x30
|
||||
#define IL3820_CMD_UPDATE_LUT 0x32
|
||||
#define IL3820_CMD_PRGM_OTP_SELECTION 0x36
|
||||
#define IL3820_CMD_OTP_SELECTION_CTRL 0x37
|
||||
#define IL3820_CMD_DUMMY_LINE 0x3a
|
||||
#define IL3820_CMD_GATE_LINE_WIDTH 0x3b
|
||||
#define IL3820_CMD_BWF_CTRL 0x3c
|
||||
#define IL3820_CMD_RAM_XPOS_CTRL 0x44
|
||||
#define IL3820_CMD_RAM_YPOS_CTRL 0x45
|
||||
#define IL3820_CMD_RAM_XPOS_CNTR 0x4e
|
||||
#define IL3820_CMD_RAM_YPOS_CNTR 0x4f
|
||||
#define IL3820_CMD_TERMINATE_FRAME_RW 0xff
|
||||
|
||||
/* Data entry sequence modes */
|
||||
#define IL3820_DATA_ENTRY_MASK 0x07
|
||||
#define IL3820_DATA_ENTRY_XDYDX 0x00
|
||||
#define IL3820_DATA_ENTRY_XIYDX 0x01
|
||||
#define IL3820_DATA_ENTRY_XDYIX 0x02
|
||||
#define IL3820_DATA_ENTRY_XIYIX 0x03
|
||||
#define IL3820_DATA_ENTRY_XDYDY 0x04
|
||||
#define IL3820_DATA_ENTRY_XIYDY 0x05
|
||||
#define IL3820_DATA_ENTRY_XDYIY 0x06
|
||||
#define IL3820_DATA_ENTRY_XIYIY 0x07
|
||||
|
||||
/* Options for display update */
|
||||
#define IL3820_CTRL1_INITIAL_UPDATE_LL 0x00
|
||||
#define IL3820_CTRL1_INITIAL_UPDATE_LH 0x01
|
||||
#define IL3820_CTRL1_INITIAL_UPDATE_HL 0x02
|
||||
#define IL3820_CTRL1_INITIAL_UPDATE_HH 0x03
|
||||
|
||||
/* Options for display update sequence */
|
||||
#define IL3820_CTRL2_ENABLE_CLK 0x80
|
||||
#define IL3820_CTRL2_ENABLE_ANALOG 0x40
|
||||
#define IL3820_CTRL2_TO_INITIAL 0x08
|
||||
#define IL3820_CTRL2_TO_PATTERN 0x04
|
||||
#define IL3820_CTRL2_DISABLE_ANALOG 0x02
|
||||
#define IL3820_CTRL2_DISABLE_CLK 0x01
|
||||
|
||||
#define IL3820_SLEEP_MODE_DSM 0x01
|
||||
#define IL3820_SLEEP_MODE_PON 0x00
|
||||
|
||||
/* time constants in ms */
|
||||
#define IL3820_RESET_DELAY 20
|
||||
#define IL3820_BUSY_DELAY 1
|
||||
// normal wait time max 200ms
|
||||
#define IL3820_WAIT 20
|
||||
|
||||
void il3820_init(void);
|
||||
void il3820_flush(lv_disp_drv_t *drv, const lv_area_t *area, lv_color_t *color_map);
|
||||
void il3820_fullflush(lv_disp_drv_t *drv, const lv_area_t *area, lv_color_t *color_map);
|
||||
void il3820_rounder(struct _disp_drv_t * disp_drv, lv_area_t *area);
|
||||
void il3820_set_px_cb(struct _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 il3820_sleep_in(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* __IL3820_REGS_H__ */
|
||||
|
65
lib/lvgl_esp32_drivers/lvgl_tft/ili9341.h
Normal file
65
lib/lvgl_esp32_drivers/lvgl_tft/ili9341.h
Normal file
@@ -0,0 +1,65 @@
|
||||
/**
|
||||
* @file lv_templ.h
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef ILI9341_H
|
||||
#define ILI9341_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
|
||||
#include "../lvgl_helpers.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
#define ILI9341_DC CONFIG_LV_DISP_PIN_DC
|
||||
#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
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
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);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /*ILI9341_H*/
|
130
lib/lvgl_esp32_drivers/lvgl_tft/ili9481.h
Normal file
130
lib/lvgl_esp32_drivers/lvgl_tft/ili9481.h
Normal file
@@ -0,0 +1,130 @@
|
||||
/**
|
||||
* @file ili9481.h
|
||||
*/
|
||||
|
||||
#ifndef ILI9481_H
|
||||
#define ILI9481_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
#include "../lvgl_helpers.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
#define ILI9481_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define ILI9481_RST CONFIG_LV_DISP_PIN_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_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
|
||||
*********************/
|
||||
|
||||
/* MIPI DCS Type1 */
|
||||
#define ILI9481_CMD_NOP 0x00
|
||||
#define ILI9481_CMD_SOFTWARE_RESET 0x01
|
||||
#define ILI9481_CMD_READ_DISP_POWER_MODE 0x0A
|
||||
#define ILI9481_CMD_READ_DISP_MADCTRL 0x0B // bits 7:3 only
|
||||
#define ILI9481_CMD_READ_DISP_PIXEL_FORMAT 0x0C
|
||||
#define ILI9481_CMD_READ_DISP_IMAGE_MODE 0x0D
|
||||
#define ILI9481_CMD_READ_DISP_SIGNAL_MODE 0x0E
|
||||
#define ILI9481_CMD_READ_DISP_SELF_DIAGNOSTIC 0x0F // bits 7:6 only
|
||||
#define ILI9481_CMD_ENTER_SLEEP_MODE 0x10
|
||||
#define ILI9481_CMD_SLEEP_OUT 0x11
|
||||
#define ILI9481_CMD_PARTIAL_MODE_ON 0x12
|
||||
#define ILI9481_CMD_NORMAL_DISP_MODE_ON 0x13
|
||||
#define ILI9481_CMD_DISP_INVERSION_OFF 0x20
|
||||
#define ILI9481_CMD_DISP_INVERSION_ON 0x21
|
||||
#define ILI9481_CMD_DISPLAY_OFF 0x28
|
||||
#define ILI9481_CMD_DISPLAY_ON 0x29
|
||||
#define ILI9481_CMD_COLUMN_ADDRESS_SET 0x2A
|
||||
#define ILI9481_CMD_PAGE_ADDRESS_SET 0x2B
|
||||
#define ILI9481_CMD_MEMORY_WRITE 0x2C
|
||||
#define ILI9481_CMD_MEMORY_READ 0x2E
|
||||
#define ILI9481_CMD_PARTIAL_AREA 0x30
|
||||
#define ILI9481_CMD_VERT_SCROLL_DEFINITION 0x33
|
||||
#define ILI9481_CMD_TEARING_EFFECT_LINE_OFF 0x34
|
||||
#define ILI9481_CMD_TEARING_EFFECT_LINE_ON 0x35
|
||||
#define ILI9481_CMD_MEMORY_ACCESS_CONTROL 0x36 // bits 7:3,1:0 only
|
||||
#define ILI9481_CMD_VERT_SCROLL_START_ADDRESS 0x37
|
||||
#define ILI9481_CMD_IDLE_MODE_OFF 0x38
|
||||
#define ILI9481_CMD_IDLE_MODE_ON 0x39
|
||||
#define ILI9481_CMD_COLMOD_PIXEL_FORMAT_SET 0x3A
|
||||
#define ILI9481_CMD_WRITE_MEMORY_CONTINUE 0x3C
|
||||
#define ILI9481_CMD_READ_MEMORY_CONTINUE 0x3E
|
||||
#define ILI9481_CMD_SET_TEAR_SCANLINE 0x44
|
||||
#define ILI9481_CMD_GET_SCANLINE 0x45
|
||||
|
||||
#define ILI9481_DDB_START 0xA1
|
||||
#define ILI9481_DDB_CONTINUE 0xA8
|
||||
|
||||
/* other */
|
||||
#define ILI9481_CMD_ACCESS_PROTECT 0xB0
|
||||
#define ILI9481_CMD_LOW_POWER_CONTROL 0xB1
|
||||
#define ILI9481_CMD_FRAME_MEMORY_ACCESS 0xB3
|
||||
#define ILI9481_CMD_DISPLAY_MODE 0xB4
|
||||
#define ILI9481_CMD_DEVICE_CODE 0xBF
|
||||
|
||||
#define ILI9481_CMD_PANEL_DRIVE 0xC0
|
||||
#define ILI9481_CMD_DISP_TIMING_NORMAL 0xC1
|
||||
#define ILI9481_CMD_DISP_TIMING_PARTIAL 0xC2
|
||||
#define ILI9481_CMD_DISP_TIMING_IDLE 0xC3
|
||||
#define ILI9481_CMD_FRAME_RATE 0xC5
|
||||
#define ILI9481_CMD_INTERFACE_CONTROL 0xC6
|
||||
#define ILI9481_CMD_GAMMA_SETTING 0xC8
|
||||
|
||||
#define ILI9481_CMD_POWER_SETTING 0xD0
|
||||
#define ILI9481_CMD_VCOM_CONTROL 0xD1
|
||||
#define ILI9481_CMD_POWER_CONTROL_NORMAL 0xD2
|
||||
#define ILI9481_CMD_POWER_CONTROL_IDEL 0xD3
|
||||
#define ILI9481_CMD_POWER_CONTROL_PARTIAL 0xD4
|
||||
|
||||
#define ILI9481_CMD_NVMEM_WRITE 0xE0
|
||||
#define ILI9481_CMD_NVMEM_PROTECTION_KEY 0xE1
|
||||
#define ILI9481_CMD_NVMEM_STATUS_READ 0xE2
|
||||
#define ILI9481_CMD_NVMEM_PROTECTION 0xE3
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
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
|
||||
**********************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /*ILI9481_H*/
|
61
lib/lvgl_esp32_drivers/lvgl_tft/ili9486.h
Normal file
61
lib/lvgl_esp32_drivers/lvgl_tft/ili9486.h
Normal file
@@ -0,0 +1,61 @@
|
||||
/**
|
||||
* @file ili9486.h
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef ILI9486_H
|
||||
#define ILI9486_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
|
||||
#include "../lvgl_helpers.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
#define ILI9486_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define ILI9486_RST CONFIG_LV_DISP_PIN_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
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
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
|
||||
**********************/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* ILI9486_H*/
|
167
lib/lvgl_esp32_drivers/lvgl_tft/ili9488.h
Normal file
167
lib/lvgl_esp32_drivers/lvgl_tft/ili9488.h
Normal file
@@ -0,0 +1,167 @@
|
||||
/**
|
||||
* @file ili9488.h
|
||||
*/
|
||||
|
||||
#ifndef ILI9844_H
|
||||
#define ILI9844_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
#include "../lvgl_helpers.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
#define ILI9488_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define ILI9488_RST CONFIG_LV_DISP_PIN_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
|
||||
|
||||
/*******************
|
||||
* ILI9488 REGS
|
||||
*********************/
|
||||
|
||||
/* Level 1 Commands (from the display Datasheet) */
|
||||
#define ILI9488_CMD_NOP 0x00
|
||||
#define ILI9488_CMD_SOFTWARE_RESET 0x01
|
||||
#define ILI9488_CMD_READ_DISP_ID 0x04
|
||||
#define ILI9488_CMD_READ_ERROR_DSI 0x05
|
||||
#define ILI9488_CMD_READ_DISP_STATUS 0x09
|
||||
#define ILI9488_CMD_READ_DISP_POWER_MODE 0x0A
|
||||
#define ILI9488_CMD_READ_DISP_MADCTRL 0x0B
|
||||
#define ILI9488_CMD_READ_DISP_PIXEL_FORMAT 0x0C
|
||||
#define ILI9488_CMD_READ_DISP_IMAGE_MODE 0x0D
|
||||
#define ILI9488_CMD_READ_DISP_SIGNAL_MODE 0x0E
|
||||
#define ILI9488_CMD_READ_DISP_SELF_DIAGNOSTIC 0x0F
|
||||
#define ILI9488_CMD_ENTER_SLEEP_MODE 0x10
|
||||
#define ILI9488_CMD_SLEEP_OUT 0x11
|
||||
#define ILI9488_CMD_PARTIAL_MODE_ON 0x12
|
||||
#define ILI9488_CMD_NORMAL_DISP_MODE_ON 0x13
|
||||
#define ILI9488_CMD_DISP_INVERSION_OFF 0x20
|
||||
#define ILI9488_CMD_DISP_INVERSION_ON 0x21
|
||||
#define ILI9488_CMD_PIXEL_OFF 0x22
|
||||
#define ILI9488_CMD_PIXEL_ON 0x23
|
||||
#define ILI9488_CMD_DISPLAY_OFF 0x28
|
||||
#define ILI9488_CMD_DISPLAY_ON 0x29
|
||||
#define ILI9488_CMD_COLUMN_ADDRESS_SET 0x2A
|
||||
#define ILI9488_CMD_PAGE_ADDRESS_SET 0x2B
|
||||
#define ILI9488_CMD_MEMORY_WRITE 0x2C
|
||||
#define ILI9488_CMD_MEMORY_READ 0x2E
|
||||
#define ILI9488_CMD_PARTIAL_AREA 0x30
|
||||
#define ILI9488_CMD_VERT_SCROLL_DEFINITION 0x33
|
||||
#define ILI9488_CMD_TEARING_EFFECT_LINE_OFF 0x34
|
||||
#define ILI9488_CMD_TEARING_EFFECT_LINE_ON 0x35
|
||||
#define ILI9488_CMD_MEMORY_ACCESS_CONTROL 0x36
|
||||
#define ILI9488_CMD_VERT_SCROLL_START_ADDRESS 0x37
|
||||
#define ILI9488_CMD_IDLE_MODE_OFF 0x38
|
||||
#define ILI9488_CMD_IDLE_MODE_ON 0x39
|
||||
#define ILI9488_CMD_COLMOD_PIXEL_FORMAT_SET 0x3A
|
||||
#define ILI9488_CMD_WRITE_MEMORY_CONTINUE 0x3C
|
||||
#define ILI9488_CMD_READ_MEMORY_CONTINUE 0x3E
|
||||
#define ILI9488_CMD_SET_TEAR_SCANLINE 0x44
|
||||
#define ILI9488_CMD_GET_SCANLINE 0x45
|
||||
#define ILI9488_CMD_WRITE_DISPLAY_BRIGHTNESS 0x51
|
||||
#define ILI9488_CMD_READ_DISPLAY_BRIGHTNESS 0x52
|
||||
#define ILI9488_CMD_WRITE_CTRL_DISPLAY 0x53
|
||||
#define ILI9488_CMD_READ_CTRL_DISPLAY 0x54
|
||||
#define ILI9488_CMD_WRITE_CONTENT_ADAPT_BRIGHTNESS 0x55
|
||||
#define ILI9488_CMD_READ_CONTENT_ADAPT_BRIGHTNESS 0x56
|
||||
#define ILI9488_CMD_WRITE_MIN_CAB_LEVEL 0x5E
|
||||
#define ILI9488_CMD_READ_MIN_CAB_LEVEL 0x5F
|
||||
#define ILI9488_CMD_READ_ABC_SELF_DIAG_RES 0x68
|
||||
#define ILI9488_CMD_READ_ID1 0xDA
|
||||
#define ILI9488_CMD_READ_ID2 0xDB
|
||||
#define ILI9488_CMD_READ_ID3 0xDC
|
||||
|
||||
/* Level 2 Commands (from the display Datasheet) */
|
||||
#define ILI9488_CMD_INTERFACE_MODE_CONTROL 0xB0
|
||||
#define ILI9488_CMD_FRAME_RATE_CONTROL_NORMAL 0xB1
|
||||
#define ILI9488_CMD_FRAME_RATE_CONTROL_IDLE_8COLOR 0xB2
|
||||
#define ILI9488_CMD_FRAME_RATE_CONTROL_PARTIAL 0xB3
|
||||
#define ILI9488_CMD_DISPLAY_INVERSION_CONTROL 0xB4
|
||||
#define ILI9488_CMD_BLANKING_PORCH_CONTROL 0xB5
|
||||
#define ILI9488_CMD_DISPLAY_FUNCTION_CONTROL 0xB6
|
||||
#define ILI9488_CMD_ENTRY_MODE_SET 0xB7
|
||||
#define ILI9488_CMD_BACKLIGHT_CONTROL_1 0xB9
|
||||
#define ILI9488_CMD_BACKLIGHT_CONTROL_2 0xBA
|
||||
#define ILI9488_CMD_HS_LANES_CONTROL 0xBE
|
||||
#define ILI9488_CMD_POWER_CONTROL_1 0xC0
|
||||
#define ILI9488_CMD_POWER_CONTROL_2 0xC1
|
||||
#define ILI9488_CMD_POWER_CONTROL_NORMAL_3 0xC2
|
||||
#define ILI9488_CMD_POWER_CONTROL_IDEL_4 0xC3
|
||||
#define ILI9488_CMD_POWER_CONTROL_PARTIAL_5 0xC4
|
||||
#define ILI9488_CMD_VCOM_CONTROL_1 0xC5
|
||||
#define ILI9488_CMD_CABC_CONTROL_1 0xC6
|
||||
#define ILI9488_CMD_CABC_CONTROL_2 0xC8
|
||||
#define ILI9488_CMD_CABC_CONTROL_3 0xC9
|
||||
#define ILI9488_CMD_CABC_CONTROL_4 0xCA
|
||||
#define ILI9488_CMD_CABC_CONTROL_5 0xCB
|
||||
#define ILI9488_CMD_CABC_CONTROL_6 0xCC
|
||||
#define ILI9488_CMD_CABC_CONTROL_7 0xCD
|
||||
#define ILI9488_CMD_CABC_CONTROL_8 0xCE
|
||||
#define ILI9488_CMD_CABC_CONTROL_9 0xCF
|
||||
#define ILI9488_CMD_NVMEM_WRITE 0xD0
|
||||
#define ILI9488_CMD_NVMEM_PROTECTION_KEY 0xD1
|
||||
#define ILI9488_CMD_NVMEM_STATUS_READ 0xD2
|
||||
#define ILI9488_CMD_READ_ID4 0xD3
|
||||
#define ILI9488_CMD_ADJUST_CONTROL_1 0xD7
|
||||
#define ILI9488_CMD_READ_ID_VERSION 0xD8
|
||||
#define ILI9488_CMD_POSITIVE_GAMMA_CORRECTION 0xE0
|
||||
#define ILI9488_CMD_NEGATIVE_GAMMA_CORRECTION 0xE1
|
||||
#define ILI9488_CMD_DIGITAL_GAMMA_CONTROL_1 0xE2
|
||||
#define ILI9488_CMD_DIGITAL_GAMMA_CONTROL_2 0xE3
|
||||
#define ILI9488_CMD_SET_IMAGE_FUNCTION 0xE9
|
||||
#define ILI9488_CMD_ADJUST_CONTROL_2 0xF2
|
||||
#define ILI9488_CMD_ADJUST_CONTROL_3 0xF7
|
||||
#define ILI9488_CMD_ADJUST_CONTROL_4 0xF8
|
||||
#define ILI9488_CMD_ADJUST_CONTROL_5 0xF9
|
||||
#define ILI9488_CMD_SPI_READ_SETTINGS 0xFB
|
||||
#define ILI9488_CMD_ADJUST_CONTROL_6 0xFC
|
||||
#define ILI9488_CMD_ADJUST_CONTROL_7 0xFF
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
typedef struct {
|
||||
uint8_t red;
|
||||
uint8_t green;
|
||||
uint8_t blue;
|
||||
} lv_color_custom_t;
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
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
|
||||
**********************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /*ILI9488_H*/
|
36
lib/lvgl_esp32_drivers/lvgl_tft/jd79653a.h
Normal file
36
lib/lvgl_esp32_drivers/lvgl_tft/jd79653a.h
Normal file
@@ -0,0 +1,36 @@
|
||||
/**
|
||||
* @file il3820.h
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef JD79653A_H
|
||||
#define JD79653A_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
|
||||
void jd79653a_init();
|
||||
void jd79653a_deep_sleep();
|
||||
|
||||
void jd79653a_lv_set_fb_cb(struct _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 jd79653a_lv_rounder_cb(struct _disp_drv_t * disp_drv, lv_area_t *area);
|
||||
void jd79653a_lv_fb_flush(lv_disp_drv_t *drv, const lv_area_t *area, lv_color_t *color_map);
|
||||
|
||||
void jd79653a_fb_set_full_color(uint8_t color);
|
||||
void jd79653a_fb_full_update(uint8_t *data, size_t len);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif // JD79653A_H
|
118
lib/lvgl_esp32_drivers/lvgl_tft/ra8875.h
Normal file
118
lib/lvgl_esp32_drivers/lvgl_tft/ra8875.h
Normal file
@@ -0,0 +1,118 @@
|
||||
/**
|
||||
* @file ra8875.h
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef RA8875_H
|
||||
#define RA8875_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 RA8875_RST CONFIG_LV_DISP_PIN_RST
|
||||
|
||||
// System & Configuration Registers
|
||||
#define RA8875_REG_PWRR (0x01) // Power and Display Control Register (PWRR)
|
||||
#define RA8875_REG_MRWC (0x02) // Memory Read/Write Command (MRWC)
|
||||
#define RA8875_REG_PCSR (0x04) // Pixel Clock Setting Register (PCSR)
|
||||
#define RA8875_REG_SYSR (0x10) // System Configuration Register (SYSR)
|
||||
#define RA8875_REG_HDWR (0x14) // LCD Horizontal Display Width Register (HDWR)
|
||||
#define RA8875_REG_HNDFTR (0x15) // Horizontal Non-Display Period Fine Tuning Option Register (HNDFTR)
|
||||
#define RA8875_REG_HNDR (0x16) // LCD Horizontal Non-Display Period Register (HNDR)
|
||||
#define RA8875_REG_HSTR (0x17) // HSYNC Start Position Register (HSTR)
|
||||
#define RA8875_REG_HPWR (0x18) // HSYNC Pulse Width Register (HPWR)
|
||||
#define RA8875_REG_VDHR0 (0x19) // LCD Vertical Display Height Register (VDHR0)
|
||||
#define RA8875_REG_VDHR1 (0x1A) // LCD Vertical Display Height Register (VDHR1)
|
||||
#define RA8875_REG_VNDR0 (0x1B) // LCD Vertical Non-Display Period Register (VNDR0)
|
||||
#define RA8875_REG_VNDR1 (0x1C) // LCD Vertical Non-Display Period Register (VNDR1)
|
||||
#define RA8875_REG_VSTR0 (0x1D) // VSYNC Start Position Register (VSTR0)
|
||||
#define RA8875_REG_VSTR1 (0x1E) // VSYNC Start Position Register (VSTR1)
|
||||
#define RA8875_REG_VPWR (0x1F) // VSYNC Pulse Width Register (VPWR)
|
||||
|
||||
// LCD Display Control Registers
|
||||
#define RA8875_REG_DPCR (0x20) // Display Configuration Register (DPCR)
|
||||
|
||||
// Active Window & Scroll Window Setting Registers
|
||||
#define RA8875_REG_HSAW0 (0x30) // Horizontal Start Point 0 of Active Window (HSAW0)
|
||||
#define RA8875_REG_HSAW1 (0x31) // Horizontal Start Point 1 of Active Window (HSAW1)
|
||||
#define RA8875_REG_VSAW0 (0x32) // Vertical Start Point 0 of Active Window (VSAW0)
|
||||
#define RA8875_REG_VSAW1 (0x33) // Vertical Start Point 1 of Active Window (VSAW1)
|
||||
#define RA8875_REG_HEAW0 (0x34) // Horizontal End Point 0 of Active Window (HEAW0)
|
||||
#define RA8875_REG_HEAW1 (0x35) // Horizontal End Point 1 of Active Window (HEAW1)
|
||||
#define RA8875_REG_VEAW0 (0x36) // Vertical End Point 0 of Active Window (VEAW0)
|
||||
#define RA8875_REG_VEAW1 (0x37) // Vertical End Point 1 of Active Window (VEAW1)
|
||||
|
||||
// Cursor Setting Registers
|
||||
#define RA8875_REG_MWCR0 (0x40) // Memory Write Control Register 0 (MWCR0)
|
||||
#define RA8875_REG_MWCR1 (0x41) // Memory Write Control Register 1 (MWCR1)
|
||||
#define RA8875_REG_CURH0 (0x46) // Memory Write Cursor Horizontal Position Register 0 (CURH0)
|
||||
#define RA8875_REG_CURH1 (0x47) // Memory Write Cursor Horizontal Position Register 1 (CURH1)
|
||||
#define RA8875_REG_CURV0 (0x48) // Memory Write Cursor Vertical Position Register 0 (CURV0)
|
||||
#define RA8875_REG_CURV1 (0x49) // Memory Write Cursor Vertical Position Register 1 (CURV1)
|
||||
|
||||
// Block Transfer Engine(BTE) Control Registers
|
||||
#define RA8875_REG_LTPR0 (0x52) // Layer Transparency Register 0 (LTPR0)
|
||||
#define RA8875_REG_LTPR1 (0x53) // Layer Transparency Register 1 (LTPR1)
|
||||
|
||||
// Touch Panel Control Registers
|
||||
#define RA8875_REG_TPCR0 (0x70) // Touch Panel Control Register 0 (TPCR0)
|
||||
#define RA8875_REG_TPCR1 (0x71) // Touch Panel Control Register 1 (TPCR1)
|
||||
#define RA8875_REG_TPXH (0x72) // Touch Panel X High Byte Data Register (TPXH)
|
||||
#define RA8875_REG_TPYH (0x73) // Touch Panel Y High Byte Data Register (TPYH)
|
||||
#define RA8875_REG_TPXYL (0x74) // Touch Panel X/Y Low Byte Data Register (TPXYL)
|
||||
|
||||
// PLL Setting Registers
|
||||
#define RA8875_REG_PLLC1 (0x88) // PLL Control Register 1 (PLLC1)
|
||||
#define RA8875_REG_PLLC2 (0x89) // PLL Control Register 2 (PLLC2)
|
||||
|
||||
// Memory Clear Register
|
||||
#define RA8875_REG_MCLR (0x8E) // Memory Clear Control Register (MCLR)
|
||||
|
||||
// Interrupt Control Registers
|
||||
#define RA8875_REG_INTC1 (0xF0) // Interrupt Control Register1 (INTC1)
|
||||
#define RA8875_REG_INTC2 (0xF1) // Interrupt Control Register1 (INTC2)
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
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);
|
||||
|
||||
void ra8875_sleep_in(void);
|
||||
void ra8875_sleep_out(void);
|
||||
|
||||
uint8_t ra8875_read_cmd(uint8_t cmd);
|
||||
void ra8875_write_cmd(uint8_t cmd, uint8_t data);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /*RA8875_H*/
|
55
lib/lvgl_esp32_drivers/lvgl_tft/sh1107.h
Normal file
55
lib/lvgl_esp32_drivers/lvgl_tft/sh1107.h
Normal file
@@ -0,0 +1,55 @@
|
||||
/**
|
||||
* @file lv_templ.h
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef SH1107_H
|
||||
#define SH1107_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
|
||||
#include "../lvgl_helpers.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
#define SH1107_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define SH1107_RST CONFIG_LV_DISP_PIN_RST
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
void sh1107_init(void);
|
||||
void sh1107_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map);
|
||||
void sh1107_rounder(struct _disp_drv_t * disp_drv, lv_area_t *area);
|
||||
void sh1107_set_px_cb(struct _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 sh1107_sleep_in(void);
|
||||
void sh1107_sleep_out(void);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /*SH1107_H*/
|
57
lib/lvgl_esp32_drivers/lvgl_tft/ssd1306.h
Normal file
57
lib/lvgl_esp32_drivers/lvgl_tft/ssd1306.h
Normal file
@@ -0,0 +1,57 @@
|
||||
/**
|
||||
* @file lv_templ.h
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef SSD1306_H
|
||||
#define SSD1306_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
|
||||
#include "../lvgl_helpers.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
#define SSD1306_SDA CONFIG_LV_DISP_PIN_SDA
|
||||
#define SSD1306_SCL CONFIG_LV_DISP_PIN_SCL
|
||||
#define SSD1306_DISPLAY_ORIENTATION TFT_ORIENTATION_LANDSCAPE
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
void ssd1306_init(void);
|
||||
void ssd1306_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map);
|
||||
void ssd1306_rounder(struct _disp_drv_t * disp_drv, lv_area_t *area);
|
||||
void ssd1306_set_px_cb(struct _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 ssd1306_sleep_in(void);
|
||||
void ssd1306_sleep_out(void);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /*SSD1306_H*/
|
149
lib/lvgl_esp32_drivers/lvgl_tft/st7735s.h
Normal file
149
lib/lvgl_esp32_drivers/lvgl_tft/st7735s.h
Normal file
@@ -0,0 +1,149 @@
|
||||
/**
|
||||
* @file lv_templ.h
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef ST7735S_H
|
||||
#define ST7735S_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 DISP_BUF_SIZE (CONFIG_LV_DISPLAY_WIDTH*CONFIG_LV_DISPLAY_HEIGHT)
|
||||
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 40)
|
||||
|
||||
#define ST7735S_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define ST7735S_RST CONFIG_LV_DISP_PIN_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
|
||||
// https://raw.githubusercontent.com/m5stack/M5StickC/master/src/utility/ST7735_Defines.h
|
||||
// and are modified to fit to the M5StickC device, and are taken from
|
||||
// https://github.com/adafruit/Adafruit-ST7735-Library
|
||||
//
|
||||
#define ST7735_GREENTAB160x80 // For 160 x 80 display (BGR, inverted, 26 / 1 offset)
|
||||
#define COLSTART 26
|
||||
#define ROWSTART 1
|
||||
|
||||
// Delay between some initialisation commands
|
||||
#define TFT_INIT_DELAY 0x80
|
||||
|
||||
#define TFT_NOP 0x00
|
||||
#define TFT_SWRST 0x01
|
||||
|
||||
#define TFT_CASET 0x2A
|
||||
#define TFT_PASET 0x2B
|
||||
#define TFT_RAMWR 0x2C
|
||||
|
||||
#define TFT_RAMRD 0x2E
|
||||
#define TFT_IDXRD 0x00
|
||||
|
||||
#define TFT_MADCTL 0x36
|
||||
#define TFT_MAD_MY 0x80
|
||||
#define TFT_MAD_MX 0x40
|
||||
#define TFT_MAD_MV 0x20
|
||||
#define TFT_MAD_ML 0x10
|
||||
#define TFT_MAD_BGR 0x08
|
||||
#define TFT_MAD_MH 0x04
|
||||
#define TFT_MAD_RGB 0x00
|
||||
|
||||
#define TFT_INVOFF 0x20
|
||||
#define TFT_INVON 0x21
|
||||
|
||||
// ST7735 specific commands used in init
|
||||
#define ST7735_NOP 0x00
|
||||
#define ST7735_SWRESET 0x01
|
||||
#define ST7735_RDDID 0x04
|
||||
#define ST7735_RDDST 0x09
|
||||
|
||||
#define ST7735_SLPIN 0x10
|
||||
#define ST7735_SLPOUT 0x11
|
||||
#define ST7735_PTLON 0x12
|
||||
#define ST7735_NORON 0x13
|
||||
|
||||
#define ST7735_INVOFF 0x20
|
||||
#define ST7735_INVON 0x21
|
||||
#define ST7735_DISPOFF 0x28
|
||||
#define ST7735_DISPON 0x29
|
||||
#define ST7735_CASET 0x2A
|
||||
#define ST7735_RASET 0x2B
|
||||
#define ST7735_RAMWR 0x2C
|
||||
#define ST7735_RAMRD 0x2E
|
||||
|
||||
#define ST7735_PTLAR 0x30
|
||||
#define ST7735_VSCRDEF 0x33
|
||||
#define ST7735_COLMOD 0x3A
|
||||
#define ST7735_MADCTL 0x36
|
||||
#define ST7735_VSCRSADD 0x37
|
||||
|
||||
#define ST7735_FRMCTR1 0xB1
|
||||
#define ST7735_FRMCTR2 0xB2
|
||||
#define ST7735_FRMCTR3 0xB3
|
||||
#define ST7735_INVCTR 0xB4
|
||||
#define ST7735_DISSET5 0xB6
|
||||
|
||||
#define ST7735_PWCTR1 0xC0
|
||||
#define ST7735_PWCTR2 0xC1
|
||||
#define ST7735_PWCTR3 0xC2
|
||||
#define ST7735_PWCTR4 0xC3
|
||||
#define ST7735_PWCTR5 0xC4
|
||||
#define ST7735_VMCTR1 0xC5
|
||||
|
||||
#define ST7735_RDID1 0xDA
|
||||
#define ST7735_RDID2 0xDB
|
||||
#define ST7735_RDID3 0xDC
|
||||
#define ST7735_RDID4 0xDD
|
||||
|
||||
#define ST7735_PWCTR6 0xFC
|
||||
|
||||
#define ST7735_GMCTRP1 0xE0
|
||||
#define ST7735_GMCTRN1 0xE1
|
||||
|
||||
#define ST77XX_MADCTL_MY 0x80
|
||||
#define ST77XX_MADCTL_MX 0x40
|
||||
#define ST77XX_MADCTL_MV 0x20
|
||||
#define ST77XX_MADCTL_ML 0x10
|
||||
#define ST77XX_MADCTL_RGB 0x00
|
||||
#define ST77XX_MADCTL_BGR 0x08
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
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);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /*ST7735S_H*/
|
120
lib/lvgl_esp32_drivers/lvgl_tft/st7789.h
Normal file
120
lib/lvgl_esp32_drivers/lvgl_tft/st7789.h
Normal file
@@ -0,0 +1,120 @@
|
||||
/**
|
||||
* @file st7789.h
|
||||
*
|
||||
* Mostly taken from lbthomsen/esp-idf-littlevgl github.
|
||||
*/
|
||||
|
||||
#ifndef ST7789_H
|
||||
#define ST7789_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
#include "../lvgl_helpers.h"
|
||||
|
||||
#include "sdkconfig.h"
|
||||
|
||||
#define ST7789_DC CONFIG_LV_DISP_PIN_DC
|
||||
#define ST7789_RST CONFIG_LV_DISP_PIN_RST
|
||||
#define ST7789_BCKL CONFIG_LV_DISP_PIN_BCKL
|
||||
|
||||
#define ST7789_ENABLE_BACKLIGHT_CONTROL CONFIG_LV_ENABLE_BACKLIGHT_CONTROL
|
||||
|
||||
#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
|
||||
#define ST7789_RDDID 0x04
|
||||
#define ST7789_RDDST 0x09
|
||||
|
||||
#define ST7789_RDDPM 0x0A // Read display power mode
|
||||
#define ST7789_RDD_MADCTL 0x0B // Read display MADCTL
|
||||
#define ST7789_RDD_COLMOD 0x0C // Read display pixel format
|
||||
#define ST7789_RDDIM 0x0D // Read display image mode
|
||||
#define ST7789_RDDSM 0x0E // Read display signal mode
|
||||
#define ST7789_RDDSR 0x0F // Read display self-diagnostic result (ST7789V)
|
||||
|
||||
#define ST7789_SLPIN 0x10
|
||||
#define ST7789_SLPOUT 0x11
|
||||
#define ST7789_PTLON 0x12
|
||||
#define ST7789_NORON 0x13
|
||||
|
||||
#define ST7789_INVOFF 0x20
|
||||
#define ST7789_INVON 0x21
|
||||
#define ST7789_GAMSET 0x26 // Gamma set
|
||||
#define ST7789_DISPOFF 0x28
|
||||
#define ST7789_DISPON 0x29
|
||||
#define ST7789_CASET 0x2A
|
||||
#define ST7789_RASET 0x2B
|
||||
#define ST7789_RAMWR 0x2C
|
||||
#define ST7789_RGBSET 0x2D // Color setting for 4096, 64K and 262K colors
|
||||
#define ST7789_RAMRD 0x2E
|
||||
|
||||
#define ST7789_PTLAR 0x30
|
||||
#define ST7789_VSCRDEF 0x33 // Vertical scrolling definition (ST7789V)
|
||||
#define ST7789_TEOFF 0x34 // Tearing effect line off
|
||||
#define ST7789_TEON 0x35 // Tearing effect line on
|
||||
#define ST7789_MADCTL 0x36 // Memory data access control
|
||||
#define ST7789_IDMOFF 0x38 // Idle mode off
|
||||
#define ST7789_IDMON 0x39 // Idle mode on
|
||||
#define ST7789_RAMWRC 0x3C // Memory write continue (ST7789V)
|
||||
#define ST7789_RAMRDC 0x3E // Memory read continue (ST7789V)
|
||||
#define ST7789_COLMOD 0x3A
|
||||
|
||||
#define ST7789_RAMCTRL 0xB0 // RAM control
|
||||
#define ST7789_RGBCTRL 0xB1 // RGB control
|
||||
#define ST7789_PORCTRL 0xB2 // Porch control
|
||||
#define ST7789_FRCTRL1 0xB3 // Frame rate control
|
||||
#define ST7789_PARCTRL 0xB5 // Partial mode control
|
||||
#define ST7789_GCTRL 0xB7 // Gate control
|
||||
#define ST7789_GTADJ 0xB8 // Gate on timing adjustment
|
||||
#define ST7789_DGMEN 0xBA // Digital gamma enable
|
||||
#define ST7789_VCOMS 0xBB // VCOMS setting
|
||||
#define ST7789_LCMCTRL 0xC0 // LCM control
|
||||
#define ST7789_IDSET 0xC1 // ID setting
|
||||
#define ST7789_VDVVRHEN 0xC2 // VDV and VRH command enable
|
||||
#define ST7789_VRHS 0xC3 // VRH set
|
||||
#define ST7789_VDVSET 0xC4 // VDV setting
|
||||
#define ST7789_VCMOFSET 0xC5 // VCOMS offset set
|
||||
#define ST7789_FRCTR2 0xC6 // FR Control 2
|
||||
#define ST7789_CABCCTRL 0xC7 // CABC control
|
||||
#define ST7789_REGSEL1 0xC8 // Register value section 1
|
||||
#define ST7789_REGSEL2 0xCA // Register value section 2
|
||||
#define ST7789_PWMFRSEL 0xCC // PWM frequency selection
|
||||
#define ST7789_PWCTRL1 0xD0 // Power control 1
|
||||
#define ST7789_VAPVANEN 0xD2 // Enable VAP/VAN signal output
|
||||
#define ST7789_CMD2EN 0xDF // Command 2 enable
|
||||
#define ST7789_PVGAMCTRL 0xE0 // Positive voltage gamma control
|
||||
#define ST7789_NVGAMCTRL 0xE1 // Negative voltage gamma control
|
||||
#define ST7789_DGMLUTR 0xE2 // Digital gamma look-up table for red
|
||||
#define ST7789_DGMLUTB 0xE3 // Digital gamma look-up table for blue
|
||||
#define ST7789_GATECTRL 0xE4 // Gate control
|
||||
#define ST7789_SPI2EN 0xE7 // SPI2 enable
|
||||
#define ST7789_PWCTRL2 0xE8 // Power control 2
|
||||
#define ST7789_EQCTRL 0xE9 // Equalize time control
|
||||
#define ST7789_PROMCTRL 0xEC // Program control
|
||||
#define ST7789_PROMEN 0xFA // Program mode enable
|
||||
#define ST7789_NVMSET 0xFC // NVM setting
|
||||
#define ST7789_PROMACT 0xFE // Program action
|
||||
|
||||
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);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* ST7789_H */
|
39
lib/lvgl_esp32_drivers/lvgl_tft/uc8151d.h
Normal file
39
lib/lvgl_esp32_drivers/lvgl_tft/uc8151d.h
Normal file
@@ -0,0 +1,39 @@
|
||||
/**
|
||||
@file uc8151d.h
|
||||
@brief GoodDisplay GDEW0154M09 e-paper display w/ FitiPower JD79653A
|
||||
@version 1.0
|
||||
@date 2020-08-28
|
||||
@author Jackson Ming Hu <huming2207@gmail.com>
|
||||
|
||||
|
||||
@section LICENSE
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 Jackson Ming Hu
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef LVGL_DEMO_UC8151D_H
|
||||
#define LVGL_DEMO_UC8151D_H
|
||||
|
||||
#include <lvgl.h>
|
||||
|
||||
void uc8151d_init();
|
||||
void uc8151d_lv_set_fb_cb(struct _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 uc8151d_lv_rounder_cb(struct _disp_drv_t *disp_drv, lv_area_t *area);
|
||||
void uc8151d_lv_fb_flush(lv_disp_drv_t *drv, const lv_area_t *area, lv_color_t *color_map);
|
||||
|
||||
#endif //LVGL_DEMO_UC8151D_H
|
52
lib/lvgl_esp32_drivers/lvgl_touch/touch_driver.h
Normal file
52
lib/lvgl_esp32_drivers/lvgl_touch/touch_driver.h
Normal file
@@ -0,0 +1,52 @@
|
||||
/**
|
||||
* @file touch_driver.h
|
||||
*/
|
||||
|
||||
#ifndef TOUCH_DRIVER_H
|
||||
#define TOUCH_DRIVER_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
|
||||
#if defined (CONFIG_LV_TOUCH_CONTROLLER_XPT2046)
|
||||
#include "xpt2046.h"
|
||||
#elif defined (CONFIG_LV_TOUCH_CONTROLLER_FT6X06)
|
||||
#include "ft6x36.h"
|
||||
#elif defined (CONFIG_LV_TOUCH_CONTROLLER_STMPE610)
|
||||
#include "stmpe610.h"
|
||||
#elif defined (CONFIG_LV_TOUCH_CONTROLLER_ADCRAW)
|
||||
#include "adcraw.h"
|
||||
#elif defined (CONFIG_LV_TOUCH_CONTROLLER_FT81X)
|
||||
#include "FT81x.h"
|
||||
#elif defined (CONFIG_LV_TOUCH_CONTROLLER_RA8875)
|
||||
#include "ra8875_touch.h"
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
void touch_driver_init(void);
|
||||
bool touch_driver_read(lv_indev_drv_t *drv, lv_indev_data_t *data);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* TOUCH_DRIVER_H */
|
||||
|
36
lib/lvgl_esp32_drivers/lvgl_touch/tp_i2c.h
Normal file
36
lib/lvgl_esp32_drivers/lvgl_touch/tp_i2c.h
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright © 2020 Wolfgang Christl
|
||||
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
||||
* software and associated documentation files (the “Software”), to deal in the Software
|
||||
* without restriction, including without limitation the rights to use, copy, modify, merge,
|
||||
* publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
|
||||
* to whom the Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
|
||||
* FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef __TS_H
|
||||
#define __TS_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
esp_err_t i2c_master_init(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __TS_H */
|
45
lib/lvgl_esp32_drivers/lvgl_touch/tp_spi.h
Normal file
45
lib/lvgl_esp32_drivers/lvgl_touch/tp_spi.h
Normal file
@@ -0,0 +1,45 @@
|
||||
/**
|
||||
* @file tp_spi.h
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef TP_SPI_H
|
||||
#define TP_SPI_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include <stdint.h>
|
||||
#include <driver/spi_master.h>
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
void tp_spi_add_device(spi_host_device_t host);
|
||||
void tp_spi_add_device_config(spi_host_device_t host, spi_device_interface_config_t *config);
|
||||
void tp_spi_xchg(uint8_t* data_send, uint8_t* data_recv, uint8_t byte_count);
|
||||
void tp_spi_write_reg(uint8_t* data, uint8_t byte_count);
|
||||
void tp_spi_read_reg(uint8_t reg, uint8_t* data, uint8_t byte_count);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /*TP_SPI_H*/
|
Reference in New Issue
Block a user