T5 LVGL输出颜色总是RBG,无论怎么调整绿色值总是再最后

Wi-Fi 设备、蜂窝设备、WuKongAI、开发板、TuyaOS 移植等


Post Reply
Gzz_lin
Posts: 13

版本:T5_TUYAOS-3.12.12
问题1:颜色顺序通过驱动只能调整为RBG或者BRG,不知道为什么绿色值总是在最后,修改CONFIG_LV_COLOR_16_SWAP=y也没能解决,请问是要改什么配置或者什么初始化参数吗?

问题2:使用ai_toy例子配合自己的屏幕,滚动时严重闪屏。

请问需要改什么位置的或者什么参数?

111.png

LVGL测试代码

Code: Select all

   /**
 * @file tuya_app_main.c
 * @author www.tuya.com
 * @brief tuya_app_main module is used to 
 * @version 0.1
 * @date 2022-10-28
 *
 * @copyright Copyright (c) tuya.inc 2022
 *
 */

#include <stdlib.h>

#include "tuya_cloud_types.h"
#include "tuya_cloud_com_defs.h"
#include "tal_system.h"
#include "tal_log.h"
#include "tal_thread.h"
#include "tal_time_service.h"
#include "tkl_display.h"
#include "tkl_lvgl.h"
#include "lvgl/lvgl.h"

#include "tkl_thread.h"
#define LCD_IC_NAME "jd9853"
#define LCD_WIDTH 240
#define LCD_HEIGHT 296
STATIC TKL_THREAD_HANDLE sg_display_thrd_hdl = NULL;
STATIC THREAD_HANDLE ty_app_thread = NULL;

STATIC VOID_T __cpu0_recv_cb(UCHAR_T *buf, UINT_T len, VOID_T *args)
{
    // struct ipc_msg_s *send_msg = (struct ipc_msg_s *)buf;

// bk_printf("---> cpu0 ipc recv data cmd:0x%02x \r\n", send_msg->buf[0]);
}

void tuya_board_lcd_init(TKL_DISP_INFO_S *lcd)
{

lcd->ll_ctrl.power_ctrl_pin     = TUYA_GPIO_NUM_MAX;     // no lcd ldo
lcd->ll_ctrl.power_active_level = TUYA_GPIO_LEVEL_HIGH;
lcd->ll_ctrl.rgb_mode           = TKL_DISP_PIXEL_FMT_RGB565;

lcd->ll_ctrl.bl.io              = TUYA_GPIO_NUM_47;
lcd->ll_ctrl.bl.mode            = TKL_DISP_BL_GPIO;
lcd->ll_ctrl.bl.active_level    = TUYA_GPIO_LEVEL_HIGH;

lcd->ll_ctrl.dc_pin             = TUYA_GPIO_NUM_17;
lcd->ll_ctrl.dc_cmd_level       = TUYA_GPIO_LEVEL_LOW;

// lcd->ll_ctrl.spi.clk            = TUYA_GPIO_NUM_14;
// lcd->ll_ctrl.spi.csx            = TUYA_GPIO_NUM_19;
// lcd->ll_ctrl.spi.sda            = TUYA_GPIO_NUM_16;
// lcd->ll_ctrl.spi.rst_mode       = TKL_DISP_GPIO_RESET;
// lcd->ll_ctrl.spi.rst            = TUYA_GPIO_NUM_MAX;

lcd->ll_ctrl.tp.tp_i2c_clk      = TUYA_GPIO_NUM_MAX;
lcd->ll_ctrl.tp.tp_i2c_sda      = TUYA_GPIO_NUM_MAX;
lcd->ll_ctrl.tp.tp_rst          = TUYA_GPIO_NUM_MAX;
lcd->ll_ctrl.tp.tp_intr         = TUYA_GPIO_NUM_MAX;

lcd->ll_ctrl.rst_pin            = TUYA_GPIO_NUM_18;
lcd->ll_ctrl.rst_active_level   = TUYA_GPIO_LEVEL_LOW;

lcd->ll_ctrl.spi_using_qspi=FALSE;

}
STATIC VOID_T tuya_app_thread(VOID_T *arg)
{
    TY_INIT_PARAMS_S init_param = {0};
    init_param.init_db = TRUE;
    strcpy(init_param.sys_env, TARGET_PLATFORM);
    tuya_iot_init_params(NULL, &init_param);
    tal_log_set_manage_attr(TAL_LOG_LEVEL_DEBUG);

/*测试开始 */
TKL_DISP_DEVICE_S sg_lvgl_lcd;
TKL_DISP_INFO_S sg_lvgl_info;
TAL_PR_DEBUG("test start!");
memset(&sg_lvgl_lcd, 0, sizeof(TKL_DISP_DEVICE_S));
memset(&sg_lvgl_info, 0, sizeof(TKL_DISP_INFO_S));

sg_lvgl_info.width      = LCD_WIDTH;
sg_lvgl_info.height     = LCD_HEIGHT;
sg_lvgl_info.fps        = 20;
sg_lvgl_info.rotation   = TKL_DISP_ROTATION_0;
// sg_lvgl_info.format     = TKL_DISP_PIXEL_FMT_RGB565;

sg_lvgl_info.ll_ctrl.enable_lcd_pipeline = 1; // lvgl : 1, dvp:0
snprintf(sg_lvgl_info.ll_ctrl.ic_name, IC_NAME_LENGTH, "%s", LCD_IC_NAME);//"ili9488"
sg_lvgl_lcd.device_info = &sg_lvgl_info;
TAL_PR_DEBUG("============lcd init!");
tuya_board_lcd_init(&sg_lvgl_info);

sg_lvgl_info.ll_ctrl.type = TUYA_LCD_TYPE_SPI;
TAL_PR_DEBUG("============display init!");

tkl_disp_init(&sg_lvgl_lcd, NULL);

TKL_LVGL_CFG_T lv_cfg = {
    .recv_cb = __cpu0_recv_cb,
    .recv_arg = NULL,
};
TAL_PR_DEBUG("============lvgl_init!");
tkl_lvgl_init(&sg_lvgl_info, &lv_cfg);
TAL_PR_DEBUG("============lvgl start!");
tkl_lvgl_start();
TAL_PR_DEBUG("============set bl!");
tkl_disp_set_brightness(NULL, 100);



while(1)
{
    TAL_PR_DEBUG("============display init done!");

    tal_system_sleep(1000);
}
/*测试结束 */
tal_thread_delete(ty_app_thread);
ty_app_thread = NULL;
}

VOID_T tuya_app_main(VOID)
{
#if defined(ENABLE_EXT_RAM) && (ENABLE_EXT_RAM == 1)
    extern VOID_T tkl_system_psram_malloc_force_set(BOOL_T enable);
    tkl_system_psram_malloc_force_set(TRUE);
#endif

THREAD_CFG_T thrd_param = {10240, 4, "tuya_app_main"};
tal_thread_create_and_start(&ty_app_thread, NULL, NULL, tuya_app_thread, NULL, &thrd_param);
}


#if defined(ENABLE_EXT_RAM) && (ENABLE_EXT_RAM == 1)
void tuya_gui_pause(void)
{
    //! TODO:
}

void tuya_gui_resume(void)
{
    //! TODO:

}

STATIC VOID_T __cpu1_recv_cb(UCHAR_T *buf, UINT_T len, VOID_T *args)
{

   
} STATIC VOID_T __lv_draw() { lv_obj_t* screen = lv_obj_create(lv_scr_act()); lv_obj_set_size(screen,LCD_WIDTH,LCD_HEIGHT); lv_obj_set_style_pad_all(screen, 0, 0); lv_obj_set_style_bg_color(screen, lv_color_hex(0xFFFFFF), 0); lv_obj_t* lab1=lv_label_create(screen); lv_label_set_text(lab1,"hello world"); lv_obj_set_pos(lab1,10,100); lv_obj_t* obj = lv_obj_create(screen); lv_obj_set_size(obj,20,20); lv_obj_set_style_bg_color(obj,lv_color_hex(0xFF0000),0); lv_obj_set_pos(obj,100,100); lv_obj_t* obj2 = lv_obj_create(screen); lv_obj_set_size(obj2,20,20); lv_obj_set_style_bg_color(obj2,lv_color_hex(0x00FF00),0); lv_obj_set_pos(obj2,120,100); lv_obj_t* obj3 = lv_obj_create(screen); lv_obj_set_size(obj3,20,20); lv_obj_set_style_bg_color(obj3,lv_color_hex(0x0000FF),0); lv_obj_set_pos(obj3,140,100); } STATIC VOID_T __tuya_ai_display_thread(VOID_T *arg) { // TY_DISPLAY_MSG_T disp_msg; // OPERATE_RET rt = OPRT_OK; __lv_draw();
for (;;) { // rt = tkl_queue_fetch(disp_msg_queue, &disp_msg, TKL_QUEUE_WAIT_FROEVER); lv_vendor_disp_lock(); // tuya_ui_app(&disp_msg); lv_vendor_disp_unlock(); // if (disp_msg.data && disp_msg.len) { // tkl_system_psram_free(disp_msg.data); // } } } VOID_T tuya_gui_main(VOID_T) { TKL_DISP_INFO_S info; info.width = LCD_WIDTH; info.height = LCD_HEIGHT; // info.format = TKL_DISP_PIXEL_FMT_RGB565; info.fps = 20; info.rotation = TKL_DISP_ROTATION_0; snprintf(info.ll_ctrl.ic_name, IC_NAME_LENGTH, "%s", LCD_IC_NAME); TKL_LVGL_CFG_T lv_cfg = { .recv_cb = __cpu1_recv_cb, .recv_arg = NULL, }; tkl_lvgl_init(&info, &lv_cfg); if (NULL == sg_display_thrd_hdl) { tkl_thread_create_in_psram(&sg_display_thrd_hdl, "ai_display", 1024*6, 4, __tuya_ai_display_thread, NULL); }
} #endif

屏幕驱动代码

Code: Select all

// Copyright 2020-2021 Beken
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include <common/bk_include.h>
#include <driver/lcd_types.h>
#define __WIDTH 240
#define __HEIGHT 296



static const lcd_qspi_init_cmd_t jd9853_init_cmds[] =
{
  {0xDF,{0x98,0x53},2},
  {0xDE,{0x00},1},
  {0xB2,{0x25},1},
  {0xB7,{0x00,0x21,0x00,0x49},4},
  {0xBB,{0x4F,0x1A,0x55,0x73,0x6F,0xF0},6},
  {0xC0,{0x44,0xA4},2},
  {0xC1,{0x12},1},
  {0xC3,{0x7D,0x07,0x14,0x06,0xC8,0x71,0x6C,0x77},8},
  {0xC4,{0x00,0x00,0x94,0x79,0x25,0x0A,0x16,0x79,0x25,0x0A,0x16,0x82},12},
  {0xC8,{0x3F,0x34,0x2B,0x20,0x2A,0x2C,0x24,0x24,0x21,0x22,0x20,0x15,0x10,0x0B,0x06,0x00,0x3F,0x34,0x2B,0x20,0x2A,0x2C,0x24,0x24,0x21,0x22,0x20,0x15,0x10,0x0B,0x06,0x00},32},
  {0xD0,{0x04,0x06,0x6B,0x0F,0x00},5},
  {0xD7,{0x00,0x30},2},
  {0xE6,{0x14},1},
  {0xDE,{0x01},1},
  {0xB7,{0x03,0x13,0xEF,0x35,0x35},5},
  {0xC1,{0x14,0x15,0xC0},3},
  {0xC2,{0x06,0x3A},2},
  {0xC4,{0x72,0x12},2},
  {0xBE,{0x00},1},
  {0xDE,{0x00},1},
  {0x35,{0x00},1},
  {0x3A,{0x05},1},
  {0x36,{0x08},1},
  {0x2A,{0x00,0x00,0x00,0xEF},4},
  {0x2B,{0x00,0x00,0x01,0x27},4},
  {0x11,{0x00},0},
  {0x00,{0x64}, 0xFF},                      // sleep
  {0x29,{0x00},0}
};

static const lcd_spi_t lcd_spi_jd9853_config =
{
    .clk = LCD_QSPI_30M,
    .init_cmd = jd9853_init_cmds,
    .device_init_cmd_len = sizeof(jd9853_init_cmds) / sizeof (lcd_qspi_init_cmd_t),
};

const lcd_device_t lcd_device_jd9853 =
{
    .id = LCD_DEVICE_JD9853,
    .name = "jd9853",
    .type = LCD_TYPE_SPI,
    .ppi = (__WIDTH<<16)|__HEIGHT,
    .spi = &lcd_spi_jd9853_config,
    .init = NULL,
    .lcd_off = NULL,
};


Tags:
Post Reply