aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJoel Bodenmann <joel@unormal.org>2013-02-18 08:18:09 +0100
committerJoel Bodenmann <joel@unormal.org>2013-02-18 08:18:09 +0100
commit08f2305aeb1458dbefd435bf8e56693aa878d0b2 (patch)
tree6bd8edcc4bb64c10938c9824b9ca54be6122dbac /src
parentf8050a84f76c5f8be7bd87fd26eb053901a11dd6 (diff)
parent1985906bea97a015d6e035ebb3f91b6e4f94aff1 (diff)
downloaduGFX-08f2305aeb1458dbefd435bf8e56693aa878d0b2.tar.gz
uGFX-08f2305aeb1458dbefd435bf8e56693aa878d0b2.tar.bz2
uGFX-08f2305aeb1458dbefd435bf8e56693aa878d0b2.zip
TDISP merge - NOT TESTED!!!
Diffstat (limited to 'src')
-rw-r--r--src/tdisp/tdisp.c202
1 files changed, 117 insertions, 85 deletions
diff --git a/src/tdisp/tdisp.c b/src/tdisp/tdisp.c
index 3556e031..8ef7e5c4 100644
--- a/src/tdisp/tdisp.c
+++ b/src/tdisp/tdisp.c
@@ -1,85 +1,117 @@
-/*
- 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/tdisp/tdisp.c
- * @brief TDISP Driver code.
- *
- * @addtogroup TDISP
- * @{
- */
-#include "ch.h"
-#include "hal.h"
-#include "gfx.h"
-
-#if GFX_USE_TDISP || defined(__DOXYGEN__)
-
-static uint8_t _displaycontrol;
-
-bool_t tdispInit(void) {
- bool_t ret;
-
- ret = tdisp_lld_init();
-
- return ret;
-}
-
-void tdispControl(uint16_t what, void *value) {
- tdisp_lld_control(what, value);
-}
-
-void tdispClear(void) {
- tdisp_lld_clear();
-}
-
-void tdispHome(void) {
- tdisp_lld_home();
-}
-
-void tdispCreateChar(uint8_t address, char *charmap) {
- tdisp_lld_create_char(address, charmap);
-}
-
-void tdispSetCursor(coord_t col, coord_t row) {
- tdisp_lld_set_cursor(col, row);
-}
-
-void tdispDrawChar(char c) {
- tdisp_lld_write_data(c);
-}
-
-void tdispDrawString(char *s) {
- while(*s)
- tdispDrawChar(*s++);
-}
-
-void tdispDrawCharLocation(coord_t col, coord_t row, char c) {
- tdispSetCursor(col, row);
- tdispDrawChar(c);
-}
-
-void tdispDrawStringLocation(coord_t col, coord_t row, char *s) {
- tdispSetCursor(col, row);
- tdispDrawString(s);
-}
-
-#endif /* GFX_USE_TDISP */
-/** @} */
-
+/*
+ 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/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 "tdisp/lld/tdisp_lld.h"
+
+#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, void *value) {
+ MUTEX_ENTER();
+ tdisp_lld_control(what, value);
+ MUTEX_LEAVE();
+}
+
+#endif /* GFX_USE_TDISP */
+/** @} */