From a922a268fd6fa224ce3c9199e30362203e409438 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Wed, 31 Oct 2012 01:14:11 +0100 Subject: [PATCH 01/33] doxygen for graph --- include/graph.h | 16 +++++++++ src/graph.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 102 insertions(+), 1 deletion(-) diff --git a/include/graph.h b/include/graph.h index 9b4603bd..32995064 100644 --- a/include/graph.h +++ b/include/graph.h @@ -18,6 +18,13 @@ along with this program. If not, see . */ +/** + * @file graph.h + * @brief GRAPH module header file. + * + * @addtogroup GRAPH + * @{ + */ #ifndef GRAPH_H #define GRAPH_H @@ -27,6 +34,10 @@ #if GFX_USE_GRAPH +/*===========================================================================*/ +/* Type definitions */ +/*===========================================================================*/ + typedef struct _Graph { coord_t origin_x; coord_t origin_y; @@ -52,6 +63,10 @@ typedef struct _Graph { extern "C" { #endif +/*===========================================================================*/ +/* Type definitions */ +/*===========================================================================*/ + void graphDrawSystem(Graph *g); void graphDrawDot(Graph *g, coord_t x, coord_t y, uint16_t radius, color_t color); void graphDrawDots(Graph *g, int coord[][2], uint16_t entries, uint16_t radius, uint16_t color); @@ -64,4 +79,5 @@ void graphDrawNet(Graph *g, int coord[][2], uint16_t entries, uint16_t radius, u #endif /* GFX_USE_GRAPH */ #endif +/** @} */ diff --git a/src/graph.c b/src/graph.c index f3c043c7..b5669e9a 100644 --- a/src/graph.c +++ b/src/graph.c @@ -18,6 +18,13 @@ along with this program. If not, see . */ +/** + * @file graph.c + * @brief GRAPH module code. + * + * @addtogroup GRAPH + * @{ + */ #include #include "ch.h" #include "hal.h" @@ -26,6 +33,15 @@ #if GFX_USE_GRAPH +/** + * @brief Draw a horizontal dot line. + * + * @param[in] x0,y0,x1 The coordinates where the dot line will be drawn + * @param[in] space The distance from one dot to the other in pixels + * @param[in] color The color of the dots + * + * @notapi + */ static void _horizontalDotLine(coord_t x0, coord_t y0, coord_t x1, uint16_t space, color_t color) { uint16_t offset = x0; uint16_t count = ((x1 - x0) / space); @@ -36,6 +52,15 @@ static void _horizontalDotLine(coord_t x0, coord_t y0, coord_t x1, uint16_t spac } while(count--); } +/* + * @brief Draw a vertical dot line. + * + * @param[in] x0,y0,y1 The coordinates where the dot line will be drawn + * @param[in] space The distance from one dot to the other in pixels + * @param[in] color The color of the dots + * + * @notapi + */ static void _verticalDotLine(coord_t x0, coord_t y0, coord_t y1, uint16_t space, color_t color) { uint16_t offset = y0; uint16_t count = ((y1 - y0) / space); @@ -46,6 +71,16 @@ static void _verticalDotLine(coord_t x0, coord_t y0, coord_t y1, uint16_t space, } while(count--); } +/* + * @brief Draws a graph system + * @details Draws a graph system with two axis, X and Y. + * Different optinal parameters like grid size, grid color, + * arrow color (if any) etc. are defined in the struct. + * + * @param[in] g A pointer to a Graph struct + * + * @init + */ void graphDrawSystem(Graph *g) { uint16_t i; @@ -85,7 +120,17 @@ void graphDrawSystem(Graph *g) { } } -bool_t _boundaryCheck(Graph *g, coord_t x, coord_t y) { +/** + * @brief Checks if x and y are inside the graph area + * + * @param[in] g The pointer to the graph + * @param[in] x,y The coordinates to be checked + * + * @return 1 if outside the graph area, 0 otherwise + * + * @notapi + */ +static bool_t _boundaryCheck(Graph *g, coord_t x, coord_t y) { if(g->origin_x + x > g->x1) return 1; if(g->origin_x + x < g->x0) @@ -98,6 +143,18 @@ bool_t _boundaryCheck(Graph *g, coord_t x, coord_t y) { return 0; } +/** + * @brief Draws a single dot into the graph + * @note The dot won't be drawn if it's outsite the max and min + * values of the graph. + * + * @param[in] g The pointer to the graph + * @param[in] x,y The coordinates where the data point will be drawn + * @param[in] radius The radius of the dot. One pixel if 0. + * @param[in] color The color of the dot. + * + * @api + */ void graphDrawDot(Graph *g, coord_t x, coord_t y, uint16_t radius, color_t color) { if(_boundaryCheck(g, x, y)) return; @@ -108,6 +165,19 @@ void graphDrawDot(Graph *g, coord_t x, coord_t y, uint16_t radius, color_t color gdispFillCircle(g->origin_x + x, g->origin_y - y, radius, color); } +/** + * @brief Draws multiple dots into the graph + * @note A dot won't be drawn if it's outsite the max and min + * values of the graph. + * + * @param[in] g The pointer to the graph + * @param[in] coord A two dimensional int array containing the dots coordinates. + * @param[in] entries How many dots will be drawn (array index from 0 to entries); + * @param[in] radius The radius of the dots. One pixel if 0. + * @param[in] color The color of the dots. + * + * @api + */ void graphDrawDots(Graph *g, int coord[][2], uint16_t entries, uint16_t radius, uint16_t color) { uint16_t i; @@ -122,6 +192,20 @@ void graphDrawDots(Graph *g, int coord[][2], uint16_t entries, uint16_t radius, } } +/** + * @brief Draws multiple dots into the graph and connects them by a line + * @note A dot won't be drawn if it's outsite the max and min + * values of the graph. + * + * @param[in] g The pointer to the graph + * @param[in] coord A two dimensional int array containing the dots coordinates. + * @param[in] entries How many dots will be drawn (array index from 0 to entries); + * @param[in] radius The radius of the dots. One pixel if 0. + * @param[in] lineColor The color of the line. + * @param[in] dotColor The color of the dots. + * + * @api + */ void graphDrawNet(Graph *g, int coord[][2], uint16_t entries, uint16_t radius, uint16_t lineColor, uint16_t dotColor) { uint16_t i; @@ -146,4 +230,5 @@ void graphDrawNet(Graph *g, int coord[][2], uint16_t entries, uint16_t radius, u } #endif /* GFX_USE_GRAPH */ +/** @} */ From db3d4162de3401f1ae20a695d6010a855d169ee0 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Fri, 2 Nov 2012 09:08:42 +0100 Subject: [PATCH 02/33] finally removed directory containging old code --- old/gui/gui.c | 334 ------------------------------------------------- old/gui/gui.h | 115 ----------------- old/gui/gui.mk | 3 - 3 files changed, 452 deletions(-) delete mode 100644 old/gui/gui.c delete mode 100644 old/gui/gui.h delete mode 100644 old/gui/gui.mk diff --git a/old/gui/gui.c b/old/gui/gui.c deleted file mode 100644 index 9eeaa73a..00000000 --- a/old/gui/gui.c +++ /dev/null @@ -1,334 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2012 - Joel Bodenmann aka Tectu - - 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 . -*/ - -#include "gui.h" - -static struct guiNode_t *firstGUI = NULL; -uint16_t x, y; // global touchpad coordinates - -static uint8_t addElement(struct guiNode_t *newNode) { - struct guiNode_t *new; - - if(firstGUI == NULL) { - firstGUI = chHeapAlloc(NULL, sizeof(struct guiNode_t)); - if(firstGUI == NULL) - return 0; - - *firstGUI = *newNode; - firstGUI->next = NULL; - } else { - new = firstGUI; - while(new->next != NULL) - new = new->next; - - new->next = chHeapAlloc(NULL, sizeof(struct guiNode_t)); - if(new->next == NULL) - return 0; - - new = new->next; - *new = *newNode; - new->next = NULL; - } - - return 1; -} - -static uint8_t deleteElement(char *label) { - struct guiNode_t *pointer, *pointer1; - - if(firstGUI != NULL) { - if(strcmp(firstGUI->label, label) == 0) { - pointer = firstGUI->next; - chHeapFree(firstGUI); - firstGUI = pointer; - } else { - pointer = firstGUI; - - while(pointer->next != NULL) { - pointer1 = pointer->next; - - if(strcmp(firstGUI->label, label) == 0) { - pointer->next = pointer1->next; - chHeapFree(pointer1); - break; - } - - pointer = pointer1; - - } - } - - return 1; // successful - } - - return 0; // not successful -} - -void guiPrintElements(BaseSequentialStream *chp) { - struct guiNode_t *pointer = firstGUI; - - chprintf(chp, "\r\n\nguiNodes:\r\n\n"); - - while(pointer != NULL) { - chprintf(chp, "x0: %d\r\n", pointer->x0); - chprintf(chp, "y0: %d\r\n", pointer->y0); - chprintf(chp, "x1: %d\r\n", pointer->x1); - chprintf(chp, "y1: %d\r\n", pointer->y1); - chprintf(chp, "label: %s\r\n", pointer->label); - chprintf(chp, "active: %d\r\n", *(pointer->active)); - chprintf(chp, "state: %d\r\n", *(pointer->state)); - chprintf(chp, "*next: 0x%x\r\n", pointer->next); - chprintf(chp, "\r\n\n"); - pointer = pointer->next; - } -} - -static inline void buttonUpdate(struct guiNode_t *node) { - if(x >= node->x0 && x <= node->x1 && y >= node->y0 && y <= node->y1) { - *(node->state) = 1; - } else { - *(node->state) = 0; - } -} - -static inline void sliderUpdate(struct guiNode_t *node) { - uint16_t length = 1; - - if(node->orientation == horizontal) - length = node->x1 - node->x0; - else if(node->orientation == vertical) - length = node->y1 - node->y0; - - if(node->mode == modePassive) { - node->percentage = *(node->state); - } else if(node->mode == modeActive) { - if(x >= node->x0 && x <= node->x1 && y >= node->y0 && y <= node->y1) { - if(node->orientation == horizontal) { - node->percentage = (((x - node->x0) * 100) / length); - } else if(node->orientation == vertical) { - node->percentage = (((y - node->y0) * 100) / length); - } - } - - *(node->state) = node->percentage; - } - - // a bit of safety here - if(node->percentage > 100) - node->percentage = 100; - - if(node->orientation == horizontal) { - node->value = ((((node->x1)-(node->x0)) * node->percentage) / 100); - if(node->oldValue > node->value || node->value == 0) - lcdFillArea(node->x0+1, node->y0+1, node->x1, node->y1, node->bkColor); - else - lcdDrawRect(node->x0+1, node->y0+1, node->x0+node->value, node->y1, filled, node->valueColor); - } else if(node->orientation == vertical) { - node->value = ((((node->y1)-(node->y0)) * node->percentage) / 100); - if(node->oldValue > node->value || node->value == 0) - lcdFillArea(node->x0+1, node->y0+1, node->x1, node->y1, node->bkColor); - else - lcdDrawRect(node->x0+1, node->y0+1, node->x1, node->y0+node->value, filled, node->valueColor); - } - - node->oldValue = node->value; -} - -static inline void wheelUpdate(struct guiNode_t *node) { - (void)node; -} - -static inline void keymatrixUpdate(struct guiNode_t *node) { - (void)node; -} - -static void guiThread(const uint16_t interval) { - struct guiNode_t *node; - - chRegSetThreadName("GUI"); - - while(TRUE) { - for(node = firstGUI; node; node = node->next) { - // check if GUI element is set active - if(*(node->active) == active) { - x = tpReadX(); - y = tpReadY(); - - switch(node->type) { - case button: - buttonUpdate(node); - break; - case slider: - sliderUpdate(node); - break; - case wheel: - wheelUpdate(node); - break; - case keymatrix: - keymatrixUpdate(node); - break; - } - } - } - - chThdSleepMilliseconds(interval); - } -} - -Thread *guiInit(uint16_t interval, tprio_t priority) { - Thread *tp = NULL; - - tp = chThdCreateFromHeap(NULL, THD_WA_SIZE(512), priority, guiThread, interval); - - return tp; -} - -uint8_t guiDeleteElement(char *label) { - return deleteElement(label); -} - -uint8_t guiDrawButton(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, char *str, font_t font, uint16_t fontColor, uint16_t buttonColor, uint16_t shadow, char *label, uint8_t *active, uint8_t *state) { - struct guiNode_t *newNode; - uint16_t i; - - newNode = chHeapAlloc(NULL, sizeof(struct guiNode_t)); - if(newNode == NULL) - return 0; - - newNode->type = button; - newNode->label = label; - newNode->x0 = x0; - newNode->y0 = y0; - newNode->x1 = x1; - newNode->y1 = y1; - newNode->shadow = shadow; - newNode->active = active; - newNode->state = state; - - if(addElement(newNode) != 1) - return 0; - - lcdDrawRectString(x0, y0, x1, y1, str, font, fontColor, buttonColor); - - if(shadow != 0) { - for(i = 0; i < shadow; i++) { - lcdDrawLine(x0+shadow, y1+i, x1+shadow-1, y1+i, Black); - lcdDrawLine(x1+i, y0+shadow, x1+i, y1+shadow-1, Black); - } - } - - chHeapFree(newNode); - - return 1; -} - -uint8_t guiDrawSlider(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint8_t orientation, uint8_t mode, uint16_t frameColor, uint16_t bkColor, uint16_t valueColor, char *label, uint8_t *active, uint8_t *value) { - struct guiNode_t *newNode; - - newNode = chHeapAlloc(NULL, sizeof(struct guiNode_t)); - if(newNode == NULL) - return 0; - - newNode->type = slider; - newNode->label = label; - newNode->x0 = x0; - newNode->y0 = y0; - newNode->x1 = x1; - newNode->y1 = y1; - newNode->mode = mode; - newNode->bkColor = bkColor; - newNode->valueColor = valueColor; - newNode->state = value; - newNode->active = active; - newNode->orientation = orientation; - newNode->percentage = 0; - - if(addElement(newNode) != 1) - return 0; - - (void)bkColor; - (void)valueColor; - - // lcdDraw functions - lcdDrawRect(x0, y0, x1, y1, frame, frameColor); - - chHeapFree(newNode); - - return 1; -} - -uint8_t guiDrawWheel(uint16_t x0, uint16_t y0, uint16_t radius1, uint16_t radius2, uint16_t bkColor, uint16_t valueColor, char *label, uint8_t *active, uint8_t *value) { - struct guiNode_t *newNode; - - newNode = chHeapAlloc(NULL, sizeof(struct guiNode_t)); - if(newNode == NULL) - return 0; - - newNode->type = wheel; - newNode->label = label; - newNode->x0 = x0; - newNode->y0 = y0; - newNode->r1 = radius1; - newNode->r2 = radius2; - newNode->active = active; - newNode->state = value; - - if(addElement(newNode) != 1) - return 0; - - (void)bkColor; - (void)valueColor; - // lcdDraw functions - - chHeapFree(newNode); - - return 1; -} - -uint8_t guiDrawKeymatrix(uint16_t x0, uint16_t y0, uint16_t size, uint16_t space, uint16_t shadow, uint16_t buttonColor, uint16_t fontColor, font_t font, char *label, uint8_t *active, uint8_t *value) { - struct guiNode_t *newNode; - - newNode = chHeapAlloc(NULL, sizeof(struct guiNode_t)); - if(newNode == NULL) - return 0; - - newNode->type = keymatrix; - newNode->label = label; - newNode->x0 = x0; - newNode->y0 = y0; - newNode->shadow = shadow; - newNode->active = active; - newNode->state = value; - - if(addElement(newNode) != 1) - return 0; - - // lcdDraw functions - (void)size; - (void)space; - (void)buttonColor; - (void)fontColor; - (void)font; - - chHeapFree(newNode); - - return 1; -} - diff --git a/old/gui/gui.h b/old/gui/gui.h deleted file mode 100644 index a5ca445e..00000000 --- a/old/gui/gui.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2012 - Joel Bodenmann aka Tectu - - 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 . -*/ - -#ifndef GUI_H -#define GUI_H - -#include "ch.h" -#include "hal.h" -#include "glcd.h" -#include "chprintf.h" -#include "touchpad.h" -#include - -struct guiNode_t { - uint8_t type; - uint16_t x0; - uint16_t y0; - uint16_t x1; - uint16_t y1; - uint16_t r1; - uint16_t r2; - uint16_t shadow; - uint16_t bkColor; - uint16_t valueColor; - uint16_t value; - uint16_t oldValue; - uint16_t percentage; - uint8_t orientation; - uint8_t mode; - uint8_t *active; - uint8_t *state; - char *label; - struct guiNode_t *next; -}; - -#ifdef __cplusplus -extern "C" { -#endif - -enum {button, slider, wheel, keymatrix}; -enum {horizontal, vertical}; -enum {inactive, active}; -enum {modePassive, modeActive}; - -/* - * Description: creates the GUI thread - * - * param: - interval: thread sleep in milliseconds after each GUI element update - * - priority: priority of the thread - * - * return: pointer to created thread - */ -Thread *guiInit(uint16_t interval, tprio_t priority); - -/* - * Description: prints all GUI elements structs (linked list) - * - * param: - chp: pointer to output stream - * - * return: none - */ -void guiPrintElements(BaseSequentialStream *chp); - -/* - * Description: deletes a GUI element from the linked list - * - * param: - label: label of the element (parameter of each guiDrawXXX function) - * - * return: 1 if successful, 0 otherwise - */ -uint8_t guiDeleteElement(char *label); - -/* - * Description: draws a button on the screen and keeps it's state up to date - * - * param: - x0, y0, x1, y1: start and end coordinates of the button's rectangle - * - str: string that gets drawn into the rectangle - button's lable - * - fontColor: color of the lable - * - buttonColor: color of the rectangle - * - shadow: draws a black shadow with N pixels size if != 0 - * - active: pass pointer to variable which holds the state 'active' or 'inactive' - * - state: pass pointer to variable whcih will keep the state of the button (pressed / unpressed)' - * - * return: 1 if button successfully created - */ -uint8_t guiDrawButton(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, char *str, font_t font, uint16_t fontColor, uint16_t buttonColor, uint16_t shadow, char *label, uint8_t *active, uint8_t *state); - -uint8_t guiDrawSlider(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint8_t orientation, uint8_t mode, uint16_t frameColor, uint16_t bkColor, uint16_t valueColor, char *label, uint8_t *active, uint8_t *value); - -uint8_t guiDrawWheel(uint16_t x0, uint16_t y0, uint16_t radius1, uint16_t radius2, uint16_t bkColor, uint16_t valueColor, char *label, uint8_t *active, uint8_t *value); - -uint8_t guiDrawKeymatrix(uint16_t x0, uint16_t y0, uint16_t buttonSize, uint16_t space, uint16_t shadow, uint16_t buttonColor, uint16_t fontColor, font_t font, char *label, uint8_t *active, uint8_t *value); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/old/gui/gui.mk b/old/gui/gui.mk deleted file mode 100644 index 6d6d5456..00000000 --- a/old/gui/gui.mk +++ /dev/null @@ -1,3 +0,0 @@ -GDISP_GUI_SRC = $(GFXLIB)/gui/gui.c - -GDISP_GUI_INC = $(GFXLIB)/gui From 7603ae30822052a898e05f0634ae6a4ab9ac4792 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Fri, 2 Nov 2012 09:27:07 +0100 Subject: [PATCH 03/33] Doxygenfile update --- Doxygenfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Doxygenfile b/Doxygenfile index ab82a7f4..6120309c 100644 --- a/Doxygenfile +++ b/Doxygenfile @@ -1,4 +1,4 @@ -# Doxyfile 1.7.4 + # Doxyfile 1.7.4 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -31,7 +31,7 @@ PROJECT_NAME = ChibiOS/GFX # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 0.0.1 +PROJECT_NUMBER = 1.3 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer @@ -986,7 +986,7 @@ GENERATE_HTMLHELP = NO # can add a path in front of the file if the result should not be # written to the html output directory. -CHM_FILE = ../ChibiOS/GFX.chm +CHM_FILE = ../ChibiOS-GFX.chm # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of From 397b5074e8a8fae3dbfa52dd0ce62e4ccb2908dc Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Fri, 2 Nov 2012 09:33:56 +0100 Subject: [PATCH 04/33] docs --- drivers/touchpad/ADS7843/touchpad_lld.c | 2 ++ src/gwin.c | 1 + templates/gdispXXXXX/gdisp_lld.c | 2 +- templates/touchpadXXXXX/touchpad_lld.c | 4 ++++ 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/touchpad/ADS7843/touchpad_lld.c b/drivers/touchpad/ADS7843/touchpad_lld.c index 4640ca8d..02b501a2 100644 --- a/drivers/touchpad/ADS7843/touchpad_lld.c +++ b/drivers/touchpad/ADS7843/touchpad_lld.c @@ -67,6 +67,8 @@ /** * @brief Low level Touchpad driver initialization. * + * @param[in] The touchpad driver + * * @notapi */ void tp_lld_init(const TOUCHPADDriver *tp) { diff --git a/src/gwin.c b/src/gwin.c index 1c987204..69750262 100644 --- a/src/gwin.c +++ b/src/gwin.c @@ -166,6 +166,7 @@ void gwinClear(GHandle gh) { * @note May leave GDISP clipping to this window's dimensions * * @param[in] gh The window handle + * @param[in] x,y The coordinates of the pixel * * @api */ diff --git a/templates/gdispXXXXX/gdisp_lld.c b/templates/gdispXXXXX/gdisp_lld.c index 5aa10f2d..09912d9f 100644 --- a/templates/gdispXXXXX/gdisp_lld.c +++ b/templates/gdispXXXXX/gdisp_lld.c @@ -507,7 +507,7 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) { #if (GDISP_NEED_QUERY && GDISP_HARDWARE_QUERY) || defined(__DOXYGEN__) /** * @brief Query a driver value. - * @detail Typecase the result to the type you want. + * @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 diff --git a/templates/touchpadXXXXX/touchpad_lld.c b/templates/touchpadXXXXX/touchpad_lld.c index 2fec6ade..9bcae27d 100644 --- a/templates/touchpadXXXXX/touchpad_lld.c +++ b/templates/touchpadXXXXX/touchpad_lld.c @@ -82,6 +82,8 @@ void tp_lld_init(TOUCHPADDriver *tp) { /** * @brief Reads out the X direction. * + * @return The uncalibrated X coordinate + * * @notapi */ uint16_t tp_lld_read_x(void) { @@ -98,6 +100,8 @@ uint16_t tp_lld_read_x(void) { /* * @brief Reads out the Y direction. * + * @return The uncalibrated Y coordinate + * * @notapi */ uint16_t tp_lld_read_y(void) { From 1294824260eccfc79c449de103fbafd73d5670a3 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Fri, 2 Nov 2012 20:26:06 +0100 Subject: [PATCH 05/33] moar doxygen fixes --- drivers/gdisp/Nokia6610/gdisp_lld.c | 2 +- drivers/gdisp/S6D1121/gdisp_lld.c | 2 +- drivers/gdisp/SSD1289/gdisp_lld.c | 2 +- drivers/gdisp/SSD1963/gdisp_lld.c | 2 +- drivers/touchpad/XPT2046/touchpad_lld.c | 2 + include/gdisp_lld.h | 6 +- include/touchpad.h | 2 +- include/touchpad_lld.h | 2 +- src/gdisp.c | 93 +++++++++++++------------ src/touchpad.c | 4 +- templates/gdispXXXXX/gdisp_lld.c | 18 ++--- templates/touchpadXXXXX/touchpad_lld.c | 2 + 12 files changed, 74 insertions(+), 63 deletions(-) diff --git a/drivers/gdisp/Nokia6610/gdisp_lld.c b/drivers/gdisp/Nokia6610/gdisp_lld.c index 23b0d1a7..e3da570e 100644 --- a/drivers/gdisp/Nokia6610/gdisp_lld.c +++ b/drivers/gdisp/Nokia6610/gdisp_lld.c @@ -448,7 +448,7 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) { #if GDISP_HARDWARE_CONTROL || defined(__DOXYGEN__) /** * @brief Driver Control - * @detail Unsupported control codes are ignored. + * @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 diff --git a/drivers/gdisp/S6D1121/gdisp_lld.c b/drivers/gdisp/S6D1121/gdisp_lld.c index e199f58f..6a8b4aed 100644 --- a/drivers/gdisp/S6D1121/gdisp_lld.c +++ b/drivers/gdisp/S6D1121/gdisp_lld.c @@ -411,7 +411,7 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) { #if GDISP_HARDWARE_CONTROL || defined(__DOXYGEN__) /** * @brief Driver Control - * @detail Unsupported control codes are ignored. + * @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 diff --git a/drivers/gdisp/SSD1289/gdisp_lld.c b/drivers/gdisp/SSD1289/gdisp_lld.c index 321923e0..00bb92cf 100644 --- a/drivers/gdisp/SSD1289/gdisp_lld.c +++ b/drivers/gdisp/SSD1289/gdisp_lld.c @@ -385,7 +385,7 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) { #if (GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL) || defined(__DOXYGEN__) /** * @brief Driver Control - * @detail Unsupported control codes are ignored. + * @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 diff --git a/drivers/gdisp/SSD1963/gdisp_lld.c b/drivers/gdisp/SSD1963/gdisp_lld.c index e54e889d..d42bfd18 100644 --- a/drivers/gdisp/SSD1963/gdisp_lld.c +++ b/drivers/gdisp/SSD1963/gdisp_lld.c @@ -511,7 +511,7 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) { #if (GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL) || defined(__DOXYGEN__) /** * @brief Driver Control - * @detail Unsupported control codes are ignored. + * @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 diff --git a/drivers/touchpad/XPT2046/touchpad_lld.c b/drivers/touchpad/XPT2046/touchpad_lld.c index 4640ca8d..cb413fdf 100644 --- a/drivers/touchpad/XPT2046/touchpad_lld.c +++ b/drivers/touchpad/XPT2046/touchpad_lld.c @@ -67,6 +67,8 @@ /** * @brief Low level Touchpad driver initialization. * + * @param[in] tp The touchpad driver struct + * * @notapi */ void tp_lld_init(const TOUCHPADDriver *tp) { diff --git a/include/gdisp_lld.h b/include/gdisp_lld.h index 6dd826d9..966a8f54 100644 --- a/include/gdisp_lld.h +++ b/include/gdisp_lld.h @@ -146,7 +146,7 @@ /** * @brief Driver Control Constants - * @detail Unsupported control codes are ignored. + * @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 @@ -166,7 +166,7 @@ /** * @brief Driver Query Constants - * @detail Unsupported query codes return (void *)-1. + * @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 @@ -398,7 +398,7 @@ * 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) + * 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 diff --git a/include/touchpad.h b/include/touchpad.h index 1db5ac98..b6aa2589 100644 --- a/include/touchpad.h +++ b/include/touchpad.h @@ -22,7 +22,7 @@ * @file touchpad.h * @brief TOUCHPAD Touchpad Driver subsystem header file. * - * @addgroup TOUCHPAD + * @addtogroup TOUCHPAD * @{ */ #ifndef _TOUCHPAD_H diff --git a/include/touchpad_lld.h b/include/touchpad_lld.h index c73591c7..ab19cd97 100644 --- a/include/touchpad_lld.h +++ b/include/touchpad_lld.h @@ -22,7 +22,7 @@ * @file touchpad_lld.h * @brief TOUCHPAD Driver subsystem low level driver header. * - * @addgroup TOUCHPAD + * @addtogroup TOUCHPAD * @{ */ diff --git a/src/gdisp.c b/src/gdisp.c index 5a3aff13..af95f632 100644 --- a/src/gdisp.c +++ b/src/gdisp.c @@ -144,6 +144,8 @@ * @note This function is NOT currently implicitly invoked by @p halInit(). * It must be called manually. * + * @return True if succeeded, False otherwise + * * @init */ bool_t gdispInit(void) { @@ -192,7 +194,9 @@ /** * @brief Test if the GDISP engine is currently drawing. * @note This function will always return FALSE if - * GDISP_NEED_ASYNC is not defined. + * GDISP_NEED_ASYNC is not defined. + * + * @return TRUE if gdisp is busy, FALSE otherwise * * @init */ @@ -280,24 +284,12 @@ } #endif - /** - * @brief Draw a dashed line. - * @pre The GDISP unit must be in powerOn or powerSleep mode. - * - * @param[in] x0,y0 The start position - * @param[in] x1,y1 The end position - * @param[in] length The length of the dash - * @param[in] color The color of the dashed line - * - * @api - */ - #if GDISP_NEED_MULTITHREAD || defined(__DOXYGEN__) /** * @brief Fill an area with a color. * @pre The GDISP unit must be in powerOn or powerSleep mode. * - * @param[in] x0,y0 The start position + * @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 * @@ -332,9 +324,11 @@ * 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] buffer The bitmap in the driver's pixel format. + * @param[in] x,y The start position + * @param[in] cx,cy The size of the filled area + * @param[in] srcx,srcy I've no idea + * @param[in] srccx Really, I've no fucking idea + * @param[in] buffer The bitmap in the driver's pixel format * * @api */ @@ -389,7 +383,7 @@ * @brief Draw a circle. * @pre The GDISP unit must be in powerOn or powerSleep mode. * - * @param[in] x0,y0 The center of the 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 * @@ -416,7 +410,7 @@ * @brief Draw a filled circle. * @pre The GDISP unit must be in powerOn or powerSleep mode. * - * @param[in] x0,y0 The center of the 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 * @@ -443,7 +437,7 @@ * @brief Draw an ellipse. * @pre The GDISP unit must be in powerOn or powerSleep mode. * - * @param[in] x0,y0 The center of the 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 * @@ -471,7 +465,7 @@ * @brief Draw a filled ellipse. * @pre The GDISP unit must be in powerOn or powerSleep mode. * - * @param[in] x0,y0 The center of the 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 * @@ -620,9 +614,10 @@ void gdispFillRoundedBox(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t r * @brief Draw a text character. * @pre The GDISP unit must be in powerOn or powerSleep mode. * - * @param[in] x,y The position for the text - * @param[in] c The character to draw - * @param[in] color The color to use + * @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 */ @@ -648,10 +643,11 @@ void gdispFillRoundedBox(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t r * @brief Draw a text character with a filled background. * @pre The GDISP unit must be in powerOn or powerSleep mode. * - * @param[in] x,y The position for the text - * @param[in] c The character to draw - * @param[in] color The color to use - * @param[in] bgcolor The background color to use + * @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 */ @@ -732,7 +728,8 @@ void gdispFillRoundedBox(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t r * @note Depending on the hardware implementation this function may not * support some codes. They will be ignored. * - * @param[in] powerMode The power mode to use + * @param[in] what what you want to control + * @param[in] value The value to be assigned * * @api */ @@ -819,9 +816,10 @@ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color) { * @brief Draw a text string. * @pre The GDISP unit must be in powerOn or powerSleep mode. * - * @param[in] x,y The position for the text - * @param[in] str The string to draw - * @param[in] color The color to use + * @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 */ @@ -861,10 +859,11 @@ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color) { * @brief Draw a text string. * @pre The GDISP unit must be in powerOn or powerSleep mode. * - * @param[in] x,y The position for the text - * @param[in] str The string to draw - * @param[in] color The color to use - * @param[in] bgcolor The background color to use + * @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 */ @@ -906,10 +905,12 @@ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color) { * @brief Draw a text string verticly centered within the specified box. * @pre The GDISP unit must be in powerOn or powerSleep mode. * - * @param[in] x,y The position for the text (need to define top-right or base-line - check code) - * @param[in] str The string to draw - * @param[in] color The color to use - * @param[in] justify Justify the text left, center or right within the 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 */ @@ -1038,11 +1039,13 @@ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color) { * @pre The GDISP unit must be in powerOn or powerSleep mode. * @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] str The string to draw - * @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 + * @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 */ diff --git a/src/touchpad.c b/src/touchpad.c index bf6936d7..7559d6d3 100644 --- a/src/touchpad.c +++ b/src/touchpad.c @@ -21,7 +21,7 @@ * @file touchpad.c * @brief Touchpad Driver code. * - * @addgroup TOUCHPAD + * @addtogroup TOUCHPAD * @{ */ #include "ch.h" @@ -126,6 +126,8 @@ static void _tpDrawCross(uint16_t x, uint16_t y) { * @note This function is NOT currently implicitly invoked by @p halInit(). * It must be called manually. * + * @param[in] tp The touchpad driver struct + * * @api */ void tpInit(const TOUCHPADDriver *tp) { diff --git a/templates/gdispXXXXX/gdisp_lld.c b/templates/gdispXXXXX/gdisp_lld.c index 09912d9f..205b7fa2 100644 --- a/templates/gdispXXXXX/gdisp_lld.c +++ b/templates/gdispXXXXX/gdisp_lld.c @@ -338,9 +338,10 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) { * @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] color The color of the character + * @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 */ @@ -357,10 +358,11 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) { * @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] color The color of the character - * @param[in] bgcolor The background color + * @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 */ @@ -420,7 +422,7 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) { #if (GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL) || defined(__DOXYGEN__) /** * @brief Driver Control - * @detail Unsupported control codes are ignored. + * @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 diff --git a/templates/touchpadXXXXX/touchpad_lld.c b/templates/touchpadXXXXX/touchpad_lld.c index 9bcae27d..bba9c71e 100644 --- a/templates/touchpadXXXXX/touchpad_lld.c +++ b/templates/touchpadXXXXX/touchpad_lld.c @@ -71,6 +71,8 @@ /** * @brief Low level Touchpad driver initialization. * + * @param[in] tp The touchpad driver struct + * * @notapi */ void tp_lld_init(TOUCHPADDriver *tp) { From 9ff7292013afbe578dea21c0106ae2bb5a4c8003 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 3 Nov 2012 01:59:50 +0100 Subject: [PATCH 06/33] doxygen update --- Doxygenfile | 6 +++--- include/graph.h | 3 +-- src/graph.c | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Doxygenfile b/Doxygenfile index 6120309c..4b4992bc 100644 --- a/Doxygenfile +++ b/Doxygenfile @@ -51,7 +51,7 @@ PROJECT_LOGO = # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. -OUTPUT_DIRECTORY = +OUTPUT_DIRECTORY = docs # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output @@ -578,7 +578,7 @@ FILE_VERSION_FILTER = # You can optionally specify a file name after the option, if omitted # DoxygenLayout.xml will be used as the name of the layout file. -LAYOUT_FILE = ./rsc/layout.xml +LAYOUT_FILE = docs/layout.xml #--------------------------------------------------------------------------- # configuration options related to warning and progress messages @@ -986,7 +986,7 @@ GENERATE_HTMLHELP = NO # can add a path in front of the file if the result should not be # written to the html output directory. -CHM_FILE = ../ChibiOS-GFX.chm +CHM_FILE = ChibiOS-GFX.chm # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of diff --git a/include/graph.h b/include/graph.h index 32995064..6d0849d8 100644 --- a/include/graph.h +++ b/include/graph.h @@ -17,7 +17,6 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ - /** * @file graph.h * @brief GRAPH module header file. @@ -32,7 +31,7 @@ #define GFX_USE_GRAPH FALSE #endif -#if GFX_USE_GRAPH +#if GFX_USE_GRAPH || defined(__DOXYGEN__) /*===========================================================================*/ /* Type definitions */ diff --git a/src/graph.c b/src/graph.c index b5669e9a..2a10bf72 100644 --- a/src/graph.c +++ b/src/graph.c @@ -31,7 +31,7 @@ #include "gdisp.h" #include "graph.h" -#if GFX_USE_GRAPH +#if GFX_USE_GRAPH || defined(__DOXYGEN__) /** * @brief Draw a horizontal dot line. From 74b00382a6e2f4f0beb448395f804ec373f88464 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 3 Nov 2012 02:00:14 +0100 Subject: [PATCH 07/33] doxygen update --- docs/layout.xml | 184 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 docs/layout.xml diff --git a/docs/layout.xml b/docs/layout.xml new file mode 100644 index 00000000..9ec514ba --- /dev/null +++ b/docs/layout.xml @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 75de4fe1db55217b5a7cf9c705738d3ad2c9044a Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 3 Nov 2012 02:23:34 +0100 Subject: [PATCH 08/33] docs --- Doxygenfile | 3571 +++++++++-------- docs/layout.xml | 184 - drivers/gdisp/Nokia6610/gdisp_lld.c | 2 +- .../gdisp/Nokia6610/gdisp_lld_board_example.h | 2 +- .../gdisp_lld_board_olimexsam7ex256.h | 2 +- drivers/gdisp/Nokia6610/gdisp_lld_config.h | 2 +- drivers/gdisp/S6D1121/gdisp_lld.c | 3 +- drivers/gdisp/S6D1121/gdisp_lld_config.h | 3 +- drivers/gdisp/S6D1121/s6d1121_lld.c.h | 3 +- drivers/gdisp/SSD1963/gdisp_lld.c | 2 +- drivers/gdisp/SSD1963/gdisp_lld_config.h | 3 +- drivers/gdisp/SSD1963/ssd1963.h | 10 +- drivers/gdisp/TestStub/gdisp_lld.c | 2 +- drivers/gdisp/TestStub/gdisp_lld_config.h | 2 +- drivers/gdisp/VMT/gdisp_lld.c | 3 +- drivers/gdisp/VMT/gdisp_lld_config.h | 3 +- drivers/gdisp/VMT/gdisp_lld_driver1.c | 3 +- drivers/gdisp/VMT/gdisp_lld_driver2.c | 3 +- drivers/touchpad/ADS7843/touchpad_lld.c | 4 +- .../touchpad/ADS7843/touchpad_lld_config.h | 3 +- drivers/touchpad/XPT2046/touchpad_lld.c | 2 +- .../touchpad/XPT2046/touchpad_lld_config.h | 3 +- templates/gdispXXXXX/gdisp_lld.c | 560 --- templates/gdispXXXXX/gdisp_lld.mk | 5 - templates/gdispXXXXX/gdisp_lld_config.h | 69 - templates/gdispXXXXX/readme.txt | 35 - templates/readme.txt | 4 +- templates/touchpadXXXXX/touchpad_lld.c | 151 - templates/touchpadXXXXX/touchpad_lld.mk | 6 - templates/touchpadXXXXX/touchpad_lld_config.h | 45 - 30 files changed, 1857 insertions(+), 2833 deletions(-) delete mode 100644 docs/layout.xml delete mode 100644 templates/gdispXXXXX/gdisp_lld.c delete mode 100644 templates/gdispXXXXX/gdisp_lld.mk delete mode 100644 templates/gdispXXXXX/gdisp_lld_config.h delete mode 100644 templates/gdispXXXXX/readme.txt delete mode 100644 templates/touchpadXXXXX/touchpad_lld.c delete mode 100644 templates/touchpadXXXXX/touchpad_lld.mk delete mode 100644 templates/touchpadXXXXX/touchpad_lld_config.h diff --git a/Doxygenfile b/Doxygenfile index 4b4992bc..eae03f31 100644 --- a/Doxygenfile +++ b/Doxygenfile @@ -1,1747 +1,1824 @@ - # Doxyfile 1.7.4 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" "). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = ChibiOS/GFX - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = 1.3 - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer -# a quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = - -# With the PROJECT_LOGO tag one can specify an logo or icon that is -# included in the documentation. The maximum height of the logo should not -# exceed 55 pixels and the maximum width should not exceed 200 pixels. -# Doxygen will copy the logo to the output directory. - -PROJECT_LOGO = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = docs - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = "The $name class" \ - "The $name widget" \ - "The $name file" \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = YES - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = "C:/Documents and Settings/Administrator/" - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful if your file system -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = NO - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 2 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = "iclass=@par Function Class:\n This is an \ - I-Class API, this function can be \ - invoked from within a system lock zone by both \ - threads and interrupt handlers." \ - "sclass=@par Function Class:\n This is an \ - S-Class API, this function can be \ - invoked from within a system lock zone by threads \ - only." \ - "api=@par Function Class:\n Normal API, this \ - function can be invoked by regular system threads \ - but not from within a lock zone." \ - "notapi=@par Function Class:\n Not an API, this \ - function is for internal use only." \ - "isr=@par Function Class:\n Interrupt handler, \ - this function should not be directly invoked." \ - "init=@par Function Class:\n Initializer, this \ - function just initializes an object and can be \ - invoked before the kernel is initialized." \ - "special=@par Function Class:\n Special function, \ - this function has special requirements see the \ - notes." - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given extension. -# Doxygen has a built-in mapping, but you can override or extend it using this -# tag. The format is ext=language, where ext is a file extension, and language -# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, -# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make -# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C -# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions -# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also makes the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and -# unions are shown inside the group in which they are included (e.g. using -# @ingroup) instead of on a separate page (for HTML and Man pages) or -# section (for LaTeX and RTF). - -INLINE_GROUPED_CLASSES = NO - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = NO - -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penalty. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will roughly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols - -SYMBOL_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = NO - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespaces are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = YES - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = YES - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen -# will list include files with double quotes in the documentation -# rather than with sharp brackets. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = NO - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen -# will sort the (brief and detailed) documentation of class members so that -# constructors and destructors are listed first. If set to NO (the default) -# the constructors will appear in the respective orders defined by -# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. -# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO -# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to -# do proper type resolution of all parameters of a function it will reject a -# match between the prototype and the implementation of a member function even -# if there is only one candidate or it is obvious which candidate to choose -# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen -# will still accept a match between prototype and implementation in such cases. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or macro consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and macros in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = NO - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = NO - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. -# This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. The create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. -# You can optionally specify a file name after the option, if omitted -# DoxygenLayout.xml will be used as the name of the layout file. - -LAYOUT_FILE = docs/layout.xml - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = YES - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_NO_PARAMDOC option can be enabled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh -# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py -# *.f90 *.f *.for *.vhd *.vhdl - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = * - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = ./rsc - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. -# If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. -# Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. -# The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty or if -# non of the patterns match the file name, INPUT_FILTER is applied. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) -# and it is also possible to disable source filtering for a specific pattern -# using *.ext= (so without naming a filter). This option only has effect when -# FILTER_SOURCE_FILES is enabled. - -FILTER_SOURCE_PATTERNS = - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = NO - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. -# Otherwise they will link to the documentation. - -REFERENCES_LINK_SOURCE = NO - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. Note that when using a custom header you are responsible -# for the proper inclusion of any scripts and style sheets that doxygen -# needs, which is dependent on the configuration options used. -# It is adviced to generate a default header using "doxygen -w html -# header.html footer.html stylesheet.css YourConfigFile" and then modify -# that header. Note that the header is subject to change so you typically -# have to redo this when upgrading to a newer version of doxygen or when changing the value of configuration settings such as GENERATE_TREEVIEW! - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that -# the files will be copied as-is; there are no commands or markers available. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. -# Doxygen will adjust the colors in the stylesheet and background images -# according to this color. Hue is specified as an angle on a colorwheel, -# see http://en.wikipedia.org/wiki/Hue for more information. -# For instance the value 0 represents red, 60 is yellow, 120 is green, -# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. -# The allowed range is 0 to 359. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of -# the colors in the HTML output. For a value of 0 the output will use -# grayscales only. A value of 255 will produce the most vivid colors. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to -# the luminance component of the colors in the HTML output. Values below -# 100 gradually make the output lighter, whereas values above 100 make -# the output darker. The value divided by 100 is the actual gamma applied, -# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, -# and 100 does not change the gamma. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting -# this to NO can help when comparing the output of multiple runs. - -HTML_TIMESTAMP = YES - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). - -HTML_DYNAMIC_SECTIONS = NO - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = ChibiOS-GFX.chm - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = "\"C:/Program Files/HTML Help Workshop/hhc.exe\"" - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated -# that can be used as input for Qt's qhelpgenerator to generate a -# Qt Compressed Help (.qch) of the generated HTML documentation. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders - -QHP_VIRTUAL_FOLDER = doc - -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to -# add. For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see -# -# Qt Help Project / Custom Filters. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's -# filter section matches. -# -# Qt Help Project / Filter Attributes. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before -# the help appears. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values -# (range [0,1..20]) that doxygen will group on one line in the generated HTML -# documentation. Note that a value of 0 will completely suppress the enum -# values from appearing in the overview section. - -ENUM_VALUES_PER_LINE = 4 - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. - -GENERATE_TREEVIEW = YES - -# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, -# and Class Hierarchy pages using a tree view instead of an ordered list. - -USE_INLINE_TREES = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open -# links to external symbols imported via tag files in a separate window. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are -# not supported properly for IE 6.0, but are supported on all modern browsers. -# Note that when changing this option you need to delete any form_*.png files -# in the HTML output before the changes have effect. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax -# (see http://www.mathjax.org) which uses client side Javascript for the -# rendering instead of using prerendered bitmaps. Use this if you do not -# have LaTeX installed or if you want to formulas look prettier in the HTML -# output. When enabled you also need to install MathJax separately and -# configure the path to it using the MATHJAX_RELPATH option. - -USE_MATHJAX = NO - -# When MathJax is enabled you need to specify the location relative to the -# HTML output directory using the MATHJAX_RELPATH option. The destination -# directory should contain the MathJax.js script. For instance, if the mathjax -# directory is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the -# mathjax.org site, so you can quickly see the result without installing -# MathJax, but it is strongly recommended to install a local copy of MathJax -# before deployment. - -MATHJAX_RELPATH = http://www.mathjax.org/mathjax - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box -# for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using -# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets -# (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. - -SEARCHENGINE = NO - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a PHP enabled web server instead of at the web client -# using Javascript. Doxygen will generate the search PHP script and index -# file to put on the web server. The advantage of the server -# based approach is that it scales better to large projects and allows -# full text search. The disadvantages are that it is more difficult to setup -# and does not have live searching capabilities. - -SERVER_BASED_SEARCH = NO - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. -# Note that when enabling USE_PDFLATEX this option is only used for -# generating bitmaps for formulas in the HTML output, but not in the -# Makefile that is written to the output directory. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for -# the generated latex document. The footer should contain everything after -# the last chapter. If it is left blank doxygen will generate a -# standard footer. Notice: only use this tag if you know what you are doing! - -LATEX_FOOTER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -# If LATEX_SOURCE_CODE is set to YES then doxygen will include -# source code with syntax highlighting in the LaTeX output. -# Note that which sources are shown also depends on other settings -# such as SOURCE_BROWSER. - -LATEX_SOURCE_CODE = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. -# This is useful -# if you want to understand what is going on. -# On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = YES - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = YES - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# pointed to by INCLUDE_PATH will be searched when a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = __DOXYGEN__ - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition that -# overrules the definition found in the source code. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all references to function-like macros -# that are alone on a line, have an all uppercase name, and do not end with a -# semicolon, because these will confuse the parser if not removed. - -SKIP_FUNCTION_MACROS = NO - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option also works with HAVE_DOT disabled, but it is recommended to -# install and use dot, since it yields more powerful graphs. - -CLASS_DIAGRAMS = NO - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is -# allowed to run in parallel. When set to 0 (the default) doxygen will -# base this on the number of processors available in the system. You can set it -# explicitly to a value larger than 0 to get control over the balance -# between CPU load and processing speed. - -DOT_NUM_THREADS = 0 - -# By default doxygen will write a font called Helvetica to the output -# directory and reference it in all dot files that doxygen generates. -# When you want a differently looking font you can specify the font name -# using DOT_FONTNAME. You need to make sure dot is able to find the font, -# which can be done by putting it in a standard location or by setting the -# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory -# containing the font. - -DOT_FONTNAME = FreeSans - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 8 - -# By default doxygen will tell dot to use the output directory to look for the -# FreeSans.ttf font (which doxygen will put there itself). If you specify a -# different font using DOT_FONTNAME you can set the path where dot -# can find it using this tag. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = YES - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = NO - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = YES - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will generate a graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = NO - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are svg, png, jpg, or gif. -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the -# \mscfile command). - -MSCFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 20 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 3 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = YES - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = YES - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - +# Doxyfile 1.8.2 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" "). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or sequence of words) that should +# identify the project. Note that if you do not use Doxywizard you need +# to put quotes around the project name if it contains spaces. + +PROJECT_NAME = ChibiOS/GFX + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = 1.3 + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = docs/rsc/logo.png + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = docs + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = YES + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. Note that you specify absolute paths here, but also +# relative paths, which will be relative from the directory where doxygen is +# started. + +STRIP_FROM_PATH = "C:/Documents and Settings/Administrator/" + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = NO + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 2 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = "iclass=@par Function Class:\n This is an I-Class API, this function can be invoked from within a system lock zone by both threads and interrupt handlers." \ + "sclass=@par Function Class:\n This is an S-Class API, this function can be invoked from within a system lock zone by threads only." \ + "api=@par Function Class:\n Normal API, this function can be invoked by regular system threads but not from within a lock zone." \ + "notapi=@par Function Class:\n Not an API, this function is for internal use only." \ + "isr=@par Function Class:\n Interrupt handler, this function should not be directly invoked." \ + "init=@par Function Class:\n Initializer, this function just initializes an object and can be invoked before the kernel is initialized." \ + "special=@par Function Class:\n Special function, this function has special requirements see the notes." + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding +# "class=itcl::class" will allow you to use the command class in the +# itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, +# and language is one of the parsers supported by doxygen: IDL, Java, +# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, +# C++. For instance to make doxygen treat .inc files as Fortran files (default +# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note +# that for custom extensions you also need to set FILE_PATTERNS otherwise the +# files are not read by doxygen. + +EXTENSION_MAPPING = + +# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all +# comments according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you +# can mix doxygen, HTML, and XML commands with Markdown formatting. +# Disable only in case of backward compatibilities issues. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented classes, +# or namespaces to their corresponding documentation. Such a link can be +# prevented in individual cases by by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter and setter methods for a property. Setting this option to YES (the default) will make doxygen replace the get and set methods by a property in the documentation. This will only work if the methods are indeed getting or setting a simple type. If this is not the case, or you want to show the methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and +# unions with only public data fields will be shown inline in the documentation +# of the scope in which they are defined (i.e. file, namespace, or group +# documentation), provided this scope is documented. If set to NO (the default), +# structs, classes, and unions are shown on a separate page (for HTML and Man +# pages) or section (for LaTeX and RTF). + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penalty. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will roughly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +SYMBOL_CACHE_SIZE = 0 + +# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be +# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given +# their name and scope. Since this can be an expensive process and often the +# same symbol appear multiple times in the code, doxygen keeps a cache of +# pre-resolved symbols. If the cache is too small doxygen will become slower. +# If the cache is too large, memory is wasted. The cache size is given by this +# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal +# scope will be included in the documentation. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = NO + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = YES + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = docs/rsc/layout.xml + +# The CITE_BIB_FILES tag can be used to specify one or more bib files +# containing the references data. This must be a list of .bib files. The +# .bib extension is automatically appended if omitted. Using this command +# requires the bibtex tool to be installed. See also +# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style +# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this +# feature you need bibtex and perl available in the search path. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C, C++ and Fortran comments will always remain visible. + +STRIP_CODE_COMMENTS = NO + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = NO + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is advised to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If left blank doxygen will +# generate a default style sheet. Note that it is recommended to use +# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this +# tag will in the future become obsolete. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional +# user-defined cascading style sheet that is included after the standard +# style sheets created by doxygen. Using this option one can overrule +# certain style aspects. This is preferred over using HTML_STYLESHEET +# since it does not replace the standard style sheet and is therefor more +# robust against future updates. Doxygen will copy the style sheet file to +# the output directory. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the style sheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of +# entries shown in the various tree structured indices initially; the user +# can expand and collapse entries dynamically later on. Doxygen will expand +# the tree to such a level that at most the specified number of entries are +# visible (unless a fully collapsed tree already exceeds this amount). +# So setting the number of entries 1 will produce a full collapsed tree by +# default. 0 is a special value representing an infinite number of entries +# and will result in a full expanded tree by default. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely +# identify the documentation publisher. This should be a reverse domain-name +# style string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = ChibiOS-GFX.chm + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = "\"C:/Program Files/HTML Help Workshop/hhc.exe\"" + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) +# at top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. Since the tabs have the same information as the +# navigation tree you can set this option to NO if you already set +# GENERATE_TREEVIEW to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. +# Since the tree basically has the same information as the tab index you +# could consider to set DISABLE_INDEX to NO when enabling this option. + +GENERATE_TREEVIEW = YES + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you may also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to +# the MathJax Content Delivery Network so you can quickly see the result without +# installing MathJax. +# However, it is strongly recommended to install a local +# copy of MathJax from http://www.mathjax.org before deployment. + +MATHJAX_RELPATH = http://www.mathjax.org/mathjax + +# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension +# names that should be enabled during MathJax rendering. + +MATHJAX_EXTENSIONS = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = NO + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See +# http://en.wikipedia.org/wiki/BibTeX for more info. + +LATEX_BIB_STYLE = plain + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load style sheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = YES + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = __DOXYGEN__ + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = NO + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. For each +# tag file the location of the external documentation should be added. The +# format of a tag file without this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths +# or URLs. Note that each tag file must have a unique name (where the name does +# NOT include the path). If a tag file is not located in the directory in which +# doxygen is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = NO + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will use the Helvetica font for all dot files that +# doxygen generates. When you want a differently looking font you can specify +# the font name using DOT_FONTNAME. You need to make sure dot is able to find +# the font, which can be done by putting it in a standard location or by setting +# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 8 + +# By default doxygen will tell dot to use the Helvetica font. +# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to +# set the path where dot can find it. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = YES + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside +# the class node. If there are many fields or methods and many nodes the +# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS +# threshold limits the number of items for each type to make the size more +# managable. Set this to 0 for no limit. Note that the threshold may be +# exceeded by 50% before the limit is enforced. + +UML_LIMIT_NUM_FIELDS = 10 + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = NO + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = YES + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = NO + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. If you choose svg you need to set +# HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible in IE 9+ (other browsers do not have this requirement). + +DOT_IMAGE_FORMAT = png + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# Note that this requires a modern browser other than Internet Explorer. +# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you +# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible. Older versions of IE do not have SVG support. + +INTERACTIVE_SVG = NO + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 20 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 3 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = YES + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = YES + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/docs/layout.xml b/docs/layout.xml deleted file mode 100644 index 9ec514ba..00000000 --- a/docs/layout.xml +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/drivers/gdisp/Nokia6610/gdisp_lld.c b/drivers/gdisp/Nokia6610/gdisp_lld.c index e3da570e..1e96247e 100644 --- a/drivers/gdisp/Nokia6610/gdisp_lld.c +++ b/drivers/gdisp/Nokia6610/gdisp_lld.c @@ -19,7 +19,7 @@ */ /** - * @file gdispNokia6610/gdisp_lld.c + * @file drivers/gdisp/Nokia6610/gdisp_lld.c * @brief GDISP Graphics Driver subsystem low level driver source for the Nokia6610 display. * * @addtogroup GDISP diff --git a/drivers/gdisp/Nokia6610/gdisp_lld_board_example.h b/drivers/gdisp/Nokia6610/gdisp_lld_board_example.h index 2681a235..c76cf83c 100644 --- a/drivers/gdisp/Nokia6610/gdisp_lld_board_example.h +++ b/drivers/gdisp/Nokia6610/gdisp_lld_board_example.h @@ -19,7 +19,7 @@ */ /** - * @file gdispNokia6610/gdisp_lld_board_example.h + * @file drivers/gdisp/Nokia6610/gdisp_lld_board_example.h * @brief GDISP Graphic Driver subsystem board interface for the Nokia6610 display. * * @addtogroup GDISP diff --git a/drivers/gdisp/Nokia6610/gdisp_lld_board_olimexsam7ex256.h b/drivers/gdisp/Nokia6610/gdisp_lld_board_olimexsam7ex256.h index 679773ab..6ab59c3e 100644 --- a/drivers/gdisp/Nokia6610/gdisp_lld_board_olimexsam7ex256.h +++ b/drivers/gdisp/Nokia6610/gdisp_lld_board_olimexsam7ex256.h @@ -23,7 +23,7 @@ #endif /** - * @file gdispNokia6610/gdisp_lld_board_olimexsam7ex256.h + * @file drivers/gdisp/Nokia6610/gdisp_lld_board_olimexsam7ex256.h * @brief GDISP Graphic Driver subsystem board interface for the Olimex SAM7-EX256 board. * * @addtogroup GDISP diff --git a/drivers/gdisp/Nokia6610/gdisp_lld_config.h b/drivers/gdisp/Nokia6610/gdisp_lld_config.h index 23ae3cde..78d30007 100644 --- a/drivers/gdisp/Nokia6610/gdisp_lld_config.h +++ b/drivers/gdisp/Nokia6610/gdisp_lld_config.h @@ -19,7 +19,7 @@ */ /** - * @file gdispNokia6610/gdisp_lld_config.h + * @file drivers/gdisp/Nokia6610/gdisp_lld_config.h * @brief GDISP Graphic Driver subsystem low level driver header for the Nokia6610 display. * * @addtogroup GDISP diff --git a/drivers/gdisp/S6D1121/gdisp_lld.c b/drivers/gdisp/S6D1121/gdisp_lld.c index 6a8b4aed..7e1509be 100644 --- a/drivers/gdisp/S6D1121/gdisp_lld.c +++ b/drivers/gdisp/S6D1121/gdisp_lld.c @@ -19,7 +19,7 @@ */ /** - * @file gdispS6d1121/gdisp_lld.c + * @file drivers/gdisp/S6D1121/gdisp_lld.c * @brief GDISP Graphics Driver subsystem low level driver source for the S6d1121 display. * * @addtogroup GDISP @@ -501,3 +501,4 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) { #endif /* GFX_USE_GDISP */ /** @} */ + diff --git a/drivers/gdisp/S6D1121/gdisp_lld_config.h b/drivers/gdisp/S6D1121/gdisp_lld_config.h index 8135871e..cc1b2907 100644 --- a/drivers/gdisp/S6D1121/gdisp_lld_config.h +++ b/drivers/gdisp/S6D1121/gdisp_lld_config.h @@ -19,7 +19,7 @@ */ /** - * @file gdispS6d1121/gdisp_lld_config.h + * @file drivers/gdisp/S6D1121/gdisp_lld_config.h * @brief GDISP Graphic Driver subsystem low level driver header for the S6d1121 display. * * @addtogroup GDISP @@ -51,3 +51,4 @@ #endif /* _GDISP_LLD_CONFIG_H */ /** @} */ + diff --git a/drivers/gdisp/S6D1121/s6d1121_lld.c.h b/drivers/gdisp/S6D1121/s6d1121_lld.c.h index 9d7223a9..b8f8078b 100644 --- a/drivers/gdisp/S6D1121/s6d1121_lld.c.h +++ b/drivers/gdisp/S6D1121/s6d1121_lld.c.h @@ -1,5 +1,5 @@ /* - ChibiOS/RT - Copyright (C) 2012 + ChibiOS/GFX - Copyright (C) 2012 Joel Bodenmann aka Tectu This file is part of ChibiOS/GFX. @@ -251,3 +251,4 @@ static void lld_lcdResetViewPort(void) { } #endif /* S6D1121_H */ + diff --git a/drivers/gdisp/SSD1963/gdisp_lld.c b/drivers/gdisp/SSD1963/gdisp_lld.c index d42bfd18..01a5ed40 100644 --- a/drivers/gdisp/SSD1963/gdisp_lld.c +++ b/drivers/gdisp/SSD1963/gdisp_lld.c @@ -19,7 +19,7 @@ */ /** - * @file SSD1963/gdisp_lld.c + * @file drivers/gdisp/SSD1963/gdisp_lld.c * @brief GDISP Graphics Driver subsystem low level driver source. * * @addtogroup GDISP diff --git a/drivers/gdisp/SSD1963/gdisp_lld_config.h b/drivers/gdisp/SSD1963/gdisp_lld_config.h index 18d21687..036df638 100644 --- a/drivers/gdisp/SSD1963/gdisp_lld_config.h +++ b/drivers/gdisp/SSD1963/gdisp_lld_config.h @@ -19,7 +19,7 @@ */ /** - * @file SSD1963/gdisp_lld_config.h + * @file drivers/gdisp/SSD1963/gdisp_lld_config.h * @brief GDISP Graphic Driver subsystem low level driver header. * * @addtogroup GDISP @@ -50,3 +50,4 @@ #endif /* _GDISP_LLD_CONFIG_H */ /** @} */ + diff --git a/drivers/gdisp/SSD1963/ssd1963.h b/drivers/gdisp/SSD1963/ssd1963.h index 4635981f..1aa28382 100644 --- a/drivers/gdisp/SSD1963/ssd1963.h +++ b/drivers/gdisp/SSD1963/ssd1963.h @@ -18,14 +18,6 @@ along with this program. If not, see . */ -/** - * @file SSD1963/ssd1963.h - * @brief SSD1963 specific data. - * - * @addtogroup GDISP - * @{ - */ - #ifndef SSD1963_H #define SSD1963_H @@ -138,4 +130,4 @@ #define SSD1963_GET_PIXEL_DATA_INTERFACE 0x00F1 #endif -/** @} */ + diff --git a/drivers/gdisp/TestStub/gdisp_lld.c b/drivers/gdisp/TestStub/gdisp_lld.c index d3b74585..90b2b490 100644 --- a/drivers/gdisp/TestStub/gdisp_lld.c +++ b/drivers/gdisp/TestStub/gdisp_lld.c @@ -19,7 +19,7 @@ */ /** - * @file gdispTestStub/gdisp_lld.c + * @file drivers/gdisp/TestStub/gdisp_lld.c * @brief GDISP Graphics Driver subsystem low level driver source (stub). * * @addtogroup GDISP diff --git a/drivers/gdisp/TestStub/gdisp_lld_config.h b/drivers/gdisp/TestStub/gdisp_lld_config.h index 45c2b6bd..ecf383a9 100644 --- a/drivers/gdisp/TestStub/gdisp_lld_config.h +++ b/drivers/gdisp/TestStub/gdisp_lld_config.h @@ -19,7 +19,7 @@ */ /** - * @file gdispTestStub/gdisp_lld_config.h + * @file drivers/gdisp/TestStub/gdisp_lld_config.h * @brief GDISP Graphic Driver subsystem low level driver header (stub). * * @addtogroup GDISP diff --git a/drivers/gdisp/VMT/gdisp_lld.c b/drivers/gdisp/VMT/gdisp_lld.c index f776dedd..9768fd4b 100644 --- a/drivers/gdisp/VMT/gdisp_lld.c +++ b/drivers/gdisp/VMT/gdisp_lld.c @@ -19,7 +19,7 @@ */ /** - * @file gdispVMT/gdisp_lld.c + * @file drivers/gdisp/VMT/gdisp_lld.c * @brief GDISP Graphics Driver subsystem low level driver source for VMT. * * @addtogroup GDISP @@ -279,3 +279,4 @@ bool_t gdisp_lld_init_VMT(void) { #endif /* GFX_USE_GDISP */ /** @} */ + diff --git a/drivers/gdisp/VMT/gdisp_lld_config.h b/drivers/gdisp/VMT/gdisp_lld_config.h index 1d44fca3..5f02f1d8 100644 --- a/drivers/gdisp/VMT/gdisp_lld_config.h +++ b/drivers/gdisp/VMT/gdisp_lld_config.h @@ -19,7 +19,7 @@ */ /** - * @file gdispVMT/gdisp_lld_config.h + * @file drivers/gdisp/VMT/gdisp_lld_config.h * @brief GDISP Graphic Driver subsystem low level driver header template. * * @addtogroup GDISP @@ -68,3 +68,4 @@ #endif /* _GDISP_LLD_CONFIG_H */ /** @} */ + diff --git a/drivers/gdisp/VMT/gdisp_lld_driver1.c b/drivers/gdisp/VMT/gdisp_lld_driver1.c index 28fc7992..46d1c82c 100644 --- a/drivers/gdisp/VMT/gdisp_lld_driver1.c +++ b/drivers/gdisp/VMT/gdisp_lld_driver1.c @@ -19,7 +19,7 @@ */ /** - * @file gdispVMT/gdisp_lld.c + * @file drivers/gdisp/VMT/gdisp_lld_driver1.c * @brief GDISP Graphics Driver subsystem low level driver source for VMT. * * @addtogroup GDISP @@ -49,3 +49,4 @@ #endif /* GFX_USE_GDISP */ /** @} */ + diff --git a/drivers/gdisp/VMT/gdisp_lld_driver2.c b/drivers/gdisp/VMT/gdisp_lld_driver2.c index 9f6bce23..3ca87d03 100644 --- a/drivers/gdisp/VMT/gdisp_lld_driver2.c +++ b/drivers/gdisp/VMT/gdisp_lld_driver2.c @@ -19,7 +19,7 @@ */ /** - * @file gdispVMT/gdisp_lld.c + * @file drivers/gdisp/VMT/gdisp_lld_driver2.c * @brief GDISP Graphics Driver subsystem low level driver source for VMT. * * @addtogroup GDISP @@ -49,3 +49,4 @@ #endif /* GFX_USE_GDISP */ /** @} */ + diff --git a/drivers/touchpad/ADS7843/touchpad_lld.c b/drivers/touchpad/ADS7843/touchpad_lld.c index 02b501a2..74b06095 100644 --- a/drivers/touchpad/ADS7843/touchpad_lld.c +++ b/drivers/touchpad/ADS7843/touchpad_lld.c @@ -19,7 +19,7 @@ */ /** - * @file touchpadXPT2046/touchpad_lld.c + * @file drivers/touchpad/XPT2046/touchpad_lld.c * @brief Touchpad Driver subsystem low level driver source. * * @addtogroup TOUCHPAD @@ -67,7 +67,7 @@ /** * @brief Low level Touchpad driver initialization. * - * @param[in] The touchpad driver + * @param[in] tp The touchpad driver * * @notapi */ diff --git a/drivers/touchpad/ADS7843/touchpad_lld_config.h b/drivers/touchpad/ADS7843/touchpad_lld_config.h index fa1e11eb..13b48922 100644 --- a/drivers/touchpad/ADS7843/touchpad_lld_config.h +++ b/drivers/touchpad/ADS7843/touchpad_lld_config.h @@ -19,7 +19,7 @@ */ /** - * @file touchpadADS7843/touchpad_lld_config.h + * @file drivers/touchpad/ADS7843/touchpad_lld_config.h * @brief Touchpad Driver subsystem low level driver. * * @addtogroup TOUCHPAD @@ -42,3 +42,4 @@ #endif /* _TOUCHPAD_LLD_CONFIG_H */ /** @} */ + diff --git a/drivers/touchpad/XPT2046/touchpad_lld.c b/drivers/touchpad/XPT2046/touchpad_lld.c index cb413fdf..50ff6acc 100644 --- a/drivers/touchpad/XPT2046/touchpad_lld.c +++ b/drivers/touchpad/XPT2046/touchpad_lld.c @@ -19,7 +19,7 @@ */ /** - * @file touchpadXPT2046/touchpad_lld.c + * @file drivers/touchpad/XPT2046/touchpad_lld.c * @brief Touchpad Driver subsystem low level driver source. * * @addtogroup TOUCHPAD diff --git a/drivers/touchpad/XPT2046/touchpad_lld_config.h b/drivers/touchpad/XPT2046/touchpad_lld_config.h index 801f5d18..f1cd9ff5 100644 --- a/drivers/touchpad/XPT2046/touchpad_lld_config.h +++ b/drivers/touchpad/XPT2046/touchpad_lld_config.h @@ -19,7 +19,7 @@ */ /** - * @file touchpadXPT2046/touchpad_lld_config.h + * @file drivers/touchpad/XPT2046/touchpad_lld_config.h * @brief Touchppad Driver subsystem low level driver. * * @addtogroup TOUCHPAD @@ -42,3 +42,4 @@ #endif /* _TOUCHPAD_LLD_CONFIG_H */ /** @} */ + diff --git a/templates/gdispXXXXX/gdisp_lld.c b/templates/gdispXXXXX/gdisp_lld.c deleted file mode 100644 index 205b7fa2..00000000 --- a/templates/gdispXXXXX/gdisp_lld.c +++ /dev/null @@ -1,560 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2012 - Joel Bodenmann aka Tectu - - 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 . -*/ - -/** - * @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 */ -/** @} */ diff --git a/templates/gdispXXXXX/gdisp_lld.mk b/templates/gdispXXXXX/gdisp_lld.mk deleted file mode 100644 index 434d5366..00000000 --- a/templates/gdispXXXXX/gdisp_lld.mk +++ /dev/null @@ -1,5 +0,0 @@ -# List the required driver. -GFXSRC += $(GFXLIB)/drivers/gdisp/gdispYOURDEVICE/gdisp_lld.c - -# Required include directories -GFXINC += $(GFXLIB)/drivers/gdisp/gdispYOURDEVICE diff --git a/templates/gdispXXXXX/gdisp_lld_config.h b/templates/gdispXXXXX/gdisp_lld_config.h deleted file mode 100644 index 331d94ce..00000000 --- a/templates/gdispXXXXX/gdisp_lld_config.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2012 - Joel Bodenmann aka Tectu - - 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 . -*/ - -/** - * @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 */ -/** @} */ diff --git a/templates/gdispXXXXX/readme.txt b/templates/gdispXXXXX/readme.txt deleted file mode 100644 index f173764d..00000000 --- a/templates/gdispXXXXX/readme.txt +++ /dev/null @@ -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 diff --git a/templates/readme.txt b/templates/readme.txt index 398cca3d..ee2a205b 100644 --- a/templates/readme.txt +++ b/templates/readme.txt @@ -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 diff --git a/templates/touchpadXXXXX/touchpad_lld.c b/templates/touchpadXXXXX/touchpad_lld.c deleted file mode 100644 index bba9c71e..00000000 --- a/templates/touchpadXXXXX/touchpad_lld.c +++ /dev/null @@ -1,151 +0,0 @@ -/* - ChibiOS/GFX - Copyright (C) 2012 - Joel Bodenmann aka Tectu - - 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 . -*/ - -/** - * @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 */ -/** @} */ - diff --git a/templates/touchpadXXXXX/touchpad_lld.mk b/templates/touchpadXXXXX/touchpad_lld.mk deleted file mode 100644 index 524a407b..00000000 --- a/templates/touchpadXXXXX/touchpad_lld.mk +++ /dev/null @@ -1,6 +0,0 @@ -# List the required driver. -GFXSRC += $(GFXLIB)/drivers/touchpad/touchpadYOURDEVICE/touchpad_lld.c - -# Required include directories -GFXINC += $(GFXLIB)/drivers/touchpad/touchpadYOURDEVICE - diff --git a/templates/touchpadXXXXX/touchpad_lld_config.h b/templates/touchpadXXXXX/touchpad_lld_config.h deleted file mode 100644 index 356ec726..00000000 --- a/templates/touchpadXXXXX/touchpad_lld_config.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - ChibiOS/GFX - Copyright (C) 2012 - Joel Bodenmann aka Tectu - - 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 . -*/ - -/** - * @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 */ -/** @} */ - From 3c5c7361837c6a27257355312bde48cbfe090fb8 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 3 Nov 2012 02:23:58 +0100 Subject: [PATCH 09/33] docs --- docs/rsc/layout.xml | 184 +++++++ docs/rsc/logo.png | Bin 0 -> 16818 bytes templates/gdispXXX/gdisp_lld.c | 561 ++++++++++++++++++++ templates/gdispXXX/gdisp_lld.mk | 5 + templates/gdispXXX/gdisp_lld_config.h | 70 +++ templates/gdispXXX/readme.txt | 35 ++ templates/touchpadXXX/touchpad_lld.c | 151 ++++++ templates/touchpadXXX/touchpad_lld.mk | 6 + templates/touchpadXXX/touchpad_lld_config.h | 45 ++ 9 files changed, 1057 insertions(+) create mode 100644 docs/rsc/layout.xml create mode 100644 docs/rsc/logo.png create mode 100644 templates/gdispXXX/gdisp_lld.c create mode 100644 templates/gdispXXX/gdisp_lld.mk create mode 100644 templates/gdispXXX/gdisp_lld_config.h create mode 100644 templates/gdispXXX/readme.txt create mode 100644 templates/touchpadXXX/touchpad_lld.c create mode 100644 templates/touchpadXXX/touchpad_lld.mk create mode 100644 templates/touchpadXXX/touchpad_lld_config.h diff --git a/docs/rsc/layout.xml b/docs/rsc/layout.xml new file mode 100644 index 00000000..9ec514ba --- /dev/null +++ b/docs/rsc/layout.xml @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/rsc/logo.png b/docs/rsc/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7948daefba4efcb498af91a331000ae5ac87c406 GIT binary patch literal 16818 zcmV(}K+wO5P)JQIp^fx z#}{+3fAj$Ue?IWW=DEijt33 zZ1GQ+@{i_|f4XBI3N3W3dPoYe)iKJX3F*I<87g-if@cGG)L}qld<2Q z{*Ru>KjX1C;x0UUqJIll7BhMb^NeEj72~KIYlD8Dvyv%Zy3jpF^)X2yo;qf1HviER z`DZ*nS1jan-E~#fr6&dZv^du}m1wHXFbZV(9j`1r{iHAbWLBt8FF3W=+8SexMsASj z8va*}k-lBqH|^ZEVf%)ASKXb-<+L={GsMVpu91=IsBoZK3HWO3>kmJ2-n_Yo%@{r6 zpNqJcUUBAg&%ZG1@|xB}pONE6)&v1v@wT?MEnYu%g0n6+dYW%TSBH@!TE|I-0x zhgHv+b_a2VypCGOk<;dV{p@cZe&mvWFmachF{h(rxAO$H$T{Kp*t%4wP6@4CufM;e zH?7f8rDbdZlbtl%XKHEUjoNzJvN!+yCyzdGZ+Gk9v8Nxl?D-E4esHTkeCfeIKk)v$ z?ekz=}P^CrCKxcxa{3V}T&*@08Jo<}~_Gn~p)aS=F) z-xq8Ryqu46(|{ktKjA#r`-#1SYZB4w=tDQ&b^b+H{%;YtJ5DNnx7~Kb`|DS4d~aS|S0?8g?_Atv0nnOEuGf&dPgJ|!qdFPUg zFH9z*mtFmprMbW42aSAGa418@1mXd8WIKuiAPNu;b~+H<$P3-2ad?mNR~OQ@fM-DF z;?Fn|SGH5x1$<2;SP$fVSP!un8in`3&V@Laby}r*yEezDi`{bDZC8KyKMo0TKTGCz zrN>-tD?8Hen#xW-cae22wZZImn=lT=#r)%#JxD>Q$!^NWG4~LUZa0i+6qu_JHw#Hq zOLAZnScc(@;FkZq>9~^?<*O6_dDk^h#U4+0>G^~So7V*L=D3;1)n_U}da)u|1x<;b zf4S9c2_o2w#@c#2n!1E>lYsg)-0@gfh%RcHtRRh6>Rn zz6TKJ9O`hAAAavgH~*g>91`Mw2ImGAO1?%uP>%QJExh0&=Po%(c97See9fGR(hb-_ zun&cK!r<~T;1>=v0WJX5fdY|}M3d>NWzm(!Uhcj1?UhGddvt9&Y#fnO#~NDPfNcv4 z12l!L4I3YBfy3i?7g#D_Js<=~VYpo(iQm-o+%?FvHfq=jqA?H`D#9|xD6Ea(Wr8>| zhgY)&s3l>5!SN%LSmGOHw@#3M9eAby%h15*A3OJr*Vi6m;#Qn3N4FX7TGYtMBPL0A znErMmIZ3>R+RLf4lv$L8FT;dk55hlTs(K1$i}KFiObkZqCe}ar%rmp=r+way!zW0} zyJmVSo&Tl!)>ua_V#*GRoR|~ip`UOlULOXdI4Me`G+GKI##xr+JjCXu%#H$z3c-u3 zAR%ueOA0Y9NGViY78f3v8vcpjWku0UObTz{M7AFm0KbXr$EaU3;)7ON|8>lJ$`X!ew zKK9fp6Xt&2E!#UcUv%*WjawU(CDdD|aag_DS%s$QacnIwQ03=-E{Lg|4dHgL=!XHhie#6>9ZFIX7_h->{5?qcYu(-6{W zxGGu_rM$D8;hu;iO|(|-;$+o3>&H!;bzsE(AO76up1RA?!<7XRIt^@=#^AXjQiyTD zj9>!6U*HQ+#+f9t*_TjUA*`Eeg7vHJ^j#Qxkeft3=NpP?0_5L>S`IDk8q%o+)qqD(Z@=LL>xM267F$;vH2LR12QRKFSrh{ zFl=*VO$j$XFg{QY5Cza3{sK#)gh`vQ&n%`w_(sV@oi+v;oG2u?EdBytZq z{ftu@ntBcm=X%C4-yBKtQhNZ#OJ-}MKG1iAR84mo**+eaD8ZB_R0VgmM_|HSur?TJ zY8M~u+PC^T_T(As-rD3lSFx9{Y_9>F0>44bkKAVpiZEbgSaI3LfQw;K3n>(cKmu&lXy!()RS?%G zntDgi`Kj%c7%G80iUk;=o*{aW?(91sG9l`X^oPQaF;HsoA}Z~~bWgb6{B zDhy&F-#}!6Du!Da1p_1otOr~Q_!NT z0)AI~6jewDuqG9N64#?v_NHS-M>?g)IBbZ*p8ccmr*Uri*x5!uKYrSR&Sl!*hsIkg zSARm;C+>Of`b%#pERwSQ2ExoNQa06U`ts^wvyb__8@&3=W4#cPToYoM8NuB&4#hV0L@u4NA`?HeUDNV*_@*$u;Vg-=tM-w2#7C)UlI+v z?T!*KVL)oZXCxu#5;OD%fgUg6R2KV z6ZGX7?d!n1X!?wiB_ExB%@$bh3CsiaGLC^lfiy9vL?C<@`wju=fZ4( zrocfkXD!R~gQmZgCnqq^2nmLzqrgRWhOZS(TLX77{1&bNECz3?oPhy3QAij{m)%a( zczFU01Q42zFsMAVBT(KVocQ=U0!~oN_LC4KSXQ6laRd**ya=>)p%?`s%ttxU9sW9Y z@C&Z{@}2+rmqS3@=8p9vE2|b>xM1tEyS?*mwsHIjy?(W^3v5%cd0Y{0&l59Aa#@mc z6MKT#6&ek3(J~D?Q?)tQ<*H%!0Aqq%jhqR>4yTRM00$5E&kYzLH&dI8oI&hi zQZieGiGff;1%(&@6$_Bbq5{m;%_X3Tvr{x(~NxK&$Z zD5eYYIXqIP(gc0zD3jo7mN=5#46XxvNXwWAGeATOQd(jiHJ;@j5++Qx*90^Tg4o+c zx@1#pAFgoN8*y`mwwK;{`s*iM?_9#dGt^8E%0XCFG&ccAx)H8{5&+32_Ns85P%b>G zC?zd92$ra`j9K~$lo-qnKC*|IW%wJyjRIrH_Hx&DBU(elGZbKxOs|1>-i8tYT>-)t zKEy-;e*TZL8Yao7 zXM10SMc^)u5+-DeWNjTZ{1T>?LS7bN1Nj|Bh%y@YoDl2l`K32r{9ix&v;R&PrmWULr-KYWK&K1C&)lbP=<<2lHJrY@DNt^>j0|@Da3`6P_}@D90mc9lIsI# zfvoN8C;f?GG4I|awBJ9WOb;Wm6udDAvUIne>o+W!Wr-wPkjX9vOq68;*ej@EV2`8L zwqwX3FkV6THm(HjM?7h#Mn-u2(C3XJ!e}t_UJ{rj+e@V69vx(ko-0Nf1k?jV28FC; z#R5aXV46~}P|BJ|mJgG%aQyt%KXi3wuetsvmsz5{pt+My+)QA^q|xR^_mE6%e#H1_ zC0drZfs#GTaBBh)WEXM!N}i?1)5 zfBZf;*XQ)@<>RSy=ebHtDt3(Bmfj5V2$0Io54M504SPJG*@04U2DZG|=8Pe97i2}@ zfXoYk2G|xTMTD>hK?zKaint)mQvmRQ?VF5}*|IH!ludVVVZ?{J243 zj&|V}cHp9_U@n1Nk;!lGyKCQ^I~*uBsyg8N3a;v4XVN+YCO?b-4NY{CGW2HUL0NH^ zlNm1b4Z=q@A4&`m0zf8UG{6a{BFQ!wG)(JedHV;`(H**TkZYq**P$m@ zvos{J;1pVA9Qj>Oa4%Ehnx=M>v~jQ@=TX(3E;Tjh@Ujkh2pE&0LkE!q`le$DY|y$> zL{zCz91_U1DlNEkN91=8-2JVuerIo-JDd?b`NWeAzmCG2aJ9!(BRR??(6b;4fGYun zBSJ*q9a%U&JTmCv!U_jtX{xIdp-%#bXb9;^tcVNxu275s#DU)iCn>$XX)qs1H_wDA zy5fY(!h#%N;EMnRvFtROCLyYnGLKKUfmCnVvg06$yQed$#OeAE``oe$G74V#K|_!g z#|F9%5DO63@*@Ky<4d9mGhG@|e)rou@e-e%KQ$IkRm z(EtE#2aZ7?A>5e!6Z#^mPop)F=|pS~0^M(O0^@t#u8f^rck7J@NnAL3HttZeL|&do zkelJ+raaRt0E110ki`~6+ghk-Aaq>Hmj-=1*X?@#nZJIR!BbN!2$wrgk(0nJwv;Qig+T}Hl~(9wk0CX05^L<_-b=J+{CM8@~ugS zKi$1KJII~=ga$!?aEnjTn`K(E6~C-z+2mk}D=(=-yg3u^ipNt!ses4b(cXUW#P!yW zf9iMl#d0LR3%M1<9qNOE*eGCVfX?v12BiQMtXLdKJeX;ZEiSpp?RVX=mn-jwvHapQ z@64JvC;fP#^R)tOb`Ykm{n2ELo*O{^MXnU)69!x*qz-6U*!YNuEeOGdJ3NVw#B9VI zN|Tn^(uQmYEP&i%hD#(cNs#m(8z7cR3U6GxR7qWZJ+U(C$}6Y?Gd447FSy+H?VGne z^7}jgeyETB;a>X$#@zI*FP$=+shxD%<^TP_U0`_wZpjXsLJ6ZTl?1oKW(7b7BnJJA z^cBpjD+a5lYgT`_m&@*V3h9LSc%}=juj*q}*nI$OgUx)P8l)Q)5pNJT9DRmJS)oq~w1V1AlN10H zMGLBk(G9pst=Aigq{(16k|n(rO>#Zf*}}4RJp?F1YsCRjW79 zE+d{y(CH{fabcYzhA5+%09G>aucHK2u$7#F#M04U>~AsamQ;m3-glatl+8xGyr?S> z3}mcS8g$CQPdplnf#GKqrG%SNy$bO|panxX{a)hEpl4%RP2Dkzj+-!k@@1D^C0Fv$ zEVK~;VuN`(TA$eZQFm9@;BY2Yag5#5n9m%AJ|^^bq6-ZJ@iR?j) zVcl~^b?xebT`*QDjp;^!e*tV+?h-Vt1<%?GL^Dh)k`Rg$?-ZuaqL#QwOr)_oS_YP3 z8R&GfrEB*?_uPNYl~>sfq-?6)EWBiNzotjtHK&c6l<+2g@E_L4}PSJ z)BrMpmEl>D;Db(jPzG7@NpKIX8wcqh7|QNyJ;a>*$wLd*nEoS2=5##P2N zGQ^6wSk43>98eZ^Q*@gS|D3oe(9xQZ-_*@8ON6+Uil8NMxq&In43U6e6^ts{;{<>~ z#UeT0Waw*M)=kavX?vIgZ+$~Ba7vS6{_jny>{lr zBeWx!r*}DR}LlTesa{Xkj0ol zMC*E(b%9J;j0{?Oi3`(!3yuJd(bJa%g9pelKt)8$LbV1058w{wBohMRk_`3el5UWy z6BLWGKsD=y(z(FxA(5M6r?wzE&)^ESj{{CF>Zz&;3jQH^uuUeIo;kysY<1n?WU(ag zK>KiTD0{p-Nnl$PyJ#h5i=HXVImJW>?t-PCof3Blh`Vmb8YX;QFiF2Gqs``kIfKHL zkY|ObQRHE8OApwy82ie{zI0VGK@ai+%esmmx9!seP z##5k=mXBm=~tHBXI-TGh0W>)p7HbOj^RegU;ga| z*+Y}929UKg8wVQ_?xnh6*-%}>js$3Ag;v8}yTg(Zhn%>J?p)$v#1Tf$EqWbIOP_L& zsao_Bxlh&$HGt*b#br=LmM0}?t^>;=+vZ3jWl>g}I=RN}OMh}BAQr*0O@8*7-*M`Ows#D3Y7gIVr>BWq zfe8>|0M8k^su2`f`6ytm!JO=vW)g_Dbi9vNxnU`H`$5U;VeYLn%^78DmpyR(e)_ z6^7^&xT3&HTzIYQB@FOyVmwV&5mbsJi=bG+{l%>OWCasD03=vPe201N*$ZI;JKO$hT;)Qkd_^iZ z$MjE-!ZVeIOfRRR@ImB719O3910xkK=o!g8b&OA?ih}9@oSu` zUSwM{hYT*;7*G}zJx~@dUbwJ*d3<%{(KdIjGU8?C-% zvLsQ1$+9G?49)-_D-MZq1}~mrc9-n(OWW4=@HBIJB}GE#i@lHR+Ou<*b4r*KWs4#)D(EI zkTL;>gTQhRVZJ!Ja)cuscnugIsPD}D)&D{dFKlSwef?Z2HPjH5y`<`Fwe`tduFC|K z!qL)4G>tVH;2rltPp;e9K5 zO@#SinZ-ix;rX}Ud-sqL_dg!~5p@s?QR6HbPnjA(U8^3<6d5Zhn@BMM$%0>!jl^s; z+i#*b$05FJtp_Jwm&3ZUmf&sc$XugLZzCqdS!pre`EOfM(0zSk>NmV z%8SL4NJq^;f2&R99!1Y4FZsqrZ;R~?Z$l)ul@aRzVkP#Q>< z7KSsr!2Y%%QwK~?WtWUy@UY`OVMr1dW`HPnzP}v?RHB7VPn7tH>jg42&vb zB=00=o^i};kF8S|W(ryJ_@ho3<}?8hXbCHafm-^57xR6Im9Qd`1d$rWO07deTw!EROpmTeeWsfBGkIc6QR=%5F zrFhu4zj4k;PyJzYj?F1xl(?G)vt{KKlA;Wy5~`k;3k5f`J@&xkb4P{KPA3S7dcepT zT`qAdeaiGB7qv%YX~WEDc~vWb5K170ch7v-k*GMeXn> zc-}?d@#iG;TI4vuTTyC2t=MJJp5#dDgvz^f-G_|0OG;14M}=odE(U49ish(YFc%Rp zkVq;P`Hj42Q<%asCL&`@_0YnROny_}mFfjCE#g2JQP$F?f4pSx;^WO47=1^qSJ!0C zwC&i{T|a4J&X5LUDZ`{bpD)tiC(A5dFi5^|>zD56j}5%txb@-wwr9F_XZFNz`{{2w zA`!bkSUb8tuk&n9lbCJm_QtQDf7$-d)Mi(NyO~?F_&8I`VlHdqNC)w!euXOgM zSKj>dUx2y2voF%$62J4&N2V@0x-*w4xYUe96FEQ+N>g()5aax>?su&>QITwxpM(?g zN!^R(rLxdib*c#P4-IjrO`6X0MM;EmMx^51QT}*HiCNI{3h-7&T@O@krW(7{* zm%g#gV~}@O?K;LcPW4O9D$Kiw?*Q|vZyOsUJ5HW@d|h4Dvr8Y(=i>z}6^SKPyOPoM zSUPL-1!B2E$IwvDFgyGEFaPe<-TjeQ-+4QsYsa5`=3pihtSp0-=!*2~jQC4JOJ8{Y z)H6;$fSKB4#bQz>YFaERGo@G$k0j(Is*xir7alU=&NyOG!iMQErZDqyY4d1|xlK&9 z%g4a_Hn_;;5_JbcDCY%^5oN)e$b0|`O`5=>UB=S)w&`h8b+fvXuq6w|q8B`;M`e3O&p-VY)QcZn25>vUP zQmoAt@n;wl*bA~iW|S4{a!|{e2-?6VN*1483lZk@E5lE+je`vHXraBzi zWYXjDrJJ9>(LKT9wD^}IjCxSxM z1L+2tJ^k=c{qP{57$FIpW{A>ppc(q#gl4l+XgTJ3q8m^oGa%_x;Vn)eL- zAPh5nIW{~Y zsCT8lX6c5V{n0t|7Ukl3(=?b}udVV%24eu0!off~o6Q?WUo`Iah0~eB&|r*dhMUlZ zvu8#-yF69S{hed9X?y9hlWR^?WEZ;0F|-~x(Xp8^bAuQefDH;JoYKS-`XO~WI!dUd ziwt4R=YXv$z<`dB%SsTTab!#^6e*D0pphFiO;MN&Y?zOsZ$F16ZQOEe!FN*a9Kf%Y zWVrt6){-793phoZxskSa=c2F@KDWAV#~SaraAT}RRduJ9t#P%*Qbi2<-?RTU1~Z#hpYg%}=npy&SMRvQSio$(HoFOTh8cOp_vXD?D60qBoeSIE9 zN=8!y0|T|yW$m54eUYJf8U$~lzkeVW87e6W{o#)fTzZX5%$CpnVg~m2g|sufD7!o47v5|H~sx@ho#UixNh;= zcfSqP=^h(vZ}@O}{Tx=ujz9VEn}7VvX$$IKzyF=8Ij*cDhn+Ueq9jF(tz)&l6tE(a zSb0Q6HK{13=FUnP`>4cBY%}1bX)OzM?p>vopQ^aM*tcSEgFdI4@iKph7Ps=?xY#1w zwrxJer0Ig*+uJ+1yM4>nb?2OSwq#dej&1ENcCQEc79dh0kx?Xd(?^YuKJw726$jqj zig#wo3=jnpQ-zf;OfqV9F{8yCA{gF{Ke+Ahe>*INR$`;ZJZ8~L^`jUa)6KgFxoO9w z#C(dBdr6=|-WdQ&QBgHo^t2Y8kg9Om2#>v$@koje9np2dL9HQx=;&IW4^NlT?vRM* zJ#Ao;B&i}=L5Y?{A1;8(%vSc$gD>}IbYIRM>Fg;j3j|Aj8@FzJe%T9Geeas~?w%b@ zyQWT^kr+w=%Dd&pA3XfQK>H!nC%1_zJGFp#m4p7W$>r@bxco=O-nVD{MMSW5s zy?>nh>tEeqhLA=;IIE=39%6lUG}mRI#Rc|MnzSW&u1C*gz)YZK2(STmnE`Bw>5dp0 z!Gc87Bw#pTIUq*V8OROzD`QQqF)L8J#pr^o)tq3@^ypgLwE0)BTz0lOK1O6LbJ2D+l|N8b{eee6%91LZj zf9elGJ4xC^(=w50WA%V?8Z;wgfep+{j_~ha_1(|>`Mx>VH;<{E+`dqT$z#TA3W=NP zH9&e6QW*BIhZ*c{xDDv8szI~gq*@sT2nAoT0W zwR!6%r_-5AWo)YBowwfY@9x>UdgTFA7LKXMkJ#PcQ94Jqhb0li#`YP-vL1tHdeG08 z?cnCnXVY-soD1kRW8j)$&7X)o7NVwt)JG357NMmv=MXbflNcHR zGc2o(S(^Tc3xJIk%r6D6}?GMMO`7iB$&UYRJe2GWDo zAZ%jn+ydqqNXaxNDPZdk>^~J0Ex|H~y~|zxLf#l`Nnpi{n~8cTYL(QWTZE$-0?dMT zy;|(;k?u6lJK?lMB4yg0!Sd2*B;j@YlR)N7T4I{l>Dkq=(0B3Ka=n)RYv`lZc|DSr!(A4)~l|=^aFD zIwN1SECi<%D;WXwES!FHGMS7-6RvV%F!Szv?>S@1i8^+~NvkqXMk0?q{mkl>D`!og zbdZ$YwEhFP2lNJ-IXW7goPXRU4b~mtd4?GPzAwJyb92`BO551K(C4$rMp#|i@*yES(z)EfMqtMES&KeEQu&lqyRBYT0o>G4)lb6T-Qp3 zD+D{LVM{!s7AT-~@e#;$F1d-z7mmkL=}b1FbvPXE%JQ;!G~#wJkcG{=o0dKIwBPHv z>z@CbH}8dmB<|f0{>EG8O_?!VVA+bU^I`x(I8J>Dxnkm|yB!13uZA7S0q><7h4$%wAelnE6@t) zNJGhx1v!g3_^G@ptY`FEl=QhTKJLO@t!-LfR|#ux+0)vtt_SoU`sF)>5gd=2DWj->U7Ld62Ti@^x;|&>5sRA zl}%FYV~24H5n+RuFU3To>0%wF2m+$Jgd}B8xO~L8N&Q37p7yTvU^EwtNBeu*_B4b- zj`r3aOP_pf!j#d`Sg+ryj;bqp_K}xXz5d(*6Za2Gf1ezPfI3Ackget|BF9Di1zz6O z8m}2scHRY-@8u%k6=uzI|Pde+sD4XhUeDw7vGj0rQTTEd2 z`Ec8b2A!~doe^^N5BAYGdf&vo`PS>mdIJ#XF}8{8dpk$#B{Ksfs;4;t!gg)X0+Y7I zkv5H6%x3G@keAX!vJz#U*)4?vP8fA81X_r1S&%`bZrZIAr?soTe{ zEMK6s@PWm2@`gy8JWtX#8Cb03VYyC&$;G;P5f4V}g^UbmgfAJrVjB6Yy+VuTFOV_8 zjbZ{ou_hd8idI9R7@oq8i%C*eSDlO{nL%52?+&<}un4($N=qeQSpMeRxnn9PmcG~Z zJ{PT26hBs+?9yV~$DKLpnA4}d^TPhYvdv8!l_Bn0AW>$e%NJYTSf!L&g2;X3_LuId zWaWFm&TyUOP3u>kee1cstNZ8?)H8x*`p{tvn_7L>U?XU@28}W7p@glh_&8SH-P&t< z6_P4s29aL=NFOYt8 zV8pB$^PBeU35QC}Jm9Xp+v9F%YTmtj=hV3)51%__OV_47dOL{tTtA9`Nw{2r@4&!u zw2~`t`0h_{xpO$vOb!rF2~n!3e+u)BkpalV-2oR_z9;O;t#P`VfB9P%-uv4>@AGQ= z9f=4ysC*Rj*2|cKWW$U^TZ?IQa7`hqj!|fyB!jj3?ce_ChUSLjPCQ}uxG4c=Kv8US z7SC->bb!#Xg=zZbXhttMN0+Q$z5c!T-&^|PQ(HD|R8v~Q&$*iyn~CazvUyS+DxWp= zFkRywudltmE0IVx?rZ`h?c%R}BUc!D=$?DDYT}=WP1rEEIYX2bcGJKJW(s}VYC=hU zl&`8U-%G#CTzAG^S#+gOJf}Rfx?lN{k{!els-Cs>911jGrgSHoOSzrHBHDq3dE`oJ zFQeg^GP;lx#Xy76%MB+9H1hwvqZp#}{2a(FdRml){k6^h0gan}> z_Rg|5#~rcgZ!dfIUAO)5%|CAba1YSbnM47H9Tp{tsWzw2o6Qu4V$o2zboT5yCoMVo zyI22JO;0|#s(pF)*oh?r(_{5gNn@s8^v^ zoD!`mWn}V_&pR~KS&(C2zUfPCk2U9xlCas48{Oy0R>RpsckXTq2I}An{d#w)T=~hx zTQ{xW+_=p!$&~Ta#>|+p;lmGd1%2N9BlkX}k@JG_52MNn%vmYr2C%XT;h@??>3fK|F!FIw!OzuTQS(SW8{%jTr;rg5x`BD6oN&D8Z6U|h{fK< zfBxS;`qpJX8zz+wJU}^pX624(Pt{^Y%b*g=$4zX!P#~3kBx0AMTlciSku|rR}!ooId0z_i}#zj`3SLvitj_S6-_cKk5YjXtrP`d5bPzKLOG=b zsp=!{X5wR{Zwea0m;xfABbg7(6BaN0{eyoBdPeQn-S>GktY0?g+ou{CQgMuu?lg)u zHyBAm?_Eup^$SA_%pzMW?dvgWM~A<2#ka1%`s$OYI;i?}?sF=vWrk$JuS?O_|DGTdFUYs~5Fr z6_jr=6Ds-e56?|sbjIh6@^ z5=-aPVCnHCOBOAAY1u~`J}gqUJ9030|GcAO!n_qrU$k%IsSd+gA;B;JAUeyW3JHUC zSUMmcZ<5aB2j!?Vi5Ro!=xT{O@VOoEQk)c7UZgb^k|f{CdtD?jvXrOw+$c=WbXGE; zyF5oKjgXhtzp|H+9Bh8BzkKrgH+p3UNwyeAS50?SOKMPbgb82~JMIdJI7(SbKe^%h zOP_vh>5L<1z46wIwtDKQX3pbF)RFY5hwg#vm;;BBz7yu2@`ImWM^_rcw&qs*wE=~T zZkrILatmIG<7mn+$y?xBIN&2hw?D;2K87lTtY*B!WY`4r= z1ZtA-KD!hKJAKeWygP`qTvW<|2-(K3{qdEFwaFEm)^~L!`kgr}NmcPvxIV^W(){Y< zulmA?d(25^$$rwgGgjvsi3IgYzz*VxIOrw-wUC^_9Tz>ab zzQzm_H|haa)FHx4fI%lXIbb8P(RBAXYV)Hj(p4!rN-1bOvy!gd^4=FgTsWF`bnn=( zEAfYXZotsOTGo{Zq9e^kIJD=?y(&eor33v{y zYNd;q)Cy?uCng8{(^)ixGbAa0c$6!wt9n(j$z1-c1#f+s< zo(fX?C<#Q>m~i-X=ghc0+uxt!o&1h_?)BNes3$YOx$3F=@4s(%B9S~h6LBhjq&{IsN;&)dnGzpNU_bkvoUop}6-(Q*=)jOk*zeqI2O zzV%SF)gIdO@m;1X zMq-@H9#U1~&X=OHLOV!wk;PV%gQjZ}*PKKfBW#Ksv0A4ieOvywi2K#6PJHX3*Af$` zrxu@TLwA{y$OKjt79D}zTyvfL?ptsB_LbKdX5r;mp8d{cSC&=y+sg(VDTlTteby!C z-t(I$4=qhMta$07`!4Bwc|Z$D?sB_lx}2A?qSL!c7zU*PV+9mfQq5q`z9!<#apq?Z z)ie)7?>5*wU}su^RO~A&GRT2ZP}(NUbUQzM#FX>De)0XkzkA!BJwZa91=1;+AZneT zrsP2p_ZPQc^Xr@LbYH9jngLrVH)tkznQ#xSuRT;Xf*p>;#Nw%MTyf@K?tk8Q20oVv3}w)ARv%?SB=KxFY$b=! zUds<4&1_-ns$y1R9N^`?wYrhuy&D^Xp>cgyqSjXAvQrD9Q@`M}f*u8l}K9@F3)rHg>siYXkp60p_>Ph{{&Z{U`2X<~(jWc! zvWM?@uz=5f5?PuYlYj~_(|VXFu1XqxCPcK80#m|00w4PUKg{&%l8tFk75@Cdup+dS|Mr9$&Ow5{PwrreRurC1)p5)z>SE8?K{t&c?!VTC;5lXks<79mM5de zVB@a;e(Wx_M#+?A=2X{|lsK^?KN$6dKlkd={k_Zg9{#>-xg2xpwhF3@rhGbe&0&G5 zh~dDda+a~|0I%pO8QEE3_Db1)ZVpH+Ey0fQrtGn8rn1&>H_>`~=`|Nz(zC13*pS={ zW#IrgA!WovSF*)tCRkYtpvq#6rYk{T`qQ8PaR2@GCcgI7J)_G@FAJW0lz-N=K>ez0 z1AvOZr7Ss^YMx+4@PnP3QvJGkxF))2!#(`@D_?|@IIyjRcm_supgs>Ly}D&1vTS)K4+bVlUYfA2eopNJ(v1Bpw6 zM@t_(+P!havmir2<^a0rcy7z5E_mR?{rZI${nxFx+ZUo>g|&5WF{{2>J#sd>kkdPo zm!Ep!=;)?c4x`O&*?Y;D;3_U09hy-h9Y zW^6z%Gst&HfNkcXOkjT5V)1 zGVGkA|2qDm6*#0fUw*Q)r?a3HF2CZ3pK(!s5XZBBd0^J~vTy~pjUz8U@taT1zxL`f z#ZHd9YW&4No44?~%JQ?M3I{1WRXUh^ecqAk+;#95Isf}dm6Q?Z6dGL2JacKFf|Q+x zqpccYFDobhqp0@?Rvso3FZb=&We?SK2vU)}x_7ACG4w5CoP6C$-2%ZKVl zhx`bSvAJi_Q*Njqaft#nEjf{ug~@&Q+zcPx_#c;z4HEC+G`NU)=do%ZS@X&x!@u&O z@rt2*DX;n4e_ngtE&cB|Jao;ke)Y4Tz4-deZGY4b)r}7A;T|u`llA+ry=kFuGCr_T zRB!+Ut}FqA0et?!fa#*6kBw(Q%SlWojxf#5W#?Rc(M>=7<}fdQ2+ZIAcaM)&y?Wl) zzWl?VeCwWV51th~^7pN86ru>&Z5w&lVA10>p_Imtl3i62CK!rXef&xNnO9#t{@_M`SK9_DWA@3GpD129PZP1Ll{M!fa%H%gDT2PJ!0!m7lP + + 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 . +*/ + +/** + * @file templates/gdispXXX/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 */ +/** @} */ + diff --git a/templates/gdispXXX/gdisp_lld.mk b/templates/gdispXXX/gdisp_lld.mk new file mode 100644 index 00000000..434d5366 --- /dev/null +++ b/templates/gdispXXX/gdisp_lld.mk @@ -0,0 +1,5 @@ +# List the required driver. +GFXSRC += $(GFXLIB)/drivers/gdisp/gdispYOURDEVICE/gdisp_lld.c + +# Required include directories +GFXINC += $(GFXLIB)/drivers/gdisp/gdispYOURDEVICE diff --git a/templates/gdispXXX/gdisp_lld_config.h b/templates/gdispXXX/gdisp_lld_config.h new file mode 100644 index 00000000..b1c71729 --- /dev/null +++ b/templates/gdispXXX/gdisp_lld_config.h @@ -0,0 +1,70 @@ +/* + ChibiOS/GFX - Copyright (C) 2012 + Joel Bodenmann aka Tectu + + 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 . +*/ + +/** + * @file templates/gdispXXX/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 */ +/** @} */ + diff --git a/templates/gdispXXX/readme.txt b/templates/gdispXXX/readme.txt new file mode 100644 index 00000000..f173764d --- /dev/null +++ b/templates/gdispXXX/readme.txt @@ -0,0 +1,35 @@ +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 diff --git a/templates/touchpadXXX/touchpad_lld.c b/templates/touchpadXXX/touchpad_lld.c new file mode 100644 index 00000000..8a832d8c --- /dev/null +++ b/templates/touchpadXXX/touchpad_lld.c @@ -0,0 +1,151 @@ +/* + ChibiOS/GFX - Copyright (C) 2012 + Joel Bodenmann aka Tectu + + 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 . +*/ + +/** + * @file templates/touchpadXXX/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 */ +/** @} */ + diff --git a/templates/touchpadXXX/touchpad_lld.mk b/templates/touchpadXXX/touchpad_lld.mk new file mode 100644 index 00000000..524a407b --- /dev/null +++ b/templates/touchpadXXX/touchpad_lld.mk @@ -0,0 +1,6 @@ +# List the required driver. +GFXSRC += $(GFXLIB)/drivers/touchpad/touchpadYOURDEVICE/touchpad_lld.c + +# Required include directories +GFXINC += $(GFXLIB)/drivers/touchpad/touchpadYOURDEVICE + diff --git a/templates/touchpadXXX/touchpad_lld_config.h b/templates/touchpadXXX/touchpad_lld_config.h new file mode 100644 index 00000000..e7d046da --- /dev/null +++ b/templates/touchpadXXX/touchpad_lld_config.h @@ -0,0 +1,45 @@ +/* + ChibiOS/GFX - Copyright (C) 2012 + Joel Bodenmann aka Tectu + + 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 . +*/ + +/** + * @file templates/touchpadXXX/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 */ +/** @} */ + From 5b7b4c2db6718b1f0242d611439d42bf163c3d1f Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 3 Nov 2012 02:28:02 +0100 Subject: [PATCH 10/33] moar docs --- drivers/gdisp/Win32/gdisp_lld.c | 3 ++- drivers/gdisp/Win32/gdisp_lld_config.h | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/gdisp/Win32/gdisp_lld.c b/drivers/gdisp/Win32/gdisp_lld.c index efb89e58..5cf25535 100644 --- a/drivers/gdisp/Win32/gdisp_lld.c +++ b/drivers/gdisp/Win32/gdisp_lld.c @@ -19,7 +19,7 @@ */ /** - * @file Win32/gdisp_lld.c + * @file drivers/gdisp/Win32/gdisp_lld.c * @brief GDISP Graphics Driver subsystem low level driver source for Win32. * * @addtogroup GDISP @@ -443,3 +443,4 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) { #endif /* GFX_USE_GDISP */ /** @} */ + diff --git a/drivers/gdisp/Win32/gdisp_lld_config.h b/drivers/gdisp/Win32/gdisp_lld_config.h index 014ebd7c..40acdc24 100644 --- a/drivers/gdisp/Win32/gdisp_lld_config.h +++ b/drivers/gdisp/Win32/gdisp_lld_config.h @@ -19,7 +19,7 @@ */ /** - * @file Win32/gdisp_lld_config.h + * @file drivers/gdisp/Win32/gdisp_lld_config.h * @brief GDISP Graphic Driver subsystem low level driver header for Win32. * * @addtogroup GDISP @@ -50,3 +50,4 @@ #endif /* _GDISP_LLD_CONFIG_H */ /** @} */ + From db0c770ca0c7e04a86075c4dfc073eaf683ff5f7 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 3 Nov 2012 02:56:59 +0100 Subject: [PATCH 11/33] even more doxygen... --- Doxygenfile | 2 +- docs/rsc/logo.png | Bin 16818 -> 0 bytes include/console.h | 9 ++++++++ include/gdisp.h | 5 ++++- include/gdisp_emulation.c | 1 + include/gdisp_fonts.h | 4 +++- include/gdisp_lld.h | 4 +++- include/gdisp_lld_msgs.h | 4 +++- include/graph.h | 4 +++- include/touchpad.h | 3 ++- include/touchpad_lld.h | 2 +- src/console.c | 44 ++++++++++++++++++++++++++++++++++++-- src/gdisp-readme.txt | 14 ------------ src/gdisp.c | 2 +- src/gdisp_fonts.c | 2 ++ src/graph.c | 2 +- src/gwin.c | 3 ++- src/touchpad.c | 5 +++-- 18 files changed, 81 insertions(+), 29 deletions(-) delete mode 100644 docs/rsc/logo.png delete mode 100644 src/gdisp-readme.txt diff --git a/Doxygenfile b/Doxygenfile index eae03f31..9f10056d 100644 --- a/Doxygenfile +++ b/Doxygenfile @@ -45,7 +45,7 @@ PROJECT_BRIEF = # exceed 55 pixels and the maximum width should not exceed 200 pixels. # Doxygen will copy the logo to the output directory. -PROJECT_LOGO = docs/rsc/logo.png +PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. diff --git a/docs/rsc/logo.png b/docs/rsc/logo.png deleted file mode 100644 index 7948daefba4efcb498af91a331000ae5ac87c406..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16818 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. */ +/** + * @file include/console.h + * @brief CONSOLE header file. + * + * @addtogroup CONSOLE + * @{ + */ + #ifndef CONSOLE_H #define CONSOLE_H @@ -81,4 +89,5 @@ msg_t gfxConsoleWrite(GConsole *console, const uint8_t *bp, size_t n); #endif /* GFX_USE_CONSOLE */ #endif /* CONSOLE_H */ +/** @} */ diff --git a/include/gdisp.h b/include/gdisp.h index 3964e9bd..9be97a12 100644 --- a/include/gdisp.h +++ b/include/gdisp.h @@ -17,13 +17,15 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ + /** - * @file gdisp.h + * @file include/gdisp.h * @brief GDISP Graphic Driver subsystem header file. * * @addtogroup GDISP * @{ */ + #ifndef _GDISP_H #define _GDISP_H @@ -317,3 +319,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_emulation.c b/include/gdisp_emulation.c index ec3e6a66..2c3f7caf 100644 --- a/include/gdisp_emulation.c +++ b/include/gdisp_emulation.c @@ -767,3 +767,4 @@ void *GDISP_LLD(query)(unsigned what) { #endif /* GFX_USE_GDISP */ #endif /* GDISP_EMULATION_C */ + diff --git a/include/gdisp_fonts.h b/include/gdisp_fonts.h index 4b9f2287..e3b07e86 100644 --- a/include/gdisp_fonts.h +++ b/include/gdisp_fonts.h @@ -17,8 +17,9 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ + /** - * @file gdisp_fonts.h + * @file include/gdisp_fonts.h * @brief GDISP internal font definitions. * @details This is not generally needed by an application. It is used * by the low level drivers that need to understand a font. @@ -88,3 +89,4 @@ struct font { #endif /* _GDISP_FONTS_H */ /** @} */ + diff --git a/include/gdisp_lld.h b/include/gdisp_lld.h index 966a8f54..8b7dd0e7 100644 --- a/include/gdisp_lld.h +++ b/include/gdisp_lld.h @@ -17,8 +17,9 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ + /** - * @file gdisp_lld.h + * @file include/gdisp_lld.h * @brief GDISP Graphic Driver subsystem low level driver header. * * @addtogroup GDISP @@ -648,3 +649,4 @@ extern "C" { #endif /* _GDISP_LLD_H */ /** @} */ + diff --git a/include/gdisp_lld_msgs.h b/include/gdisp_lld_msgs.h index a5cb885b..5885a70c 100644 --- a/include/gdisp_lld_msgs.h +++ b/include/gdisp_lld_msgs.h @@ -17,8 +17,9 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ + /** - * @file gdisp_lld_msgs.h + * @file include/gdisp_lld_msgs.h * @brief GDISP Graphic Driver subsystem low level driver message structures. * * @addtogroup GDISP @@ -191,3 +192,4 @@ typedef union gdisp_lld_msg { #endif /* GFX_USE_GDISP */ #endif /* _GDISP_LLD_MSGS_H */ /** @} */ + diff --git a/include/graph.h b/include/graph.h index 6d0849d8..bc0d3d15 100644 --- a/include/graph.h +++ b/include/graph.h @@ -17,13 +17,15 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ + /** - * @file graph.h + * @file include/graph.h * @brief GRAPH module header file. * * @addtogroup GRAPH * @{ */ + #ifndef GRAPH_H #define GRAPH_H diff --git a/include/touchpad.h b/include/touchpad.h index b6aa2589..63d6cbf7 100644 --- a/include/touchpad.h +++ b/include/touchpad.h @@ -19,12 +19,13 @@ */ /** - * @file touchpad.h + * @file include/touchpad.h * @brief TOUCHPAD Touchpad Driver subsystem header file. * * @addtogroup TOUCHPAD * @{ */ + #ifndef _TOUCHPAD_H #define _TOUCHPAD_H diff --git a/include/touchpad_lld.h b/include/touchpad_lld.h index ab19cd97..a5e28fdd 100644 --- a/include/touchpad_lld.h +++ b/include/touchpad_lld.h @@ -19,7 +19,7 @@ */ /** - * @file touchpad_lld.h + * @file include/touchpad_lld.h * @brief TOUCHPAD Driver subsystem low level driver header. * * @addtogroup TOUCHPAD diff --git a/src/console.c b/src/console.c index 064b6a05..55549fd1 100644 --- a/src/console.c +++ b/src/console.c @@ -18,11 +18,19 @@ along with this program. If not, see . */ +/** + * @file src/console.c + * @brief CONSOLE code. + * + * @addtogroup CONSOLE + * @{ + */ + #include "ch.h" #include "hal.h" #include "console.h" -#if GFX_USE_CONSOLE +#if GFX_USE_CONSOLE || defined(__DOXYGEN__) /* * Interface implementation. The interface is write only @@ -86,6 +94,18 @@ static const struct GConsoleVMT vmt = { putt, gett, writet, readt }; +/** + * @brief Initializes a console. + * + * @param[in] console The console driver struct + * @param[in] x0,y0 The location of the upper left corner of the resulting window + * @param[in] width, height The width and height of the window + * @param[in] font The font to be used when printing to the console + * @param[in] bkcolor The background color + * @param[in] color The foreground / font color + * + * @return RDY_OK if done + */ msg_t gfxConsoleInit(GConsole *console, coord_t x0, coord_t y0, coord_t width, coord_t height, font_t font, pixel_t bkcolor, pixel_t color) { console->vmt = &vmt; /* read font, get height & padding */ @@ -110,6 +130,14 @@ msg_t gfxConsoleInit(GConsole *console, coord_t x0, coord_t y0, coord_t width, c return RDY_OK; } +/** + * @brief Write a single character to the console. + * + * @param[in] console The console driver struct + * @param[in] c The char to be written + * + * @return RDY_OK if done + */ msg_t gfxConsolePut(GConsole *console, char c) { uint8_t width; @@ -164,6 +192,17 @@ msg_t gfxConsolePut(GConsole *console, char c) { return RDY_OK; } +/** + * @brief Write a string to the console. + * + * @param[in] console The console driver struct + * @param[in] bp The buffer / string + * @param[in] n The size of the buffer + * + * @return RDY_OK if done + * + * @api + */ msg_t gfxConsoleWrite(GConsole *console, const uint8_t *bp, size_t n) { size_t i; for(i = 0; i < n; i++) @@ -172,5 +211,6 @@ msg_t gfxConsoleWrite(GConsole *console, const uint8_t *bp, size_t n) { return RDY_OK; } -#endif +#endif /* GFX_USE_CONSOLE */ +/** @} */ diff --git a/src/gdisp-readme.txt b/src/gdisp-readme.txt deleted file mode 100644 index 28b86077..00000000 --- a/src/gdisp-readme.txt +++ /dev/null @@ -1,14 +0,0 @@ -The new GDISP driver is an architecture independent rewrite of the GLCD interface. -This new architecture independence should allow many new low level drivers to be easily added. - -GDISP allows low-level driver hardware accelerated drawing routines while providing a software emulation -if the low level driver can not provide it. A basic low level driver now only requires 2 routines to be written. - -A glcd.h compatibility file has been included that allow applications written to use the existing GLCD driver to -use the GDISP driver with little or no change. - -It is written in the ChibiOS style with ChibiOS style includes and documentation. - -It is encapsulated into a "halext" structure with appropriate readme's that allow for easy inclusion in any -ChibiOS project. This structure can be seamlessly added to as new driver types are added and it supports -low level drivers that are neither platform or board specific (although they can be). diff --git a/src/gdisp.c b/src/gdisp.c index af95f632..2d4e7f3e 100644 --- a/src/gdisp.c +++ b/src/gdisp.c @@ -19,7 +19,7 @@ */ /** - * @file gdisp.c + * @file src/gdisp.c * @brief GDISP Driver code. * * @addtogroup GDISP diff --git a/src/gdisp_fonts.c b/src/gdisp_fonts.c index a58c538d..bd30342c 100644 --- a/src/gdisp_fonts.c +++ b/src/gdisp_fonts.c @@ -17,6 +17,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ + /* Font tables included into gdisp.c */ @@ -653,3 +654,4 @@ #endif /* GDISP_NEED_TEXT */ #endif /* GFX_USE_GDISP */ + diff --git a/src/graph.c b/src/graph.c index 2a10bf72..51e584c6 100644 --- a/src/graph.c +++ b/src/graph.c @@ -19,7 +19,7 @@ */ /** - * @file graph.c + * @file src/graph.c * @brief GRAPH module code. * * @addtogroup GRAPH diff --git a/src/gwin.c b/src/gwin.c index 69750262..8d893887 100644 --- a/src/gwin.c +++ b/src/gwin.c @@ -19,7 +19,7 @@ */ /** - * @file gwin.c + * @file src/gwin.c * @brief GWIN Driver code. * * @addtogroup GWIN @@ -888,3 +888,4 @@ void gwinButtonDraw(GHandle gh) { #endif /* _GWIN_C */ /** @} */ + diff --git a/src/touchpad.c b/src/touchpad.c index 7559d6d3..d47026b2 100644 --- a/src/touchpad.c +++ b/src/touchpad.c @@ -1,4 +1,4 @@ -/* ChibiOS/GFX - Copyright (C) 2012 +/* ChibiOS/GFX - Copyright (C) 2012 Joel Bodenmann aka Tectu This file is part of ChibiOS/GFX. @@ -18,12 +18,13 @@ */ /** - * @file touchpad.c + * @file src/touchpad.c * @brief Touchpad Driver code. * * @addtogroup TOUCHPAD * @{ */ + #include "ch.h" #include "hal.h" #include "gdisp.h" From ecc3989355ca70f7830fac00a37a1000da86b3ff Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 3 Nov 2012 03:01:13 +0100 Subject: [PATCH 12/33] and the final touch of doxygen... --- docs/rsc/layout.xml | 2 +- src/gdisp.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/rsc/layout.xml b/docs/rsc/layout.xml index 9ec514ba..a3cadb4f 100644 --- a/docs/rsc/layout.xml +++ b/docs/rsc/layout.xml @@ -18,7 +18,7 @@ - + diff --git a/src/gdisp.c b/src/gdisp.c index 2d4e7f3e..80c2469c 100644 --- a/src/gdisp.c +++ b/src/gdisp.c @@ -693,6 +693,7 @@ void gdispFillRoundedBox(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t r #if (GDISP_NEED_SCROLL && GDISP_NEED_MULTITHREAD) || 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. * From bca9c1442e9f498c6946d2984f9944ca7cfb7a6d Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 3 Nov 2012 03:04:09 +0100 Subject: [PATCH 13/33] docs --- releases.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/releases.txt b/releases.txt index ad7cdfd5..a20fe5b7 100644 --- a/releases.txt +++ b/releases.txt @@ -14,6 +14,7 @@ FIX: Fix axis orientation for Arc routines FEATURE: new gdisp rounded box routines FEATURE: new gdispDrawStringBox() FEATURE: GWIN infrastructure +FEATURE: now we fully support doxygen *** changes after 1.2 *** From 66922e0fcbc1a9fd7c2bcc45193b49dacfdc9781 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 3 Nov 2012 15:48:26 +0100 Subject: [PATCH 14/33] yes sir, please give us even more doxygen --- docs/src/main.dox | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 docs/src/main.dox diff --git a/docs/src/main.dox b/docs/src/main.dox new file mode 100644 index 00000000..15746925 --- /dev/null +++ b/docs/src/main.dox @@ -0,0 +1,37 @@ +/* + ChibiOS/GFX - Copyright (C) 2012 + Joel Bodenmann aka Tectu + + 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 . +*/ + +/** + * @mainpage ChibiOS/GFX + * @author Joel Bodenmann (joel@unormal.org). + * + *

ChibiOS/GFX

+ * ChibiOS/GFX is an official add-on library for ChibiOS/RT to + * interface all different types of LCDs and touchscreens. + * + *

Features

+ * - modular design to reduce memory footprint. + * - HAL abstractions allows it to easily write new drivers. + * - Completely written in C, usable in C++ without any modifications + * - Supports hardware accelerated drawing by LCDs + * - Very flexible interfaces for calibration storage and more + * - We are having our own homepage: http://chibios-gfx.com + */ + From fa5ea7915073d42992c0cf91de6d4733633e1535 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 3 Nov 2012 21:03:29 +0100 Subject: [PATCH 15/33] cleanup of doxygen --- docs/src/main.dox | 4 ++-- src/gdisp.c | 21 --------------------- 2 files changed, 2 insertions(+), 23 deletions(-) diff --git a/docs/src/main.dox b/docs/src/main.dox index 15746925..8810abd0 100644 --- a/docs/src/main.dox +++ b/docs/src/main.dox @@ -27,8 +27,8 @@ * interface all different types of LCDs and touchscreens. * *

Features

- * - modular design to reduce memory footprint. - * - HAL abstractions allows it to easily write new drivers. + * - Modular design to reduce memory footprint + * - HAL abstractions allows it to easily write new drivers * - Completely written in C, usable in C++ without any modifications * - Supports hardware accelerated drawing by LCDs * - Very flexible interfaces for calibration storage and more diff --git a/src/gdisp.c b/src/gdisp.c index 80c2469c..35d778d3 100644 --- a/src/gdisp.c +++ b/src/gdisp.c @@ -212,7 +212,6 @@ #if GDISP_NEED_MULTITHREAD || defined(__DOXYGEN__) /** * @brief Clear the display to the specified color. - * @pre The GDISP unit must be in powerOn or powerSleep mode. * * @param[in] color The color to use when clearing the screen * @@ -234,7 +233,6 @@ #if GDISP_NEED_MULTITHREAD || defined(__DOXYGEN__) /** * @brief Set a pixel in the specified color. - * @pre The GDISP unit must be in powerOn or powerSleep mode. * * @param[in] x,y The position to set the pixel. * @param[in] color The color to use @@ -259,7 +257,6 @@ #if GDISP_NEED_MULTITHREAD || defined(__DOXYGEN__) /** * @brief Draw a line. - * @pre The GDISP unit must be in powerOn or powerSleep mode. * * @param[in] x0,y0 The start position * @param[in] x1,y1 The end position @@ -287,7 +284,6 @@ #if GDISP_NEED_MULTITHREAD || defined(__DOXYGEN__) /** * @brief Fill an area with a color. - * @pre The GDISP unit must be in powerOn or powerSleep mode. * * @param[in] x,y The start position * @param[in] cx,cy The size of the box (outside dimensions) @@ -315,7 +311,6 @@ #if GDISP_NEED_MULTITHREAD || defined(__DOXYGEN__) /** * @brief Fill an area using the supplied bitmap. - * @pre The GDISP unit must be in powerOn or powerSleep mode. * @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 @@ -355,7 +350,6 @@ #if (GDISP_NEED_CLIP && GDISP_NEED_MULTITHREAD) || defined(__DOXYGEN__) /** * @brief Clip all drawing to the defined area. - * @pre The GDISP unit must be in powerOn or powerSleep mode. * * @param[in] x,y The start position * @param[in] cx,cy The size of the clip area @@ -381,7 +375,6 @@ #if (GDISP_NEED_CIRCLE && GDISP_NEED_MULTITHREAD) || defined(__DOXYGEN__) /** * @brief Draw a circle. - * @pre The GDISP unit must be in powerOn or powerSleep mode. * * @param[in] x,y The center of the circle * @param[in] radius The radius of the circle @@ -408,7 +401,6 @@ #if (GDISP_NEED_CIRCLE && GDISP_NEED_MULTITHREAD) || defined(__DOXYGEN__) /** * @brief Draw a filled circle. - * @pre The GDISP unit must be in powerOn or powerSleep mode. * * @param[in] x,y The center of the circle * @param[in] radius The radius of the circle @@ -435,7 +427,6 @@ #if (GDISP_NEED_ELLIPSE && GDISP_NEED_MULTITHREAD) || defined(__DOXYGEN__) /** * @brief Draw an ellipse. - * @pre The GDISP unit must be in powerOn or powerSleep mode. * * @param[in] x,y The center of the ellipse * @param[in] a,b The dimensions of the ellipse @@ -463,7 +454,6 @@ #if (GDISP_NEED_ELLIPSE && GDISP_NEED_MULTITHREAD) || defined(__DOXYGEN__) /** * @brief Draw a filled ellipse. - * @pre The GDISP unit must be in powerOn or powerSleep mode. * * @param[in] x,y The center of the ellipse * @param[in] a,b The dimensions of the ellipse @@ -491,7 +481,6 @@ #if (GDISP_NEED_ARC && GDISP_NEED_MULTITHREAD) || defined(__DOXYGEN__) /* * @brief Draw an arc. - * @pre The GDISP must be in powerOn or powerSleep mode. * * @param[in] x0,y0 The center point * @param[in] radius The radius of the arc @@ -522,7 +511,6 @@ #if (GDISP_NEED_ARC && GDISP_NEED_MULTITHREAD) || defined(__DOXYGEN__) /* * @brief Draw a filled arc. - * @pre The GDISP must be in powerOn or powerSleep mode. * @note Not very efficient currently - does lots of overdrawing * * @param[in] x0,y0 The center point @@ -554,7 +542,6 @@ #if GDISP_NEED_ARC || defined(__DOXYGEN__) /** * @brief Draw a rectangular box with rounded corners - * @pre The GDISP unit must be in powerOn or powerSleep mode. * * @param[in] x,y The start position * @param[in] cx,cy The size of the box (outside dimensions) @@ -582,7 +569,6 @@ void gdispDrawRoundedBox(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t r #if GDISP_NEED_ARC || defined(__DOXYGEN__) /** * @brief Draw a filled rectangular box with rounded corners - * @pre The GDISP unit must be in powerOn or powerSleep mode. * * @param[in] x,y The start position * @param[in] cx,cy The size of the box (outside dimensions) @@ -612,7 +598,6 @@ void gdispFillRoundedBox(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t r #if (GDISP_NEED_TEXT && GDISP_NEED_MULTITHREAD) || defined(__DOXYGEN__) /** * @brief Draw a text character. - * @pre The GDISP unit must be in powerOn or powerSleep mode. * * @param[in] x,y The position for the text * @param[in] c The character to draw @@ -641,7 +626,6 @@ void gdispFillRoundedBox(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t r #if (GDISP_NEED_TEXT && GDISP_NEED_MULTITHREAD) || defined(__DOXYGEN__) /** * @brief Draw a text character with a filled background. - * @pre The GDISP unit must be in powerOn or powerSleep mode. * * @param[in] x,y The position for the text * @param[in] c The character to draw @@ -777,7 +761,6 @@ void gdispFillRoundedBox(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t r /** * @brief Draw a rectangular box. - * @pre The GDISP unit must be in powerOn or powerSleep mode. * * @param[in] x,y The start position * @param[in] cx,cy The size of the box (outside dimensions) @@ -815,7 +798,6 @@ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color) { #if GDISP_NEED_TEXT || defined(__DOXYGEN__) /** * @brief Draw a text string. - * @pre The GDISP unit must be in powerOn or powerSleep mode. * * @param[in] x,y The position for the text * @param[in] font The font to use @@ -858,7 +840,6 @@ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color) { #if GDISP_NEED_TEXT || defined(__DOXYGEN__) /** * @brief Draw a text string. - * @pre The GDISP unit must be in powerOn or powerSleep mode. * * @param[in] x,y The position for the text * @param[in] str The string to draw @@ -904,7 +885,6 @@ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color) { #if GDISP_NEED_TEXT || defined(__DOXYGEN__) /** * @brief Draw a text string verticly centered within the specified box. - * @pre The GDISP unit must be in powerOn or powerSleep mode. * * @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 @@ -1037,7 +1017,6 @@ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color) { #if GDISP_NEED_TEXT || defined(__DOXYGEN__) /** * @brief Draw a text string verticly centered within the specified box. The box background is filled with the specified background color. - * @pre The GDISP unit must be in powerOn or powerSleep mode. * @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) From b0acbd1166789a4b307bc27ec50e732130c1e396 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 3 Nov 2012 21:03:55 +0100 Subject: [PATCH 16/33] added .gitingore --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..a8ae8ed8 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +docs/html From f8976f84288bc474eec318df8fcd89ddd548e5ea Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 3 Nov 2012 21:24:21 +0100 Subject: [PATCH 17/33] release v1.4 --- Doxygenfile | 2 +- releases.txt | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Doxygenfile b/Doxygenfile index 9f10056d..13686d18 100644 --- a/Doxygenfile +++ b/Doxygenfile @@ -32,7 +32,7 @@ PROJECT_NAME = ChibiOS/GFX # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 1.3 +PROJECT_NUMBER = 1.4 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer diff --git a/releases.txt b/releases.txt index a20fe5b7..b13bfed2 100644 --- a/releases.txt +++ b/releases.txt @@ -2,7 +2,10 @@ *** Releases *** ***************************************************************************** -current stable: 1.3 +current stable: 1.4 + + +*** changes after 1.4 *** *** changes after 1.3 *** From 8c1ffacd2e3069c280d9f580246b35df8cade6a1 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Mon, 5 Nov 2012 20:14:03 +0100 Subject: [PATCH 18/33] small doxygen fix --- src/graph.c | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/src/graph.c b/src/graph.c index 51e584c6..89f6fe00 100644 --- a/src/graph.c +++ b/src/graph.c @@ -33,15 +33,6 @@ #if GFX_USE_GRAPH || defined(__DOXYGEN__) -/** - * @brief Draw a horizontal dot line. - * - * @param[in] x0,y0,x1 The coordinates where the dot line will be drawn - * @param[in] space The distance from one dot to the other in pixels - * @param[in] color The color of the dots - * - * @notapi - */ static void _horizontalDotLine(coord_t x0, coord_t y0, coord_t x1, uint16_t space, color_t color) { uint16_t offset = x0; uint16_t count = ((x1 - x0) / space); @@ -52,15 +43,6 @@ static void _horizontalDotLine(coord_t x0, coord_t y0, coord_t x1, uint16_t spac } while(count--); } -/* - * @brief Draw a vertical dot line. - * - * @param[in] x0,y0,y1 The coordinates where the dot line will be drawn - * @param[in] space The distance from one dot to the other in pixels - * @param[in] color The color of the dots - * - * @notapi - */ static void _verticalDotLine(coord_t x0, coord_t y0, coord_t y1, uint16_t space, color_t color) { uint16_t offset = y0; uint16_t count = ((y1 - y0) / space); @@ -71,7 +53,7 @@ static void _verticalDotLine(coord_t x0, coord_t y0, coord_t y1, uint16_t space, } while(count--); } -/* +/** * @brief Draws a graph system * @details Draws a graph system with two axis, X and Y. * Different optinal parameters like grid size, grid color, From a39a8427d90f9d37ccc98060f08c8dbd6bcc5e94 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Tue, 6 Nov 2012 23:26:33 +0100 Subject: [PATCH 19/33] removed doxygen of static internal functions --- src/touchpad.c | 69 ++++++++++++++++++++------------------------------ 1 file changed, 27 insertions(+), 42 deletions(-) diff --git a/src/touchpad.c b/src/touchpad.c index d47026b2..d0894686 100644 --- a/src/touchpad.c +++ b/src/touchpad.c @@ -54,11 +54,6 @@ static struct cal_t *cal; /* Driver local functions. */ /*===========================================================================*/ -/** - * @brief returns the uncalibrated readout of the X direction from the controller - * - * @noapi - */ static uint16_t _tpReadRealX(void) { uint32_t results = 0; uint16_t i, x; @@ -74,11 +69,6 @@ static uint16_t _tpReadRealX(void) { return x; } -/** - * @brief return the uncalibrated readout of the Y-direction from the controller - * - * @noapi - */ static uint16_t _tpReadRealY(void) { uint32_t results = 0; uint16_t i, y; @@ -94,11 +84,6 @@ static uint16_t _tpReadRealY(void) { return y; } -/** - * @brief draws a cross. Used for calibration. - * - * @noapi - */ static void _tpDrawCross(uint16_t x, uint16_t y) { gdispDrawLine(x-15, y, x-2, y, 0xffff); gdispDrawLine(x+2, y, x+15, y, 0xffff); @@ -217,6 +202,33 @@ uint16_t tpReadY(void) { return 0; } +/** + * @brief Get the pressure. + * + * @return The pressure. + * + * @api + */ +#if TOUCHPAD_HAS_PRESSURE || defined(__DOXYGEN__) + uint16_t tpReadZ(void) { + /* ToDo */ + return (tp_lld_read_z()); + } +#endif + +/** + * @brief returns if touchpad is pressed or not + * + * @return 1 if pressed, 0 otherwise + * + * @api + */ +#if TOUCHPAD_HAS_IRQ || defined(__DOXYGEN__) + uint8_t tpIRQ(void) { + return tp_lld_irq(); + } +#endif + void tpCalibrate(void) { const uint16_t h = gdispGetHeight(); const uint16_t w = gdispGetWidth(); @@ -249,33 +261,6 @@ void tpCalibrate(void) { #endif } -/** - * @brief returns if touchpad is pressed or not - * - * @return 1 if pressed, 0 otherwise - * - * @api - */ -#if TOUCHPAD_HAS_IRQ || defined(__DOXYGEN__) - uint8_t tpIRQ(void) { - return tp_lld_irq(); - } -#endif - -/** - * @brief Get the pressure. - * - * @return The pressure. - * - * @api - */ -#if TOUCHPAD_HAS_PRESSURE || defined(__DOXYGEN__) - uint16_t tpReadZ(void) { - /* ToDo */ - return (tp_lld_read_z()); - } -#endif - #endif /* GFX_USE_TOUCHPAD */ /** @} */ From b86c313aa2f86836fd8801e1937b1410679d5cb1 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Tue, 6 Nov 2012 23:55:45 +0100 Subject: [PATCH 20/33] doxygen tweaks - not complete yet --- drivers/touchpad/ADS7843/touchpad_lld.c | 27 +++++++++++-------- .../touchpad/ADS7843/touchpad_lld_config.h | 3 ++- drivers/touchpad/XPT2046/touchpad_lld.c | 24 ++++++++++------- .../touchpad/XPT2046/touchpad_lld_config.h | 3 ++- src/drivers.c | 25 +++++++++++++++++ templates/touchpadXXX/touchpad_lld.c | 3 ++- 6 files changed, 62 insertions(+), 23 deletions(-) create mode 100644 src/drivers.c diff --git a/drivers/touchpad/ADS7843/touchpad_lld.c b/drivers/touchpad/ADS7843/touchpad_lld.c index 74b06095..ac375e60 100644 --- a/drivers/touchpad/ADS7843/touchpad_lld.c +++ b/drivers/touchpad/ADS7843/touchpad_lld.c @@ -19,10 +19,11 @@ */ /** - * @file drivers/touchpad/XPT2046/touchpad_lld.c + * @file drivers/touchpad/ADS7843/touchpad_lld.c * @brief Touchpad Driver subsystem low level driver source. * - * @addtogroup TOUCHPAD + * @defgroup ADS7843 + * @ingroup DRIVERS * @{ */ @@ -85,7 +86,6 @@ void tp_lld_init(const TOUCHPADDriver *tp) { * @param[in] cmd The command bits to send to the touchpad * * @return The read value 12-bit right-justified - * * @note This function only reads data, it is assumed that the pins are * configured properly and the bus has been acquired beforehand * @@ -107,7 +107,6 @@ uint16_t tp_lld_read_value(uint8_t cmd) { /** * @brief 7-point median filtering code for touchpad samples - * * @note This is an internally used routine only. * * @notapi @@ -129,10 +128,11 @@ static void tp_lld_filter(void) { } /** - * @brief Reads out the X direction. - * + * @brief Reads out the X value. * @note The samples are median filtered for greater noise reduction * + * @return The uncalibrated but filtered X value + * * @notapi */ uint16_t tp_lld_read_x(void) { @@ -170,8 +170,11 @@ uint16_t tp_lld_read_x(void) { return sampleBuf[3]; } -/* - * @brief Reads out the Y direction. +/** + * @brief Reads out the Y value. + * @note The samples are median filtered for greater noise reduction + * + * @return The uncalibrated but filtered Y value * * @notapi */ @@ -212,8 +215,8 @@ uint16_t tp_lld_read_y(void) { /* ---- Optional Routines ---- */ #if TOUCHPAD_HAS_IRQ || defined(__DOXYGEN__) - /* - * @brief for checking if touchpad is pressed or not. + /** + * @brief For checking if touchpad is pressed or not. * * @return 1 if pressed / 0 if not pressed * @@ -225,9 +228,11 @@ uint16_t tp_lld_read_y(void) { #endif #if TOUCHPAD_HAS_PRESSURE || defined(__DOXYGEN__) - /* + /** * @brief Reads out the Z direction / pressure. * + * @return The amount of preasure + * * @notapi */ uint16_t tp_lld_read_z(void) { diff --git a/drivers/touchpad/ADS7843/touchpad_lld_config.h b/drivers/touchpad/ADS7843/touchpad_lld_config.h index 13b48922..dd2c9dda 100644 --- a/drivers/touchpad/ADS7843/touchpad_lld_config.h +++ b/drivers/touchpad/ADS7843/touchpad_lld_config.h @@ -22,7 +22,8 @@ * @file drivers/touchpad/ADS7843/touchpad_lld_config.h * @brief Touchpad Driver subsystem low level driver. * - * @addtogroup TOUCHPAD + * @defgroup ADS7843 + * @ingroup DRIVERS * @{ */ diff --git a/drivers/touchpad/XPT2046/touchpad_lld.c b/drivers/touchpad/XPT2046/touchpad_lld.c index 50ff6acc..42f3e8d2 100644 --- a/drivers/touchpad/XPT2046/touchpad_lld.c +++ b/drivers/touchpad/XPT2046/touchpad_lld.c @@ -22,7 +22,8 @@ * @file drivers/touchpad/XPT2046/touchpad_lld.c * @brief Touchpad Driver subsystem low level driver source. * - * @addtogroup TOUCHPAD + * @defgroup XPT2046 + * @ingroup DRIVERS * @{ */ @@ -107,8 +108,7 @@ uint16_t tp_lld_read_value(uint8_t cmd) { /** * @brief 7-point median filtering code for touchpad samples - * - * @note This is an internally used routine only. + * @note This is an internally used routine only * * @notapi */ @@ -129,10 +129,11 @@ static void tp_lld_filter(void) { } /** - * @brief Reads out the X direction. - * + * @brief Reads out the X value. * @note The samples are median filtered for greater noise reduction * + * @return The uncalibrated but filtered X value + * * @notapi */ uint16_t tp_lld_read_x(void) { @@ -170,8 +171,11 @@ uint16_t tp_lld_read_x(void) { return sampleBuf[3]; } -/* - * @brief Reads out the Y direction. +/** + * @brief Reads out the Y value. + * @note The samples are median filtered for greated noise reduction + * + * @return The uncalibrated but filtered Y value * * @notapi */ @@ -212,7 +216,7 @@ uint16_t tp_lld_read_y(void) { /* ---- 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 @@ -225,9 +229,11 @@ uint16_t tp_lld_read_y(void) { #endif #if TOUCHPAD_HAS_PRESSURE || defined(__DOXYGEN__) - /* + /** * @brief Reads out the Z direction / pressure. * + * @return The mount of preasure + * * @notapi */ uint16_t tp_lld_read_z(void) { diff --git a/drivers/touchpad/XPT2046/touchpad_lld_config.h b/drivers/touchpad/XPT2046/touchpad_lld_config.h index f1cd9ff5..d0d1fb61 100644 --- a/drivers/touchpad/XPT2046/touchpad_lld_config.h +++ b/drivers/touchpad/XPT2046/touchpad_lld_config.h @@ -22,7 +22,8 @@ * @file drivers/touchpad/XPT2046/touchpad_lld_config.h * @brief Touchppad Driver subsystem low level driver. * - * @addtogroup TOUCHPAD + * @defgroup XPT2046 + * @ingroup DRIVERS * @{ */ diff --git a/src/drivers.c b/src/drivers.c new file mode 100644 index 00000000..12e1ded8 --- /dev/null +++ b/src/drivers.c @@ -0,0 +1,25 @@ +/* + ChibiOS/GFX - Copyright (C) 2012 + Joel Bodenmann aka Tectu + + 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 . +*/ + +/** + * @addtogroup DRIVERS + * @{ + */ + diff --git a/templates/touchpadXXX/touchpad_lld.c b/templates/touchpadXXX/touchpad_lld.c index 8a832d8c..2767e0fc 100644 --- a/templates/touchpadXXX/touchpad_lld.c +++ b/templates/touchpadXXX/touchpad_lld.c @@ -22,7 +22,8 @@ * @file templates/touchpadXXX/touchpad_lld.c * @brief Touchpad Driver subsystem low level driver source. * - * @addtogroup TOUCHPAD + * @defgroup touchpadXXX + * @ingroup DRIVERS * @{ */ From a178db6f130bfd0eb7ee2f82c6788508e1a1fa7a Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Wed, 7 Nov 2012 01:34:39 +0100 Subject: [PATCH 21/33] Revert "doxygen tweaks - not complete yet" This reverts commit b86c313aa2f86836fd8801e1937b1410679d5cb1. --- drivers/touchpad/ADS7843/touchpad_lld.c | 27 ++++++++----------- .../touchpad/ADS7843/touchpad_lld_config.h | 3 +-- drivers/touchpad/XPT2046/touchpad_lld.c | 24 +++++++---------- .../touchpad/XPT2046/touchpad_lld_config.h | 3 +-- src/drivers.c | 25 ----------------- templates/touchpadXXX/touchpad_lld.c | 3 +-- 6 files changed, 23 insertions(+), 62 deletions(-) delete mode 100644 src/drivers.c diff --git a/drivers/touchpad/ADS7843/touchpad_lld.c b/drivers/touchpad/ADS7843/touchpad_lld.c index ac375e60..74b06095 100644 --- a/drivers/touchpad/ADS7843/touchpad_lld.c +++ b/drivers/touchpad/ADS7843/touchpad_lld.c @@ -19,11 +19,10 @@ */ /** - * @file drivers/touchpad/ADS7843/touchpad_lld.c + * @file drivers/touchpad/XPT2046/touchpad_lld.c * @brief Touchpad Driver subsystem low level driver source. * - * @defgroup ADS7843 - * @ingroup DRIVERS + * @addtogroup TOUCHPAD * @{ */ @@ -86,6 +85,7 @@ void tp_lld_init(const TOUCHPADDriver *tp) { * @param[in] cmd The command bits to send to the touchpad * * @return The read value 12-bit right-justified + * * @note This function only reads data, it is assumed that the pins are * configured properly and the bus has been acquired beforehand * @@ -107,6 +107,7 @@ uint16_t tp_lld_read_value(uint8_t cmd) { /** * @brief 7-point median filtering code for touchpad samples + * * @note This is an internally used routine only. * * @notapi @@ -128,10 +129,9 @@ static void tp_lld_filter(void) { } /** - * @brief Reads out the X value. - * @note The samples are median filtered for greater noise reduction + * @brief Reads out the X direction. * - * @return The uncalibrated but filtered X value + * @note The samples are median filtered for greater noise reduction * * @notapi */ @@ -170,11 +170,8 @@ uint16_t tp_lld_read_x(void) { return sampleBuf[3]; } -/** - * @brief Reads out the Y value. - * @note The samples are median filtered for greater noise reduction - * - * @return The uncalibrated but filtered Y value +/* + * @brief Reads out the Y direction. * * @notapi */ @@ -215,8 +212,8 @@ uint16_t tp_lld_read_y(void) { /* ---- Optional Routines ---- */ #if TOUCHPAD_HAS_IRQ || defined(__DOXYGEN__) - /** - * @brief For checking if touchpad is pressed or not. + /* + * @brief for checking if touchpad is pressed or not. * * @return 1 if pressed / 0 if not pressed * @@ -228,11 +225,9 @@ uint16_t tp_lld_read_y(void) { #endif #if TOUCHPAD_HAS_PRESSURE || defined(__DOXYGEN__) - /** + /* * @brief Reads out the Z direction / pressure. * - * @return The amount of preasure - * * @notapi */ uint16_t tp_lld_read_z(void) { diff --git a/drivers/touchpad/ADS7843/touchpad_lld_config.h b/drivers/touchpad/ADS7843/touchpad_lld_config.h index dd2c9dda..13b48922 100644 --- a/drivers/touchpad/ADS7843/touchpad_lld_config.h +++ b/drivers/touchpad/ADS7843/touchpad_lld_config.h @@ -22,8 +22,7 @@ * @file drivers/touchpad/ADS7843/touchpad_lld_config.h * @brief Touchpad Driver subsystem low level driver. * - * @defgroup ADS7843 - * @ingroup DRIVERS + * @addtogroup TOUCHPAD * @{ */ diff --git a/drivers/touchpad/XPT2046/touchpad_lld.c b/drivers/touchpad/XPT2046/touchpad_lld.c index 42f3e8d2..50ff6acc 100644 --- a/drivers/touchpad/XPT2046/touchpad_lld.c +++ b/drivers/touchpad/XPT2046/touchpad_lld.c @@ -22,8 +22,7 @@ * @file drivers/touchpad/XPT2046/touchpad_lld.c * @brief Touchpad Driver subsystem low level driver source. * - * @defgroup XPT2046 - * @ingroup DRIVERS + * @addtogroup TOUCHPAD * @{ */ @@ -108,7 +107,8 @@ uint16_t tp_lld_read_value(uint8_t cmd) { /** * @brief 7-point median filtering code for touchpad samples - * @note This is an internally used routine only + * + * @note This is an internally used routine only. * * @notapi */ @@ -129,10 +129,9 @@ static void tp_lld_filter(void) { } /** - * @brief Reads out the X value. - * @note The samples are median filtered for greater noise reduction + * @brief Reads out the X direction. * - * @return The uncalibrated but filtered X value + * @note The samples are median filtered for greater noise reduction * * @notapi */ @@ -171,11 +170,8 @@ uint16_t tp_lld_read_x(void) { return sampleBuf[3]; } -/** - * @brief Reads out the Y value. - * @note The samples are median filtered for greated noise reduction - * - * @return The uncalibrated but filtered Y value +/* + * @brief Reads out the Y direction. * * @notapi */ @@ -216,7 +212,7 @@ uint16_t tp_lld_read_y(void) { /* ---- 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 @@ -229,11 +225,9 @@ uint16_t tp_lld_read_y(void) { #endif #if TOUCHPAD_HAS_PRESSURE || defined(__DOXYGEN__) - /** + /* * @brief Reads out the Z direction / pressure. * - * @return The mount of preasure - * * @notapi */ uint16_t tp_lld_read_z(void) { diff --git a/drivers/touchpad/XPT2046/touchpad_lld_config.h b/drivers/touchpad/XPT2046/touchpad_lld_config.h index d0d1fb61..f1cd9ff5 100644 --- a/drivers/touchpad/XPT2046/touchpad_lld_config.h +++ b/drivers/touchpad/XPT2046/touchpad_lld_config.h @@ -22,8 +22,7 @@ * @file drivers/touchpad/XPT2046/touchpad_lld_config.h * @brief Touchppad Driver subsystem low level driver. * - * @defgroup XPT2046 - * @ingroup DRIVERS + * @addtogroup TOUCHPAD * @{ */ diff --git a/src/drivers.c b/src/drivers.c deleted file mode 100644 index 12e1ded8..00000000 --- a/src/drivers.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - ChibiOS/GFX - Copyright (C) 2012 - Joel Bodenmann aka Tectu - - 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 . -*/ - -/** - * @addtogroup DRIVERS - * @{ - */ - diff --git a/templates/touchpadXXX/touchpad_lld.c b/templates/touchpadXXX/touchpad_lld.c index 2767e0fc..8a832d8c 100644 --- a/templates/touchpadXXX/touchpad_lld.c +++ b/templates/touchpadXXX/touchpad_lld.c @@ -22,8 +22,7 @@ * @file templates/touchpadXXX/touchpad_lld.c * @brief Touchpad Driver subsystem low level driver source. * - * @defgroup touchpadXXX - * @ingroup DRIVERS + * @addtogroup TOUCHPAD * @{ */ From 1fd69f3144d253106e2dc7017b448f2cf417a67b Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Wed, 7 Nov 2012 01:35:22 +0100 Subject: [PATCH 22/33] very small @file path fix --- drivers/touchpad/ADS7843/touchpad_lld.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/touchpad/ADS7843/touchpad_lld.c b/drivers/touchpad/ADS7843/touchpad_lld.c index 74b06095..8cd92ff9 100644 --- a/drivers/touchpad/ADS7843/touchpad_lld.c +++ b/drivers/touchpad/ADS7843/touchpad_lld.c @@ -19,7 +19,7 @@ */ /** - * @file drivers/touchpad/XPT2046/touchpad_lld.c + * @file drivers/touchpad/ADS7843/touchpad_lld.c * @brief Touchpad Driver subsystem low level driver source. * * @addtogroup TOUCHPAD From 17857d6e97429a34fc157270d5425528bab6a031 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Wed, 7 Nov 2012 01:47:53 +0100 Subject: [PATCH 23/33] big doxygen update - now it works as it should --- drivers/gdisp/Nokia6610/gdisp_lld.c | 2 +- drivers/gdisp/Nokia6610/gdisp_lld_config.h | 2 +- drivers/gdisp/S6D1121/gdisp_lld.c | 2 +- drivers/gdisp/SSD1289/gdisp_lld.c | 2 +- drivers/gdisp/SSD1963/gdisp_lld.c | 2 +- drivers/gdisp/SSD1963/gdisp_lld_config.h | 2 +- drivers/gdisp/TestStub/gdisp_lld.c | 2 +- drivers/gdisp/VMT/gdisp_lld.c | 2 +- drivers/gdisp/VMT/gdisp_lld_driver1.c | 2 +- drivers/gdisp/VMT/gdisp_lld_driver2.c | 2 +- drivers/gdisp/Win32/gdisp_lld.c | 2 +- drivers/gdisp/Win32/gdisp_lld_config.h | 2 +- drivers/touchpad/ADS7843/touchpad_lld.c | 2 +- drivers/touchpad/ADS7843/touchpad_lld_config.h | 2 +- drivers/touchpad/XPT2046/touchpad_lld.c | 2 +- drivers/touchpad/XPT2046/touchpad_lld_config.h | 2 +- templates/gdispXXX/gdisp_lld.c | 2 +- templates/gdispXXX/gdisp_lld_config.h | 2 +- templates/touchpadXXX/touchpad_lld.c | 8 +++----- templates/touchpadXXX/touchpad_lld_config.h | 2 +- 20 files changed, 22 insertions(+), 24 deletions(-) diff --git a/drivers/gdisp/Nokia6610/gdisp_lld.c b/drivers/gdisp/Nokia6610/gdisp_lld.c index 1e96247e..e5a3160b 100644 --- a/drivers/gdisp/Nokia6610/gdisp_lld.c +++ b/drivers/gdisp/Nokia6610/gdisp_lld.c @@ -30,7 +30,7 @@ #include "hal.h" #include "gdisp.h" -#if GFX_USE_GDISP || defined(__DOXYGEN__) +#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/ /* Include the emulation code for things we don't support */ #include "gdisp_emulation.c" diff --git a/drivers/gdisp/Nokia6610/gdisp_lld_config.h b/drivers/gdisp/Nokia6610/gdisp_lld_config.h index 78d30007..f751020f 100644 --- a/drivers/gdisp/Nokia6610/gdisp_lld_config.h +++ b/drivers/gdisp/Nokia6610/gdisp_lld_config.h @@ -29,7 +29,7 @@ #ifndef _GDISP_LLD_CONFIG_H #define _GDISP_LLD_CONFIG_H -#if GFX_USE_GDISP +#if GFX_USE_GDISP /*===========================================================================*/ /* Driver hardware support. */ diff --git a/drivers/gdisp/S6D1121/gdisp_lld.c b/drivers/gdisp/S6D1121/gdisp_lld.c index 7e1509be..5eaa8e73 100644 --- a/drivers/gdisp/S6D1121/gdisp_lld.c +++ b/drivers/gdisp/S6D1121/gdisp_lld.c @@ -30,7 +30,7 @@ #include "hal.h" #include "gdisp.h" -#if GFX_USE_GDISP || defined(__DOXYGEN__) +#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/ /* Include the emulation code for things we don't support */ #include "gdisp_emulation.c" diff --git a/drivers/gdisp/SSD1289/gdisp_lld.c b/drivers/gdisp/SSD1289/gdisp_lld.c index 00bb92cf..3568a6f1 100644 --- a/drivers/gdisp/SSD1289/gdisp_lld.c +++ b/drivers/gdisp/SSD1289/gdisp_lld.c @@ -30,7 +30,7 @@ #include "hal.h" #include "gdisp.h" -#if GFX_USE_GDISP || defined(__DOXYGEN__) +#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/ /* Include the emulation code for things we don't support */ #include "gdisp_emulation.c" diff --git a/drivers/gdisp/SSD1963/gdisp_lld.c b/drivers/gdisp/SSD1963/gdisp_lld.c index 01a5ed40..aceeb4a7 100644 --- a/drivers/gdisp/SSD1963/gdisp_lld.c +++ b/drivers/gdisp/SSD1963/gdisp_lld.c @@ -30,7 +30,7 @@ #include "hal.h" #include "gdisp.h" -#if GFX_USE_GDISP || defined(__DOXYGEN__) +#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/ /* Include the emulation code for things we don't support */ #include "gdisp_emulation.c" diff --git a/drivers/gdisp/SSD1963/gdisp_lld_config.h b/drivers/gdisp/SSD1963/gdisp_lld_config.h index 036df638..34b4f72b 100644 --- a/drivers/gdisp/SSD1963/gdisp_lld_config.h +++ b/drivers/gdisp/SSD1963/gdisp_lld_config.h @@ -29,7 +29,7 @@ #ifndef _GDISP_LLD_CONFIG_H #define _GDISP_LLD_CONFIG_H -#if GFX_USE_GDISP || defined(__DOXYGEN__) +#if GFX_USE_GDISP /*===========================================================================*/ /* Driver hardware support. */ diff --git a/drivers/gdisp/TestStub/gdisp_lld.c b/drivers/gdisp/TestStub/gdisp_lld.c index 90b2b490..7084737a 100644 --- a/drivers/gdisp/TestStub/gdisp_lld.c +++ b/drivers/gdisp/TestStub/gdisp_lld.c @@ -30,7 +30,7 @@ #include "hal.h" #include "gdisp.h" -#if GFX_USE_GDISP || defined(__DOXYGEN__) +#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/ /* Include the emulation code for things we don't support */ #include "gdisp_emulation.c" diff --git a/drivers/gdisp/VMT/gdisp_lld.c b/drivers/gdisp/VMT/gdisp_lld.c index 9768fd4b..6a7d0cfb 100644 --- a/drivers/gdisp/VMT/gdisp_lld.c +++ b/drivers/gdisp/VMT/gdisp_lld.c @@ -30,7 +30,7 @@ #include "hal.h" #include "gdisp.h" -#if GFX_USE_GDISP || defined(__DOXYGEN__) +#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/ #define GDISP_LLD_NO_STRUCT diff --git a/drivers/gdisp/VMT/gdisp_lld_driver1.c b/drivers/gdisp/VMT/gdisp_lld_driver1.c index 46d1c82c..5bfaaa85 100644 --- a/drivers/gdisp/VMT/gdisp_lld_driver1.c +++ b/drivers/gdisp/VMT/gdisp_lld_driver1.c @@ -29,7 +29,7 @@ #include "ch.h" #include "hal.h" -#if GFX_USE_GDISP || defined(__DOXYGEN__) +#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/ #define CONFIGFILE() <../GDISP_VMT_NAME1()/gdisp_lld_config.h> #define DRIVERFILE() <../GDISP_VMT_NAME1()/gdisp_lld.c> diff --git a/drivers/gdisp/VMT/gdisp_lld_driver2.c b/drivers/gdisp/VMT/gdisp_lld_driver2.c index 3ca87d03..961c43b3 100644 --- a/drivers/gdisp/VMT/gdisp_lld_driver2.c +++ b/drivers/gdisp/VMT/gdisp_lld_driver2.c @@ -29,7 +29,7 @@ #include "ch.h" #include "hal.h" -#if GFX_USE_GDISP || defined(__DOXYGEN__) +#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/ #define CONFIGFILE() <../GDISP_VMT_NAME2()/gdisp_lld_config.h> #define DRIVERFILE() <../GDISP_VMT_NAME2()/gdisp_lld.c> diff --git a/drivers/gdisp/Win32/gdisp_lld.c b/drivers/gdisp/Win32/gdisp_lld.c index 5cf25535..523e695d 100644 --- a/drivers/gdisp/Win32/gdisp_lld.c +++ b/drivers/gdisp/Win32/gdisp_lld.c @@ -30,7 +30,7 @@ #include "hal.h" #include "gdisp.h" -#if GFX_USE_GDISP || defined(__DOXYGEN__) +#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/ /* Include the emulation code for things we don't support */ #include "gdisp_emulation.c" diff --git a/drivers/gdisp/Win32/gdisp_lld_config.h b/drivers/gdisp/Win32/gdisp_lld_config.h index 40acdc24..e0afa6c3 100644 --- a/drivers/gdisp/Win32/gdisp_lld_config.h +++ b/drivers/gdisp/Win32/gdisp_lld_config.h @@ -29,7 +29,7 @@ #ifndef _GDISP_LLD_CONFIG_H #define _GDISP_LLD_CONFIG_H -#if GFX_USE_GDISP || defined(__DOXYGEN__) +#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/ /*===========================================================================*/ /* Driver hardware support. */ diff --git a/drivers/touchpad/ADS7843/touchpad_lld.c b/drivers/touchpad/ADS7843/touchpad_lld.c index 8cd92ff9..8b30f4f3 100644 --- a/drivers/touchpad/ADS7843/touchpad_lld.c +++ b/drivers/touchpad/ADS7843/touchpad_lld.c @@ -30,7 +30,7 @@ #include "hal.h" #include "touchpad.h" -#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__) +#if GFX_USE_TOUCHPAD /*|| defined(__DOXYGEN__)*/ /*===========================================================================*/ /* Driver local definitions. */ diff --git a/drivers/touchpad/ADS7843/touchpad_lld_config.h b/drivers/touchpad/ADS7843/touchpad_lld_config.h index 13b48922..5ed1981c 100644 --- a/drivers/touchpad/ADS7843/touchpad_lld_config.h +++ b/drivers/touchpad/ADS7843/touchpad_lld_config.h @@ -29,7 +29,7 @@ #ifndef _TOUCHPAD_LLD_CONFIG_H #define _TOUCHPAD_LLD_CONFIG_H -#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__) +#if GFX_USE_TOUCHPAD /*|| defined(__DOXYGEN__)*/ /*===========================================================================*/ /* Driver hardware support. */ diff --git a/drivers/touchpad/XPT2046/touchpad_lld.c b/drivers/touchpad/XPT2046/touchpad_lld.c index 50ff6acc..8be23b07 100644 --- a/drivers/touchpad/XPT2046/touchpad_lld.c +++ b/drivers/touchpad/XPT2046/touchpad_lld.c @@ -30,7 +30,7 @@ #include "hal.h" #include "touchpad.h" -#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__) +#if GFX_USE_TOUCHPAD /*|| defined(__DOXYGEN__)*/ /*===========================================================================*/ /* Driver local definitions. */ diff --git a/drivers/touchpad/XPT2046/touchpad_lld_config.h b/drivers/touchpad/XPT2046/touchpad_lld_config.h index f1cd9ff5..a503d2b7 100644 --- a/drivers/touchpad/XPT2046/touchpad_lld_config.h +++ b/drivers/touchpad/XPT2046/touchpad_lld_config.h @@ -29,7 +29,7 @@ #ifndef _TOUCHPAD_LLD_CONFIG_H #define _TOUCHPAD_LLD_CONFIG_H -#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__) +#if GFX_USE_TOUCHPAD /*|| defined(__DOXYGEN__)*/ /*===========================================================================*/ /* Driver hardware support. */ diff --git a/templates/gdispXXX/gdisp_lld.c b/templates/gdispXXX/gdisp_lld.c index a845fdf9..1b88a338 100644 --- a/templates/gdispXXX/gdisp_lld.c +++ b/templates/gdispXXX/gdisp_lld.c @@ -30,7 +30,7 @@ #include "hal.h" #include "gdisp.h" -#if GFX_USE_GDISP || defined(__DOXYGEN__) +#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/ /* Include the emulation code for things we don't support */ #include "gdisp_emulation.c" diff --git a/templates/gdispXXX/gdisp_lld_config.h b/templates/gdispXXX/gdisp_lld_config.h index b1c71729..cde3581d 100644 --- a/templates/gdispXXX/gdisp_lld_config.h +++ b/templates/gdispXXX/gdisp_lld_config.h @@ -29,7 +29,7 @@ #ifndef _GDISP_LLD_CONFIG_H #define _GDISP_LLD_CONFIG_H -#if GFX_USE_GDISP || defined(__DOXYGEN__) +#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/ /*===========================================================================*/ /* Driver hardware support. */ diff --git a/templates/touchpadXXX/touchpad_lld.c b/templates/touchpadXXX/touchpad_lld.c index 8a832d8c..c2d898f4 100644 --- a/templates/touchpadXXX/touchpad_lld.c +++ b/templates/touchpadXXX/touchpad_lld.c @@ -30,7 +30,7 @@ #include "hal.h" #include "touchpad.h" -#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__) +#if GFX_USE_TOUCHPAD /*|| defined(__DOXYGEN__)*/ /*===========================================================================*/ /* Driver local definitions. */ @@ -46,9 +46,7 @@ /* Driver exported variables. */ /*===========================================================================*/ -#if !defined(__DOXYGEN__) TOUCHPADDriver Touchpad; -#endif /*===========================================================================*/ /* Driver local variables. */ @@ -118,8 +116,8 @@ uint16_t tp_lld_read_y(void) { } /* ---- Optional Routines ---- */ -#if TOUCHPAD_HAS_IRQ || defined(__DOXYGEN__) - /* +#if TOCHPAD_HAS_IRQ || defined(__DOXYGEN) + /* * @brief for checking if touchpad is pressed or not. * * @return 1 if pressed / 0 if not pressed diff --git a/templates/touchpadXXX/touchpad_lld_config.h b/templates/touchpadXXX/touchpad_lld_config.h index e7d046da..eb5ccd80 100644 --- a/templates/touchpadXXX/touchpad_lld_config.h +++ b/templates/touchpadXXX/touchpad_lld_config.h @@ -29,7 +29,7 @@ #ifndef _TOUCHPAD_LLD_CONFIG_H #define _TOUCHPAD_LLD_CONFIG_H -#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__) +#if GFX_USE_TOUCHPAD /*|| defined(__DOXYGEN__)*/ /*===========================================================================*/ /* Driver hardware support. */ From 89baca2ef67b57b35e8df895ea952fac0b60fe19 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Wed, 7 Nov 2012 10:32:07 +0100 Subject: [PATCH 24/33] more doxygen --- docs/src/console.dox | 28 ++++++++++++++++++++++++++++ docs/src/gdisp.dox | 26 ++++++++++++++++++++++++++ docs/src/graph.dox | 28 ++++++++++++++++++++++++++++ docs/src/gwin.dox | 25 +++++++++++++++++++++++++ docs/src/touchpad.dox | 26 ++++++++++++++++++++++++++ 5 files changed, 133 insertions(+) create mode 100644 docs/src/console.dox create mode 100644 docs/src/gdisp.dox create mode 100644 docs/src/graph.dox create mode 100644 docs/src/gwin.dox create mode 100644 docs/src/touchpad.dox diff --git a/docs/src/console.dox b/docs/src/console.dox new file mode 100644 index 00000000..e9b90fd4 --- /dev/null +++ b/docs/src/console.dox @@ -0,0 +1,28 @@ +/* + ChibiOS/GFX - Copyright (C) 2012 + Joel Bodenmann aka Tectu + + 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 . +*/ + +/** + * @addtogroup CONSOLE + * @details The CONSOLE module provides a BaseSequentialStream abstraction. + * It allows to easily use an LCD to output any generic data, for + * example by using the chprintf() provided by ChibiOS/RT. + * Read more here: http://chibios-gfx.com/documentation/console + */ + diff --git a/docs/src/gdisp.dox b/docs/src/gdisp.dox new file mode 100644 index 00000000..0fdeae34 --- /dev/null +++ b/docs/src/gdisp.dox @@ -0,0 +1,26 @@ +/* + ChibiOS/GFX - Copyright (C) 2012 + Joel Bodenmann aka Tectu + + 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 . +*/ + +/** + * @addtogroup GDISP + * @details The GDISP module provides high level abstraction to interface + * pixel oriented graphic displays. + */ + diff --git a/docs/src/graph.dox b/docs/src/graph.dox new file mode 100644 index 00000000..b9ca456d --- /dev/null +++ b/docs/src/graph.dox @@ -0,0 +1,28 @@ +/* + ChibiOS/GFX - Copyright (C) 2012 + Joel Bodenmann aka Tectu + + 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 . +*/ + +/** + * @addtogroup GRAPH + * @details The GRAPH module provides high level HAL independed routines + * to draw graphs on a graphic display. The graph is highly + * configurable. There are many options to controll the look + * of the graph. + */ + diff --git a/docs/src/gwin.dox b/docs/src/gwin.dox new file mode 100644 index 00000000..974800d0 --- /dev/null +++ b/docs/src/gwin.dox @@ -0,0 +1,25 @@ +/* + ChibiOS/GFX - Copyright (C) 2012 + Joel Bodenmann aka Tectu + + 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 . +*/ + +/** + * @addtogroup GWIN + * @details The GWIN module provides simple window management. + */ + diff --git a/docs/src/touchpad.dox b/docs/src/touchpad.dox new file mode 100644 index 00000000..9c156c46 --- /dev/null +++ b/docs/src/touchpad.dox @@ -0,0 +1,26 @@ +/* + ChibiOS/GFX - Copyright (C) 2012 + Joel Bodenmann aka Tectu + + 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 . +*/ + +/** + * @addtogroup TOUCHPAD + * @details The TOUCHPAD module provides high level abstraction to interface + * touchscreens. + */ + From 0458a02b762abdf5d52b8533f53ee1d1b0fa034c Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Wed, 7 Nov 2012 10:48:28 +0100 Subject: [PATCH 25/33] a bit more doxygen --- docs/src/console.dox | 2 +- docs/src/gwin.dox | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/src/console.dox b/docs/src/console.dox index e9b90fd4..b0721e8a 100644 --- a/docs/src/console.dox +++ b/docs/src/console.dox @@ -23,6 +23,6 @@ * @details The CONSOLE module provides a BaseSequentialStream abstraction. * It allows to easily use an LCD to output any generic data, for * example by using the chprintf() provided by ChibiOS/RT. - * Read more here: http://chibios-gfx.com/documentation/console + * @details Read more here: http://chibios-gfx.com/documentation/console */ diff --git a/docs/src/gwin.dox b/docs/src/gwin.dox index 974800d0..b8ea478a 100644 --- a/docs/src/gwin.dox +++ b/docs/src/gwin.dox @@ -20,6 +20,8 @@ /** * @addtogroup GWIN - * @details The GWIN module provides simple window management. + * @details The GWIN module provides simple window management. + * @details Please note that GWIN is a module ontop of GDISP. Therefore, GDISP + * has to be set up correctly. */ From 9592a878267ff16aaf7f7439b1448aac05fde4c2 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Wed, 7 Nov 2012 13:45:00 +0100 Subject: [PATCH 26/33] small cosmetic fix --- include/touchpad_lld.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/touchpad_lld.h b/include/touchpad_lld.h index a5e28fdd..20fdbf7f 100644 --- a/include/touchpad_lld.h +++ b/include/touchpad_lld.h @@ -76,7 +76,7 @@ /** * @brief Structure representing a Touchpad driver. */ -typedef struct _TOUCHPADDriver { +typedef struct TOUCHPADDriver { /* * @brief Pointer to SPI driver. * @note SPI driver must be enabled in mcuconf.h and halconf.h From 6105b88f8947b61bc804ab608219444ac9c7f50f Mon Sep 17 00:00:00 2001 From: Kumar Abhishek Date: Fri, 9 Nov 2012 00:35:08 +0530 Subject: [PATCH 27/33] Touchpad API update to return coordinates as coord_t instead of uint16_t --- include/touchpad.h | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/include/touchpad.h b/include/touchpad.h index 63d6cbf7..ec0ef049 100644 --- a/include/touchpad.h +++ b/include/touchpad.h @@ -49,6 +49,9 @@ /* Include the low level driver information */ #include "touchpad_lld.h" +/* For definitions of coord_t, we require gdisp.h */ +#include "gdisp.h" + /*===========================================================================*/ /* Type definitions */ /*===========================================================================*/ @@ -57,10 +60,12 @@ * @brief Struct used for calibration */ typedef struct cal_t { - float xm; - float ym; - float xn; - float yn; + float ax; + float bx; + float cx; + float ay; + float by; + float cy; } cal_t; /*===========================================================================*/ @@ -72,12 +77,12 @@ extern "C" { #endif void tpInit(const TOUCHPADDriver *tp); -uint16_t tpReadX(void); -uint16_t tpReadY(void); +coord_t tpReadX(void); +coord_t tpReadY(void); void tpCalibrate(void); #if TOUCHPAD_HAS_IRQ - uint8_t tpIRQ(void); + bool_t tpIRQ(void); #endif #if TOUCHPAD_HAS_PRESSURE From f75a2ae91e81eec8fcb7159b485e6a79e70121fa Mon Sep 17 00:00:00 2001 From: Kumar Abhishek Date: Fri, 9 Nov 2012 00:41:22 +0530 Subject: [PATCH 28/33] Touchpad Updates - 3 point calibration support + Touchpad reads now return coord_t instead of uint16_t tpTransform function does the calibration transformation instead of the original functions --- src/touchpad.c | 641 +++++++++++++++++++++++++++++-------------------- 1 file changed, 375 insertions(+), 266 deletions(-) diff --git a/src/touchpad.c b/src/touchpad.c index d0894686..d667508b 100644 --- a/src/touchpad.c +++ b/src/touchpad.c @@ -1,266 +1,375 @@ -/* ChibiOS/GFX - Copyright (C) 2012 - Joel Bodenmann aka Tectu - - 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 . -*/ - -/** - * @file src/touchpad.c - * @brief Touchpad Driver code. - * - * @addtogroup TOUCHPAD - * @{ - */ - -#include "ch.h" -#include "hal.h" -#include "gdisp.h" -#include "touchpad.h" - -#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__) - -#if TOUCHPAD_STORE_CALIBRATION -extern void tp_store_calibration_lld(struct cal_t *cal); -extern struct cal_t *tp_restore_calibration_lld(void); -#endif - -/*===========================================================================*/ -/* Driver local definitions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ -static struct cal_t *cal; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -static uint16_t _tpReadRealX(void) { - uint32_t results = 0; - uint16_t i, x; - - /* Median filtering is already done in LLD */ - for(i = 0; i < CONVERSIONS; i++) { - results += tp_lld_read_x(); - } - - /* Take the average of the readings */ - x = results / CONVERSIONS; - - return x; -} - -static uint16_t _tpReadRealY(void) { - uint32_t results = 0; - uint16_t i, y; - - /* Median filtering is already done in LLD */ - for(i = 0; i < CONVERSIONS; i++) { - results += tp_lld_read_y(); - } - - /* Take the average of the readings */ - y = results / CONVERSIONS; - - return y; -} - -static void _tpDrawCross(uint16_t x, uint16_t y) { - gdispDrawLine(x-15, y, x-2, y, 0xffff); - gdispDrawLine(x+2, y, x+15, y, 0xffff); - gdispDrawLine(x, y-15, x, y-2, 0xffff); - gdispDrawLine(x, y+2, x, y+15, 0xffff); - - gdispDrawLine(x-15, y+15, x-7, y+15, RGB565CONVERT(184,158,131)); - gdispDrawLine(x-15, y+7, x-15, y+15, RGB565CONVERT(184,158,131)); - - gdispDrawLine(x-15, y-15, x-7, y-15, RGB565CONVERT(184,158,131)); - gdispDrawLine(x-15, y-7, x-15, y-15, RGB565CONVERT(184,158,131)); - - gdispDrawLine(x+7, y+15, x+15, y+15, RGB565CONVERT(184,158,131)); - gdispDrawLine(x+15, y+7, x+15, y+15, RGB565CONVERT(184,158,131)); - - gdispDrawLine(x+7, y-15, x+15, y-15, RGB565CONVERT(184,158,131)); - gdispDrawLine(x+15, y-15, x+15, y-7, RGB565CONVERT(184,158,131)); -} - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Touchpad Driver initialization. - * @note This function is NOT currently implicitly invoked by @p halInit(). - * It must be called manually. - * - * @param[in] tp The touchpad driver struct - * - * @api - */ -void tpInit(const TOUCHPADDriver *tp) { - cal = (struct cal_t*)chHeapAlloc(NULL, sizeof(struct cal_t)); - if(cal == NULL) - return; - - /* Initialise Mutex */ - //MUTEX_INIT - - /* Initialise driver */ - //MUTEX_ENTER - tp_lld_init(tp); - //MUTEX_EXIT - - #if TOUCHPAD_STORE_CALIBRATION - cal = tp_restore_calibration_lld(); - if(cal == NULL) { - cal = (struct cal_t*)chHeapAlloc(NULL, sizeof(struct cal_t)); - tpCalibrate(); - } - #endif -} - -/** - * @brief Get the X-Coordinate, relative to screen zero point. - * - * @return The X position in pixels. - * - * @api - */ -uint16_t tpReadX(void) { - uint16_t x, y; - -#if TOUCHPAD_XY_INVERTED == TRUE - x = cal->xm * _tpReadRealY() + cal->xn; - y = cal->ym * _tpReadRealX() + cal->yn; -#else - x = cal->xm * _tpReadRealX() + cal->xn; - y = cal->ym * _tpReadRealY() + cal->yn; -#endif - - switch(gdispGetOrientation()) { - case GDISP_ROTATE_0: - return x; - case GDISP_ROTATE_90: - return y; - case GDISP_ROTATE_180: - return GDISP_SCREEN_WIDTH - x - 1; - case GDISP_ROTATE_270: - return GDISP_SCREEN_HEIGHT - y - 1; - } - - return 0; -} - -/** - * @brief Get the X-Coordinate, relative to screen zero point. - * - * @return The Y position in pixels. - * - * @api - */ -uint16_t tpReadY(void) { - uint16_t x, y; - -#if TOUCHPAD_XY_INVERTED == TRUE - x = cal->xm * _tpReadRealY() + cal->xn; - y = cal->ym * _tpReadRealX() + cal->yn; -#else - x = cal->xm * _tpReadRealX() + cal->xn; - y = cal->ym * _tpReadRealY() + cal->yn; -#endif - - switch(gdispGetOrientation()) { - case GDISP_ROTATE_0: - return y; - case GDISP_ROTATE_90: - return GDISP_SCREEN_WIDTH - x - 1; - case GDISP_ROTATE_180: - return GDISP_SCREEN_HEIGHT - y - 1; - case GDISP_ROTATE_270: - return x; - } - - return 0; -} - -/** - * @brief Get the pressure. - * - * @return The pressure. - * - * @api - */ -#if TOUCHPAD_HAS_PRESSURE || defined(__DOXYGEN__) - uint16_t tpReadZ(void) { - /* ToDo */ - return (tp_lld_read_z()); - } -#endif - -/** - * @brief returns if touchpad is pressed or not - * - * @return 1 if pressed, 0 otherwise - * - * @api - */ -#if TOUCHPAD_HAS_IRQ || defined(__DOXYGEN__) - uint8_t tpIRQ(void) { - return tp_lld_irq(); - } -#endif - -void tpCalibrate(void) { - const uint16_t h = gdispGetHeight(); - const uint16_t w = gdispGetWidth(); - const uint16_t cross[2][2] = {{(w/8), (h/8)}, {(w-(w/8)) , (h-(h/8))}}; - uint16_t points[2][2]; - uint8_t i; - - gdispSetOrientation(GDISP_ROTATE_0); - gdispClear(Red); - gdispFillStringBox(0, 10, gdispGetWidth(), 30, "Calibration", &fontUI2Double, White, Red, justifyCenter); - - for(i = 0; i < 2; i++) { - _tpDrawCross(cross[i][0], cross[i][1]); - while(!tpIRQ()); - points[i][0] = _tpReadRealX(); - points[i][1] = _tpReadRealY(); - chThdSleepMilliseconds(100); - while(tpIRQ()); - gdispFillArea(cross[i][0]-15, cross[i][1]-15, 42, 42, Red); - } - - cal->xm = ((float)cross[1][0] - (float)cross[0][0]) / ((float)points[1][0] - (float)points[0][0]); - cal->ym = ((float)cross[1][1] - (float)cross[0][1]) / ((float)points[1][1] - (float)points[0][1]); - - cal->xn = (float)cross[0][0] - cal->xm * (float)points[0][0]; - cal->yn = (float)cross[0][1] - cal->ym * (float)points[0][1]; - - #if TOUCHPAD_STORE_CALIBRATION - tp_store_calibration_lld(cal); - #endif -} - -#endif /* GFX_USE_TOUCHPAD */ -/** @} */ - +/* ChibiOS/GFX - Copyright (C) 2012 + Joel Bodenmann aka Tectu + + 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 . +*/ + +/** + * @file src/touchpad.c + * @brief Touchpad Driver code. + * + * @addtogroup TOUCHPAD + * @{ + */ + +#include "ch.h" +#include "hal.h" +#include "gdisp.h" +#include "touchpad.h" + +#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__) + +#if TOUCHPAD_STORE_CALIBRATION +extern void tp_store_calibration_lld(struct cal_t *cal); +extern struct cal_t *tp_restore_calibration_lld(void); +#endif + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local variables. */ +/*===========================================================================*/ +static struct cal_t *cal; + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +static coord_t _tpReadRealX(void) { + int32_t results = 0; + int16_t i; + coord_t x; + + for(i = 0; i < CONVERSIONS; i++) { + results += tp_lld_read_x(); + } + + /* Take the average of the readings */ + x = results / CONVERSIONS; + + return x; +} + +static coord_t _tpReadRealY(void) { + int32_t results = 0; + int16_t i; + coord_t y; + + for(i = 0; i < CONVERSIONS; i++) { + results += tp_lld_read_y(); + } + + /* Take the average of the readings */ + y = results / CONVERSIONS; + + return y; +} + +static void _tpDrawCross(uint16_t x, uint16_t y) { + gdispDrawLine(x-15, y, x-2, y, 0xffff); + gdispDrawLine(x+2, y, x+15, y, 0xffff); + gdispDrawLine(x, y-15, x, y-2, 0xffff); + gdispDrawLine(x, y+2, x, y+15, 0xffff); + + gdispDrawLine(x-15, y+15, x-7, y+15, RGB565CONVERT(184,158,131)); + gdispDrawLine(x-15, y+7, x-15, y+15, RGB565CONVERT(184,158,131)); + + gdispDrawLine(x-15, y-15, x-7, y-15, RGB565CONVERT(184,158,131)); + gdispDrawLine(x-15, y-7, x-15, y-15, RGB565CONVERT(184,158,131)); + + gdispDrawLine(x+7, y+15, x+15, y+15, RGB565CONVERT(184,158,131)); + gdispDrawLine(x+15, y+7, x+15, y+15, RGB565CONVERT(184,158,131)); + + gdispDrawLine(x+7, y-15, x+15, y-15, RGB565CONVERT(184,158,131)); + gdispDrawLine(x+15, y-15, x+15, y-7, RGB565CONVERT(184,158,131)); +} + +static void _tpTransform(coord_t *x, coord_t *y) { + *x = (coord_t) (cal->ax * (*x) + cal->bx * (*y) + cal->cx); + *y = (coord_t) (cal->ay * (*x) + cal->by * (*y) + cal->cy); +} + +static void _tpDo3PointCalibration(const coord_t (*cross)[2], coord_t (*points)[2], + cal_t *c) +{ + float dx, dx0, dx1, dx2, dy0, dy1, dy2; + + /* Compute all the required determinants */ + dx = ((float)(points[0][0] - points[2][0])) * ((float)(points[1][1] - points[2][1])) + - ((float)(points[1][0] - points[2][0])) * ((float)(points[0][1] - points[2][1])); + + dx0 = ((float)(cross[0][0] - cross[2][0])) * ((float)(points[1][1] - points[2][1])) + - ((float)(cross[1][0] - cross[2][0])) * ((float)(points[0][1] - points[2][1])); + + dx1 = ((float)(points[0][0] - points[2][0])) * ((float)(cross[1][0] - cross[2][0])) + - ((float)(points[1][0] - points[2][0])) * ((float)(cross[0][0] - cross[2][0])); + + dx2 = cross[0][0] * ((float)points[1][0] * (float)points[2][1] - (float)points[2][0] * (float)points[1][1]) - + cross[1][0] * ((float)points[0][0] * (float)points[2][1] - (float)points[2][0] * (float)points[0][1]) + + cross[2][0] * ((float)points[0][0] * (float)points[1][1] - (float)points[1][0] * (float)points[0][1]); + + dy0 = ((float)(cross[0][1] - cross[2][1])) * ((float)(points[1][1] - points[2][1])) + - ((float)(cross[1][1] - cross[2][1])) * ((float)(points[0][1] - points[2][1])); + + dy1 = ((float)(points[0][0] - points[2][0])) * ((float)(cross[1][1] - cross[2][1])) + - ((float)(points[1][0] - points[2][0])) * ((float)(cross[0][1] - cross[2][1])); + + dy2 = cross[0][1] * ((float)points[1][0] * (float)points[2][1] - (float)points[2][0] * (float)points[1][1]) - + cross[1][1] * ((float)points[0][0] * (float)points[2][1] - (float)points[2][0] * (float)points[0][1]) + + cross[2][1] * ((float)points[0][0] * (float)points[1][1] - (float)points[1][0] * (float)points[0][1]); + + /* Now, calculate all the required coefficients */ + c->ax = dx0 / dx; + c->bx = dx1 / dx; + c->cx = dx2 / dx; + + c->ay = dy0 / dx; + c->by = dy1 / dx; + c->cy = dy2 / dx; +} + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief Touchpad Driver initialization. + * @note This function is NOT currently implicitly invoked by @p halInit(). + * It must be called manually. + * + * @param[in] tp The touchpad driver struct + * + * @api + */ +void tpInit(const TOUCHPADDriver *tp) { + cal = (struct cal_t*)chHeapAlloc(NULL, sizeof(struct cal_t)); + if(cal == NULL) + return; + + /* Initialise Mutex */ + //MUTEX_INIT + + /* Initialise driver */ + //MUTEX_ENTER + tp_lld_init(tp); + //MUTEX_EXIT + + #if TOUCHPAD_STORE_CALIBRATION + cal = tp_restore_calibration_lld(); + if(cal == NULL) { + cal = (struct cal_t*)chHeapAlloc(NULL, sizeof(struct cal_t)); + tpCalibrate(); + } + #endif +} + +/** + * @brief Get the X-Coordinate, relative to screen zero point. + * + * @return The X position in pixels. + * + * @api + */ +coord_t tpReadX(void) { + coord_t x, y; + +#if TOUCHPAD_XY_INVERTED == TRUE + x = _tpReadRealY(); + y = _tpReadRealX(); +#else + x = _tpReadRealX(); + y = _tpReadRealY(); +#endif + + _tpTransform(&x, &y); + + switch(gdispGetOrientation()) { + case GDISP_ROTATE_0: + return x; + case GDISP_ROTATE_90: + return y; + case GDISP_ROTATE_180: + return GDISP_SCREEN_WIDTH - x - 1; + case GDISP_ROTATE_270: + return GDISP_SCREEN_HEIGHT - y - 1; + } + + return 0; +} + +/** + * @brief Get the X-Coordinate, relative to screen zero point. + * + * @return The Y position in pixels. + * + * @api + */ +coord_t tpReadY(void) { + coord_t x, y; + +#if TOUCHPAD_XY_INVERTED == TRUE + x = _tpReadRealY(); + y = _tpReadRealX(); +#else + x = _tpReadRealX(); + y = _tpReadRealY(); +#endif + + _tpTransform(&x, &y); + + switch(gdispGetOrientation()) { + case GDISP_ROTATE_0: + return y; + case GDISP_ROTATE_90: + return GDISP_SCREEN_WIDTH - x - 1; + case GDISP_ROTATE_180: + return GDISP_SCREEN_HEIGHT - y - 1; + case GDISP_ROTATE_270: + return x; + } + + return 0; +} + +/** + * @brief Get the pressure. + * + * @return The pressure. + * + * @api + */ +#if TOUCHPAD_HAS_PRESSURE || defined(__DOXYGEN__) + uint16_t tpReadZ(void) { + /* ToDo */ + return (tp_lld_read_z()); + } +#endif + +/** + * @brief Returns if touchpad is pressed or not + * + * @return TRUE if pressed, FALSE otherwise + * + * @api + */ +#if TOUCHPAD_HAS_IRQ || defined(__DOXYGEN__) + bool_t tpIRQ(void) { + return tp_lld_irq(); + } +#endif + +/* Define maximum no. of times to sample the calibration point */ +#define MAX_CAL_SAMPLES 10 + +/** + * @brief This function interactively performs calibration of the touchscreen + * using 3-point calibration algorithm. Optionally, it also verifies + * the accuracy of the calibration coefficients obtained if the symbol + * TOUCHPAD_VERIFY_CALIBRATION is defined in the configuration. + * + * @api + */ +void tpCalibrate(void) { + const uint16_t height = gdispGetHeight(); + const uint16_t width = gdispGetWidth(); + const coord_t cross[][2] = {{(width / 4), (height / 4)}, + {(width - (width / 4)) , (height / 4)}, + {(width - (width / 4)) , (height - (height / 4))}, + {(width / 2), (height / 2)}}; /* Check point */ + coord_t points[4][2]; + int32_t px, py; + uint8_t i, j; + + gdispSetOrientation(GDISP_ROTATE_0); + gdispClear(Blue); + + gdispFillStringBox(0, 5, gdispGetWidth(), 30, "Calibration", &fontUI2Double, White, Blue, justifyCenter); + +#if defined(TOUCHPAD_VERIFY_CALIBRATION) +calibrate: + for(i = 0; i < 4; i++) { +#else + for(i = 0; i < 3; i++) { +#endif + _tpDrawCross(cross[i][0], cross[i][1]); + + while(!tpIRQ()) + chThdSleepMilliseconds(2); /* Be nice to other threads*/ + + chThdSleepMilliseconds(20); /* Allow screen to settle */ + + /* Take a little more samples per point and their average + * for precise calibration */ + px = py = 0; + + j = 0; + while (j < MAX_CAL_SAMPLES) { + if (tpIRQ()) { + /* We have valid pointer data */ + px += _tpReadRealX(); + py += _tpReadRealY(); + + j++; + } + } + + points[i][0] = px / j; + points[i][1] = py / j; + + chThdSleepMilliseconds(100); + + while(tpIRQ()) + chThdSleepMilliseconds(2); /* Be nice to other threads*/ + + gdispFillArea(cross[i][0] - 15, cross[i][1] - 15, 42, 42, Blue); + } + + /* Apply 3 point calibration algorithm */ + _tpDo3PointCalibration(cross, points, cal); + +#if defined(TOUCHPAD_VERIFY_CALIBRATION) + /* Verification of correctness of calibration (optional) : + * See if the 4th point (Middle of the screen) coincides with the calibrated + * result. If point is with +/- 2 pixel margin, then successful calibration + * Else, start from the beginning. + */ + + /* Transform the co-ordinates */ + _tpTransform(&points[3][0], &points[3][1]); + + /* Calculate the delta */ + px = (points[3][0] - cross[3][0]) * (points[3][0] - cross[3][0]) + + (points[3][1] - cross[3][1]) * (points[3][1] - cross[3][1]); + + if (px > 4) + goto calibrate; +#endif + + /* If enabled, serialize the calibration values for storage */ + #if TOUCHPAD_STORE_CALIBRATION + tp_store_calibration_lld(cal); + #endif +} + +#endif /* GFX_USE_TOUCHPAD */ +/** @} */ + From 61d2238b259e140164a3d1f54d6144be24dcb08c Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Fri, 9 Nov 2012 01:04:27 +0100 Subject: [PATCH 29/33] small cleanup --- include/touchpad_lld.h | 4 ++++ src/touchpad.c | 7 +++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/include/touchpad_lld.h b/include/touchpad_lld.h index 20fdbf7f..20411198 100644 --- a/include/touchpad_lld.h +++ b/include/touchpad_lld.h @@ -53,6 +53,10 @@ #define TOUCHPAD_STORE_CALIBRATION FALSE #endif +#ifndef TOUCHPAD_VERIFY_CALIBRATION + #define TOUCHPAD_VERIFY_CALIBRATION FALSE +#endif + #ifndef TOUCHPAD_HAS_IRQ #define TOUCHPAD_HAS_IRQ FALSE #endif diff --git a/src/touchpad.c b/src/touchpad.c index d667508b..5b8d112e 100644 --- a/src/touchpad.c +++ b/src/touchpad.c @@ -108,9 +108,7 @@ static void _tpTransform(coord_t *x, coord_t *y) { *y = (coord_t) (cal->ay * (*x) + cal->by * (*y) + cal->cy); } -static void _tpDo3PointCalibration(const coord_t (*cross)[2], coord_t (*points)[2], - cal_t *c) -{ +static void _tpDo3PointCalibration(const coord_t (*cross)[2], coord_t (*points)[2], cal_t *c) { float dx, dx0, dx1, dx2, dy0, dy1, dy2; /* Compute all the required determinants */ @@ -281,7 +279,8 @@ coord_t tpReadY(void) { #define MAX_CAL_SAMPLES 10 /** - * @brief This function interactively performs calibration of the touchscreen + * @brief Function to calibrate touchscreen + * @details This function interactively performs calibration of the touchscreen * using 3-point calibration algorithm. Optionally, it also verifies * the accuracy of the calibration coefficients obtained if the symbol * TOUCHPAD_VERIFY_CALIBRATION is defined in the configuration. From 995c9835c282e8904ff918e325f0491249bdcc89 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Fri, 9 Nov 2012 23:10:38 +0100 Subject: [PATCH 30/33] small macro update --- src/touchpad.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/touchpad.c b/src/touchpad.c index 5b8d112e..f06365f7 100644 --- a/src/touchpad.c +++ b/src/touchpad.c @@ -303,7 +303,7 @@ void tpCalibrate(void) { gdispFillStringBox(0, 5, gdispGetWidth(), 30, "Calibration", &fontUI2Double, White, Blue, justifyCenter); -#if defined(TOUCHPAD_VERIFY_CALIBRATION) +#if TOUCHPAD_VERIFY_CALIBRATION calibrate: for(i = 0; i < 4; i++) { #else @@ -345,7 +345,7 @@ calibrate: /* Apply 3 point calibration algorithm */ _tpDo3PointCalibration(cross, points, cal); -#if defined(TOUCHPAD_VERIFY_CALIBRATION) +#if TOUCHPAD_VERIFY_CALIBRATION /* Verification of correctness of calibration (optional) : * See if the 4th point (Middle of the screen) coincides with the calibrated * result. If point is with +/- 2 pixel margin, then successful calibration From 87b6d98055afff7c46bd6bdd7db7ba7c1d8e7a57 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 10 Nov 2012 00:05:01 +0100 Subject: [PATCH 31/33] renamed touchpad into touchscreen --- demos/notepad/main.c | 12 +- docs/src/touchpad.dox | 26 -- drivers/touchpad/ADS7843/readme.txt | 8 - drivers/touchpad/ADS7843/touchpad_lld.mk | 6 - drivers/touchpad/XPT2046/readme.txt | 8 - drivers/touchpad/XPT2046/touchpad_lld.mk | 6 - drivers/touchscreen/ADS7843/readme.txt | 8 + .../ADS7843/touchscreen_lld.c} | 96 ++--- .../touchscreen/ADS7843/touchscreen_lld.mk | 6 + .../ADS7843/touchscreen_lld_config.h} | 20 +- drivers/touchscreen/XPT2046/readme.txt | 8 + .../XPT2046/touchscreen_lld.c} | 96 ++--- .../touchscreen/XPT2046/touchscreen_lld.mk | 6 + .../XPT2046/touchscreen_lld_config.h} | 20 +- gfx.mk | 2 +- include/touchpad.h | 100 ----- include/touchpad_lld.h | 155 -------- releases.txt | 2 + src/touchpad.c | 374 ------------------ 19 files changed, 153 insertions(+), 806 deletions(-) delete mode 100644 docs/src/touchpad.dox delete mode 100644 drivers/touchpad/ADS7843/readme.txt delete mode 100644 drivers/touchpad/ADS7843/touchpad_lld.mk delete mode 100644 drivers/touchpad/XPT2046/readme.txt delete mode 100644 drivers/touchpad/XPT2046/touchpad_lld.mk create mode 100644 drivers/touchscreen/ADS7843/readme.txt rename drivers/{touchpad/XPT2046/touchpad_lld.c => touchscreen/ADS7843/touchscreen_lld.c} (66%) create mode 100644 drivers/touchscreen/ADS7843/touchscreen_lld.mk rename drivers/{touchpad/XPT2046/touchpad_lld_config.h => touchscreen/ADS7843/touchscreen_lld_config.h} (69%) create mode 100644 drivers/touchscreen/XPT2046/readme.txt rename drivers/{touchpad/ADS7843/touchpad_lld.c => touchscreen/XPT2046/touchscreen_lld.c} (66%) create mode 100644 drivers/touchscreen/XPT2046/touchscreen_lld.mk rename drivers/{touchpad/ADS7843/touchpad_lld_config.h => touchscreen/XPT2046/touchscreen_lld_config.h} (70%) delete mode 100644 include/touchpad.h delete mode 100644 include/touchpad_lld.h delete mode 100644 src/touchpad.c diff --git a/demos/notepad/main.c b/demos/notepad/main.c index b84ff2db..5d9e5ffc 100644 --- a/demos/notepad/main.c +++ b/demos/notepad/main.c @@ -21,7 +21,7 @@ #include "ch.h" #include "hal.h" #include "gdisp.h" -#include "touchpad.h" +#include "touchscreen.h" #define COLOR_SIZE 20 #define PEN_SIZE 20 @@ -43,7 +43,7 @@ static const SPIConfig spicfg = { /* SPI_CR1_BR_2 | */ SPI_CR1_BR_1 | SPI_CR1_BR_0, }; -TOUCHPADDriver TOUCHPADD1 = { +TouchscreenDriver TOUCHPADD1 = { &SPID1, &spicfg, TP_IRQ_PORT, @@ -85,14 +85,14 @@ int main(void) { chSysInit(); gdispInit(); - tpInit(&TOUCHPADD1); - tpCalibrate(); + tsInit(&TOUCHPADD1); + tsCalibrate(); drawScreen(); while (TRUE) { - x = tpReadX(); - y = tpReadY(); + x = tsReadX(); + y = tsReadY(); /* inside color box ? */ if(y >= OFFSET && y <= COLOR_SIZE) { diff --git a/docs/src/touchpad.dox b/docs/src/touchpad.dox deleted file mode 100644 index 9c156c46..00000000 --- a/docs/src/touchpad.dox +++ /dev/null @@ -1,26 +0,0 @@ -/* - ChibiOS/GFX - Copyright (C) 2012 - Joel Bodenmann aka Tectu - - 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 . -*/ - -/** - * @addtogroup TOUCHPAD - * @details The TOUCHPAD module provides high level abstraction to interface - * touchscreens. - */ - diff --git a/drivers/touchpad/ADS7843/readme.txt b/drivers/touchpad/ADS7843/readme.txt deleted file mode 100644 index 90eadc32..00000000 --- a/drivers/touchpad/ADS7843/readme.txt +++ /dev/null @@ -1,8 +0,0 @@ -To use this driver: - -1. Add in your halconf.h: - a) #define GFX_USE_TOUCHPAD TRUE - -2. To your makefile add the following lines: - include $(GFXLIB)/drivers/touchpadADS7843/touchpad_lld.mk - diff --git a/drivers/touchpad/ADS7843/touchpad_lld.mk b/drivers/touchpad/ADS7843/touchpad_lld.mk deleted file mode 100644 index 6aaa44ee..00000000 --- a/drivers/touchpad/ADS7843/touchpad_lld.mk +++ /dev/null @@ -1,6 +0,0 @@ -# List the required driver. -GFXSRC += $(GFXLIB)/drivers/touchpad/ADS7843/touchpad_lld.c - -# Required include directories -GFXINC += $(GFXLIB)/drivers/touchpad/ADS7843 - diff --git a/drivers/touchpad/XPT2046/readme.txt b/drivers/touchpad/XPT2046/readme.txt deleted file mode 100644 index baccebe8..00000000 --- a/drivers/touchpad/XPT2046/readme.txt +++ /dev/null @@ -1,8 +0,0 @@ -To use this driver: - -1. Add in your halconf.h: - a) #define GFX_USE_TOUCHPAD TRUE - -2. To your makefile add the following lines: - include $(GFXLIB)/drivers/touchpad/XPT2046/touchpad_lld.mk - diff --git a/drivers/touchpad/XPT2046/touchpad_lld.mk b/drivers/touchpad/XPT2046/touchpad_lld.mk deleted file mode 100644 index 8d662a74..00000000 --- a/drivers/touchpad/XPT2046/touchpad_lld.mk +++ /dev/null @@ -1,6 +0,0 @@ -# List the required driver. -GFXSRC += $(GFXLIB)/drivers/touchpad/XPT2046/touchpad_lld.c - -# Required include directories -GFXINC += $(GFXLIB)/drivers/touchpad/XPT2046 - diff --git a/drivers/touchscreen/ADS7843/readme.txt b/drivers/touchscreen/ADS7843/readme.txt new file mode 100644 index 00000000..85f40da5 --- /dev/null +++ b/drivers/touchscreen/ADS7843/readme.txt @@ -0,0 +1,8 @@ +To use this driver: + +1. Add in your halconf.h: + a) #define GFX_USE_TOUCHSCREEN TRUE + +2. To your makefile add the following lines: + include $(GFXLIB)/drivers/touchscreen/ADS7843/touchscreen_lld.mk + diff --git a/drivers/touchpad/XPT2046/touchpad_lld.c b/drivers/touchscreen/ADS7843/touchscreen_lld.c similarity index 66% rename from drivers/touchpad/XPT2046/touchpad_lld.c rename to drivers/touchscreen/ADS7843/touchscreen_lld.c index 8be23b07..98e25383 100644 --- a/drivers/touchpad/XPT2046/touchpad_lld.c +++ b/drivers/touchscreen/ADS7843/touchscreen_lld.c @@ -19,18 +19,18 @@ */ /** - * @file drivers/touchpad/XPT2046/touchpad_lld.c - * @brief Touchpad Driver subsystem low level driver source. + * @file drivers/touchscreen/ADS7843/touchscreen_lld.c + * @brief Touchscreen Driver subsystem low level driver source. * - * @addtogroup TOUCHPAD + * @addtogroup TOUCHSCREEN * @{ */ #include "ch.h" #include "hal.h" -#include "touchpad.h" +#include "touchscreen.h" -#if GFX_USE_TOUCHPAD /*|| defined(__DOXYGEN__)*/ +#if GFX_USE_TOUCHSCREEN /*|| defined(__DOXYGEN__)*/ /*===========================================================================*/ /* Driver local definitions. */ @@ -44,8 +44,8 @@ /* Driver local variables. */ /*===========================================================================*/ #if !defined(__DOXYGEN__) - /* Local copy of the current touchpad driver */ - static const TOUCHPADDriver *tpDriver; + /* Local copy of the current touchscreen driver */ + static const TouchscreenDriver *tsDriver; static uint16_t sampleBuf[7]; #endif @@ -65,24 +65,24 @@ /* ---- Required Routines ---- */ /** - * @brief Low level Touchpad driver initialization. + * @brief Low level touchscreen driver initialization. * - * @param[in] tp The touchpad driver struct + * @param[in] ts The touchscreen driver * * @notapi */ -void tp_lld_init(const TOUCHPADDriver *tp) { - tpDriver = tp; +void ts_lld_init(const TouchscreenDriver *ts) { + tsDriver = ts; - if(tpDriver->direct_init) - spiStart(tpDriver->spip, tpDriver->spicfg); + if(tsDriver->direct_init) + spiStart(tsDriver->spip, tsDriver->spicfg); } /** - * @brief Reads a conversion from the touchpad + * @brief Reads a conversion from the touchscreen * - * @param[in] cmd The command bits to send to the touchpad + * @param[in] cmd The command bits to send to the touchscreen * * @return The read value 12-bit right-justified * @@ -91,14 +91,14 @@ void tp_lld_init(const TOUCHPADDriver *tp) { * * @notapi */ -uint16_t tp_lld_read_value(uint8_t cmd) { +uint16_t ts_lld_read_value(uint8_t cmd) { static uint8_t txbuf[3] = {0}; static uint8_t rxbuf[3] = {0}; uint16_t ret; txbuf[0] = cmd; - spiExchange(tpDriver->spip, 3, txbuf, rxbuf); + spiExchange(tsDriver->spip, 3, txbuf, rxbuf); ret = (rxbuf[1] << 5) | (rxbuf[2] >> 3); @@ -106,18 +106,18 @@ uint16_t tp_lld_read_value(uint8_t cmd) { } /** - * @brief 7-point median filtering code for touchpad samples + * @brief 7-point median filtering code for touchscreen samples * * @note This is an internally used routine only. * * @notapi */ -static void tp_lld_filter(void) { +static void ts_lld_filter(void) { uint16_t temp; int i,j; for(i = 0; i < 4; i++) { - for(j=i; j < 7; j++) { + for(j = i; j < 7; j++) { if(sampleBuf[i] > sampleBuf[j]) { /* Swap the values */ temp = sampleBuf[i]; @@ -135,37 +135,37 @@ static void tp_lld_filter(void) { * * @notapi */ -uint16_t tp_lld_read_x(void) { +uint16_t ts_lld_read_x(void) { int i; #if defined(SPI_USE_MUTUAL_EXCLUSION) - spiAcquireBus(tpDriver->spip); + spiAcquireBus(tsDriver->spip); #endif - TOUCHPAD_SPI_PROLOGUE(); - palClearPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad); + TOUCHSCREEN_SPI_PROLOGUE(); + palClearPad(tsDriver->spicfg->ssport, tsDriver->spicfg->sspad); /* Discard the first conversion - very noisy and keep the ADC on hereafter * till we are done with the sampling. Note that PENIRQ is disabled. */ - tp_lld_read_value(0xD1); + ts_lld_read_value(0xD1); for(i = 0; i < 7; i++) { - sampleBuf[i]=tp_lld_read_value(0xD1); + sampleBuf[i] = ts_lld_read_value(0xD1); } /* Switch on PENIRQ once again - perform a dummy read */ - tp_lld_read_value(0xD0); + ts_lld_read_value(0xD0); - palSetPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad); - TOUCHPAD_SPI_EPILOGUE(); + palSetPad(tsDriver->spicfg->ssport, tsDriver->spicfg->sspad); + TOUCHSCREEN_SPI_EPILOGUE(); #if defined(SPI_USE_MUTUAL_EXCLUSION) - spiReleaseBus(tpDriver->spip); + spiReleaseBus(tsDriver->spip); #endif /* Find the median - use selection sort */ - tp_lld_filter(); + ts_lld_filter(); return sampleBuf[3]; } @@ -175,43 +175,43 @@ uint16_t tp_lld_read_x(void) { * * @notapi */ -uint16_t tp_lld_read_y(void) { +uint16_t ts_lld_read_y(void) { int i; #if defined(SPI_USE_MUTUAL_EXCLUSION) - spiAcquireBus(tpDriver->spip); + spiAcquireBus(tsDriver->spip); #endif - TOUCHPAD_SPI_PROLOGUE(); - palClearPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad); + TOUCHSCREEN_SPI_PROLOGUE(); + palClearPad(tsDriver->spicfg->ssport, tsDriver->spicfg->sspad); /* Discard the first conversion - very noisy and keep the ADC on hereafter * till we are done with the sampling. Note that PENIRQ is disabled. */ - tp_lld_read_value(0x91); + ts_lld_read_value(0x91); for(i = 0; i < 7; i++) { - sampleBuf[i] = tp_lld_read_value(0x91); + sampleBuf[i] = ts_lld_read_value(0x91); } /* Switch on PENIRQ once again - perform a dummy read */ - tp_lld_read_value(0x90); + ts_lld_read_value(0x90); - palSetPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad); - TOUCHPAD_SPI_EPILOGUE(); + palSetPad(tsDriver->spicfg->ssport, tsDriver->spicfg->sspad); + TOUCHSCREEN_SPI_EPILOGUE(); #ifdef SPI_USE_MUTUAL_EXCLUSION - spiReleaseBus(tpDriver->spip); + spiReleaseBus(tsDriver->spip); #endif /* Find the median - use selection sort */ - tp_lld_filter(); + ts_lld_filter(); return sampleBuf[3]; } /* ---- Optional Routines ---- */ -#if TOUCHPAD_HAS_IRQ || defined(__DOXYGEN__) +#if TOUCHSCREEN_HAS_IRQ || defined(__DOXYGEN__) /* * @brief for checking if touchpad is pressed or not. * @@ -219,23 +219,23 @@ uint16_t tp_lld_read_y(void) { * * @notapi */ - uint8_t tp_lld_irq(void) { - return (!palReadPad(tpDriver->tpIRQPort, tpDriver->tpIRQPin)); + uint8_t ts_lld_irq(void) { + return (!palReadPad(tsDriver->tsIRQPort, tsDriver->tsIRQPin)); } #endif -#if TOUCHPAD_HAS_PRESSURE || defined(__DOXYGEN__) +#if TOUCHSCREEN_HAS_PRESSURE || defined(__DOXYGEN__) /* * @brief Reads out the Z direction / pressure. * * @notapi */ - uint16_t tp_lld_read_z(void) { + uint16_t ts_lld_read_z(void) { /* ToDo */ return 42; } #endif -#endif /* GFX_USE_TOUCHPAD */ +#endif /* GFX_USE_TOUCHSCREEN */ /** @} */ diff --git a/drivers/touchscreen/ADS7843/touchscreen_lld.mk b/drivers/touchscreen/ADS7843/touchscreen_lld.mk new file mode 100644 index 00000000..c58f6647 --- /dev/null +++ b/drivers/touchscreen/ADS7843/touchscreen_lld.mk @@ -0,0 +1,6 @@ +# List the required driver. +GFXSRC += $(GFXLIB)/drivers/touchscreen/ADS7843/touchscreen_lld.c + +# Required include directories +GFXINC += $(GFXLIB)/drivers/touchscreen/ADS7843 + diff --git a/drivers/touchpad/XPT2046/touchpad_lld_config.h b/drivers/touchscreen/ADS7843/touchscreen_lld_config.h similarity index 69% rename from drivers/touchpad/XPT2046/touchpad_lld_config.h rename to drivers/touchscreen/ADS7843/touchscreen_lld_config.h index a503d2b7..5769c288 100644 --- a/drivers/touchpad/XPT2046/touchpad_lld_config.h +++ b/drivers/touchscreen/ADS7843/touchscreen_lld_config.h @@ -19,27 +19,27 @@ */ /** - * @file drivers/touchpad/XPT2046/touchpad_lld_config.h - * @brief Touchppad Driver subsystem low level driver. + * @file drivers/touchscreen/ADS7843/touchscreen_lld_config.h + * @brief Touchscreen Driver subsystem low level driver. * - * @addtogroup TOUCHPAD + * @addtogroup TOUCHSCREEN * @{ */ -#ifndef _TOUCHPAD_LLD_CONFIG_H -#define _TOUCHPAD_LLD_CONFIG_H +#ifndef TOUCHSCREEN_LLD_CONFIG_H +#define TOUCHSCREEN_LLD_CONFIG_H -#if GFX_USE_TOUCHPAD /*|| defined(__DOXYGEN__)*/ +#if GFX_USE_TOUCHSCREEN /*|| defined(__DOXYGEN__)*/ /*===========================================================================*/ /* Driver hardware support. */ /*===========================================================================*/ -#define TOUCHPAD_HAS_IRQ TRUE -#define TOUCHPAD_HAS_PRESSURE TRUE +#define TOUCHSCREEN_HAS_IRQ TRUE +#define TOUCHSCREEN_HAS_PRESSURE FALSE -#endif /* GFX_USE_TOUCHPAD */ +#endif /* GFX_USE_TOUCHSCREEN */ -#endif /* _TOUCHPAD_LLD_CONFIG_H */ +#endif /* TOUCHSCREEN_LLD_CONFIG_H */ /** @} */ diff --git a/drivers/touchscreen/XPT2046/readme.txt b/drivers/touchscreen/XPT2046/readme.txt new file mode 100644 index 00000000..a81caf67 --- /dev/null +++ b/drivers/touchscreen/XPT2046/readme.txt @@ -0,0 +1,8 @@ +To use this driver: + +1. Add in your halconf.h: + a) #define GFX_USE_TOUCHSCREEN TRUE + +2. To your makefile add the following lines: + include $(GFXLIB)/drivers/touchscreen/XPT2046/touchscreen_lld.mk + diff --git a/drivers/touchpad/ADS7843/touchpad_lld.c b/drivers/touchscreen/XPT2046/touchscreen_lld.c similarity index 66% rename from drivers/touchpad/ADS7843/touchpad_lld.c rename to drivers/touchscreen/XPT2046/touchscreen_lld.c index 8b30f4f3..90bf0032 100644 --- a/drivers/touchpad/ADS7843/touchpad_lld.c +++ b/drivers/touchscreen/XPT2046/touchscreen_lld.c @@ -19,18 +19,18 @@ */ /** - * @file drivers/touchpad/ADS7843/touchpad_lld.c - * @brief Touchpad Driver subsystem low level driver source. + * @file drivers/touchscreen/XPT2046/touchscreen_lld.c + * @brief Touchscreen Driver subsystem low level driver source. * - * @addtogroup TOUCHPAD + * @addtogroup TOUCHSCREEN * @{ */ #include "ch.h" #include "hal.h" -#include "touchpad.h" +#include "touchscreen.h" -#if GFX_USE_TOUCHPAD /*|| defined(__DOXYGEN__)*/ +#if GFX_USE_TOUCHSCREEN /*|| defined(__DOXYGEN__)*/ /*===========================================================================*/ /* Driver local definitions. */ @@ -45,7 +45,7 @@ /*===========================================================================*/ #if !defined(__DOXYGEN__) /* Local copy of the current touchpad driver */ - static const TOUCHPADDriver *tpDriver; + static const TouchscreenDriver *tsDriver; static uint16_t sampleBuf[7]; #endif @@ -65,24 +65,24 @@ /* ---- Required Routines ---- */ /** - * @brief Low level Touchpad driver initialization. + * @brief Low level Touchscreen driver initialization. * - * @param[in] tp The touchpad driver + * @param[in] ts The touchscreen driver struct * * @notapi */ -void tp_lld_init(const TOUCHPADDriver *tp) { - tpDriver = tp; +void ts_lld_init(const TouchscreenDriver *ts) { + tsDriver = ts; - if(tpDriver->direct_init) - spiStart(tpDriver->spip, tpDriver->spicfg); + if(tsDriver->direct_init) + spiStart(tsDriver->spip, tsDriver->spicfg); } /** - * @brief Reads a conversion from the touchpad + * @brief Reads a conversion from the touchscreen * - * @param[in] cmd The command bits to send to the touchpad + * @param[in] cmd The command bits to send to the touchscreen * * @return The read value 12-bit right-justified * @@ -91,14 +91,14 @@ void tp_lld_init(const TOUCHPADDriver *tp) { * * @notapi */ -uint16_t tp_lld_read_value(uint8_t cmd) { +uint16_t ts_lld_read_value(uint8_t cmd) { static uint8_t txbuf[3] = {0}; static uint8_t rxbuf[3] = {0}; uint16_t ret; txbuf[0] = cmd; - spiExchange(tpDriver->spip, 3, txbuf, rxbuf); + spiExchange(tsDriver->spip, 3, txbuf, rxbuf); ret = (rxbuf[1] << 5) | (rxbuf[2] >> 3); @@ -106,18 +106,18 @@ uint16_t tp_lld_read_value(uint8_t cmd) { } /** - * @brief 7-point median filtering code for touchpad samples + * @brief 7-point median filtering code for touchscreen samples * * @note This is an internally used routine only. * * @notapi */ -static void tp_lld_filter(void) { +static void ts_lld_filter(void) { uint16_t temp; int i,j; for(i = 0; i < 4; i++) { - for(j=i; j < 7; j++) { + for(j = i; j < 7; j++) { if(sampleBuf[i] > sampleBuf[j]) { /* Swap the values */ temp = sampleBuf[i]; @@ -135,37 +135,37 @@ static void tp_lld_filter(void) { * * @notapi */ -uint16_t tp_lld_read_x(void) { +uint16_t ts_lld_read_x(void) { int i; #if defined(SPI_USE_MUTUAL_EXCLUSION) - spiAcquireBus(tpDriver->spip); + spiAcquireBus(tsDriver->spip); #endif - TOUCHPAD_SPI_PROLOGUE(); - palClearPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad); + TOUCHSCREEN_SPI_PROLOGUE(); + palClearPad(tsDriver->spicfg->ssport, tsDriver->spicfg->sspad); /* Discard the first conversion - very noisy and keep the ADC on hereafter * till we are done with the sampling. Note that PENIRQ is disabled. */ - tp_lld_read_value(0xD1); + ts_lld_read_value(0xD1); for(i = 0; i < 7; i++) { - sampleBuf[i]=tp_lld_read_value(0xD1); + sampleBuf[i] = ts_lld_read_value(0xD1); } /* Switch on PENIRQ once again - perform a dummy read */ - tp_lld_read_value(0xD0); + ts_lld_read_value(0xD0); - palSetPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad); - TOUCHPAD_SPI_EPILOGUE(); + palSetPad(tsDriver->spicfg->ssport, tsDriver->spicfg->sspad); + TOUCHSCREEN_SPI_EPILOGUE(); #if defined(SPI_USE_MUTUAL_EXCLUSION) - spiReleaseBus(tpDriver->spip); + spiReleaseBus(tsDriver->spip); #endif /* Find the median - use selection sort */ - tp_lld_filter(); + ts_lld_filter(); return sampleBuf[3]; } @@ -175,67 +175,67 @@ uint16_t tp_lld_read_x(void) { * * @notapi */ -uint16_t tp_lld_read_y(void) { +uint16_t ts_lld_read_y(void) { int i; #if defined(SPI_USE_MUTUAL_EXCLUSION) - spiAcquireBus(tpDriver->spip); + spiAcquireBus(tsDriver->spip); #endif - TOUCHPAD_SPI_PROLOGUE(); - palClearPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad); + TOUCHSCREEN_SPI_PROLOGUE(); + palClearPad(tsDriver->spicfg->ssport, tsDriver->spicfg->sspad); /* Discard the first conversion - very noisy and keep the ADC on hereafter * till we are done with the sampling. Note that PENIRQ is disabled. */ - tp_lld_read_value(0x91); + ts_lld_read_value(0x91); for(i = 0; i < 7; i++) { - sampleBuf[i] = tp_lld_read_value(0x91); + sampleBuf[i] = ts_lld_read_value(0x91); } /* Switch on PENIRQ once again - perform a dummy read */ - tp_lld_read_value(0x90); + ts_lld_read_value(0x90); - palSetPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad); - TOUCHPAD_SPI_EPILOGUE(); + palSetPad(tsDriver->spicfg->ssport, tsDriver->spicfg->sspad); + TOUCHSCREEN_SPI_EPILOGUE(); #ifdef SPI_USE_MUTUAL_EXCLUSION - spiReleaseBus(tpDriver->spip); + spiReleaseBus(tsDriver->spip); #endif /* Find the median - use selection sort */ - tp_lld_filter(); + ts_lld_filter(); return sampleBuf[3]; } /* ---- Optional Routines ---- */ -#if TOUCHPAD_HAS_IRQ || defined(__DOXYGEN__) +#if TOUCHSCREEN_HAS_IRQ || defined(__DOXYGEN__) /* - * @brief for checking if touchpad is pressed or not. + * @brief for checking if touchscreen is pressed or not. * * @return 1 if pressed / 0 if not pressed * * @notapi */ - uint8_t tp_lld_irq(void) { - return (!palReadPad(tpDriver->tpIRQPort, tpDriver->tpIRQPin)); + uint8_t ts_lld_irq(void) { + return (!palReadPad(tsDriver->tsIRQPort, tsDriver->tsIRQPin)); } #endif -#if TOUCHPAD_HAS_PRESSURE || defined(__DOXYGEN__) +#if TOUCHSCREEN_HAS_PRESSURE || defined(__DOXYGEN__) /* * @brief Reads out the Z direction / pressure. * * @notapi */ - uint16_t tp_lld_read_z(void) { + uint16_t ts_lld_read_z(void) { /* ToDo */ return 42; } #endif -#endif /* GFX_USE_TOUCHPAD */ +#endif /* GFX_USE_TOUCHSCREEN */ /** @} */ diff --git a/drivers/touchscreen/XPT2046/touchscreen_lld.mk b/drivers/touchscreen/XPT2046/touchscreen_lld.mk new file mode 100644 index 00000000..39d5caf9 --- /dev/null +++ b/drivers/touchscreen/XPT2046/touchscreen_lld.mk @@ -0,0 +1,6 @@ +# List the required driver. +GFXSRC += $(GFXLIB)/drivers/touchscreen/XPT2046/touchscreen_lld.c + +# Required include directories +GFXINC += $(GFXLIB)/drivers/touchscreen/XPT2046 + diff --git a/drivers/touchpad/ADS7843/touchpad_lld_config.h b/drivers/touchscreen/XPT2046/touchscreen_lld_config.h similarity index 70% rename from drivers/touchpad/ADS7843/touchpad_lld_config.h rename to drivers/touchscreen/XPT2046/touchscreen_lld_config.h index 5ed1981c..1bb8718e 100644 --- a/drivers/touchpad/ADS7843/touchpad_lld_config.h +++ b/drivers/touchscreen/XPT2046/touchscreen_lld_config.h @@ -19,27 +19,27 @@ */ /** - * @file drivers/touchpad/ADS7843/touchpad_lld_config.h - * @brief Touchpad Driver subsystem low level driver. + * @file drivers/touchscreen/XPT2046/touchscreen_lld_config.h + * @brief Touchscreen Driver subsystem low level driver. * - * @addtogroup TOUCHPAD + * @addtogroup TOUCHSCREEN * @{ */ -#ifndef _TOUCHPAD_LLD_CONFIG_H -#define _TOUCHPAD_LLD_CONFIG_H +#ifndef TOUCHSCREEN_LLD_CONFIG_H +#define TOUCHSCREEN_LLD_CONFIG_H -#if GFX_USE_TOUCHPAD /*|| defined(__DOXYGEN__)*/ +#if GFX_USE_TOUCHSCREEN /*|| defined(__DOXYGEN__)*/ /*===========================================================================*/ /* Driver hardware support. */ /*===========================================================================*/ -#define TOUCHPAD_HAS_IRQ TRUE -#define TOUCHPAD_HAS_PRESSURE FALSE +#define TOUCHSCREEN_HAS_IRQ TRUE +#define TOUCHSCREEN_HAS_PRESSURE TRUE -#endif /* GFX_USE_TOUCHPAD */ +#endif /* GFX_USE_TOUCHSCREEN */ -#endif /* _TOUCHPAD_LLD_CONFIG_H */ +#endif /* TOUCHSCREEN_LLD_CONFIG_H */ /** @} */ diff --git a/gfx.mk b/gfx.mk index 070b142c..acf131d9 100644 --- a/gfx.mk +++ b/gfx.mk @@ -6,7 +6,7 @@ endif GFXSRC += $(GFXLIB)/src/gdisp.c \ $(GFXLIB)/src/gdisp_fonts.c \ $(GFXLIB)/src/gwin.c \ - $(GFXLIB)/src/touchpad.c \ + $(GFXLIB)/src/touchscreen.c \ $(GFXLIB)/src/console.c \ $(GFXLIB)/src/graph.c \ diff --git a/include/touchpad.h b/include/touchpad.h deleted file mode 100644 index ec0ef049..00000000 --- a/include/touchpad.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - ChibiOS/GFX - Copyright (C) 2012 - Joel Bodenmann aka Tectu - - 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 . -*/ - -/** - * @file include/touchpad.h - * @brief TOUCHPAD Touchpad Driver subsystem header file. - * - * @addtogroup TOUCHPAD - * @{ - */ - -#ifndef _TOUCHPAD_H -#define _TOUCHPAD_H - -#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__) - -/** - * @brief specifies how many conversions are made for a readout. - * - * @note higher is more accurate, but takes more time - */ -#define CONVERSIONS 3 - -/*===========================================================================*/ -/* Driver constants. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Low Level Driver details and error checks. */ -/*===========================================================================*/ - -/* Include the low level driver information */ -#include "touchpad_lld.h" - -/* For definitions of coord_t, we require gdisp.h */ -#include "gdisp.h" - -/*===========================================================================*/ -/* Type definitions */ -/*===========================================================================*/ - -/** - * @brief Struct used for calibration - */ -typedef struct cal_t { - float ax; - float bx; - float cx; - float ay; - float by; - float cy; -} cal_t; - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif - -void tpInit(const TOUCHPADDriver *tp); -coord_t tpReadX(void); -coord_t tpReadY(void); -void tpCalibrate(void); - -#if TOUCHPAD_HAS_IRQ - bool_t tpIRQ(void); -#endif - -#if TOUCHPAD_HAS_PRESSURE - uint16_t tpReadZ(void); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* GFX_USE_TOUCHPAD */ - -#endif /* _TOUCHPAD_H */ -/** @} */ - diff --git a/include/touchpad_lld.h b/include/touchpad_lld.h deleted file mode 100644 index 20411198..00000000 --- a/include/touchpad_lld.h +++ /dev/null @@ -1,155 +0,0 @@ -/* - ChibiOS/GFX - Copyright (C) 2012 - Joel Bodenmann aka Tectu - - 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 . -*/ - -/** - * @file include/touchpad_lld.h - * @brief TOUCHPAD Driver subsystem low level driver header. - * - * @addtogroup TOUCHPAD - * @{ - */ - -#ifndef _TOUCHPAD_LLD_H -#define _TOUCHPAD_LLD_H - -#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__) - -/*===========================================================================*/ -/* Include the low level driver configuration information */ -/*===========================================================================*/ - -#include "touchpad_lld_config.h" - -/*===========================================================================*/ -/* Error checks. */ -/*===========================================================================*/ - -#ifndef TOUCHPAD_NEED_MULTITHREAD - #define TOUCHPAD_NEED_MULTITHREAD FALSE -#endif - -#ifndef TOUCHPAD_XY_INVERTED - #define TOUCHPAD_XY_INVERTED FALSE -#endif - -#ifndef TOUCHPAD_STORE_CALIBRATION - #define TOUCHPAD_STORE_CALIBRATION FALSE -#endif - -#ifndef TOUCHPAD_VERIFY_CALIBRATION - #define TOUCHPAD_VERIFY_CALIBRATION FALSE -#endif - -#ifndef TOUCHPAD_HAS_IRQ - #define TOUCHPAD_HAS_IRQ FALSE -#endif - -#ifndef TOUCHPAD_HAS_PRESSURE - #define TOUCHPAD_HAS_PRESSURE FALSE -#endif - -#ifndef TOUCHPAD_SPI_PROLOGUE - #define TOUCHPAD_SPI_PROLOGUE() -#endif - -#ifndef TOUCHPAD_SPI_EPILOGUE - #define TOUCHPAD_SPI_EPILOGUE() -#endif - -/*===========================================================================*/ -/* Driver types. */ -/*===========================================================================*/ - -/** - * @brief Structure representing a Touchpad driver. - */ -typedef struct TOUCHPADDriver { - /* - * @brief Pointer to SPI driver. - * @note SPI driver must be enabled in mcuconf.h and halconf.h - */ - SPIDriver *spip; - - /* - * @brief Pointer to the SPI configuration structure. - * @note The lowest possible speed ~ 1-2MHz is to be used, otherwise - * will result in a lot of noise - */ - const SPIConfig *spicfg; - - /* - * @brief Touchscreen controller TPIRQ pin GPIO port - */ - ioportid_t tpIRQPort; - - /* - * @brief Touchscreen controller TPIRQ GPIO pin - * @note The interface is polled as of now, interrupt support is - * to be implemented in the future. - */ - ioportmask_t tpIRQPin; - - /* - * @brief Initialize the SPI with the configuration struct given or not - * If TRUE, spiStart is called by the init, otherwise not - * @note This is provided in such a case when SPI port is being shared - * across multiple peripherals, so not to disturb the SPI bus. - * You can use TOUCHPAD_SPI_PROLOGUE() and TOUCHPAD_SPI_EPILOGUE() - * macros to change the SPI configuration or speed before and - * after using the touchpad. An example case would be sharing the - * bus with a fast flash memory chip. - */ - bool_t direct_init; -} TOUCHPADDriver; - - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - /* Core functions */ - void tp_lld_init(const TOUCHPADDriver *tp); - - uint16_t tp_lld_read_value(uint8_t cmd); - uint16_t tp_lld_read_x(void); - uint16_t tp_lld_read_y(void); - - #if TOUCHPAD_HAS_IRQ - uint8_t tp_lld_irq(void); - #endif - - #if TOUCHPAD_HAS_PRESSURE - uint16_t tp_lld_read_z(void); - #endif - -#ifdef __cplusplus -} -#endif - -#endif /* GFX_USE_TOUCHPAD */ - -#endif /* _TOUCHPAD_LLD_H */ -/** @} */ - diff --git a/releases.txt b/releases.txt index b13bfed2..be897571 100644 --- a/releases.txt +++ b/releases.txt @@ -6,6 +6,8 @@ current stable: 1.4 *** changes after 1.4 *** +FEATURE: Added three point calibration +FIX: Touchpad renamed into Touchscreen *** changes after 1.3 *** diff --git a/src/touchpad.c b/src/touchpad.c deleted file mode 100644 index f06365f7..00000000 --- a/src/touchpad.c +++ /dev/null @@ -1,374 +0,0 @@ -/* ChibiOS/GFX - Copyright (C) 2012 - Joel Bodenmann aka Tectu - - 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 . -*/ - -/** - * @file src/touchpad.c - * @brief Touchpad Driver code. - * - * @addtogroup TOUCHPAD - * @{ - */ - -#include "ch.h" -#include "hal.h" -#include "gdisp.h" -#include "touchpad.h" - -#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__) - -#if TOUCHPAD_STORE_CALIBRATION -extern void tp_store_calibration_lld(struct cal_t *cal); -extern struct cal_t *tp_restore_calibration_lld(void); -#endif - -/*===========================================================================*/ -/* Driver local definitions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver exported variables. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Driver local variables. */ -/*===========================================================================*/ -static struct cal_t *cal; - -/*===========================================================================*/ -/* Driver local functions. */ -/*===========================================================================*/ - -static coord_t _tpReadRealX(void) { - int32_t results = 0; - int16_t i; - coord_t x; - - for(i = 0; i < CONVERSIONS; i++) { - results += tp_lld_read_x(); - } - - /* Take the average of the readings */ - x = results / CONVERSIONS; - - return x; -} - -static coord_t _tpReadRealY(void) { - int32_t results = 0; - int16_t i; - coord_t y; - - for(i = 0; i < CONVERSIONS; i++) { - results += tp_lld_read_y(); - } - - /* Take the average of the readings */ - y = results / CONVERSIONS; - - return y; -} - -static void _tpDrawCross(uint16_t x, uint16_t y) { - gdispDrawLine(x-15, y, x-2, y, 0xffff); - gdispDrawLine(x+2, y, x+15, y, 0xffff); - gdispDrawLine(x, y-15, x, y-2, 0xffff); - gdispDrawLine(x, y+2, x, y+15, 0xffff); - - gdispDrawLine(x-15, y+15, x-7, y+15, RGB565CONVERT(184,158,131)); - gdispDrawLine(x-15, y+7, x-15, y+15, RGB565CONVERT(184,158,131)); - - gdispDrawLine(x-15, y-15, x-7, y-15, RGB565CONVERT(184,158,131)); - gdispDrawLine(x-15, y-7, x-15, y-15, RGB565CONVERT(184,158,131)); - - gdispDrawLine(x+7, y+15, x+15, y+15, RGB565CONVERT(184,158,131)); - gdispDrawLine(x+15, y+7, x+15, y+15, RGB565CONVERT(184,158,131)); - - gdispDrawLine(x+7, y-15, x+15, y-15, RGB565CONVERT(184,158,131)); - gdispDrawLine(x+15, y-15, x+15, y-7, RGB565CONVERT(184,158,131)); -} - -static void _tpTransform(coord_t *x, coord_t *y) { - *x = (coord_t) (cal->ax * (*x) + cal->bx * (*y) + cal->cx); - *y = (coord_t) (cal->ay * (*x) + cal->by * (*y) + cal->cy); -} - -static void _tpDo3PointCalibration(const coord_t (*cross)[2], coord_t (*points)[2], cal_t *c) { - float dx, dx0, dx1, dx2, dy0, dy1, dy2; - - /* Compute all the required determinants */ - dx = ((float)(points[0][0] - points[2][0])) * ((float)(points[1][1] - points[2][1])) - - ((float)(points[1][0] - points[2][0])) * ((float)(points[0][1] - points[2][1])); - - dx0 = ((float)(cross[0][0] - cross[2][0])) * ((float)(points[1][1] - points[2][1])) - - ((float)(cross[1][0] - cross[2][0])) * ((float)(points[0][1] - points[2][1])); - - dx1 = ((float)(points[0][0] - points[2][0])) * ((float)(cross[1][0] - cross[2][0])) - - ((float)(points[1][0] - points[2][0])) * ((float)(cross[0][0] - cross[2][0])); - - dx2 = cross[0][0] * ((float)points[1][0] * (float)points[2][1] - (float)points[2][0] * (float)points[1][1]) - - cross[1][0] * ((float)points[0][0] * (float)points[2][1] - (float)points[2][0] * (float)points[0][1]) + - cross[2][0] * ((float)points[0][0] * (float)points[1][1] - (float)points[1][0] * (float)points[0][1]); - - dy0 = ((float)(cross[0][1] - cross[2][1])) * ((float)(points[1][1] - points[2][1])) - - ((float)(cross[1][1] - cross[2][1])) * ((float)(points[0][1] - points[2][1])); - - dy1 = ((float)(points[0][0] - points[2][0])) * ((float)(cross[1][1] - cross[2][1])) - - ((float)(points[1][0] - points[2][0])) * ((float)(cross[0][1] - cross[2][1])); - - dy2 = cross[0][1] * ((float)points[1][0] * (float)points[2][1] - (float)points[2][0] * (float)points[1][1]) - - cross[1][1] * ((float)points[0][0] * (float)points[2][1] - (float)points[2][0] * (float)points[0][1]) + - cross[2][1] * ((float)points[0][0] * (float)points[1][1] - (float)points[1][0] * (float)points[0][1]); - - /* Now, calculate all the required coefficients */ - c->ax = dx0 / dx; - c->bx = dx1 / dx; - c->cx = dx2 / dx; - - c->ay = dy0 / dx; - c->by = dy1 / dx; - c->cy = dy2 / dx; -} - -/*===========================================================================*/ -/* Driver exported functions. */ -/*===========================================================================*/ - -/** - * @brief Touchpad Driver initialization. - * @note This function is NOT currently implicitly invoked by @p halInit(). - * It must be called manually. - * - * @param[in] tp The touchpad driver struct - * - * @api - */ -void tpInit(const TOUCHPADDriver *tp) { - cal = (struct cal_t*)chHeapAlloc(NULL, sizeof(struct cal_t)); - if(cal == NULL) - return; - - /* Initialise Mutex */ - //MUTEX_INIT - - /* Initialise driver */ - //MUTEX_ENTER - tp_lld_init(tp); - //MUTEX_EXIT - - #if TOUCHPAD_STORE_CALIBRATION - cal = tp_restore_calibration_lld(); - if(cal == NULL) { - cal = (struct cal_t*)chHeapAlloc(NULL, sizeof(struct cal_t)); - tpCalibrate(); - } - #endif -} - -/** - * @brief Get the X-Coordinate, relative to screen zero point. - * - * @return The X position in pixels. - * - * @api - */ -coord_t tpReadX(void) { - coord_t x, y; - -#if TOUCHPAD_XY_INVERTED == TRUE - x = _tpReadRealY(); - y = _tpReadRealX(); -#else - x = _tpReadRealX(); - y = _tpReadRealY(); -#endif - - _tpTransform(&x, &y); - - switch(gdispGetOrientation()) { - case GDISP_ROTATE_0: - return x; - case GDISP_ROTATE_90: - return y; - case GDISP_ROTATE_180: - return GDISP_SCREEN_WIDTH - x - 1; - case GDISP_ROTATE_270: - return GDISP_SCREEN_HEIGHT - y - 1; - } - - return 0; -} - -/** - * @brief Get the X-Coordinate, relative to screen zero point. - * - * @return The Y position in pixels. - * - * @api - */ -coord_t tpReadY(void) { - coord_t x, y; - -#if TOUCHPAD_XY_INVERTED == TRUE - x = _tpReadRealY(); - y = _tpReadRealX(); -#else - x = _tpReadRealX(); - y = _tpReadRealY(); -#endif - - _tpTransform(&x, &y); - - switch(gdispGetOrientation()) { - case GDISP_ROTATE_0: - return y; - case GDISP_ROTATE_90: - return GDISP_SCREEN_WIDTH - x - 1; - case GDISP_ROTATE_180: - return GDISP_SCREEN_HEIGHT - y - 1; - case GDISP_ROTATE_270: - return x; - } - - return 0; -} - -/** - * @brief Get the pressure. - * - * @return The pressure. - * - * @api - */ -#if TOUCHPAD_HAS_PRESSURE || defined(__DOXYGEN__) - uint16_t tpReadZ(void) { - /* ToDo */ - return (tp_lld_read_z()); - } -#endif - -/** - * @brief Returns if touchpad is pressed or not - * - * @return TRUE if pressed, FALSE otherwise - * - * @api - */ -#if TOUCHPAD_HAS_IRQ || defined(__DOXYGEN__) - bool_t tpIRQ(void) { - return tp_lld_irq(); - } -#endif - -/* Define maximum no. of times to sample the calibration point */ -#define MAX_CAL_SAMPLES 10 - -/** - * @brief Function to calibrate touchscreen - * @details This function interactively performs calibration of the touchscreen - * using 3-point calibration algorithm. Optionally, it also verifies - * the accuracy of the calibration coefficients obtained if the symbol - * TOUCHPAD_VERIFY_CALIBRATION is defined in the configuration. - * - * @api - */ -void tpCalibrate(void) { - const uint16_t height = gdispGetHeight(); - const uint16_t width = gdispGetWidth(); - const coord_t cross[][2] = {{(width / 4), (height / 4)}, - {(width - (width / 4)) , (height / 4)}, - {(width - (width / 4)) , (height - (height / 4))}, - {(width / 2), (height / 2)}}; /* Check point */ - coord_t points[4][2]; - int32_t px, py; - uint8_t i, j; - - gdispSetOrientation(GDISP_ROTATE_0); - gdispClear(Blue); - - gdispFillStringBox(0, 5, gdispGetWidth(), 30, "Calibration", &fontUI2Double, White, Blue, justifyCenter); - -#if TOUCHPAD_VERIFY_CALIBRATION -calibrate: - for(i = 0; i < 4; i++) { -#else - for(i = 0; i < 3; i++) { -#endif - _tpDrawCross(cross[i][0], cross[i][1]); - - while(!tpIRQ()) - chThdSleepMilliseconds(2); /* Be nice to other threads*/ - - chThdSleepMilliseconds(20); /* Allow screen to settle */ - - /* Take a little more samples per point and their average - * for precise calibration */ - px = py = 0; - - j = 0; - while (j < MAX_CAL_SAMPLES) { - if (tpIRQ()) { - /* We have valid pointer data */ - px += _tpReadRealX(); - py += _tpReadRealY(); - - j++; - } - } - - points[i][0] = px / j; - points[i][1] = py / j; - - chThdSleepMilliseconds(100); - - while(tpIRQ()) - chThdSleepMilliseconds(2); /* Be nice to other threads*/ - - gdispFillArea(cross[i][0] - 15, cross[i][1] - 15, 42, 42, Blue); - } - - /* Apply 3 point calibration algorithm */ - _tpDo3PointCalibration(cross, points, cal); - -#if TOUCHPAD_VERIFY_CALIBRATION - /* Verification of correctness of calibration (optional) : - * See if the 4th point (Middle of the screen) coincides with the calibrated - * result. If point is with +/- 2 pixel margin, then successful calibration - * Else, start from the beginning. - */ - - /* Transform the co-ordinates */ - _tpTransform(&points[3][0], &points[3][1]); - - /* Calculate the delta */ - px = (points[3][0] - cross[3][0]) * (points[3][0] - cross[3][0]) + - (points[3][1] - cross[3][1]) * (points[3][1] - cross[3][1]); - - if (px > 4) - goto calibrate; -#endif - - /* If enabled, serialize the calibration values for storage */ - #if TOUCHPAD_STORE_CALIBRATION - tp_store_calibration_lld(cal); - #endif -} - -#endif /* GFX_USE_TOUCHPAD */ -/** @} */ - From 8f31c5e632df70b6b0a4871680be0c436993a41c Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 10 Nov 2012 00:07:37 +0100 Subject: [PATCH 32/33] untracked template files since out of date --- templates/gdispXXX/gdisp_lld.c | 561 -------------------- templates/gdispXXX/gdisp_lld.mk | 5 - templates/gdispXXX/gdisp_lld_config.h | 70 --- templates/gdispXXX/readme.txt | 35 -- templates/readme.txt | 9 - templates/touchpadXXX/touchpad_lld.c | 149 ------ templates/touchpadXXX/touchpad_lld.mk | 6 - templates/touchpadXXX/touchpad_lld_config.h | 45 -- 8 files changed, 880 deletions(-) delete mode 100644 templates/gdispXXX/gdisp_lld.c delete mode 100644 templates/gdispXXX/gdisp_lld.mk delete mode 100644 templates/gdispXXX/gdisp_lld_config.h delete mode 100644 templates/gdispXXX/readme.txt delete mode 100644 templates/readme.txt delete mode 100644 templates/touchpadXXX/touchpad_lld.c delete mode 100644 templates/touchpadXXX/touchpad_lld.mk delete mode 100644 templates/touchpadXXX/touchpad_lld_config.h diff --git a/templates/gdispXXX/gdisp_lld.c b/templates/gdispXXX/gdisp_lld.c deleted file mode 100644 index 1b88a338..00000000 --- a/templates/gdispXXX/gdisp_lld.c +++ /dev/null @@ -1,561 +0,0 @@ -/* - ChibiOS/GFX - Copyright (C) 2012 - Joel Bodenmann aka Tectu - - 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 . -*/ - -/** - * @file templates/gdispXXX/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 */ -/** @} */ - diff --git a/templates/gdispXXX/gdisp_lld.mk b/templates/gdispXXX/gdisp_lld.mk deleted file mode 100644 index 434d5366..00000000 --- a/templates/gdispXXX/gdisp_lld.mk +++ /dev/null @@ -1,5 +0,0 @@ -# List the required driver. -GFXSRC += $(GFXLIB)/drivers/gdisp/gdispYOURDEVICE/gdisp_lld.c - -# Required include directories -GFXINC += $(GFXLIB)/drivers/gdisp/gdispYOURDEVICE diff --git a/templates/gdispXXX/gdisp_lld_config.h b/templates/gdispXXX/gdisp_lld_config.h deleted file mode 100644 index cde3581d..00000000 --- a/templates/gdispXXX/gdisp_lld_config.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - ChibiOS/GFX - Copyright (C) 2012 - Joel Bodenmann aka Tectu - - 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 . -*/ - -/** - * @file templates/gdispXXX/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 */ -/** @} */ - diff --git a/templates/gdispXXX/readme.txt b/templates/gdispXXX/readme.txt deleted file mode 100644 index f173764d..00000000 --- a/templates/gdispXXX/readme.txt +++ /dev/null @@ -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 diff --git a/templates/readme.txt b/templates/readme.txt deleted file mode 100644 index ee2a205b..00000000 --- a/templates/readme.txt +++ /dev/null @@ -1,9 +0,0 @@ -The following low level driver templates are available: - -GDISP: - gdispXXX - Generalised GDISP driver - -TOUCHPAD: - touchpadXXX - Generalised TOUCHPAD driver - - diff --git a/templates/touchpadXXX/touchpad_lld.c b/templates/touchpadXXX/touchpad_lld.c deleted file mode 100644 index c2d898f4..00000000 --- a/templates/touchpadXXX/touchpad_lld.c +++ /dev/null @@ -1,149 +0,0 @@ -/* - ChibiOS/GFX - Copyright (C) 2012 - Joel Bodenmann aka Tectu - - 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 . -*/ - -/** - * @file templates/touchpadXXX/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. */ -/*===========================================================================*/ - - TOUCHPADDriver Touchpad; - -/*===========================================================================*/ -/* 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 TOCHPAD_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 */ -/** @} */ - diff --git a/templates/touchpadXXX/touchpad_lld.mk b/templates/touchpadXXX/touchpad_lld.mk deleted file mode 100644 index 524a407b..00000000 --- a/templates/touchpadXXX/touchpad_lld.mk +++ /dev/null @@ -1,6 +0,0 @@ -# List the required driver. -GFXSRC += $(GFXLIB)/drivers/touchpad/touchpadYOURDEVICE/touchpad_lld.c - -# Required include directories -GFXINC += $(GFXLIB)/drivers/touchpad/touchpadYOURDEVICE - diff --git a/templates/touchpadXXX/touchpad_lld_config.h b/templates/touchpadXXX/touchpad_lld_config.h deleted file mode 100644 index eb5ccd80..00000000 --- a/templates/touchpadXXX/touchpad_lld_config.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - ChibiOS/GFX - Copyright (C) 2012 - Joel Bodenmann aka Tectu - - 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 . -*/ - -/** - * @file templates/touchpadXXX/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 */ -/** @} */ - From affd9792ff42fab8f376bd2c87a71b25fd52baf7 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 10 Nov 2012 00:13:42 +0100 Subject: [PATCH 33/33] added touchscreen files --- docs/src/touchscreen.dox | 26 +++ include/touchscreen.h | 100 ++++++++++ include/touchscreen_lld.h | 155 ++++++++++++++++ src/touchscreen.c | 374 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 655 insertions(+) create mode 100644 docs/src/touchscreen.dox create mode 100644 include/touchscreen.h create mode 100644 include/touchscreen_lld.h create mode 100644 src/touchscreen.c diff --git a/docs/src/touchscreen.dox b/docs/src/touchscreen.dox new file mode 100644 index 00000000..0a1819b9 --- /dev/null +++ b/docs/src/touchscreen.dox @@ -0,0 +1,26 @@ +/* + ChibiOS/GFX - Copyright (C) 2012 + Joel Bodenmann aka Tectu + + 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 . +*/ + +/** + * @addtogroup TOUCHSCREEN + * @details The TOUCHSCREEN module provides high level abstraction to interface + * touchscreens. + */ + diff --git a/include/touchscreen.h b/include/touchscreen.h new file mode 100644 index 00000000..4d48e38d --- /dev/null +++ b/include/touchscreen.h @@ -0,0 +1,100 @@ +/* + ChibiOS/GFX - Copyright (C) 2012 + Joel Bodenmann aka Tectu + + 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 . +*/ + +/** + * @file include/touchscreen.h + * @brief TOUCHSCREEN Touchscreen driver subsystem header file. + * + * @addtogroup TOUCHSCREEN + * @{ + */ + +#ifndef TOUCHSCREEN_H +#define TOUCHSCREEN_H + +#if GFX_USE_TOUCHSCREEN || defined(__DOXYGEN__) + +/** + * @brief specifies how many conversions are made for a readout. + * + * @note higher is more accurate, but takes more time + */ +#define CONVERSIONS 3 + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver details and error checks. */ +/*===========================================================================*/ + +/* Include the low level driver information */ +#include "touchscreen_lld.h" + +/* For definitions of coord_t, we require gdisp.h */ +#include "gdisp.h" + +/*===========================================================================*/ +/* Type definitions */ +/*===========================================================================*/ + +/** + * @brief Struct used for calibration + */ +typedef struct cal_t { + float ax; + float bx; + float cx; + float ay; + float by; + float cy; +} cal_t; + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + +void tsInit(const TouchscreenDriver *ts); +coord_t tsReadX(void); +coord_t tsReadY(void); +void tsCalibrate(void); + +#if TOUCHSCREEN_HAS_IRQ + bool_t tsIRQ(void); +#endif + +#if TOUCHSCREEN_HAS_PRESSURE + uint16_t tsReadZ(void); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* GFX_USE_TOUCHSCREEN */ + +#endif /* TOUCHSCREEN_H */ +/** @} */ + diff --git a/include/touchscreen_lld.h b/include/touchscreen_lld.h new file mode 100644 index 00000000..53c66b53 --- /dev/null +++ b/include/touchscreen_lld.h @@ -0,0 +1,155 @@ +/* + ChibiOS/GFX - Copyright (C) 2012 + Joel Bodenmann aka Tectu + + 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 . +*/ + +/** + * @file include/touchscreen_lld.h + * @brief TOUCHSCREEN Driver subsystem low level driver header. + * + * @addtogroup TOUCHSCREEN + * @{ + */ + +#ifndef TOUCHSCREEN_LLD_H +#define TOUCHSCREEN_LLD_H + +#if GFX_USE_TOUCHSCREEN || defined(__DOXYGEN__) + +/*===========================================================================*/ +/* Include the low level driver configuration information */ +/*===========================================================================*/ + +#include "touchscreen_lld_config.h" + +/*===========================================================================*/ +/* Error checks. */ +/*===========================================================================*/ + +#ifndef TOUCHSCREEN_NEED_MULTITHREAD + #define TOUCHSCREEN_NEED_MULTITHREAD FALSE +#endif + +#ifndef TOUCHSCREEN_XY_INVERTED + #define TOUCHSCREEN_XY_INVERTED FALSE +#endif + +#ifndef TOUCHSCREEN_STORE_CALIBRATION + #define TOUCHSCREEN_STORE_CALIBRATION FALSE +#endif + +#ifndef TOUCHSCREEN_VERIFY_CALIBRATION + #define TOUCHSCREEN_VERIFY_CALIBRATION FALSE +#endif + +#ifndef TOUCHSCREEN_HAS_IRQ + #define TOUCHSCREEN_HAS_IRQ FALSE +#endif + +#ifndef TOUCHSCREEN_HAS_PRESSURE + #define TOUCHSCREEN_HAS_PRESSURE FALSE +#endif + +#ifndef TOUCHSCREEN_SPI_PROLOGUE + #define TOUCHSCREEN_SPI_PROLOGUE() +#endif + +#ifndef TOUCHSCREEN_SPI_EPILOGUE + #define TOUCHSCREEN_SPI_EPILOGUE() +#endif + +/*===========================================================================*/ +/* Driver types. */ +/*===========================================================================*/ + +/** + * @brief Structure representing a touchscreen driver. + */ +typedef struct TouchscreenDriver { + /* + * @brief Pointer to SPI driver. + * @note SPI driver must be enabled in mcuconf.h and halconf.h + */ + SPIDriver *spip; + + /* + * @brief Pointer to the SPI configuration structure. + * @note The lowest possible speed ~ 1-2MHz is to be used, otherwise + * will result in a lot of noise + */ + const SPIConfig *spicfg; + + /* + * @brief Touchscreen controller TPIRQ pin GPIO port + */ + ioportid_t tsIRQPort; + + /* + * @brief Touchscreen controller TPIRQ GPIO pin + * @note The interface is polled as of now, interrupt support is + * to be implemented in the future. + */ + ioportmask_t tsIRQPin; + + /* + * @brief Initialize the SPI with the configuration struct given or not + * If TRUE, spiStart is called by the init, otherwise not + * @note This is provided in such a case when SPI port is being shared + * across multiple peripherals, so not to disturb the SPI bus. + * You can use TOUCHSCREEN_SPI_PROLOGUE() and TOUCHSCREEN_SPI_EPILOGUE() + * macros to change the SPI configuration or speed before and + * after using the touchpad. An example case would be sharing the + * bus with a fast flash memory chip. + */ + bool_t direct_init; +} TouchscreenDriver; + + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + /* Core functions */ + void ts_lld_init(const TouchscreenDriver *ts); + + uint16_t ts_lld_read_value(uint8_t cmd); + uint16_t ts_lld_read_x(void); + uint16_t ts_lld_read_y(void); + + #if TOUCHSCREEN_HAS_IRQ + uint8_t ts_lld_irq(void); + #endif + + #if TOUCHSCREEN_HAS_PRESSURE + uint16_t ts_lld_read_z(void); + #endif + +#ifdef __cplusplus +} +#endif + +#endif /* GFX_USE_TOUCHSCREEN */ + +#endif /* _TOUCHSCREEN_LLD_H */ +/** @} */ + diff --git a/src/touchscreen.c b/src/touchscreen.c new file mode 100644 index 00000000..e226eaea --- /dev/null +++ b/src/touchscreen.c @@ -0,0 +1,374 @@ +/* ChibiOS/GFX - Copyright (C) 2012 + Joel Bodenmann aka Tectu + + 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 . +*/ + +/** + * @file src/touchscreen.c + * @brief Touchscreen Driver code. + * + * @addtogroup TOUCHSCREEN + * @{ + */ + +#include "ch.h" +#include "hal.h" +#include "gdisp.h" +#include "touchscreen.h" + +#if GFX_USE_TOUCHSCREEN || defined(__DOXYGEN__) + +#if TOUCHSCREEN_STORE_CALIBRATION +extern void ts_store_calibration_lld(struct cal_t *cal); +extern struct cal_t *ts_restore_calibration_lld(void); +#endif + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local variables. */ +/*===========================================================================*/ +static struct cal_t *cal; + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +static coord_t _tsReadRealX(void) { + int32_t results = 0; + int16_t i; + coord_t x; + + for(i = 0; i < CONVERSIONS; i++) { + results += ts_lld_read_x(); + } + + /* Take the average of the readings */ + x = results / CONVERSIONS; + + return x; +} + +static coord_t _tsReadRealY(void) { + int32_t results = 0; + int16_t i; + coord_t y; + + for(i = 0; i < CONVERSIONS; i++) { + results += ts_lld_read_y(); + } + + /* Take the average of the readings */ + y = results / CONVERSIONS; + + return y; +} + +static void _tsDrawCross(uint16_t x, uint16_t y) { + gdispDrawLine(x-15, y, x-2, y, 0xffff); + gdispDrawLine(x+2, y, x+15, y, 0xffff); + gdispDrawLine(x, y-15, x, y-2, 0xffff); + gdispDrawLine(x, y+2, x, y+15, 0xffff); + + gdispDrawLine(x-15, y+15, x-7, y+15, RGB565CONVERT(184,158,131)); + gdispDrawLine(x-15, y+7, x-15, y+15, RGB565CONVERT(184,158,131)); + + gdispDrawLine(x-15, y-15, x-7, y-15, RGB565CONVERT(184,158,131)); + gdispDrawLine(x-15, y-7, x-15, y-15, RGB565CONVERT(184,158,131)); + + gdispDrawLine(x+7, y+15, x+15, y+15, RGB565CONVERT(184,158,131)); + gdispDrawLine(x+15, y+7, x+15, y+15, RGB565CONVERT(184,158,131)); + + gdispDrawLine(x+7, y-15, x+15, y-15, RGB565CONVERT(184,158,131)); + gdispDrawLine(x+15, y-15, x+15, y-7, RGB565CONVERT(184,158,131)); +} + +static void _tsTransform(coord_t *x, coord_t *y) { + *x = (coord_t) (cal->ax * (*x) + cal->bx * (*y) + cal->cx); + *y = (coord_t) (cal->ay * (*x) + cal->by * (*y) + cal->cy); +} + +static void _tsDo3PointCalibration(const coord_t (*cross)[2], coord_t (*points)[2], cal_t *c) { + float dx, dx0, dx1, dx2, dy0, dy1, dy2; + + /* Compute all the required determinants */ + dx = ((float)(points[0][0] - points[2][0])) * ((float)(points[1][1] - points[2][1])) + - ((float)(points[1][0] - points[2][0])) * ((float)(points[0][1] - points[2][1])); + + dx0 = ((float)(cross[0][0] - cross[2][0])) * ((float)(points[1][1] - points[2][1])) + - ((float)(cross[1][0] - cross[2][0])) * ((float)(points[0][1] - points[2][1])); + + dx1 = ((float)(points[0][0] - points[2][0])) * ((float)(cross[1][0] - cross[2][0])) + - ((float)(points[1][0] - points[2][0])) * ((float)(cross[0][0] - cross[2][0])); + + dx2 = cross[0][0] * ((float)points[1][0] * (float)points[2][1] - (float)points[2][0] * (float)points[1][1]) - + cross[1][0] * ((float)points[0][0] * (float)points[2][1] - (float)points[2][0] * (float)points[0][1]) + + cross[2][0] * ((float)points[0][0] * (float)points[1][1] - (float)points[1][0] * (float)points[0][1]); + + dy0 = ((float)(cross[0][1] - cross[2][1])) * ((float)(points[1][1] - points[2][1])) + - ((float)(cross[1][1] - cross[2][1])) * ((float)(points[0][1] - points[2][1])); + + dy1 = ((float)(points[0][0] - points[2][0])) * ((float)(cross[1][1] - cross[2][1])) + - ((float)(points[1][0] - points[2][0])) * ((float)(cross[0][1] - cross[2][1])); + + dy2 = cross[0][1] * ((float)points[1][0] * (float)points[2][1] - (float)points[2][0] * (float)points[1][1]) - + cross[1][1] * ((float)points[0][0] * (float)points[2][1] - (float)points[2][0] * (float)points[0][1]) + + cross[2][1] * ((float)points[0][0] * (float)points[1][1] - (float)points[1][0] * (float)points[0][1]); + + /* Now, calculate all the required coefficients */ + c->ax = dx0 / dx; + c->bx = dx1 / dx; + c->cx = dx2 / dx; + + c->ay = dy0 / dx; + c->by = dy1 / dx; + c->cy = dy2 / dx; +} + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief Touchscreen Driver initialization. + * @note This function is NOT currently implicitly invoked by @p halInit(). + * It must be called manually. + * + * @param[in] ts The touchscreen driver struct + * + * @api + */ +void tsInit(const TouchscreenDriver *ts) { + cal = (struct cal_t*)chHeapAlloc(NULL, sizeof(struct cal_t)); + if(cal == NULL) + return; + + /* Initialise Mutex */ + //MUTEX_INIT + + /* Initialise driver */ + //MUTEX_ENTER + ts_lld_init(ts); + //MUTEX_EXIT + + #if TOUCHSCREEN_STORE_CALIBRATION + cal = ts_restore_calibration_lld(); + if(cal == NULL) { + cal = (struct cal_t*)chHeapAlloc(NULL, sizeof(struct cal_t)); + tsCalibrate(); + } + #endif +} + +/** + * @brief Get the X-Coordinate, relative to screen zero point. + * + * @return The X position in pixels. + * + * @api + */ +coord_t tsReadX(void) { + coord_t x, y; + +#if TOUCHSCREEN_XY_INVERTED == TRUE + x = _tsReadRealY(); + y = _tsReadRealX(); +#else + x = _tsReadRealX(); + y = _tsReadRealY(); +#endif + + _tsTransform(&x, &y); + + switch(gdispGetOrientation()) { + case GDISP_ROTATE_0: + return x; + case GDISP_ROTATE_90: + return y; + case GDISP_ROTATE_180: + return GDISP_SCREEN_WIDTH - x - 1; + case GDISP_ROTATE_270: + return GDISP_SCREEN_HEIGHT - y - 1; + } + + return 0; +} + +/** + * @brief Get the X-Coordinate, relative to screen zero point. + * + * @return The Y position in pixels. + * + * @api + */ +coord_t tsReadY(void) { + coord_t x, y; + +#if TOUCHSCREEN_XY_INVERTED == TRUE + x = _tsReadRealY(); + y = _tsReadRealX(); +#else + x = _tsReadRealX(); + y = _tsReadRealY(); +#endif + + _tsTransform(&x, &y); + + switch(gdispGetOrientation()) { + case GDISP_ROTATE_0: + return y; + case GDISP_ROTATE_90: + return GDISP_SCREEN_WIDTH - x - 1; + case GDISP_ROTATE_180: + return GDISP_SCREEN_HEIGHT - y - 1; + case GDISP_ROTATE_270: + return x; + } + + return 0; +} + +/** + * @brief Get the pressure. + * + * @return The pressure. + * + * @api + */ +#if TOUCHSCREEN_HAS_PRESSURE || defined(__DOXYGEN__) + uint16_t tsReadZ(void) { + /* ToDo */ + return (ts_lld_read_z()); + } +#endif + +/** + * @brief Returns if touchscreen is pressed or not + * + * @return TRUE if pressed, FALSE otherwise + * + * @api + */ +#if TOUCHSCREEN_HAS_IRQ || defined(__DOXYGEN__) + bool_t tsIRQ(void) { + return ts_lld_irq(); + } +#endif + +/* Define maximum no. of times to sample the calibration point */ +#define MAX_CAL_SAMPLES 10 + +/** + * @brief Function to calibrate touchscreen + * @details This function interactively performs calibration of the touchscreen + * using 3-point calibration algorithm. Optionally, it also verifies + * the accuracy of the calibration coefficients obtained if the symbol + * TOUCHSCREEN_VERIFY_CALIBRATION is defined in the configuration. + * + * @api + */ +void tsCalibrate(void) { + const uint16_t height = gdispGetHeight(); + const uint16_t width = gdispGetWidth(); + const coord_t cross[][2] = {{(width / 4), (height / 4)}, + {(width - (width / 4)) , (height / 4)}, + {(width - (width / 4)) , (height - (height / 4))}, + {(width / 2), (height / 2)}}; /* Check point */ + coord_t points[4][2]; + int32_t px, py; + uint8_t i, j; + + gdispSetOrientation(GDISP_ROTATE_0); + gdispClear(Blue); + + gdispFillStringBox(0, 5, gdispGetWidth(), 30, "Calibration", &fontUI2Double, White, Blue, justifyCenter); + +#if TOUCHSCREEN_VERIFY_CALIBRATION +calibrate: + for(i = 0; i < 4; i++) { +#else + for(i = 0; i < 3; i++) { +#endif + _tsDrawCross(cross[i][0], cross[i][1]); + + while(!tsIRQ()) + chThdSleepMilliseconds(2); /* Be nice to other threads*/ + + chThdSleepMilliseconds(20); /* Allow screen to settle */ + + /* Take a little more samples per point and their average + * for precise calibration */ + px = py = 0; + + j = 0; + while (j < MAX_CAL_SAMPLES) { + if (tsIRQ()) { + /* We have valid pointer data */ + px += _tsReadRealX(); + py += _tsReadRealY(); + + j++; + } + } + + points[i][0] = px / j; + points[i][1] = py / j; + + chThdSleepMilliseconds(100); + + while(tsIRQ()) + chThdSleepMilliseconds(2); /* Be nice to other threads*/ + + gdispFillArea(cross[i][0] - 15, cross[i][1] - 15, 42, 42, Blue); + } + + /* Apply 3 point calibration algorithm */ + _tsDo3PointCalibration(cross, points, cal); + +#if TOUCHSCREEN_VERIFY_CALIBRATION + /* Verification of correctness of calibration (optional) : + * See if the 4th point (Middle of the screen) coincides with the calibrated + * result. If point is with +/- 2 pixel margin, then successful calibration + * Else, start from the beginning. + */ + + /* Transform the co-ordinates */ + _tpTransform(&points[3][0], &points[3][1]); + + /* Calculate the delta */ + px = (points[3][0] - cross[3][0]) * (points[3][0] - cross[3][0]) + + (points[3][1] - cross[3][1]) * (points[3][1] - cross[3][1]); + + if(px > 4) + goto calibrate; +#endif + + /* If enabled, serialize the calibration values for storage */ + #if TOUCHSCREEN_STORE_CALIBRATION + ts_store_calibration_lld(cal); + #endif +} + +#endif /* GFX_USE_TOUCHSCREEN */ +/** @} */ +