From 11a71cb080d7548f362583baaced74675b6718ad Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Wed, 15 May 2013 18:00:42 +0200 Subject: TDISP fixes --- src/tdisp/tdisp.c | 201 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 103 insertions(+), 98 deletions(-) (limited to 'src') 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 */ +/** @} */ -- cgit v1.2.3