This is a port of Henning Kralsen's UTFT library for Arduino/chipKIT to mbed, refactored to make full use of C inheritance and access control, in order to reduce work when implementing new drivers and at the same time make the code more readable and easier to maintain. As of now supported are SSD1289 (16-bit interface), HX8340-B (serial interface) and ST7735 (serial interface). Drivers for other controllers will be added as time and resources to acquire the displays to test the code permit. This fork is for 8 bit interface. I will add proper switch in later commit

Dependents:   KL25Z_ILI9325

Fork of TFTLCD by Todor Todorov

Revision:
18:b934d95cc380
Parent:
17:866f2a851dd7
Child:
20:4bdca8d8dadc
--- a/ssd1289.cpp	Wed Dec 12 18:08:41 2012 +0000
+++ b/ssd1289.cpp	Thu Dec 13 02:41:56 2012 +0000
@@ -71,10 +71,10 @@
     {
         switch ( _orientation )
         {
-            case LANDSCAPE: // uder test
-                WriteCmdData( 0x01, 0x2B3F ); // driver output control // 0x293F 0x2B3F 0x2D3F 0x2F3F 0x693F 0x6B3F 0x6D3F 0x6F3F
+            case LANDSCAPE: // works
+                WriteCmdData( 0x01, 0x293F ); // driver output control
                 wait_ms( 1 );
-                WriteCmdData( 0x11, 0x6068 ); // entry mode // 0x6040 0x6048 0x6050 0x6058 0x6060 0x6068
+                WriteCmdData( 0x11, 0x6078 ); // entry mode
                 break;
                 
             case PORTRAIT_REV: // works
@@ -83,8 +83,10 @@
                 WriteCmdData( 0x11, 0x6070 ); // entry mode
                 break;
                 
-            case LANDSCAPE_REV: // uder test
-                WriteCmdData( 0x11, 0x6068 ); // entry mode
+            case LANDSCAPE_REV: // works
+                WriteCmdData( 0x01, 0x6B3F ); // driver output control
+                wait_ms( 1 );
+                WriteCmdData( 0x11, 0x6078 ); // entry mode
                 break;
                 
             case PORTRAIT: // works
@@ -99,10 +101,10 @@
     {
         switch ( _orientation )
         {
-            case LANDSCAPE: // uder test
-                WriteCmdData( 0x01, 0x293F ); // driver output control // 0x293F 0x2B3F 0x2D3F 0x2F3F 0x693F 0x6B3F 0x6D3F 0x6F3F
+            case LANDSCAPE: // works
+                WriteCmdData( 0x01, 0x293F ); // driver output control
                 wait_ms( 1 );
-                WriteCmdData( 0x11, 0x4068 ); // entry mode // 0x4040 0x4048 0x4050 0x4058 0x4060 0x4068
+                WriteCmdData( 0x11, 0x4078 ); // entry mode
                 break;
                 
             case PORTRAIT_REV: // works
@@ -111,8 +113,10 @@
                 WriteCmdData( 0x11, 0x4070 ); // entry mode
                 break;
                 
-            case LANDSCAPE_REV: // uder test
-                WriteCmdData( 0x11, 0x4068 ); // entry mode
+            case LANDSCAPE_REV: // works
+                WriteCmdData( 0x01, 0x6B3F ); // driver output control
+                wait_ms( 1 );
+                WriteCmdData( 0x11, 0x4078 ); // entry mode
                 break;
                 
             case PORTRAIT: // works
@@ -192,14 +196,14 @@
 
 void SSD1289_LCD::Sleep( void )
 {
-    // TODO: figure out if the SSD1289 controller has sleep and wakeup commands
+    WriteCmdData( 0x10, 0x0001 ); // sleep mode: 0 = exit, 1 = enter
     if ( _lcd_pin_bl != 0 )
         *_lcd_pin_bl = LOW;
 }
 
 void SSD1289_LCD::WakeUp( void )
 {
-    // TODO: figure out if the SSD1289 controller has sleep and wakeup commands
+    WriteCmdData( 0x10, 0x0000 ); // sleep mode: 0 = exit, 1 = enter
     if ( _lcd_pin_bl != 0 )
         *_lcd_pin_bl = HIGH;
 }
@@ -220,11 +224,22 @@
 
 void SSD1289_LCD::SetXY( uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2 )
 {
-    WriteCmdData( 0x44, ( x2 << 8 ) + x1 );
-    WriteCmdData( 0x45, y1 );
-    WriteCmdData( 0x46, y2 );
-    WriteCmdData( 0x4e, x1 );
-    WriteCmdData( 0x4f, y1 );
+    if ( _orientation == PORTRAIT || _orientation == PORTRAIT_REV )
+    {
+        WriteCmdData( 0x44, ( x2 << 8 ) + x1 );
+        WriteCmdData( 0x45, y1 );
+        WriteCmdData( 0x46, y2 );
+        WriteCmdData( 0x4e, x1 );
+        WriteCmdData( 0x4f, y1 );
+    }
+    else
+    {
+        WriteCmdData( 0x44, ( y2 << 8 ) + y1 );
+        WriteCmdData( 0x45, x1 );
+        WriteCmdData( 0x46, x2 );
+        WriteCmdData( 0x4e, y1 );
+        WriteCmdData( 0x4f, x1 );
+    }
     WriteCmd( 0x22 );
 }