✅ 更新(lvgl/TP):TP已经正常运行
结束
This commit is contained in:
parent
3e11ec2120
commit
b119eeb61d
@ -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));
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
/**
|
||||
*
|
||||
|
||||
@ -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*/
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user