diff options
author | Joel Bodenmann <joel.bodenmann@hevs.ch> | 2012-11-10 00:13:42 +0100 |
---|---|---|
committer | Joel Bodenmann <joel.bodenmann@hevs.ch> | 2012-11-10 00:13:42 +0100 |
commit | affd9792ff42fab8f376bd2c87a71b25fd52baf7 (patch) | |
tree | 03ce8e6d759d5482185ae4a4797555ac0a922bfa /include | |
parent | 8f31c5e632df70b6b0a4871680be0c436993a41c (diff) | |
download | uGFX-affd9792ff42fab8f376bd2c87a71b25fd52baf7.tar.gz uGFX-affd9792ff42fab8f376bd2c87a71b25fd52baf7.tar.bz2 uGFX-affd9792ff42fab8f376bd2c87a71b25fd52baf7.zip |
added touchscreen files
Diffstat (limited to 'include')
-rw-r--r-- | include/touchscreen.h | 100 | ||||
-rw-r--r-- | include/touchscreen_lld.h | 155 |
2 files changed, 255 insertions, 0 deletions
diff --git a/include/touchscreen.h b/include/touchscreen.h new file mode 100644 index 00000000..4d48e38d --- /dev/null +++ b/include/touchscreen.h @@ -0,0 +1,100 @@ +/* + 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 include/touchscreen.h + * @brief TOUCHSCREEN Touchscreen driver subsystem header file. + * + * @addtogroup TOUCHSCREEN + * @{ + */ + +#ifndef TOUCHSCREEN_H +#define TOUCHSCREEN_H + +#if GFX_USE_TOUCHSCREEN || defined(__DOXYGEN__) + +/** + * @brief specifies how many conversions are made for a readout. + * + * @note higher is more accurate, but takes more time + */ +#define CONVERSIONS 3 + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver details and error checks. */ +/*===========================================================================*/ + +/* Include the low level driver information */ +#include "touchscreen_lld.h" + +/* For definitions of coord_t, we require gdisp.h */ +#include "gdisp.h" + +/*===========================================================================*/ +/* Type definitions */ +/*===========================================================================*/ + +/** + * @brief Struct used for calibration + */ +typedef struct cal_t { + float ax; + float bx; + float cx; + float ay; + float by; + float cy; +} cal_t; + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + +void tsInit(const TouchscreenDriver *ts); +coord_t tsReadX(void); +coord_t tsReadY(void); +void tsCalibrate(void); + +#if TOUCHSCREEN_HAS_IRQ + bool_t tsIRQ(void); +#endif + +#if TOUCHSCREEN_HAS_PRESSURE + uint16_t tsReadZ(void); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* GFX_USE_TOUCHSCREEN */ + +#endif /* TOUCHSCREEN_H */ +/** @} */ + diff --git a/include/touchscreen_lld.h b/include/touchscreen_lld.h new file mode 100644 index 00000000..53c66b53 --- /dev/null +++ b/include/touchscreen_lld.h @@ -0,0 +1,155 @@ +/* + 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 include/touchscreen_lld.h + * @brief TOUCHSCREEN Driver subsystem low level driver header. + * + * @addtogroup TOUCHSCREEN + * @{ + */ + +#ifndef TOUCHSCREEN_LLD_H +#define TOUCHSCREEN_LLD_H + +#if GFX_USE_TOUCHSCREEN || defined(__DOXYGEN__) + +/*===========================================================================*/ +/* Include the low level driver configuration information */ +/*===========================================================================*/ + +#include "touchscreen_lld_config.h" + +/*===========================================================================*/ +/* Error checks. */ +/*===========================================================================*/ + +#ifndef TOUCHSCREEN_NEED_MULTITHREAD + #define TOUCHSCREEN_NEED_MULTITHREAD FALSE +#endif + +#ifndef TOUCHSCREEN_XY_INVERTED + #define TOUCHSCREEN_XY_INVERTED FALSE +#endif + +#ifndef TOUCHSCREEN_STORE_CALIBRATION + #define TOUCHSCREEN_STORE_CALIBRATION FALSE +#endif + +#ifndef TOUCHSCREEN_VERIFY_CALIBRATION + #define TOUCHSCREEN_VERIFY_CALIBRATION FALSE +#endif + +#ifndef TOUCHSCREEN_HAS_IRQ + #define TOUCHSCREEN_HAS_IRQ FALSE +#endif + +#ifndef TOUCHSCREEN_HAS_PRESSURE + #define TOUCHSCREEN_HAS_PRESSURE FALSE +#endif + +#ifndef TOUCHSCREEN_SPI_PROLOGUE + #define TOUCHSCREEN_SPI_PROLOGUE() +#endif + +#ifndef TOUCHSCREEN_SPI_EPILOGUE + #define TOUCHSCREEN_SPI_EPILOGUE() +#endif + +/*===========================================================================*/ +/* Driver types. */ +/*===========================================================================*/ + +/** + * @brief Structure representing a touchscreen driver. + */ +typedef struct TouchscreenDriver { + /* + * @brief Pointer to SPI driver. + * @note SPI driver must be enabled in mcuconf.h and halconf.h + */ + SPIDriver *spip; + + /* + * @brief Pointer to the SPI configuration structure. + * @note The lowest possible speed ~ 1-2MHz is to be used, otherwise + * will result in a lot of noise + */ + const SPIConfig *spicfg; + + /* + * @brief Touchscreen controller TPIRQ pin GPIO port + */ + ioportid_t tsIRQPort; + + /* + * @brief Touchscreen controller TPIRQ GPIO pin + * @note The interface is polled as of now, interrupt support is + * to be implemented in the future. + */ + ioportmask_t tsIRQPin; + + /* + * @brief Initialize the SPI with the configuration struct given or not + * If TRUE, spiStart is called by the init, otherwise not + * @note This is provided in such a case when SPI port is being shared + * across multiple peripherals, so not to disturb the SPI bus. + * You can use TOUCHSCREEN_SPI_PROLOGUE() and TOUCHSCREEN_SPI_EPILOGUE() + * macros to change the SPI configuration or speed before and + * after using the touchpad. An example case would be sharing the + * bus with a fast flash memory chip. + */ + bool_t direct_init; +} TouchscreenDriver; + + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + /* Core functions */ + void ts_lld_init(const TouchscreenDriver *ts); + + uint16_t ts_lld_read_value(uint8_t cmd); + uint16_t ts_lld_read_x(void); + uint16_t ts_lld_read_y(void); + + #if TOUCHSCREEN_HAS_IRQ + uint8_t ts_lld_irq(void); + #endif + + #if TOUCHSCREEN_HAS_PRESSURE + uint16_t ts_lld_read_z(void); + #endif + +#ifdef __cplusplus +} +#endif + +#endif /* GFX_USE_TOUCHSCREEN */ + +#endif /* _TOUCHSCREEN_LLD_H */ +/** @} */ + |