diff options
author | Joel Bodenmann <joel@unormal.org> | 2013-06-01 01:37:53 +0200 |
---|---|---|
committer | Joel Bodenmann <joel@unormal.org> | 2013-06-01 01:37:53 +0200 |
commit | ebc30c02bcff4ea36ac3e46b48ae413c0ed34b80 (patch) | |
tree | d87e9c07f6f8ba2ec186d77d53bb243df3ab671c /src | |
parent | f2ba60f4655107bd0099d24238220d94639f9d29 (diff) | |
download | uGFX-ebc30c02bcff4ea36ac3e46b48ae413c0ed34b80.tar.gz uGFX-ebc30c02bcff4ea36ac3e46b48ae413c0ed34b80.tar.bz2 uGFX-ebc30c02bcff4ea36ac3e46b48ae413c0ed34b80.zip |
TDISP update
Diffstat (limited to 'src')
-rw-r--r-- | src/tdisp/tdisp.c | 241 |
1 files changed, 138 insertions, 103 deletions
diff --git a/src/tdisp/tdisp.c b/src/tdisp/tdisp.c index c7931995..d51bfd94 100644 --- a/src/tdisp/tdisp.c +++ b/src/tdisp/tdisp.c @@ -1,103 +1,138 @@ -/* - * This file is subject to the terms of the GFX License, v1.0. If a copy of - * the license was not distributed with this file, you can obtain one at: - * - * http://chibios-gfx.com/license.html - */ - -/** - * @file src/tdisp/tdisp.c - * @brief TDISP Driver code. - * - * @addtogroup TDISP - * @{ - */ -#include "gfx.h" - -#if GFX_USE_TDISP || defined(__DOXYGEN__) - -#include "tdisp/lld/tdisp_lld.h" - -#if TDISP_NEED_MULTITHREAD - static gfxMutex tdispMutex; - - #define MUTEX_INIT() gfxMutexInit(&tdispMutex) - #define MUTEX_ENTER() gfxMutexEnter(&tdispMutex) - #define MUTEX_LEAVE() gfxMutexExit(&tdispMutex) - -#else - - #define MUTEX_INIT() - #define MUTEX_ENTER() - #define MUTEX_LEAVE() - -#endif - -bool_t tdispInit(void) { - bool_t res; - - MUTEX_INIT(); - - MUTEX_ENTER(); - res = tdisp_lld_init(); - MUTEX_LEAVE(); - - return res; -} - -void tdispClear(void) { - MUTEX_ENTER(); - tdisp_lld_clear(); - MUTEX_LEAVE(); -} - -void tdispHome(void) { - MUTEX_ENTER(); - tdisp_lld_set_cursor(0, 0); - MUTEX_LEAVE(); -} - -void tdispSetCursor(coord_t col, coord_t row) { - /* Keep the input range valid */ - if (row >= TDISP.rows) - row = TDISP.rows - 1; - MUTEX_ENTER(); - tdisp_lld_set_cursor(col, row); - MUTEX_LEAVE(); -} - -void tdispCreateChar(uint8_t address, char *charmap) { - /* make sure we don't write somewhere we're not supposed to */ - if (address < TDISP.maxCustomChars) { - MUTEX_ENTER(); - tdisp_lld_create_char(address, charmap); - MUTEX_LEAVE(); - } -} - -void tdispDrawChar(char c) { - MUTEX_ENTER(); - tdisp_lld_draw_char(c); - MUTEX_LEAVE(); -} - -void tdispDrawString(char *s) { - MUTEX_ENTER(); - while(*s) - tdisp_lld_draw_char(*s++); - MUTEX_LEAVE(); -} - -void tdispDrawStringLocation(coord_t col, coord_t row, char *s) { - tdispSetCursor(col, row); - tdispDrawString(s); -} - -void tdispControl(uint16_t what, void *value) { - MUTEX_ENTER(); - tdisp_lld_control(what, value); - MUTEX_LEAVE(); -} - -#endif /* GFX_USE_TDISP */ -/** @} */ +/*
+ ChibiOS/GFX - Copyright (C) 2012, 2013
+ Joel Bodenmann aka Tectu <joel@unormal.org>
+
+ This file is part of ChibiOS/GFX.
+
+ ChibiOS/GFX is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ ChibiOS/GFX is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * @file src/tdisp/tdisp.c
+ * @brief TDISP Driver code.
+ *
+ * @addtogroup TDISP
+ * @{
+ */
+#include "ch.h"
+#include "hal.h"
+#include "gfx.h"
+
+#if GFX_USE_TDISP || defined(__DOXYGEN__)
+
+#include "../../include/tdisp/lld/tdisp_lld.h"
+
+/* cursor controllers */
+#define CURSOR 1
+#define ON 0
+#define OFF
+
+#if TDISP_NEED_MULTITHREAD
+ #if !CH_USE_MUTEXES
+ #error "TDISP: CH_USE_MUTEXES must be defined in chconf.h because TDISP_NEED_MULTITHREAD is defined"
+ #endif
+
+ static Mutex tdispMutex;
+
+ #define MUTEX_INIT() chMtxInit(&tdispMutex)
+ #define MUTEX_ENTER() chMtxLock(&tdispMutex)
+ #define MUTEX_LEAVE() chMtxUnlock()
+
+#else
+
+ #define MUTEX_INIT()
+ #define MUTEX_ENTER()
+ #define MUTEX_LEAVE()
+
+#endif
+
+bool_t tdispInit(void) {
+ bool_t res;
+
+ MUTEX_INIT();
+
+ MUTEX_ENTER();
+ res = tdisp_lld_init();
+ MUTEX_LEAVE();
+
+ return res;
+}
+
+void tdispClear(void) {
+ MUTEX_ENTER();
+ tdisp_lld_clear();
+ MUTEX_LEAVE();
+}
+
+void tdispHome(void) {
+ MUTEX_ENTER();
+ tdisp_lld_set_cursor(0, 0);
+ MUTEX_LEAVE();
+}
+
+void tdispSetCursor(coord_t col, coord_t row) {
+ /* Keep the input range valid */
+ if (row >= TDISP.rows)
+ row = TDISP.rows - 1;
+ MUTEX_ENTER();
+ tdisp_lld_set_cursor(col, row);
+ MUTEX_LEAVE();
+}
+
+void tdispCreateChar(uint8_t address, uint8_t *charmap) {
+ /* make sure we don't write somewhere we're not supposed to */
+ if (address < TDISP.maxCustomChars) {
+ MUTEX_ENTER();
+ tdisp_lld_create_char(address, charmap);
+ MUTEX_LEAVE();
+ }
+}
+
+void tdispDrawChar(char c) {
+ MUTEX_ENTER();
+ tdisp_lld_draw_char(c);
+ MUTEX_LEAVE();
+}
+
+void tdispDrawString(char *s) {
+ MUTEX_ENTER();
+ while(*s)
+ tdisp_lld_draw_char(*s++);
+ MUTEX_LEAVE();
+}
+
+void tdispControl(uint16_t what, uint16_t value) {
+ MUTEX_ENTER();
+ tdisp_lld_control(what, value);
+ MUTEX_LEAVE();
+}
+
+void tdispScroll(uint16_t direction, uint16_t amount, uint16_t delay) {
+ MUTEX_ENTER();
+ tdisp_lld_scroll(direction, amount, delay);
+ MUTEX_LEAVE();
+}
+
+#if TDISP_USE_BACKLIGHT
+void tdispSetBacklight(uint16_t percentage) {
+ if (percentage > 100)
+ percentage = 100;
+ MUTEX_ENTER();
+ tdisp_lld_set_backlight(percentage);
+ MUTEX_LEAVE();
+}
+#endif
+
+#endif /* GFX_USE_TDISP */
+/** @} */
|