Hexley Ball / RA8875_TP

Fork of RA8875 by David Smart

Files at this revision

API Documentation at this revision

Comitter:
WiredHome
Date:
Fri Jan 17 02:10:18 2014 +0000
Parent:
23:a50ded45dbaf
Child:
25:9556a3a9b7cc
Child:
26:c854037bbebd
Commit message:
Cursor control is working - none, i-beam, underscore, block.

Changed in this revision

RA8875.cpp Show annotated file Show diff for this revision Revisions of this file
RA8875.h Show annotated file Show diff for this revision Revisions of this file
--- a/RA8875.cpp	Wed Jan 15 12:24:54 2014 +0000
+++ b/RA8875.cpp	Fri Jan 17 02:10:18 2014 +0000
@@ -192,20 +192,39 @@
     return noerror;
 }
 
-RetCode_t RA8875::SetTextCursorControl(bool visible, bool blink)
+RetCode_t RA8875::SetTextCursorControl(cursor_t cursor, bool blink)
 {
     unsigned char mwcr0 = ReadCommand(0x40) & 0x0F; // retain direction, auto-increase
+    unsigned char horz = 0;
+    unsigned char vert = 0;
     
-    mwcr0 |= 0x80;      // text mode
-    if (visible)
-        mwcr0 |= 0x40;
+    mwcr0 |= 0x80;                  // text mode
+    if (cursor != NOCURSOR)
+        mwcr0 |= 0x40;              // visible
     if (blink)
-        mwcr0 |= 0x20;
+        mwcr0 |= 0x20;              // blink
     WriteCommand(0x40, mwcr0);      // configure the cursor
     WriteCommand(0x41, 0x00);       // close the graphics cursor
-    WriteCommand(0x44,0x1f);        //The cursor flashing cycle
-    WriteCommand(0x4e,0x1f);        //The cursor size
-    WriteCommand(0x4f,0x1f);        //The cursor size
+    WriteCommand(0x44, 0x1f);       // The cursor flashing cycle
+    switch (cursor) {
+        case IBEAM:
+            horz = 0x01;
+            vert = 0x1F;
+            break;
+        case UNDER:
+            horz = 0x07;
+            vert = 0x01;
+            break;
+        case BLOCK:
+            horz = 0x07;
+            vert = 0x1F;
+            break;
+        case NOCURSOR:
+        default:
+            break;
+    }
+    WriteCommand(0x4e, horz);       // The cursor size horz
+    WriteCommand(0x4f, vert);       // The cursor size vert
     return noerror;
 }
 
@@ -277,7 +296,10 @@
             WriteCommand(0x2D, y >> 8);
         } else {
             if (font == NULL) {
-                WriteCommand(0x40,0x80);
+                unsigned char mwcr0 = ReadCommand(0x40);
+                
+                if (mwcr0 & 0x80 == 0x00)
+                    WriteCommand(0x40,0x80);
                 WriteCommand(0x02);
                 select(true);
                 WriteData(c);
@@ -861,6 +883,7 @@
 
     // Clear ram image
     SetWindow(0,0, width(), height());          // Initialize to full screen
+    SetTextCursorControl();
     foreground(Black);
     background(Black);
     cls();
@@ -918,7 +941,10 @@
 
 void TextCursorTest(RA8875 & display, Serial & pc)
 {
-    const char * visCursor = "The cursor should be visible for this text.";
+    const char * iCursor = "The I-Beam cursor should be visible for this text, but it should not be blinking while writing this text.\r\n";
+    const char * uCursor = "The Underscore cursor should be visible for this text, but it should not be blinking while writing this text.\r\n";
+    const char * bCursor = "The Block cursor should be visible for this text, but it should not be blinking while writing this text.\r\n";
+    const char * bbCursor = "The Blinking Block cursor should be visible for this text, and it should be blinking while writing this text.\r\n";
     const char * p;
     
     pc.printf("Text Cursor Test\r\n");
@@ -929,13 +955,36 @@
     display.puts(0,0, "Text Cursor Test.");
     
     // visible, non-blinking
-    display.SetTextCursorControl(true, false);
-    display.SetTextCursor(0,40);
-    p = visCursor;
+    display.SetTextCursor(0,20);
+    display.SetTextCursorControl(IBEAM, false);
+    p = iCursor;
     while (*p) {
-        display.putc(*p++);
+        display._putc(*p++);
+        wait_ms(100);
+    }
+
+    display.SetTextCursorControl(UNDER, false);
+    p = uCursor;
+    while (*p) {
+        display._putc(*p++);
         wait_ms(100);
     }
+    
+    display.SetTextCursorControl(BLOCK, false);
+    p = bCursor;
+    while (*p) {
+        display._putc(*p++);
+        wait_ms(100);
+    }
+
+    display.SetTextCursorControl(BLOCK, true);
+    p = bbCursor;
+    while (*p) {
+        display._putc(*p++);
+        wait_ms(100);
+    }
+    wait_ms(2000);
+    display.SetTextCursorControl(NOCURSOR, false);
 }
 
 void BacklightTest(RA8875 & display, Serial & pc, float ramptime)
--- a/RA8875.h	Wed Jan 15 12:24:54 2014 +0000
+++ b/RA8875.h	Fri Jan 17 02:10:18 2014 +0000
@@ -57,6 +57,15 @@
     FILL        ///< fill the object space with the background color
 } fill_t;
 
+/// cursor type to be shown as the text cursor.
+typedef enum
+{
+    NOCURSOR,   ///< cursor is hidden
+    IBEAM,      ///< | cursor
+    UNDER,      ///< _ cursor
+    BLOCK       ///< Block cursor
+} cursor_t;
+
 /// return values from functions
 //typedef enum
 //{
@@ -238,12 +247,12 @@
     /// Cursor visible/hidden, Cursor blink/normal, 
     /// Cursor I-Beam/underscore/box.
     ///
-    /// @param visible can be set to true or false (default false)
+    /// @param cursor can be set to NOCURSOR (default), IBEAM,
+    ///         UNDER, or BLOCK.
     /// @param blink can be set to true or false (default false)
-    /// @param ?
     /// @returns success/failure code. @see RetCode_t
     ///
-    RetCode_t SetTextCursorControl(bool visible = false, bool blink = false);
+    RetCode_t SetTextCursorControl(cursor_t cursor = NOCURSOR, bool blink = false);
     
     /// Select the ISO 8859-X font to use next.
     ///