Răsfoiți Sursa

add:lcd添加swap参数

Dozingfiretruck 11 luni în urmă
părinte
comite
5849ab467f

+ 2 - 2
components/lcd/luat_lcd.c

@@ -450,7 +450,7 @@ LUAT_WEAK int luat_lcd_draw(luat_lcd_conf_t* conf, int16_t x1, int16_t y1, int16
 
 int luat_lcd_draw_point(luat_lcd_conf_t* conf, int16_t x, int16_t y, luat_color_t color) {
     luat_color_t tmp = color;
-    if (conf->port < LUAT_LCD_HW_ID_0 || conf->port == LUAT_LCD_SPI_DEVICE)
+    if (conf->lcd_rgb_swap)
         tmp = color_swap(color);// 注意, 这里需要把颜色swap了
     return luat_lcd_draw(conf, x, y, x, y, &tmp);
 }
@@ -489,7 +489,7 @@ int luat_lcd_draw_line(luat_lcd_conf_t* conf,int16_t x1, int16_t y1, int16_t x2,
     {
         size_t dots = (x2 - x1 + 1) * (y2 - y1 + 1);//点数量
         luat_color_t* line_buf = (luat_color_t*) luat_heap_malloc(dots * sizeof(luat_color_t));
-        if (conf->port < LUAT_LCD_HW_ID_0 || conf->port == LUAT_LCD_SPI_DEVICE)
+        if (conf->lcd_rgb_swap)
             tmp = color_swap(color);// 颜色swap
         if (line_buf) {
             for (i = 0; i < dots; i++)

+ 1 - 0
components/lcd/luat_lcd.h

@@ -107,6 +107,7 @@ typedef struct luat_lcd_conf {
     luat_spi_device_t* lcd_spi_device;
     int lcd_spi_ref;
     int lcd_use_lvgl;
+    int lcd_rgb_swap;
     void* userdata;
     u8g2_t luat_lcd_u8g2 ;
 } luat_lcd_conf_t;

+ 8 - 0
components/lcd/luat_lib_lcd.c

@@ -195,7 +195,15 @@ static int l_lcd_init(lua_State* L) {
               LLOGE("port is device but not find luat_spi_device_t");
               goto end;
             }
+            if (conf->port < LUAT_LCD_HW_ID_0 || conf->port == LUAT_LCD_SPI_DEVICE){
+                conf->lcd_rgb_swap = 1;
+            }
+            lua_pop(L, 1);
 
+            lua_pushstring(L, "swap");
+            if (LUA_TBOOLEAN == lua_gettable(L, 2)) {
+                conf->lcd_rgb_swap = lua_toboolean(L, -1);
+            }
             lua_pop(L, 1);
 
             lua_pushstring(L, "pin_dc");

+ 1 - 1
components/lcd/luat_lib_lcd_jpg.c

@@ -66,7 +66,7 @@ static int lcd_out_func (JDEC* jd, void* bitmap, JRECT* rect){
     // rgb高低位swap
     uint16_t count = (rect->right - rect->left + 1) * (rect->bottom - rect->top + 1);
     for (size_t i = 0; i < count; i++){
-        if (lcd_dft_conf->port < LUAT_LCD_HW_ID_0 || lcd_dft_conf->port == LUAT_LCD_SPI_DEVICE)
+        if (lcd_dft_conf->lcd_rgb_swap)
             dev->buff[i] = ((tmp[i] >> 8) & 0xFF)+ ((tmp[i] << 8) & 0xFF00);
         else
             dev->buff[i] = tmp[i];