Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Nucleo_LCD_mcufriend_test
Fork of 24_TFT_STMNUCLEO by
Diff: lcd_base.h
- Revision:
- 12:d0978272a340
- Parent:
- 11:aeceefc5f9f2
- Child:
- 19:eb27effb8c07
--- a/lcd_base.h Tue Dec 11 16:50:09 2012 +0000
+++ b/lcd_base.h Tue Dec 11 18:11:14 2012 +0000
@@ -39,14 +39,16 @@
#endif
/** \def RGB(r,g,b)
- * \brief Creates a RGB-565 color value.
+ * \brief Creates a RGB color from distinct bytes for the red, green and blue components.
*
* Displays which use 16 bits to assign colors to a specific pixel, use
* 5 bits for the red component, 6 bits for the green component and 5
- * bits for the blue component. This macro converts the 3 full-size
- * RGB bytes into one 16-bit RGB-565 value.
+ * bits for the blue component. Displays which have 18-bit color depth
+ * use 6 bits for red, 6 bits for green and 6 bits for blue component.
+ * This macro preserves the full 24-bit color depth, but it is the responsibility
+ * of the respective driver to convert the color value to the correct format.
*/
-#define RGB( r, g, b ) ( ( ( ( r ) & 248 ) | ( ( g ) >> 5 ) ) << 8 ) | ( ( ( ( g ) & 28 ) << 3 ) | ( ( b ) >> 3 ) )
+#define RGB( r, g, b ) ( ( r ) << 16 ) | ( ( g ) << 8 ) | ( b )
/** \def COLOR_BLACK
* \brief Shorthand for RGB( 0, 0, 0 ).
*/
@@ -73,8 +75,10 @@
*/
enum Orientation_enum
{
- PORTRAIT = 0, /**< Display height is bigger than its width. */
- LANDSCAPE = 1, /**< Display width is bigger than its height. */
+ PORTRAIT = 0, /**< Display height is bigger than its width. View at 12 o'clock. */
+ LANDSCAPE = 1, /**< Display width is bigger than its height. View at 9 o'clock. */
+ PORTRAIT_REV = 2, /**< Display height is bigger than its width. View at 6 o'clock. */
+ LANDSCAPE_REV = 3, /**< Display width is bigger than its height. View at 3 o'clock. */
};
/** \typedef orientation_t
* \brief Convenience shortcut for display orientation.
@@ -125,6 +129,21 @@
*/
typedef struct Font_struct font_metrics_t;
+/** \struct Bitmap_struct
+ * \brief Describes an image.
+ */
+struct Bitmap_struct
+{
+ colordepth_t Format; /**< Color depth of the image. */
+ unsigned short Width; /**< Width of the image in pixels. */
+ unsigned short Height; /**< Height of the image in pixels. */
+ const void* PixelData; /**< Image pixel data. */
+};
+/** \typedef bitmap_t
+ * \brief Convenience shortcut bitmap type.
+ */
+typedef struct Bitmap_struct bitmap_t;
+
/** Base class for LCD implementations.
*
@@ -148,8 +167,9 @@
* This function is controller-specific and needs to be implemented
* separately for each available display.
* \param oritentation The display orientation, landscape is default.
+ * \param colors The correct color depth to use for the pixel data.
*/
- virtual void Initialize( orientation_t orientation ) = 0;
+ virtual void Initialize( orientation_t orientation, colordepth_t colors ) = 0;
/** Puts the display to sleep.
*
@@ -187,10 +207,10 @@
* in place, the new setting will be used for that single operation only and
* will not change this value.
*
- * \param color The color to be used. The value must be in RGB-565 format.
+ * \param color The color to be used (24-bit color depth).
* \sa #RGB(r,g,b)
*/
- virtual void SetForeground( unsigned short color = COLOR_WHITE );
+ virtual void SetForeground( unsigned int color = COLOR_WHITE );
/** Set the background color for painting.
*
@@ -199,10 +219,10 @@
* when the function is called, the new value will be used only for this
* single call and will not change this setting.
*
- * \param color The background color as RGB-565 value.
+ * \param color The background color (24-bit color depth).
* \sa #RGB(r,g,b)
*/
- virtual void SetBackground( unsigned short color = COLOR_BLACK );
+ virtual void SetBackground( unsigned int color = COLOR_BLACK );
/** Sets the font to be used for painting of text on the screen.
* \param font A pointer to the font data.
@@ -240,7 +260,7 @@
*
* \param x The horizontal offset of the pixel from the upper left corner of the screen.
* \param y The vertical offset of the pixel from the upper left corner of the screen.
- * \param color The color to be used. Must be in RGB-565 format, or -1 for background and -2 for foreground color.
+ * \param color The color to be used. Use a custom color, or -1 for background and -2 for foreground color.
*/
virtual void DrawPixel( unsigned short x, unsigned short y, int color = -2 );
@@ -250,7 +270,7 @@
* \param y1 Vertical offset of the beginning point of the line.
* \param x2 Horizontal offset of the end point of the line.
* \param y2 Verical offset of the end point of the line.
- * \param color The color to use for painting, in RGB-565 format, or -1 for background, or -2 for foreground.
+ * \param color The color to use for painting, or -1 for background, or -2 for foreground.
*/
virtual void DrawLine( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
@@ -260,7 +280,7 @@
* \param y1 The vertical offset of the beginning point of one of the rectangle's diagonals.
* \param x2 The horizontal offset of the end point of the same of the rectangle's diagonals.
* \param y2 The vertical offset of the end point of the same of the rectangle's diagonals.
- * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color in RGB-565 format.
+ * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color.
*/
virtual void DrawRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
@@ -270,7 +290,7 @@
* \param y1 The vertical offset of the beginning point of one of the rectangle's diagonals.
* \param x2 The horizontal offset of the end point of the same of the rectangle's diagonals.
* \param y2 The vertical offset of the end point of the same of the rectangle's diagonals.
- * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color in RGB-565 format.
+ * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color.
*/
virtual void DrawRoundRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
@@ -280,7 +300,7 @@
* \param y1 The vertical offset of the beginning point of one of the rectangle's diagonals.
* \param x2 The horizontal offset of the end point of the same of the rectangle's diagonals.
* \param y2 The vertical offset of the end point of the same of the rectangle's diagonals.
- * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color in RGB-565 format.
+ * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color.
*/
virtual void FillRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
@@ -290,7 +310,7 @@
* \param y1 The vertical offset of the beginning point of one of the rectangle's diagonals.
* \param x2 The horizontal offset of the end point of the same of the rectangle's diagonals.
* \param y2 The vertical offset of the end point of the same of the rectangle's diagonals.
- * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color in RGB-565 format.
+ * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color.
*/
virtual void FillRoundRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
@@ -299,7 +319,7 @@
* \param x The offset of the circle's center from the left edge of the screen.
* \param y The offset of the circle's center from the top edge of the screen.
* \param radius The circle's radius.
- * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color in RGB-565 format.
+ * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color.
*/
virtual void DrawCircle( unsigned short x, unsigned short y, unsigned short radius, int color = -2 );
@@ -308,7 +328,7 @@
* \param x The offset of the circle's center from the left edge of the screen.
* \param y The offset of the circle's center from the top edge of the screen.
* \param radius The circle's radius.
- * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color in RGB-565 format.
+ * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color.
*/
virtual void FillCircle( unsigned short x, unsigned short y, unsigned short radius, int color = -2 );
@@ -333,13 +353,11 @@
* http://henningkarlsen.com/electronics/library.php?id=52
*
* \param x Horizontal offset of the first pixel of the image.
- * \param y Vertical offset of the first pixel of the image
- * \param sx Width of the image.
- * \param sy Height of the image.
- * \param imgPixelData Image pixel array.
+ * \param y Vertical offset of the first pixel of the image.
+ * \param img Image data pointer.
* \param scale A value of 1 will produce an image with its original size, while a different value will scale the image.
*/
- virtual void DrawBitmap( unsigned short x, unsigned short y, unsigned short sx, unsigned short sy, const unsigned short* imgPixelData, unsigned char scale = 1 );
+ virtual void DrawBitmap( unsigned short x, unsigned short y, const bitmap_t* img, unsigned char scale = 1 );
/** Draw an image on the screen.
*
@@ -350,15 +368,13 @@
* http://henningkarlsen.com/electronics/library.php?id=52
*
* \param x Horizontal offset of the first pixel of the image.
- * \param y Vertical offset of the first pixel of the image
- * \param sx Width of the image.
- * \param sy Height of the image.
- * \param imgPixelData Image pixel array.
+ * \param y Vertical offset of the first pixel of the image.
+ * \param img Image data pointer.
* \param deg Angle to rotate the image before painting on screen, in degrees.
* \param rox
* \param roy
*/
- virtual void DrawBitmap( unsigned short x, unsigned short y, unsigned short sx, unsigned short sy, const unsigned short* imgPixelData, unsigned short deg, unsigned short rox, unsigned short roy );
+ virtual void DrawBitmap( unsigned short x, unsigned short y, const bitmap_t* img, unsigned short deg, unsigned short rox, unsigned short roy );
protected:
/** Creates an instance of the class.
@@ -434,10 +450,10 @@
/** Sets the color of the pixel at the address pointer of the controller.
*
* This function is to be provided by each implementation separately in
- * order to account for different color depth used by the controller.
+ * order to account for different color depths used by the controller.
* \param color The color of the pixel.
*/
- virtual void SetPixelColor( unsigned short color ) = 0;
+ virtual void SetPixelColor( unsigned int color ) = 0;
/** Draws a horizontal line.
*
@@ -448,7 +464,7 @@
* \param y Y coordinate of the starting point of the line.
* \param len Length of the line.
* \param color The color to use to draw the line. By default the global foreground color is used ( -2 ),
- * -1 switches to the default background color, or any other RGB-565 color can be used.
+ * -1 switches to the default background color, or any custom color can be used.
*/
virtual void DrawHLine( unsigned short x, unsigned short y, unsigned short len, int color = -2 );
@@ -461,7 +477,7 @@
* \param y Y coordinate of the starting point of the line.
* \param len Height of the line.
* \param color The color to use to draw the line. By default the global foreground color is used ( -2 ),
- * -1 switches to the default background color, or any other RGB-565 color can be used.
+ * -1 switches to the default background color, or any custom color can be used.
*/
virtual void DrawVLine( unsigned short x, unsigned short y, unsigned short len, int color = -2 );
@@ -471,9 +487,9 @@
* \param x X coordinate of the character position.
* \param y Y coordinate of the character position.
* \param fgColor Foreground color for drawing. By default the global foreground color is used ( -2 ),
- * -1 switches to the default background color, or any other RGB-565 color can be used.
+ * -1 switches to the default background color, or any custom color can be used.
* \param bgColor Background color for drawing. By default the global background color is used ( -1 ),
- * -2 switches to the default foreground color, or any other RGB-565 color can be used.
+ * -2 switches to the default foreground color, or any custom color can be used.
*/
virtual void PrintChar( char c, unsigned short x, unsigned short y, int fgColor = -2, int bgColor = -1 );
@@ -484,9 +500,9 @@
* \param y Y coordinate of the character position.
* \param pos Position of the character in the string from which it originates (used to rotate a whole string).
* \param fgColor Foreground color for drawing. By default the global foreground color is used ( -2 ),
- * -1 switches to the default background color, or any other RGB-565 color can be used.
+ * -1 switches to the default background color, or any custom color can be used.
* \param bgColor Background color for drawing. By default the global background color is used ( -1 ),
- * -2 switches to the default foreground color, or any other RGB-565 color can be used.
+ * -2 switches to the default foreground color, or any custom color can be used.
* \param deg The angle at which to rotate.
*/
virtual void RotateChar( char c, unsigned short x, unsigned short y, int pos, int fgColor = -2, int bgColor = -1, unsigned short deg = 0 );
@@ -495,7 +511,8 @@
unsigned short _disp_width, _disp_height;
DigitalOut _lcd_pin_cs, _lcd_pin_rs, _lcd_pin_reset;
orientation_t _orientation;
- unsigned short _foreground, _background;
+ colordepth_t _colorDepth;
+ unsigned int _foreground, _background;
font_metrics_t _font;
};
