]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Add support for blitting to the Infinity LCD
authorFred Sundvik <fsundvik@gmail.com>
Sat, 1 Apr 2017 13:36:34 +0000 (16:36 +0300)
committerFred Sundvik <fsundvik@gmail.com>
Sun, 9 Apr 2017 15:34:59 +0000 (18:34 +0300)
keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c
keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_config.h
keyboards/ergodox/infinity/gfxconf.h

index 4547f1419339cb7acbded236f6e52ea23da1ed37..2c8a168e76bb37c50d28c7bd6c3eb09edbe2ecd2 100644 (file)
@@ -254,6 +254,32 @@ LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) {
 }
 #endif
 
+LLDSPEC void gdisp_lld_blit_area(GDisplay *g) {
+    uint8_t* buffer = (uint8_t*)g->p.ptr;
+    int linelength = g->p.cx;
+    for (int i = 0; i < g->p.cy; i++) {
+        unsigned dstx = g->p.x;
+        unsigned dsty = g->p.y + i;
+        unsigned srcx = g->p.x1;
+        unsigned srcy = g->p.y1 + i;
+        unsigned srcbit = srcy * g->p.x2 + srcx;
+        for(int j=0; j < linelength; j++) {
+            uint8_t src = buffer[srcbit / 8];
+            uint8_t bit = 7-(srcbit % 8);
+            uint8_t bitset = (src >> bit) & 1;
+            uint8_t* dst = &(RAM(g)[xyaddr(dstx, dsty)]);
+            if (bitset) {
+                *dst |= xybit(dsty);
+            }
+            else {
+                *dst &= ~xybit(dsty);
+            }
+                       dstx++;
+            srcbit++;
+        }
+    }
+}
+
 #if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL
 LLDSPEC void gdisp_lld_control(GDisplay *g) {
     switch(g->p.x) {
index 48587b9e14382a0be8a0f305ddab3cca7c2ffcf1..2b66a877c86aef6c2af3e35bd835c7ccf36c42ce 100644 (file)
 /* Driver hardware support.                                                  */
 /*===========================================================================*/
 
-#define GDISP_HARDWARE_FLUSH                   TRUE            // This controller requires flushing
-#define GDISP_HARDWARE_DRAWPIXEL               TRUE
-#define GDISP_HARDWARE_PIXELREAD               TRUE
-#define GDISP_HARDWARE_CONTROL                 TRUE
+#define GDISP_HARDWARE_FLUSH            TRUE           // This controller requires flushing
+#define GDISP_HARDWARE_DRAWPIXEL        TRUE
+#define GDISP_HARDWARE_PIXELREAD        TRUE
+#define GDISP_HARDWARE_CONTROL          TRUE
+#define GDISP_HARDWARE_BITFILLS         TRUE
 
-#define GDISP_LLD_PIXELFORMAT                  GDISP_PIXELFORMAT_MONO
+#define GDISP_LLD_PIXELFORMAT           GDISP_PIXELFORMAT_MONO
 
 #endif /* GFX_USE_GDISP */
 
index 8caa577b7398127b924aef00d6307c0fc7481e39..45b9f585809f83712fddc828ccba2483c9b5c5d2 100644 (file)
         #define GDISP_HARDWARE_DRAWPIXEL             TRUE
         #define GDISP_HARDWARE_CLEARS                FALSE
         #define GDISP_HARDWARE_FILLS                 FALSE
-        #define GDISP_HARDWARE_BITFILLS              FALSE
+        //#define GDISP_HARDWARE_BITFILLS              FALSE
         #define GDISP_HARDWARE_SCROLL                FALSE
         #define GDISP_HARDWARE_PIXELREAD             TRUE
         #define GDISP_HARDWARE_CONTROL               TRUE