Library to control a Graphics TFT connected to 4-wire SPI - revised for the Raio RA8875 Display Controller.

Dependents:   FRDM_RA8875_mPaint RA8875_Demo RA8875_KeyPadDemo SignalGenerator ... more

Fork of SPI_TFT by Peter Drescher

See Components - RA8875 Based Display

Enhanced touch-screen support - where it previous supported both the Resistive Touch and Capacitive Touch based on the FT5206 Touch Controller, now it also has support for the GSL1680 Touch Controller.

Offline Help Manual (Windows chm)

/media/uploads/WiredHome/ra8875.zip.bin (download, rename to .zip and unzip)

Revision:
167:8aa3fb2a5a31
Parent:
166:53fd4a876dac
Child:
177:d8e65c0e268a
--- a/RA8875.h	Sun Feb 24 19:28:26 2019 +0000
+++ b/RA8875.h	Tue Feb 26 19:52:57 2019 +0000
@@ -2,32 +2,102 @@
 /// @mainpage RA8875 Display Controller Driver library
 ///
 /// The RA8875 Display controller is a powerful interface for low cost displays. It
-/// can support displays up to 800 x 480 pixels x 16-bit color. Another common 
-/// implementation is 480 x 272 x 16 with two layers. The two layers can be 
-/// exchanged, or blended in various ways (transparency, OR, AND, and more).
-/// It includes graphics acceleration capabilities for drawing primitives, 
-/// such as line, rectangle, circles, and more.
+/// can support displays up to 800 x 480 pixels x 16-bit color. 
+///
+/// Aside from 800 x 480 pixel displays, another common implementation is 
+/// 480 x 272 x 16 with two layers. The two layers can be exchanged, or blended 
+/// in various ways (transparency, OR, AND, and more). It includes graphics 
+/// acceleration capabilities for drawing primitives, such as line, rectangle, 
+/// circles, and more.
+///
+/// It is not a display for video-speed animations, and maybe could hold its own 
+/// as a slow picture frame, at least when using the SPI ports. How the performance 
+/// differs using I2C, 8-bit parallel or 16-bit parallel has not been evaluated.
+/// Certainly the parallel interface option would be expected to be a lot faster.
+///
+/// What it is good at is performing as a basic display for appliance or simple
+/// home automation, and because of the built-in capability to draw lines, circles, 
+/// ellipses, rectangles, rounded rectangles, and triangles, it does a lot of the 
+/// work that your host micro would otherwise be doing, and in many cases it does
+/// it much faster.
 ///
-/// It is not a display for super-fast animations, video, picture frames and so forth,
-/// at least when using the SPI ports. Performance has not been evaluated with one
-/// of the parallel port options.
+/// While it is good to know about Bresenham's algorithm (to draw a line) and how
+/// to implement it in software, this controller simplifies things - 
+/// You just give it (x1,y1), (x2,y2) and tell it to draw a line. 
+/// Without the hardware acceleration built into the RA8875, the host would have to
+/// compute every point, set the graphics cursor to that point, and fill in that
+/// point with the target color. A diagonal line of some length might take 100
+/// interactions instead of just a few. Other drawing primitives are similarly easy. 
+///
+/// It has some built-in fonts, which can be enhanced with optional font-chips, and 
+/// with the provided software font engine, and a few instructions, you can convert
+/// most any True Type Font into the data structures suitable for this display. 
+///
+/// To round out the features, this library offers the ability to render Bitmap (BMP),
+/// Icon (ICO), Join Photographic Experts Group (JPG), and Graphics Interchange Format 
+/// (GIF) images. These are implemented primarily in software, taking advantage of the 
+/// hardware acceleration where it can. 
+///
+/// When you are satisfied with what appears on screen, there is a PrintScreen method 
+/// to pull that image back out and write it to a file system as a BitMap image.
 ///
 /// The controller additionally supports backlight control (via PWM), keypad scanning
-/// (for a 4 x 5 matrix) and resistive touch-panel support. Recently support for a 
-/// capacitive touch screen was integrated, in a manner that makes the resistive and
-/// capactive interfaces nearly identical.
+/// (for a 4 x 5 matrix) and resistive touch-panel support. Support for capacitive
+/// touch screens is also integrated, in a manner that makes the resistive and
+/// capacitive interfaces nearly API identical. The capacitive touch support is for 
+/// either the FT5206 or the GSL1680 controller chips.
+///
+/// Here's a few hints to get started:
+/// * @ref Display_Config
+/// * @ref Touch_Panel
+/// * @ref Hardwired_KeyPad
+/// * @ref Example_Program
+/// * @ref Wiring_Diagram
+/// * @ref Future_Plans
+///
+/// @todo Add APIs for the 2nd RA8875 PWM channel. If the frequency can be independently
+///     controlled, it could be used as a simple beeper.
+/// @todo Figure out how to "init()" in the constructor. I ran into some issues if
+///     the display was instantiated before main(), and the code would not run,
+///     thus the exposure and activation of the init() function. If the constructor
+///     was within main(), then it seemed to work as expected.
 ///
-/// @section Display_Config Display Configuration
+/// @note As the author of this library, let me state that I am not affiliated with
+///     Raio (silicon provider of the RA8875), or with BuyDisplay.com (where a lot 
+///     of these displays can be purchased), I am simply a very satisfied customer 
+///     of the technology of the RA8875 chip.
+///
+/// @copyright Copyright © 2012-2019 by Smartware Computing, all rights reserved.
+///     This library is predominantly, that of Smartware Computing, however some
+///     portions are compiled from the work of others. Where the contribution of 
+///     others was listed as copyright, that copyright is maintained, even as a 
+///     derivative work may have been created for better integration in this library.
+///     See @ref Copyright_References.
+///
+/// @page Copyright_References Copyright References
+/// 
+/// Following are links to the known copyright references. If I overlooked any, it was
+/// unintentional - please let me know so I can update it. Some portions of the code
+/// have been acquired from the cloud, and where any copyright information was available,
+/// it was preserved.
+///
+/// * @ref GraphicDisplay_Copyright
+/// * @ref TextDisplay_Copyright
+/// * @ref TinyJPEGDecompressor_Copyright
+/// * @ref RA8875::TouchPanelComputeCalibration
+///
+/// @page Display_Config Display Configuration
 ///
 /// This section details basics for bringing the display online. At a minimum,
-/// the display is instantiated. After that any of the available commands
+/// the display is instantiated, after which nearly any of the available commands
 /// may be issued.
 ///
 /// During the instantiation, the display is powered on, cleared, and the backlight
 /// is energized. Additionally, the keypad and touchscreen features are activated.
-/// It is important to keep in mind that the keypad had the default mapping, and
-/// the touchscreen does not have the calibration matrix configured, so additional
-/// steps may be necessary.
+/// It is important to keep in mind that the keypad has its default mapping, 
+/// a resistive touchscreen does not yet have the calibration matrix configured, 
+/// and the RA8875::init() function is required to configure other important options
+/// like the display resolution.
 /// 
 /// @code 
 /// RA8875 lcd(p5, p6, p7, p12, NC, "tft");
@@ -37,34 +107,164 @@
 /// ...
 /// @endcode
 ///
-/// @section Touch_Panel Touch Panel
+/// @section RA8875_Capabilities Basic Capabilities
+/// @subsection RA8875_Resolution Display Resolution
+/// There are two very common display resolutions that use the RA8875:
+/// * 480 x 272 pixels
+/// * 800 x 480 pixels
+///
+/// @subsection RA8875_Layers Display Layers
+/// The RA8875 Controller, depending on the resolution and color depth, can support 
+/// multiple display layers.
+///
+/// * 1 Layer - when the color depth is 16 bits per pixel
+/// * 2 Layers - when the color depth is 8 bits per pixel and the resolution is 480 x 272.
 ///
-/// The supported touch panel interface is for a resistive panel, and is natively 
-/// supported by the RA8875 controller. There are a few steps to enable this interface.
+///
+///
+/// @page Touch_Panel Touch Panel
+///
+/// There is support for various touch panel interfaces.
+/// * @ref Resistive_Touch_Panel - native control for a resistive touch panel. 
+///     There are a few steps to enable this interface.
+/// * @ref CapSense_FT5206 - FT5206 capacitive touch controller, integrated in 
+///     several popular RA8875-based displays. See @ref Capacitive_Touch_Panel.
+/// * @ref CapSense_GSL1680 - GSL1680 capacitive touch controller, integrated in 
+///     several popular RA8875-based displays. See @ref Capacitive_Touch_Panel.
+///
 ///
-/// @subsection Touch_Panel_Enable Touch Panel Enable
+///
+/// @page Hardwired_KeyPad Hardwired Keypad
+///
+/// The RA8875 controller supports a hardwired matrix of keys, which can be used to
+/// easily monitor for up to 20 keys (4 x 5 matrix). It is quite flexible, so these
+/// could be a set of independent functions, or they could be wired as a simple 
+/// calculator or telephone style of keypad.
+///
+/// Various parameters can be configured, such as the scan rate, using @ref RA8875::KeypadInit().
+/// The keypad has a default keypad mapping, but there is an API that permits
+/// installing a custom @ref RA8875::SetKeyMap().
 ///
-/// See @ref TouchPanelInit has two forms - fully automatic, and controlled. See the APIs for
-/// details.
+/// @page Resistive_Touch_Panel Resistive Touch Panel
+///
+/// The RA8875 controller supports a native resistive touchscreen interface than can
+/// track a single touch-point. 
 ///
-/// @subsection Touch_Panel_Calibration
+/// If your display has this option, you can easily accept touch input, but it comes with
+/// some additional requirements - calibration being the primary concern.
+///
+/// @section Touch_Panel_Enable Touch Panel Enable
+///
+/// @ref RA8875::TouchPanelInit() has two forms - one fully automatic, and more controlled. 
+/// See the APIs for details.
+///
+/// @section Touch_Panel_Calibration
 /// 
 /// The touch panel is not initially calibrated on startup. The application should 
 /// provide a means to activate the calibration process, and that should not require
 /// the touchscreen as it may not yet be usable. Alternately, a calibration matrix
 /// can be loaded from non-volatile and installed.
 ///
-/// @section Keypad Keypad
+/// @page Capacitive_Touch_Panel Capacitive Touch Panel
+///
+/// Common to many of the commercially available display modules that use the RA8875 is
+/// an option for a capacitive sense touch screen [Cap Sense] There are two known Cap Sense
+/// controllers that this library can work with:
+///
+/// * @ref CapSense_FT5206.
+/// * @ref CapSense_GSL1680.
+/// 
+/// @page CapSense_FT5206 Capacitive Sense - FT5206 Controller
+///
+/// This is the more common controller. It supports up to 5 simultaneous touch point
+/// tracking.
+///
+/// @page CapSense_GSL1680 Capacitive Sense - GSL1680 Controller
+///
+/// This is the less common controller. It supports either 5 or 10 simultaneous touch point
+/// tracking, depending on the firmware installed in the controller.
+///
+/// @page Example_Program Example Program
+///
+/// This is just a small sample of what can be done, and what it can look like:
+/// @image html Example_Program.png "Example Program"
 ///
-/// The keypad has a default keypad mapping, but there is an API that permits
-/// installing a custom keymap.
+/// @code
+/// // Small test program
+/// #include "mbed.h"       // Working: v146, not fully working: v147
+/// #include "RA8875.h"     // Working: v149
+/// RA8875 lcd(p5, p6, p7, p12, NC, "tft");
+///  
+/// int main()
+/// {
+///     lcd.init(480,272,16,100);
+///     lcd.printf("printing 3 x 2 = %d", 3*2);
+///     lcd.circle(       400,25,  25,               BrightRed);
+///     lcd.fillcircle(   400,25,  15,               RGB(128,255,128));
+///     lcd.ellipse(      440,75,  35,20,            BrightBlue);
+///     lcd.fillellipse(  440,75,  25,10,            Blue);
+///     lcd.triangle(     440,100, 475,110, 450,125, Magenta);
+///     lcd.filltriangle( 445,105, 467,111, 452,120, Cyan);
+///     lcd.rect(         400,130, 475,155,          Brown);
+///     lcd.fillrect(     405,135, 470,150,          Pink);
+///     lcd.roundrect(    410,160, 475,190, 10,8,    Yellow);
+///     lcd.fillroundrect(415,165, 470,185,  5,3,    Orange);
+///     lcd.line(         430,200, 460,230,          RGB(0,255,0));
+///     for (int i=0; i<=30; i+=5) 
+///         lcd.pixel(435+i,200+i, White);
+/// }
+/// @endcode
 ///
-/// @todo Add APIs for the 2nd PWM channel, which might be quite useful as a simple
-///     beeper.
-/// @todo Figure out how to "init()" in the constructor. I ran into some issues if
-///     the display was instantiated before main(), and the code would not run,
-///     thus the exposure and activation of the init() function. If the constructor
-///     was within main(), then it seemed to work as expected.
+/// @page Wiring_Diagram Example Wiring Diagram
+///
+/// This library was crafted around the 4-Wire SPI interface. This was the chosen 
+/// interface method in order to balance the requirements of the host micro IO with 
+/// the capability of this display. Alternatives include: 3-Wire SPI, I2C, 8-bit and
+/// 16-bit parallel.
+/// 
+/// @image html Example_Wiring.png "Example Wiring Diagram"
+///
+/// @page Future_Plans Future Plans
+///
+/// Following are some notions of future plans. This does not mean they will all be
+/// implemented, just consider them as things I'm thinking about. If you have a suggestion,
+/// please send it to me.
+///
+/// - Change the return values for several functions. Most functions return @ref RA8875::RetCode_t,
+///     but would benefit from returning a data type related to that function. For example,
+///     @ref RA8875::SelectDrawingLayer() could return the current drawing layer even as a new
+///     layer is defined. This can facilitate switching back and forth between configurations.
+///     Examples:
+///     - @ref RA8875::SelectDrawingLayer()
+///     - @ref RA8875::SelectUserFont()
+///     - @ref RA8875::SetBackgroundTransparencyColor()
+///     - @ref RA8875::SetLayerMode()
+///     - @ref RA8875::SetLayerTransparency()
+///     - @ref RA8875::SetOrientation()
+///     - @ref RA8875::SetTextCursor()
+///     - @ref RA8875::SetTextCursorControl()
+///     - @ref RA8875::SetTextFont()
+///     - @ref RA8875::SetTextFontControl()
+///     - @ref RA8875::SetTextFontSize()
+///     - @ref RA8875::background()
+///     - @ref RA8875::foreground()
+///     - @ref RA8875::Backlight()
+///     - @ref RA8875::window()
+///     - @ref RA8875::WindowMax()
+///
+/// - Change the title-case of the functions to be consistent. Because this was adapted 
+///     from parts of several different libraries, it isn't very consistently titled.
+///
+/// - Change names of some of the functions to be more consistent. Why are some Set* 
+///     and others are Select*. The layer commands SetDrawingLayer and GetDrawingLayer do
+///     not need 'Drawing' in them.
+///
+/// - Improve the PrintScreen method. There are two functions - one that accepts a filename, 
+///     and a second more experimental version that could pipe the image stream back to
+///     a calling process. This could be used, for example, to send the image over a
+///     network interface. The intended side effect is that there is then only a single
+///     PrintScreen method with either an internal helper (for file system access) or
+///     a callback for the user handled process.
 ///
 #ifndef RA8875_H
 #define RA8875_H
@@ -89,7 +289,57 @@
 // .cpp file. See also the bottom of this file.
 //#define TESTENABLE
 
-/// DOS colors - slightly color enhanced
+/// @page PredefinedColors Predefined Colors
+///
+/// Keep in mind that the color scheme shown here is unlikely to precisely match
+/// that on the actual display. The perceived color is additional affected by 
+/// other attributes, such as the backlight brightness.
+///
+/// These are the predefined colors that are typically used where any @ref color_t 
+/// variable is applied.
+///
+/// <blockquote>
+/// <table>
+/// <tr>
+/// <td bgcolor='#000000'>&nbsp;</td><td>@ref Black</td>
+/// <td bgcolor='#0000BB'>&nbsp;</td><td>@ref Blue</td>
+/// <td bgcolor='#00BB00'>&nbsp;</td><td>@ref Green</td>
+/// <td bgcolor='#00BBBB'>&nbsp;</td><td>@ref Cyan</td>
+/// </tr>
+/// <tr>
+/// <td bgcolor='#BB0000'>&nbsp;</td><td>@ref Red</td>
+/// <td bgcolor='#BB00BB'>&nbsp;</td><td>@ref Magenta</td>
+/// <td bgcolor='#3F3F3F'>&nbsp;</td><td>@ref Brown</td>
+/// <td bgcolor='#BBBBBB'>&nbsp;</td><td>@ref Gray</td>
+/// </tr>
+/// <tr>
+/// <td bgcolor='#555555'>&nbsp;</td><td>@ref Charcoal</td>
+/// <td bgcolor='#0000FF'>&nbsp;</td><td>@ref BrightBlue</td>
+/// <td bgcolor='#00FF00'>&nbsp;</td><td>@ref BrightGreen</td>
+/// <td bgcolor='#00FFFF'>&nbsp;</td><td>@ref BrightCyan</td>
+/// </tr>
+/// <tr>
+/// <td bgcolor='#FF5555'>&nbsp;</td><td>@ref Orange</td>
+/// <td bgcolor='#FF55FF'>&nbsp;</td><td>@ref Pink</td>
+/// <td bgcolor='#BBBB00'>&nbsp;</td><td>@ref Yellow</td>
+/// <td bgcolor='#FFFFFF'>&nbsp;</td><td>@ref White</td>
+/// </tr>
+/// <tr>
+/// <td bgcolor='#00003F'>&nbsp;</td><td>@ref DarkBlue </td>
+/// <td bgcolor='#003F00'>&nbsp;</td><td>@ref DarkGreen</td>
+/// <td bgcolor='#003F3F'>&nbsp;</td><td>@ref DarkCyan </td>
+/// <td bgcolor='#3F0000'>&nbsp;</td><td>@ref DarkRed  </td>
+/// </tr>
+/// <tr>
+/// <td bgcolor='#3F003F'>&nbsp;</td><td>@ref DarkMagenta</td>
+/// <td bgcolor='#3F3F00'>&nbsp;</td><td>@ref DarkBrown  </td>
+/// <td bgcolor='#3F3F3F'>&nbsp;</td><td>@ref DarkGray   </td>
+/// <td bgcolor='#FFFFFF'>&nbsp;</td><td>&nbsp;</td>
+/// </tr>
+/// </table>
+/// </blockquote>
+///
+
 #define Black       (color_t)(RGB(0,0,0))
 #define Blue        (color_t)(RGB(0,0,187))
 #define Green       (color_t)(RGB(0,187,0))
@@ -172,16 +422,16 @@
 class RA8875 : public GraphicsDisplay
 {
 public:   
-    /// cursor type to be shown as the text cursor.
+    /// cursor type argument for @ref SetTextCursorControl()
     typedef enum
     {
         NOCURSOR,   ///< cursor is hidden
-        IBEAM,      ///< | cursor
-        UNDER,      ///< _ cursor
+        IBEAM,      ///< I Beam '|' cursor
+        UNDER,      ///< Underscore '_' cursor
         BLOCK       ///< Block cursor
     } cursor_t;
 
-    /// font type selection.
+    /// font type selection argument for @ref SetTextFont()
     typedef enum
     {
         ISO8859_1,      ///< ISO8859-1 font
@@ -190,7 +440,8 @@
         ISO8859_4       ///< ISO8859-4 font
     } font_t;
     
-    /// display orientation
+    /// display orientation argument for @ref SetOrientation()
+    /// with landscape mode as the normal (0 degree) orientation.
     typedef enum
     {
         normal,         ///< normal (landscape) orientation
@@ -200,27 +451,27 @@
         rotate_270,     ///< rotated clockwise 270 degree
     } orientation_t;
     
-    /// alignment  
+    /// alignment control argument for @ref SetTextFontControl()
     typedef enum
     {
         align_none,     ///< align - none
         align_full      ///< align - full
     } alignment_t;    
     
-    /// Font Horizontal Scale factor - 1, 2, 3 4
+    /// Font Horizontal Scale factor - 1, 2, 3 4 for @ref SetTextFontSize(), @ref GetTextFontSize()
     typedef int HorizontalScale;
     
-    /// Font Vertical Scale factor - 1, 2, 3, 4
+    /// Font Vertical Scale factor - 1, 2, 3, 4 for @ref SetTextFontSize(), @ref GetTextFontSize()
     typedef int VerticalScale;
 
-    /// Clear screen region
+    /// Clear screen region option for @ref clsw()
     typedef enum
     {
         FULLWINDOW,     ///< Full screen
         ACTIVEWINDOW    ///< active window/region
     } Region_t;
-    
-    /// Set the Layer Display Mode. @ref SetLayerMode
+
+    /// Layer Display Mode argument for @ref SetLayerMode, @ref GetLayerMode
     typedef enum
     {
         ShowLayer0,         ///< Only layer 0 is visible, layer 1 is hidden (default)
@@ -239,7 +490,7 @@
         TP_Manual,             ///< Manual touch detection mode
     } tpmode_t;
 
-    /// PrintScreen callback commands
+    /// PrintScreen callback commands for the user code @ref PrintCallback_T()
     typedef enum
     {
         OPEN,       ///< command to open the file. cast uint32_t * to the buffer to get the total size to be written.
@@ -282,11 +533,11 @@
     /// @param cmd is the command to execute. See @ref filecmd_t.
     /// @param buffer is a pointer to the buffer being passed.
     /// @param size is the number of bytes in the buffer.
-    /// @returns the noerror signal.
+    /// @returns @ref RetCode_t value.
     ///
     typedef RetCode_t (* PrintCallback_T)(filecmd_t cmd, uint8_t * buffer, uint16_t size);
     
-    /// Idle reason provided in the Idle Callback
+    /// Idle reason provided in the Idle Callback @ref IdleCallback_T()
     typedef enum {
         unknown,            ///< reason has not been assigned (this should not happen)
         status_wait,        ///< driver is polling the status register while busy
@@ -326,8 +577,7 @@
     /// @param reason informs the callback why it is idle.
     /// @param param is a 2nd parameter, which is used for certain reason codes
     ///        for 'progress' reason code, param ranges from 0 to 100 (percent)
-    /// @returns noerror to allow the driver continue waiting.
-    /// @returns external_abort if the pending action should be aborted.
+    /// @returns @ref RetCode_t value.
     ///
     typedef RetCode_t (* IdleCallback_T)(IdleReason_T reason, uint16_t param = 0);
 
@@ -476,13 +726,13 @@
     ///             parameter causes the driver to initialize.
     ///             - If the constructor was called without support for the capacitive driver, this
     ///             parameter is used to enable and initialize the resistive touchscreen driver.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t init(int width = 480, int height = 272, int color_bpp = 16, 
         uint8_t poweron = 40, bool keypadon = true, bool touchscreeenon = true);
 
 
-    /// Get a pointer to the error code.
+    /// Get a pointer to the text string representing the RetCode_t
     ///
     /// This method returns a pointer to a text string that matches the
     /// code. See @ref RetCode_t.
@@ -523,7 +773,7 @@
     /// @param[out] prevLayer is an optiona pointer to where the previous layer
     ///     will be written, making it a little easer to restore layers.
     ///     Writes 0 or 1 when the pointer is not NULL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t SelectDrawingLayer(uint16_t layer, uint16_t * prevLayer = NULL);
  
@@ -568,7 +818,7 @@
     /// @endcode
     ///
     /// @param[in] mode sets the mode in the Layer Transparency Register.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t SetLayerMode(LayerMode_T mode);
  
@@ -599,7 +849,7 @@
     ///
     /// @param[in] layer1 sets the layer 1 transparency.
     /// @param[in] layer2 sets the layer 2 transparency.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     /// 
     RetCode_t SetLayerTransparency(uint8_t layer1, uint8_t layer2);
  
@@ -611,7 +861,7 @@
     /// 
     /// @param[in] color is optional and expressed in 16-bit format. If not
     ///     supplied, a default of Black is used.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t SetBackgroundTransparencyColor(color_t color = RGB(0,0,0));
  
@@ -635,7 +885,7 @@
     /// Additionally, for an even simpler interface for most RESISTIVE
     /// touch use cases, the init() method can perform the calibration.
     ///
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t TouchPanelInit(void);
         
@@ -680,7 +930,7 @@
     ///                                 - TP_ADC_SAMPLE_16384_CLKS: Wait 16384 system clocks   
     ///                                 - TP_ADC_SAMPLE_32768_CLKS: Wait 32768 system clocks   
     ///                                 - TP_ADC_SAMPLE_65536_CLKS: Wait 65536 system clocks
-    /// @returns success/failure code. See @ref RetCode_t.   
+    /// @returns @ref RetCode_t value.   
     ///
     RetCode_t TouchPanelInit(uint8_t bTpEnable, uint8_t bTpAutoManual, uint8_t bTpDebounce, 
         uint8_t bTpManualMode, uint8_t bTpAdcClkDiv, uint8_t bTpAdcSampleTime);
@@ -928,7 +1178,7 @@
     ///     for further details. See also the article
     ///     http://www.embedded.com/design/system-integration/4023968/How-To-Calibrate-Touch-Screens
     ///
-    /// @copyright Copyright (c) 2001, Carlos E. Vidales. All rights reserved.
+    /// @copyright Copyright &copy; 2001, Carlos E. Vidales. All rights reserved.
     ///     This sample program was written and put in the public domain 
     ///      by Carlos E. Vidales.  The program is provided "as is" 
     ///      without warranty of any kind, either expressed or implied.
@@ -954,7 +1204,7 @@
     /// @param[out] matrix is an optional parameter to hold the calibration matrix 
     ///             as a result of the calibration. This can be saved in  
     ///             non-volatile memory to recover the calibration after a power fail.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t TouchPanelComputeCalibration(point_t display[3], point_t screen[3], tpMatrix_t * matrix);
 
@@ -970,7 +1220,7 @@
     /// @param[out] matrix is an optional parameter to hold the calibration matrix 
     ///             as a result of the calibration. This can be saved in  
     ///             non-volatile memory to recover the calibration after a power fail.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t TouchPanelCalibrate(tpMatrix_t * matrix = NULL);
 
@@ -991,7 +1241,7 @@
     /// @param[in] maxwait_s is the maximum number of seconds to wait for a touch
     ///             calibration. If no touch panel installed, it then reports
     ///             touch_cal_timeout. Default: 30 s.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t TouchPanelCalibrate(const char * msg, tpMatrix_t * matrix = NULL, int maxwait_s = 30);
 
@@ -1016,7 +1266,7 @@
     /// @endcode
     /// 
     /// @param[in] matrix is a pointer to the touch panel calibration matrix.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t TouchPanelSetMatrix(tpMatrix_t * matrix);
 
@@ -1076,7 +1326,7 @@
     /// @param[in] interruptEnable when true, enables interrupts from keypress (default: false).
     /// @param[in] wakeupEnable when true, activates the wakeup function (default: false).
     ///
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t  KeypadInit(bool scanEnable = true, bool longDetect = false, 
         uint8_t sampleTime = 0, uint8_t scanFrequency = 0, 
@@ -1119,7 +1369,7 @@
     ///             from raw code to your reassigned value.
     ///            If CodeList is NULL, the original raw value key map is
     ///             restored.
-    /// @returns noerror.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t SetKeyMap(const uint8_t * CodeList = NULL);
 
@@ -1189,7 +1439,7 @@
     /// @returns true if pRect1 and pRect2 intersect and pRect1 is written with
     ///             the rectangle describing the intersection.
     ///
-    bool Intersect(rect_t * rect1, const rect_t * rect2);
+    bool Intersect(rect_t * pRect1, const rect_t * pRect2);
     
     
     /// Write a command to the display with a word of data.
@@ -1198,7 +1448,7 @@
     ///
     /// @param[in] command is the command to write.
     /// @param[in] data is data to be written to the command register.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t WriteCommandW(uint8_t command, uint16_t data);
 
@@ -1210,7 +1460,7 @@
     /// @param[in] command is the command to write.
     /// @param[in] data is optional data to be written to the command register
     ///     and only occurs if the data is in the range [0 - 0xFF].
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t WriteCommand(unsigned char command, unsigned int data = 0xFFFF);
 
@@ -1220,7 +1470,7 @@
     /// This is a high level command, and may invoke several primitives.
     ///
     /// @param[in] data is the data to write.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t WriteDataW(uint16_t data);
 
@@ -1230,7 +1480,7 @@
     /// This is a high level command, and may invoke several primitives.
     ///
     /// @param[in] data is the data to write.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t WriteData(unsigned char data);
 
@@ -1330,7 +1580,7 @@
     /// 
     /// @param[in] column is the horizontal position in character positions
     /// @param[in] row is the vertical position in character positions
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t locate(textloc_t column, textloc_t row);
 
@@ -1345,7 +1595,7 @@
     ///
     /// @param[in] x is the horizontal position in pixels (from the left edge)
     /// @param[in] y is the vertical position in pixels (from the top edge)
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t SetTextCursor(loc_t x, loc_t y);
 
@@ -1360,7 +1610,7 @@
     /// @endcode
     ///
     /// @param[in] p is the x:y point in pixels from the top-left.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t SetTextCursor(point_t p);
 
@@ -1401,7 +1651,7 @@
     /// @param[in] cursor can be set to NOCURSOR (default), IBEAM,
     ///         UNDER, or BLOCK.
     /// @param[in] blink can be set to true or false (default false)
-    /// @returns success/failure code. See @ref RetCode_t
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t SetTextCursorControl(cursor_t cursor = NOCURSOR, bool blink = false);
 
@@ -1417,7 +1667,7 @@
     ///
     /// @note if either hScale or vScale is outside of its permitted range,
     ///     the command is not executed.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t SetTextFont(font_t font = ISO8859_1);
     
@@ -1459,7 +1709,7 @@
     ///         - rotate_90 (clockwise)
     ///         - rotate_180
     ///         - rotate_270 (clockwise)
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t SetOrientation(orientation_t angle = normal);
     
@@ -1494,7 +1744,7 @@
     /// 
     /// @note if either hScale or vScale is outside of its permitted range,
     ///     the command is not executed.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t SetTextFontControl(fill_t fillit = FILL, 
         HorizontalScale hScale = 1, 
@@ -1531,7 +1781,7 @@
     ///
     /// @note if either hScale or vScale is outside of its permitted range,
     ///     the command is not executed.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t SetTextFontSize(HorizontalScale hScale = 1, VerticalScale vScale = -1);
 
@@ -1546,7 +1796,7 @@
     ///     will be written. If the pointer is null, that item will be ignored.
     /// @param[out] vScale is a pointer to memory where the vertical scale factor
     ///     will be written. If the pointer is null, that item will be ignored.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t GetTextFontSize(HorizontalScale * hScale, VerticalScale * vScale);
 
@@ -1587,7 +1837,7 @@
     ///
     /// @param[in] x is the horizontal position in pixels (from the left edge)
     /// @param[in] y is the vertical position in pixels (from the top edge)
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t SetGraphicsCursor(loc_t x, loc_t y);
 
@@ -1595,7 +1845,7 @@
     /// the memory cursor.
     ///
     /// @param[in] p is the point representing the cursor position to set
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t SetGraphicsCursor(point_t p);
     
@@ -1611,7 +1861,7 @@
     ///
     /// @param[in] x is the horizontal position in pixels (from the left edge)
     /// @param[in] y is the vertical position in pixels (from the top edge)
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t SetGraphicsCursorRead(loc_t x, loc_t y);
     
@@ -1638,7 +1888,7 @@
     /// @endcode
     ///
     /// @param[in] r is the rect_t used to set the window.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t window(rect_t r);
     
@@ -1669,7 +1919,7 @@
     /// @param[in] y is the top edge in pixels.
     /// @param[in] width is the window width in pixels.
     /// @param[in] height is the window height in pixels.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t window(loc_t x = 0, loc_t y = 0, dim_t width = (dim_t)-1, dim_t height = (dim_t)-1);
     
@@ -1690,7 +1940,7 @@
     ///     1 is set, layer 1 is cleared. If both are set, both layers
     ///     are cleared. Any other value does not cause an action.
     ///     
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t cls(uint16_t layers = 0);
 
@@ -1708,7 +1958,7 @@
     ///
     /// @param[in] region is an optional parameter that defaults to FULLWINDOW
     ///         or may be set to ACTIVEWINDOW.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t clsw(RA8875::Region_t region = FULLWINDOW);
 
@@ -1716,7 +1966,7 @@
     /// Set the background color.
     ///
     /// @param[in] color is expressed in 16-bit format.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t background(color_t color);
 
@@ -1726,7 +1976,7 @@
     /// @param[in] r is the red element of the color.
     /// @param[in] g is the green element of the color.
     /// @param[in] b is the blue element of the color.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t background(unsigned char r, unsigned char g, unsigned char b);
     
@@ -1734,7 +1984,7 @@
     /// Set the foreground color.
     ///
     /// @param[in] color is expressed in 16-bit format.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t foreground(color_t color);
     
@@ -1744,14 +1994,14 @@
     /// @param[in] r is the red element of the color.
     /// @param[in] g is the green element of the color.
     /// @param[in] b is the blue element of the color.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t foreground(unsigned char r, unsigned char g, unsigned char b);
     
     
     /// Get the current foreground color value.
     ///
-    /// @returns the current foreground color.
+    /// @returns the current foreground color as @ref color_t.
     ///
     color_t GetForeColor(void);
     
@@ -1762,7 +2012,8 @@
     ///         set the forecolor!
     ///
     /// @param[in] p is the point_t defining the location.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @param[in] color is expressed in 16-bit format.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t pixel(point_t p, color_t color);
     
@@ -1770,7 +2021,7 @@
     /// Draw a pixel in the current foreground color.
     ///
     /// @param[in] p is the point_t defining the location.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t pixel(point_t p);
     
@@ -1783,7 +2034,7 @@
     /// @param[in] x is the horizontal offset to this pixel.
     /// @param[in] y is the vertical offset to this pixel.
     /// @param[in] color defines the color for the pixel.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t pixel(loc_t x, loc_t y, color_t color);
     
@@ -1792,7 +2043,7 @@
     ///
     /// @param[in] x is the horizontal offset to this pixel.
     /// @param[in] y is the veritical offset to this pixel.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t pixel(loc_t x, loc_t y);
     
@@ -1801,7 +2052,7 @@
     ///
     /// @param[in] x is the horizontal offset to this pixel.
     /// @param[in] y is the vertical offset to this pixel.
-    /// @returns the pixel. see @color_t
+    /// @returns the pixel. See @ref color_t
     ///
     virtual color_t getPixel(loc_t x, loc_t y);
     
@@ -1812,7 +2063,7 @@
     /// @param[in] count is the number of pixels to write.
     /// @param[in] x is the horizontal position on the display.
     /// @param[in] y is the vertical position on the display.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t pixelStream(color_t * p, uint32_t count, loc_t x, loc_t y);
     
@@ -1823,7 +2074,7 @@
     /// @param[in] count is the number of pixels to read.
     /// @param[in] x is the horizontal offset to this pixel.
     /// @param[in] y is the vertical offset to this pixel.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t getPixelStream(color_t * p, uint32_t count, loc_t x, loc_t y);
 
@@ -1849,7 +2100,7 @@
     /// @param[in] h is the height of the rectangular region to fill.
     /// @param[in] boolStream is the inline memory image from which to extract
     ///         the bitstream.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t booleanStream(loc_t x, loc_t y, dim_t w, dim_t h, const uint8_t * boolStream);
 
@@ -1862,7 +2113,7 @@
     /// @param[in] p1 is the point to start the line.
     /// @param[in] p2 is the point to end the line.
     /// @param[in] color defines the foreground color.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t line(point_t p1, point_t p2, color_t color);
 
@@ -1873,7 +2124,7 @@
     ///
     /// @param[in] p1 is the point to start the line.
     /// @param[in] p2 is the point to end the line.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t line(point_t p1, point_t p2);
 
@@ -1888,7 +2139,7 @@
     /// @param[in] x2 is the horizontal end of the line.
     /// @param[in] y2 is the vertical end of the line.
     /// @param[in] color defines the foreground color.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t line(loc_t x1, loc_t y1, loc_t x2, loc_t y2, color_t color);
 
@@ -1901,7 +2152,7 @@
     /// @param[in] y1 is the vertical start of the line.
     /// @param[in] x2 is the horizontal end of the line.
     /// @param[in] y2 is the vertical end of the line.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t line(loc_t x1, loc_t y1, loc_t x2, loc_t y2);
 
@@ -1923,7 +2174,7 @@
     /// @param[in] p2 is the point to end the line.
     /// @param[in] thickness is the line thickness.
     /// @param[in] color defines the foreground color.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     /// 
     RetCode_t ThickLine(point_t p1, point_t p2, dim_t thickness, color_t color);
 
@@ -1936,7 +2187,7 @@
     /// @param[in] rect defines the rectangle.
     /// @param[in] color defines the foreground color.
     /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t rect(rect_t rect, color_t color, fill_t fillit = NOFILL);
     
@@ -1949,7 +2200,7 @@
     /// @param[in] rect defines the rectangle.
     /// @param[in] color defines the foreground color.
     /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t fillrect(rect_t rect, color_t color, fill_t fillit = FILL);
 
@@ -1965,7 +2216,7 @@
     /// @param[in] y2 is the vertical end of the line.
     /// @param[in] color defines the foreground color.
     /// @param[in] fillit is optional to FILL the rectangle. default is FILL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t rect(loc_t x1, loc_t y1, loc_t x2, loc_t y2, 
         color_t color, fill_t fillit = NOFILL);
@@ -1982,7 +2233,7 @@
     /// @param[in] y2 is the vertical end of the line.
     /// @param[in] color defines the foreground color.
     /// @param[in] fillit is optional to NOFILL the rectangle. default is FILL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t fillrect(loc_t x1, loc_t y1, loc_t x2, loc_t y2, 
         color_t color, fill_t fillit = FILL);
@@ -1997,7 +2248,7 @@
     /// @param[in] x2 is the horizontal end of the line.
     /// @param[in] y2 is the vertical end of the line.
     /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t rect(loc_t x1, loc_t y1, loc_t x2, loc_t y2, 
         fill_t fillit = NOFILL);
@@ -2025,7 +2276,7 @@
     ///         is returned.
     /// @param[in] color defines the foreground color.
     /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t fillroundrect(loc_t x1, loc_t y1, loc_t x2, loc_t y2, 
         dim_t radius1, dim_t radius2, color_t color, fill_t fillit = FILL);
@@ -2050,7 +2301,7 @@
     ///         is returned.
     /// @param[in] color defines the foreground color.
     /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t fillroundrect(rect_t r, 
         dim_t radius1, dim_t radius2, color_t color, fill_t fillit = FILL);
@@ -2075,7 +2326,7 @@
     ///         is returned.
     /// @param[in] color defines the foreground color.
     /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t roundrect(rect_t r, 
         dim_t radius1, dim_t radius2, color_t color, fill_t fillit = NOFILL);
@@ -2103,7 +2354,7 @@
     ///         is returned.
     /// @param[in] color defines the foreground color.
     /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t roundrect(loc_t x1, loc_t y1, loc_t x2, loc_t y2, 
         dim_t radius1, dim_t radius2, color_t color, fill_t fillit = NOFILL);
@@ -2127,7 +2378,7 @@
     ///         that this value < 1/2 the height of the rectangle, or bad_parameter 
     ///         is returned.
     /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t roundrect(loc_t x1, loc_t y1, loc_t x2, loc_t y2, 
         dim_t radius1, dim_t radius2, fill_t fillit = NOFILL);
@@ -2146,7 +2397,7 @@
     /// @param[in] y3 is the vertical for point 3.
     /// @param[in] color defines the foreground color.
     /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t triangle(loc_t x1, loc_t y1, loc_t x2, loc_t y2, 
         loc_t x3, loc_t y3, color_t color, fill_t fillit = NOFILL);
@@ -2165,7 +2416,7 @@
     /// @param[in] y3 is the vertical for point 3.
     /// @param[in] color defines the foreground color.
     /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t filltriangle(loc_t x1, loc_t y1, loc_t x2, loc_t y2, 
         loc_t x3, loc_t y3, color_t color, fill_t fillit = FILL);
@@ -2182,7 +2433,7 @@
     /// @param[in] x3 is the horizontal for point 3.
     /// @param[in] y3 is the vertical for point 3.
     /// @param[in] fillit is optional to FILL the rectangle. default is NOFILL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t triangle(loc_t x1, loc_t y1, loc_t x2, loc_t y2, 
         loc_t x3, loc_t y3, fill_t fillit = NOFILL);
@@ -2197,7 +2448,7 @@
     /// @param[in] radius defines the size of the circle.
     /// @param[in] color defines the foreground color.
     /// @param[in] fillit is optional to FILL the circle. default is NOFILL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t circle(point_t p, dim_t radius, color_t color, fill_t fillit = NOFILL);
 
@@ -2211,7 +2462,7 @@
     /// @param[in] radius defines the size of the circle.
     /// @param[in] color defines the foreground color.
     /// @param[in] fillit is optional to FILL the circle. default is FILL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t fillcircle(point_t p, dim_t radius, color_t color, fill_t fillit = FILL);
 
@@ -2223,7 +2474,7 @@
     /// @param[in] p defines the center of the circle.
     /// @param[in] radius defines the size of the circle.
     /// @param[in] fillit is optional to FILL the circle. default is NOFILL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t circle(point_t p, dim_t radius, fill_t fillit = NOFILL);
 
@@ -2238,7 +2489,7 @@
     /// @param[in] radius defines the size of the circle.
     /// @param[in] color defines the foreground color.
     /// @param[in] fillit is optional to FILL the circle. default is NOFILL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t circle(loc_t x, loc_t y, dim_t radius, color_t color, fill_t fillit = NOFILL);
 
@@ -2253,7 +2504,7 @@
     /// @param[in] radius defines the size of the circle.
     /// @param[in] color defines the foreground color.
     /// @param[in] fillit is optional to FILL the circle. default is FILL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t fillcircle(loc_t x, loc_t y, dim_t radius, color_t color, fill_t fillit = FILL);
 
@@ -2266,7 +2517,7 @@
     /// @param[in] y is the vertical center of the circle.
     /// @param[in] radius defines the size of the circle.
     /// @param[in] fillit is optional to FILL the circle. default is NOFILL.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t circle(loc_t x, loc_t y, dim_t radius, fill_t fillit = NOFILL);
 
@@ -2281,7 +2532,7 @@
     /// @param[in] radius2 defines the vertical radius of the ellipse.
     /// @param[in] color defines the foreground color.
     /// @param[in] fillit defines whether the circle is filled or not.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t ellipse(loc_t x, loc_t y, dim_t radius1, dim_t radius2, 
         color_t color, fill_t fillit = NOFILL);
@@ -2298,7 +2549,7 @@
     /// @param[in] radius2 defines the vertical radius of the ellipse.
     /// @param[in] color defines the foreground color.
     /// @param[in] fillit defines whether the circle is filled or not.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t fillellipse(loc_t x, loc_t y, dim_t radius1, dim_t radius2, 
         color_t color, fill_t fillit = FILL);
@@ -2313,7 +2564,7 @@
     /// @param[in] radius1 defines the horizontal radius of the ellipse.
     /// @param[in] radius2 defines the vertical radius of the ellipse.
     /// @param[in] fillit defines whether the circle is filled or not.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t ellipse(loc_t x, loc_t y, dim_t radius1, dim_t radius2, fill_t fillit = NOFILL);
     
@@ -2330,6 +2581,8 @@
     /// outside of this API.
     ///
     /// @code
+    /// // Block Move Demo
+    /// 
     /// // Calibrate the resistive touch screen, and store the data on the
     /// // local file system.
     /// //
@@ -2423,7 +2676,7 @@
     ///             (write/read/move/...)
     /// @param[in] bte_rop_code [51.7-4] defines what type of BTE operation to perform
     ///             (what is placed at the destination)
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t BlockMove(uint8_t dstLayer, uint8_t dstDataSelect, point_t dstPoint,
         uint8_t srcLayer, uint8_t srcDataSelect, point_t srcPoint,
@@ -2434,14 +2687,14 @@
     /// Control display power
     ///
     /// @param[in] on when set to true will turn on the display, when false it is turned off.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t Power(bool on);
 
 
     /// Reset the display controller via the Software Reset interface.
     ///
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t Reset(void);
     
@@ -2452,7 +2705,7 @@
     /// API can be used to set the brightness.
     /// 
     /// @param[in] brightness ranges from 0 (off) to 255 (full on)
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t Backlight_u8(uint8_t brightness);
 
@@ -2469,7 +2722,7 @@
     /// API can be used to set the brightness.
     /// 
     /// @param[in] brightness ranges from 0.0 (off) to 1.0 (full on)
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t Backlight(float brightness);
 
@@ -2489,7 +2742,7 @@
     ///     format.
     ///
     /// @param[in] font is a pointer to a specially formed font resource.
-    /// @returns error code.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t SelectUserFont(const uint8_t * font = NULL);
 
@@ -2499,26 +2752,30 @@
     ///
     virtual const uint8_t * GetUserFont(void) { return font; }
 
-    /// Get the RGB value for a DOS color.
-    ///
+    /// Get the @ref color_t value from a DOS color index.
+    ///
+    /// See @ref PredefinedColors, @ref color_t.
+    /// 
     /// @code
     ///     color_t color = DOSColor(12);
     /// @endcode
     ///
-    /// @param[in] i is the color, in the range 0 to 15;
-    /// @returns the RGB color of the selected index, or 0 
-    ///     if the index is out of bounds.
+    /// @param[in] i is the color index, in the range 0 to 15;
+    /// @returns the @ref color_t value of the selected index, 
+    ///     or 0 (@ref Black) if the index is out of bounds.
     ///
     color_t DOSColor(int i);
 
 
-    /// Get the color name (string) for a DOS color.
-    ///
+    /// Get the color name (string) from a DOS color index.
+    ///
+    /// See @ref PredefinedColors, @ref color_t.
+    /// 
     /// @code
     ///     printf("color is %s\n", DOSColorNames(12));
     /// @endcode
     ///
-    /// @param[in] i is the color, in the range 0 to 15;
+    /// @param[in] i is the color index, in the range 0 to 15;
     /// @returns a pointer to a string with the color name,
     ///     or NULL if the index is out of bounds.
     /// 
@@ -2536,9 +2793,9 @@
     /// be used to send individual pixels to the screen.
     ///
     /// To conclude the graphics stream, See @ref _EndGraphicsStream should
-    /// be callled.
-    ///
-    /// @returns error code.
+    /// be called.
+    ///
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t _StartGraphicsStream(void);
 
@@ -2554,7 +2811,7 @@
     /// @endcode
     ///
     /// @param[in] pixel is a color value to be put on the screen.
-    /// @returns error code.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t _putp(color_t pixel);
 
@@ -2566,7 +2823,7 @@
     /// class in order to stop the hardware from accept the streaming
     /// data.
     ///
-    /// @returns error code.
+    /// @returns @ref RetCode_t value.
     ///
     virtual RetCode_t _EndGraphicsStream(void);
 
@@ -2596,7 +2853,7 @@
     ///     applications as a starting point.
     /// @param[in] Hz2 is an optional parameter and will set the read
     ///     speed independently of the write speed.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t frequency(unsigned long Hz = RA8875_DEFAULT_SPI_FREQ, unsigned long Hz2 = 0);
 
@@ -2623,7 +2880,7 @@
     ///             accepts the values 24, 8
     ///             NOTE: The downscaling is CPU intensive, and the operation
     ///             takes longer.
-    /// @return success or error code.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t PrintScreen(loc_t x, loc_t y, dim_t w, dim_t h, const char *Name_BMP, uint8_t bitsPerPixel = 24);
 
@@ -2651,7 +2908,7 @@
     ///             accepts the values 24, 8
     ///             NOTE: The downscaling is CPU intensive, and the operation
     ///             takes longer.
-    /// @return success or error code.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t PrintScreen(loc_t x, loc_t y, dim_t w, dim_t h, uint8_t bitsPerPixel = 24);
 
@@ -2701,7 +2958,7 @@
     /// @param[in] w is the width of the region to capture
     /// @param[in] h is the height of the region to capture.
     /// @param[out] Name_BMP is the filename to write the image to.
-    /// @return success or error code.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t PrintScreen(uint16_t layer, loc_t x, loc_t y, dim_t w, dim_t h, const char *Name_BMP);
 
@@ -2901,7 +3158,7 @@
     ///
     /// @param[in] regAddr is the register address starting the trio
     /// @param[in] color is the color to write
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t _writeColorTrio(uint8_t regAddr, color_t color);
     
@@ -2936,7 +3193,7 @@
     /// @param[in] chipsel when true will select the peripheral, and when false
     ///     will deselect the chip. This is the logical selection, and
     ///     the pin selection is the invert of this.
-    /// @returns success/failure code. See @ref RetCode_t.
+    /// @returns @ref RetCode_t value.
     ///
     RetCode_t _select(bool chipsel);