30 changed files with 1857 additions and 2833 deletions
File diff suppressed because it is too large
@ -1,184 +0,0 @@ |
|||
<doxygenlayout version="1.0"> |
|||
<!-- Navigation index tabs for HTML output --> |
|||
<navindex> |
|||
<tab type="mainpage" visible="yes" title=""/> |
|||
<tab type="pages" visible="yes" title="" intro=""/> |
|||
<tab type="modules" visible="yes" title="" intro=""/> |
|||
<tab type="namespaces" visible="yes" title=""> |
|||
<tab type="namespaces" visible="yes" title="" intro=""/> |
|||
<tab type="namespacemembers" visible="yes" title="" intro=""/> |
|||
</tab> |
|||
<tab type="classes" visible="yes" title=""> |
|||
<tab type="classes" visible="yes" title="" intro=""/> |
|||
<tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/> |
|||
<tab type="hierarchy" visible="yes" title="" intro=""/> |
|||
<tab type="classmembers" visible="yes" title="" intro=""/> |
|||
</tab> |
|||
<tab type="files" visible="yes" title=""> |
|||
<tab type="files" visible="yes" title="" intro=""/> |
|||
<tab type="globals" visible="yes" title="" intro=""/> |
|||
</tab> |
|||
<tab type="dirs" visible="yes" title="" intro=""/> |
|||
<tab type="examples" visible="yes" title="" intro=""/> |
|||
</navindex> |
|||
|
|||
<!-- Layout definition for a class page --> |
|||
<class> |
|||
<briefdescription visible="no"/> |
|||
<detaileddescription title=""/> |
|||
<includes visible="$SHOW_INCLUDE_FILES"/> |
|||
<inheritancegraph visible="$CLASS_GRAPH"/> |
|||
<collaborationgraph visible="$COLLABORATION_GRAPH"/> |
|||
<allmemberslink visible="yes"/> |
|||
<memberdecl> |
|||
<nestedclasses visible="yes" title=""/> |
|||
<publictypes title=""/> |
|||
<publicslots title=""/> |
|||
<signals title=""/> |
|||
<publicmethods title=""/> |
|||
<publicstaticmethods title=""/> |
|||
<publicattributes title=""/> |
|||
<publicstaticattributes title=""/> |
|||
<protectedtypes title=""/> |
|||
<protectedslots title=""/> |
|||
<protectedmethods title=""/> |
|||
<protectedstaticmethods title=""/> |
|||
<protectedattributes title=""/> |
|||
<protectedstaticattributes title=""/> |
|||
<packagetypes title=""/> |
|||
<packagemethods title=""/> |
|||
<packagestaticmethods title=""/> |
|||
<packageattributes title=""/> |
|||
<packagestaticattributes title=""/> |
|||
<properties title=""/> |
|||
<events title=""/> |
|||
<privatetypes title=""/> |
|||
<privateslots title=""/> |
|||
<privatemethods title=""/> |
|||
<privatestaticmethods title=""/> |
|||
<privateattributes title=""/> |
|||
<privatestaticattributes title=""/> |
|||
<friends title=""/> |
|||
<related title="" subtitle=""/> |
|||
<membergroups visible="yes"/> |
|||
</memberdecl> |
|||
<memberdef> |
|||
<typedefs title=""/> |
|||
<enums title=""/> |
|||
<constructors title=""/> |
|||
<functions title=""/> |
|||
<related title=""/> |
|||
<variables title=""/> |
|||
<properties title=""/> |
|||
<events title=""/> |
|||
</memberdef> |
|||
<usedfiles visible="$SHOW_USED_FILES"/> |
|||
<authorsection visible="yes"/> |
|||
</class> |
|||
|
|||
<!-- Layout definition for a namespace page --> |
|||
<namespace> |
|||
<briefdescription visible="no"/> |
|||
<detaileddescription title=""/> |
|||
<memberdecl> |
|||
<nestednamespaces visible="yes" title=""/> |
|||
<classes visible="yes" title=""/> |
|||
<typedefs title=""/> |
|||
<enums title=""/> |
|||
<functions title=""/> |
|||
<variables title=""/> |
|||
<membergroups visible="yes"/> |
|||
</memberdecl> |
|||
<memberdef> |
|||
<typedefs title=""/> |
|||
<enums title=""/> |
|||
<functions title=""/> |
|||
<variables title=""/> |
|||
</memberdef> |
|||
<authorsection visible="yes"/> |
|||
</namespace> |
|||
|
|||
<!-- Layout definition for a file page --> |
|||
<file> |
|||
<briefdescription visible="no"/> |
|||
<detaileddescription title=""/> |
|||
<includes visible="$SHOW_INCLUDE_FILES"/> |
|||
<includegraph visible="$INCLUDE_GRAPH"/> |
|||
<includedbygraph visible="$INCLUDED_BY_GRAPH"/> |
|||
<sourcelink visible="yes"/> |
|||
<memberdecl> |
|||
<classes visible="yes" title=""/> |
|||
<namespaces visible="yes" title=""/> |
|||
<functions title=""/> |
|||
<variables title=""/> |
|||
<defines title=""/> |
|||
<typedefs title=""/> |
|||
<enums title=""/> |
|||
<membergroups visible="yes"/> |
|||
</memberdecl> |
|||
<memberdef> |
|||
<functions title=""/> |
|||
<variables title=""/> |
|||
<defines title=""/> |
|||
<typedefs title=""/> |
|||
<enums title=""/> |
|||
</memberdef> |
|||
<authorsection/> |
|||
</file> |
|||
|
|||
<!-- Layout definition for a group page --> |
|||
<group> |
|||
<briefdescription visible="no"/> |
|||
<groupgraph visible="$GROUP_GRAPHS"/> |
|||
<detaileddescription title=""/> |
|||
<memberdecl> |
|||
<classes visible="yes" title=""/> |
|||
<namespaces visible="yes" title=""/> |
|||
<dirs visible="yes" title=""/> |
|||
<nestedgroups visible="yes" title=""/> |
|||
<files visible="yes" title=""/> |
|||
<functions title=""/> |
|||
<variables title=""/> |
|||
<membergroups visible="yes"/> |
|||
<defines title=""/> |
|||
<typedefs title=""/> |
|||
<enums title=""/> |
|||
<enumvalues title=""/> |
|||
<signals title=""/> |
|||
<publicslots title=""/> |
|||
<protectedslots title=""/> |
|||
<privateslots title=""/> |
|||
<events title=""/> |
|||
<properties title=""/> |
|||
<friends title=""/> |
|||
</memberdecl> |
|||
<memberdef> |
|||
<pagedocs/> |
|||
<functions title=""/> |
|||
<variables title=""/> |
|||
<defines title=""/> |
|||
<typedefs title=""/> |
|||
<enums title=""/> |
|||
<enumvalues title=""/> |
|||
<signals title=""/> |
|||
<publicslots title=""/> |
|||
<protectedslots title=""/> |
|||
<privateslots title=""/> |
|||
<events title=""/> |
|||
<properties title=""/> |
|||
<friends title=""/> |
|||
</memberdef> |
|||
<authorsection visible="yes"/> |
|||
</group> |
|||
|
|||
<!-- Layout definition for a directory page --> |
|||
<directory> |
|||
<briefdescription visible="no"/> |
|||
<directorygraph visible="yes"/> |
|||
<detaileddescription title=""/> |
|||
<memberdecl> |
|||
<dirs visible="yes"/> |
|||
<files visible="yes"/> |
|||
</memberdecl> |
|||
</directory> |
|||
</doxygenlayout> |
@ -1,560 +0,0 @@ |
|||
/*
|
|||
ChibiOS/RT - Copyright (C) 2012 |
|||
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 templates/gdisp_lld.c |
|||
* @brief GDISP Graphics Driver subsystem low level driver source template. |
|||
* |
|||
* @addtogroup GDISP |
|||
* @{ |
|||
*/ |
|||
|
|||
#include "ch.h" |
|||
#include "hal.h" |
|||
#include "gdisp.h" |
|||
|
|||
#if GFX_USE_GDISP || defined(__DOXYGEN__) |
|||
|
|||
/* Include the emulation code for things we don't support */ |
|||
#include "gdisp_emulation.c" |
|||
|
|||
#if GDISP_NEED_TEXT && GDISP_HARDWARE_TEXT |
|||
#include "gdisp_fonts.h" |
|||
#endif |
|||
|
|||
/* 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 exported functions. */ |
|||
/*===========================================================================*/ |
|||
|
|||
/* ---- Required Routines ---- */ |
|||
/*
|
|||
The following 2 routines are required. |
|||
All other routines are optional. |
|||
*/ |
|||
|
|||
/**
|
|||
* @brief Low level GDISP driver initialisation. |
|||
* @return TRUE if successful, FALSE on error. |
|||
* |
|||
* @notapi |
|||
*/ |
|||
bool_t GDISP_LLD(init)(void) { |
|||
/* Initialise your display */ |
|||
|
|||
/* Initialise the GDISP structure to match */ |
|||
GDISP.Width = GDISP_SCREEN_WIDTH; |
|||
GDISP.Height = GDISP_SCREEN_HEIGHT; |
|||
GDISP.Orientation = GDISP_ROTATE_0; |
|||
GDISP.Powermode = powerOn; |
|||
GDISP.Backlight = 100; |
|||
GDISP.Contrast = 50; |
|||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP |
|||
GDISP.clipx0 = 0; |
|||
GDISP.clipy0 = 0; |
|||
GDISP.clipx1 = GDISP.Width; |
|||
GDISP.clipy1 = GDISP.Height; |
|||
#endif |
|||
return TRUE; |
|||
} |
|||
|
|||
/**
|
|||
* @brief Draws a pixel on the display. |
|||
* |
|||
* @param[in] x X location of the pixel |
|||
* @param[in] y Y location of the pixel |
|||
* @param[in] color The color of the pixel |
|||
* |
|||
* @notapi |
|||
*/ |
|||
void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) { |
|||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP |
|||
if (x < GDISP.clipx0 || y < GDISP.clipy0 || x >= GDISP.clipx1 || y >= GDISP.clipy1) return; |
|||
#endif |
|||
/* Code here */ |
|||
} |
|||
|
|||
/* ---- Optional Routines ---- */ |
|||
/*
|
|||
All the below routines are optional. |
|||
Defining them will increase speed but everything |
|||
will work if they are not defined. |
|||
If you are not using a routine - turn it off using |
|||
the appropriate GDISP_HARDWARE_XXXX macro. |
|||
Don't bother coding for obvious similar routines if |
|||
there is no performance penalty as the emulation software |
|||
makes a good job of using similar routines. |
|||
eg. If fillarea() is defined there is little |
|||
point in defining clear() unless the |
|||
performance bonus is significant. |
|||
For good performance it is suggested to implement |
|||
fillarea() and blitarea(). |
|||
*/ |
|||
|
|||
#if GDISP_HARDWARE_CLEARS || defined(__DOXYGEN__) |
|||
/**
|
|||
* @brief Clear the display. |
|||
* @note Optional - The high level driver can emulate using software. |
|||
* |
|||
* @param[in] color The color of the pixel |
|||
* |
|||
* @notapi |
|||
*/ |
|||
void GDISP_LLD(clear)(color_t color) { |
|||
/* Code here */ |
|||
} |
|||
#endif |
|||
|
|||
#if GDISP_HARDWARE_LINES || defined(__DOXYGEN__) |
|||
/**
|
|||
* @brief Draw a line. |
|||
* @note Optional - The high level driver can emulate using software. |
|||
* |
|||
* @param[in] x0, y0 The start of the line |
|||
* @param[in] x1, y1 The end of the line |
|||
* @param[in] color The color of the line |
|||
* |
|||
* @notapi |
|||
*/ |
|||
void GDISP_LLD(drawline)(coord_t x0, coord_t y0, coord_t x1, coord_t y1, color_t color) { |
|||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP |
|||
/* Code here */ |
|||
#endif |
|||
/* Code here */ |
|||
} |
|||
#endif |
|||
|
|||
#if GDISP_HARDWARE_FILLS || defined(__DOXYGEN__) |
|||
/**
|
|||
* @brief Fill an area with a color. |
|||
* @note Optional - The high level driver can emulate using software. |
|||
* |
|||
* @param[in] x, y The start filled area |
|||
* @param[in] cx, cy The width and height to be filled |
|||
* @param[in] color The color of the fill |
|||
* |
|||
* @notapi |
|||
*/ |
|||
void GDISP_LLD(fillarea)(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color) { |
|||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP |
|||
if (x < GDISP.clipx0) { cx -= GDISP.clipx0 - x; x = GDISP.clipx0; } |
|||
if (y < GDISP.clipy0) { cy -= GDISP.clipy0 - y; y = GDISP.clipy0; } |
|||
if (cx <= 0 || cy <= 0 || x >= GDISP.clipx1 || y >= GDISP.clipy1) return; |
|||
if (x+cx > GDISP.clipx1) cx = GDISP.clipx1 - x; |
|||
if (y+cy > GDISP.clipy1) cy = GDISP.clipy1 - y; |
|||
#endif |
|||
/* Code here */ |
|||
} |
|||
#endif |
|||
|
|||
#if GDISP_HARDWARE_BITFILLS || defined(__DOXYGEN__) |
|||
/**
|
|||
* @brief Fill an area with a bitmap. |
|||
* @note Optional - The high level driver can emulate using software. |
|||
* |
|||
* @param[in] x, y The start filled area |
|||
* @param[in] cx, cy The width and height to be filled |
|||
* @param[in] srcx, srcy The bitmap position to start the fill from |
|||
* @param[in] srccx The width of a line in the bitmap. |
|||
* @param[in] buffer The pixels to use to fill the area. |
|||
* |
|||
* @notapi |
|||
*/ |
|||
void GDISP_LLD(blitareaex)(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) { |
|||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP |
|||
if (x < GDISP.clipx0) { cx -= GDISP.clipx0 - x; srcx += GDISP.clipx0 - x; x = GDISP.clipx0; } |
|||
if (y < GDISP.clipy0) { cy -= GDISP.clipy0 - y; srcy += GDISP.clipy0 - y; y = GDISP.clipy0; } |
|||
if (srcx+cx > srccx) cx = srccx - srcx; |
|||
if (cx <= 0 || cy <= 0 || x >= GDISP.clipx1 || y >= GDISP.clipy1) return; |
|||
if (x+cx > GDISP.clipx1) cx = GDISP.clipx1 - x; |
|||
if (y+cy > GDISP.clipy1) cy = GDISP.clipy1 - y; |
|||
#endif |
|||
/* Code here */ |
|||
} |
|||
#endif |
|||
|
|||
/* Circular Drawing Functions */ |
|||
#if (GDISP_NEED_CIRCLE && GDISP_HARDWARE_CIRCLES) || defined(__DOXYGEN__) |
|||
/**
|
|||
* @brief Draw a circle. |
|||
* @note Optional - The high level driver can emulate using software. |
|||
* @note If GDISP_NEED_CLIPPING is defined this routine MUST behave |
|||
* correctly if the circle is over the edges of the screen. |
|||
* |
|||
* @param[in] x, y The centre of the circle |
|||
* @param[in] radius The radius of the circle |
|||
* @param[in] color The color of the circle |
|||
* |
|||
* @notapi |
|||
*/ |
|||
void GDISP_LLD(drawcircle)(coord_t x, coord_t y, coord_t radius, color_t color) { |
|||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP |
|||
/* Code here */ |
|||
#endif |
|||
/* Code here */ |
|||
} |
|||
#endif |
|||
|
|||
#if (GDISP_NEED_CIRCLE && GDISP_HARDWARE_CIRCLEFILLS) || defined(__DOXYGEN__) |
|||
/**
|
|||
* @brief Create a filled circle. |
|||
* @note Optional - The high level driver can emulate using software. |
|||
* @note If GDISP_NEED_CLIPPING is defined this routine MUST behave |
|||
* correctly if the circle is over the edges of the screen. |
|||
* |
|||
* @param[in] x, y The centre of the circle |
|||
* @param[in] radius The radius of the circle |
|||
* @param[in] color The color of the circle |
|||
* |
|||
* @notapi |
|||
*/ |
|||
void GDISP_LLD(fillcircle)(coord_t x, coord_t y, coord_t radius, color_t color) { |
|||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP |
|||
/* Code here */ |
|||
#endif |
|||
/* Code here */ |
|||
} |
|||
#endif |
|||
|
|||
#if (GDISP_NEED_ELLIPSE && GDISP_HARDWARE_ELLIPSES) || defined(__DOXYGEN__) |
|||
/**
|
|||
* @brief Draw an ellipse. |
|||
* @note Optional - The high level driver can emulate using software. |
|||
* @note If GDISP_NEED_CLIPPING is defined this routine MUST behave |
|||
* correctly if the ellipse is over the edges of the screen. |
|||
* |
|||
* @param[in] x, y The centre of the ellipse |
|||
* @param[in] a, b The dimensions of the ellipse |
|||
* @param[in] color The color of the ellipse |
|||
* |
|||
* @notapi |
|||
*/ |
|||
void GDISP_LLD(drawellipse)(coord_t x, coord_t y, coord_t a, coord_t b, color_t color) { |
|||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP |
|||
/* Code here */ |
|||
#endif |
|||
/* Code here */ |
|||
} |
|||
#endif |
|||
|
|||
#if (GDISP_NEED_ELLIPSE && GDISP_HARDWARE_ELLIPSEFILLS) || defined(__DOXYGEN__) |
|||
/**
|
|||
* @brief Create a filled ellipse. |
|||
* @note Optional - The high level driver can emulate using software. |
|||
* @note If GDISP_NEED_CLIPPING is defined this routine MUST behave |
|||
* correctly if the ellipse is over the edges of the screen. |
|||
* |
|||
* @param[in] x, y The centre of the ellipse |
|||
* @param[in] a, b The dimensions of the ellipse |
|||
* @param[in] color The color of the ellipse |
|||
* |
|||
* @notapi |
|||
*/ |
|||
void GDISP_LLD(fillellipse)(coord_t x, coord_t y, coord_t a, coord_t b, color_t color) { |
|||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP |
|||
/* Code here */ |
|||
#endif |
|||
/* Code here */ |
|||
} |
|||
#endif |
|||
|
|||
/* Arc Drawing Functions */ |
|||
#if (GDISP_NEED_ARC && GDISP_HARDWARE_ARCS) || defined(__DOXYGEN__) |
|||
/**
|
|||
* @brief Draw an arc. |
|||
* @note Optional - The high level driver can emulate using software. |
|||
* @note If GDISP_NEED_CLIPPING is defined this routine MUST behave |
|||
* correctly if the circle is over the edges of the screen. |
|||
* |
|||
* @param[in] x, y The centre of the arc circle |
|||
* @param[in] radius The radius of the arc circle |
|||
* @param[in] startangle, endangle The start and end angles for the arc (0..359) |
|||
* @param[in] color The color of the circle |
|||
* |
|||
* @notapi |
|||
*/ |
|||
void GDISP_LLD(drawarc)(coord_t x, coord_t y, coord_t radius, coord_t startangle, coord_t endangle, color_t color) { |
|||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP |
|||
/* Code here */ |
|||
#endif |
|||
/* Code here */ |
|||
} |
|||
#endif |
|||
|
|||
#if (GDISP_NEED_ARC && GDISP_HARDWARE_ARCFILLS) || defined(__DOXYGEN__) |
|||
/**
|
|||
* @brief Create a filled arc. |
|||
* @note Optional - The high level driver can emulate using software. |
|||
* @note If GDISP_NEED_CLIPPING is defined this routine MUST behave |
|||
* correctly if the circle is over the edges of the screen. |
|||
* |
|||
* @param[in] x, y The centre of the arc circle |
|||
* @param[in] radius The radius of the arc circle |
|||
* @param[in] startangle, endangle The start and end angles for the arc (0..359) |
|||
* @param[in] color The color of the circle |
|||
* |
|||
* @notapi |
|||
*/ |
|||
void GDISP_LLD(fillarc)(coord_t x, coord_t y, coord_t radius, coord_t startangle, coord_t endangle, color_t color) { |
|||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP |
|||
/* Code here */ |
|||
#endif |
|||
/* Code here */ |
|||
} |
|||
#endif |
|||
|
|||
#if (GDISP_NEED_TEXT && GDISP_HARDWARE_TEXT) || defined(__DOXYGEN__) |
|||
/**
|
|||
* @brief Draw a character using a transparent background. |
|||
* @note Optional - The high level driver can emulate using software. |
|||
* |
|||
* @param[in] x, y The top-left corner of the text |
|||
* @param[in] c The character to print |
|||
* @param[in] font The font to use |
|||
* @param[in] color The color of the character |
|||
* |
|||
* @notapi |
|||
*/ |
|||
void GDISP_LLD(drawchar)(coord_t x, coord_t y, char c, font_t font, color_t color) { |
|||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP |
|||
/* Code here */ |
|||
#endif |
|||
/* Code here */ |
|||
} |
|||
#endif |
|||
|
|||
#if (GDISP_NEED_TEXT && GDISP_HARDWARE_TEXTFILLS) || defined(__DOXYGEN__) |
|||
/**
|
|||
* @brief Draw a character using a filled background. |
|||
* @note Optional - The high level driver can emulate using software. |
|||
* |
|||
* @param[in] x, y The top-left corner of the text |
|||
* @param[in] c The character to print |
|||
* @param[in] font The font to use |
|||
* @param[in] color The color of the character |
|||
* @param[in] bgcolor The background color |
|||
* |
|||
* @notapi |
|||
*/ |
|||
void GDISP_LLD(fillchar)(coord_t x, coord_t y, char c, font_t font, color_t color, color_t bgcolor) { |
|||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP |
|||
/* Code here */ |
|||
#endif |
|||
/* Code here */ |
|||
} |
|||
#endif |
|||
|
|||
#if (GDISP_NEED_PIXELREAD && GDISP_HARDWARE_PIXELREAD) || defined(__DOXYGEN__) |
|||
/**
|
|||
* @brief Get the color of a particular pixel. |
|||
* @note Optional. |
|||
* @note If x,y is off the screen, the result is undefined. |
|||
* @return The color of the specified pixel. |
|||
* |
|||
* @param[in] x, y The start of the text |
|||
* |
|||
* @notapi |
|||
*/ |
|||
color_t GDISP_LLD(getpixelcolor)(coord_t x, coord_t y) { |
|||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP |
|||
if (x < 0 || x >= GDISP.Width || y < 0 || y >= GDISP.Height) return 0; |
|||
#endif |
|||
/* Code here */ |
|||
} |
|||
#endif |
|||
|
|||
#if (GDISP_NEED_SCROLL && GDISP_HARDWARE_SCROLL) || defined(__DOXYGEN__) |
|||
/**
|
|||
* @brief Scroll vertically a section of the screen. |
|||
* @note Optional. |
|||
* @note If x,y + cx,cy is off the screen, the result is undefined. |
|||
* @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. |
|||
* |
|||
* @notapi |
|||
*/ |
|||
void GDISP_LLD(verticalscroll)(coord_t x, coord_t y, coord_t cx, coord_t cy, int lines, color_t bgcolor) { |
|||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP |
|||
if (x < GDISP.clipx0) { cx -= GDISP.clipx0 - x; x = GDISP.clipx0; } |
|||
if (y < GDISP.clipy0) { cy -= GDISP.clipy0 - y; y = GDISP.clipy0; } |
|||
if (!lines || cx <= 0 || cy <= 0 || x >= GDISP.clipx1 || y >= GDISP.clipy1) return; |
|||
if (x+cx > GDISP.clipx1) cx = GDISP.clipx1 - x; |
|||
if (y+cy > GDISP.clipy1) cy = GDISP.clipy1 - y; |
|||
#endif |
|||
/* Code here */ |
|||
} |
|||
#endif |
|||
|
|||
#if (GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL) || defined(__DOXYGEN__) |
|||
/**
|
|||
* @brief Driver Control |
|||
* @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. |
|||
* |
|||
* @param[in] what What to do. |
|||
* @param[in] value The value to use (always cast to a void *). |
|||
* |
|||
* @notapi |
|||
*/ |
|||
void GDISP_LLD(control)(unsigned what, void *value) { |
|||
switch(what) { |
|||
case GDISP_CONTROL_POWER: |
|||
if (GDISP.Powermode == (gdisp_powermode_t)value) |
|||
return; |
|||
switch((gdisp_powermode_t)value) { |
|||
case powerOff: |
|||
/* Code here */ |
|||
break; |
|||
case powerOn: |
|||
/* Code here */ |
|||
/* You may need this ---
|
|||
if (GDISP.Powermode != powerSleep) |
|||
GDISP_LLD(init)(); |
|||
*/ |
|||
break; |
|||
case powerSleep: |
|||
/* Code here */ |
|||
break; |
|||
default: |
|||
return; |
|||
} |
|||
GDISP.Powermode = (gdisp_powermode_t)value; |
|||
return; |
|||
case GDISP_CONTROL_ORIENTATION: |
|||
if (GDISP.Orientation == (gdisp_orientation_t)value) |
|||
return; |
|||
switch((gdisp_orientation_t)value) { |
|||
case GDISP_ROTATE_0: |
|||
/* Code here */ |
|||
GDISP.Height = GDISP_SCREEN_HEIGHT; |
|||
GDISP.Width = GDISP_SCREEN_WIDTH; |
|||
break; |
|||
case GDISP_ROTATE_90: |
|||
/* Code here */ |
|||
GDISP.Height = GDISP_SCREEN_WIDTH; |
|||
GDISP.Width = GDISP_SCREEN_HEIGHT; |
|||
break; |
|||
case GDISP_ROTATE_180: |
|||
/* Code here */ |
|||
GDISP.Height = GDISP_SCREEN_HEIGHT; |
|||
GDISP.Width = GDISP_SCREEN_WIDTH; |
|||
break; |
|||
case GDISP_ROTATE_270: |
|||
/* Code here */ |
|||
GDISP.Height = GDISP_SCREEN_WIDTH; |
|||
GDISP.Width = GDISP_SCREEN_HEIGHT; |
|||
break; |
|||
default: |
|||
return; |
|||
} |
|||
#if GDISP_NEED_CLIP || GDISP_NEED_VALIDATION |
|||
GDISP.clipx0 = 0; |
|||
GDISP.clipy0 = 0; |
|||
GDISP.clipx1 = GDISP.Width; |
|||
GDISP.clipy1 = GDISP.Height; |
|||
#endif |
|||
GDISP.Orientation = (gdisp_orientation_t)value; |
|||
return; |
|||
/*
|
|||
case GDISP_CONTROL_BACKLIGHT: |
|||
case GDISP_CONTROL_CONTRAST: |
|||
*/ |
|||
} |
|||
} |
|||
#endif |
|||
|
|||
#if (GDISP_NEED_QUERY && GDISP_HARDWARE_QUERY) || defined(__DOXYGEN__) |
|||
/**
|
|||
* @brief Query a driver value. |
|||
* @details Typecase the result to the type you want. |
|||
* @note GDISP_QUERY_WIDTH - (coord_t) Gets the width of the screen |
|||
* GDISP_QUERY_HEIGHT - (coord_t) Gets the height of the screen |
|||
* GDISP_QUERY_POWER - (gdisp_powermode_t) Get the current powermode |
|||
* GDISP_QUERY_ORIENTATION - (gdisp_orientation_t) Get the current screen orientation |
|||
* GDISP_QUERY_BACKLIGHT - (coord_t) Get the backlight state (0 to 100) |
|||
* GDISP_QUERY_CONTRAST - (coord_t) Get the contrast (0 to 100). |
|||
* GDISP_QUERY_LLD - Low level driver control constants start at |
|||
* this value. |
|||
* |
|||
* @param[in] what What to Query |
|||
* |
|||
* @notapi |
|||
*/ |
|||
void *GDISP_LLD(query)(unsigned what) { |
|||
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; |
|||
case GDISP_QUERY_LLD+0: |
|||
/* Code here */ |
|||
default: return (void *)-1; |
|||
} |
|||
} |
|||
#endif |
|||
|
|||
#if GDISP_NEED_CLIP && GDISP_HARDWARE_CLIP |
|||
void GDISP_LLD(setclip)(coord_t x, coord_t y, coord_t cx, coord_t cy) { |
|||
#if GDISP_NEED_VALIDATION |
|||
if (x >= GDISP.Width || y >= GDISP.Height || cx < 0 || cy < 0) |
|||
return; |
|||
if (x < 0) x = 0; |
|||
if (y < 0) y = 0; |
|||
if (x+cx > GDISP.Width) cx = GDISP.Width - x; |
|||
if (y+cy > GDISP.Height) cy = GDISP.Height - y; |
|||
#endif |
|||
GDISP.clipx0 = x; |
|||
GDISP.clipy0 = y; |
|||
GDISP.clipx1 = x+cx; |
|||
GDISP.clipy1 = y+cy; |
|||
/* Code here to set hardware clipping */ |
|||
} |
|||
#endif |
|||
|
|||
#endif /* GFX_USE_GDISP */ |
|||
/** @} */ |
@ -1,5 +0,0 @@ |
|||
# List the required driver.
|
|||
GFXSRC += $(GFXLIB)/drivers/gdisp/gdispYOURDEVICE/gdisp_lld.c |
|||
|
|||
# Required include directories
|
|||
GFXINC += $(GFXLIB)/drivers/gdisp/gdispYOURDEVICE |
@ -1,69 +0,0 @@ |
|||
/*
|
|||
ChibiOS/RT - Copyright (C) 2012 |
|||
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 templates/gdisp_lld_config.h |
|||
* @brief GDISP Graphic Driver subsystem low level driver header template. |
|||
* |
|||
* @addtogroup GDISP |
|||
* @{ |
|||
*/ |
|||
|
|||
#ifndef _GDISP_LLD_CONFIG_H |
|||
#define _GDISP_LLD_CONFIG_H |
|||
|
|||
#if GFX_USE_GDISP || defined(__DOXYGEN__) |
|||
|
|||
/*===========================================================================*/ |
|||
/* Driver hardware support. */ |
|||
/*===========================================================================*/ |
|||
|
|||
#define GDISP_DRIVER_NAME "YourDriverName" |
|||
#define GDISP_LLD(x) gdisp_lld_##x##_YourDriverName |
|||
|
|||
#define GDISP_HARDWARE_LINES FALSE |
|||
#define GDISP_HARDWARE_CLEARS FALSE |
|||
#define GDISP_HARDWARE_FILLS FALSE |
|||
#define GDISP_HARDWARE_BITFILLS FALSE |
|||
#define GDISP_HARDWARE_CIRCLES FALSE |
|||
#define GDISP_HARDWARE_CIRCLEFILLS FALSE |
|||
#define GDISP_HARDWARE_ELLIPSES FALSE |
|||
#define GDISP_HARDWARE_ELLIPSEFILLS FALSE |
|||
#define GDISP_HARDWARE_ARCS FALSE |
|||
#define GDISP_HARDWARE_ARCFILLS FALSE |
|||
#define GDISP_HARDWARE_TEXT FALSE |
|||
#define GDISP_HARDWARE_TEXTFILLS FALSE |
|||
#define GDISP_HARDWARE_SCROLL FALSE |
|||
#define GDISP_HARDWARE_PIXELREAD FALSE |
|||
#define GDISP_HARDWARE_CONTROL FALSE |
|||
#define GDISP_HARDWARE_QUERY FALSE |
|||
#define GDISP_HARDWARE_CLIP FALSE |
|||
|
|||
#define GDISP_SOFTWARE_TEXTFILLDRAW FALSE |
|||
#define GDISP_SOFTWARE_TEXTBLITCOLUMN FALSE |
|||
|
|||
#define GDISP_PIXELFORMAT GDISP_PIXELFORMAT_RGB565 |
|||
#define GDISP_PACKED_PIXELS FALSE |
|||
#define GDISP_PACKED_LINES FALSE |
|||
|
|||
#endif /* GFX_USE_GDISP */ |
|||
|
|||
#endif /* _GDISP_LLD_CONFIG_H */ |
|||
/** @} */ |
@ -1,35 +0,0 @@ |
|||
To use this driver template |
|||
1. Copy this entire directory (including the directory itself) |
|||
into halext/drivers |
|||
2. Rename the directory to match your hardware. |
|||
3. Customise each file in the directory including the .mk file |
|||
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: |
|||
|
|||
1. Add in your halconf.h: |
|||
a) #define GFX_USE_GDISP TRUE |
|||
b) Any optional high level driver defines (see gdisp.h) eg: GDISP_NEED_MULTITHREAD |
|||
c) One (only) of: |
|||
#define GDISP_USE_GPIO |
|||
#define GDISP_USE_SPI |
|||
#define GDISP_USE_FSMC |
|||
d) All of the following (with appropriate values): |
|||
#define GDISP_SCREEN_WIDTH 128 |
|||
#define GDISP_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: |
|||
include $(CHIBIOS)/os/halext/halext.mk |
|||
include $(CHIBIOS)/os/halext/drivers/gdispXXXXX/gdisp_lld.mk |
@ -1,9 +1,9 @@ |
|||
The following low level driver templates are available: |
|||
|
|||
GDISP: |
|||
gdispXXXXX - Generalised GDISP driver |
|||
gdispXXX - Generalised GDISP driver |
|||
|
|||
TOUCHPAD: |
|||
touchpadXXXXX - Generalised TOUCHPAD driver |
|||
touchpadXXX - Generalised TOUCHPAD driver |
|||
|
|||
|
|||
|
@ -1,151 +0,0 @@ |
|||
/*
|
|||
ChibiOS/GFX - Copyright (C) 2012 |
|||
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 touchpadXPT2046/touchpad_lld.c |
|||
* @brief Touchpad Driver subsystem low level driver source. |
|||
* |
|||
* @addtogroup TOUCHPAD |
|||
* @{ |
|||
*/ |
|||
|
|||
#include "ch.h" |
|||
#include "hal.h" |
|||
#include "touchpad.h" |
|||
|
|||
#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__) |
|||
|
|||
/*===========================================================================*/ |
|||
/* Driver local definitions. */ |
|||
/*===========================================================================*/ |
|||
|
|||
/* put needed macros for your interface/driver here.
|
|||
* when using SPI, macros for setting and clearing CS line |
|||
*/ |
|||
#define TP_CS_HIGH palSetPad(TP_CS_PORT, TP_CS) |
|||
#define TP_CS_LOW palClearPad(TP_CS_PORT, TP_CS) |
|||
|
|||
/*===========================================================================*/ |
|||
/* Driver exported variables. */ |
|||
/*===========================================================================*/ |
|||
|
|||
#if !defined(__DOXYGEN__) |
|||
TOUCHPADDriver Touchpad; |
|||
#endif |
|||
|
|||
/*===========================================================================*/ |
|||
/* Driver local variables. */ |
|||
/*===========================================================================*/ |
|||
|
|||
/*===========================================================================*/ |
|||
/* Driver local functions. */ |
|||
/*===========================================================================*/ |
|||
|
|||
/*===========================================================================*/ |
|||
/* Driver interrupt handlers. */ |
|||
/*===========================================================================*/ |
|||
|
|||
/*===========================================================================*/ |
|||
/* Driver exported functions. */ |
|||
/*===========================================================================*/ |
|||
|
|||
/* ---- Required Routines ---- */ |
|||
|
|||
/**
|
|||
* @brief Low level Touchpad driver initialization. |
|||
* |
|||
* @param[in] tp The touchpad driver struct |
|||
* |
|||
* @notapi |
|||
*/ |
|||
void tp_lld_init(TOUCHPADDriver *tp) { |
|||
/* do communicate with the touchpad controller
|
|||
* to do any inizialisation (mostly spiStart()) |
|||
*/ |
|||
} |
|||
|
|||
/**
|
|||
* @brief Reads out the X direction. |
|||
* |
|||
* @return The uncalibrated X coordinate |
|||
* |
|||
* @notapi |
|||
*/ |
|||
uint16_t tp_lld_read_x(void) { |
|||
uint16_t x; |
|||
|
|||
/* do communicate with the touchpad controller
|
|||
* to receive the X-Coordinate |
|||
*/ |
|||
x = 0; |
|||
|
|||
return x; |
|||
} |
|||
|
|||
/*
|
|||
* @brief Reads out the Y direction. |
|||
* |
|||
* @return The uncalibrated Y coordinate |
|||
* |
|||
* @notapi |
|||
*/ |
|||
uint16_t tp_lld_read_y(void) { |
|||
uint16_t y; |
|||
|
|||
/* do communicate with the touchpad controller
|
|||
* to receive the Y-Coordinate |
|||
*/ |
|||
y = 0; |
|||
|
|||
return y; |
|||
} |
|||
|
|||
/* ---- Optional Routines ---- */ |
|||
#if TOUCHPAD_HAS_IRQ || defined(__DOXYGEN__) |
|||
/*
|
|||
* @brief for checking if touchpad is pressed or not. |
|||
* |
|||
* @return 1 if pressed / 0 if not pressed |
|||
* |
|||
* @notapi |
|||
*/ |
|||
uint8_t tp_lld_irq(void) { |
|||
/* do return PEN IRQ state if your
|
|||
* touchpad controller does have any |
|||
*/ |
|||
return 0; |
|||
} |
|||
#endif |
|||
|
|||
#if TOUCHPAD_HAS_PRESSURE || defined(__DOXYGEN__) |
|||
/*
|
|||
* @brief Reads out the Z direction / pressure. |
|||
* |
|||
* @notapi |
|||
*/ |
|||
uint16_t tp_lld_read_z(void) { |
|||
/* return the pressure */ |
|||
return 0; |
|||
} |
|||
#endif |
|||
|
|||
#endif /* GFX_USE_TOUCHPAD */ |
|||
/** @} */ |
|||
|
@ -1,6 +0,0 @@ |
|||
# List the required driver.
|
|||
GFXSRC += $(GFXLIB)/drivers/touchpad/touchpadYOURDEVICE/touchpad_lld.c |
|||
|
|||
# Required include directories
|
|||
GFXINC += $(GFXLIB)/drivers/touchpad/touchpadYOURDEVICE |
|||
|
@ -1,45 +0,0 @@ |
|||
/*
|
|||
ChibiOS/GFX - Copyright (C) 2012 |
|||
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 touchpadXPT2046/touchpad_lld_config.h |
|||
* @brief Touchppad Driver subsystem low level driver. |
|||
* |
|||
* @addtogroup TOUCHPAD |
|||
* @{ |
|||
*/ |
|||
|
|||
#ifndef _TOUCHPAD_LLD_CONFIG_H |
|||
#define _TOUCHPAD_LLD_CONFIG_H |
|||
|
|||
#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__) |
|||
|
|||
/*===========================================================================*/ |
|||
/* Driver hardware support. */ |
|||
/*===========================================================================*/ |
|||
|
|||
#define TOUCHPAD_HAS_IRQ TRUE |
|||
#define TOUCHPAD_HAS_PRESSURE TRUE |
|||
|
|||
#endif /* GFX_USE_TOUCHPAD */ |
|||
|
|||
#endif /* _TOUCHPAD_LLD_CONFIG_H */ |
|||
/** @} */ |
|||
|
Loading…
Reference in new issue