This is a port of Henning Kralsen's UTFT library for Arduino/chipKIT to mbed, refactored to make full use of C inheritance and access control, in order to reduce work when implementing new drivers and at the same time make the code more readable and easier to maintain. As of now supported are SSD1289 (16-bit interface), HX8340-B (serial interface) and ST7735 (serial interface). Drivers for other controllers will be added as time and resources to acquire the displays to test the code permit.

Dependents:   UTFT_SSD1289

Fork of TFTLCD by Todor Todorov

Committer:
ttodorov
Date:
Sun Dec 02 05:58:00 2012 +0000
Revision:
5:09b6d228ceea
Parent:
4:3ac4239f6c9c
Child:
6:059ca1648211
- fixed some more doxygen comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ttodorov 0:881ff0b71102 1 /** \file lcd_base.h
ttodorov 0:881ff0b71102 2 * \brief Base class for all LCD controller implementations.
ttodorov 0:881ff0b71102 3 * \copyright GNU Public License, v2. or later
ttodorov 0:881ff0b71102 4 *
ttodorov 0:881ff0b71102 5 * Generic object painting and screen control.
ttodorov 0:881ff0b71102 6 *
ttodorov 0:881ff0b71102 7 * This library is based on the Arduino/chipKIT UTFT library by Henning
ttodorov 0:881ff0b71102 8 * Karlsen, http://henningkarlsen.com/electronics/library.php?id=52
ttodorov 0:881ff0b71102 9 *
ttodorov 0:881ff0b71102 10 * Copyright (C)2010-2012 Henning Karlsen. All right reserved.
ttodorov 5:09b6d228ceea 11 *
ttodorov 0:881ff0b71102 12 * Copyright (C)2012 Todor Todorov.
ttodorov 0:881ff0b71102 13 *
ttodorov 0:881ff0b71102 14 * This library is free software; you can redistribute it and/or
ttodorov 0:881ff0b71102 15 * modify it under the terms of the GNU Lesser General Public
ttodorov 0:881ff0b71102 16 * License as published by the Free Software Foundation; either
ttodorov 0:881ff0b71102 17 * version 2.1 of the License, or (at your option) any later version.
ttodorov 0:881ff0b71102 18 *
ttodorov 0:881ff0b71102 19 * This library is distributed in the hope that it will be useful,
ttodorov 0:881ff0b71102 20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
ttodorov 0:881ff0b71102 21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
ttodorov 0:881ff0b71102 22 * Lesser General Public License for more details.
ttodorov 0:881ff0b71102 23 *
ttodorov 0:881ff0b71102 24 * You should have received a copy of the GNU Lesser General Public
ttodorov 0:881ff0b71102 25 * License along with this library; if not, write to:
ttodorov 0:881ff0b71102 26 *
ttodorov 0:881ff0b71102 27 * Free Software Foundation, Inc.
ttodorov 0:881ff0b71102 28 * 51 Franklin St, 5th Floor, Boston, MA 02110-1301, USA
ttodorov 0:881ff0b71102 29 *
ttodorov 0:881ff0b71102 30 *********************************************************************/
ttodorov 3:64a5b67d5b51 31 #ifndef TFTLCD_BASE_H
ttodorov 3:64a5b67d5b51 32 #define TFTLCD_BASE_H
ttodorov 0:881ff0b71102 33
ttodorov 0:881ff0b71102 34 #include "mbed.h"
ttodorov 0:881ff0b71102 35 #include "fonts.h"
ttodorov 0:881ff0b71102 36
ttodorov 0:881ff0b71102 37 /** \def RGB(r,g,b)
ttodorov 0:881ff0b71102 38 * \brief Creates a RGB-565 color value.
ttodorov 0:881ff0b71102 39 *
ttodorov 0:881ff0b71102 40 * Displays which use 16 bits to assign colors to a specific pixel, use
ttodorov 0:881ff0b71102 41 * 5 bits for the red component, 6 bits for the green component and 5
ttodorov 0:881ff0b71102 42 * bits for the blue component. This macro converts the 3 full-size
ttodorov 0:881ff0b71102 43 * RGB bytes into one 16-bit RGB-565 value.
ttodorov 0:881ff0b71102 44 */
ttodorov 0:881ff0b71102 45 #define RGB( r, g, b ) ( ( ( ( r ) & 248 ) | ( ( g ) >> 5 ) ) << 8 ) | ( ( ( ( g ) & 28 ) << 3 ) | ( ( b ) >> 3 ) )
ttodorov 0:881ff0b71102 46 /** \def COLOR_BLACK
ttodorov 0:881ff0b71102 47 * \brief Shorthand for RGB( 0, 0, 0 ).
ttodorov 0:881ff0b71102 48 */
ttodorov 0:881ff0b71102 49 #define COLOR_BLACK RGB( 0x00, 0x00, 0x00 )
ttodorov 0:881ff0b71102 50 /** \def COLOR_WHITE
ttodorov 0:881ff0b71102 51 * \brief Shorthand for RGB( 255, 255, 255 ).
ttodorov 0:881ff0b71102 52 */
ttodorov 0:881ff0b71102 53 #define COLOR_WHITE RGB( 0xFF, 0xFF, 0xFF )
ttodorov 0:881ff0b71102 54 /** \def COLOR_RED
ttodorov 0:881ff0b71102 55 * \brief Shorthand for RGB( 255, 0, 0 ).
ttodorov 0:881ff0b71102 56 */
ttodorov 0:881ff0b71102 57 #define COLOR_RED RGB( 0xFF, 0x00, 0x00 )
ttodorov 0:881ff0b71102 58 /** \def COLOR_GREEN
ttodorov 0:881ff0b71102 59 * \brief Shorthand for RGB( 0, 255, 0 ).
ttodorov 0:881ff0b71102 60 */
ttodorov 0:881ff0b71102 61 #define COLOR_GREEN RGB( 0x00, 0xFF, 0x00 )
ttodorov 0:881ff0b71102 62 /** \def COLOR_BLUE
ttodorov 0:881ff0b71102 63 * \brief Shorthand for RGB( 0, 0, 255 ).
ttodorov 0:881ff0b71102 64 */
ttodorov 0:881ff0b71102 65 #define COLOR_BLUE RGB( 0x00, 0x00, 0xFF )
ttodorov 0:881ff0b71102 66
ttodorov 0:881ff0b71102 67 /** \typedef orientation_t
ttodorov 0:881ff0b71102 68 * \brief Display orientation.
ttodorov 0:881ff0b71102 69 */
ttodorov 0:881ff0b71102 70 typedef enum Orientation_enum
ttodorov 0:881ff0b71102 71 {
ttodorov 0:881ff0b71102 72 PORTRAIT = 0, /**< Display height is bigger than its width. */
ttodorov 0:881ff0b71102 73 LANDSCAPE = 1, /**< Display width is bigger than its height. */
ttodorov 0:881ff0b71102 74 } orientation_t;
ttodorov 0:881ff0b71102 75
ttodorov 0:881ff0b71102 76 /** \typedef align_t
ttodorov 0:881ff0b71102 77 * \brief Horizontal text alignment on the line.
ttodorov 0:881ff0b71102 78 */
ttodorov 0:881ff0b71102 79 typedef enum Alignment_enum
ttodorov 0:881ff0b71102 80 {
ttodorov 0:881ff0b71102 81 LEFT = 0, /**< Left-oriented, naturally gravitate closer to the left edge of the screen. */
ttodorov 0:881ff0b71102 82 CENTER = 9998, /**< Center-oriented, try to fit in the middle of the available space with equal free space to the left and right of the text. */
ttodorov 0:881ff0b71102 83 RIGHT = 9999, /**< Right-oriented, naturally gravitate closer to the right edge of the screen, leaving any remaining free space to the left of the text. */
ttodorov 0:881ff0b71102 84 } align_t;
ttodorov 0:881ff0b71102 85
ttodorov 0:881ff0b71102 86 /** \typedef font_metrics_t
ttodorov 0:881ff0b71102 87 * \brief Describes fonts and their properties.
ttodorov 0:881ff0b71102 88 * \sa Comments in fonts.h
ttodorov 0:881ff0b71102 89 */
ttodorov 0:881ff0b71102 90 typedef struct Font_struct
ttodorov 0:881ff0b71102 91 {
ttodorov 0:881ff0b71102 92 const char* font; /**< A pointer to the first byte in the font. */
ttodorov 0:881ff0b71102 93 unsigned char width; /**< The width of each character, in pixels. */
ttodorov 0:881ff0b71102 94 unsigned char height; /**< Height of each character, in pixels. */
ttodorov 0:881ff0b71102 95 unsigned char offset; /**< Offset of the first character in the font. */
ttodorov 0:881ff0b71102 96 unsigned char numchars; /**< Count of the available characters in the font. */
ttodorov 0:881ff0b71102 97 } font_metrics_t;
ttodorov 0:881ff0b71102 98
ttodorov 0:881ff0b71102 99 /** \typedef bitmap_t
ttodorov 0:881ff0b71102 100 * \brief Pointer to the start of a block of pixel data, describing a picture.
ttodorov 0:881ff0b71102 101 */
ttodorov 0:881ff0b71102 102 typedef unsigned short* bitmap_t;
ttodorov 0:881ff0b71102 103
ttodorov 0:881ff0b71102 104 /** Base class for LCD implementations.
ttodorov 0:881ff0b71102 105 *
ttodorov 0:881ff0b71102 106 * All separate LCD controller implementations have to subclass this one.
ttodorov 0:881ff0b71102 107 *
ttodorov 0:881ff0b71102 108 * \version 0.1
ttodorov 0:881ff0b71102 109 * \author Todor Todorov
ttodorov 0:881ff0b71102 110 */
ttodorov 0:881ff0b71102 111 class LCD
ttodorov 0:881ff0b71102 112 {
ttodorov 0:881ff0b71102 113 public:
ttodorov 0:881ff0b71102 114
ttodorov 0:881ff0b71102 115 /** Initialize display.
ttodorov 0:881ff0b71102 116 *
ttodorov 0:881ff0b71102 117 * Wakes up the display from sleep, initializes power parameters.
ttodorov 0:881ff0b71102 118 * This function must be called first, befor any painting on the
ttodorov 0:881ff0b71102 119 * display is done, otherwise the positioning of graphical elements
ttodorov 0:881ff0b71102 120 * will not work properly and any paynt operation will not be visible
ttodorov 0:881ff0b71102 121 * or produce garbage.
ttodorov 0:881ff0b71102 122 *
ttodorov 0:881ff0b71102 123 * This function is controller-specific and needs to be implemented
ttodorov 4:3ac4239f6c9c 124 * separately for each available display.
ttodorov 0:881ff0b71102 125 * \param oritentation The display orientation, landscape is default.
ttodorov 0:881ff0b71102 126 */
ttodorov 0:881ff0b71102 127 virtual void Initialize( orientation_t orientation ) = 0;
ttodorov 0:881ff0b71102 128
ttodorov 4:3ac4239f6c9c 129 /** Puts the display to sleep.
ttodorov 4:3ac4239f6c9c 130 *
ttodorov 4:3ac4239f6c9c 131 * When the display is in sleep mode, its power consumption is
ttodorov 4:3ac4239f6c9c 132 * minimized. Before new pixel data can be written to the display
ttodorov 4:3ac4239f6c9c 133 * memory, the controller needs to be brought out of sleep mode.
ttodorov 4:3ac4239f6c9c 134 * \sa #WakeUp( void );
ttodorov 4:3ac4239f6c9c 135 * \remarks The result of this operation might not be exactly as
ttodorov 4:3ac4239f6c9c 136 * expected. Putting the display to sleep will cause the
ttodorov 4:3ac4239f6c9c 137 * controller to switch to the standard color of the LCD,
ttodorov 4:3ac4239f6c9c 138 * so depending on whether the display is normally white,
ttodorov 4:3ac4239f6c9c 139 * or normally dark, the screen might or might not go
ttodorov 4:3ac4239f6c9c 140 * dark. Additional power saving can be achieved, if
ttodorov 4:3ac4239f6c9c 141 * the backlight of the used display is not hardwired on
ttodorov 4:3ac4239f6c9c 142 * the PCB and can be controlled via the BL pin.
ttodorov 4:3ac4239f6c9c 143 * \remarks This function is controller-specific and needs to be
ttodorov 4:3ac4239f6c9c 144 * implemented separately for each available display.
ttodorov 4:3ac4239f6c9c 145 */
ttodorov 4:3ac4239f6c9c 146 virtual void Sleep( void ) = 0;
ttodorov 4:3ac4239f6c9c 147
ttodorov 4:3ac4239f6c9c 148 /** Wakes up the display from sleep mode.
ttodorov 4:3ac4239f6c9c 149 *
ttodorov 4:3ac4239f6c9c 150 * This function needs to be called before any other, when the
ttodorov 4:3ac4239f6c9c 151 * display has been put into sleep mode by a previois call to
ttodorov 4:3ac4239f6c9c 152 * #Sleep( void ).
ttodorov 4:3ac4239f6c9c 153 * \remarks This function is controller-specific and needs to be
ttodorov 4:3ac4239f6c9c 154 * implemented separately for each available display.
ttodorov 4:3ac4239f6c9c 155 */
ttodorov 4:3ac4239f6c9c 156 virtual void WakeUp( void ) = 0;
ttodorov 4:3ac4239f6c9c 157
ttodorov 0:881ff0b71102 158 /** Set the foreground color for painting.
ttodorov 0:881ff0b71102 159 *
ttodorov 0:881ff0b71102 160 * This is the default foreground color to be used in painting operations.
ttodorov 0:881ff0b71102 161 * If a specific output function allows for a different color to be specified
ttodorov 0:881ff0b71102 162 * in place, the new setting will be used for that single operation only and
ttodorov 0:881ff0b71102 163 * will not change this value.
ttodorov 0:881ff0b71102 164 *
ttodorov 0:881ff0b71102 165 * \param color The color to be used. The value must be in RGB-565 format.
ttodorov 0:881ff0b71102 166 * \sa #RGB(r,g,b)
ttodorov 0:881ff0b71102 167 */
ttodorov 0:881ff0b71102 168 virtual void SetForeground( unsigned short color = COLOR_WHITE );
ttodorov 0:881ff0b71102 169
ttodorov 0:881ff0b71102 170 /** Set the background color for painting.
ttodorov 0:881ff0b71102 171 *
ttodorov 0:881ff0b71102 172 * This is the default color to be used for "empty" pixels while painting.
ttodorov 0:881ff0b71102 173 * If a particular function allows for a different value to be specified
ttodorov 0:881ff0b71102 174 * when the function is called, the new value will be used only for this
ttodorov 0:881ff0b71102 175 * single call and will not change this setting.
ttodorov 0:881ff0b71102 176 *
ttodorov 0:881ff0b71102 177 * \param color The background color as RGB-565 value.
ttodorov 0:881ff0b71102 178 * \sa #RGB(r,g,b)
ttodorov 0:881ff0b71102 179 */
ttodorov 0:881ff0b71102 180 virtual void SetBackground( unsigned short color = COLOR_BLACK );
ttodorov 0:881ff0b71102 181
ttodorov 0:881ff0b71102 182 /** Sets the font to be used for painting of text on the screen.
ttodorov 0:881ff0b71102 183 * \param font A pointer to the font data.
ttodorov 0:881ff0b71102 184 * \sa Comments in file fonts.h
ttodorov 0:881ff0b71102 185 */
ttodorov 0:881ff0b71102 186 virtual void SetFont( const char* font );
ttodorov 0:881ff0b71102 187
ttodorov 0:881ff0b71102 188 /** Gets the display width.
ttodorov 0:881ff0b71102 189 * \return Display width in pixels.
ttodorov 0:881ff0b71102 190 */
ttodorov 0:881ff0b71102 191 unsigned short GetWidth( void );
ttodorov 0:881ff0b71102 192
ttodorov 0:881ff0b71102 193 /** Gets the display height.
ttodorov 0:881ff0b71102 194 * \return Display height in pixels.
ttodorov 0:881ff0b71102 195 */
ttodorov 0:881ff0b71102 196 unsigned short GetHeight( void );
ttodorov 0:881ff0b71102 197
ttodorov 0:881ff0b71102 198 /** Fills the whole screen with a single color.
ttodorov 0:881ff0b71102 199 * \param color The color to be used. The value must be in RGB-565 format.
ttodorov 0:881ff0b71102 200 * \remarks The special values -1 and -2 signify the preset background and foreground colors, respectively.
ttodorov 0:881ff0b71102 201 * The backround color is the default.
ttodorov 0:881ff0b71102 202 */
ttodorov 0:881ff0b71102 203 virtual void FillScreen( int color = -1 );
ttodorov 0:881ff0b71102 204
ttodorov 0:881ff0b71102 205 /** Clears the screen.
ttodorov 0:881ff0b71102 206 *
ttodorov 0:881ff0b71102 207 * This is the same as calling #FillScreen() or #FillScreen( -1 ) to use the background color.
ttodorov 0:881ff0b71102 208 */
ttodorov 0:881ff0b71102 209 virtual void ClearScreen( void );
ttodorov 0:881ff0b71102 210
ttodorov 0:881ff0b71102 211 /** Draws a pixel at the specified location.
ttodorov 0:881ff0b71102 212 *
ttodorov 0:881ff0b71102 213 * By default the function will use the preset foreground color, but the background
ttodorov 0:881ff0b71102 214 * or a custom color could be used as well.
ttodorov 0:881ff0b71102 215 *
ttodorov 0:881ff0b71102 216 * \param x The horizontal offset of the pixel from the upper left corner of the screen.
ttodorov 0:881ff0b71102 217 * \param y The vertical offset of the pixel from the upper left corner of the screen.
ttodorov 0:881ff0b71102 218 * \param color The color to be used. Must be in RGB-565 format, or -1 for background and -2 for foreground color.
ttodorov 0:881ff0b71102 219 */
ttodorov 0:881ff0b71102 220 virtual void DrawPixel( unsigned short x, unsigned short y, int color = -2 );
ttodorov 0:881ff0b71102 221
ttodorov 0:881ff0b71102 222 /** Draws a line.
ttodorov 0:881ff0b71102 223 *
ttodorov 0:881ff0b71102 224 * \param x1 Horizontal offset of the beginning point of the line.
ttodorov 0:881ff0b71102 225 * \param y1 Vertical offset of the beginning point of the line.
ttodorov 0:881ff0b71102 226 * \param x2 Horizontal offset of the end point of the line.
ttodorov 0:881ff0b71102 227 * \param y2 Verical offset of the end point of the line.
ttodorov 0:881ff0b71102 228 * \param color The color to use for painting, in RGB-565 format, or -1 for background, or -2 for foreground.
ttodorov 0:881ff0b71102 229 */
ttodorov 0:881ff0b71102 230 virtual void DrawLine( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
ttodorov 0:881ff0b71102 231
ttodorov 0:881ff0b71102 232 /** Paints a rectangle.
ttodorov 0:881ff0b71102 233 *
ttodorov 0:881ff0b71102 234 * \param x1 The horizontal offset of the beginning point of one of the rectangle's diagonals.
ttodorov 0:881ff0b71102 235 * \param y1 The vertical offset of the beginning point of one of the rectangle's diagonals.
ttodorov 0:881ff0b71102 236 * \param x2 The horizontal offset of the end point of the same of the rectangle's diagonals.
ttodorov 0:881ff0b71102 237 * \param y2 The vertical offset of the end point of the same of the rectangle's diagonals.
ttodorov 0:881ff0b71102 238 * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color in RGB-565 format.
ttodorov 0:881ff0b71102 239 */
ttodorov 0:881ff0b71102 240 virtual void DrawRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
ttodorov 0:881ff0b71102 241
ttodorov 0:881ff0b71102 242 /** Paints a rectangle and fills it with the paint color.
ttodorov 0:881ff0b71102 243 *
ttodorov 0:881ff0b71102 244 * \param x1 The horizontal offset of the beginning point of one of the rectangle's diagonals.
ttodorov 0:881ff0b71102 245 * \param y1 The vertical offset of the beginning point of one of the rectangle's diagonals.
ttodorov 0:881ff0b71102 246 * \param x2 The horizontal offset of the end point of the same of the rectangle's diagonals.
ttodorov 0:881ff0b71102 247 * \param y2 The vertical offset of the end point of the same of the rectangle's diagonals.
ttodorov 0:881ff0b71102 248 * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color in RGB-565 format.
ttodorov 0:881ff0b71102 249 */
ttodorov 0:881ff0b71102 250 virtual void DrawRoundRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
ttodorov 0:881ff0b71102 251
ttodorov 0:881ff0b71102 252 /** Paints a rectangle with rounded corners.
ttodorov 0:881ff0b71102 253 *
ttodorov 0:881ff0b71102 254 * \param x1 The horizontal offset of the beginning point of one of the rectangle's diagonals.
ttodorov 0:881ff0b71102 255 * \param y1 The vertical offset of the beginning point of one of the rectangle's diagonals.
ttodorov 0:881ff0b71102 256 * \param x2 The horizontal offset of the end point of the same of the rectangle's diagonals.
ttodorov 0:881ff0b71102 257 * \param y2 The vertical offset of the end point of the same of the rectangle's diagonals.
ttodorov 0:881ff0b71102 258 * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color in RGB-565 format.
ttodorov 0:881ff0b71102 259 */
ttodorov 0:881ff0b71102 260 virtual void FillRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
ttodorov 0:881ff0b71102 261
ttodorov 0:881ff0b71102 262 /** Paints a rectangle with rounded corners and fills it with the paint color.
ttodorov 0:881ff0b71102 263 *
ttodorov 0:881ff0b71102 264 * \param x1 The horizontal offset of the beginning point of one of the rectangle's diagonals.
ttodorov 0:881ff0b71102 265 * \param y1 The vertical offset of the beginning point of one of the rectangle's diagonals.
ttodorov 0:881ff0b71102 266 * \param x2 The horizontal offset of the end point of the same of the rectangle's diagonals.
ttodorov 0:881ff0b71102 267 * \param y2 The vertical offset of the end point of the same of the rectangle's diagonals.
ttodorov 0:881ff0b71102 268 * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color in RGB-565 format.
ttodorov 0:881ff0b71102 269 */
ttodorov 0:881ff0b71102 270 virtual void FillRoundRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
ttodorov 0:881ff0b71102 271
ttodorov 0:881ff0b71102 272 /** Paints a circle.
ttodorov 0:881ff0b71102 273 *
ttodorov 0:881ff0b71102 274 * \param x The offset of the circle's center from the left edge of the screen.
ttodorov 0:881ff0b71102 275 * \param y The offset of the circle's center from the top edge of the screen.
ttodorov 0:881ff0b71102 276 * \param radius The circle's radius.
ttodorov 0:881ff0b71102 277 * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color in RGB-565 format.
ttodorov 0:881ff0b71102 278 */
ttodorov 0:881ff0b71102 279 virtual void DrawCircle( unsigned short x, unsigned short y, unsigned short radius, int color = -2 );
ttodorov 0:881ff0b71102 280
ttodorov 0:881ff0b71102 281 /** Paints a circle and fills it with the paint color.
ttodorov 0:881ff0b71102 282 *
ttodorov 0:881ff0b71102 283 * \param x The offset of the circle's center from the left edge of the screen.
ttodorov 0:881ff0b71102 284 * \param y The offset of the circle's center from the top edge of the screen.
ttodorov 0:881ff0b71102 285 * \param radius The circle's radius.
ttodorov 0:881ff0b71102 286 * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color in RGB-565 format.
ttodorov 0:881ff0b71102 287 */
ttodorov 0:881ff0b71102 288 virtual void FillCircle( unsigned short x, unsigned short y, unsigned short radius, int color = -2 );
ttodorov 0:881ff0b71102 289
ttodorov 0:881ff0b71102 290 /** Print a text on the screen.
ttodorov 0:881ff0b71102 291 *
ttodorov 0:881ff0b71102 292 * \param str The text.
ttodorov 0:881ff0b71102 293 * \param x The horizontal offset form the left edge of the screen. The special values LEFT, CENTER,
ttodorov 0:881ff0b71102 294 * or RIGHT can be used instead of pixel offset to indicate the text's horizontal alignment.
ttodorov 0:881ff0b71102 295 * \param y The vertical offset of the text from the top of the screen.
ttodorov 0:881ff0b71102 296 * \param fgColor The foreground to use for painting the text; -1 indicates background color, -2 the foreground setting, or custom color.
ttodorov 0:881ff0b71102 297 * \param bgColor The color to use for painting the empty pixels; -1 indicates the background color, -2 the foreground setting, or custom color.
ttodorov 0:881ff0b71102 298 * \param deg If different than 0, the text will be rotated at an angle this many degrees around its starting point. Default is not to ratate.
ttodorov 0:881ff0b71102 299 */
ttodorov 0:881ff0b71102 300 virtual void Print( const char *str, unsigned short x, unsigned short y, int fgColor = -2, int bgColor = -1, unsigned short deg = 0 );
ttodorov 0:881ff0b71102 301
ttodorov 0:881ff0b71102 302 /** Draw an image on the screen.
ttodorov 0:881ff0b71102 303 *
ttodorov 0:881ff0b71102 304 * The pixels of the picture must be in the RGB-565 format. The data can be provided
ttodorov 0:881ff0b71102 305 * as an array in a source or a header file. To convert an image file to the appropriate
ttodorov 0:881ff0b71102 306 * format, a special utility must be utilized. One such tool is provided by Henning Karlsen,
ttodorov 0:881ff0b71102 307 * the author of the UTFT display liberary and can be downloaded for free from his web site:
ttodorov 0:881ff0b71102 308 * http://henningkarlsen.com/electronics/library.php?id=52
ttodorov 0:881ff0b71102 309 *
ttodorov 0:881ff0b71102 310 * \param x Horizontal offset of the first pixel of the image.
ttodorov 0:881ff0b71102 311 * \param y Vertical offset of the first pixel of the image
ttodorov 0:881ff0b71102 312 * \param sx Width of the image.
ttodorov 0:881ff0b71102 313 * \param sy Height of the image.
ttodorov 0:881ff0b71102 314 * \param data Image pixel array.
ttodorov 0:881ff0b71102 315 * \param scale A value of 1 will produce an image with its original size, while a different value will scale the image.
ttodorov 0:881ff0b71102 316 */
ttodorov 0:881ff0b71102 317 virtual void DrawBitmap( unsigned short x, unsigned short y, unsigned short sx, unsigned short sy, bitmap_t data, unsigned char scale = 1 );
ttodorov 0:881ff0b71102 318
ttodorov 0:881ff0b71102 319 /** Draw an image on the screen.
ttodorov 0:881ff0b71102 320 *
ttodorov 0:881ff0b71102 321 * The pixels of the picture must be in the RGB-565 format. The data can be provided
ttodorov 0:881ff0b71102 322 * as an array in a source or a header file. To convert an image file to the appropriate
ttodorov 0:881ff0b71102 323 * format, a special utility must be utilized. One such tool is provided by Henning Karlsen,
ttodorov 0:881ff0b71102 324 * the author of the UTFT display liberary and can be downloaded for free from his web site:
ttodorov 0:881ff0b71102 325 * http://henningkarlsen.com/electronics/library.php?id=52
ttodorov 0:881ff0b71102 326 *
ttodorov 0:881ff0b71102 327 * \param x Horizontal offset of the first pixel of the image.
ttodorov 0:881ff0b71102 328 * \param y Vertical offset of the first pixel of the image
ttodorov 0:881ff0b71102 329 * \param sx Width of the image.
ttodorov 0:881ff0b71102 330 * \param sy Height of the image.
ttodorov 0:881ff0b71102 331 * \param data Image pixel array.
ttodorov 0:881ff0b71102 332 * \param deg Angle to rotate the image before painting on screen, in degrees.
ttodorov 0:881ff0b71102 333 * \param rox
ttodorov 0:881ff0b71102 334 * \param roy
ttodorov 0:881ff0b71102 335 */
ttodorov 0:881ff0b71102 336 virtual void DrawBitmap( unsigned short x, unsigned short y, unsigned short sx, unsigned short sy, bitmap_t data, unsigned short deg, unsigned short rox, unsigned short roy );
ttodorov 0:881ff0b71102 337
ttodorov 0:881ff0b71102 338 protected:
ttodorov 0:881ff0b71102 339 /** Creates an instance of the class.
ttodorov 0:881ff0b71102 340 *
ttodorov 0:881ff0b71102 341 * \param width Width of the display in pixels.
ttodorov 0:881ff0b71102 342 * \param height Height of the display in pixels.
ttodorov 0:881ff0b71102 343 * \param CS Pin connected to the CS input of the display.
ttodorov 0:881ff0b71102 344 * \param RS Pin connected to the RS input of the display.
ttodorov 4:3ac4239f6c9c 345 * \param RESET Pin connected to the RESET input of the display.
ttodorov 0:881ff0b71102 346 */
ttodorov 4:3ac4239f6c9c 347 LCD( unsigned short width, unsigned short height ,PinName CS, PinName RS, PinName RESET );
ttodorov 4:3ac4239f6c9c 348
ttodorov 4:3ac4239f6c9c 349 /** Activates the display for command/data transfer.
ttodorov 4:3ac4239f6c9c 350 *
ttodorov 4:3ac4239f6c9c 351 * Usually achieved by pulling the CS pin of the display low.
ttodorov 4:3ac4239f6c9c 352 */
ttodorov 4:3ac4239f6c9c 353 virtual void Activate( void );
ttodorov 4:3ac4239f6c9c 354
ttodorov 4:3ac4239f6c9c 355 /** Deactivates the display after data has been transmitted.
ttodorov 4:3ac4239f6c9c 356 *
ttodorov 4:3ac4239f6c9c 357 * Usually achieved by pulling the CS pin of the display high.
ttodorov 4:3ac4239f6c9c 358 */
ttodorov 4:3ac4239f6c9c 359 virtual void Deactivate( void );
ttodorov 0:881ff0b71102 360
ttodorov 0:881ff0b71102 361 /** Sends a command to the display.
ttodorov 0:881ff0b71102 362 *
ttodorov 0:881ff0b71102 363 * \param cmd The display command.
ttodorov 0:881ff0b71102 364 * \remarks Commands are controller-specific and this function needs to
ttodorov 0:881ff0b71102 365 * be implemented separately for each available controller.
ttodorov 0:881ff0b71102 366 */
ttodorov 2:81ed304b7e9b 367 virtual void WriteCmd( unsigned short cmd ) = 0;
ttodorov 0:881ff0b71102 368
ttodorov 0:881ff0b71102 369 /** Sends pixel data to the display.
ttodorov 0:881ff0b71102 370 *
ttodorov 0:881ff0b71102 371 * \param data The display data.
ttodorov 0:881ff0b71102 372 * \remarks Sendin data is controller-specific and this function needs to
ttodorov 0:881ff0b71102 373 * be implemented separately for each available controller.
ttodorov 0:881ff0b71102 374 */
ttodorov 2:81ed304b7e9b 375 virtual void WriteData( unsigned short data ) = 0;
ttodorov 0:881ff0b71102 376
ttodorov 0:881ff0b71102 377 /** Sends both command and data to the display controller.
ttodorov 0:881ff0b71102 378 *
ttodorov 0:881ff0b71102 379 * This is a helper utility function which combines the 2 functions above
ttodorov 0:881ff0b71102 380 * into one single convenience step.
ttodorov 0:881ff0b71102 381 *
ttodorov 0:881ff0b71102 382 * \param cmd The display command.
ttodorov 0:881ff0b71102 383 * \param data The display pixel data.
ttodorov 0:881ff0b71102 384 */
ttodorov 2:81ed304b7e9b 385 virtual void WriteCmdData( unsigned short cmd, unsigned short data );
ttodorov 0:881ff0b71102 386
ttodorov 0:881ff0b71102 387 /** Assigns a chunk of the display memory to receive data.
ttodorov 0:881ff0b71102 388 *
ttodorov 0:881ff0b71102 389 * When data is sent to the display after this function completes, the opertion will
ttodorov 0:881ff0b71102 390 * start from the begining of the assigned address (pixel position) and the pointer
ttodorov 0:881ff0b71102 391 * will be automatically incremented so that the next data write operation will continue
ttodorov 0:881ff0b71102 392 * with the next pixel from the memory block. If more data is written than available
ttodorov 0:881ff0b71102 393 * pixels, at the end of the block the pointer will jump back to its beginning and
ttodorov 0:881ff0b71102 394 * commence again, until the next address change command is sent to the display.
ttodorov 0:881ff0b71102 395 *
ttodorov 0:881ff0b71102 396 * \param x1 The X coordinate of the pixel at the beginning of the block.
ttodorov 0:881ff0b71102 397 * \param y1 The Y coordinate of the pixel at the beginning of the block.
ttodorov 0:881ff0b71102 398 * \param x2 The X coordinate of the pixel at the end of the block.
ttodorov 0:881ff0b71102 399 * \param y2 The Y coordinate of the pixel at the end of the block.
ttodorov 0:881ff0b71102 400 * \remarks Addressing commands are controller-specific and this function needs to be
ttodorov 0:881ff0b71102 401 * implemented separately for each available controller.
ttodorov 0:881ff0b71102 402 */
ttodorov 2:81ed304b7e9b 403 virtual void SetXY( uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2 ) = 0;
ttodorov 0:881ff0b71102 404
ttodorov 0:881ff0b71102 405 /** Resets the memory address for the next display write operation to the screen origins (0,0).
ttodorov 0:881ff0b71102 406 */
ttodorov 2:81ed304b7e9b 407 virtual void ClearXY( void );
ttodorov 2:81ed304b7e9b 408
ttodorov 2:81ed304b7e9b 409 /** Draws a horizontal line.
ttodorov 2:81ed304b7e9b 410 *
ttodorov 2:81ed304b7e9b 411 * This is a utility function to draw horizontal-only lines
ttodorov 2:81ed304b7e9b 412 * for reduced code complexity and faster execution.
ttodorov 2:81ed304b7e9b 413 *
ttodorov 2:81ed304b7e9b 414 * \param x X coordinate of the starting point of the line.
ttodorov 2:81ed304b7e9b 415 * \param y Y coordinate of the starting point of the line.
ttodorov 2:81ed304b7e9b 416 * \param len Length of the line.
ttodorov 2:81ed304b7e9b 417 * \param color The color to use to draw the line. By default the global foreground color is used ( -2 ),
ttodorov 2:81ed304b7e9b 418 * -1 switches to the default background color, or any other RGB-565 color can be used.
ttodorov 2:81ed304b7e9b 419 */
ttodorov 2:81ed304b7e9b 420 virtual void DrawHLine( unsigned short x, unsigned short y, unsigned short len, int color = -2 );
ttodorov 0:881ff0b71102 421
ttodorov 2:81ed304b7e9b 422 /** Draws a vertical line.
ttodorov 2:81ed304b7e9b 423 *
ttodorov 2:81ed304b7e9b 424 * This is a utility function to draw vertical-only lines
ttodorov 2:81ed304b7e9b 425 * for reduced code complexity and faster execution.
ttodorov 2:81ed304b7e9b 426 *
ttodorov 2:81ed304b7e9b 427 * \param x X coordinate of the starting point of the line.
ttodorov 2:81ed304b7e9b 428 * \param y Y coordinate of the starting point of the line.
ttodorov 2:81ed304b7e9b 429 * \param len Height of the line.
ttodorov 2:81ed304b7e9b 430 * \param color The color to use to draw the line. By default the global foreground color is used ( -2 ),
ttodorov 2:81ed304b7e9b 431 * -1 switches to the default background color, or any other RGB-565 color can be used.
ttodorov 2:81ed304b7e9b 432 */
ttodorov 2:81ed304b7e9b 433 virtual void DrawVLine( unsigned short x, unsigned short y, unsigned short len, int color = -2 );
ttodorov 2:81ed304b7e9b 434
ttodorov 2:81ed304b7e9b 435 /** Prints a character at the given position and using the given color.
ttodorov 2:81ed304b7e9b 436 *
ttodorov 2:81ed304b7e9b 437 * \param c The character.
ttodorov 2:81ed304b7e9b 438 * \param x X coordinate of the character position.
ttodorov 2:81ed304b7e9b 439 * \param y Y coordinate of the character position.
ttodorov 2:81ed304b7e9b 440 * \param fgColor Foreground color for drawing. By default the global foreground color is used ( -2 ),
ttodorov 2:81ed304b7e9b 441 * -1 switches to the default background color, or any other RGB-565 color can be used.
ttodorov 2:81ed304b7e9b 442 * \param bgColor Background color for drawing. By default the global background color is used ( -1 ),
ttodorov 2:81ed304b7e9b 443 * -2 switches to the default foreground color, or any other RGB-565 color can be used.
ttodorov 2:81ed304b7e9b 444 */
ttodorov 2:81ed304b7e9b 445 virtual void PrintChar( char c, unsigned short x, unsigned short y, int fgColor = -2, int bgColor = -1 );
ttodorov 2:81ed304b7e9b 446
ttodorov 2:81ed304b7e9b 447 /** Prints a character at the given position and using the given color and with the given rotation.
ttodorov 2:81ed304b7e9b 448 *
ttodorov 2:81ed304b7e9b 449 * \param c The character.
ttodorov 2:81ed304b7e9b 450 * \param x X coordinate of the character position.
ttodorov 2:81ed304b7e9b 451 * \param y Y coordinate of the character position.
ttodorov 2:81ed304b7e9b 452 * \param pos Position of the character in the string from which it originates (used to rotate a whole string).
ttodorov 2:81ed304b7e9b 453 * \param fgColor Foreground color for drawing. By default the global foreground color is used ( -2 ),
ttodorov 2:81ed304b7e9b 454 * -1 switches to the default background color, or any other RGB-565 color can be used.
ttodorov 2:81ed304b7e9b 455 * \param bgColor Background color for drawing. By default the global background color is used ( -1 ),
ttodorov 2:81ed304b7e9b 456 * -2 switches to the default foreground color, or any other RGB-565 color can be used.
ttodorov 2:81ed304b7e9b 457 * \param deg The angle at which to rotate.
ttodorov 2:81ed304b7e9b 458 */
ttodorov 2:81ed304b7e9b 459 virtual void RotateChar( char c, unsigned short x, unsigned short y, int pos, int fgColor = -2, int bgColor = -1, unsigned short deg = 0 );
ttodorov 0:881ff0b71102 460
ttodorov 0:881ff0b71102 461 protected:
ttodorov 4:3ac4239f6c9c 462 unsigned short _disp_width, _disp_height;
ttodorov 4:3ac4239f6c9c 463 DigitalOut _lcd_pin_cs, _lcd_pin_rs, _lcd_pin_reset;
ttodorov 4:3ac4239f6c9c 464 orientation_t _orientation;
ttodorov 4:3ac4239f6c9c 465 unsigned short _foreground, _background;
ttodorov 4:3ac4239f6c9c 466 font_metrics_t _font;
ttodorov 0:881ff0b71102 467 };
ttodorov 0:881ff0b71102 468
ttodorov 3:64a5b67d5b51 469 #endif /* TFTLCD_BASE_H */