Basically i glued Peter Drescher and Simon Ford libs in a GraphicsDisplay class, then derived TFT or LCD class (which inherits Protocols class), then the most derived ones (Inits), which are per-display and are the only part needed to be adapted to diff hw.

Dependents:   testUniGraphic_150217 maze_TFT_MMA8451Q TFT_test_frdm-kl25z TFT_test_NUCLEO-F411RE ... more

Revision:
17:1dafb896c6f5
Parent:
15:b9483ba842c8
Child:
33:f87f06292637
--- a/Inits/SSD1306.cpp	Mon Feb 23 23:36:22 2015 +0000
+++ b/Inits/SSD1306.cpp	Tue Feb 24 22:30:05 2015 +0000
@@ -134,3 +134,44 @@
   
     wr_cmd16(0x8100|(o&0xFF));
 }
+
+////////////////////////////////////////////////////////////////////
+// functions that overrides the standard ones implemented in LCD.cpp
+////////////////////////////////////////////////////////////////////
+
+
+const uint8_t scroll_speed[8]={3,2,1,6,0,5,4,7};
+
+////////////////////////////////////////////////////////////////////
+// functions addon  to LCD.cpp
+////////////////////////////////////////////////////////////////////
+void SSD1306::horizontal_scroll(int l_r,int s_page,int e_page,int speed){
+    wr_cmd8(0x2E);                      // deactivate scroll before change
+    if(l_r == 1){
+        wr_cmd16(0x2700);               // horizontal scroll left
+    }
+    else {
+        wr_cmd16(0x2600);
+    }
+    wr_cmd16((s_page & 0x07)<<8 | (scroll_speed[speed & 0x07]));
+    wr_cmd16((e_page & 0x07)<<8 );
+    wr_cmd16(0xFF2F);
+}
+
+void SSD1306::horiz_vert_scroll(int l_r,int s_page,int e_page,int v_off,int speed){
+    wr_cmd8(0x2E);                      // deactivate scroll before change
+    if(l_r == 1){
+            wr_cmd16(0x2A00);               // horizontal scroll left
+        }
+        else {
+            wr_cmd16(0x2900);
+        }
+        wr_cmd16((s_page & 0x07)<<8 | (scroll_speed[speed & 0x07]));
+        wr_cmd16((e_page & 0x07)<<8 | (v_off & 0x3F) );
+        wr_cmd8(0x2F);
+
+}
+
+void SSD1306::end_scroll(){
+    wr_cmd8(0x2E);
+}