Add new license to files missing it

Add new license to files missing it.
Some headers corrupted in license change were fixed.
A couple of readme updates
ugfx_release_2.6
Andrew Hannam 2012-08-04 00:49:48 +10:00
parent 57e1fad166
commit 1888e57b62
8 changed files with 1777 additions and 1700 deletions

View File

@ -1,377 +1,381 @@
/* /*
ChibiOS/RT - Copyright (C) 2012 ChibiOS/RT - Copyright (C) 2012
Joel Bodenmann aka Tectu <joel@unormal.org> Joel Bodenmann aka Tectu <joel@unormal.org>
This file is part of ChibiOS-LCD-Driver. This file is part of ChibiOS-LCD-Driver.
ChibiOS-LCD-Driver is free software; you can redistribute it and/or modify ChibiOS-LCD-Driver is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or the Free Software Foundation; either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
ChibiOS-LCD-Driver is distributed in the hope that it will be useful, ChibiOS-LCD-Driver is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef _GDISP_H
/** #define _GDISP_H
* @brief Some basic colors
*/ #if HAL_USE_GDISP || defined(__DOXYGEN__)
#define White HTML2COLOR(0xFFFFFF)
#define Black HTML2COLOR(0x000000) /**
#define Gray HTML2COLOR(0x808080) * @brief Some basic colors
#define Grey Gray */
#define Blue HTML2COLOR(0x0000FF) #define White HTML2COLOR(0xFFFFFF)
#define Red HTML2COLOR(0xFF0000) #define Black HTML2COLOR(0x000000)
#define Fuchsia HTML2COLOR(0xFF00FF) #define Gray HTML2COLOR(0x808080)
#define Magenta Fuchsia #define Grey Gray
#define Green HTML2COLOR(0x008000) #define Blue HTML2COLOR(0x0000FF)
#define Yellow HTML2COLOR(0xFFFF00) #define Red HTML2COLOR(0xFF0000)
#define Aqua HTML2COLOR(0x00FFFF) #define Fuchsia HTML2COLOR(0xFF00FF)
#define Cyan Aqua #define Magenta Fuchsia
#define Lime HTML2COLOR(0x00FF00) #define Green HTML2COLOR(0x008000)
#define Maroon HTML2COLOR(0x800000) #define Yellow HTML2COLOR(0xFFFF00)
#define Navy HTML2COLOR(0x000080) #define Aqua HTML2COLOR(0x00FFFF)
#define Olive HTML2COLOR(0x808000) #define Cyan Aqua
#define Purple HTML2COLOR(0x800080) #define Lime HTML2COLOR(0x00FF00)
#define Silver HTML2COLOR(0xC0C0C0) #define Maroon HTML2COLOR(0x800000)
#define Teal HTML2COLOR(0x008080) #define Navy HTML2COLOR(0x000080)
#define Orange HTML2COLOR(0xFFA500) #define Olive HTML2COLOR(0x808000)
#define Pink HTML2COLOR(0xFFC0CB) #define Purple HTML2COLOR(0x800080)
#define SkyBlue HTML2COLOR(0x87CEEB) #define Silver HTML2COLOR(0xC0C0C0)
#define Teal HTML2COLOR(0x008080)
/*===========================================================================*/ #define Orange HTML2COLOR(0xFFA500)
/* Driver pre-compile time settings. */ #define Pink HTML2COLOR(0xFFC0CB)
/*===========================================================================*/ #define SkyBlue HTML2COLOR(0x87CEEB)
/** /*===========================================================================*/
* @name GDISP more complex functionality to be compiled /* Driver pre-compile time settings. */
* @{ /*===========================================================================*/
*/
/** /**
* @brief Should all operations be clipped to the screen and colors validated. * @name GDISP more complex functionality to be compiled
* @details Defaults to TRUE. * @{
* @note If this is FALSE, any operations that extend beyond the */
* edge of the screen will have undefined results. Any /**
* out-of-range colors will produce undefined results. * @brief Should all operations be clipped to the screen and colors validated.
* @note If defined then all low level and high level driver routines * @details Defaults to TRUE.
* must check the validity of inputs and do something sensible * @note If this is FALSE, any operations that extend beyond the
* if they are out of range. It doesn't have to be efficient, * edge of the screen will have undefined results. Any
* just valid. * out-of-range colors will produce undefined results.
*/ * @note If defined then all low level and high level driver routines
#ifndef GDISP_NEED_VALIDATION * must check the validity of inputs and do something sensible
#define GDISP_NEED_VALIDATION TRUE * if they are out of range. It doesn't have to be efficient,
#endif * just valid.
*/
/** #ifndef GDISP_NEED_VALIDATION
* @brief Are circle functions needed. #define GDISP_NEED_VALIDATION TRUE
* @details Defaults to TRUE #endif
*/
#ifndef GDISP_NEED_CIRCLE /**
#define GDISP_NEED_CIRCLE TRUE * @brief Are circle functions needed.
#endif * @details Defaults to TRUE
*/
/** #ifndef GDISP_NEED_CIRCLE
* @brief Are ellipse functions needed. #define GDISP_NEED_CIRCLE TRUE
* @details Defaults to TRUE #endif
*/
#ifndef GDISP_NEED_ELLIPSE /**
#define GDISP_NEED_ELLIPSE TRUE * @brief Are ellipse functions needed.
#endif * @details Defaults to TRUE
*/
/** #ifndef GDISP_NEED_ELLIPSE
* @brief Are text functions needed. #define GDISP_NEED_ELLIPSE TRUE
* @details Defaults to TRUE #endif
*/
#ifndef GDISP_NEED_TEXT /**
#define GDISP_NEED_TEXT TRUE * @brief Are text functions needed.
#endif * @details Defaults to TRUE
*/
/** #ifndef GDISP_NEED_TEXT
* @brief Is scrolling needed. #define GDISP_NEED_TEXT TRUE
* @details Defaults to FALSE #endif
*/
#ifndef GDISP_NEED_SCROLL /**
#define GDISP_NEED_SCROLL FALSE * @brief Is scrolling needed.
#endif * @details Defaults to FALSE
*/
/** #ifndef GDISP_NEED_SCROLL
* @brief Is the capability to read pixels back needed. #define GDISP_NEED_SCROLL FALSE
* @details Defaults to FALSE #endif
*/
#ifndef GDISP_NEED_PIXELREAD /**
#define GDISP_NEED_PIXELREAD FALSE * @brief Is the capability to read pixels back needed.
#endif * @details Defaults to FALSE
*/
/** #ifndef GDISP_NEED_PIXELREAD
* @brief Do the drawing functions need to be thread-safe. #define GDISP_NEED_PIXELREAD FALSE
* @details Defaults to FALSE #endif
* @note Turning this on adds two context switches per transaction
* so it can significantly slow graphics drawing. /**
*/ * @brief Do the drawing functions need to be thread-safe.
#ifndef GDISP_NEED_MULTITHREAD * @details Defaults to FALSE
#define GDISP_NEED_MULTITHREAD FALSE * @note Turning this on adds two context switches per transaction
#endif * so it can significantly slow graphics drawing.
/** @} */ */
#ifndef GDISP_NEED_MULTITHREAD
/* Include the low level driver configuration information */ #define GDISP_NEED_MULTITHREAD FALSE
#include "gdisp_lld_config.h" #endif
/** @} */
/*===========================================================================*/
/* Derived constants and error checks. */ /* Include the low level driver configuration information */
/*===========================================================================*/ #include "gdisp_lld_config.h"
#if GDISP_NEED_SCROLL && !GDISP_HARDWARE_SCROLL /*===========================================================================*/
#error "GDISP: Hardware scrolling is wanted but not supported." /* Derived constants and error checks. */
#endif /*===========================================================================*/
#if GDISP_NEED_PIXELREAD && !GDISP_HARDWARE_PIXELREAD #if GDISP_NEED_SCROLL && !GDISP_HARDWARE_SCROLL
#error "GDISP: Pixel read-back is wanted but not supported." #error "GDISP: Hardware scrolling is wanted but not supported."
#endif #endif
/*===========================================================================*/ #if GDISP_NEED_PIXELREAD && !GDISP_HARDWARE_PIXELREAD
/* Driver data structures and types. */ #error "GDISP: Pixel read-back is wanted but not supported."
/*===========================================================================*/ #endif
/* Define the basic Macro's for the various pixel formats */ /*===========================================================================*/
/* Driver data structures and types. */
#if defined(GDISP_PIXELFORMAT_RGB565) || defined(__DOXYGEN__) /*===========================================================================*/
/**
* @brief The color of a pixel. /* Define the basic Macro's for the various pixel formats */
*/
typedef uint16_t color_t; #if defined(GDISP_PIXELFORMAT_RGB565) || defined(__DOXYGEN__)
/** /**
* @brief Convert a number (of any type) to a color_t. * @brief The color of a pixel.
* @details Masks any invalid bits in the color */
*/ typedef uint16_t color_t;
#define COLOR(c) ((color_t)(c)) /**
/** * @brief Convert a number (of any type) to a color_t.
* @brief Does the color_t type contain invalid bits that need masking. * @details Masks any invalid bits in the color
*/ */
#define MASKCOLOR FALSE #define COLOR(c) ((color_t)(c))
/** /**
* @brief Convert red, green, blue (each 0 to 255) into a color value. * @brief Does the color_t type contain invalid bits that need masking.
*/ */
#define RGB2COLOR(r,g,b) ((color_t)((((r) & 0xF8)<<8) | (((g) & 0xFC)<<3) | (((b) & 0xF8)>>3))) #define MASKCOLOR FALSE
/** /**
* @brief Convert a 6 digit HTML code (hex) into a color value. * @brief Convert red, green, blue (each 0 to 255) into a color value.
*/ */
#define HTML2COLOR(h) ((color_t)((((h) & 0xF80000)>>8) | (((h) & 0x00FC00)>>5) | (((h) & 0x0000F8)>>3))) #define RGB2COLOR(r,g,b) ((color_t)((((r) & 0xF8)<<8) | (((g) & 0xFC)<<3) | (((b) & 0xF8)>>3)))
/** /**
* @brief Extract the red component (0 to 255) of a color value. * @brief Convert a 6 digit HTML code (hex) into a color value.
*/ */
#define RED_OF(c) (((c) & 0xF800)>>8) #define HTML2COLOR(h) ((color_t)((((h) & 0xF80000)>>8) | (((h) & 0x00FC00)>>5) | (((h) & 0x0000F8)>>3)))
/** /**
* @brief Extract the green component (0 to 255) of a color value. * @brief Extract the red component (0 to 255) of a color value.
*/ */
#define GREEN_OF(c) (((c)&0x007E)>>3) #define RED_OF(c) (((c) & 0xF800)>>8)
/** /**
* @brief Extract the blue component (0 to 255) of a color value. * @brief Extract the green component (0 to 255) of a color value.
*/ */
#define BLUE_OF(c) (((c)&0x001F)<<3) #define GREEN_OF(c) (((c)&0x007E)>>3)
/**
#elif defined(GDISP_PIXELFORMAT_RGB888) * @brief Extract the blue component (0 to 255) of a color value.
typedef uint32_t color_t; */
#define COLOR(c) ((color_t)(((c) & 0xFFFFFF))) #define BLUE_OF(c) (((c)&0x001F)<<3)
#define MASKCOLOR TRUE
#define RGB2COLOR(r,g,b) ((color_t)((((r) & 0xFF)<<16) | (((g) & 0xFF) << 8) | ((b) & 0xFF))) #elif defined(GDISP_PIXELFORMAT_RGB888)
#define HTML2COLOR(h) ((color_t)(h)) typedef uint32_t color_t;
#define RED_OF(c) (((c) & 0xFF0000)>>16) #define COLOR(c) ((color_t)(((c) & 0xFFFFFF)))
#define GREEN_OF(c) (((c)&0x00FF00)>>8) #define MASKCOLOR TRUE
#define BLUE_OF(c) ((c)&0x0000FF) #define RGB2COLOR(r,g,b) ((color_t)((((r) & 0xFF)<<16) | (((g) & 0xFF) << 8) | ((b) & 0xFF)))
#define HTML2COLOR(h) ((color_t)(h))
#elif defined(GDISP_PIXELFORMAT_RGB444) #define RED_OF(c) (((c) & 0xFF0000)>>16)
typedef uint16_t color_t; #define GREEN_OF(c) (((c)&0x00FF00)>>8)
#define COLOR(c) ((color_t)(((c) & 0x0FFF))) #define BLUE_OF(c) ((c)&0x0000FF)
#define MASKCOLOR TRUE
#define RGB2COLOR(r,g,b) ((color_t)((((r) & 0xF0)<<4) | ((g) & 0xF0) | (((b) & 0xF0)>>4))) #elif defined(GDISP_PIXELFORMAT_RGB444)
#define HTML2COLOR(h) ((color_t)((((h) & 0xF00000)>>12) | (((h) & 0x00F000)>>8) | (((h) & 0x0000F0)>>4))) typedef uint16_t color_t;
#define RED_OF(c) (((c) & 0x0F00)>>4) #define COLOR(c) ((color_t)(((c) & 0x0FFF)))
#define GREEN_OF(c) ((c)&0x00F0) #define MASKCOLOR TRUE
#define BLUE_OF(c) (((c)&0x000F)<<4) #define RGB2COLOR(r,g,b) ((color_t)((((r) & 0xF0)<<4) | ((g) & 0xF0) | (((b) & 0xF0)>>4)))
#define HTML2COLOR(h) ((color_t)((((h) & 0xF00000)>>12) | (((h) & 0x00F000)>>8) | (((h) & 0x0000F0)>>4)))
#elif defined(GDISP_PIXELFORMAT_RGB332) #define RED_OF(c) (((c) & 0x0F00)>>4)
typedef uint8_t color_t; #define GREEN_OF(c) ((c)&0x00F0)
#define COLOR(c) ((color_t)(c)) #define BLUE_OF(c) (((c)&0x000F)<<4)
#define MASKCOLOR FALSE
#define RGB2COLOR(r,g,b) ((color_t)(((r) & 0xE0) | (((g) & 0xE0)>>3) | (((b) & 0xC0)>>6))) #elif defined(GDISP_PIXELFORMAT_RGB332)
#define HTML2COLOR(h) ((color_t)((((h) & 0xE00000)>>16) | (((h) & 0x00E000)>>11) | (((h) & 0x0000C0)>>6))) typedef uint8_t color_t;
#define RED_OF(c) ((c) & 0xE0) #define COLOR(c) ((color_t)(c))
#define GREEN_OF(c) (((c)&0x1C)<<3) #define MASKCOLOR FALSE
#define BLUE_OF(c) (((c)&0x03)<<6) #define RGB2COLOR(r,g,b) ((color_t)(((r) & 0xE0) | (((g) & 0xE0)>>3) | (((b) & 0xC0)>>6)))
#define HTML2COLOR(h) ((color_t)((((h) & 0xE00000)>>16) | (((h) & 0x00E000)>>11) | (((h) & 0x0000C0)>>6)))
#elif defined(GDISP_PIXELFORMAT_RGB666) #define RED_OF(c) ((c) & 0xE0)
typedef uint32_t color_t; #define GREEN_OF(c) (((c)&0x1C)<<3)
#define COLOR(c) ((color_t)(((c) & 0x03FFFF))) #define BLUE_OF(c) (((c)&0x03)<<6)
#define MASKCOLOR TRUE
#define RGB2COLOR(r,g,b) ((color_t)((((r) & 0xFC)<<10) | (((g) & 0xFC)<<4) | (((b) & 0xFC)>>2))) #elif defined(GDISP_PIXELFORMAT_RGB666)
#define HTML2COLOR(h) ((color_t)((((h) & 0xFC0000)>>6) | (((h) & 0x00FC00)>>4) | (((h) & 0x0000FC)>>2))) typedef uint32_t color_t;
#define RED_OF(c) (((c) & 0x03F000)>>12) #define COLOR(c) ((color_t)(((c) & 0x03FFFF)))
#define GREEN_OF(c) (((c)&0x00FC00)>>8) #define MASKCOLOR TRUE
#define BLUE_OF(c) (((c)&0x00003F)<<2) #define RGB2COLOR(r,g,b) ((color_t)((((r) & 0xFC)<<10) | (((g) & 0xFC)<<4) | (((b) & 0xFC)>>2)))
#define HTML2COLOR(h) ((color_t)((((h) & 0xFC0000)>>6) | (((h) & 0x00FC00)>>4) | (((h) & 0x0000FC)>>2)))
#elif !defined(GDISP_PIXELFORMAT_CUSTOM) #define RED_OF(c) (((c) & 0x03F000)>>12)
#error "GDISP: No supported pixel format has been specified." #define GREEN_OF(c) (((c)&0x00FC00)>>8)
#endif #define BLUE_OF(c) (((c)&0x00003F)<<2)
/* Verify information for packed pixels and define a non-packed pixel macro */ #elif !defined(GDISP_PIXELFORMAT_CUSTOM)
#if !GDISP_PACKED_PIXELS #error "GDISP: No supported pixel format has been specified."
#define gdispPackPixels(buf,cx,x,y,c) { ((color_t *)(buf))[(y)*(cx)+(x)] = (c); } #endif
#elif !GDISP_HARDWARE_BITFILLS
#error "GDISP: packed pixel formats are only supported for hardware accelerated drivers." /* Verify information for packed pixels and define a non-packed pixel macro */
#elif !defined(GDISP_PIXELFORMAT_RGB888) \ #if !GDISP_PACKED_PIXELS
&& !defined(GDISP_PIXELFORMAT_RGB444) \ #define gdispPackPixels(buf,cx,x,y,c) { ((color_t *)(buf))[(y)*(cx)+(x)] = (c); }
&& !defined(GDISP_PIXELFORMAT_RGB666) \ #elif !GDISP_HARDWARE_BITFILLS
&& !defined(GDISP_PIXELFORMAT_CUSTOM) #error "GDISP: packed pixel formats are only supported for hardware accelerated drivers."
#error "GDISP: A packed pixel format has been specified for an unsupported pixel format." #elif !defined(GDISP_PIXELFORMAT_RGB888) \
#endif && !defined(GDISP_PIXELFORMAT_RGB444) \
&& !defined(GDISP_PIXELFORMAT_RGB666) \
/** && !defined(GDISP_PIXELFORMAT_CUSTOM)
* @brief The type for a coordinate or length on the screen. #error "GDISP: A packed pixel format has been specified for an unsupported pixel format."
*/ #endif
typedef uint16_t coord_t;
/** /**
* @brief The type of a pixel. * @brief The type for a coordinate or length on the screen.
*/ */
typedef color_t pixel_t; typedef uint16_t coord_t;
/** /**
* @brief The type of a font. * @brief The type of a pixel.
*/ */
typedef const struct font *font_t; typedef color_t pixel_t;
/** /**
* @brief Type of a structure representing a GDISP driver. * @brief The type of a font.
*/ */
typedef struct GDISPDriver GDISPDriver; typedef const struct font *font_t;
/** /**
* @brief Type for the screen orientation. * @brief Type of a structure representing a GDISP driver.
*/ */
typedef enum orientation {portrait, landscape, portraitInv, landscapeInv} gdisp_orientation_t; typedef struct GDISPDriver GDISPDriver;
/** /**
* @brief Type for the available power modes for the screen. * @brief Type for the screen orientation.
*/ */
typedef enum powermode {powerOff, powerSleep, powerOn} gdisp_powermode_t; typedef enum orientation {portrait, landscape, portraitInv, landscapeInv} gdisp_orientation_t;
/** /**
* @brief Type for the text justification. * @brief Type for the available power modes for the screen.
*/ */
typedef enum justify {justifyLeft, justifyCenter, justifyRight} justify_t; typedef enum powermode {powerOff, powerSleep, powerOn} gdisp_powermode_t;
/** /**
* @brief Type for the font metric. * @brief Type for the text justification.
*/ */
typedef enum fontmetric {fontHeight, fontDescendersHeight, fontLineSpacing, fontCharPadding, fontMinWidth, fontMaxWidth} fontmetric_t; typedef enum justify {justifyLeft, justifyCenter, justifyRight} justify_t;
/**
* @brief Type for the font metric.
/*===========================================================================*/ */
/* External declarations. */ typedef enum fontmetric {fontHeight, fontDescendersHeight, fontLineSpacing, fontCharPadding, fontMinWidth, fontMaxWidth} fontmetric_t;
/*===========================================================================*/
/* Include the low level driver information */ /*===========================================================================*/
#include "gdisp_lld.h" /* External declarations. */
/*===========================================================================*/
#if GDISP_NEED_TEXT || defined(__DOXYGEN__)
/** /* Include the low level driver information */
* @brief Predefined fonts. #include "gdisp_lld.h"
*/
extern const struct font fontSmall; #if GDISP_NEED_TEXT || defined(__DOXYGEN__)
extern const struct font fontLarger; /**
extern const struct font fontUI1; * @brief Predefined fonts.
extern const struct font fontUI2; */
extern const struct font fontLargeNumbers; extern const struct font fontSmall;
#endif extern const struct font fontLarger;
extern const struct font fontUI1;
#ifdef __cplusplus extern const struct font fontUI2;
extern "C" { extern const struct font fontLargeNumbers;
#endif #endif
#if GDISP_NEED_MULTITHREAD #ifdef __cplusplus
extern "C" {
/* Base Functions */ #endif
void gdispInit(GDISPDriver *gdisp);
void gdispSetPowerMode(gdisp_powermode_t powerMode); #if GDISP_NEED_MULTITHREAD
void gdispSetOrientation(gdisp_orientation_t newOrientation);
/* Base Functions */
/* Drawing Functions */ void gdispInit(GDISPDriver *gdisp);
void gdispClear(color_t color); void gdispSetPowerMode(gdisp_powermode_t powerMode);
void gdispDrawPixel(coord_t x, coord_t y, color_t color); void gdispSetOrientation(gdisp_orientation_t newOrientation);
void gdispDrawLine(coord_t x0, coord_t y0, coord_t x1, coord_t y1, color_t color);
void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color); /* Drawing Functions */
void gdispFillArea(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color); void gdispClear(color_t color);
void gdispBlitArea(coord_t x, coord_t y, coord_t cx, coord_t cy, pixel_t *buffer); void gdispDrawPixel(coord_t x, coord_t y, color_t color);
void gdispDrawLine(coord_t x0, coord_t y0, coord_t x1, coord_t y1, color_t color);
/* Circle Functions */ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color);
#if GDISP_NEED_CIRCLE void gdispFillArea(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color);
void gdispDrawCircle(coord_t x, coord_t y, coord_t radius, color_t color); void gdispBlitArea(coord_t x, coord_t y, coord_t cx, coord_t cy, const pixel_t *buffer);
void gdispFillCircle(coord_t x, coord_t y, coord_t radius, color_t color);
#endif /* Circle Functions */
#if GDISP_NEED_CIRCLE
/* Ellipse Functions */ void gdispDrawCircle(coord_t x, coord_t y, coord_t radius, color_t color);
#if GDISP_NEED_ELLIPSE void gdispFillCircle(coord_t x, coord_t y, coord_t radius, color_t color);
void gdispDrawEllipse(coord_t x, coord_t y, coord_t a, coord_t b, color_t color); #endif
void gdispFillEllipse(coord_t x, coord_t y, coord_t a, coord_t b, color_t color);
#endif /* Ellipse Functions */
#if GDISP_NEED_ELLIPSE
/* Basic Text Rendering Functions */ void gdispDrawEllipse(coord_t x, coord_t y, coord_t a, coord_t b, color_t color);
#if GDISP_NEED_TEXT void gdispFillEllipse(coord_t x, coord_t y, coord_t a, coord_t b, color_t color);
void gdispDrawChar(coord_t x, coord_t y, char c, font_t font, color_t color); #endif
void gdispFillChar(coord_t x, coord_t y, char c, font_t font, color_t color, color_t bgcolor);
#endif /* Basic Text Rendering Functions */
#if GDISP_NEED_TEXT
/* Read a pixel Function */ void gdispDrawChar(coord_t x, coord_t y, char c, font_t font, color_t color);
#if GDISP_NEED_PIXELREAD void gdispFillChar(coord_t x, coord_t y, char c, font_t font, color_t color, color_t bgcolor);
color_t gdispGetPixelColor(coord_t x, coord_t y); #endif
#endif
/* Read a pixel Function */
/* Scrolling Function - clears the area scrolled out */ #if GDISP_NEED_PIXELREAD
#if GDISP_NEED_SCROLL color_t gdispGetPixelColor(coord_t x, coord_t y);
void gdispVerticalScroll(coord_t x, coord_t y, coord_t cx, coord_t cy, int lines, color_t bgcolor); #endif
#endif
/* Scrolling Function - clears the area scrolled out */
#else #if GDISP_NEED_SCROLL
void gdispVerticalScroll(coord_t x, coord_t y, coord_t cx, coord_t cy, int lines, color_t bgcolor);
/* The same as above but use the low level driver directly if no multi-thread support is needed */ #endif
#define gdispInit(gdisp) gdisp_lld_init()
#define gdispSetPowerMode(powerMode) gdisp_lld_setpowermode(powerMode) #else
#define gdispSetOrientation(newOrientation) gdisp_lld_setorientation(newOrientation)
#define gdispClear(color) gdisp_lld_clear(color) /* The same as above but use the low level driver directly if no multi-thread support is needed */
#define gdispDrawPixel(x, y, color) gdisp_lld_drawpixel(x, y, color) #define gdispInit(gdisp) gdisp_lld_init()
#define gdispDrawLine(x0, y0, x1, y1, color) gdisp_lld_drawline(x0, y0, x1, y1, color) #define gdispSetPowerMode(powerMode) gdisp_lld_setpowermode(powerMode)
#define gdispDrawBox(x, y, cx, cy, color) gdisp_lld_drawbox(x, y, cx, cy, color) #define gdispSetOrientation(newOrientation) gdisp_lld_setorientation(newOrientation)
#define gdispFillArea(x, y, cx, cy, color) gdisp_lld_fillarea(x, y, cx, cy, color) #define gdispClear(color) gdisp_lld_clear(color)
#define gdispBlitArea(x, y, cx, cy, buffer) gdisp_lld_blitarea(x, y, cx, cy, buffer) #define gdispDrawPixel(x, y, color) gdisp_lld_drawpixel(x, y, color)
#define gdispDrawCircle(x, y, radius, color) gdisp_lld_drawcircle(x, y, radius, color) #define gdispDrawLine(x0, y0, x1, y1, color) gdisp_lld_drawline(x0, y0, x1, y1, color)
#define gdispFillCircle(x, y, radius, color) gdisp_lld_fillcircle(x, y, radius, color) #define gdispDrawBox(x, y, cx, cy, color) gdisp_lld_drawbox(x, y, cx, cy, color)
#define gdispDrawEllipse(x, y, a, b, color) gdisp_lld_drawellipse(x, y, a, b, color) #define gdispFillArea(x, y, cx, cy, color) gdisp_lld_fillarea(x, y, cx, cy, color)
#define gdispFillEllipse(x, y, a, b, color) gdisp_lld_fillellipse(x, y, a, b, color) #define gdispBlitArea(x, y, cx, cy, buffer) gdisp_lld_blitarea(x, y, cx, cy, buffer)
#define gdispDrawChar(x, y, c, font, color) gdisp_lld_drawchar(x, y, c, font, color) #define gdispDrawCircle(x, y, radius, color) gdisp_lld_drawcircle(x, y, radius, color)
#define gdispFillChar(x, y, c, font, color, bgcolor) gdisp_lld_fillchar(x, y, c, font, color, bgcolor) #define gdispFillCircle(x, y, radius, color) gdisp_lld_fillcircle(x, y, radius, color)
#define gdispGetPixelColor(x, y) gdisp_lld_getpixelcolor(x, y) #define gdispDrawEllipse(x, y, a, b, color) gdisp_lld_drawellipse(x, y, a, b, color)
#define gdispVerticalScroll(x, y, cx, cy, lines, bgcolor) gdisp_lld_verticalscroll(x, y, cx, cy, lines, bgcolor) #define gdispFillEllipse(x, y, a, b, color) gdisp_lld_fillellipse(x, y, a, b, color)
#define gdispDrawChar(x, y, c, font, color) gdisp_lld_drawchar(x, y, c, font, color)
#endif #define gdispFillChar(x, y, c, font, color, bgcolor) gdisp_lld_fillchar(x, y, c, font, color, bgcolor)
#define gdispGetPixelColor(x, y) gdisp_lld_getpixelcolor(x, y)
/* Extra Text Functions */ #define gdispVerticalScroll(x, y, cx, cy, lines, bgcolor) gdisp_lld_verticalscroll(x, y, cx, cy, lines, bgcolor)
#if GDISP_NEED_TEXT
void gdispDrawString(coord_t x, coord_t y, const char *str, font_t font, color_t color); #endif
void gdispFillString(coord_t x, coord_t y, const char *str, font_t font, color_t color, color_t bgcolor);
void gdispFillStringBox(coord_t x, coord_t y, coord_t cx, coord_t cy, const char* str, font_t font, color_t color, color_t bgColor, justify_t justify); /* Extra Text Functions */
coord_t gdispGetFontMetric(font_t font, fontmetric_t metric); #if GDISP_NEED_TEXT
coord_t gdispGetCharWidth(char c, font_t font); void gdispDrawString(coord_t x, coord_t y, const char *str, font_t font, color_t color);
coord_t gdispGetStringWidth(const char* str, font_t font); void gdispFillString(coord_t x, coord_t y, const char *str, font_t font, color_t color, color_t bgcolor);
#endif void gdispFillStringBox(coord_t x, coord_t y, coord_t cx, coord_t cy, const char* str, font_t font, color_t color, color_t bgColor, justify_t justify);
coord_t gdispGetFontMetric(font_t font, fontmetric_t metric);
/* Support routine for packed pixel formats */ coord_t gdispGetCharWidth(char c, font_t font);
#ifndef gdispPackPixels coord_t gdispGetStringWidth(const char* str, font_t font);
void gdispPackPixels(pixel_t *buf, coord_t cx, coord_t x, coord_t y, color_t color); #endif
#endif
/* Support routine for packed pixel formats */
#ifdef __cplusplus #ifndef gdispPackPixels
} void gdispPackPixels(const pixel_t *buf, coord_t cx, coord_t x, coord_t y, color_t color);
#endif #endif
#endif /* HAL_USE_GDISP */ #ifdef __cplusplus
}
#endif /* _GDISP_H */ #endif
/** @} */
#endif /* HAL_USE_GDISP */
#endif /* _GDISP_H */
/** @} */

View File

@ -1,39 +1,22 @@
/* /*
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010, ChibiOS/RT - Copyright (C) 2012
2011,2012 Giovanni Di Sirio. Joel Bodenmann aka Tectu <joel@unormal.org>
This file is part of ChibiOS/RT. This file is part of ChibiOS-LCD-Driver.
ChibiOS/RT is free software; you can redistribute it and/or modify ChibiOS-LCD-Driver is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or the Free Software Foundation; either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
ChibiOS/RT is distributed in the hope that it will be useful, ChibiOS-LCD-Driver is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
---
A special exception to the GPL can be applied should you wish to distribute
a combined work that includes ChibiOS/RT, without being obliged to provide
the source code for any proprietary components. See the file exception.txt
for full details of how and when the exception can be applied.
*/ */
/*
Concepts and parts of this file have been contributed by:
Joel Bodenmann aka Tectu -> Maintainer
Andrew Hannam aka inmarket -> Framework
Badger -> console implementation and FSMC
Abhishek -> font rendering
Ben William -> fastMath and lcdDrawEllipse()
Dongxu Li aka dxli -> lcdDrawEllipse() filled option
*/
/** /**
* @file gdisp_fonts.h * @file gdisp_fonts.h
* @brief GDISP internal font definitions. * @brief GDISP internal font definitions.
@ -47,6 +30,8 @@
#ifndef _GDISP_FONTS_H #ifndef _GDISP_FONTS_H
#define _GDISP_FONTS_H #define _GDISP_FONTS_H
/* Don't test against HAL_USE_GDISP as we may want to use this in other non-GDISP utilities. */
/** /**
* @brief The maximum height of a font. * @brief The maximum height of a font.
* @details Either 16 or 32. Defaults to 16 * @details Either 16 or 32. Defaults to 16
@ -76,29 +61,26 @@
* 2. An array of column data offsets (relative to the font structure) * 2. An array of column data offsets (relative to the font structure)
* 3. Each characters array of column data (fontcolumn_t) * 3. Each characters array of column data (fontcolumn_t)
* Each sub-structure must be padded to a multiple of 8 bytes * Each sub-structure must be padded to a multiple of 8 bytes
* to allow the tables to work accross many different compilers. * to allow the tables to work across many different compilers.
*/ */
struct font { struct font {
uint8_t height; uint8_t height;
uint8_t charPadding; uint8_t charPadding;
uint8_t lineSpacing; uint8_t lineSpacing;
uint8_t descenderHeight; uint8_t descenderHeight;
uint8_t minWidth; uint8_t minWidth;
uint8_t maxWidth; uint8_t maxWidth;
char minChar; char minChar;
char maxChar; char maxChar;
uint16_t offsetTableOffset; const fontcolumn_t *(* const offsetTable);
uint16_t unused1; /* ensure next field is padded to 8 byte boundary */ const uint8_t * const widthTable;
uint8_t widthTable[];
}; };
/** /**
* @brief Macro's to get to the complex parts of the font structure. * @brief Macro's to get to the complex parts of the font structure.
*/ */
#define _getFontPart(f,o,t) ((t)(&((const uint8_t *)(f))[(o)]))
#define _getCharWidth(f,c) (((c) < (f)->minChar || (c) > (f)->maxChar) ? 0 : (f)->widthTable[c - (f)->minChar]) #define _getCharWidth(f,c) (((c) < (f)->minChar || (c) > (f)->maxChar) ? 0 : (f)->widthTable[c - (f)->minChar])
#define _getCharOffset(f,c) (_getFontPart((f), (f)->offsetTableOffset, const uint16_t *)[c - (f)->minChar]) #define _getCharData(f,c) (f)->offsetTable[c - (f)->minChar]
#define _getCharData(f,c) _getFontPart((f), _getCharOffset((f),(c)), const fontcolumn_t *)
#endif /* _GDISP_FONTS_H */ #endif /* _GDISP_FONTS_H */
/** @} */ /** @} */

File diff suppressed because it is too large Load Diff

View File

@ -28,6 +28,10 @@
we call a real low level driver routine and if validation is we call a real low level driver routine and if validation is
required - it will do it. required - it will do it.
*/ */
#ifndef _GDISP_LLD_EMULATION_C_H
#define _GDISP_LLD_EMULATION_C_H
#if HAL_USE_GDISP || defined(__DOXYGEN__)
#if !GDISP_HARDWARE_POWERCONTROL #if !GDISP_HARDWARE_POWERCONTROL
void gdisp_lld_setpowermode(gdisp_powermode_t UNUSED(powerMode)) { void gdisp_lld_setpowermode(gdisp_powermode_t UNUSED(powerMode)) {
@ -414,3 +418,6 @@
#endif #endif
} }
#endif #endif
#endif /* HAL_USE_GDISP */
#endif /* _GDISP_LLD_EMULATION_C_H */

View File

@ -1,9 +1,14 @@
The new GDISP driver is an architecture independant rewrite of the GLCD interface. This new architecture independance should allow many new low level drivers to be easily added. The new GDISP driver is an architecture independant rewrite of the GLCD interface.
This new architecture independance should allow many new low level drivers to be easily added.
GDISP allows low-level driver hardware accelerated drawing routines while providing a software emulation if the low level driver can not provide it. A basic low level driver now only requires 2 routines to be written. GDISP allows low-level driver hardware accelerated drawing routines while providing a software emulation
if the low level driver can not provide it. A basic low level driver now only requires 2 routines to be written.
A glcd.h compatability file has been included that allow applications written to use the existing GLCD driver to use the GDISP driver with little or no change. A glcd.h compatability file has been included that allow applications written to use the existing GLCD driver to
use the GDISP driver with little or no change.
It is written in the ChibiOS style with ChibiOS style includes and documentation. It is written in the ChibiOS style with ChibiOS style includes and documentation.
It is encapsulated into a "halext" structure with appropriate readme's that allow for easy inclusion in any ChibiOS project. This structure can be seamlessly added to as new driver types are added and it supports low level drivers that are neither platform or board specific (although they can be). It is encapsulated into a "halext" structure with appropriate readme's that allow for easy inclusion in any
ChibiOS project. This structure can be seamlessly added to as new driver types are added and it supports
low level drivers that are neither platform or board specific (although they can be).

File diff suppressed because it is too large Load Diff

View File

@ -29,7 +29,6 @@
#include "ch.h" #include "ch.h"
#include "hal.h" #include "hal.h"
#include "gdisp.h" #include "gdisp.h"
#include "gdisp_fonts.h"
#if HAL_USE_GDISP || defined(__DOXYGEN__) #if HAL_USE_GDISP || defined(__DOXYGEN__)
@ -62,6 +61,18 @@
/* Driver local functions. */ /* Driver local functions. */
/*===========================================================================*/ /*===========================================================================*/
#include "gdisp_fonts.h"
/* All the board specific code should go in these include file so the driver
* can be ported to another board just by creating a suitable file.
*/
#if defined(BOARD_YOURBOARDNAME)
#include "gdisp_lld_board_yourboardname.h"
#else
/* Include the user supplied board definitions */
#include "gdisp_lld_board.h"
#endif
/*===========================================================================*/ /*===========================================================================*/
/* Driver interrupt handlers. */ /* Driver interrupt handlers. */
/*===========================================================================*/ /*===========================================================================*/

View File

@ -4,6 +4,11 @@ To use this driver template
2. Rename the directory to match your hardware. 2. Rename the directory to match your hardware.
3. Customise each file in the directory including the .mk file 3. Customise each file in the directory including the .mk file
and this file. An example for this file is below... and this file. An example for this file is below...
4. Keep any board specific code in a file you create called
gdisp_lld_board_yourboardname.h and adjust gdisp.c to match.
This enables someone porting to a new board to add another
suitable boad definition without worrying about the rest of
the driver. See the gdispNokia6610 driver as an example.
------------------------------------------------------------------ ------------------------------------------------------------------
To use this driver: To use this driver:
@ -18,6 +23,12 @@ To use this driver:
d) All of the following (with appropriate values): d) All of the following (with appropriate values):
#define SCREEN_WIDTH 128 #define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 128 #define SCREEN_HEIGHT 128
e) If you are not using a known board then create a gdisp_lld_board.h file
and ensure it is on your include path.
Use the gdisp_lld_board_example.h file as a basis.
Currently known boards are:
XXXXXXXXX
2. To your makefile add the following lines: 2. To your makefile add the following lines:
include $(CHIBIOS)/os/halext/halext.mk include $(CHIBIOS)/os/halext/halext.mk