Fork of Chris Styles' C12832 LCD driver

Dependents:   co657_lcdplay co657_nrf52_beacons door_lock co657_IoT

Fork of C12832 by Chris Styles

Revision:
17:67f9ca828270
Parent:
16:7de323fa46fe
Child:
18:8c294697c901
--- a/C12832.cpp	Wed Feb 05 14:25:16 2014 +0000
+++ b/C12832.cpp	Wed Oct 28 21:01:40 2015 +0000
@@ -204,7 +204,7 @@
 void C12832::cls(void)
 {
     memset(buffer,0x00,512);  // clear display buffer
-    copy_to_lcd();
+    if (auto_up) copy_to_lcd();
 }
 
 
@@ -218,22 +218,21 @@
     dx = x1-x0;
     dy = y1-y0;
 
-    //  if (dx == 0) {        /* vertical line */
-    //      if (y1 > y0) vline(x0,y0,y1,color);
-    //      else vline(x0,y1,y0,color);
-    //      return;
-    //  }
+    if (dx == 0) {        /* vertical line */
+        if (y1 > y0) vline(x0,y0,y1,color);
+        else vline(x0,y1,y0,color);
+        return;
+    } else if (dy == 0) {   /* horizontal line */
+        if (x1 > x0) hline(x0,y0,x1,color);
+        else  hline(x1,y0,x0,color);
+        return;
+    }
 
     if (dx > 0) {
         dx_sym = 1;
     } else {
         dx_sym = -1;
     }
-    //  if (dy == 0) {        /* horizontal line */
-    //      if (x1 > x0) hline(x0,x1,y0,color);
-    //      else  hline(x1,x0,y0,color);
-    //      return;
-    //  }
 
     if (dy > 0) {
         dy_sym = 1;
@@ -278,6 +277,32 @@
     if(auto_up) copy_to_lcd();
 }
 
+void C12832::hline(int x0, int y0, int x1, int colour)
+{
+    int x;
+    
+    /* FIXME: do this sensibly, in blocks of 8 pixels */
+    for (x=x0; x<=x1; x++) {
+        pixel (x, y0, colour);
+    }
+    if (auto_up) {
+        copy_to_lcd ();
+    }
+}
+
+void C12832::vline(int x0, int y0, int y1, int colour)
+{
+    int y;
+    
+    /* FIXME: do this sensibly, computing the bit positioning once */
+    for (y=y0; y<=y1; y++) {
+        pixel (x0, y, colour);
+    }
+    if (auto_up) {
+        copy_to_lcd ();
+    }
+}
+
 void C12832::rect(int x0, int y0, int x1, int y1, int color)
 {