aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorAndrew Hannam <andrewh@inmarket.com.au>2013-03-10 16:12:13 +1000
committerAndrew Hannam <andrewh@inmarket.com.au>2013-03-10 16:12:13 +1000
commit8a40457c8645560b4b94bfd16f99f67d51168c82 (patch)
tree0f43d60a85b17f3c5bfcaaf8b81e9d6fbd64bff2 /include
parent269262ef9bcd392eb037ed9873557478951669e7 (diff)
downloaduGFX-8a40457c8645560b4b94bfd16f99f67d51168c82.tar.gz
uGFX-8a40457c8645560b4b94bfd16f99f67d51168c82.tar.bz2
uGFX-8a40457c8645560b4b94bfd16f99f67d51168c82.zip
Revert "GDISP changes including polygon support"
This reverts commit 269262ef9bcd392eb037ed9873557478951669e7.
Diffstat (limited to 'include')
-rw-r--r--include/gdisp/gdisp.h830
-rw-r--r--include/gdisp/lld/emulation.c38
-rw-r--r--include/gdisp/lld/gdisp_lld.h203
-rw-r--r--include/gdisp/options.h483
4 files changed, 540 insertions, 1014 deletions
diff --git a/include/gdisp/gdisp.h b/include/gdisp/gdisp.h
index 13937d16..a9f15e0f 100644
--- a/include/gdisp/gdisp.h
+++ b/include/gdisp/gdisp.h
@@ -48,122 +48,10 @@ typedef int16_t coord_t;
#if GFX_USE_GDISP || defined(__DOXYGEN__)
/*===========================================================================*/
-/* Include the low level driver configuration information */
-/*===========================================================================*/
-
-#include "gdisp_lld_config.h"
-
-/*===========================================================================*/
-/* Type definitions */
-/*===========================================================================*/
-
-/**
- * @brief The type for a fixed point coordinate.
- * @details The top 16 bits are the integer component, the bottom 16 bits are the real component.
- */
-typedef int32_t fpcoord_t;
-
-/**
- * @brief Macros to convert to and from a fixed point coord.
- * @{
- */
-#define COORD2FP(x) ((fpcoord_t)(x)<<16)
-#define FP2COORD(x) ((coord_t)((x)>>16))
-/* @} */
-
-/**
- * @brief Type for a 2D point on the screen.
- */
-typedef struct point_t {
- coord_t x, y;
- } point;
-/**
- * @brief Type for the text justification.
- */
-typedef enum justify {justifyLeft, justifyCenter, justifyRight} justify_t;
-/**
- * @brief Type for the font metric.
- */
-typedef enum fontmetric {fontHeight, fontDescendersHeight, fontLineSpacing, fontCharPadding, fontMinWidth, fontMaxWidth} fontmetric_t;
-/**
- * @brief The type of a font.
- */
-typedef const struct font *font_t;
-/**
- * @brief Type for the screen orientation.
- */
-typedef enum orientation {GDISP_ROTATE_0, GDISP_ROTATE_90, GDISP_ROTATE_180, GDISP_ROTATE_270} gdisp_orientation_t;
-/**
- * @brief Type for the available power modes for the screen.
- */
-typedef enum powermode {powerOff, powerSleep, powerDeepSleep, powerOn} gdisp_powermode_t;
-
-/*
- * This is not documented in Doxygen as it is meant to be a black-box.
- * Applications should always use the routines and macros defined
- * below to access it in case the implementation ever changed.
- */
-typedef struct GDISPDriver_t {
- coord_t Width;
- coord_t Height;
- gdisp_orientation_t Orientation;
- gdisp_powermode_t Powermode;
- uint8_t Backlight;
- uint8_t Contrast;
- #if GDISP_NEED_CLIP || GDISP_NEED_VALIDATION
- coord_t clipx0, clipy0;
- coord_t clipx1, clipy1; /* not inclusive */
- #endif
- } GDISPDriver;
-
-extern GDISPDriver GDISP;
-
-/*===========================================================================*/
-/* Constants. */
+/* Driver constants. */
/*===========================================================================*/
/**
- * @brief Driver Control Constants
- * @details Unsupported control codes are ignored.
- * @note The value parameter should always be typecast to (void *).
- * @note There are some predefined and some specific to the low level driver.
- * @note GDISP_CONTROL_POWER - Takes a gdisp_powermode_t
- * GDISP_CONTROL_ORIENTATION - Takes a gdisp_orientation_t
- * GDISP_CONTROL_BACKLIGHT - Takes an int from 0 to 100. For a driver
- * that only supports off/on anything other
- * than zero is on.
- * GDISP_CONTROL_CONTRAST - Takes an int from 0 to 100.
- * GDISP_CONTROL_LLD - Low level driver control constants start at
- * this value.
- */
-#define GDISP_CONTROL_POWER 0
-#define GDISP_CONTROL_ORIENTATION 1
-#define GDISP_CONTROL_BACKLIGHT 2
-#define GDISP_CONTROL_CONTRAST 3
-#define GDISP_CONTROL_LLD 1000
-
-/**
- * @brief Driver Query Constants
- * @details Unsupported query codes return (void *)-1.
- * @note The result should be typecast the required type.
- * @note GDISP_QUERY_LLD - Low level driver control constants start at
- * this value.
- */
-#define GDISP_QUERY_LLD 1000
-
-/**
- * @brief Driver Pixel Format Constants
- */
-#define GDISP_PIXELFORMAT_MONO 1
-#define GDISP_PIXELFORMAT_RGB565 565
-#define GDISP_PIXELFORMAT_RGB888 888
-#define GDISP_PIXELFORMAT_RGB444 444
-#define GDISP_PIXELFORMAT_RGB332 332
-#define GDISP_PIXELFORMAT_RGB666 666
-#define GDISP_PIXELFORMAT_CUSTOM 99999
-#define GDISP_PIXELFORMAT_ERROR 88888
-
-/**
* @name Some basic colors
* @{
*/
@@ -192,426 +80,125 @@ extern GDISPDriver GDISP;
/** @} */
/*===========================================================================*/
-/* Defines related to the pixel format */
+/* Low Level Driver details and error checks. */
/*===========================================================================*/
-#if defined(__DOXYGEN__)
- /**
- * @brief The color of a pixel.
- */
- typedef uint16_t color_t;
- /**
- * @brief Convert a number (of any type) to a color_t.
- * @details Masks any invalid bits in the color
- */
- #define COLOR(c) ((color_t)(c))
- /**
- * @brief Does the color_t type contain invalid bits that need masking.
- */
- #define MASKCOLOR FALSE
- /**
- * @brief Convert red, green, blue (each 0 to 255) into a color value.
- */
- #define RGB2COLOR(r,g,b) ((color_t)((((r) & 0xF8)<<8) | (((g) & 0xFC)<<3) | (((b) & 0xF8)>>3)))
- /**
- * @brief Convert a 6 digit HTML code (hex) into a color value.
- */
- #define HTML2COLOR(h) ((color_t)((((h) & 0xF80000)>>8) | (((h) & 0x00FC00)>>5) | (((h) & 0x0000F8)>>3)))
- /**
- * @brief Extract the red component (0 to 255) of a color value.
- */
- #define RED_OF(c) (((c) & 0xF800)>>8)
- /**
- * @brief Extract the green component (0 to 255) of a color value.
- */
- #define GREEN_OF(c) (((c)&0x007E)>>3)
- /**
- * @brief Extract the blue component (0 to 255) of a color value.
- */
- #define BLUE_OF(c) (((c)&0x001F)<<3)
-
-#elif GDISP_PIXELFORMAT == GDISP_PIXELFORMAT_MONO
- typedef uint8_t color_t;
- #define COLOR(c) ((color_t)(c))
- #define MASKCOLOR FALSE
- #define RGB2COLOR(r,g,b) ((r|g|b) ? 1 : 0)
- #define HTML2COLOR(h) (h ? 1 : 0)
- #define RED_OF(c) (c ? 255 : 0)
- #define GREEN_OF(c) (c ? 255 : 0)
- #define BLUE_OF(c) (c ? 255 : 0)
-
-#elif GDISP_PIXELFORMAT == GDISP_PIXELFORMAT_RGB565
- typedef uint16_t color_t;
- #define COLOR(c) ((color_t)(c))
- #define MASKCOLOR FALSE
- #define RGB2COLOR(r,g,b) ((color_t)((((r) & 0xF8)<<8) | (((g) & 0xFC)<<3) | (((b) & 0xF8)>>3)))
- #define HTML2COLOR(h) ((color_t)((((h) & 0xF80000)>>8) | (((h) & 0x00FC00)>>5) | (((h) & 0x0000F8)>>3)))
- #define RED_OF(c) (((c) & 0xF800)>>8)
- #define GREEN_OF(c) (((c)&0x07E0)>>3)
- #define BLUE_OF(c) (((c)&0x001F)<<3)
-
-#elif GDISP_PIXELFORMAT == GDISP_PIXELFORMAT_RGB888
- typedef uint32_t color_t;
- #define COLOR(c) ((color_t)(((c) & 0xFFFFFF)))
- #define MASKCOLOR TRUE
- #define RGB2COLOR(r,g,b) ((color_t)((((r) & 0xFF)<<16) | (((g) & 0xFF) << 8) | ((b) & 0xFF)))
- #define HTML2COLOR(h) ((color_t)(h))
- #define RED_OF(c) (((c) & 0xFF0000)>>16)
- #define GREEN_OF(c) (((c)&0x00FF00)>>8)
- #define BLUE_OF(c) ((c)&0x0000FF)
-
-#elif GDISP_PIXELFORMAT == GDISP_PIXELFORMAT_RGB444
- typedef uint16_t color_t;
- #define COLOR(c) ((color_t)(((c) & 0x0FFF)))
- #define MASKCOLOR TRUE
- #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)))
- #define RED_OF(c) (((c) & 0x0F00)>>4)
- #define GREEN_OF(c) ((c)&0x00F0)
- #define BLUE_OF(c) (((c)&0x000F)<<4)
-
-#elif GDISP_PIXELFORMAT == GDISP_PIXELFORMAT_RGB332
- typedef uint8_t color_t;
- #define COLOR(c) ((color_t)(c))
- #define MASKCOLOR FALSE
- #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)))
- #define RED_OF(c) ((c) & 0xE0)
- #define GREEN_OF(c) (((c)&0x1C)<<3)
- #define BLUE_OF(c) (((c)&0x03)<<6)
-
-#elif GDISP_PIXELFORMAT == GDISP_PIXELFORMAT_RGB666
- typedef uint32_t color_t;
- #define COLOR(c) ((color_t)(((c) & 0x03FFFF)))
- #define MASKCOLOR TRUE
- #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)))
- #define RED_OF(c) (((c) & 0x03F000)>>12)
- #define GREEN_OF(c) (((c)&0x00FC00)>>8)
- #define BLUE_OF(c) (((c)&0x00003F)<<2)
-
-#elif GDISP_PIXELFORMAT != GDISP_PIXELFORMAT_CUSTOM
- #error "GDISP: No supported pixel format has been specified."
-#endif
-
-/* Verify information for packed pixels and define a non-packed pixel macro */
-#if !GDISP_PACKED_PIXELS
- #define gdispPackPixels(buf,cx,x,y,c) { ((color_t *)(buf))[(y)*(cx)+(x)] = (c); }
-#elif !GDISP_HARDWARE_BITFILLS
- #error "GDISP: packed pixel formats are only supported for hardware accelerated drivers."
-#elif GDISP_PIXELFORMAT != GDISP_PIXELFORMAT_RGB888 \
- && GDISP_PIXELFORMAT != GDISP_PIXELFORMAT_RGB444 \
- && GDISP_PIXELFORMAT != GDISP_PIXELFORMAT_RGB666 \
- && GDISP_PIXELFORMAT != GDISP_PIXELFORMAT_CUSTOM
- #error "GDISP: A packed pixel format has been specified for an unsupported pixel format."
-#endif
-
-#if GDISP_NEED_SCROLL && !GDISP_HARDWARE_SCROLL
- #error "GDISP: Hardware scrolling is wanted but not supported."
-#endif
+/* Include the low level driver information */
+#include "gdisp/lld/gdisp_lld.h"
-#if GDISP_NEED_PIXELREAD && !GDISP_HARDWARE_PIXELREAD
- #error "GDISP: Pixel read-back is wanted but not supported."
-#endif
+/*===========================================================================*/
+/* Type definitions */
+/*===========================================================================*/
/**
- * @brief The type of a pixel.
+ * @brief Type for the text justification.
*/
-typedef color_t pixel_t;
+typedef enum justify {justifyLeft, justifyCenter, justifyRight} justify_t;
+/**
+ * @brief Type for the font metric.
+ */
+typedef enum fontmetric {fontHeight, fontDescendersHeight, fontLineSpacing, fontCharPadding, fontMinWidth, fontMaxWidth} fontmetric_t;
+
+/*===========================================================================*/
+/* External declarations. */
+/*===========================================================================*/
+
+#if (GDISP_NEED_TEXT && GDISP_OLD_FONT_DEFINITIONS) || defined(__DOXYGEN__)
+ #if GDISP_INCLUDE_FONT_SMALL
+ extern const struct font fontSmall;
+ extern const struct font fontSmallDouble;
+ extern const struct font fontSmallNarrow;
+ #endif
+ #if GDISP_INCLUDE_FONT_LARGER
+ extern const struct font fontLarger;
+ extern const struct font fontLargerDouble;
+ extern const struct font fontLargerNarrow;
+ #endif
+ #if GDISP_INCLUDE_FONT_UI1
+ extern const struct font fontUI1;
+ extern const struct font fontUI1Double;
+ extern const struct font fontUI1Narrow;
+ #endif
+ #if GDISP_INCLUDE_FONT_UI2
+ extern const struct font fontUI2;
+ extern const struct font fontUI2Double;
+ extern const struct font fontUI2Narrow;
+ #endif
+ #if GDISP_INCLUDE_FONT_LARGENUMBERS
+ extern const struct font fontLargeNumbers;
+ extern const struct font fontLargeNumbersDouble;
+ extern const struct font fontLargeNumbersNarrow;
+ #endif
+#endif
#ifdef __cplusplus
extern "C" {
#endif
-#if GDISP_NEED_MULTITHREAD || GDISP_NEED_ASYNC || defined(__DOXYGEN__)
+#if GDISP_NEED_MULTITHREAD || GDISP_NEED_ASYNC
/* These routines can be hardware accelerated
* - Do not add a routine here unless it has also been added to the hardware acceleration layer
*/
/* Base Functions */
-
- /**
- * @brief GDISP Driver initialization.
- * @details Must be called before any other gdisp function.
- *
- * @note This function is NOT currently implicitly invoked by @p halInit().
- * It must be called manually.
- *
- * @return True if succeeded, False otherwise
- *
- * @api
- */
bool_t gdispInit(void);
-
- /**
- * @brief Test if the GDISP engine is currently drawing.
- * @note This function will always return FALSE if
- * GDISP_NEED_ASYNC is not defined.
- *
- * @return TRUE if gdisp is busy, FALSE otherwise
- *
- * @api
- */
bool_t gdispIsBusy(void);
/* Drawing Functions */
-
- /**
- * @brief Clear the display to the specified color.
- *
- * @param[in] color The color to use when clearing the screen
- *
- * @api
- */
void gdispClear(color_t color);
-
- /**
- * @brief Set a pixel in the specified color.
- *
- * @param[in] x,y The position to set the pixel.
- * @param[in] color The color to use
- *
- * @api
- */
void gdispDrawPixel(coord_t x, coord_t y, color_t color);
-
- /**
- * @brief Draw a line.
- *
- * @param[in] x0,y0 The start position
- * @param[in] x1,y1 The end position
- * @param[in] color The color to use
- *
- * @api
- */
void gdispDrawLine(coord_t x0, coord_t y0, coord_t x1, coord_t y1, color_t color);
-
- /**
- * @brief Fill an area with a color.
- *
- * @param[in] x,y The start position
- * @param[in] cx,cy The size of the box (outside dimensions)
- * @param[in] color The color to use
- *
- * @api
- */
void gdispFillArea(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color);
-
- /**
- * @brief Fill an area using the supplied bitmap.
- * @details The bitmap is in the pixel format specified by the low level driver
- * @note If a packed pixel format is used and the width doesn't
- * match a whole number of bytes, the next line will start on a
- * non-byte boundary (no end-of-line padding).
- * @note If GDISP_NEED_ASYNC is defined then the buffer must be static
- * or at least retained until this call has finished the blit. You can
- * tell when all graphics drawing is finished by @p gdispIsBusy() going FALSE.
- *
- * @param[in] x,y The start position
- * @param[in] cx,cy The size of the filled area
- * @param[in] srcx,srcy The bitmap position to start the fill form
- * @param[in] srccx The width of a line in the bitmap
- * @param[in] buffer The bitmap in the driver's pixel format
- *
- * @api
- */
void gdispBlitAreaEx(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t srcx, coord_t srcy, coord_t srccx, const pixel_t *buffer);
/* Clipping Functions */
-
- #if GDISP_NEED_CLIP || defined(__DOXYGEN__)
- /**
- * @brief Clip all drawing to the defined area.
- *
- * @param[in] x,y The start position
- * @param[in] cx,cy The size of the clip area
- *
- * @api
- */
- void gdispSetClip(coord_t x, coord_t y, coord_t cx, coord_t cy);
+ #if GDISP_NEED_CLIP
+ void gdispSetClip(coord_t x, coord_t y, coord_t cx, coord_t cy);
#endif
/* Circle Functions */
-
- #if GDISP_NEED_CIRCLE || defined(__DOXYGEN__)
- /**
- * @brief Draw a circle.
- *
- * @param[in] x,y The center of the circle
- * @param[in] radius The radius of the circle
- * @param[in] color The color to use
- *
- * @api
- */
- void gdispDrawCircle(coord_t x, coord_t y, coord_t radius, color_t color);
-
- /**
- * @brief Draw a filled circle.
- *
- * @param[in] x,y The center of the circle
- * @param[in] radius The radius of the circle
- * @param[in] color The color to use
- *
- * @api
- */
- void gdispFillCircle(coord_t x, coord_t y, coord_t radius, color_t color);
+ #if GDISP_NEED_CIRCLE
+ void gdispDrawCircle(coord_t x, coord_t y, coord_t radius, color_t color);
+ void gdispFillCircle(coord_t x, coord_t y, coord_t radius, color_t color);
#endif
/* Ellipse Functions */
-
- #if GDISP_NEED_ELLIPSE || defined(__DOXYGEN__)
- /**
- * @brief Draw an ellipse.
- *
- * @param[in] x,y The center of the ellipse
- * @param[in] a,b The dimensions of the ellipse
- * @param[in] color The color to use
- *
- * @api
- */
- void gdispDrawEllipse(coord_t x, coord_t y, coord_t a, coord_t b, color_t color);
-
- /**
- * @brief Draw a filled ellipse.
- *
- * @param[in] x,y The center of the ellipse
- * @param[in] a,b The dimensions of the ellipse
- * @param[in] color The color to use
- *
- * @api
- */
- void gdispFillEllipse(coord_t x, coord_t y, coord_t a, coord_t b, color_t color);
+ #if GDISP_NEED_ELLIPSE
+ void gdispDrawEllipse(coord_t x, coord_t y, coord_t a, coord_t b, color_t color);
+ void gdispFillEllipse(coord_t x, coord_t y, coord_t a, coord_t b, color_t color);
#endif
/* Arc Functions */
-
- #if GDISP_NEED_ARC || defined(__DOXYGEN__)
- /*
- * @brief Draw an arc.
- *
- * @param[in] x0,y0 The center point
- * @param[in] radius The radius of the arc
- * @param[in] start The start angle (0 to 360)
- * @param[in] end The end angle (0 to 360)
- * @param[in] color The color of the arc
- *
- * @api
- */
- void gdispDrawArc(coord_t x, coord_t y, coord_t radius, coord_t startangle, coord_t endangle, color_t color);
-
- /*
- * @brief Draw a filled arc.
- * @note Not very efficient currently - does lots of overdrawing
- *
- * @param[in] x0,y0 The center point
- * @param[in] radius The radius of the arc
- * @param[in] start The start angle (0 to 360)
- * @param[in] end The end angle (0 to 360)
- * @param[in] color The color of the arc
- *
- * @api
- */
- void gdispFillArc(coord_t x, coord_t y, coord_t radius, coord_t startangle, coord_t endangle, color_t color);
+ #if GDISP_NEED_ARC
+ void gdispDrawArc(coord_t x, coord_t y, coord_t radius, coord_t startangle, coord_t endangle, color_t color);
+ void gdispFillArc(coord_t x, coord_t y, coord_t radius, coord_t startangle, coord_t endangle, color_t color);
#endif
/* Basic Text Rendering Functions */
-
- #if GDISP_NEED_TEXT || defined(__DOXYGEN__)
- /**
- * @brief Draw a text character.
- *
- * @param[in] x,y The position for the text
- * @param[in] c The character to draw
- * @param[in] font The font to use
- * @param[in] color The color to use
- *
- * @api
- */
- void gdispDrawChar(coord_t x, coord_t y, char c, font_t font, color_t color);
-
- /**
- * @brief Draw a text character with a filled background.
- *
- * @param[in] x,y The position for the text
- * @param[in] c The character to draw
- * @param[in] font The font to use
- * @param[in] color The color to use
- * @param[in] bgcolor The background color to use
- *
- * @api
- */
- void gdispFillChar(coord_t x, coord_t y, char c, font_t font, color_t color, color_t bgcolor);
+ #if GDISP_NEED_TEXT
+ void gdispDrawChar(coord_t x, coord_t y, char c, font_t font, color_t color);
+ void gdispFillChar(coord_t x, coord_t y, char c, font_t font, color_t color, color_t bgcolor);
#endif
/* Read a pixel Function */
-
- #if GDISP_NEED_PIXELREAD || defined(__DOXYGEN__)
- /**
- * @brief Get the color of a pixel.
- * @return The color of the pixel.
- *
- * @param[in] x,y The position of the pixel
- *
- * @api
- */
- color_t gdispGetPixelColor(coord_t x, coord_t y);
+ #if GDISP_NEED_PIXELREAD
+ color_t gdispGetPixelColor(coord_t x, coord_t y);
#endif
/* Scrolling Function - clears the area scrolled out */
-
- #if GDISP_NEED_SCROLL || defined(__DOXYGEN__)
- /**
- * @brief Scroll vertically a section of the screen.
- * @pre GDISP_NEED_SCROLL must be set to TRUE in halconf.h
- * @note Optional.
- * @note If lines is >= cy, it is equivelent to a area fill with bgcolor.
- *
- * @param[in] x, y The start of the area to be scrolled
- * @param[in] cx, cy The size of the area to be scrolled
- * @param[in] lines The number of lines to scroll (Can be positive or negative)
- * @param[in] bgcolor The color to fill the newly exposed area.
- *
- * @api
- */
- void gdispVerticalScroll(coord_t x, coord_t y, coord_t cx, coord_t cy, int lines, color_t bgcolor);
+ #if GDISP_NEED_SCROLL
+ void gdispVerticalScroll(coord_t x, coord_t y, coord_t cx, coord_t cy, int lines, color_t bgcolor);
#endif
/* Set driver specific control */
-
- #if GDISP_NEED_CONTROL || defined(__DOXYGEN__)
- /**
- * @brief Control hardware specific parts of the display. eg powermodes, backlight etc
- * @pre The GDISP unit must have been initialised using @p gdispInit().
- * @note Depending on the hardware implementation this function may not
- * support some codes. They will be ignored.
- *
- * @param[in] what what you want to control
- * @param[in] value The value to be assigned
- *
- * @api
- */
- void gdispControl(unsigned what, void *value);
+ #if GDISP_NEED_CONTROL
+ void gdispControl(unsigned what, void *value);
#endif
/* Query driver specific data */
-
- #if GDISP_NEED_QUERY || defined(__DOXYGEN__)
- /**
- * @brief Query a property of the display.
- * @pre The GDISP unit must have been initialised using @p gdispInit().
- * @note The result must be typecast to the correct type.
- * @note An unsupported query will return (void *)-1.
- *
- * @param[in] what What to query
- *
- * @api
- */
- void *gdispQuery(unsigned what);
- #endif
+ void *gdispQuery(unsigned what);
#else
- /* Include the low level driver information */
- #include "gdisp/lld/gdisp_lld.h"
/* The same as above but use the low level driver directly if no multi-thread support is needed */
#define gdispInit(gdisp) gdisp_lld_init()
@@ -642,214 +229,30 @@ extern "C" {
*/
/* Extra drawing functions */
-
-/**
- * @brief Draw a rectangular box.
- *
- * @param[in] x,y The start position
- * @param[in] cx,cy The size of the box (outside dimensions)
- * @param[in] color The color to use
- *
- * @api
- */
void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color);
-#if GDISP_NEED_CONVEX_POLYGON || defined(__DOXYGEN__)
- /**
- * @brief Draw an enclosed polygon (convex, non-convex or complex).
- *
- * @param[in] pntarray An array of points
- * @param[in] cnt The number of points in the array
- * @param[in] color The color to use
- *
- * @api
- */
- void gdispDrawPoly(const point *pntarray, unsigned cnt, color_t color);
-
- /**
- * @brief Fill a convex polygon
- * @details Doesn't handle non-convex or complex polygons.
- *
- * @param[in] pntarray An array of points
- * @param[in] cnt The number of points in the array
- * @param[in] color The color to use
- *
- * @note Convex polygons are those that have no internal angles. That is;
- * you can draw a line from any point on the polygon to any other point
- * on the polygon without it going outside the polygon.
- * @note This routine is designed to be very efficient with even simple display hardware.
- *
- * @api
- */
- void gdispFillConvexPoly(const point *pntarray, unsigned cnt, color_t color);
-#endif
-
/* Extra Text Functions */
-
-#if GDISP_NEED_TEXT || defined(__DOXYGEN__)
- /**
- * @brief Draw a text string.
- *
- * @param[in] x,y The position for the text
- * @param[in] font The font to use
- * @param[in] str The string to draw
- * @param[in] color The color to use
- *
- * @api
- */
+#if GDISP_NEED_TEXT
void gdispDrawString(coord_t x, coord_t y, const char *str, font_t font, color_t color);
-
- /**
- * @brief Draw a text string.
- *
- * @param[in] x,y The position for the text
- * @param[in] str The string to draw
- * @param[in] font The font to use
- * @param[in] color The color to use
- * @param[in] bgcolor The background color to use
- *
- * @api
- */
void gdispFillString(coord_t x, coord_t y, const char *str, font_t font, color_t color, color_t bgcolor);
-
- /**
- * @brief Draw a text string vertically centered within the specified box.
- *
- * @param[in] x,y The position for the text (need to define top-right or base-line - check code)
- * @param[in] cx,cy The width and height of the box
- * @param[in] str The string to draw
- * @param[in] font The font to use
- * @param[in] color The color to use
- * @param[in] justify Justify the text left, center or right within the box
- *
- * @api
- */
void gdispDrawStringBox(coord_t x, coord_t y, coord_t cx, coord_t cy, const char* str, font_t font, color_t color, justify_t justify);
-
- /**
- * @brief Draw a text string vertically centered within the specified box. The box background is filled with the specified background color.
- * @note The entire box is filled
- *
- * @param[in] x,y The position for the text (need to define top-right or base-line - check code)
- * @param[in] cx,cy The width and height of the box
- * @param[in] str The string to draw
- * @param[in] font The font to use
- * @param[in] color The color to use
- * @param[in] bgcolor The background color to use
- * @param[in] justify Justify the text left, center or right within the box
- *
- * @api
- */
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);
-
- /**
- * @brief Get a metric of a font.
- * @return The metric requested in pixels.
- *
- * @param[in] font The font to test
- * @param[in] metric The metric to measure
- *
- * @api
- */
coord_t gdispGetFontMetric(font_t font, fontmetric_t metric);
-
- /**
- * @brief Get the pixel width of a character.
- * @return The width of the character in pixels. Does not include any between character padding.
- *
- * @param[in] c The character to draw
- * @param[in] font The font to use
- *
- * @api
- */
coord_t gdispGetCharWidth(char c, font_t font);
-
- /**
- * @brief Get the pixel width of a string.
- * @return The width of the string in pixels.
- *
- * @param[in] str The string to measure
- * @param[in] font The font to use
- *
- * @api
- */
coord_t gdispGetStringWidth(const char* str, font_t font);
-
- /**
- * @brief Find a font and return it.
- * @details The supplied name is matched against the font name. A '*' will replace 0 or more characters.
- * @return Returns a font or NULL if no matching font could be found.
- *
- * @param[in] name The font name to find.
- *
- * @note Wildcard matching will match the shortest possible match.
- *
- * @api
- */
font_t gdispOpenFont(const char *name);
-
- /**
- * @brief Release a font after use.
- *
- * @param[in] font The font to release.
- *
- * @api
- */
void gdispCloseFont(font_t font);
-
- /**
- * @brief Get the name of the specified font.
- * @returns The name of the font.
- *
- * @param[in] font The font to get the name for.
- *
- * @api
- */
const char *gdispGetFontName(font_t font);
#endif
/* Extra Arc Functions */
-
-#if GDISP_NEED_ARC || defined(__DOXYGEN__)
- /**
- * @brief Draw a rectangular box with rounded corners
- *
- * @param[in] x,y The start position
- * @param[in] cx,cy The size of the box (outside dimensions)
- * @param[in] radius The radius of the rounded corners
- * @param[in] color The color to use
- *
- * @api
- */
+#if GDISP_NEED_ARC
void gdispDrawRoundedBox(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t radius, color_t color);
-
- /**
- * @brief Draw a filled rectangular box with rounded corners
- *
- * @param[in] x,y The start position
- * @param[in] cx,cy The size of the box (outside dimensions)
- * @param[in] radius The radius of the rounded corners
- * @param[in] color The color to use
- *
- * @api
- */
void gdispFillRoundedBox(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t radius, color_t color);
#endif
/* Support routine for packed pixel formats */
-#if !defined(gdispPackPixels) || defined(__DOXYGEN__)
- /**
- * @brief Pack a pixel into a pixel buffer.
- * @note This function performs no buffer boundary checking
- * regardless of whether GDISP_NEED_CLIP has been specified.
- *
- * @param[in] buf The buffer to put the pixel in
- * @param[in] cx The width of a pixel line
- * @param[in] x, y The location of the pixel to place
- * @param[in] color The color to put into the buffer
- *
- * @api
- */
+#ifndef gdispPackPixels
void gdispPackPixels(const pixel_t *buf, coord_t cx, coord_t x, coord_t y, color_t color);
#endif
@@ -861,99 +264,19 @@ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color);
#define gdispBlitArea(x, y, cx, cy, buffer) gdispBlitAreaEx(x, y, cx, cy, 0, 0, cx, buffer)
/* Macro definitions for common gets and sets */
-
-/**
- * @brief Set the display power mode.
- * @note Ignored if not supported by the display.
- *
- * @param[in] powerMode The new power mode
- *
- * @api
- */
#define gdispSetPowerMode(powerMode) gdispControl(GDISP_CONTROL_POWER, (void *)(unsigned)(powerMode))
-
-/**
- * @brief Set the display orientation.
- * @note Ignored if not supported by the display.
- *
- * @param[in] newOrientation The new orientation
- *
- * @api
- */
#define gdispSetOrientation(newOrientation) gdispControl(GDISP_CONTROL_ORIENTATION, (void *)(unsigned)(newOrientation))
-
-/**
- * @brief Set the display backlight.
- * @note Ignored if not supported by the display.
- *
- * @param[in] percent The new brightness (0 - 100%)
- *
- * @note For displays that only support backlight off and on,
- * 0 = off, anything else = on
- *
- * @api
- */
#define gdispSetBacklight(percent) gdispControl(GDISP_CONTROL_BACKLIGHT, (void *)(unsigned)(percent))
-
-/**
- * @brief Set the display contrast.
- * @note Ignored if not supported by the display.
- *
- * @param[in] percent The new contrast (0 - 100%)
- *
- * @api
- */
#define gdispSetContrast(percent) gdispControl(GDISP_CONTROL_CONTRAST, (void *)(unsigned)(percent))
-/**
- * @brief Get the display width in pixels.
- *
- * @api
- */
-#define gdispGetWidth() (GDISP.Width)
-
-/**
- * @brief Get the display height in pixels.
- *
- * @api
- */
-#define gdispGetHeight() (GDISP.Height)
-
-/**
- * @brief Get the current display power mode.
- *
- * @api
- */
-#define gdispGetPowerMode() (GDISP.Powermode)
-
-/**
- * @brief Get the current display orientation.
- *
- * @api
- */
-#define gdispGetOrientation() (GDISP.Orientation)
-
-/**
- * @brief Get the current display backlight brightness.
- *
- * @api
- */
-#define gdispGetBacklight() (GDISP.Backlight)
-
-/**
- * @brief Get the current display contrast.
- *
- * @api
- */
-#define gdispGetContrast() (GDISP.Contrast)
+#define gdispGetWidth() ((coord_t)(unsigned)gdispQuery(GDISP_QUERY_WIDTH))
+#define gdispGetHeight() ((coord_t)(unsigned)gdispQuery(GDISP_QUERY_HEIGHT))
+#define gdispGetPowerMode() ((gdisp_powermode_t)(unsigned)gdispQuery(GDISP_QUERY_POWER))
+#define gdispGetOrientation() ((gdisp_orientation_t)(unsigned)gdispQuery(GDISP_QUERY_ORIENTATION))
+#define gdispGetBacklight() ((coord_t)(unsigned)gdispQuery(GDISP_QUERY_BACKLIGHT))
+#define gdispGetContrast() ((coord_t)(unsigned)gdispQuery(GDISP_QUERY_CONTRAST))
/* More interesting macro's */
-
-/**
- * @brief Reset the clip area to the full screen
- *
- * @api
- */
#define gdispUnsetClip() gdispSetClip(0,0,gdispGetWidth(),gdispGetHeight())
@@ -965,3 +288,4 @@ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color);
#endif /* _GDISP_H */
/** @} */
+
diff --git a/include/gdisp/lld/emulation.c b/include/gdisp/lld/emulation.c
index 572b2dcb..de9acf23 100644
--- a/include/gdisp/lld/emulation.c
+++ b/include/gdisp/lld/emulation.c
@@ -34,13 +34,22 @@
#ifndef GDISP_EMULATION_C
#define GDISP_EMULATION_C
-#if GFX_USE_GDISP
-
-/* Include the low level driver information */
-#include "gdisp/lld/gdisp_lld.h"
-
-/* Declare the GDISP structure */
-GDISPDriver GDISP;
+#if GFX_USE_GDISP /*|| defined(__DOXYGEN__) */
+
+#ifndef GDISP_LLD_NO_STRUCT
+ static struct GDISPDriver {
+ coord_t Width;
+ coord_t Height;
+ gdisp_orientation_t Orientation;
+ gdisp_powermode_t Powermode;
+ uint8_t Backlight;
+ uint8_t Contrast;
+ #if GDISP_NEED_CLIP || GDISP_NEED_VALIDATION
+ coord_t clipx0, clipy0;
+ coord_t clipx1, clipy1; /* not inclusive */
+ #endif
+ } GDISP;
+#endif
#if !GDISP_HARDWARE_CLEARS
void gdisp_lld_clear(color_t color) {
@@ -661,10 +670,17 @@ GDISPDriver GDISP;
}
#endif
-#if GDISP_NEED_QUERY && !GDISP_HARDWARE_QUERY
+#if !GDISP_HARDWARE_QUERY
void *gdisp_lld_query(unsigned what) {
- (void) what;
- return (void *)-1;
+ switch(what) {
+ case GDISP_QUERY_WIDTH: return (void *)(unsigned)GDISP.Width;
+ case GDISP_QUERY_HEIGHT: return (void *)(unsigned)GDISP.Height;
+ case GDISP_QUERY_POWER: return (void *)(unsigned)GDISP.Powermode;
+ case GDISP_QUERY_ORIENTATION: return (void *)(unsigned)GDISP.Orientation;
+ case GDISP_QUERY_BACKLIGHT: return (void *)(unsigned)GDISP.Backlight;
+ case GDISP_QUERY_CONTRAST: return (void *)(unsigned)GDISP.Contrast;
+ default: return (void *)-1;
+ }
}
#endif
@@ -743,11 +759,9 @@ void *gdisp_lld_query(unsigned what) {
gdisp_lld_control(msg->control.what, msg->control.value);
break;
#endif
- #if GDISP_NEED_QUERY
case GDISP_LLD_MSG_QUERY:
msg->query.result = gdisp_lld_query(msg->query.what);
break;
- #endif
}
}
#endif
diff --git a/include/gdisp/lld/gdisp_lld.h b/include/gdisp/lld/gdisp_lld.h
index f42ad2af..d33beb09 100644
--- a/include/gdisp/lld/gdisp_lld.h
+++ b/include/gdisp/lld/gdisp_lld.h
@@ -32,6 +32,73 @@
#if GFX_USE_GDISP || defined(__DOXYGEN__)
/*===========================================================================*/
+/* Low level driver configuration needs */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Include the low level driver configuration information */
+/*===========================================================================*/
+
+#include "gdisp_lld_config.h"
+
+/*===========================================================================*/
+/* Constants. */
+/*===========================================================================*/
+
+/**
+ * @brief Driver Control Constants
+ * @details Unsupported control codes are ignored.
+ * @note The value parameter should always be typecast to (void *).
+ * @note There are some predefined and some specific to the low level driver.
+ * @note GDISP_CONTROL_POWER - Takes a gdisp_powermode_t
+ * GDISP_CONTROL_ORIENTATION - Takes a gdisp_orientation_t
+ * GDISP_CONTROL_BACKLIGHT - Takes an int from 0 to 100. For a driver
+ * that only supports off/on anything other
+ * than zero is on.
+ * GDISP_CONTROL_CONTRAST - Takes an int from 0 to 100.
+ * GDISP_CONTROL_LLD - Low level driver control constants start at
+ * this value.
+ */
+#define GDISP_CONTROL_POWER 0
+#define GDISP_CONTROL_ORIENTATION 1
+#define GDISP_CONTROL_BACKLIGHT 2
+#define GDISP_CONTROL_CONTRAST 3
+#define GDISP_CONTROL_LLD 1000
+
+/**
+ * @brief Driver Query Constants
+ * @details Unsupported query codes return (void *)-1.
+ * @note There are some predefined and some specific to the low level driver.
+ * @note The result should be typecast the required type.
+ * @note GDISP_QUERY_WIDTH - Gets the width of the screen
+ * GDISP_QUERY_HEIGHT - Gets the height of the screen
+ * GDISP_QUERY_POWER - Get the current powermode
+ * GDISP_QUERY_ORIENTATION - Get the current orientation
+ * GDISP_QUERY_BACKLIGHT - Get the backlight state (0 to 100)
+ * GDISP_QUERY_CONTRAST - Get the contrast.
+ * GDISP_QUERY_LLD - Low level driver control constants start at
+ * this value.
+ */
+#define GDISP_QUERY_WIDTH 0
+#define GDISP_QUERY_HEIGHT 1
+#define GDISP_QUERY_POWER 2
+#define GDISP_QUERY_ORIENTATION 3
+#define GDISP_QUERY_BACKLIGHT 4
+#define GDISP_QUERY_CONTRAST 5
+#define GDISP_QUERY_LLD 1000
+
+/**
+ * @brief Driver Pixel Format Constants
+ */
+#define GDISP_PIXELFORMAT_RGB565 565
+#define GDISP_PIXELFORMAT_RGB888 888
+#define GDISP_PIXELFORMAT_RGB444 444
+#define GDISP_PIXELFORMAT_RGB332 332
+#define GDISP_PIXELFORMAT_RGB666 666
+#define GDISP_PIXELFORMAT_CUSTOM 99999
+#define GDISP_PIXELFORMAT_ERROR 88888
+
+/*===========================================================================*/
/* Error checks. */
/*===========================================================================*/
@@ -254,6 +321,140 @@
/** @} */
/*===========================================================================*/
+/* Define the macro's for the various pixel formats */
+/*===========================================================================*/
+
+#if defined(__DOXYGEN__)
+ /**
+ * @brief The color of a pixel.
+ */
+ typedef uint16_t color_t;
+ /**
+ * @brief Convert a number (of any type) to a color_t.
+ * @details Masks any invalid bits in the color
+ */
+ #define COLOR(c) ((color_t)(c))
+ /**
+ * @brief Does the color_t type contain invalid bits that need masking.
+ */
+ #define MASKCOLOR FALSE
+ /**
+ * @brief Convert red, green, blue (each 0 to 255) into a color value.
+ */
+ #define RGB2COLOR(r,g,b) ((color_t)((((r) & 0xF8)<<8) | (((g) & 0xFC)<<3) | (((b) & 0xF8)>>3)))
+ /**
+ * @brief Convert a 6 digit HTML code (hex) into a color value.
+ */
+ #define HTML2COLOR(h) ((color_t)((((h) & 0xF80000)>>8) | (((h) & 0x00FC00)>>5) | (((h) & 0x0000F8)>>3)))
+ /**
+ * @brief Extract the red component (0 to 255) of a color value.
+ */
+ #define RED_OF(c) (((c) & 0xF800)>>8)
+ /**
+ * @brief Extract the green component (0 to 255) of a color value.
+ */
+ #define GREEN_OF(c) (((c)&0x007E)>>3)
+ /**
+ * @brief Extract the blue component (0 to 255) of a color value.
+ */
+ #define BLUE_OF(c) (((c)&0x001F)<<3)
+
+#elif GDISP_PIXELFORMAT == GDISP_PIXELFORMAT_RGB565
+ typedef uint16_t color_t;
+ #define COLOR(c) ((color_t)(c))
+ #define MASKCOLOR FALSE
+ #define RGB2COLOR(r,g,b) ((color_t)((((r) & 0xF8)<<8) | (((g) & 0xFC)<<3) | (((b) & 0xF8)>>3)))
+ #define HTML2COLOR(h) ((color_t)((((h) & 0xF80000)>>8) | (((h) & 0x00FC00)>>5) | (((h) & 0x0000F8)>>3)))
+ #define RED_OF(c) (((c) & 0xF800)>>8)
+ #define GREEN_OF(c) (((c)&0x07E0)>>3)
+ #define BLUE_OF(c) (((c)&0x001F)<<3)
+
+#elif GDISP_PIXELFORMAT == GDISP_PIXELFORMAT_RGB888
+ typedef uint32_t color_t;
+ #define COLOR(c) ((color_t)(((c) & 0xFFFFFF)))
+ #define MASKCOLOR TRUE
+ #define RGB2COLOR(r,g,b) ((color_t)((((r) & 0xFF)<<16) | (((g) & 0xFF) << 8) | ((b) & 0xFF)))
+ #define HTML2COLOR(h) ((color_t)(h))
+ #define RED_OF(c) (((c) & 0xFF0000)>>16)
+ #define GREEN_OF(c) (((c)&0x00FF00)>>8)
+ #define BLUE_OF(c) ((c)&0x0000FF)
+
+#elif GDISP_PIXELFORMAT == GDISP_PIXELFORMAT_RGB444
+ typedef uint16_t color_t;
+ #define COLOR(c) ((color_t)(((c) & 0x0FFF)))
+ #define MASKCOLOR TRUE
+ #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)))
+ #define RED_OF(c) (((c) & 0x0F00)>>4)
+ #define GREEN_OF(c) ((c)&0x00F0)
+ #define BLUE_OF(c) (((c)&0x000F)<<4)
+
+#elif GDISP_PIXELFORMAT == GDISP_PIXELFORMAT_RGB332
+ typedef uint8_t color_t;
+ #define COLOR(c) ((color_t)(c))
+ #define MASKCOLOR FALSE
+ #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)))
+ #define RED_OF(c) ((c) & 0xE0)
+ #define GREEN_OF(c) (((c)&0x1C)<<3)
+ #define BLUE_OF(c) (((c)&0x03)<<6)
+
+#elif GDISP_PIXELFORMAT == GDISP_PIXELFORMAT_RGB666
+ typedef uint32_t color_t;
+ #define COLOR(c) ((color_t)(((c) & 0x03FFFF)))
+ #define MASKCOLOR TRUE
+ #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)))
+ #define RED_OF(c) (((c) & 0x03F000)>>12)
+ #define GREEN_OF(c) (((c)&0x00FC00)>>8)
+ #define BLUE_OF(c) (((c)&0x00003F)<<2)
+
+#elif GDISP_PIXELFORMAT != GDISP_PIXELFORMAT_CUSTOM
+ #error "GDISP: No supported pixel format has been specified."
+#endif
+
+/* Verify information for packed pixels and define a non-packed pixel macro */
+#if !GDISP_PACKED_PIXELS
+ #define gdispPackPixels(buf,cx,x,y,c) { ((color_t *)(buf))[(y)*(cx)+(x)] = (c); }
+#elif !GDISP_HARDWARE_BITFILLS
+ #error "GDISP: packed pixel formats are only supported for hardware accelerated drivers."
+#elif GDISP_PIXELFORMAT != GDISP_PIXELFORMAT_RGB888 \
+ && GDISP_PIXELFORMAT != GDISP_PIXELFORMAT_RGB444 \
+ && GDISP_PIXELFORMAT != GDISP_PIXELFORMAT_RGB666 \
+ && GDISP_PIXELFORMAT != GDISP_PIXELFORMAT_CUSTOM
+ #error "GDISP: A packed pixel format has been specified for an unsupported pixel format."
+#endif
+
+#if GDISP_NEED_SCROLL && !GDISP_HARDWARE_SCROLL
+ #error "GDISP: Hardware scrolling is wanted but not supported."
+#endif
+
+#if GDISP_NEED_PIXELREAD && !GDISP_HARDWARE_PIXELREAD
+ #error "GDISP: Pixel read-back is wanted but not supported."
+#endif
+
+/*===========================================================================*/
+/* Driver types. */
+/*===========================================================================*/
+
+/**
+ * @brief The type of a pixel.
+ */
+typedef color_t pixel_t;
+/**
+ * @brief The type of a font.
+ */
+typedef const struct font *font_t;
+/**
+ * @brief Type for the screen orientation.
+ */
+typedef enum orientation {GDISP_ROTATE_0, GDISP_ROTATE_90, GDISP_ROTATE_180, GDISP_ROTATE_270} gdisp_orientation_t;
+/**
+ * @brief Type for the available power modes for the screen.
+ */
+typedef enum powermode {powerOff, powerSleep, powerDeepSleep, powerOn} gdisp_powermode_t;
+
+/*===========================================================================*/
/* External declarations. */
/*===========================================================================*/
@@ -314,9 +515,7 @@ extern "C" {
#endif
/* Query driver specific data */
- #if GDISP_NEED_QUERY
extern void *gdisp_lld_query(unsigned what);
- #endif
/* Clipping Functions */
#if GDISP_NEED_CLIP
diff --git a/include/gdisp/options.h b/include/gdisp/options.h
index 78e48a0a..6ce079ef 100644
--- a/include/gdisp/options.h
+++ b/include/gdisp/options.h
@@ -1,247 +1,236 @@
-/*
- ChibiOS/GFX - Copyright (C) 2012, 2013
- Joel Bodenmann aka Tectu <joel@unormal.org>
-
- This file is part of ChibiOS/GFX.
-
- ChibiOS/GFX is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- ChibiOS/GFX is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/**
- * @file include/gdisp/options.h
- * @brief GDISP sub-system options header file.
- *
- * @addtogroup GDISP
- * @{
- */
-
-#ifndef _GDISP_OPTIONS_H
-#define _GDISP_OPTIONS_H
-
-/**
- * @name GDISP Functionality to be included
- * @{
- */
- /**
- * @brief Should all operations be clipped to the screen and colors validated.
- * @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.
- * @note If defined then all low level and high level GDISP driver routines
- * must check the validity of inputs and do something sensible
- * if they are out of range. It doesn't have to be efficient,
- * just valid.
- */
- #ifndef GDISP_NEED_VALIDATION
- #define GDISP_NEED_VALIDATION TRUE
- #endif
- /**
- * @brief Are clipping functions needed.
- * @details Defaults to TRUE
- */
- #ifndef GDISP_NEED_CLIP
- #define GDISP_NEED_CLIP TRUE
- #endif
- /**
- * @brief Are text functions needed.
- * @details Defaults to TRUE
- */
- #ifndef GDISP_NEED_TEXT
- #define GDISP_NEED_TEXT TRUE
- #endif
- /**
- * @brief Are circle functions needed.
- * @details Defaults to TRUE
- */
- #ifndef GDISP_NEED_CIRCLE
- #define GDISP_NEED_CIRCLE TRUE
- #endif
- /**
- * @brief Are ellipse functions needed.
- * @details Defaults to TRUE
- */
- #ifndef GDISP_NEED_ELLIPSE
- #define GDISP_NEED_ELLIPSE TRUE
- #endif
- /**
- * @brief Are arc functions needed.
- * @details Defaults to FALSE
- * @note Requires the maths library to be included in the link. ie -lm
- */
- #ifndef GDISP_NEED_ARC
- #define GDISP_NEED_ARC FALSE
- #endif
- /**
- * @brief Are convex polygon functions needed.
- * @details Defaults to FALSE
- * @note Convex polygons are those that have no internal angles. That is;
- * you can draw a line from any point on the polygon to any other point
- * on the polygon without it going outside the polygon.
- */
- #ifndef GDISP_NEED_CONVEX_POLYGON
- #define GDISP_NEED_CONVEX_POLYGON FALSE
- #endif
- /**
- * @brief Are scrolling functions needed.
- * @details Defaults to FALSE
- * @note This function must be supported by the low level GDISP driver
- * you have included in your project. If it isn't, defining this
- * option will cause a compile error.
- */
- #ifndef GDISP_NEED_SCROLL
- #define GDISP_NEED_SCROLL FALSE
- #endif
- /**
- * @brief Is the capability to read pixels back needed.
- * @details Defaults to FALSE
- * @note This function must be supported by the low level GDISP driver
- * you have included in your project. If it isn't, defining this
- * option will cause a compile error.
- */
- #ifndef GDISP_NEED_PIXELREAD
- #define GDISP_NEED_PIXELREAD FALSE
- #endif
- /**
- * @brief Control some aspect of the hardware operation.
- * @details Defaults to FALSE
- * @note This allows control of hardware specific features such as
- * screen rotation, backlight levels, contrast etc
- */
- #ifndef GDISP_NEED_CONTROL
- #define GDISP_NEED_CONTROL FALSE
- #endif
- /**
- * @brief Query some aspect of the hardware operation.
- * @details Defaults to FALSE
- * @note This allows query of hardware specific features
- */
- #ifndef GDISP_NEED_QUERY
- #define GDISP_NEED_QUERY FALSE
- #endif
- /**
- * @brief Is the messaging api interface required.
- * @details Defaults to FALSE
- */
- #ifndef GDISP_NEED_MSGAPI
- #define GDISP_NEED_MSGAPI FALSE
- #endif
-/**
- * @}
- *
- * @name GDISP Multi-Threading Options
- * @{
- */
- /**
- * @brief Do the drawing functions need to be thread-safe.
- * @details Defaults to FALSE
- * @note Both GDISP_NEED_MULTITHREAD and GDISP_NEED_ASYNC make
- * the gdisp API thread-safe.
- * @note This is more efficient than GDISP_NEED_ASYNC as it only
- * requires a context switch if something else is already
- * drawing.
- */
- #ifndef GDISP_NEED_MULTITHREAD
- #define GDISP_NEED_MULTITHREAD FALSE
- #endif
- /**
- * @brief Use asynchronous calls (multi-thread safe).
- * @details Defaults to FALSE
- * @note Both GDISP_NEED_MULTITHREAD and GDISP_NEED_ASYNC make
- * the gdisp API thread-safe.
- * @note Turning this on adds two context switches per transaction
- * so it can significantly slow graphics drawing but it allows
- * drawing operations to continue in the background.
- */
- #ifndef GDISP_NEED_ASYNC
- #define GDISP_NEED_ASYNC FALSE
- #endif
-/**
- * @}
- *
- * @name GDISP Fonts
- * @{
- */
- /**
- * @brief Predefined built in fonts
- * @note Turning off the ones you are not using can save program size.
- */
- #ifndef GDISP_INCLUDE_FONT_SMALL
- #define GDISP_INCLUDE_FONT_SMALL TRUE
- #endif
- #ifndef GDISP_INCLUDE_FONT_LARGER
- #define GDISP_INCLUDE_FONT_LARGER TRUE
- #endif
- #ifndef GDISP_INCLUDE_FONT_UI1
- #define GDISP_INCLUDE_FONT_UI1 TRUE
- #endif
- #ifndef GDISP_INCLUDE_FONT_UI2
- #define GDISP_INCLUDE_FONT_UI2 TRUE
- #endif
- #ifndef GDISP_INCLUDE_FONT_LARGENUMBERS
- #define GDISP_INCLUDE_FONT_LARGENUMBERS TRUE
- #endif
-
-/**
- * @}
- *
- * @name GDISP Optional Sizing Parameters
- * @{
- */
- /**
- * @brief The maximum height of a font.
- * @details Either 16 or 32. Defaults to 16
- * @note Setting this to 32 causes the font tables to take
- * twice the internal program memory. Don't do it unless
- * you realy must define an unscaled font larger than 16 bits high.
- */
- #ifndef GDISP_MAX_FONT_HEIGHT
- #define GDISP_MAX_FONT_HEIGHT 16
- #endif
-/**
- * @}
- *
- * @name GDISP Optional Low Level Driver Defines
- * @{
- */
- /**
- * @brief Use a custom board definition even if a board definition exists.
- * @details Defaults to FALSE
- * @details If TRUE, add gdisp_lld_board.h to your project directory and customise it.
- * @note Not all GDISP low level drivers currently use board definition files.
- */
- #ifndef GDISP_USE_CUSTOM_BOARD
- #define GDISP_USE_CUSTOM_BOARD FALSE
- #endif
- /**
- * @brief Set the screen height and width.
- * @note Ignored by some low level GDISP drivers, optional for others.
- * @note Where these values are allowed, a default is always provided be the low level driver.
- * @note The list of GDISP low level drivers that allow these to be set are...
- * WIN32, SSD1289, SSD1963, TestStub
- */
- /* #define GDISP_SCREEN_WIDTH nnnn */
- /* #define GDISP_SCREEN_HEIGHT nnnn */
- /**
- * @brief Define which bus interface to use.
- * @details Only required by the SSD1963 driver.
- * @note This will be replaced eventually by board definition files
- */
- /* #define GDISP_USE_FSMC */
- /* #define GDISP_USE_GPIO */
-/** @} */
-
-#endif /* _GDISP_OPTIONS_H */
-/** @} */
-
+/*
+ ChibiOS/GFX - Copyright (C) 2012, 2013
+ Joel Bodenmann aka Tectu <joel@unormal.org>
+
+ This file is part of ChibiOS/GFX.
+
+ ChibiOS/GFX is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ ChibiOS/GFX is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * @file include/gdisp/options.h
+ * @brief GDISP sub-system options header file.
+ *
+ * @addtogroup GDISP
+ * @{
+ */
+
+#ifndef _GDISP_OPTIONS_H
+#define _GDISP_OPTIONS_H
+
+/**
+ * @name GDISP Functionality to be included
+ * @{
+ */
+ /**
+ * @brief Should all operations be clipped to the screen and colors validated.
+ * @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.
+ * @note If defined then all low level and high level GDISP driver routines
+ * must check the validity of inputs and do something sensible
+ * if they are out of range. It doesn't have to be efficient,
+ * just valid.
+ */
+ #ifndef GDISP_NEED_VALIDATION
+ #define GDISP_NEED_VALIDATION TRUE
+ #endif
+ /**
+ * @brief Are clipping functions needed.
+ * @details Defaults to TRUE
+ */
+ #ifndef GDISP_NEED_CLIP
+ #define GDISP_NEED_CLIP TRUE
+ #endif
+ /**
+ * @brief Are text functions needed.
+ * @details Defaults to TRUE
+ */
+ #ifndef GDISP_NEED_TEXT
+ #define GDISP_NEED_TEXT TRUE
+ #endif
+ /**
+ * @brief Are circle functions needed.
+ * @details Defaults to TRUE
+ */
+ #ifndef GDISP_NEED_CIRCLE
+ #define GDISP_NEED_CIRCLE TRUE
+ #endif
+ /**
+ * @brief Are ellipse functions needed.
+ * @details Defaults to TRUE
+ */
+ #ifndef GDISP_NEED_ELLIPSE
+ #define GDISP_NEED_ELLIPSE TRUE
+ #endif
+ /**
+ * @brief Are arc functions needed.
+ * @details Defaults to FALSE
+ * @note Requires the maths library to be included in the link. ie -lm
+ */
+ #ifndef GDISP_NEED_ARC
+ #define GDISP_NEED_ARC FALSE
+ #endif
+ /**
+ * @brief Are scrolling functions needed.
+ * @details Defaults to FALSE
+ * @note This function must be supported by the low level GDISP driver
+ * you have included in your project. If it isn't, defining this
+ * option will cause a compile error.
+ */
+ #ifndef GDISP_NEED_SCROLL
+ #define GDISP_NEED_SCROLL FALSE
+ #endif
+ /**
+ * @brief Is the capability to read pixels back needed.
+ * @details Defaults to FALSE
+ * @note This function must be supported by the low level GDISP driver
+ * you have included in your project. If it isn't, defining this
+ * option will cause a compile error.
+ */
+ #ifndef GDISP_NEED_PIXELREAD
+ #define GDISP_NEED_PIXELREAD FALSE
+ #endif
+ /**
+ * @brief Control some aspect of the hardware operation.
+ * @details Defaults to FALSE
+ * @note This allows control of hardware specific features such as
+ * screen rotation, backlight levels, contrast etc
+ */
+ #ifndef GDISP_NEED_CONTROL
+ #define GDISP_NEED_CONTROL FALSE
+ #endif
+ /**
+ * @brief Is the messaging api interface required.
+ * @details Defaults to FALSE
+ */
+ #ifndef GDISP_NEED_MSGAPI
+ #define GDISP_NEED_MSGAPI FALSE
+ #endif
+/**
+ * @}
+ *
+ * @name GDISP Multi-Threading Options
+ * @{
+ */
+ /**
+ * @brief Do the drawing functions need to be thread-safe.
+ * @details Defaults to FALSE
+ * @note Both GDISP_NEED_MULTITHREAD and GDISP_NEED_ASYNC make
+ * the gdisp API thread-safe.
+ * @note This is more efficient than GDISP_NEED_ASYNC as it only
+ * requires a context switch if something else is already
+ * drawing.
+ */
+ #ifndef GDISP_NEED_MULTITHREAD
+ #define GDISP_NEED_MULTITHREAD FALSE
+ #endif
+ /**
+ * @brief Use asynchronous calls (multi-thread safe).
+ * @details Defaults to FALSE
+ * @note Both GDISP_NEED_MULTITHREAD and GDISP_NEED_ASYNC make
+ * the gdisp API thread-safe.
+ * @note Turning this on adds two context switches per transaction
+ * so it can significantly slow graphics drawing but it allows
+ * drawing operations to continue in the background.
+ */
+ #ifndef GDISP_NEED_ASYNC
+ #define GDISP_NEED_ASYNC FALSE
+ #endif
+/**
+ * @}
+ *
+ * @name GDISP Fonts
+ * @{
+ */
+ /**
+ * @brief Include the old global font variable definitions
+ * @details Defaults to FALSE
+ */
+ #ifndef GDISP_OLD_FONT_DEFINITIONS
+ #define GDISP_OLD_FONT_DEFINITIONS FALSE
+ #endif
+ /**
+ * @brief Predefined built in fonts
+ * @note Turning off the ones you are not using can save program size.
+ */
+ #ifndef GDISP_INCLUDE_FONT_SMALL
+ #define GDISP_INCLUDE_FONT_SMALL TRUE
+ #endif
+ #ifndef GDISP_INCLUDE_FONT_LARGER
+ #define GDISP_INCLUDE_FONT_LARGER TRUE
+ #endif
+ #ifndef GDISP_INCLUDE_FONT_UI1
+ #define GDISP_INCLUDE_FONT_UI1 TRUE
+ #endif
+ #ifndef GDISP_INCLUDE_FONT_UI2
+ #define GDISP_INCLUDE_FONT_UI2 TRUE
+ #endif
+ #ifndef GDISP_INCLUDE_FONT_LARGENUMBERS
+ #define GDISP_INCLUDE_FONT_LARGENUMBERS TRUE
+ #endif
+
+/**
+ * @}
+ *
+ * @name GDISP Optional Sizing Parameters
+ * @{
+ */
+ /**
+ * @brief The maximum height of a font.
+ * @details Either 16 or 32. Defaults to 16
+ * @note Setting this to 32 causes the font tables to take
+ * twice the internal program memory. Don't do it unless
+ * you realy must define an unscaled font larger than 16 bits high.
+ */
+ #ifndef GDISP_MAX_FONT_HEIGHT
+ #define GDISP_MAX_FONT_HEIGHT 16
+ #endif
+/**
+ * @}
+ *
+ * @name GDISP Optional Low Level Driver Defines
+ * @{
+ */
+ /**
+ * @brief Use a custom board definition even if a board definition exists.
+ * @details Defaults to FALSE
+ * @details If TRUE, add gdisp_lld_board.h to your project directory and customise it.
+ * @note Not all GDISP low level drivers currently use board definition files.
+ */
+ #ifndef GDISP_USE_CUSTOM_BOARD
+ #define GDISP_USE_CUSTOM_BOARD FALSE
+ #endif
+ /**
+ * @brief Set the screen height and width.
+ * @note Ignored by some low level GDISP drivers, optional for others.
+ * @note Where these values are allowed, a default is always provided be the low level driver.
+ * @note The list of GDISP low level drivers that allow these to be set are...
+ * WIN32, SSD1289, SSD1963, TestStub
+ */
+ /* #define GDISP_SCREEN_WIDTH nnnn */
+ /* #define GDISP_SCREEN_HEIGHT nnnn */
+ /**
+ * @brief Define which bus interface to use.
+ * @details Only required by the SSD1963 driver.
+ * @note This will be replaced eventually by board definition files
+ */
+ /* #define GDISP_USE_FSMC */
+ /* #define GDISP_USE_GPIO */
+/** @} */
+
+#endif /* _GDISP_OPTIONS_H */
+/** @} */
+