diff options
author | Andrew Hannam <andrewh@inmarket.com.au> | 2013-05-15 08:37:00 -0700 |
---|---|---|
committer | Andrew Hannam <andrewh@inmarket.com.au> | 2013-05-15 08:37:00 -0700 |
commit | 9ad0d079239662646bcef9b0629b48443da748e6 (patch) | |
tree | b695ce63ec58129db7e5ab16fb29891c50b02eaa /src | |
parent | 88fd3ad62eeb0d6228e3e10127a0cd14b32c51a2 (diff) | |
parent | 3571d18741ff00a327b6210a9c9d2594b4bdfb22 (diff) | |
download | uGFX-9ad0d079239662646bcef9b0629b48443da748e6.tar.gz uGFX-9ad0d079239662646bcef9b0629b48443da748e6.tar.bz2 uGFX-9ad0d079239662646bcef9b0629b48443da748e6.zip |
Merge pull request #29 from Tectu/master
Merge Tectu Changes
Diffstat (limited to 'src')
-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..a5608acf 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); + tdispDrawString(s); +} + +void tdispControl(uint16_t what, void *value) { + MUTEX_ENTER(); + tdisp_lld_control(what, value); + MUTEX_LEAVE(); +} + +#endif /* GFX_USE_TDISP */ +/** @} */ |