Forked from TFTLCD_8bit by Thiha Electronics
Dependents: GR-PEACH_TFTLCD_8bit
Fork of TFTLCD_8bit 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; };