更新(lvgl/TP):TP已经正常运行

结束
This commit is contained in:
Alvin Young 2023-06-21 02:29:28 +08:00
parent 3e11ec2120
commit b119eeb61d
6 changed files with 120 additions and 55 deletions

View File

@ -31,7 +31,8 @@
#define LV_TICK_PERIOD_MS 1
TFT_t lcd_disp_dev;
TFT_t lcd_disp_dev;
app_display_handle_t app_display_handle = { 0 };
TickType_t FillTest(TFT_t* dev, int width, int height)
{
@ -66,22 +67,34 @@ TickType_t FillTest(TFT_t* dev, int width, int height)
return diffTick;
}
void cst_scan_gesture()
static void cst_scan_gesture()
{
int index = 0;
int index = 0;
uint8_t release_timeout = 5; // 5 times is 20 ms
while (1) {
vTaskDelay(1);
vTaskDelay(pdMS_TO_TICKS(10));
if (index++ == 500) {
index = 0;
lcdBacklightOff(&lcd_disp_dev);
if (app_display_handle.back_light_auto_off) {
if (!app_display_handle.back_light_state) {
lcdBacklightOff(&lcd_disp_dev);
app_display_handle.back_light_state = 0;
}
}
}
if (cst816t_available()) {
release_timeout = 5;
/*printf("gesture.id %u \n", data.gestureID);
printf("points %u \n", data.points);
printf("event %u \n", data.event);*/
printf("x %i \n", cst816t_data.x);
printf("y %i \n", cst816t_data.y);
printf("points %u \n", data.points);
printf("event %u \n", data.event);*/
// printf("x %i \n", cst816t_data.x);
// printf("y %i \n", cst816t_data.y);
app_display_handle.tp_pos_x = cst816t_data.x;
app_display_handle.tp_pos_y = cst816t_data.y;
lcdBacklightOn(&lcd_disp_dev);
app_display_handle.back_light_state = 1;
app_display_handle.tp_state = 0x02;
switch (cst816t_data.gestureID) {
case NONE:
@ -100,18 +113,24 @@ void cst_scan_gesture()
printf("SWIPE RIGHT \n");
break;
case SINGLE_CLICK:
printf("SINGLE CLICK \n");
// printf("SINGLE CLICK \n");
break;
case DOUBLE_CLICK:
printf("DOUBLE CLICK \n");
// printf("DOUBLE CLICK \n");
break;
case LONG_PRESS:
printf("LONG PRESS \n");
// printf("LONG PRESS \n");
break;
default:
printf("UNKNOWN \n");
// printf("UNKNOWN \n");
break;
}
} else {
if (!release_timeout) {
app_display_handle.tp_state = 0x01;
} else {
release_timeout--;
}
}
}
}
@ -124,12 +143,46 @@ static void _display_thread_entry()
}
}
static void anim_x_cb(void * var, int32_t v)
static void event_handler(lv_event_t* e)
{
lv_event_code_t code = lv_event_get_code(e);
if (code == LV_EVENT_CLICKED) {
LV_LOG_USER("Clicked");
} else if (code == LV_EVENT_VALUE_CHANGED) {
LV_LOG_USER("Toggled");
}
}
void lv_example_btn_1233(void)
{
lv_obj_t* label;
lv_obj_t* btn1 = lv_btn_create(lv_scr_act());
lv_obj_add_event_cb(btn1, event_handler, LV_EVENT_ALL, NULL);
lv_obj_align(btn1, LV_ALIGN_CENTER, 0, -40);
label = lv_label_create(btn1);
lv_label_set_text(label, "Button");
lv_obj_center(label);
lv_obj_t* btn2 = lv_btn_create(lv_scr_act());
lv_obj_add_event_cb(btn2, event_handler, LV_EVENT_ALL, NULL);
lv_obj_align(btn2, LV_ALIGN_CENTER, 0, 40);
lv_obj_add_flag(btn2, LV_OBJ_FLAG_CHECKABLE);
lv_obj_set_height(btn2, LV_SIZE_CONTENT);
label = lv_label_create(btn2);
lv_label_set_text(label, "Toggle");
lv_obj_center(label);
}
static void anim_x_cb(void* var, int32_t v)
{
lv_obj_set_x(var, v);
}
static void anim_size_cb(void * var, int32_t v)
static void anim_size_cb(void* var, int32_t v)
{
lv_obj_set_size(var, v, v);
}
@ -140,7 +193,7 @@ static void anim_size_cb(void * var, int32_t v)
void lv_example_anim_233333(void)
{
lv_obj_t * obj = lv_obj_create(lv_scr_act());
lv_obj_t* obj = lv_obj_create(lv_scr_act());
lv_obj_set_style_bg_color(obj, lv_palette_main(LV_PALETTE_RED), 0);
lv_obj_set_style_radius(obj, LV_RADIUS_CIRCLE, 0);
@ -164,8 +217,6 @@ void lv_example_anim_233333(void)
lv_anim_start(&a);
}
static void _lvgl_thread_entry()
{
vTaskDelay(10);
@ -176,7 +227,7 @@ static void _lvgl_thread_entry()
lv_port_indev_init();
lcdFillScreen(&lcd_disp_dev, WHITE);
lv_example_anim_233333();
lv_example_btn_1233();
while (1) {
lv_task_handler();
@ -193,18 +244,20 @@ static void _lvgl_thread_tick_entry()
}
}
static void lv_tick_task(void *arg) {
(void) arg;
static void lv_tick_task(void* arg)
{
(void)arg;
lv_tick_inc(LV_TICK_PERIOD_MS);
}
uint8_t app_task_display_start()
{
app_display_handle.back_light_auto_off = 1;
cst816t_begin(34, 33, 35, 36);
// xTaskCreatePinnedToCore(cst_scan_gesture, "sct test", 4096, NULL, 4, NULL, tskNO_AFFINITY);
spi_master_init(&lcd_disp_dev, CONFIG_MOSI_GPIO, CONFIG_SCLK_GPIO, CONFIG_CS_GPIO, CONFIG_DC_GPIO, CONFIG_RESET_GPIO,
CONFIG_BL_GPIO);
xTaskCreatePinnedToCore(cst_scan_gesture, "sct test", 4096, NULL, 4, NULL, tskNO_AFFINITY);
spi_master_init(&lcd_disp_dev, CONFIG_MOSI_GPIO, CONFIG_SCLK_GPIO, CONFIG_CS_GPIO, CONFIG_DC_GPIO,
CONFIG_RESET_GPIO, CONFIG_BL_GPIO);
// lcdBacklightOn(&lcd_disp_dev);
lcdInit(&lcd_disp_dev, CONFIG_WIDTH, CONFIG_HEIGHT, CONFIG_OFFSETX, CONFIG_OFFSETY);
lcdBacklightOff(&lcd_disp_dev);
@ -212,11 +265,8 @@ uint8_t app_task_display_start()
lcdFillScreen(&lcd_disp_dev, BLACK);
vTaskDelay(100);
/* Create and start a periodic timer interrupt to call lv_tick_inc */
const esp_timer_create_args_t periodic_timer_args = {
.callback = &lv_tick_task,
.name = "periodic_gui"
};
esp_timer_handle_t periodic_timer;
const esp_timer_create_args_t periodic_timer_args = { .callback = &lv_tick_task, .name = "periodic_gui" };
esp_timer_handle_t periodic_timer;
ESP_ERROR_CHECK(esp_timer_create(&periodic_timer_args, &periodic_timer));
ESP_ERROR_CHECK(esp_timer_start_periodic(periodic_timer, LV_TICK_PERIOD_MS * 1000));

View File

@ -26,7 +26,17 @@
extern "C" {
#endif
typedef struct _app_display_handle_t_
{
uint8_t back_light_auto_off;
uint8_t back_light_state;
uint8_t tp_state;
int tp_pos_x;
int tp_pos_y;
} app_display_handle_t;
extern TFT_t lcd_disp_dev;
extern app_display_handle_t app_display_handle;
/**
*

View File

@ -19,23 +19,22 @@
*/
#include <lvgl.h>
#include "st7789.h"
#include "CST816T.h"
#include "app_task_display.h"
/*A static or global variable to store the buffers*/
static lv_disp_draw_buf_t disp_buf;
static lv_disp_drv_t disp_drv; /*Descriptor of a display driver*/
lv_indev_t * touch_indev;
static lv_disp_drv_t disp_drv; /*Descriptor of a display driver*/
lv_indev_t* touch_indev;
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * LV_VER_RES_MAX / 4)
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * LV_VER_RES_MAX / 4)
static lv_disp_drv_t g_disp_drv;
static void lcd_fb_flush(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p)
static void lcd_fb_flush(lv_disp_drv_t* disp_drv, const lv_area_t* area, lv_color_t* color_p)
{
static uint16_t datas[DISP_BUF_SIZE] = {0};
int i = 0, j = 0, index = 0;
static uint16_t datas[DISP_BUF_SIZE] = { 0 };
int i = 0, j = 0, index = 0;
// for ( i = area->y1; i <= area->y2; i++) {
// for (j = area->x1; j <= area->x2; j++) {
// datas[index++] = color_p->full;
@ -46,10 +45,9 @@ static void lcd_fb_flush(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_colo
lv_disp_flush_ready(disp_drv);
}
void lv_port_disp_init(void)
{
static lv_color_t lv_disp_buf1[DISP_BUF_SIZE] = {0};
static lv_color_t lv_disp_buf1[DISP_BUF_SIZE] = { 0 };
/*Initialize `disp_buf` with the buffer(s).*/
lv_disp_draw_buf_init(&disp_buf, lv_disp_buf1, NULL, DISP_BUF_SIZE);
@ -72,20 +70,27 @@ void lv_port_disp_init(void)
g_disp_drv = disp_drv;
}
static void input_read(lv_indev_drv_t *indev_drv, lv_indev_data_t *data)
static void input_read(lv_indev_drv_t* indev_drv, lv_indev_data_t* data)
{
/* Since the origin of the LCD screen and the origin of the touch screen are
* different, the parameters passed in here need to be simply converted. */
data->point.x = cst816t_data.x;
data->point.y = cst816t_data.y;
data->point.x = app_display_handle.tp_pos_x;
data->point.y = app_display_handle.tp_pos_y;
if (cst816t_data.event == 0)
data->state = LV_INDEV_STATE_PR;
if (cst816t_data.event == 2)
data->state = LV_INDEV_STATE_PR;
if (cst816t_data.event == 1)
data->state = LV_INDEV_STATE_REL;
switch (app_display_handle.tp_state) {
case 0x01:
/* release */
data->state = LV_INDEV_STATE_REL;
break;
case 0x02:
/* press */
data->state = LV_INDEV_STATE_PR;
break;
default:
printf("tp_state = %d\r\n", app_display_handle.tp_state);
break;
}
}
void lv_port_indev_init(void)
@ -93,7 +98,7 @@ void lv_port_indev_init(void)
static lv_indev_drv_t indev_drv;
lv_indev_drv_init(&indev_drv); /*Basic initialization*/
indev_drv.type = LV_INDEV_TYPE_POINTER;
indev_drv.type = LV_INDEV_TYPE_POINTER;
indev_drv.read_cb = input_read;
/*Register the driver in LVGL and save the created input device object*/

View File

@ -46,8 +46,8 @@ void cst816t_read_touch()
cst816t_data.gestureID = rx_data[0];
cst816t_data.points = rx_data[1];
cst816t_data.event = rx_data[2] >> 6;
cst816t_data.x = rx_data[3];
cst816t_data.y = rx_data[5];
cst816t_data.x = rx_data[3] | ((rx_data[2] & 0x0f) << 8);
cst816t_data.y = rx_data[5] | ((rx_data[4] & 0x0f) << 8);
}
void IRAM_ATTR gpioHandler(void *arg)

View File

@ -14,8 +14,8 @@ typedef struct data_struct
uint8_t gestureID; // Gesture ID
uint8_t points; // Number of touch points
uint8_t event; // Event (0 = Down, 1 = Up, 2 = Contact)
int x;
int y;
uint16_t x;
uint16_t y;
uint8_t version;
uint8_t versionInfo[3];
} data_struct_t;

View File

@ -486,7 +486,7 @@ void lcdDrawFillRect(TFT_t * dev, uint16_t x1, uint16_t y1, uint16_t x2, uint16_
uint16_t _y2 = y2 + dev->_offsety;
bool ret = spi_master_write_command(dev, 0x2A); // set column(x) address
printf("ret = %d\r\n", ret);
// printf("ret = %d\r\n", ret);
spi_master_write_addr(dev, _x1, _x2);
spi_master_write_command(dev, 0x2B); // set Page(y) address
spi_master_write_addr(dev, _y1, _y2);
@ -1122,14 +1122,14 @@ void lcdDrawFillRectData(TFT_t * dev, uint16_t x1, uint16_t y1, uint16_t x2, uin
if (y1 >= dev->_height) return;
if (y2 >= dev->_height) y2=dev->_height-1;
ESP_LOGD(TAG,"offset(x)=%d offset(y)=%d",dev->_offsetx,dev->_offsety);
// ESP_LOGD(TAG,"offset(x)=%d offset(y)=%d",dev->_offsetx,dev->_offsety);
uint16_t _x1 = x1 + dev->_offsetx;
uint16_t _x2 = x2 + dev->_offsetx;
uint16_t _y1 = y1 + dev->_offsety;
uint16_t _y2 = y2 + dev->_offsety;
bool ret = spi_master_write_command(dev, 0x2A); // set column(x) address
printf("ret = %d\r\n", ret);
// printf("ret = %d\r\n", ret);
spi_master_write_addr(dev, _x1, _x2);
spi_master_write_command(dev, 0x2B); // set Page(y) address
spi_master_write_addr(dev, _y1, _y2);