KSM edits to RA8875

Dependents:   Liz_Test_Code

Revision:
79:544eb4964795
Parent:
78:faf49c381591
Child:
81:01da2e34283d
--- a/RA8875.h	Sun Dec 28 03:14:35 2014 +0000
+++ b/RA8875.h	Sun Dec 28 19:55:16 2014 +0000
@@ -67,7 +67,7 @@
 
 // What better place for some test code than in here and the companion
 // .cpp file. See also the bottom of this file.
-#define TESTENABLE
+//#define TESTENABLE
 
 /// DOS colors - slightly color enhanced
 #define Black       (color_t)(RGB(0,0,0))
@@ -121,6 +121,7 @@
 ///
 /// int main()
 /// {
+///     lcd.init(480,272,16);
 ///     lcd.printf("printing 3 x 2 = %d", 3*2);
 ///     lcd.circle(       400,25,  25,               BrightRed);
 ///     lcd.fillcircle(   400,25,  15,               RGB(128,255,128));
@@ -223,6 +224,7 @@
     ///
     /// int main()
     /// {
+    ///     lcd.init(true,255,480,272,16); // powerup, backlight full, w x h x c
     ///     lcd.printf("printing 3 x 2 = %d", 3*2);
     ///     lcd.circle(400,25, 25, BrightRed);
     /// }
@@ -245,6 +247,29 @@
     // at startup, and not at runtime.
     //~RA8875();
     
+    /// Initialize the driver.
+    ///
+    /// @param[in] power defines if the display should be left in the power-on or off state.
+    ///            If power is true (on), the backlight is set to 100%.
+    /// @param[in] width in pixels to configure the display for.
+    /// @param[in] height in pixels to configure the display for.
+    /// @param[in] color_bpp can be either 8 or 16, but must be consistent
+    ///     with the width and height parameters.
+    /// @returns success/failure code. @see RetCode_t.
+    ///
+    RetCode_t init(bool poweron, int width, int height, int color_bpp);
+    
+    /// Get a pointer to the error code.
+    ///
+    /// This method returns a pointer to a text string that matches the
+    /// code. @see RetCode_t.
+    ///
+    /// @param[in] code is the return value from RetCode_t to look up.
+    /// @returns a pointer to the text message representing code. If code
+    ///     is not a valid value, then it returns the text for bad_parameter;
+    const char * GetErrorMessage(RetCode_t code);
+    
+    
     /// Select the drawing layer for subsequent commands.
     ///
     /// If the screen configuration is 480 x 272, or if it is 800 x 480 
@@ -409,34 +434,40 @@
     RetCode_t TouchPanelInit(uint8_t bTpEnable, uint8_t bTpAutoManual, uint8_t bTpDebounce, 
         uint8_t bTpManualMode, uint8_t bTpAdcClkDiv, uint8_t bTpAdcSampleTime);
     
-    /// Poll the TouchPanel and on a touch event return the filtered x, y coordinates.
+    /// Poll the TouchPanel and on a touch event return the a to d filtered x, y coordinates.
     ///
     /// This method reads the touch controller, which has a 10-bit range for each the
-    /// x and the y axis. The returned values are not in display (pixel) units.
+    /// x and the y axis.
+    ///
+    /// @note The returned values are not in display (pixel) units but are in analog to
+    ///     digital converter units.
     /// 
     /// @note This API is usually not needed. @see TouchPanelCalibrate. 
-    ///     @see TouchPanelPoint.
+    ///     @see TouchPanelReadable.
     /// 
-    /// @param[out] x is the x position where the touch was registered.
-    /// @param[out] y is the y position where the touch was registered.
+    /// @param[out] x is the x scale a/d value.
+    /// @param[out] y is the y scale a/d value.
     /// @returns true if touch was detected, in which case the x and y values were set.
     ///
-    uint8_t TouchPanelRead(loc_t *x, loc_t *y);
+    bool TouchPanelA2DFiltered(loc_t *x, loc_t *y);
 
-    /// Poll the TouchPanel and on a touch event return the raw x, y coordinates.
+    /// Poll the TouchPanel and on a touch event return the a to d raw x, y coordinates.
     ///
     /// This method reads the touch controller, which has a 10-bit range for each the
     /// x and the y axis. A number of samples of the raw data are taken, filtered,
-    /// and the results are returned. The returned values are not in display (pixel) units.
+    /// and the results are returned. 
     ///
+    /// @note The returned values are not in display (pixel) units but are in analog to
+    ///     digital converter units.
+    /// 
     /// @note This API is usually not needed. @see TouchPanelCalibrate. 
-    ///     @see TouchPanelPoint.
+    ///     @see TouchPanelReadable.
     /// 
-    /// @param[out] x is the x position where the touch was registered.
-    /// @param[out] y is the y position where the touch was registered.
+    /// @param[out] x is the x scale a/d value.
+    /// @param[out] y is the y scale a/d value.
     /// @returns true if touch was detected, in which case the x and y values were set.
     ///
-    uint8_t TouchPanelReadRaw(loc_t *x, loc_t *y);
+    bool TouchPanelA2DRaw(loc_t *x, loc_t *y);
     
     /// Calibrate the touch panel.
     ///
@@ -448,7 +479,7 @@
     /// matrix on the next power cycle. By doing so, it can avoid the
     /// need to calibrate on every power cycle.
     ///
-    /// @note The methods "TouchPanelCalibrate", "TouchPanelPoint", and
+    /// @note The methods "TouchPanelCalibrate", "TouchPanelReadable", and
     ///     indirectly the "TouchPanelSetMatrix" methods are all derived
     ///     from a program by Carlos E. Vidales. See the copyright note
     ///     for further details. See also the article
@@ -487,26 +518,52 @@
     /// Get the screen calibrated point of touch.
     ///
     /// This method determines if there is a touch and if so it will provide
-    /// the screen-relative touch coordinates.
+    /// the screen-relative touch coordinates. This method can be used in
+    /// a manner similar to Serial.readable(), to determine if there was a 
+    /// touch and indicate that - but not care about the coordinates. Alternately,
+    /// if a valid pointer to a point_t is provided, then if a touch is detected
+    /// the point_t will be populated with data. 
     ///
     /// @code
     ///     Timer t;
     ///     t.start();
     ///     do {
     ///        point_t point = {0, 0};
-    ///        if (display.TouchPanelPoint(&point)) {
+    ///        if (display.TouchPanelReadable(&point)) {
     ///            display.pixel(point.x, point.y, Red);
     ///        }
     ///    } while (t.read_ms() < 30000);
     /// @endcode
     ///
     /// @param[out] touch is the touch point, if a touch is registered.
-    /// @returns 
-    ///             - touch: if a touch was registered, 
-    ///             - no_touch: if no touch was detected,
-    ///             - bad_parameter: if the calibration matrix is not defined.
+    /// @returns true if a touch was registered, and touch is updated.
+    /// @returns false if no touch was detected, or if the calibration matrix is not defined.
+    ///
+    bool TouchPanelReadable(point_t * touch = NULL);
+
+    /// Wait for a touch panel touch and return it.
+    /// 
+    /// This method is similar to Serial.getc() in that it will wait for a touch
+    /// and then return. In order to extract the coordinates of the touch, a
+    /// valid pointer to a point_t must be provided.
+    ///
+    /// @note There is no timeout on this function, so its use is not recommended.
     ///
-    RetCode_t TouchPanelPoint(point_t * touch);
+    /// @code
+    ///     Timer t;
+    ///     t.start();
+    ///     do {
+    ///        point_t point = {0, 0};
+    ///        display.TouchPanelGet(&point);
+    ///        display.pixel(point.x, point.y, Red);
+    ///    } while (t.read_ms() < 30000);
+    /// @endcode
+    ///
+    /// @param[out] touch is the touch point, if a touch is registered.
+    /// @returns true if a touch was registered, and touch is updated.
+    /// @returns false if no touch was detected, or if the calibration matrix is not defined.
+    ///
+    bool TouchPanelGet(point_t * touch);
 
     /// Set the calibration matrix for the touch panel.
     ///
@@ -584,7 +641,6 @@
         uint8_t longTimeAdjustment = 0,
         bool interruptEnable = false, bool wakeupEnable = false);
 
-
     /// Create Key Code definitions for the key matrix.
     ///
     /// This API provides a table of 22 key-code assignments for the matrix of keys.
@@ -1579,22 +1635,6 @@
     /// Touch Panel calibration matrix.
     tpMatrix_t tpMatrix;
 
-    /// Initialize the chip, which is normally done as part of the
-    /// constructor, so not typically called by the user.
-    ///
-    /// @note This API permits configuration, however it is not [yet]
-    ///     available to the end user. Be sure the parameters
-    ///     are consistent with each other - see the RA8875 user
-    ///     manual.
-    ///
-    /// @param[in] width in pixels to configure the display for.
-    /// @param[in] height in pixels to configure the display for.
-    /// @param[in] color_bpp can be either 8 or 16, but must be consistent
-    ///     with the width and height parameters.
-    /// @returns success/failure code. @see RetCode_t.
-    ///
-    RetCode_t init(int width, int height, int color_bpp);
-    
     /// Internal function to put a character using the built-in (internal) font engine
     ///
     /// @param[in] is the character to put to the screen.
@@ -1616,7 +1656,7 @@
     ///     the pin selection is the invert of this.
     /// @returns success/failure code. @see RetCode_t.
     ///
-    RetCode_t select(bool chipsel);
+    RetCode_t _select(bool chipsel);
 
     /// Wait while the status register indicates the controller is busy.
     ///
@@ -1652,7 +1692,7 @@
     /// @returns a value read from the port, since SPI is often shift
     ///     in while shifting out.
     ///
-    unsigned char spiwrite(unsigned char data);
+    unsigned char _spiwrite(unsigned char data);
     
     /// The most primitive - to read a data value to the SPI interface.
     ///
@@ -1662,7 +1702,7 @@
     /// @returns a value read from the port, since SPI is often shift
     ///     in while shifting out.
     ///
-    unsigned char spiread();
+    unsigned char _spiread();
     
     const uint8_t * pKeyMap;