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:
96:40b74dd3695b
Parent:
90:d113d71ae4f0
Child:
98:ecebed9b80b2
--- a/RA8875.h	Tue Jul 07 17:05:59 2015 +0000
+++ b/RA8875.h	Sat Nov 28 15:39:44 2015 +0000
@@ -104,6 +104,7 @@
 //namespace SW_graphics
 //{
 
+class FPointerDummy;    // used by the callback methods.
 
 /// This is a graphics library for the Raio RA8875 Display Controller chip
 /// attached to a 4-wire SPI interface.
@@ -219,6 +220,49 @@
         TP_Auto,               ///< Auto touch detection mode
         TP_Manual,             ///< Manual touch detection mode
     } tpmode_t;
+
+    /// printscreen callback commands
+    typedef enum
+    {
+        OPEN,       ///< command to open the file. cast uint32_t * to the buffer to get the total size to be written.
+        WRITE,      ///< command to write some data, buffer points to the data and the size is in bytes.
+        CLOSE,      ///< command to close the file
+    } filecmd_t;
+
+    /// print screen callback
+    ///
+    /// The special form of the print screen will pass one blob at a time 
+    /// to the callback. There are basic command declaring that the stream
+    /// can be opened, a block written, and the stream closed. There is
+    /// also a command to communicate the total size being delivered.
+    ///
+    /// @code
+    /// lcd.PrintScreen(x,y,w,h,callback);
+    /// ... 
+    /// void callback(filecmd_t cmd, uint8_t * buffer, uint16_t size) {
+    ///     switch(cmd) {
+    ///         case OPEN:
+    ///             pc.printf("About to write %u bytes\r\n", *(uint32_t *)buffer);
+    ///             fh = fopen("file.bmp", "w+b");
+    ///             break;
+    ///         case WRITE:
+    ///             fwrite(buffer, size, fh);
+    ///             break;
+    ///         case CLOSE:
+    ///             fclose(fh);
+    ///             break;
+    ///         default:
+    ///             pc.printf("Unexpected callback %d\r\n", cmd);
+    ///             break;
+    ///     }
+    /// }
+    /// @endcode
+    ///
+    /// @param cmd is the command to execute. @see filecmd_t.
+    /// @param buffer is a pointer to the buffer being passed.
+    /// @param size is the number of bytes in the buffer.
+    ///
+    typedef RetCode_t (* PrintCallback_T)(filecmd_t cmd, uint8_t * buffer, uint16_t size);
     
     /// Constructor for a display based on the RAiO RA8875 
     /// display controller.
@@ -1812,6 +1856,51 @@
     ///
     RetCode_t PrintScreen(loc_t x, loc_t y, dim_t w, dim_t h, const char *Name_BMP);
     
+    /// This method captures the specified area as a 24-bit bitmap file
+    /// and delivers it to the previously attached callback.
+    ///
+    /// Even though this is a 16-bit display, the stored image is in
+    /// 24-bit format.
+    ///
+    /// This method will interrogate the current display setting and
+    /// create a bitmap based on those settings. For instance, if 
+    /// only layer 1 is visible, then the bitmap is only layer 1. However,
+    /// if there is some other operation in effect (transparent mode), it
+    /// will return the blended image.
+    ///
+    /// @param[in] x is the left edge of the region to capture
+    /// @param[in] y is the top edge of the region to capture
+    /// @param[in] w is the width of the region to capture
+    /// @param[in] h is the height of the region to capture.
+    /// @return success or error code.
+    ///
+    RetCode_t PrintScreen(loc_t x, loc_t y, dim_t w, dim_t h);
+    
+    /// PrintScreen callback registration.
+    ///
+    /// This method attaches a simple c-compatible callback of type PrintCallback_T.
+    /// Then, the PrintScreen(x,y,w,h) method is called. Each chunk of data in the
+    /// BMP file to be created is passed to this callback.
+    /// 
+    /// @param callback is the callback function.
+    ///
+    void AttachPrintHandler(PrintCallback_T callback) { c_callback = callback; }
+
+    /// PrintScreen callback registration.
+    ///
+    /// This method attaches a c++ class method as a callback of type PrintCallback_T.
+    /// Then, the PrintScreen(x,y,w,h) method is called. Each chunk of data in the
+    /// BMP file to be created is passed to this callback.
+    /// 
+    /// @param object is the class hosting the callback function.
+    /// @param callback is the callback function.
+    ///
+    template <class T>
+    void AttachPrintHandler(T *object, RetCode_t (T::*member)(void)) { 
+        obj_callback    = (FPointerDummy *)item; 
+        method_callback = (uint32_t (FPointerDummy::*)(uint32_t))method;
+    }
+
     /// This method captures the specified area as a 24-bit bitmap file,
     /// including the option of layer selection.
     ///
@@ -2003,8 +2092,29 @@
     void RegisterPerformance(method_e method);
     Timer performance;
     #endif
+    
+    RetCode_t _printCallback(RA8875::filecmd_t cmd, uint8_t * buffer, uint16_t size);
+    
+    FILE * _printFH;             ///< PrintScreen file handle
+    
+    RetCode_t privateCallback(filecmd_t cmd, uint8_t * buffer, uint16_t size) {
+        if (c_callback != NULL) {
+            return (*c_callback)(cmd, buffer, size);
+        }
+        else {
+            if (obj_callback != NULL && method_callback != NULL) {
+                return (obj_callback->*method_callback)(cmd, buffer, size);
+            }
+        }
+        return noerror;
+    }
+    
+    RetCode_t (* c_callback)(filecmd_t cmd, uint8_t * buffer, uint16_t size);
+    FPointerDummy  *obj_callback;
+    RetCode_t (FPointerDummy::*method_callback)(filecmd_t cmd, uint8_t * buffer, uint16_t size);
 };
 
+
 //}     // namespace
 
 //using namespace SW_graphics;