diff options
author | Andrew Hannam <andrewh@inmarket.com.au> | 2012-11-11 19:03:30 +1000 |
---|---|---|
committer | Andrew Hannam <andrewh@inmarket.com.au> | 2012-11-11 19:03:30 +1000 |
commit | 8b51bcf46f97d7cd752f3b3d9b52b9f39051f60f (patch) | |
tree | a1058cc5b7a3331b57e0bf57fe171d44dca5ff48 /old | |
parent | e28a4dbd0e5306f40f2e778025fd0e4888d9d0ba (diff) | |
download | uGFX-8b51bcf46f97d7cd752f3b3d9b52b9f39051f60f.tar.gz uGFX-8b51bcf46f97d7cd752f3b3d9b52b9f39051f60f.tar.bz2 uGFX-8b51bcf46f97d7cd752f3b3d9b52b9f39051f60f.zip |
Touch Fixes. Deprecate Console
Touch:
- Move defines that may be altered by the touch config file to the lld
header file.
- Move the definition of the Touch driver structure to the lld config
file.
- Changed CONVERSIONS macro to TOUCHSCREEN_CONVERSIONS
- Replaced references to GDISP_SCREEN_WIDTH with gdispGetWidth
- Renamed TOUCHSCREEN_HAS_IRQ to TOUCHSCREEN_HAS_PRESSED to match new
function name.
- Added prototypes for calibration storage functions to
touchscreen_lld.h so that either the lld driver or the application can
define the function.
Console:
-Deprecated into "old" directory. Functionality replaced by gwin.
Diffstat (limited to 'old')
-rw-r--r-- | old/console.c | 216 | ||||
-rw-r--r-- | old/console.h | 93 |
2 files changed, 309 insertions, 0 deletions
diff --git a/old/console.c b/old/console.c new file mode 100644 index 00000000..55549fd1 --- /dev/null +++ b/old/console.c @@ -0,0 +1,216 @@ +/*
+ ChibiOS/GFX - Copyright (C) 2012
+ Joel Bodenmann aka Tectu <joel@unormal.org>
+
+ This file is part of ChibiOS/GFX.
+
+ ChibiOS/GFX is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ ChibiOS/GFX is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * @file src/console.c
+ * @brief CONSOLE code.
+ *
+ * @addtogroup CONSOLE
+ * @{
+ */
+
+#include "ch.h"
+#include "hal.h"
+#include "console.h"
+
+#if GFX_USE_CONSOLE || defined(__DOXYGEN__)
+
+/*
+ * Interface implementation. The interface is write only
+ */
+static size_t write(void *ip, const uint8_t *bp, size_t n) {
+ return gfxConsoleWrite((GConsole *)ip, bp, n);
+}
+
+static size_t read(void *ip, uint8_t *bp, size_t n) {
+ (void)ip;
+ (void)bp;
+ (void)n;
+
+ return 0;
+}
+
+static msg_t put(void *ip, uint8_t b) {
+ (void)ip;
+
+ return gfxConsolePut((GConsole *)ip, (char)b);
+}
+
+static msg_t get(void *ip) {
+ (void)ip;
+
+ return RDY_OK;
+}
+
+static msg_t putt(void *ip, uint8_t b, systime_t timeout) {
+ (void)timeout;
+
+ /* TODO: handle timeout */
+
+ return gfxConsolePut((GConsole *)ip, (char)b);
+}
+
+static msg_t gett(void *ip, systime_t timeout) {
+ (void)ip;
+ (void)timeout;
+
+ return RDY_OK;
+}
+
+static size_t writet(void *ip, const uint8_t *bp, size_t n, systime_t time) {
+ (void)time;
+
+ return gfxConsoleWrite((GConsole *)ip, bp, n);
+}
+
+static size_t readt(void *ip, uint8_t *bp, size_t n, systime_t time) {
+ (void)ip;
+ (void)bp;
+ (void)n;
+ (void)time;
+
+ return 0;
+}
+
+static const struct GConsoleVMT vmt = {
+ write, read, put, get,
+ 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 */
+ console->fy = gdispGetFontMetric(font, fontHeight);
+ console->fp = gdispGetFontMetric(font, fontCharPadding);
+
+ /* calculate the size of the console as an integer multiple of characters height*/
+ console->sx = width;
+ console->sy = (((int16_t)(height/console->fy))-1)*console->fy;
+
+ console->cx = 0;
+ console->cy = 0;
+ console->x0 = x0;
+ console->y0 = y0;
+
+ console->bkcolor = bkcolor;
+ console->color = color;
+
+ console->font = font;
+
+ gdispFillArea(x0, y0, x0 + width, y0 + height, console->bkcolor);
+ 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;
+
+ if(c == '\n') {
+ /* clear the text at the end of the line */
+ if(console->cx < console->sx)
+ gdispFillArea(console->x0 + console->cx, console->y0 + console->cy,
+ console->sx - console->cx, console->fy,
+ console->bkcolor);
+ console->cx = 0;
+ console->cy += console->fy;
+ } else if(c == '\r') {
+ /* TODO: work backwards through the buffer to the start of the current line */
+ //console->cx = 0;
+ } else {
+ width = gdispGetCharWidth(c, console->font) + console->fp;
+ if((console->cx + width) >= console->sx) {
+ /* clear the text at the end of the line */
+ if (console->cy <= console->sy)
+ gdispFillArea(console->x0 + console->cx, console->y0 + console->cy,
+ console->sx - (console->cx + width), console->fy,
+ console->bkcolor);
+ console->cx = 0;
+ console->cy += console->fy;
+ }
+
+ if((console->cy > console->sy)) {
+#if GDISP_NEED_SCROLL
+ /* scroll the console */
+ gdispVerticalScroll(console->x0, console->y0, console->sx,
+ console->sy + console->fy, console->fy, console->bkcolor);
+ /* reset the cursor to the start of the line */
+ console->cx = 0;
+ console->cy = console->sy;
+#else
+ /* clear the console */
+ gdispFillArea(console->x0, console->y0,
+ console->sx, console->sy + console->fy,
+ console->bkcolor);
+ /* reset the cursor to the top of the console */
+ console->cx = 0;
+ console->cy = 0;
+#endif
+ }
+
+ gdispDrawChar(console->x0 + console->cx, console->y0 + console->cy, c,
+ console->font, console->color);
+
+ /* update cursor */
+ console->cx += width;
+ }
+ 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++)
+ gfxConsolePut(console, bp[i]);
+
+ return RDY_OK;
+}
+
+#endif /* GFX_USE_CONSOLE */
+/** @} */
+
diff --git a/old/console.h b/old/console.h new file mode 100644 index 00000000..224de096 --- /dev/null +++ b/old/console.h @@ -0,0 +1,93 @@ +/*
+ ChibiOS/GFX - Copyright (C) 2012
+ Joel Bodenmann aka Tectu <joel@unormal.org>
+
+ This file is part of ChibiOS/GFX.
+
+ ChibiOS/GFX is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ ChibiOS/GFX is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * @file include/console.h
+ * @brief CONSOLE header file.
+ *
+ * @addtogroup CONSOLE
+ * @{
+ */
+
+#ifndef CONSOLE_H
+#define CONSOLE_H
+
+#ifndef GFX_USE_CONSOLE
+ #define GFX_USE_CONSOLE FALSE
+#endif
+
+#if GFX_USE_CONSOLE
+
+#include "gdisp.h"
+
+ /**
+ * @extends BaseAsynchronousChannelVMT
+ *
+ * @brief @p GConsole virtual methods table.
+ */
+struct GConsoleVMT {
+ _base_asynchronous_channel_methods
+};
+
+/**
+ * @extends BaseAsynchronousChannel
+ *
+ * @brief GConsole class.
+ * @details This class extends @p BaseAsynchronousChannel by adding physical
+ * I/O queues.
+ */
+typedef struct _GConsole {
+ /** @brief Virtual Methods Table.*/
+ const struct GConsoleVMT *vmt;
+ _base_asynchronous_channel_data
+ /* WARNING: Do not add any data to this struct above this comment, only below */
+ /* font */
+ font_t font;
+ /* lcd area to use */
+ coord_t x0,y0;
+ /* current cursor position, in pixels */
+ coord_t cx,cy;
+ /* console size in pixels */
+ coord_t sx,sy;
+ /* foreground and background colour */
+ color_t bkcolor, color;
+ /* font size in pixels */
+ uint8_t fy;
+ /* font inter-character padding in pixels */
+ uint8_t fp;
+} GConsole;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+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);
+msg_t gfxConsolePut(GConsole *console, char c);
+msg_t gfxConsoleWrite(GConsole *console, const uint8_t *bp, size_t n);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GFX_USE_CONSOLE */
+
+#endif /* CONSOLE_H */
+/** @} */
+
|