diff --git a/APP_Framework/Applications/app_test/test_lcd.c b/APP_Framework/Applications/app_test/test_lcd.c index 36c8b6cf6..0e8b4be28 100755 --- a/APP_Framework/Applications/app_test/test_lcd.c +++ b/APP_Framework/Applications/app_test/test_lcd.c @@ -27,6 +27,19 @@ void LcdDemo(void) { int lcd_fd = PrivOpen("/dev/lcd_dev",O_RDWR); LcdWriteParam disp_info; + + disp_info.type = 0; + disp_info.string_info.x_pos = 80; + disp_info.string_info.y_pos = 80; + disp_info.string_info.width = 250; + disp_info.string_info.height = 24; + disp_info.string_info.font_size = 24; + disp_info.string_info.addr = "wecome test lcd"; + disp_info.string_info.font_color = GREEN; + disp_info.string_info.back_color = BLUE; + PrivWrite(lcd_fd, &disp_info, sizeof(LcdWriteParam)); + PrivTaskDelay(2000); + disp_info.type = 1; lv_color_t redcolor = { .ch = { @@ -40,19 +53,10 @@ void LcdDemo(void) disp_info.pixel_info.y_startpos = 0; disp_info.pixel_info.y_endpos = 50; disp_info.pixel_info.pixel_color = &redcolor; - PrivWrite(lcd_fd, &disp_info, sizeof(LcdWriteParam)); + PrivTaskDelay(2000); - disp_info.type = 0; - disp_info.string_info.x_pos = 80; - disp_info.string_info.y_pos = 80; - disp_info.string_info.width = 250; - disp_info.string_info.height = 24; - disp_info.string_info.font_size = 24; - disp_info.string_info.addr = "wecome test lcd"; - disp_info.string_info.font_color = GREEN; - disp_info.string_info.back_color = BLUE; - + disp_info.type = SHOW_TRIANGLE; PrivWrite(lcd_fd, &disp_info, sizeof(LcdWriteParam)); } diff --git a/APP_Framework/Framework/transform_layer/nuttx/transform.h b/APP_Framework/Framework/transform_layer/nuttx/transform.h index 26f8a177c..766e9a129 100644 --- a/APP_Framework/Framework/transform_layer/nuttx/transform.h +++ b/APP_Framework/Framework/transform_layer/nuttx/transform.h @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -44,6 +45,7 @@ #ifdef CONFIG_USER_TEST_LCD #ifdef CONFIG_K210_LCD # include "nuttx/lcd/lt768.h" +# include "nuttx/lcd/lt768_learn.h" # include "nuttx/lcd/lt768_lib.h" # include "nuttx/lcd/if_port.h" #else @@ -53,14 +55,6 @@ #endif #endif -#define PRIV_LCD_DEV "/dev/lcd_dev" -#define MY_DISP_HOR_RES 480 -#define MY_DISP_VER_RES 272 - -#define PRIV_TOUCH_DEV "/dev/touch_dev" -#define MY_INDEV_X 480 -#define MY_INDEV_Y 272 - typedef uint8_t uint8; typedef uint16_t uint16; typedef uint32_t uint32; diff --git a/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong-riscv64/src/k210_lcd.c b/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong-riscv64/src/k210_lcd.c index 813c1d1f0..e5a54f668 100755 --- a/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong-riscv64/src/k210_lcd.c +++ b/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong-riscv64/src/k210_lcd.c @@ -29,6 +29,7 @@ #include "nuttx/lcd/lt768.h" #include "nuttx/lcd/lt768_lib.h" #include "nuttx/lcd/if_port.h" +#include "nuttx/lcd/lt768_learn.h" #include #include #include @@ -255,32 +256,75 @@ static ssize_t lcd_read(FAR struct file *filep, FAR char *buffer, size_t buflen) /**************************************************************************** * Name: ch438_write ****************************************************************************/ -static ssize_t lcd_write(FAR struct file *filep, FAR const char *buffer, size_t buflen) + static ssize_t lcd_write(FAR struct file *filep, FAR const char *buffer, size_t buflen) { + ssize_t ret = buflen; if (buffer == NULL) { return -ERROR; - } + } LcdWriteParam * show = (LcdWriteParam *)buffer; - /* output string */ - if(0 == show->type) - { - LT768_Select_Internal_Font_Init(show->string_info.height, 1, 1, 1, 1); - LT768_Print_Internal_Font_String(show->string_info.x_pos, show->string_info.y_pos, show->string_info.font_color,show->string_info.back_color,show->string_info.addr); - return buflen; - } - /* output dot */ - else if(1 == show->type) - { - LT768_DrawSquare_Fill(show->pixel_info.x_startpos,show->pixel_info.y_startpos, show->pixel_info.x_endpos, show->pixel_info.y_endpos, *(uint32_t *)(show->pixel_info.pixel_color)); - return buflen; - } - else - { - return -ERROR; - } -} + /* output string */ + switch (show->type) + { + + /* output string */ + case SHOW_STRING: + LT768_DrawSquare_Fill(0, 0, LCD_XSIZE_TFT, LCD_YSIZE_TFT, WHITE); + LT768_Select_Internal_Font_Init(show->string_info.height, 1, 1, 1, 1); + LT768_Print_Internal_Font_String(show->string_info.x_pos, show->string_info.y_pos, show->string_info.font_color,show->string_info.back_color,show->string_info.addr); + break; + + /* output dot */ + case SHOW_WDOT: + LT768_DrawSquare_Fill(0, 0, LCD_XSIZE_TFT, LCD_YSIZE_TFT, WHITE); + LT768_DrawSquare_Fill(show->pixel_info.x_startpos,show->pixel_info.y_startpos, show->pixel_info.x_endpos, show->pixel_info.y_endpos, *(uint32_t *)(show->pixel_info.pixel_color)); + break; + + /* output rgb */ + case SHOW_RGB: + LT768_DrawSquare_Fill(0, 0, LCD_XSIZE_TFT, LCD_YSIZE_TFT, WHITE); + Display_RGB(); + break; + + /* output pip */ + case SHOW_PIP: + LT768_DrawSquare_Fill(0, 0, LCD_XSIZE_TFT, LCD_YSIZE_TFT, WHITE); + Display_PIP(); + break; + + /* output Internal Font */ + case SHOW_INTERNAL_FONT: + LT768_DrawSquare_Fill(0, 0, LCD_XSIZE_TFT, LCD_YSIZE_TFT, WHITE); + Display_Internal_Font(); + break; + + /* output Outside Font */ + case SHOW_OUTSIDE_FONT: + LT768_DrawSquare_Fill(0, 0, LCD_XSIZE_TFT, LCD_YSIZE_TFT, WHITE); + Display_Outside_Font(); + break; + + /* output Triangle */ + case SHOW_TRIANGLE: + LT768_DrawSquare_Fill(0, 0, LCD_XSIZE_TFT, LCD_YSIZE_TFT, WHITE); + Display_Triangle(); + break; + + /* output picture */ + case SHOW_PICTURE: + LT768_DrawSquare_Fill(0, 0, LCD_XSIZE_TFT, LCD_YSIZE_TFT, WHITE); + Display_Picture(); + break; + + default: + ret = -ERROR; + break; + } + + return ret; +} /**************************************************************************** * Name: k210_lcd_initialize * diff --git a/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/drivers/lcd/Make.defs b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/drivers/lcd/Make.defs index 392c7894d..77269bc02 100755 --- a/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/drivers/lcd/Make.defs +++ b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/drivers/lcd/Make.defs @@ -118,7 +118,7 @@ ifeq ($(CONFIG_LCD_ILI9341),y) endif ifeq ($(CONFIG_LCD_LT768),y) - CSRCS += lt768.c lt768_lib.c + CSRCS += lt768.c lt768_lib.c lt768_learn.c endif ifeq ($(CONFIG_LCD_LCDDRV_SPIIF),y) diff --git a/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/drivers/lcd/lt768_learn.c b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/drivers/lcd/lt768_learn.c new file mode 100644 index 000000000..390be1177 --- /dev/null +++ b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/drivers/lcd/lt768_learn.c @@ -0,0 +1,545 @@ +/* +* Copyright (c) 2022 AIIT XUOS Lab +* XiUOS is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* See the Mulan PSL v2 for more details. +*/ + +/** + * @file lt768_learn.c + * @brief lt768_learn.c + * @version 1.0 + * @author AIIT XUOS Lab + * @date 2022.9.19 + */ +#include +#include "nuttx/arch.h" +#include "nuttx/lcd/lt768_learn.h" + +const uint8_t g_Image_pen_il[256] = { /* 0X00,0X02,0X20,0X00,0X20,0X00, */ +0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA, +0X96,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0X91,0X6A,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA, +0XA4,0X15,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XA4,0X00,0X6A,0XAA,0XAA,0XAA,0XAA,0XAA, +0XA9,0X01,0X1A,0XAA,0XAA,0XAA,0XAA,0XAA,0XA9,0X00,0X46,0XAA,0XAA,0XAA,0XAA,0XAA, +0XAA,0X40,0X51,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0X90,0X14,0X6A,0XAA,0XAA,0XAA,0XAA, +0XAA,0XA4,0X05,0X1A,0XAA,0XAA,0XAA,0XAA,0XAA,0XA9,0X01,0X46,0XAA,0XAA,0XAA,0XAA, +0XAA,0XAA,0X40,0X51,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0X90,0X14,0X6A,0XAA,0XAA,0XAA, +0XAA,0XAA,0XA4,0X05,0X1A,0XAA,0XAA,0XAA,0XAA,0XAA,0XA9,0X01,0X46,0XAA,0XAA,0XAA, +0XAA,0XAA,0XAA,0X40,0X51,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0X90,0X14,0X69,0XAA,0XAA, +0XAA,0XAA,0XAA,0XA4,0X01,0X14,0X6A,0XAA,0XAA,0XAA,0XAA,0XA9,0X00,0X44,0X1A,0XAA, +0XAA,0XAA,0XAA,0XAA,0X40,0X11,0X06,0XAA,0XAA,0XAA,0XAA,0XAA,0X90,0X04,0X41,0XAA, +0XAA,0XAA,0XAA,0XAA,0XA4,0X01,0X10,0X6A,0XAA,0XAA,0XAA,0XAA,0XA9,0X00,0X44,0X1A, +0XAA,0XAA,0XAA,0XAA,0XAA,0X40,0X11,0X1A,0XAA,0XAA,0XAA,0XAA,0XAA,0X90,0X04,0X1A, +0XAA,0XAA,0XAA,0XAA,0XAA,0XA4,0X01,0X1A,0XAA,0XAA,0XAA,0XAA,0XAA,0XA9,0X00,0X1A, +0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0X40,0X6A,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0X95,0XAA, +0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA, +}; + +const uint8_t g_Image_arrow_il[256] = { /* 0X00,0X02,0X20,0X00,0X20,0X00, */ +0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0X6A,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA, +0X5A,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0X46,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA, +0X41,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0X40,0X6A,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA, +0X40,0X1A,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0X40,0X06,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA, +0X40,0X01,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0X40,0X00,0X6A,0XAA,0XAA,0XAA,0XAA,0XAA, +0X40,0X00,0X1A,0XAA,0XAA,0XAA,0XAA,0XAA,0X40,0X00,0X06,0XAA,0XAA,0XAA,0XAA,0XAA, +0X40,0X00,0X01,0XAA,0XAA,0XAA,0XAA,0XAA,0X40,0X00,0X00,0X6A,0XAA,0XAA,0XAA,0XAA, +0X40,0X00,0X00,0X1A,0XAA,0XAA,0XAA,0XAA,0X40,0X00,0X00,0X06,0XAA,0XAA,0XAA,0XAA, +0X40,0X00,0X00,0X01,0XAA,0XAA,0XAA,0XAA,0X40,0X00,0X00,0X00,0X6A,0XAA,0XAA,0XAA, +0X40,0X00,0X15,0X55,0X5A,0XAA,0XAA,0XAA,0X40,0X10,0X1A,0XAA,0XAA,0XAA,0XAA,0XAA, +0X40,0X64,0X06,0XAA,0XAA,0XAA,0XAA,0XAA,0X41,0XA4,0X06,0XAA,0XAA,0XAA,0XAA,0XAA, +0X46,0XA9,0X01,0XAA,0XAA,0XAA,0XAA,0XAA,0X5A,0XA9,0X01,0XAA,0XAA,0XAA,0XAA,0XAA, +0X6A,0XAA,0X40,0X6A,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0X40,0X6A,0XAA,0XAA,0XAA,0XAA, +0XAA,0XAA,0X90,0X1A,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0X90,0X1A,0XAA,0XAA,0XAA,0XAA, +0XAA,0XAA,0XA4,0X06,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XA4,0X06,0XAA,0XAA,0XAA,0XAA, +0XAA,0XAA,0XA9,0X5A,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA, +}; + +const uint8_t g_Image_busy_im[256] = { /* 0X00,0X02,0X20,0X00,0X20,0X00, */ +0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA, +0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0X55,0X55,0X55,0X55,0X6A,0XAA, +0XAA,0XAA,0X54,0X00,0X00,0X05,0X6A,0XAA,0XAA,0XAA,0X55,0X55,0X55,0X55,0X6A,0XAA, +0XAA,0XAA,0X94,0X00,0X00,0X05,0XAA,0XAA,0XAA,0XAA,0X94,0X00,0X00,0X05,0XAA,0XAA, +0XAA,0XAA,0X94,0X44,0X44,0X45,0XAA,0XAA,0XAA,0XAA,0X94,0X11,0X11,0X05,0XAA,0XAA, +0XAA,0XAA,0X95,0X04,0X44,0X15,0XAA,0XAA,0XAA,0XAA,0XA5,0X41,0X10,0X56,0XAA,0XAA, +0XAA,0XAA,0XA9,0X50,0X41,0X5A,0XAA,0XAA,0XAA,0XAA,0XAA,0X54,0X05,0X6A,0XAA,0XAA, +0XAA,0XAA,0XAA,0X94,0X05,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0X94,0X05,0XAA,0XAA,0XAA, +0XAA,0XAA,0XAA,0X94,0X45,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0X94,0X05,0XAA,0XAA,0XAA, +0XAA,0XAA,0XAA,0X50,0X01,0X6A,0XAA,0XAA,0XAA,0XAA,0XA9,0X40,0X40,0X5A,0XAA,0XAA, +0XAA,0XAA,0XA5,0X00,0X10,0X16,0XAA,0XAA,0XAA,0XAA,0X94,0X00,0X00,0X05,0XAA,0XAA, +0XAA,0XAA,0X94,0X04,0X44,0X05,0XAA,0XAA,0XAA,0XAA,0X94,0X11,0X11,0X05,0XAA,0XAA, +0XAA,0XAA,0X94,0X44,0X44,0X45,0XAA,0XAA,0XAA,0XAA,0X95,0X11,0X11,0X15,0XAA,0XAA, +0XAA,0XAA,0X55,0X55,0X55,0X55,0X6A,0XAA,0XAA,0XAA,0X54,0X00,0X00,0X05,0X6A,0XAA, +0XAA,0XAA,0X55,0X55,0X55,0X55,0X6A,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA, +0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA, +}; + +const uint8_t g_Image_no_im[256] = { /* 0X00,0X02,0X20,0X00,0X20,0X00, */ +0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA, +0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0X95,0X55,0XAA,0XAA,0XAA, +0XAA,0XAA,0XA9,0X40,0X00,0X5A,0XAA,0XAA,0XAA,0XAA,0X94,0X00,0X00,0X05,0XAA,0XAA, +0XAA,0XAA,0X40,0X00,0X00,0X00,0X6A,0XAA,0XAA,0XA9,0X00,0X15,0X55,0X00,0X1A,0XAA, +0XAA,0XA4,0X00,0X6A,0XAA,0X50,0X06,0XAA,0XAA,0XA4,0X00,0X6A,0XAA,0XA4,0X06,0XAA, +0XAA,0X90,0X00,0X1A,0XAA,0XA9,0X01,0XAA,0XAA,0X90,0X10,0X06,0XAA,0XA9,0X01,0XAA, +0XAA,0X40,0X64,0X01,0XAA,0XAA,0X40,0X6A,0XAA,0X40,0X69,0X00,0X6A,0XAA,0X40,0X6A, +0XAA,0X40,0X6A,0X40,0X1A,0XAA,0X40,0X6A,0XAA,0X40,0X6A,0X90,0X06,0XAA,0X40,0X6A, +0XAA,0X40,0X6A,0XA4,0X01,0XAA,0X40,0X6A,0XAA,0X40,0X6A,0XA9,0X00,0X6A,0X40,0X6A, +0XAA,0X40,0X6A,0XAA,0X40,0X1A,0X40,0X6A,0XAA,0X90,0X1A,0XAA,0X90,0X05,0X01,0XAA, +0XAA,0X90,0X1A,0XAA,0XA4,0X00,0X01,0XAA,0XAA,0XA4,0X06,0XAA,0XA9,0X00,0X06,0XAA, +0XAA,0XA4,0X01,0X6A,0XAA,0X40,0X06,0XAA,0XAA,0XA9,0X00,0X15,0X55,0X00,0X1A,0XAA, +0XAA,0XAA,0X40,0X00,0X00,0X00,0X6A,0XAA,0XAA,0XAA,0X94,0X00,0X00,0X05,0XAA,0XAA, +0XAA,0XAA,0XA9,0X40,0X00,0X5A,0XAA,0XAA,0XAA,0XAA,0XAA,0X95,0X55,0XAA,0XAA,0XAA, +0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA, +0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA, +}; + + +void Display_RGB(void) +{ + Select_Main_Window_16bpp(); + Main_Image_Start_Address(0); + Main_Image_Width(LCD_XSIZE_TFT); + Main_Window_Start_XY(0,0); + Canvas_Image_Start_address(0); + Canvas_image_width(LCD_XSIZE_TFT); + Active_Window_XY(0,0); + Active_Window_WH(LCD_XSIZE_TFT,LCD_YSIZE_TFT); + + while(1) + { + BTE_Solid_Fill(0,LCD_XSIZE_TFT,0,0,RED,LCD_XSIZE_TFT,LCD_YSIZE_TFT); + up_mdelay(500); + BTE_Solid_Fill(0,LCD_XSIZE_TFT,0,0,GREEN,LCD_XSIZE_TFT,LCD_YSIZE_TFT); + up_mdelay(500); + BTE_Solid_Fill(0,LCD_XSIZE_TFT,0,0,BLUE,LCD_XSIZE_TFT,LCD_YSIZE_TFT); + up_mdelay(500); + } +} + +#define Picture_1_Addr 0 +#define Picture_2_Addr (LCD_XSIZE_TFT*LCD_YSIZE_TFT*2) +#define Picture_3_Addr (LCD_XSIZE_TFT*LCD_YSIZE_TFT*4) +#define Picture_4_Addr (LCD_XSIZE_TFT*LCD_YSIZE_TFT*6) + +void Display_Picture(void) +{ + uint8_t i = 0; + + Select_Main_Window_16bpp(); + Main_Image_Start_Address(0); + Main_Image_Width(LCD_XSIZE_TFT); + Main_Window_Start_XY(0,0); + Canvas_Image_Start_address(0); + Canvas_image_width(LCD_XSIZE_TFT); + Active_Window_XY(0,0); + Active_Window_WH(LCD_XSIZE_TFT,LCD_YSIZE_TFT); + + while(1) + { + for(i = 0;i < 4;i++) + { + switch(i) + { + case 0:LT768_DMA_24bit_Block(1,0,0,0,LCD_XSIZE_TFT,LCD_YSIZE_TFT,LCD_XSIZE_TFT,Picture_1_Addr);break; + case 1:LT768_DMA_24bit_Block(1,0,0,0,LCD_XSIZE_TFT,LCD_YSIZE_TFT,LCD_XSIZE_TFT,Picture_2_Addr);break; + case 2:LT768_DMA_24bit_Block(1,0,0,0,LCD_XSIZE_TFT,LCD_YSIZE_TFT,LCD_XSIZE_TFT,Picture_3_Addr);break; + case 3:LT768_DMA_24bit_Block(1,0,0,0,LCD_XSIZE_TFT,LCD_YSIZE_TFT,LCD_XSIZE_TFT,Picture_4_Addr);break; + default: break; + } + up_mdelay(500); + } + } +} + + +void Display_PIP(void) +{ + unsigned int i; + + Select_Main_Window_16bpp(); + Main_Image_Start_Address(0); + Main_Image_Width(LCD_XSIZE_TFT); + Main_Window_Start_XY(0,0); + Canvas_Image_Start_address(0); + Canvas_image_width(LCD_XSIZE_TFT); + Active_Window_XY(0,0); + Active_Window_WH(LCD_XSIZE_TFT,LCD_YSIZE_TFT); + + BTE_Solid_Fill(0,LCD_XSIZE_TFT,0,0,BLUE2,LCD_XSIZE_TFT,LCD_YSIZE_TFT); // 底图颜色 + BTE_Solid_Fill(LCD_XSIZE_TFT*LCD_YSIZE_TFT*2,LCD_XSIZE_TFT,0,0,RED,LCD_XSIZE_TFT,LCD_YSIZE_TFT); // PIP1颜色 + BTE_Solid_Fill(LCD_XSIZE_TFT*LCD_YSIZE_TFT*4,LCD_XSIZE_TFT,0,0,GREEN,LCD_XSIZE_TFT,LCD_YSIZE_TFT); // PIP2颜色 + + LT768_PIP_Init(1,1,LCD_XSIZE_TFT*LCD_YSIZE_TFT*2,250,250,1024,0,175,250,250); // 初始化PIP1 + LT768_PIP_Init(1,2,LCD_XSIZE_TFT*LCD_YSIZE_TFT*4,300,300,1024,774,150,300,300); // 初始化PIP2 + + while(1) + { + for(i=0;i<550;i=i+2) + { + LT768_Set_DisWindowPos(1,1,i,175); + LT768_Set_DisWindowPos(1,2,734-i,150); + up_mdelay(5); + } + + for(i=0;i<550;i=i+2) + { + LT768_Set_DisWindowPos(1,1,550-i,175); + LT768_Set_DisWindowPos(1,2,734-550+i,150); + up_mdelay(5); + } + } +} + +void Display_Internal_Font(void) +{ + char c[2] = "0"; + unsigned int i = 0; + unsigned int x = 0; + unsigned int y = 0; + unsigned int z = 0; + + Select_Main_Window_16bpp(); + Main_Image_Start_Address(0); + Main_Image_Width(LCD_XSIZE_TFT); + Main_Window_Start_XY(0,0); + Canvas_Image_Start_address(0); + Canvas_image_width(LCD_XSIZE_TFT); + Active_Window_XY(0,0); + Active_Window_WH(LCD_XSIZE_TFT,LCD_YSIZE_TFT); + + while(1) + { + LT768_DrawSquare_Fill(0,0,LCD_XSIZE_TFT,LCD_YSIZE_TFT,BLUE2); + + LT768_Select_Internal_Font_Init(16,1,1,0,0); + LT768_Print_Internal_Font_String(0,10,BLACK,BLUE2,"Embedded 8x16 ASCII Character"); + + LT768_Select_Internal_Font_Init(24,1,1,0,0); + LT768_Print_Internal_Font_String(0,30,BLUE,BLUE2,"Embedded 12x24 ASCII Character"); + + LT768_Select_Internal_Font_Init(32,1,1,0,0); + LT768_Print_Internal_Font_String(0,55,GREEN,BLUE2,"Embedded 16x32 ASCII Character"); + + LT768_Print_Internal_Font_String(0,95,RED,BLUE2,"The Text Cursor"); + + for(i = 0 ; i < 14 ; i++) + { + up_mdelay(100); + LT768_Text_cursor_Init(1,15,1+i,15-i); + } + up_mdelay(100); + LT768_Text_cursor_Init(1,15,10,2); + + + c[0] = '0'; + for(i = 0 ; i < 10 ; i++) + { + up_mdelay(50); + LT768_Print_Internal_Font_String(10+16*i,135,RED,BLUE2,&c[0]); + c[0]++; + } + + c[0] = 0; + x = 0; + y = 175; + z = 0; + for(i = 0 ; i < 127 ; i++) + { + up_mdelay(50); + x = z * 16; + z++; + if(x>1024) + { + y = y + 40; + x = 0; + z = 0; + } + + LT768_Print_Internal_Font_String(x,y,RED,BLUE2,&c[0]); + c[0]++; + } + + up_mdelay(1000); + up_mdelay(1000); + + + LT768_DMA_24bit_Block(1,0,200,300,600,280,1024,Picture_3_Addr); + + LT768_Graphic_cursor_Init(1,0xff,0x00,0,0,(uint8_t*)g_Image_pen_il); + LT768_Graphic_cursor_Init(2,0xff,0x00,0,0,(uint8_t*)g_Image_arrow_il); + LT768_Graphic_cursor_Init(3,0xff,0x00,0,0,(uint8_t*)g_Image_busy_im); + LT768_Graphic_cursor_Init(4,0xff,0x00,0,0,(uint8_t*)g_Image_no_im); + + + LT768_Set_Graphic_cursor_Pos(1,100,300); + up_mdelay(500); + LT768_Set_Graphic_cursor_Pos(2,100,300); + up_mdelay(500); + LT768_Set_Graphic_cursor_Pos(3,100,300); + up_mdelay(500); + LT768_Set_Graphic_cursor_Pos(4,100,300); + up_mdelay(500); + LT768_Set_Graphic_cursor_Pos(1,100,300); + + for(i = 100 ; i < 924 ; i++) + { + LT768_Set_Graphic_cursor_Pos(1,i,90); + up_mdelay(2); + } + + for(i = 200 ; i < 800 ; i++) + { + LT768_Set_Graphic_cursor_Pos(2,i,i-200); + up_mdelay(2); + } + + for(i = 800 ; i > 100 ; i--) + { + LT768_Set_Graphic_cursor_Pos(3,i,800-i); + up_mdelay(2); + } + + for(i = 924 ; i > 100 ; i--) + { + LT768_Set_Graphic_cursor_Pos(4,i,400); + up_mdelay(2); + } + + up_mdelay(1000); + up_mdelay(1000); + + LT768_Disable_Text_Cursor(); + LT768_Disable_Graphic_Cursor(); + } +} + + + +#define MEMORY_ADDR_16 0x003E0D760 +#define MEMORY_ADDR_24 0x003E537E0 +#define MEMORY_ADDR_32 0x003EEBD00 + +#define FLASH_ADDR_16 0x00829150 +#define FLASH_ADDR_24 0x0078DC20 +#define FLASH_ADDR_32 0x00679A10 + +#define SIZE_16_NUM 0x00045080 +#define SIZE_24_NUM 0x0009B520 +#define SIZE_32_NUM 0x00114200 + +void Display_Outside_Font(void) +{ + Select_Main_Window_16bpp(); + Main_Image_Start_Address(0); + Main_Image_Width(LCD_XSIZE_TFT); + Main_Window_Start_XY(0,0); + Canvas_Image_Start_address(0); + Canvas_image_width(LCD_XSIZE_TFT); + Active_Window_XY(0,0); + Active_Window_WH(LCD_XSIZE_TFT,LCD_YSIZE_TFT); + + while(1) + { + LT768_DrawSquare_Fill(0,0,LCD_XSIZE_TFT,LCD_YSIZE_TFT,WHITE); + LT768_Select_Outside_Font_Init(1,0,FLASH_ADDR_16,MEMORY_ADDR_16,SIZE_16_NUM,16,1,1,0,0); + LT768_Print_Outside_Font_String(425,50,RED,WHITE,(uint8_t*)"16X16微软雅黑字体"); + up_mdelay(500); + Font_Width_X2(); + Font_Height_X2(); + LT768_Print_Outside_Font_String(250,75,GREY-1200,WHITE,(uint8_t*)"16X16微软雅黑字体长宽各扩1倍"); + up_mdelay(500); + Font_Width_X3(); + Font_Height_X3(); + LT768_Print_Outside_Font_String(150,120,BLUE,WHITE,(uint8_t*)"16X16微软雅黑字体长宽各扩2倍"); + up_mdelay(500); + Font_Width_X4(); + Font_Height_X4(); + LT768_Print_Outside_Font_String(60,178,MAGENTA,WHITE,(uint8_t*)"16X16微软雅黑字体长宽各扩3倍"); + up_mdelay(500); + + LT768_Select_Outside_Font_Init(1,0,FLASH_ADDR_24,MEMORY_ADDR_24,SIZE_24_NUM,24,1,1,0,0); + LT768_Print_Outside_Font_String(445,280,RED,WHITE,(uint8_t*)"24X24楷体"); + up_mdelay(500); + Font_Width_X2(); + Font_Height_X2(); + LT768_Print_Outside_Font_String(260,315,GREEN,WHITE,(uint8_t*)"24X24楷体长宽各扩1倍"); + up_mdelay(500); + Font_Width_X3(); + Font_Height_X3(); + LT768_Print_Outside_Font_String(150,375,CYAN,WHITE,(uint8_t*)"24X24楷体长宽各扩2倍"); + up_mdelay(500); + Font_Width_X4(); + Font_Height_X4(); + LT768_Print_Outside_Font_String(30,455,YELLOW,WHITE,(uint8_t*)"24X24楷体长宽各扩3倍"); + up_mdelay(500); + + LT768_Select_Outside_Font_Init(1,0,FLASH_ADDR_32,MEMORY_ADDR_32,SIZE_32_NUM,32,1,1,0,0); + LT768_DrawSquare_Fill(0,0,LCD_XSIZE_TFT,LCD_YSIZE_TFT,WHITE); + LT768_Print_Outside_Font_String(430,105,RED,WHITE,(uint8_t*)"32X32隶书"); + up_mdelay(500); + Font_Width_X2(); + Font_Height_X2(); + LT768_Print_Outside_Font_String(360,165,GREEN,WHITE,(uint8_t*)"32X32隶书"); + up_mdelay(500); + Font_Width_X3(); + Font_Height_X3(); + LT768_Print_Outside_Font_String(285,250,BLUE,WHITE,(uint8_t*)"32X32隶书"); + up_mdelay(500); + Font_Width_X4(); + Font_Height_X4(); + LT768_Print_Outside_Font_String(220,360,YELLOW,WHITE,(uint8_t*)"32X32隶书"); + up_mdelay(500); + } +} + +void Display_Triangle(void) +{ + unsigned long i,j,h; + unsigned long resx1,resy1,resx2,resy2,resx3,resy3; + + Select_Main_Window_16bpp(); + Main_Image_Start_Address(0); + Main_Image_Width(LCD_XSIZE_TFT); + Canvas_Image_Start_address(0); + Canvas_image_width(LCD_XSIZE_TFT); + Active_Window_XY(0,0); + Active_Window_WH(LCD_XSIZE_TFT,LCD_YSIZE_TFT); + + Main_Window_Start_XY(0,0); + + while(1) + { + LT768_DrawSquare_Fill(0,0,LCD_XSIZE_TFT,LCD_YSIZE_TFT,WHITE); + h=0; + do + { + resx1=rand()%LCD_XSIZE_TFT; // 点1的x轴 + resy1=rand()%(LCD_YSIZE_TFT); // 点1的y轴 + resx2=rand()%LCD_XSIZE_TFT; // 点2的x轴 + resy2=rand()%(LCD_YSIZE_TFT); // 点2的y轴 + resx3=rand()%LCD_XSIZE_TFT; // 点3的x轴 + resy3=rand()%(LCD_YSIZE_TFT); // 点3的y轴 + i=rand()%65536; // 颜色 + j=rand()%3; + if(j) LT768_DrawTriangle(resx1,resy1,resx2,resy2,resx3,resy3,i); // 无填充色三角形 + else LT768_DrawTriangle_Fill(resx1,resy1,resx2,resy2,resx3,resy3,i); // 填充色三角形 + h++; + up_mdelay(120); + } + while(h<20); + + h=0; + do + { + resx1=rand()%LCD_XSIZE_TFT; // 点1的x轴 + resy1=rand()%(LCD_YSIZE_TFT); // 点1的y轴 + resx2=rand()%LCD_XSIZE_TFT; // 点2的x轴 + resy2=rand()%(LCD_YSIZE_TFT); // 点2的y轴 + resx3=rand()%LCD_XSIZE_TFT; // 点3的x轴 + resy3=rand()%(LCD_YSIZE_TFT); // 点3的y轴 + i=rand()%65536; // 颜色 + j=rand()%3; + if(j) LT768_DrawTriangle(resx1,resy1,resx2,resy2,resx3,resy3,i); // 无填充色三角形 + else LT768_DrawTriangle_Fill(resx1,resy1,resx2,resy2,resx3,resy3,i); // 填充色三角形 + h++; + up_mdelay(1); + } + while(h<2500); + + } +} + +void Tsst(void) +{ + unsigned long i,j,h; + unsigned long resx1,resy1,resx2,resy2,resx3,resy3; + + Select_Main_Window_16bpp(); + Main_Image_Start_Address(0); + Main_Image_Width(LCD_XSIZE_TFT); + Main_Window_Start_XY(0,0); + Canvas_Image_Start_address(0); + Canvas_image_width(LCD_XSIZE_TFT); + Active_Window_XY(0,0); + Active_Window_WH(LCD_XSIZE_TFT,LCD_YSIZE_TFT); + + while(1) + { + + BTE_Solid_Fill(0,LCD_XSIZE_TFT,0,0,RED,LCD_XSIZE_TFT,LCD_YSIZE_TFT); + up_mdelay(600); + BTE_Solid_Fill(0,LCD_XSIZE_TFT,0,0,GREEN,LCD_XSIZE_TFT,LCD_YSIZE_TFT); + up_mdelay(600); + BTE_Solid_Fill(0,LCD_XSIZE_TFT,0,0,BLUE,LCD_XSIZE_TFT,LCD_YSIZE_TFT); + up_mdelay(600); + + BTE_Solid_Fill(LCD_XSIZE_TFT*LCD_YSIZE_TFT*2,LCD_XSIZE_TFT,0,0,RED,LCD_XSIZE_TFT,LCD_YSIZE_TFT); // PIP1颜色 + BTE_Solid_Fill(LCD_XSIZE_TFT*LCD_YSIZE_TFT*4,LCD_XSIZE_TFT,0,0,GREEN,LCD_XSIZE_TFT,LCD_YSIZE_TFT); // PIP2颜色 + LT768_PIP_Init(1,1,LCD_XSIZE_TFT*LCD_YSIZE_TFT*2,0,0,LCD_XSIZE_TFT,0,100,50,50); // 初始化PIP1 + LT768_PIP_Init(1,2,LCD_XSIZE_TFT*LCD_YSIZE_TFT*4,0,0,LCD_XSIZE_TFT,430,85,80,80); // 初始化PIP2 + + for(i=0;i<300;i=i+4) + { + LT768_Set_DisWindowPos(1,1,i,100); + LT768_Set_DisWindowPos(1,2,430-i,85); + up_mdelay(15); + } + + for(i=0;i<300;i=i+2) + { + LT768_Set_DisWindowPos(1,1,300-i,100); + LT768_Set_DisWindowPos(1,2,430-300+i,85); + up_mdelay(10); + } + Disable_PIP1(); + Disable_PIP2(); + + + LT768_DrawSquare_Fill(0,0,LCD_XSIZE_TFT,LCD_YSIZE_TFT,WHITE); + h=0; + do + { + resx1=rand()%LCD_XSIZE_TFT; // 点1的x轴 + resy1=rand()%(LCD_YSIZE_TFT); // 点1的y轴 + resx2=rand()%LCD_XSIZE_TFT; // 点2的x轴 + resy2=rand()%(LCD_YSIZE_TFT); // 点2的y轴 + resx3=rand()%LCD_XSIZE_TFT; // 点3的x轴 + resy3=rand()%(LCD_YSIZE_TFT); // 点3的y轴 + i=rand()%65536; // 颜色 + j=rand()%3; + if(j) LT768_DrawTriangle(resx1,resy1,resx2,resy2,resx3,resy3,i); // 无填充色三角形 + else LT768_DrawTriangle_Fill(resx1,resy1,resx2,resy2,resx3,resy3,i); // 填充色三角形 + h++; + up_mdelay(120); + } + while(h<20); + + h=0; + do + { + resx1=rand()%LCD_XSIZE_TFT; // 点1的x轴 + resy1=rand()%(LCD_YSIZE_TFT); // 点1的y轴 + resx2=rand()%LCD_XSIZE_TFT; // 点2的x轴 + resy2=rand()%(LCD_YSIZE_TFT); // 点2的y轴 + resx3=rand()%LCD_XSIZE_TFT; // 点3的x轴 + resy3=rand()%(LCD_YSIZE_TFT); // 点3的y轴 + i=rand()%65536; // 颜色 + j=rand()%3; + if(j) LT768_DrawTriangle(resx1,resy1,resx2,resy2,resx3,resy3,i); // 无填充色三角形 + else LT768_DrawTriangle_Fill(resx1,resy1,resx2,resy2,resx3,resy3,i); // 填充色三角形 + h++; + up_mdelay(1); + } + while(h<2500); + + up_mdelay(100); + } +} + + + + diff --git a/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/drivers/lcd/lt768_lib.c b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/drivers/lcd/lt768_lib.c index 64b7457de..adb9d3b14 100755 --- a/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/drivers/lcd/lt768_lib.c +++ b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/drivers/lcd/lt768_lib.c @@ -303,7 +303,7 @@ void MPU8_24bpp_Memory_Write -void MPuint16_t_16bpp_Memory_Write +void MPU16_16bpp_Memory_Write ( uint16_t x , uint16_t y @@ -332,7 +332,7 @@ void MPuint16_t_16bpp_Memory_Write Check_Mem_WR_FIFO_Empty(); } -void MPuint16_t_24bpp_Mode1_Memory_Write +void MPU16_24bpp_Mode1_Memory_Write ( uint16_t x , uint16_t y @@ -368,7 +368,7 @@ void MPuint16_t_24bpp_Mode1_Memory_Write } -void MPuint16_t_24bpp_Mode2_Memory_Write +void MPU16_24bpp_Mode2_Memory_Write ( uint16_t x , uint16_t y diff --git a/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/include/nuttx/lcd/lt768.h b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/include/nuttx/lcd/lt768.h index 044c8b2ac..2bbd8d8fd 100755 --- a/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/include/nuttx/lcd/lt768.h +++ b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/include/nuttx/lcd/lt768.h @@ -21,6 +21,18 @@ #ifndef __LT768_H_ #define __LT768_H_ +typedef enum _LcdOperation +{ + SHOW_STRING = 0, + SHOW_WDOT, + SHOW_RGB, + SHOW_PIP, + SHOW_INTERNAL_FONT, + SHOW_OUTSIDE_FONT, + SHOW_TRIANGLE, + SHOW_PICTURE, +} LcdOperation; + typedef struct { uint16_t x_pos; @@ -44,7 +56,7 @@ typedef struct typedef struct { - char type; // 0:write string;1:write dot + LcdOperation type; LcdPixelParam pixel_info; LcdStringParam string_info; }LcdWriteParam; diff --git a/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/include/nuttx/lcd/lt768_learn.h b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/include/nuttx/lcd/lt768_learn.h new file mode 100644 index 000000000..e4a4b1ffd --- /dev/null +++ b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/include/nuttx/lcd/lt768_learn.h @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2022 AIIT XUOS Lab +* XiUOS is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* See the Mulan PSL v2 for more details. +*/ + +/** + * @file lt768.h + * @brief lt768 register relative driver, inherit from Levetop Electronics + * @version 1.0 + * @author AIIT XUOS Lab + * @date 2022.9.19 + */ + +#ifndef _LT768_LEARN_H +#define _LT768_LEARN_H +#include "nuttx/lcd/if_port.h" +#include + +void Display_RGB(void); +void Display_Picture(void); +void Display_PIP(void); +void Display_Internal_Font(void); +void Display_Outside_Font(void); +void Display_Triangle(void); +void Tsst(void); + +#endif diff --git a/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/include/nuttx/lcd/lt768_lib.h b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/include/nuttx/lcd/lt768_lib.h index 673d997ec..187b88f1c 100755 --- a/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/include/nuttx/lcd/lt768_lib.h +++ b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/nuttx/include/nuttx/lcd/lt768_lib.h @@ -99,28 +99,30 @@ #define color16M_purple color16M_red|color16M_blue /* LCD color */ -#define WHITE 0xFFFF -#define BLACK 0x0000 -#define BLUE 0x001F -#define BRED 0xF81F -#define GRED 0xFFE0 -#define GBLUE 0x07FF -#define RED 0xF800 -#define MAGENTA 0xF81F -#define GREEN 0x07E0 -#define CYAN 0x7FFF -#define YELLOW 0xFFE0 -#define BROWN 0xBC40 -#define BRRED 0xFC07 -#define GRAY 0x8430 - -#define DARKBLUE 0x01CF -#define LIGHTBLUE 0x7D7C -#define GRAYBLUE 0x5458 -#define LIGHTGREEN 0x841F -#define LGRAY 0xC618 -#define LGRAYBLUE 0xA651 -#define LBBLUE 0x2B12 +#define WHITE 0xFFFF +#define BLACK 0x0000 +#define BLUE 0x001F +#define GREY 0xF7DE +#define BRED 0xF81F +#define GRED 0xFFE0 +#define GBLUE 0x07FF +#define BLUE2 0x051F +#define RED 0xF800 +#define MAGENTA 0xF81F +#define GREEN 0x07E0 +#define CYAN 0x7FFF +#define YELLOW 0xFFE0 +#define BROWN 0xBC40 +#define BRRED 0xFC07 +#define GRAY 0x8430 + +#define DARKBLUE 0x01CF +#define LIGHTBLUE 0x7D7C +#define GRAYBLUE 0x5458 +#define LIGHTGREEN 0x841F +#define LGRAY 0xC618 +#define LGRAYBLUE 0xA651 +#define LBBLUE 0x2B12 #define Line0 0 @@ -153,32 +155,32 @@ void lt768_init(void); /* write to memory */ -void MPuint8_t_8bpp_Memory_Write(uint16_t x, +void MPU8_8bpp_Memory_Write(uint16_t x, uint16_t y, uint16_t w, uint16_t h, const uint8_t *data); -void MPuint8_t_16bpp_Memory_Write(uint16_t x, +void MPU8_16bpp_Memory_Write(uint16_t x, uint16_t y, uint16_t w, uint16_t h, const uint8_t *data); -void MPuint8_t_24bpp_Memory_Write(uint16_t x, +void MPU8_24bpp_Memory_Write(uint16_t x, uint16_t y, uint16_t w, uint16_t h, const uint8_t *data); -void MPuint16_t_16bpp_Memory_Write(uint16_t x, +void MPU16_16bpp_Memory_Write(uint16_t x, uint16_t y, uint16_t w, uint16_t h, const uint16_t *data); -void MPuint16_t_24bpp_Mode1_Memory_Write(uint16_t x, +void MPU16_24bpp_Mode1_Memory_Write(uint16_t x, uint16_t y, uint16_t w, uint16_t h, const uint16_t *data); -void MPuint16_t_24bpp_Mode2_Memory_Write(uint16_t x, +void MPU16_24bpp_Mode2_Memory_Write(uint16_t x, uint16_t y, uint16_t w, uint16_t h,