328 lines
9.6 KiB
C
328 lines
9.6 KiB
C
/*
|
|
* This file is subject to the terms of the GFX License. If a copy of
|
|
* the license was not distributed with this file, you can obtain one at:
|
|
*
|
|
* http://chibios-gfx.com/license.html
|
|
*/
|
|
|
|
/**
|
|
* @file include/gdisp/lld/gdisp_lld.h
|
|
* @brief GDISP Graphic Driver subsystem low level driver header.
|
|
*
|
|
* @addtogroup GDISP
|
|
* @{
|
|
*/
|
|
|
|
#ifndef _GDISP_LLD_H
|
|
#define _GDISP_LLD_H
|
|
|
|
#if GFX_USE_GDISP || defined(__DOXYGEN__)
|
|
|
|
/*===========================================================================*/
|
|
/* Error checks. */
|
|
/*===========================================================================*/
|
|
|
|
/**
|
|
* @name GDISP hardware accelerated support
|
|
* @{
|
|
*/
|
|
/**
|
|
* @brief Hardware accelerated line drawing.
|
|
* @details If set to @p FALSE software emulation is used.
|
|
*/
|
|
#ifndef GDISP_HARDWARE_LINES
|
|
#define GDISP_HARDWARE_LINES FALSE
|
|
#endif
|
|
|
|
/**
|
|
* @brief Hardware accelerated screen clears.
|
|
* @details If set to @p FALSE software emulation is used.
|
|
*/
|
|
#ifndef GDISP_HARDWARE_CLEARS
|
|
#define GDISP_HARDWARE_CLEARS FALSE
|
|
#endif
|
|
|
|
/**
|
|
* @brief Hardware accelerated rectangular fills.
|
|
* @details If set to @p FALSE software emulation is used.
|
|
*/
|
|
#ifndef GDISP_HARDWARE_FILLS
|
|
#define GDISP_HARDWARE_FILLS FALSE
|
|
#endif
|
|
|
|
/**
|
|
* @brief Hardware accelerated fills from an image.
|
|
* @details If set to @p FALSE software emulation is used.
|
|
*/
|
|
#ifndef GDISP_HARDWARE_BITFILLS
|
|
#define GDISP_HARDWARE_BITFILLS FALSE
|
|
#endif
|
|
|
|
/**
|
|
* @brief Hardware accelerated circles.
|
|
* @details If set to @p FALSE software emulation is used.
|
|
*/
|
|
#ifndef GDISP_HARDWARE_CIRCLES
|
|
#define GDISP_HARDWARE_CIRCLES FALSE
|
|
#endif
|
|
|
|
/**
|
|
* @brief Hardware accelerated filled circles.
|
|
* @details If set to @p FALSE software emulation is used.
|
|
*/
|
|
#ifndef GDISP_HARDWARE_CIRCLEFILLS
|
|
#define GDISP_HARDWARE_CIRCLEFILLS FALSE
|
|
#endif
|
|
|
|
/**
|
|
* @brief Hardware accelerated ellipses.
|
|
* @details If set to @p FALSE software emulation is used.
|
|
*/
|
|
#ifndef GDISP_HARDWARE_ELLIPSES
|
|
#define GDISP_HARDWARE_ELLIPSES FALSE
|
|
#endif
|
|
|
|
/**
|
|
* @brief Hardware accelerated filled ellipses.
|
|
* @details If set to @p FALSE software emulation is used.
|
|
*/
|
|
#ifndef GDISP_HARDWARE_ELLIPSEFILLS
|
|
#define GDISP_HARDWARE_ELLIPSEFILLS FALSE
|
|
#endif
|
|
|
|
/**
|
|
* @brief Hardware accelerated arc's.
|
|
* @details If set to @p FALSE software emulation is used.
|
|
*/
|
|
#ifndef GDISP_HARDWARE_ARCS
|
|
#define GDISP_HARDWARE_ARCS FALSE
|
|
#endif
|
|
|
|
/**
|
|
* @brief Hardware accelerated filled arcs.
|
|
* @details If set to @p FALSE software emulation is used.
|
|
*/
|
|
#ifndef GDISP_HARDWARE_ARCFILLS
|
|
#define GDISP_HARDWARE_ARCFILLS FALSE
|
|
#endif
|
|
|
|
/**
|
|
* @brief Hardware accelerated text drawing.
|
|
* @details If set to @p FALSE software emulation is used.
|
|
*/
|
|
#ifndef GDISP_HARDWARE_TEXT
|
|
#define GDISP_HARDWARE_TEXT FALSE
|
|
#endif
|
|
|
|
/**
|
|
* @brief Hardware accelerated text drawing with a filled background.
|
|
* @details If set to @p FALSE software emulation is used.
|
|
*/
|
|
#ifndef GDISP_HARDWARE_TEXTFILLS
|
|
#define GDISP_HARDWARE_TEXTFILLS FALSE
|
|
#endif
|
|
|
|
/**
|
|
* @brief Hardware accelerated scrolling.
|
|
* @details If set to @p FALSE there is no support for scrolling.
|
|
*/
|
|
#ifndef GDISP_HARDWARE_SCROLL
|
|
#define GDISP_HARDWARE_SCROLL FALSE
|
|
#endif
|
|
|
|
/**
|
|
* @brief Reading back of pixel values.
|
|
* @details If set to @p FALSE there is no support for pixel read-back.
|
|
*/
|
|
#ifndef GDISP_HARDWARE_PIXELREAD
|
|
#define GDISP_HARDWARE_PIXELREAD FALSE
|
|
#endif
|
|
|
|
/**
|
|
* @brief The driver supports one or more control commands.
|
|
* @details If set to @p FALSE there is no support for control commands.
|
|
*/
|
|
#ifndef GDISP_HARDWARE_CONTROL
|
|
#define GDISP_HARDWARE_CONTROL FALSE
|
|
#endif
|
|
|
|
/**
|
|
* @brief The driver supports a non-standard query.
|
|
* @details If set to @p FALSE there is no support for non-standard queries.
|
|
*/
|
|
#ifndef GDISP_HARDWARE_QUERY
|
|
#define GDISP_HARDWARE_QUERY FALSE
|
|
#endif
|
|
|
|
/**
|
|
* @brief The driver supports a clipping in hardware.
|
|
* @details If set to @p FALSE there is no support for non-standard queries.
|
|
*/
|
|
#ifndef GDISP_HARDWARE_CLIP
|
|
#define GDISP_HARDWARE_CLIP FALSE
|
|
#endif
|
|
/** @} */
|
|
|
|
/**
|
|
* @name GDISP software algorithm choices
|
|
* @{
|
|
*/
|
|
/**
|
|
* @brief For filled text drawing, use a background fill and then draw
|
|
* the text instead of using a blit or direct pixel drawing.
|
|
* @details If set to @p TRUE background fill and then text draw is used.
|
|
* @note This is ignored if hardware accelerated text is supported.
|
|
*/
|
|
#ifndef GDISP_SOFTWARE_TEXTFILLDRAW
|
|
#define GDISP_SOFTWARE_TEXTFILLDRAW FALSE
|
|
#endif
|
|
|
|
/**
|
|
* @brief For filled text drawing, when using a bitmap blit
|
|
* use a column by column buffer rather than a full character
|
|
* buffer to save memory at a small performance cost.
|
|
* @details If set to @p TRUE background fill one character column at a time.
|
|
* @note This is ignored if software text using blit is not being used.
|
|
*/
|
|
#ifndef GDISP_SOFTWARE_TEXTBLITCOLUMN
|
|
#define GDISP_SOFTWARE_TEXTBLITCOLUMN FALSE
|
|
#endif
|
|
/** @} */
|
|
|
|
/**
|
|
* @name GDISP pixel format choices
|
|
* @{
|
|
*/
|
|
/**
|
|
* @brief The native pixel format for this device
|
|
* @note Should be set to one of the following:
|
|
* GDISP_PIXELFORMAT_RGB565
|
|
* GDISP_PIXELFORMAT_RGB888
|
|
* GDISP_PIXELFORMAT_RGB444
|
|
* GDISP_PIXELFORMAT_RGB332
|
|
* GDISP_PIXELFORMAT_RGB666
|
|
* GDISP_PIXELFORMAT_CUSTOM
|
|
* @note If you set GDISP_PIXELFORMAT_CUSTOM you need to also define
|
|
* color_t, RGB2COLOR(r,g,b), HTML2COLOR(h),
|
|
* RED_OF(c), GREEN_OF(c), BLUE_OF(c),
|
|
* COLOR(c) and MASKCOLOR.
|
|
*/
|
|
#ifndef GDISP_PIXELFORMAT
|
|
#define GDISP_PIXELFORMAT GDISP_PIXELFORMAT_ERROR
|
|
#endif
|
|
|
|
/**
|
|
* @brief Do pixels require packing for a blit
|
|
* @note Is only valid for a pixel format that doesn't fill it's datatype. ie formats:
|
|
* GDISP_PIXELFORMAT_RGB888
|
|
* GDISP_PIXELFORMAT_RGB444
|
|
* GDISP_PIXELFORMAT_RGB666
|
|
* GDISP_PIXELFORMAT_CUSTOM
|
|
* @note If you use GDISP_PIXELFORMAT_CUSTOM and packed bit fills
|
|
* you need to also define @p gdispPackPixels(buf,cx,x,y,c)
|
|
* @note If you are using GDISP_HARDWARE_BITFILLS = FALSE then the pixel
|
|
* format must not be a packed format as the software blit does
|
|
* not support packed pixels
|
|
* @note Very few cases should actually require packed pixels as the low
|
|
* level driver can also pack on the fly as it is sending it
|
|
* to the graphics device.
|
|
*/
|
|
#ifndef GDISP_PACKED_PIXELS
|
|
#define GDISP_PACKED_PIXELS FALSE
|
|
#endif
|
|
|
|
/**
|
|
* @brief Do lines of pixels require packing for a blit
|
|
* @note Ignored if GDISP_PACKED_PIXELS is FALSE
|
|
*/
|
|
#ifndef GDISP_PACKED_LINES
|
|
#define GDISP_PACKED_LINES FALSE
|
|
#endif
|
|
/** @} */
|
|
|
|
/*===========================================================================*/
|
|
/* External declarations. */
|
|
/*===========================================================================*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Core functions */
|
|
extern bool_t gdisp_lld_init(void);
|
|
|
|
/* Some of these functions will be implemented in software by the high level driver
|
|
depending on the GDISP_HARDWARE_XXX macros defined in gdisp_lld_config.h.
|
|
*/
|
|
|
|
/* Drawing functions */
|
|
extern void gdisp_lld_clear(color_t color);
|
|
extern void gdisp_lld_draw_pixel(coord_t x, coord_t y, color_t color);
|
|
extern void gdisp_lld_fill_area(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color);
|
|
extern void gdisp_lld_blit_area_ex(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);
|
|
extern void gdisp_lld_draw_line(coord_t x0, coord_t y0, coord_t x1, coord_t y1, color_t color);
|
|
|
|
/* Circular Drawing Functions */
|
|
#if GDISP_NEED_CIRCLE
|
|
extern void gdisp_lld_draw_circle(coord_t x, coord_t y, coord_t radius, color_t color);
|
|
extern void gdisp_lld_fill_circle(coord_t x, coord_t y, coord_t radius, color_t color);
|
|
#endif
|
|
|
|
#if GDISP_NEED_ELLIPSE
|
|
extern void gdisp_lld_draw_ellipse(coord_t x, coord_t y, coord_t a, coord_t b, color_t color);
|
|
extern void gdisp_lld_fill_ellipse(coord_t x, coord_t y, coord_t a, coord_t b, color_t color);
|
|
#endif
|
|
|
|
/* Arc Drawing Functions */
|
|
#if GDISP_NEED_ARC
|
|
extern void gdisp_lld_draw_arc(coord_t x, coord_t y, coord_t radius, coord_t startangle, coord_t endangle, color_t color);
|
|
extern void gdisp_lld_fill_arc(coord_t x, coord_t y, coord_t radius, coord_t startangle, coord_t endangle, color_t color);
|
|
#endif
|
|
|
|
/* Text Rendering Functions */
|
|
#if GDISP_NEED_TEXT
|
|
extern void gdisp_lld_draw_char(coord_t x, coord_t y, char c, font_t font, color_t color);
|
|
extern void gdisp_lld_fill_char(coord_t x, coord_t y, char c, font_t font, color_t color, color_t bgcolor);
|
|
#endif
|
|
|
|
/* Pixel readback */
|
|
#if GDISP_NEED_PIXELREAD
|
|
extern color_t gdisp_lld_get_pixel_color(coord_t x, coord_t y);
|
|
#endif
|
|
|
|
/* Scrolling Function - clears the area scrolled out */
|
|
#if GDISP_NEED_SCROLL
|
|
extern void gdisp_lld_vertical_scroll(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
|
|
extern void gdisp_lld_control(unsigned what, void *value);
|
|
#endif
|
|
|
|
/* Query driver specific data */
|
|
#if GDISP_NEED_QUERY
|
|
extern void *gdisp_lld_query(unsigned what);
|
|
#endif
|
|
|
|
/* Clipping Functions */
|
|
#if GDISP_NEED_CLIP
|
|
extern void gdisp_lld_set_clip(coord_t x, coord_t y, coord_t cx, coord_t cy);
|
|
#endif
|
|
|
|
/* Messaging API */
|
|
#if GDISP_NEED_MSGAPI
|
|
#include "gdisp_lld_msgs.h"
|
|
extern void gdisp_lld_msg_dispatch(gdisp_lld_msg_t *msg);
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* GFX_USE_GDISP */
|
|
|
|
#endif /* _GDISP_LLD_H */
|
|
/** @} */
|
|
|