diff options
author | Joel Bodenmann <joel@unormal.org> | 2013-05-15 18:00:42 +0200 |
---|---|---|
committer | Joel Bodenmann <joel@unormal.org> | 2013-05-15 18:00:42 +0200 |
commit | 11a71cb080d7548f362583baaced74675b6718ad (patch) | |
tree | d88f72c3e2a4e42f27c5bd824a978e783c89de5c /src/tdisp/tdisp.c | |
parent | 4ba223030d6d2044e16c54560e00d93df32eacd8 (diff) | |
download | uGFX-11a71cb080d7548f362583baaced74675b6718ad.tar.gz uGFX-11a71cb080d7548f362583baaced74675b6718ad.tar.bz2 uGFX-11a71cb080d7548f362583baaced74675b6718ad.zip |
TDISP fixes
Diffstat (limited to 'src/tdisp/tdisp.c')
-rw-r--r-- | src/tdisp/tdisp.c | 201 |
1 files changed, 103 insertions, 98 deletions
diff --git a/src/tdisp/tdisp.c b/src/tdisp/tdisp.c index 38199d72..dadffc68 100644 --- a/src/tdisp/tdisp.c +++ b/src/tdisp/tdisp.c @@ -4,101 +4,106 @@ * * http://chibios-gfx.com/license.html */ -
-/**
- * @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 */
-/** @} */
+ +/** + * @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 tdispDrawStringLocation(coord_t col, coord_t row, char *s) { + tdispSetCursor(col, row); + tdispSDrawString(s); +} + +void tdispControl(uint16_t what, void *value) { + MUTEX_ENTER(); + tdisp_lld_control(what, value); + MUTEX_LEAVE(); +} + +#endif /* GFX_USE_TDISP */ +/** @} */ |