Преглед на файлове

TFT 2x-3x scale, Anycubic, TronXY TFT support (#18224)

Victor преди 4 години
родител
ревизия
265ab19ed2
No account linked to committer's email address
променени са 2 файла, в които са добавени 60 реда и са изтрити 28 реда
  1. 48
    24
      Marlin/src/lcd/dogm/u8g_dev_tft_320x240_upscale_from_128x64.cpp
  2. 12
    4
      Marlin/src/lcd/dogm/ultralcd_DOGM.h

+ 48
- 24
Marlin/src/lcd/dogm/u8g_dev_tft_320x240_upscale_from_128x64.cpp Целия файл

@@ -73,14 +73,18 @@
73 73
   extern void LCD_IO_WriteMultiple(uint16_t color, uint32_t count);
74 74
 #endif
75 75
 
76
+#ifndef FSMC_UPSCALE
77
+  #define FSMC_UPSCALE 2
78
+#endif
79
+
76 80
 #define WIDTH LCD_PIXEL_WIDTH
77 81
 #define HEIGHT LCD_PIXEL_HEIGHT
78 82
 #define PAGE_HEIGHT 8
79 83
 
80 84
 #define X_LO LCD_PIXEL_OFFSET_X
81 85
 #define Y_LO LCD_PIXEL_OFFSET_Y
82
-#define X_HI (X_LO + 2 * WIDTH  - 1)
83
-#define Y_HI (Y_LO + 2 * HEIGHT - 1)
86
+#define X_HI (X_LO + (FSMC_UPSCALE) * WIDTH  - 1)
87
+#define Y_HI (Y_LO + (FSMC_UPSCALE) * HEIGHT - 1)
84 88
 
85 89
 // see https://ee-programming-notepad.blogspot.com/2016/10/16-bit-color-generator-picker.html
86 90
 
@@ -526,8 +530,27 @@ static const uint16_t ili9341_init[] = {
526 530
     B01111111,B11111111,B11111111,B11111110,
527 531
   };
528 532
 
533
+  #define BUTTON_SIZE_X 32
534
+  #define BUTTON_SIZE_Y 20
535
+
536
+  // 14, 90, 166, 242, 185 are the original values upscaled 2x.
537
+  #define BUTTOND_X_LO (14 / 2) * (FSMC_UPSCALE)
538
+  #define BUTTOND_X_HI (BUTTOND_X_LO + (FSMC_UPSCALE) * BUTTON_SIZE_X - 1)
539
+
540
+  #define BUTTONA_X_LO (90 / 2) * (FSMC_UPSCALE)
541
+  #define BUTTONA_X_HI (BUTTONA_X_LO + (FSMC_UPSCALE) * BUTTON_SIZE_X - 1)
542
+
543
+  #define BUTTONB_X_LO (166 / 2) * (FSMC_UPSCALE)
544
+  #define BUTTONB_X_HI (BUTTONB_X_LO + (FSMC_UPSCALE) * BUTTON_SIZE_X - 1)
545
+
546
+  #define BUTTONC_X_LO (242 / 2) * (FSMC_UPSCALE)
547
+  #define BUTTONC_X_HI (BUTTONC_X_LO + (FSMC_UPSCALE) * BUTTON_SIZE_X - 1)
548
+
549
+  #define BUTTON_Y_LO (170 / 2) * (FSMC_UPSCALE)
550
+  #define BUTTON_Y_HI (BUTTON_Y_LO + (FSMC_UPSCALE) * BUTTON_SIZE_Y - 1)
551
+
529 552
   void drawImage(const uint8_t *data, u8g_t *u8g, u8g_dev_t *dev, uint16_t length, uint16_t height, uint16_t color) {
530
-    uint16_t buffer[128];
553
+    uint16_t buffer[BUTTON_SIZE_X * sq(FSMC_UPSCALE)];
531 554
 
532 555
     for (uint16_t i = 0; i < height; i++) {
533 556
       uint16_t k = 0;
@@ -537,20 +560,17 @@ static const uint16_t ili9341_init[] = {
537 560
           v = color;
538 561
         else
539 562
           v = TFT_MARLINBG_COLOR;
540
-        buffer[k++] = v; buffer[k++] = v;
563
+        LOOP_L_N(n, FSMC_UPSCALE) buffer[k++] = v;
541 564
       }
542 565
       #ifdef LCD_USE_DMA_FSMC
543
-        if (k <= 80) { // generally is... for our buttons
544
-          memcpy(&buffer[k], &buffer[0], k * sizeof(uint16_t));
545
-          LCD_IO_WriteSequence(buffer, k * sizeof(uint16_t));
546
-        }
547
-        else {
548
-          LCD_IO_WriteSequence(buffer, k);
549
-          LCD_IO_WriteSequence(buffer, k);
550
-        }
566
+        LOOP_S_L_N(n, 1, FSMC_UPSCALE)
567
+          for (uint16_t l = 0; l < length * (FSMC_UPSCALE); l++)
568
+            buffer[l + (length * (FSMC_UPSCALE) * n)] = buffer[l];
569
+
570
+        LCD_IO_WriteSequence(buffer, COUNT(buffer));
551 571
       #else
552
-        u8g_WriteSequence(u8g, dev, k << 1, (uint8_t *)buffer);
553
-        u8g_WriteSequence(u8g, dev, k << 1, (uint8_t *)buffer);
572
+        u8g_WriteSequence(u8g, dev, k << 1, (uint8_t*)buffer);
573
+        u8g_WriteSequence(u8g, dev, k << 1, (uint8_t*)buffer);
554 574
       #endif
555 575
     }
556 576
   }
@@ -569,7 +589,7 @@ static uint8_t page;
569 589
 uint8_t u8g_dev_tft_320x240_upscale_from_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg) {
570 590
   u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
571 591
   #ifdef LCD_USE_DMA_FSMC
572
-    static uint16_t bufferA[512], bufferB[512];
592
+    static uint16_t bufferA[WIDTH * sq(FSMC_UPSCALE)], bufferB[WIDTH * sq(FSMC_UPSCALE)];
573 593
     uint16_t* buffer = &bufferA[0];
574 594
     bool allow_async = true;
575 595
   #else
@@ -597,6 +617,7 @@ uint8_t u8g_dev_tft_320x240_upscale_from_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, u
597 617
           setWindow = setWindow_ili9328;
598 618
           break;
599 619
         case 0x9341:   // ILI9341
620
+        case 0x8066:   // ILI9341 Anycubic / TronXY TFTs      
600 621
           #ifdef LCD_USE_DMA_FSMC
601 622
             writeEscSequence(ili9341_init);
602 623
           #else
@@ -645,16 +666,16 @@ uint8_t u8g_dev_tft_320x240_upscale_from_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, u
645 666
             u8g_WriteSequence(u8g, dev, 150, (uint8_t *)buffer);
646 667
         #endif
647 668
 
648
-        setWindow(u8g, dev, 14, 185,  77, 224);
669
+        setWindow(u8g, dev, BUTTOND_X_LO, BUTTON_Y_LO,  BUTTOND_X_HI, BUTTON_Y_HI);
649 670
         drawImage(buttonD, u8g, dev, 32, 20, TFT_BTCANCEL_COLOR);
650 671
 
651
-        setWindow(u8g, dev, 90, 185, 153, 224);
672
+        setWindow(u8g, dev, BUTTONA_X_LO, BUTTON_Y_LO,  BUTTONA_X_HI, BUTTON_Y_HI);
652 673
         drawImage(buttonA, u8g, dev, 32, 20, TFT_BTARROWS_COLOR);
653 674
 
654
-        setWindow(u8g, dev, 166, 185, 229, 224);
675
+        setWindow(u8g, dev, BUTTONB_X_LO, BUTTON_Y_LO,  BUTTONB_X_HI, BUTTON_Y_HI);
655 676
         drawImage(buttonB, u8g, dev, 32, 20, TFT_BTARROWS_COLOR);
656 677
 
657
-        setWindow(u8g, dev, 242, 185, 305, 224);
678
+        setWindow(u8g, dev, BUTTONC_X_LO, BUTTON_Y_LO,  BUTTONC_X_HI, BUTTON_Y_HI);
658 679
         drawImage(buttonC, u8g, dev, 32, 20, TFT_BTOKMENU_COLOR);
659 680
       #endif // TOUCH_BUTTONS
660 681
 
@@ -678,19 +699,22 @@ uint8_t u8g_dev_tft_320x240_upscale_from_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, u
678 699
         for (uint16_t i = 0; i < (uint32_t)pb->width; i++) {
679 700
           const uint8_t b = *(((uint8_t *)pb->buf) + i);
680 701
           const uint16_t c = TEST(b, y) ? TFT_MARLINUI_COLOR : TFT_MARLINBG_COLOR;
681
-          buffer[k++] = c; buffer[k++] = c;
702
+          LOOP_L_N(n, FSMC_UPSCALE) buffer[k++] = c;
682 703
         }
683 704
         #ifdef LCD_USE_DMA_FSMC
684
-          memcpy(&buffer[256], &buffer[0], 512);
705
+          LOOP_S_L_N(n, 1, FSMC_UPSCALE)
706
+            for (uint16_t l = 0; l < WIDTH * (FSMC_UPSCALE); l++)
707
+              buffer[l + WIDTH * (FSMC_UPSCALE) * n] = buffer[l];
708
+
685 709
           if (allow_async) {
686 710
             if (y > 0 || page > 1) LCD_IO_WaitSequence_Async();
687 711
             if (y == 7 && page == 8)
688
-              LCD_IO_WriteSequence(buffer, 512); // last line of last page
712
+              LCD_IO_WriteSequence(buffer, COUNT(bufferA)); // last line of last page
689 713
             else
690
-              LCD_IO_WriteSequence_Async(buffer, 512);
714
+              LCD_IO_WriteSequence_Async(buffer, COUNT(bufferA));
691 715
           }
692 716
           else
693
-            LCD_IO_WriteSequence(buffer, 512);
717
+            LCD_IO_WriteSequence(buffer, COUNT(bufferA));
694 718
         #else
695 719
           uint8_t* bufptr = (uint8_t*) buffer;
696 720
           for (uint8_t i = 2; i--;) {

+ 12
- 4
Marlin/src/lcd/dogm/ultralcd_DOGM.h Целия файл

@@ -199,10 +199,18 @@
199 199
 // LCD_FULL_PIXEL_WIDTH =
200 200
 // LCD_PIXEL_OFFSET_X + (LCD_PIXEL_WIDTH * 2) + LCD_PIXEL_OFFSET_X
201 201
 #if ENABLED(FSMC_GRAPHICAL_TFT)
202
-  #define LCD_FULL_PIXEL_WIDTH  320
203
-  #define LCD_PIXEL_OFFSET_X    32
204
-  #define LCD_FULL_PIXEL_HEIGHT 240
205
-  #define LCD_PIXEL_OFFSET_Y    32
202
+  #ifndef LCD_FULL_PIXEL_WIDTH
203
+    #define LCD_FULL_PIXEL_WIDTH  320
204
+  #endif
205
+  #ifndef LCD_PIXEL_OFFSET_X
206
+    #define LCD_PIXEL_OFFSET_X    32
207
+  #endif
208
+  #ifndef LCD_FULL_PIXEL_HEIGHT
209
+    #define LCD_FULL_PIXEL_HEIGHT 240
210
+  #endif
211
+  #ifndef LCD_PIXEL_OFFSET_Y
212
+    #define LCD_PIXEL_OFFSET_Y    32
213
+  #endif
206 214
 #endif
207 215
 
208 216
 // For selective rendering within a Y range

Loading…
Отказ
Запис