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)

Committer:
WiredHome
Date:
Mon Apr 25 01:43:59 2016 +0000
Revision:
111:efe436c43aba
Parent:
109:7b94f06f085b
Child:
112:325ca91bc03d
Soft fonts are now restricted by the window( ) setting, just as hard fonts were. Wraps right edge back to left and cycles from bottom edge back to top.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dreschpe 0:de9d1462a835 1 /* mbed GraphicsDisplay Display Library Base Class
dreschpe 0:de9d1462a835 2 * Copyright (c) 2007-2009 sford
dreschpe 0:de9d1462a835 3 * Released under the MIT License: http://mbed.org/license/mit
dreschpe 0:de9d1462a835 4 *
dreschpe 0:de9d1462a835 5 * A library for providing a common base class for Graphics displays
dreschpe 0:de9d1462a835 6 * To port a new display, derive from this class and implement
dreschpe 0:de9d1462a835 7 * the constructor (setup the display), pixel (put a pixel
dreschpe 0:de9d1462a835 8 * at a location), width and height functions. Everything else
dreschpe 0:de9d1462a835 9 * (locate, printf, putc, cls, window, putp, fill, blit, blitbit)
dreschpe 0:de9d1462a835 10 * will come for free. You can also provide a specialised implementation
dreschpe 0:de9d1462a835 11 * of window and putp to speed up the results
dreschpe 0:de9d1462a835 12 */
dreschpe 0:de9d1462a835 13
dreschpe 0:de9d1462a835 14 #ifndef MBED_GRAPHICSDISPLAY_H
dreschpe 0:de9d1462a835 15 #define MBED_GRAPHICSDISPLAY_H
WiredHome 32:0e4f2ae512e2 16 #include "Bitmap.h"
dreschpe 0:de9d1462a835 17 #include "TextDisplay.h"
dreschpe 0:de9d1462a835 18
WiredHome 32:0e4f2ae512e2 19 /// The GraphicsDisplay class
WiredHome 32:0e4f2ae512e2 20 ///
WiredHome 32:0e4f2ae512e2 21 /// This graphics display class supports both graphics and text operations.
WiredHome 32:0e4f2ae512e2 22 /// Typically, a subclass is derived from this which has localizations to
WiredHome 32:0e4f2ae512e2 23 /// adapt to a specific hardware platform (e.g. a display controller chip),
WiredHome 32:0e4f2ae512e2 24 /// that overrides methods in here to either add more capability or perhaps
WiredHome 32:0e4f2ae512e2 25 /// to improve performance, by leveraging specific hardware capabilities.
WiredHome 32:0e4f2ae512e2 26 ///
WiredHome 32:0e4f2ae512e2 27 class GraphicsDisplay : public TextDisplay
WiredHome 32:0e4f2ae512e2 28 {
WiredHome 32:0e4f2ae512e2 29 public:
WiredHome 32:0e4f2ae512e2 30 /// The constructor
dreschpe 0:de9d1462a835 31 GraphicsDisplay(const char* name);
WiredHome 32:0e4f2ae512e2 32
WiredHome 104:8d1d3832a215 33 //~GraphicsDisplay();
WiredHome 104:8d1d3832a215 34
WiredHome 32:0e4f2ae512e2 35 /// Draw a pixel in the specified color.
WiredHome 32:0e4f2ae512e2 36 ///
WiredHome 32:0e4f2ae512e2 37 /// @note this method must be supported in the derived class.
WiredHome 32:0e4f2ae512e2 38 ///
WiredHome 76:c981284eb513 39 /// @param[in] x is the horizontal offset to this pixel.
WiredHome 76:c981284eb513 40 /// @param[in] y is the vertical offset to this pixel.
WiredHome 76:c981284eb513 41 /// @param[in] color defines the color for the pixel.
WiredHome 32:0e4f2ae512e2 42 /// @returns success/failure code. @see RetCode_t.
WiredHome 32:0e4f2ae512e2 43 ///
WiredHome 37:f19b7e7449dc 44 virtual RetCode_t pixel(loc_t x, loc_t y, color_t color) = 0;
WiredHome 32:0e4f2ae512e2 45
WiredHome 41:2956a0a221e5 46 /// Write a stream of pixels to the display.
WiredHome 41:2956a0a221e5 47 ///
WiredHome 41:2956a0a221e5 48 /// @note this method must be supported in the derived class.
WiredHome 41:2956a0a221e5 49 ///
WiredHome 76:c981284eb513 50 /// @param[in] p is a pointer to a color_t array to write.
WiredHome 76:c981284eb513 51 /// @param[in] count is the number of pixels to write.
WiredHome 76:c981284eb513 52 /// @param[in] x is the horizontal position on the display.
WiredHome 76:c981284eb513 53 /// @param[in] y is the vertical position on the display.
WiredHome 41:2956a0a221e5 54 /// @returns success/failure code. @see RetCode_t.
WiredHome 41:2956a0a221e5 55 ///
WiredHome 41:2956a0a221e5 56 virtual RetCode_t pixelStream(color_t * p, uint32_t count, loc_t x, loc_t y) = 0;
WiredHome 41:2956a0a221e5 57
WiredHome 41:2956a0a221e5 58 /// Get a pixel from the display.
WiredHome 41:2956a0a221e5 59 ///
WiredHome 41:2956a0a221e5 60 /// @note this method must be supported in the derived class.
WiredHome 41:2956a0a221e5 61 ///
WiredHome 76:c981284eb513 62 /// @param[in] x is the horizontal offset to this pixel.
WiredHome 76:c981284eb513 63 /// @param[in] y is the vertical offset to this pixel.
WiredHome 41:2956a0a221e5 64 /// @returns the pixel. see @color_t
WiredHome 41:2956a0a221e5 65 ///
WiredHome 41:2956a0a221e5 66 virtual color_t getPixel(loc_t x, loc_t y) = 0;
WiredHome 41:2956a0a221e5 67
WiredHome 41:2956a0a221e5 68 /// Get a stream of pixels from the display.
WiredHome 41:2956a0a221e5 69 ///
WiredHome 41:2956a0a221e5 70 /// @note this method must be supported in the derived class.
WiredHome 41:2956a0a221e5 71 ///
WiredHome 76:c981284eb513 72 /// @param[out] p is a pointer to a color_t array to accept the stream.
WiredHome 76:c981284eb513 73 /// @param[in] count is the number of pixels to read.
WiredHome 76:c981284eb513 74 /// @param[in] x is the horizontal offset to this pixel.
WiredHome 76:c981284eb513 75 /// @param[in] y is the vertical offset to this pixel.
WiredHome 41:2956a0a221e5 76 /// @returns success/failure code. @see RetCode_t.
WiredHome 41:2956a0a221e5 77 ///
WiredHome 41:2956a0a221e5 78 virtual RetCode_t getPixelStream(color_t * p, uint32_t count, loc_t x, loc_t y) = 0;
WiredHome 41:2956a0a221e5 79
WiredHome 32:0e4f2ae512e2 80 /// get the screen width in pixels
WiredHome 32:0e4f2ae512e2 81 ///
WiredHome 32:0e4f2ae512e2 82 /// @note this method must be supported in the derived class.
WiredHome 32:0e4f2ae512e2 83 ///
WiredHome 32:0e4f2ae512e2 84 /// @returns screen width in pixels.
WiredHome 32:0e4f2ae512e2 85 ///
WiredHome 32:0e4f2ae512e2 86 virtual uint16_t width() = 0;
WiredHome 32:0e4f2ae512e2 87
WiredHome 32:0e4f2ae512e2 88 /// get the screen height in pixels
WiredHome 32:0e4f2ae512e2 89 ///
WiredHome 32:0e4f2ae512e2 90 /// @note this method must be supported in the derived class.
WiredHome 32:0e4f2ae512e2 91 ///
WiredHome 32:0e4f2ae512e2 92 /// @returns screen height in pixels.
WiredHome 32:0e4f2ae512e2 93 ///
WiredHome 32:0e4f2ae512e2 94 virtual uint16_t height() = 0;
WiredHome 32:0e4f2ae512e2 95
WiredHome 32:0e4f2ae512e2 96 /// Prepare the controller to write binary data to the screen by positioning
WiredHome 32:0e4f2ae512e2 97 /// the memory cursor.
WiredHome 32:0e4f2ae512e2 98 ///
WiredHome 32:0e4f2ae512e2 99 /// @note this method must be supported in the derived class.
WiredHome 32:0e4f2ae512e2 100 ///
WiredHome 76:c981284eb513 101 /// @param[in] x is the horizontal position in pixels (from the left edge)
WiredHome 76:c981284eb513 102 /// @param[in] y is the vertical position in pixels (from the top edge)
WiredHome 32:0e4f2ae512e2 103 /// @returns success/failure code. @see RetCode_t.
WiredHome 32:0e4f2ae512e2 104 ///
WiredHome 37:f19b7e7449dc 105 virtual RetCode_t SetGraphicsCursor(loc_t x, loc_t y) = 0;
WiredHome 32:0e4f2ae512e2 106
WiredHome 41:2956a0a221e5 107 /// Prepare the controller to read binary data from the screen by positioning
WiredHome 41:2956a0a221e5 108 /// the memory read cursor.
WiredHome 41:2956a0a221e5 109 ///
WiredHome 76:c981284eb513 110 /// @param[in] x is the horizontal position in pixels (from the left edge)
WiredHome 76:c981284eb513 111 /// @param[in] y is the vertical position in pixels (from the top edge)
WiredHome 41:2956a0a221e5 112 /// @returns success/failure code. @see RetCode_t.
WiredHome 41:2956a0a221e5 113 ///
WiredHome 41:2956a0a221e5 114 virtual RetCode_t SetGraphicsCursorRead(loc_t x, loc_t y) = 0;
WiredHome 41:2956a0a221e5 115
WiredHome 32:0e4f2ae512e2 116 /// Draw a filled rectangle in the specified color
WiredHome 32:0e4f2ae512e2 117 ///
WiredHome 32:0e4f2ae512e2 118 /// @note As a side effect, this changes the current
WiredHome 32:0e4f2ae512e2 119 /// foreground color for subsequent operations.
WiredHome 32:0e4f2ae512e2 120 ///
WiredHome 32:0e4f2ae512e2 121 /// @note this method must be supported in the derived class.
WiredHome 32:0e4f2ae512e2 122 ///
WiredHome 76:c981284eb513 123 /// @param[in] x1 is the horizontal start of the line.
WiredHome 76:c981284eb513 124 /// @param[in] y1 is the vertical start of the line.
WiredHome 76:c981284eb513 125 /// @param[in] x2 is the horizontal end of the line.
WiredHome 76:c981284eb513 126 /// @param[in] y2 is the vertical end of the line.
WiredHome 76:c981284eb513 127 /// @param[in] color defines the foreground color.
WiredHome 76:c981284eb513 128 /// @param[in] fillit is optional to NOFILL the rectangle. default is FILL.
WiredHome 32:0e4f2ae512e2 129 /// @returns success/failure code. @see RetCode_t.
WiredHome 32:0e4f2ae512e2 130 ///
WiredHome 37:f19b7e7449dc 131 virtual RetCode_t fillrect(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 32:0e4f2ae512e2 132 color_t color, fill_t fillit = FILL) = 0;
WiredHome 32:0e4f2ae512e2 133
WiredHome 32:0e4f2ae512e2 134
WiredHome 32:0e4f2ae512e2 135 virtual RetCode_t WriteCommand(unsigned char command, unsigned int data = 0xFFFF) = 0;
WiredHome 32:0e4f2ae512e2 136 virtual RetCode_t WriteData(unsigned char data) = 0;
WiredHome 32:0e4f2ae512e2 137
WiredHome 32:0e4f2ae512e2 138 /// Set the window, which controls where items are written to the screen.
WiredHome 32:0e4f2ae512e2 139 ///
WiredHome 32:0e4f2ae512e2 140 /// When something hits the window width, it wraps back to the left side
WiredHome 32:0e4f2ae512e2 141 /// and down a row. If the initial write is outside the window, it will
WiredHome 32:0e4f2ae512e2 142 /// be captured into the window when it crosses a boundary.
WiredHome 32:0e4f2ae512e2 143 ///
WiredHome 111:efe436c43aba 144 /// @param[in] r is the rect_t rect to define the window.
WiredHome 111:efe436c43aba 145 /// @returns success/failure code. @see RetCode_t.
WiredHome 111:efe436c43aba 146 ///
WiredHome 111:efe436c43aba 147 virtual RetCode_t window(rect_t r);
WiredHome 111:efe436c43aba 148
WiredHome 111:efe436c43aba 149 /// Set the window, which controls where items are written to the screen.
WiredHome 111:efe436c43aba 150 ///
WiredHome 111:efe436c43aba 151 /// When something hits the window width, it wraps back to the left side
WiredHome 111:efe436c43aba 152 /// and down a row. If the initial write is outside the window, it will
WiredHome 111:efe436c43aba 153 /// be captured into the window when it crosses a boundary.
WiredHome 111:efe436c43aba 154 ///
WiredHome 76:c981284eb513 155 /// @param[in] x is the left edge in pixels.
WiredHome 76:c981284eb513 156 /// @param[in] y is the top edge in pixels.
WiredHome 76:c981284eb513 157 /// @param[in] w is the window width in pixels.
WiredHome 76:c981284eb513 158 /// @param[in] h is the window height in pixels.
WiredHome 32:0e4f2ae512e2 159 /// @returns success/failure code. @see RetCode_t.
WiredHome 32:0e4f2ae512e2 160 ///
WiredHome 37:f19b7e7449dc 161 virtual RetCode_t window(loc_t x, loc_t y, dim_t w, dim_t h);
WiredHome 32:0e4f2ae512e2 162
WiredHome 111:efe436c43aba 163 /// method to set the window region to the full screen.
WiredHome 111:efe436c43aba 164 ///
WiredHome 111:efe436c43aba 165 /// This restores the 'window' to the full screen, so that
WiredHome 111:efe436c43aba 166 /// other operations (@see cls) would clear the whole screen.
WiredHome 111:efe436c43aba 167 ///
WiredHome 111:efe436c43aba 168 /// @returns success/failure code. @see RetCode_t.
WiredHome 111:efe436c43aba 169 ///
WiredHome 111:efe436c43aba 170 virtual RetCode_t WindowMax(void);
WiredHome 111:efe436c43aba 171
WiredHome 32:0e4f2ae512e2 172 /// Clear the screen.
WiredHome 32:0e4f2ae512e2 173 ///
WiredHome 32:0e4f2ae512e2 174 /// The behavior is to clear the whole screen.
WiredHome 32:0e4f2ae512e2 175 ///
WiredHome 76:c981284eb513 176 /// @param[in] layers is ignored, but supports maintaining the same
WiredHome 61:8f3153bf0baa 177 /// API for the graphics layer.
WiredHome 32:0e4f2ae512e2 178 /// @returns success/failure code. @see RetCode_t.
WiredHome 32:0e4f2ae512e2 179 ///
WiredHome 61:8f3153bf0baa 180 virtual RetCode_t cls(uint16_t layers = 0);
WiredHome 32:0e4f2ae512e2 181
WiredHome 32:0e4f2ae512e2 182 /// method to put a single color pixel to the screen.
WiredHome 32:0e4f2ae512e2 183 ///
WiredHome 32:0e4f2ae512e2 184 /// This method may be called as many times as necessary after
WiredHome 32:0e4f2ae512e2 185 /// @see _StartGraphicsStream() is called, and it should be followed
WiredHome 32:0e4f2ae512e2 186 /// by _EndGraphicsStream.
WiredHome 32:0e4f2ae512e2 187 ///
WiredHome 76:c981284eb513 188 /// @param[in] pixel is a color value to be put on the screen.
WiredHome 79:544eb4964795 189 /// @returns success/failure code. @see RetCode_t.
WiredHome 32:0e4f2ae512e2 190 ///
WiredHome 55:dfbabef7003e 191 virtual RetCode_t _putp(color_t pixel);
WiredHome 32:0e4f2ae512e2 192
WiredHome 79:544eb4964795 193 /// method to fill a region.
WiredHome 79:544eb4964795 194 ///
WiredHome 79:544eb4964795 195 /// This method fills a region with the specified color.
WiredHome 79:544eb4964795 196 ///
WiredHome 79:544eb4964795 197 /// @param[in] x is the left-edge of the region.
WiredHome 79:544eb4964795 198 /// @param[in] y is the top-edge of the region.
WiredHome 79:544eb4964795 199 /// @param[in] w specifies the width of the region.
WiredHome 79:544eb4964795 200 /// @param[in] h specifies the height of the region.
WiredHome 79:544eb4964795 201 /// @returns success/failure code. @see RetCode_t.
WiredHome 79:544eb4964795 202 ///
WiredHome 109:7b94f06f085b 203 virtual RetCode_t fill(loc_t x, loc_t y, dim_t w, dim_t h, color_t color);
WiredHome 76:c981284eb513 204
WiredHome 79:544eb4964795 205
WiredHome 109:7b94f06f085b 206 virtual RetCode_t blit(loc_t x, loc_t y, dim_t w, dim_t h, const int * color);
WiredHome 29:422616aa04bd 207
WiredHome 101:e0aad446094a 208 /// This method returns the width in pixels of the chosen character
WiredHome 101:e0aad446094a 209 /// from the previously selected external font.
WiredHome 101:e0aad446094a 210 ///
WiredHome 101:e0aad446094a 211 /// @param[in] c is the character of interest.
WiredHome 106:c80828f5dea4 212 /// @param[in, out] width is a pointer to where the width will be stored.
WiredHome 101:e0aad446094a 213 /// This parameter is NULL tested and will only be written if not null
WiredHome 101:e0aad446094a 214 /// which is convenient if you only want the height.
WiredHome 106:c80828f5dea4 215 /// @param[in, out] height is a pointer to where the height will be stored.
WiredHome 101:e0aad446094a 216 /// This parameter is NULL tested and will only be written if not null
WiredHome 101:e0aad446094a 217 /// which is convenient if you only want the width.
WiredHome 101:e0aad446094a 218 /// @returns a pointer to the raw character data or NULL if not found.
WiredHome 101:e0aad446094a 219 ///
WiredHome 109:7b94f06f085b 220 virtual const uint8_t * getCharMetrics(const unsigned char c, dim_t * width, dim_t * height);
WiredHome 101:e0aad446094a 221
WiredHome 29:422616aa04bd 222 /// This method transfers one character from the external font data
WiredHome 29:422616aa04bd 223 /// to the screen.
WiredHome 29:422616aa04bd 224 ///
WiredHome 101:e0aad446094a 225 /// The font being used has already been set with the SelectUserFont
WiredHome 101:e0aad446094a 226 /// API.
WiredHome 101:e0aad446094a 227 ///
WiredHome 29:422616aa04bd 228 /// @note the font data is in a special format as generate by
WiredHome 95:ef538bd687c0 229 /// the mikroe font creator.
WiredHome 29:422616aa04bd 230 /// See http://www.mikroe.com/glcd-font-creator/
WiredHome 29:422616aa04bd 231 ///
WiredHome 76:c981284eb513 232 /// @param[in] x is the horizontal pixel coordinate
WiredHome 76:c981284eb513 233 /// @param[in] y is the vertical pixel coordinate
WiredHome 98:ecebed9b80b2 234 /// @param[in] c is the character to render
WiredHome 98:ecebed9b80b2 235 /// @returns how far the cursor should advance to the right in pixels.
WiredHome 98:ecebed9b80b2 236 /// @returns zero if the character could not be rendered.
WiredHome 29:422616aa04bd 237 ///
WiredHome 109:7b94f06f085b 238 virtual int fontblit(loc_t x, loc_t y, const unsigned char c);
WiredHome 29:422616aa04bd 239
WiredHome 32:0e4f2ae512e2 240 /// This method returns the color value from a palette.
WiredHome 32:0e4f2ae512e2 241 ///
WiredHome 32:0e4f2ae512e2 242 /// This method accepts a pointer to a Bitmap color palette, which
WiredHome 32:0e4f2ae512e2 243 /// is a table in memory composed of RGB Quad values (r, g, b, 0),
WiredHome 32:0e4f2ae512e2 244 /// and an index into that table. It then extracts the color information
WiredHome 32:0e4f2ae512e2 245 /// and downsamples it to a color_t value which it returns.
WiredHome 32:0e4f2ae512e2 246 ///
WiredHome 32:0e4f2ae512e2 247 /// @note This method probably has very little value outside of
WiredHome 32:0e4f2ae512e2 248 /// the internal methods for reading BMP files.
WiredHome 32:0e4f2ae512e2 249 ///
WiredHome 76:c981284eb513 250 /// @param[in] colorPaletteArray is the handle to the color palette array to use.
WiredHome 76:c981284eb513 251 /// @param[in] index is the index into the color palette.
WiredHome 32:0e4f2ae512e2 252 /// @returns the color in color_t format.
WiredHome 32:0e4f2ae512e2 253 ///
WiredHome 73:f22a18707b5e 254 color_t RGBQuadToRGB16(RGBQUAD * colorPaletteArray, uint16_t index);
WiredHome 32:0e4f2ae512e2 255
WiredHome 41:2956a0a221e5 256 /// This method converts a 16-bit color value into a 24-bit RGB Quad.
WiredHome 41:2956a0a221e5 257 ///
WiredHome 76:c981284eb513 258 /// @param[in] c is the 16-bit color. @see color_t.
WiredHome 41:2956a0a221e5 259 /// @returns an RGBQUAD value. @see RGBQUAD
WiredHome 41:2956a0a221e5 260 ///
WiredHome 41:2956a0a221e5 261 RGBQUAD RGB16ToRGBQuad(color_t c);
WiredHome 41:2956a0a221e5 262
WiredHome 42:7cbdfd2bbfc5 263 /// This method attempts to render a specified graphics image file at
WiredHome 42:7cbdfd2bbfc5 264 /// the specified screen location.
WiredHome 42:7cbdfd2bbfc5 265 ///
WiredHome 42:7cbdfd2bbfc5 266 /// This supports several variants of the following file types:
WiredHome 42:7cbdfd2bbfc5 267 /// \li Bitmap file format,
WiredHome 42:7cbdfd2bbfc5 268 /// \li Icon file format.
WiredHome 42:7cbdfd2bbfc5 269 ///
WiredHome 42:7cbdfd2bbfc5 270 /// @note The specified image width and height, when adjusted for the
WiredHome 42:7cbdfd2bbfc5 271 /// x and y origin, must fit on the screen, or the image will not
WiredHome 42:7cbdfd2bbfc5 272 /// be shown (it does not clip the image).
WiredHome 42:7cbdfd2bbfc5 273 ///
WiredHome 42:7cbdfd2bbfc5 274 /// @note The file extension is tested, and if it ends in a supported
WiredHome 42:7cbdfd2bbfc5 275 /// format, the appropriate handler is called to render that image.
WiredHome 42:7cbdfd2bbfc5 276 ///
WiredHome 76:c981284eb513 277 /// @param[in] x is the horizontal pixel coordinate
WiredHome 76:c981284eb513 278 /// @param[in] y is the vertical pixel coordinate
WiredHome 76:c981284eb513 279 /// @param[in] FileName refers to the fully qualified path and file on
WiredHome 42:7cbdfd2bbfc5 280 /// a mounted file system.
WiredHome 42:7cbdfd2bbfc5 281 /// @returns success or error code.
WiredHome 42:7cbdfd2bbfc5 282 ///
WiredHome 42:7cbdfd2bbfc5 283 RetCode_t RenderImageFile(loc_t x, loc_t y, const char *FileName);
WiredHome 42:7cbdfd2bbfc5 284
WiredHome 31:c72e12cd5c67 285 /// This method reads a disk file that is in bitmap format and
WiredHome 31:c72e12cd5c67 286 /// puts it on the screen.
WiredHome 31:c72e12cd5c67 287 ///
WiredHome 36:300f6ee0b2cf 288 /// Supported formats:
WiredHome 36:300f6ee0b2cf 289 /// \li 4-bit color format (16 colors)
WiredHome 36:300f6ee0b2cf 290 /// \li 8-bit color format (256 colors)
WiredHome 36:300f6ee0b2cf 291 /// \li 16-bit color format (65k colors)
WiredHome 36:300f6ee0b2cf 292 /// \li compression: no.
WiredHome 36:300f6ee0b2cf 293 ///
WiredHome 36:300f6ee0b2cf 294 /// @note This is a slow operation, typically due to the use of
WiredHome 36:300f6ee0b2cf 295 /// the file system, and partially because bmp files
WiredHome 31:c72e12cd5c67 296 /// are stored from the bottom up, and the memory is written
WiredHome 32:0e4f2ae512e2 297 /// from the top down; as a result, it constantly 'seeks'
WiredHome 32:0e4f2ae512e2 298 /// on the file system for the next row of information.
WiredHome 31:c72e12cd5c67 299 ///
WiredHome 34:c99ec28fac66 300 /// As a performance test, a sample picture was timed. A family picture
WiredHome 34:c99ec28fac66 301 /// was converted to Bitmap format; shrunk to 352 x 272 pixels and save
WiredHome 34:c99ec28fac66 302 /// in 8-bit color format. The resulting file size was 94.5 KByte.
WiredHome 34:c99ec28fac66 303 /// The SPI port interface was set to 20 MHz.
WiredHome 34:c99ec28fac66 304 /// The original bitmap rendering software was purely in software,
WiredHome 34:c99ec28fac66 305 /// pushing 1 pixel at a time to the write function, which did use SPI
WiredHome 34:c99ec28fac66 306 /// hardware (not pin wiggling) to transfer commands and data to the
WiredHome 34:c99ec28fac66 307 /// display. Then, the driver was improved to leverage the capability
WiredHome 34:c99ec28fac66 308 /// of the derived display driver. As a final check, instead of the
WiredHome 34:c99ec28fac66 309 /// [known slow] local file system, a randomly chosen USB stick was
WiredHome 34:c99ec28fac66 310 /// used. The performance results are impressive (but depend on the
WiredHome 34:c99ec28fac66 311 /// listed factors).
WiredHome 34:c99ec28fac66 312 ///
WiredHome 35:7dcab9e3ab25 313 /// \li 34 seconds, LocalFileSystem, Software Rendering
WiredHome 35:7dcab9e3ab25 314 /// \li 9 seconds, LocalFileSystem, Hardware Rending for RA8875
WiredHome 35:7dcab9e3ab25 315 /// \li 3 seconds, MSCFileSystem, Hardware Rendering for RA8875
WiredHome 34:c99ec28fac66 316 ///
WiredHome 76:c981284eb513 317 /// @param[in] x is the horizontal pixel coordinate
WiredHome 76:c981284eb513 318 /// @param[in] y is the vertical pixel coordinate
WiredHome 76:c981284eb513 319 /// @param[in] Name_BMP is the filename on the mounted file system.
WiredHome 31:c72e12cd5c67 320 /// @returns success or error code.
WiredHome 31:c72e12cd5c67 321 ///
WiredHome 37:f19b7e7449dc 322 RetCode_t RenderBitmapFile(loc_t x, loc_t y, const char *Name_BMP);
WiredHome 31:c72e12cd5c67 323
WiredHome 42:7cbdfd2bbfc5 324
WiredHome 42:7cbdfd2bbfc5 325 /// This method reads a disk file that is in ico format and
WiredHome 42:7cbdfd2bbfc5 326 /// puts it on the screen.
WiredHome 42:7cbdfd2bbfc5 327 ///
WiredHome 42:7cbdfd2bbfc5 328 /// Reading the disk is slow, but a typical icon file is small
WiredHome 42:7cbdfd2bbfc5 329 /// so it should be ok.
WiredHome 42:7cbdfd2bbfc5 330 ///
WiredHome 42:7cbdfd2bbfc5 331 /// @note An Icon file can have more than one icon in it. This
WiredHome 42:7cbdfd2bbfc5 332 /// implementation only processes the first image in the file.
WiredHome 42:7cbdfd2bbfc5 333 ///
WiredHome 76:c981284eb513 334 /// @param[in] x is the horizontal pixel coordinate
WiredHome 76:c981284eb513 335 /// @param[in] y is the vertical pixel coordinate
WiredHome 76:c981284eb513 336 /// @param[in] Name_ICO is the filename on the mounted file system.
WiredHome 42:7cbdfd2bbfc5 337 /// @returns success or error code.
WiredHome 42:7cbdfd2bbfc5 338 ///
WiredHome 42:7cbdfd2bbfc5 339 RetCode_t RenderIconFile(loc_t x, loc_t y, const char *Name_ICO);
WiredHome 42:7cbdfd2bbfc5 340
WiredHome 42:7cbdfd2bbfc5 341
WiredHome 29:422616aa04bd 342 /// prints one character at the specified coordinates.
WiredHome 29:422616aa04bd 343 ///
WiredHome 29:422616aa04bd 344 /// This will print the character at the specified pixel coordinates.
WiredHome 29:422616aa04bd 345 ///
WiredHome 76:c981284eb513 346 /// @param[in] x is the horizontal offset in pixels.
WiredHome 76:c981284eb513 347 /// @param[in] y is the vertical offset in pixels.
WiredHome 76:c981284eb513 348 /// @param[in] value is the character to print.
WiredHome 29:422616aa04bd 349 /// @returns number of pixels to index to the right if a character was printed, 0 otherwise.
WiredHome 29:422616aa04bd 350 ///
WiredHome 29:422616aa04bd 351 virtual int character(int x, int y, int value);
WiredHome 29:422616aa04bd 352
WiredHome 32:0e4f2ae512e2 353 /// get the number of colums based on the currently active font
WiredHome 32:0e4f2ae512e2 354 ///
WiredHome 32:0e4f2ae512e2 355 /// @returns number of columns.
WiredHome 32:0e4f2ae512e2 356 ///
WiredHome 32:0e4f2ae512e2 357 virtual int columns(void);
WiredHome 32:0e4f2ae512e2 358
WiredHome 32:0e4f2ae512e2 359 /// get the number of rows based on the currently active font
WiredHome 32:0e4f2ae512e2 360 ///
WiredHome 32:0e4f2ae512e2 361 /// @returns number of rows.
WiredHome 32:0e4f2ae512e2 362 ///
WiredHome 32:0e4f2ae512e2 363 virtual int rows(void);
WiredHome 32:0e4f2ae512e2 364
WiredHome 98:ecebed9b80b2 365 /// Select a User Font for all subsequent text.
WiredHome 98:ecebed9b80b2 366 ///
WiredHome 98:ecebed9b80b2 367 /// @note Tool to create the fonts is accessible from its creator
WiredHome 98:ecebed9b80b2 368 /// available at http://www.mikroe.com.
WiredHome 98:ecebed9b80b2 369 /// For version 1.2.0.0, choose the "Export for TFT and new GLCD"
WiredHome 98:ecebed9b80b2 370 /// format.
WiredHome 98:ecebed9b80b2 371 ///
WiredHome 98:ecebed9b80b2 372 /// @param[in] font is a pointer to a specially formed font resource.
WiredHome 98:ecebed9b80b2 373 /// @returns error code.
WiredHome 98:ecebed9b80b2 374 ///
WiredHome 98:ecebed9b80b2 375 virtual RetCode_t SelectUserFont(const uint8_t * font = NULL);
WiredHome 98:ecebed9b80b2 376
WiredHome 32:0e4f2ae512e2 377
WiredHome 32:0e4f2ae512e2 378 protected:
WiredHome 32:0e4f2ae512e2 379
WiredHome 32:0e4f2ae512e2 380 /// Pure virtual method indicating the start of a graphics stream.
WiredHome 32:0e4f2ae512e2 381 ///
WiredHome 32:0e4f2ae512e2 382 /// This is called prior to a stream of pixel data being sent.
WiredHome 32:0e4f2ae512e2 383 /// This may cause register configuration changes in the derived
WiredHome 32:0e4f2ae512e2 384 /// class in order to prepare the hardware to accept the streaming
WiredHome 32:0e4f2ae512e2 385 /// data.
WiredHome 32:0e4f2ae512e2 386 ///
WiredHome 32:0e4f2ae512e2 387 /// @note this method must be supported in the derived class.
WiredHome 32:0e4f2ae512e2 388 ///
WiredHome 32:0e4f2ae512e2 389 /// @returns error code.
WiredHome 32:0e4f2ae512e2 390 ///
WiredHome 32:0e4f2ae512e2 391 virtual RetCode_t _StartGraphicsStream(void) = 0;
dreschpe 0:de9d1462a835 392
WiredHome 32:0e4f2ae512e2 393 /// Pure virtual method indicating the end of a graphics stream.
WiredHome 32:0e4f2ae512e2 394 ///
WiredHome 32:0e4f2ae512e2 395 /// This is called to conclude a stream of pixel data that was sent.
WiredHome 32:0e4f2ae512e2 396 /// This may cause register configuration changes in the derived
WiredHome 32:0e4f2ae512e2 397 /// class in order to stop the hardware from accept the streaming
WiredHome 32:0e4f2ae512e2 398 /// data.
WiredHome 32:0e4f2ae512e2 399 ///
WiredHome 32:0e4f2ae512e2 400 /// @note this method must be supported in the derived class.
WiredHome 32:0e4f2ae512e2 401 ///
WiredHome 32:0e4f2ae512e2 402 /// @returns error code.
WiredHome 32:0e4f2ae512e2 403 ///
WiredHome 32:0e4f2ae512e2 404 virtual RetCode_t _EndGraphicsStream(void) = 0;
WiredHome 32:0e4f2ae512e2 405
WiredHome 42:7cbdfd2bbfc5 406 /// Protected method to render an image given a file handle and
WiredHome 42:7cbdfd2bbfc5 407 /// coordinates.
WiredHome 42:7cbdfd2bbfc5 408 ///
WiredHome 76:c981284eb513 409 /// @param[in] x is the horizontal pixel coordinate
WiredHome 76:c981284eb513 410 /// @param[in] y is the vertical pixel coordinate
WiredHome 76:c981284eb513 411 /// @param[in] w is the image width restriction, or zero to permit full image width.
WiredHome 76:c981284eb513 412 /// @param[in] h is the image height restriction, or zero to permit full image height.
WiredHome 76:c981284eb513 413 /// @param[in] fileOffset is the offset into the file where the image data starts
WiredHome 76:c981284eb513 414 /// @param[in] Image is the filename stream already opened for the data.
WiredHome 42:7cbdfd2bbfc5 415 /// @returns success or error code.
WiredHome 42:7cbdfd2bbfc5 416 ///
WiredHome 42:7cbdfd2bbfc5 417 RetCode_t _RenderBitmap(loc_t x, loc_t y, uint32_t fileOffset, FILE * Image);
WiredHome 42:7cbdfd2bbfc5 418
WiredHome 109:7b94f06f085b 419 /// Pure virtual method to write a boolean stream to the display.
WiredHome 109:7b94f06f085b 420 ///
WiredHome 109:7b94f06f085b 421 /// This takes a bit stream in memory and using the current color settings
WiredHome 109:7b94f06f085b 422 /// it will stream it to the display. Along the way, each bit is translated
WiredHome 109:7b94f06f085b 423 /// to either the foreground or background color value and then that pixel
WiredHome 109:7b94f06f085b 424 /// is pushed onward.
WiredHome 109:7b94f06f085b 425 ///
WiredHome 109:7b94f06f085b 426 /// This is similar, but different, to the @ref pixelStream API, which is
WiredHome 109:7b94f06f085b 427 /// given a stream of color values.
WiredHome 109:7b94f06f085b 428 ///
WiredHome 109:7b94f06f085b 429 /// @param[in] x is the horizontal position on the display.
WiredHome 109:7b94f06f085b 430 /// @param[in] y is the vertical position on the display.
WiredHome 109:7b94f06f085b 431 /// @param[in] w is the width of the rectangular region to fill.
WiredHome 109:7b94f06f085b 432 /// @param[in] h is the height of the rectangular region to fill.
WiredHome 109:7b94f06f085b 433 /// @param[in] boolStream is the inline memory image from which to extract
WiredHome 109:7b94f06f085b 434 /// the bitstream.
WiredHome 109:7b94f06f085b 435 /// @returns success/failure code. See @ref RetCode_t.
WiredHome 109:7b94f06f085b 436 ///
WiredHome 109:7b94f06f085b 437 virtual RetCode_t booleanStream(loc_t x, loc_t y, dim_t w, dim_t h, const uint8_t * boolStream) = 0;
WiredHome 109:7b94f06f085b 438
WiredHome 109:7b94f06f085b 439
WiredHome 29:422616aa04bd 440 const unsigned char * font; ///< reference to an external font somewhere in memory
WiredHome 29:422616aa04bd 441
dreschpe 0:de9d1462a835 442 // pixel location
dreschpe 0:de9d1462a835 443 short _x;
dreschpe 0:de9d1462a835 444 short _y;
dreschpe 0:de9d1462a835 445
WiredHome 111:efe436c43aba 446 rect_t windowrect; ///< window commands are held here for speed of access
dreschpe 0:de9d1462a835 447 };
dreschpe 0:de9d1462a835 448
dreschpe 0:de9d1462a835 449 #endif
WiredHome 33:b6b710758ab3 450