From ebc30c02bcff4ea36ac3e46b48ae413c0ed34b80 Mon Sep 17 00:00:00 2001 From: Joel Bodenmann Date: Sat, 1 Jun 2013 01:37:53 +0200 Subject: TDISP update --- src/tdisp/tdisp.c | 241 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 138 insertions(+), 103 deletions(-) (limited to 'src') 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 + + 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 . +*/ + +/** + * @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 */ +/** @} */ -- cgit v1.2.3