Touch Fixes. Deprecate Console

Touch:
- Move defines that may be altered by the touch config file to the lld
header file.
- Move the definition of the Touch driver structure to the lld config
file.
- Changed CONVERSIONS macro to TOUCHSCREEN_CONVERSIONS
- Replaced references to GDISP_SCREEN_WIDTH with gdispGetWidth
- Renamed TOUCHSCREEN_HAS_IRQ to TOUCHSCREEN_HAS_PRESSED to match new
function name.
- Added prototypes for calibration storage functions to
touchscreen_lld.h so that either the lld driver or the application can
define the function.

Console:
-Deprecated into "old" directory. Functionality replaced by gwin.
ugfx_release_2.6
Andrew Hannam 2012-11-11 19:03:30 +10:00
parent e28a4dbd0e
commit 8b51bcf46f
12 changed files with 319 additions and 277 deletions

View File

@ -19,7 +19,7 @@
*/ */
/** /**
* @file drivers/touchscreen/ADS7843/touchscreen_lld_config.h * @file drivers/gdisp/Win32/touchscreen_lld_config.h
* @brief Touchscreen Driver subsystem low level driver. * @brief Touchscreen Driver subsystem low level driver.
* *
* @addtogroup TOUCHSCREEN * @addtogroup TOUCHSCREEN
@ -35,14 +35,13 @@
/* Driver hardware support. */ /* Driver hardware support. */
/*===========================================================================*/ /*===========================================================================*/
#define TOUCHSCREEN_HAS_IRQ TRUE #define TOUCHSCREEN_HAS_PRESSED TRUE
#define TOUCHSCREEN_HAS_PRESSURE FALSE #define TOUCHSCREEN_HAS_PRESSURE FALSE
#define TOUCHSCREEN_XY_INVERTED FALSE #define TOUCHSCREEN_XY_INVERTED FALSE
#define TOUCHSCREEN_STORE_CALIBRATION TRUE #define TOUCHSCREEN_STORE_CALIBRATION TRUE
#define TOUCHSCREEN_CONVERSIONS 1
/* Nasty stuff to fix SPI dependancy in driver structure (which doesn't exist in Win32) */ struct TouchscreenDriver {};
typedef struct SPIDriver_t {} SPIDriver;
typedef struct SPIConfig_t {} SPIConfig;
#endif /* GFX_USE_TOUCHSCREEN */ #endif /* GFX_USE_TOUCHSCREEN */

View File

@ -211,7 +211,7 @@ uint16_t ts_lld_read_y(void) {
} }
/* ---- Optional Routines ---- */ /* ---- Optional Routines ---- */
#if TOUCHSCREEN_HAS_IRQ || defined(__DOXYGEN__) #if TOUCHSCREEN_HAS_PRESSED || defined(__DOXYGEN__)
/* /*
* @brief for checking if touchscreen is pressed or not. * @brief for checking if touchscreen is pressed or not.
* *

View File

@ -35,9 +35,48 @@
/* Driver hardware support. */ /* Driver hardware support. */
/*===========================================================================*/ /*===========================================================================*/
#define TOUCHSCREEN_HAS_IRQ TRUE #define TOUCHSCREEN_HAS_PRESSED TRUE
#define TOUCHSCREEN_HAS_PRESSURE FALSE #define TOUCHSCREEN_HAS_PRESSURE FALSE
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;
};
#endif /* GFX_USE_TOUCHSCREEN */ #endif /* GFX_USE_TOUCHSCREEN */
#endif /* TOUCHSCREEN_LLD_CONFIG_H */ #endif /* TOUCHSCREEN_LLD_CONFIG_H */

View File

@ -211,7 +211,7 @@ uint16_t ts_lld_read_y(void) {
} }
/* ---- Optional Routines ---- */ /* ---- Optional Routines ---- */
#if TOUCHSCREEN_HAS_IRQ || defined(__DOXYGEN__) #if TOUCHSCREEN_HAS_PRESSED || defined(__DOXYGEN__)
/* /*
* @brief for checking if touchscreen is pressed or not. * @brief for checking if touchscreen is pressed or not.
* *

View File

@ -35,9 +35,48 @@
/* Driver hardware support. */ /* Driver hardware support. */
/*===========================================================================*/ /*===========================================================================*/
#define TOUCHSCREEN_HAS_IRQ TRUE #define TOUCHSCREEN_HAS_PRESSED TRUE
#define TOUCHSCREEN_HAS_PRESSURE TRUE #define TOUCHSCREEN_HAS_PRESSURE TRUE
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;
};
#endif /* GFX_USE_TOUCHSCREEN */ #endif /* GFX_USE_TOUCHSCREEN */
#endif /* TOUCHSCREEN_LLD_CONFIG_H */ #endif /* TOUCHSCREEN_LLD_CONFIG_H */

1
gfx.mk
View File

@ -7,7 +7,6 @@ GFXSRC += $(GFXLIB)/src/gdisp.c \
$(GFXLIB)/src/gdisp_fonts.c \ $(GFXLIB)/src/gdisp_fonts.c \
$(GFXLIB)/src/gwin.c \ $(GFXLIB)/src/gwin.c \
$(GFXLIB)/src/touchscreen.c \ $(GFXLIB)/src/touchscreen.c \
$(GFXLIB)/src/console.c \
$(GFXLIB)/src/graph.c \ $(GFXLIB)/src/graph.c \
GFXINC += $(GFXLIB)/include GFXINC += $(GFXLIB)/include

View File

@ -1,108 +1,93 @@
/* /*
ChibiOS/GFX - Copyright (C) 2012 ChibiOS/GFX - Copyright (C) 2012
Joel Bodenmann aka Tectu <joel@unormal.org> Joel Bodenmann aka Tectu <joel@unormal.org>
This file is part of ChibiOS/GFX. This file is part of ChibiOS/GFX.
ChibiOS/GFX is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or the Free Software Foundation; either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
ChibiOS/GFX is distributed in the hope that it will be useful, ChibiOS/GFX is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
/** /**
* @file include/touchscreen.h * @file include/touchscreen.h
* @brief TOUCHSCREEN Touchscreen driver subsystem header file. * @brief TOUCHSCREEN Touchscreen driver subsystem header file.
* *
* @addtogroup TOUCHSCREEN * @addtogroup TOUCHSCREEN
* @{ * @{
*/ */
#ifndef TOUCHSCREEN_H #ifndef TOUCHSCREEN_H
#define TOUCHSCREEN_H #define TOUCHSCREEN_H
#if GFX_USE_TOUCHSCREEN || defined(__DOXYGEN__) #if GFX_USE_TOUCHSCREEN || defined(__DOXYGEN__)
#ifndef TOUCHSCREEN_STORE_CALIBRATION /*===========================================================================*/
#define TOUCHSCREEN_STORE_CALIBRATION FALSE /* Driver constants. */
#endif /*===========================================================================*/
#ifndef TOUCHSCREEN_VERIFY_CALIBRATION /*===========================================================================*/
#define TOUCHSCREEN_VERIFY_CALIBRATION FALSE /* Low Level Driver details and error checks. */
#endif /*===========================================================================*/
/** /* Include the low level driver information */
* @brief specifies how many conversions are made for a readout. #include "touchscreen_lld.h"
*
* @note higher is more accurate, but takes more time /* For definitions of coord_t, we require gdisp.h */
*/ #include "gdisp.h"
#define CONVERSIONS 3
/*===========================================================================*/
/*===========================================================================*/ /* Type definitions */
/* Driver constants. */ /*===========================================================================*/
/*===========================================================================*/
/**
/*===========================================================================*/ * @brief Struct used for calibration
/* Low Level Driver details and error checks. */ */
/*===========================================================================*/ typedef struct cal_t {
float ax;
/* Include the low level driver information */ float bx;
#include "touchscreen_lld.h" float cx;
float ay;
/* For definitions of coord_t, we require gdisp.h */ float by;
#include "gdisp.h" float cy;
} cal_t;
/*===========================================================================*/
/* Type definitions */ /*===========================================================================*/
/*===========================================================================*/ /* External declarations. */
/*===========================================================================*/
/**
* @brief Struct used for calibration #ifdef __cplusplus
*/ extern "C" {
typedef struct cal_t { #endif
float ax;
float bx; void tsInit(const TouchscreenDriver *ts);
float cx; coord_t tsReadX(void);
float ay; coord_t tsReadY(void);
float by; void tsCalibrate(void);
float cy;
} cal_t; #if TOUCHSCREEN_HAS_PRESSED
bool_t tsPressed(void);
/*===========================================================================*/ #endif
/* External declarations. */
/*===========================================================================*/ #if TOUCHSCREEN_HAS_PRESSURE
uint16_t tsReadZ(void);
#ifdef __cplusplus #endif
extern "C" {
#endif #ifdef __cplusplus
}
void tsInit(const TouchscreenDriver *ts); #endif
coord_t tsReadX(void);
coord_t tsReadY(void); #endif /* GFX_USE_TOUCHSCREEN */
void tsCalibrate(void);
#endif /* TOUCHSCREEN_H */
#if TOUCHSCREEN_HAS_IRQ /** @} */
bool_t tsPressed(void);
#endif
#if TOUCHSCREEN_HAS_PRESSURE
uint16_t tsReadZ(void);
#endif
#ifdef __cplusplus
}
#endif
#endif /* GFX_USE_TOUCHSCREEN */
#endif /* TOUCHSCREEN_H */
/** @} */

View File

@ -1,147 +1,130 @@
/* /*
ChibiOS/GFX - Copyright (C) 2012 ChibiOS/GFX - Copyright (C) 2012
Joel Bodenmann aka Tectu <joel@unormal.org> Joel Bodenmann aka Tectu <joel@unormal.org>
This file is part of ChibiOS/GFX. This file is part of ChibiOS/GFX.
ChibiOS/GFX is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or the Free Software Foundation; either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
ChibiOS/GFX is distributed in the hope that it will be useful, ChibiOS/GFX is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
/** /**
* @file include/touchscreen_lld.h * @file include/touchscreen_lld.h
* @brief TOUCHSCREEN Driver subsystem low level driver header. * @brief TOUCHSCREEN Driver subsystem low level driver header.
* *
* @addtogroup TOUCHSCREEN * @addtogroup TOUCHSCREEN
* @{ * @{
*/ */
#ifndef TOUCHSCREEN_LLD_H #ifndef TOUCHSCREEN_LLD_H
#define TOUCHSCREEN_LLD_H #define TOUCHSCREEN_LLD_H
#if GFX_USE_TOUCHSCREEN || defined(__DOXYGEN__) #if GFX_USE_TOUCHSCREEN || defined(__DOXYGEN__)
/*===========================================================================*/ /*===========================================================================*/
/* Include the low level driver configuration information */ /* Include the low level driver configuration information */
/*===========================================================================*/ /*===========================================================================*/
#include "touchscreen_lld_config.h" #include "touchscreen_lld_config.h"
/*===========================================================================*/ /*===========================================================================*/
/* Error checks. */ /* Error checks. */
/*===========================================================================*/ /*===========================================================================*/
#ifndef TOUCHSCREEN_NEED_MULTITHREAD #ifndef TOUCHSCREEN_NEED_MULTITHREAD
#define TOUCHSCREEN_NEED_MULTITHREAD FALSE #define TOUCHSCREEN_NEED_MULTITHREAD FALSE
#endif #endif
#ifndef TOUCHSCREEN_XY_INVERTED #ifndef TOUCHSCREEN_XY_INVERTED
#define TOUCHSCREEN_XY_INVERTED FALSE #define TOUCHSCREEN_XY_INVERTED FALSE
#endif #endif
#ifndef TOUCHSCREEN_HAS_IRQ #ifndef TOUCHSCREEN_HAS_PRESSED
#define TOUCHSCREEN_HAS_IRQ FALSE #define TOUCHSCREEN_HAS_PRESSED FALSE
#endif #endif
#ifndef TOUCHSCREEN_HAS_PRESSURE #ifndef TOUCHSCREEN_HAS_PRESSURE
#define TOUCHSCREEN_HAS_PRESSURE FALSE #define TOUCHSCREEN_HAS_PRESSURE FALSE
#endif #endif
#ifndef TOUCHSCREEN_SPI_PROLOGUE #ifndef TOUCHSCREEN_SPI_PROLOGUE
#define TOUCHSCREEN_SPI_PROLOGUE() #define TOUCHSCREEN_SPI_PROLOGUE()
#endif #endif
#ifndef TOUCHSCREEN_SPI_EPILOGUE #ifndef TOUCHSCREEN_SPI_EPILOGUE
#define TOUCHSCREEN_SPI_EPILOGUE() #define TOUCHSCREEN_SPI_EPILOGUE()
#endif #endif
/*===========================================================================*/ #ifndef TOUCHSCREEN_STORE_CALIBRATION
/* Driver types. */ #define TOUCHSCREEN_STORE_CALIBRATION FALSE
/*===========================================================================*/ #endif
/** #ifndef TOUCHSCREEN_VERIFY_CALIBRATION
* @brief Structure representing a touchscreen driver. #define TOUCHSCREEN_VERIFY_CALIBRATION FALSE
*/ #endif
typedef struct TouchscreenDriver {
/* #ifndef TOUCHSCREEN_CONVERSIONS
* @brief Pointer to SPI driver. #define TOUCHSCREEN_CONVERSIONS 3
* @note SPI driver must be enabled in mcuconf.h and halconf.h #endif
*/
SPIDriver *spip; /*===========================================================================*/
/* Driver types. */
/* /*===========================================================================*/
* @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 * @brief Structure representing a touchscreen driver. Hardware dependant.
*/ */
const SPIConfig *spicfg; typedef struct TouchscreenDriver TouchscreenDriver;
/* // Forward declaration
* @brief Touchscreen controller TPIRQ pin GPIO port struct cal_t;
*/
ioportid_t tsIRQPort; /*===========================================================================*/
/* External declarations. */
/* /*===========================================================================*/
* @brief Touchscreen controller TPIRQ GPIO pin
* @note The interface is polled as of now, interrupt support is
* to be implemented in the future. #ifdef __cplusplus
*/ extern "C" {
ioportmask_t tsIRQPin; #endif
/* /* Core functions */
* @brief Initialize the SPI with the configuration struct given or not void ts_lld_init(const TouchscreenDriver *ts);
* If TRUE, spiStart is called by the init, otherwise not
* @note This is provided in such a case when SPI port is being shared uint16_t ts_lld_read_value(uint8_t cmd);
* across multiple peripherals, so not to disturb the SPI bus. uint16_t ts_lld_read_x(void);
* You can use TOUCHSCREEN_SPI_PROLOGUE() and TOUCHSCREEN_SPI_EPILOGUE() uint16_t ts_lld_read_y(void);
* macros to change the SPI configuration or speed before and
* after using the touchpad. An example case would be sharing the #if TOUCHSCREEN_HAS_PRESSED
* bus with a fast flash memory chip. uint8_t ts_lld_pressed(void);
*/ #endif
bool_t direct_init;
} TouchscreenDriver; #if TOUCHSCREEN_HAS_PRESSURE
uint16_t ts_lld_read_z(void);
#endif
/*===========================================================================*/
/* External declarations. */ #if TOUCHSCREEN_STORE_CALIBRATION
/*===========================================================================*/ // These may be defined by the low level driver or by the application
void ts_store_calibration_lld(struct cal_t *cal);
struct cal_t *ts_restore_calibration_lld(void);
#ifdef __cplusplus #endif
extern "C" {
#endif #ifdef __cplusplus
}
/* Core functions */ #endif
void ts_lld_init(const TouchscreenDriver *ts);
#endif /* GFX_USE_TOUCHSCREEN */
uint16_t ts_lld_read_value(uint8_t cmd);
uint16_t ts_lld_read_x(void); #endif /* _TOUCHSCREEN_LLD_H */
uint16_t ts_lld_read_y(void); /** @} */
#if TOUCHSCREEN_HAS_IRQ
uint8_t ts_lld_pressed(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 */
/** @} */

View File

@ -9,6 +9,9 @@ current stable: 1.4
FEATURE: Added three point calibration FEATURE: Added three point calibration
FIX: Touchpad renamed into Touchscreen FIX: Touchpad renamed into Touchscreen
FIX: tsIRQ() renamed into tsPressed() FIX: tsIRQ() renamed into tsPressed()
FEATURE: Touchscreen support added to gdisp Win32 driver
FIX: gdisp Win32 driver fixes
DEPRECATE: console deprecated - replaced with gwin functionality
*** changes after 1.3 *** *** changes after 1.3 ***

View File

@ -32,11 +32,6 @@
#if GFX_USE_TOUCHSCREEN || defined(__DOXYGEN__) #if GFX_USE_TOUCHSCREEN || defined(__DOXYGEN__)
#if TOUCHSCREEN_STORE_CALIBRATION
extern void ts_store_calibration_lld(struct cal_t *cal);
extern struct cal_t *ts_restore_calibration_lld(void);
#endif
/*===========================================================================*/ /*===========================================================================*/
/* Driver local definitions. */ /* Driver local definitions. */
/*===========================================================================*/ /*===========================================================================*/
@ -59,12 +54,12 @@ static coord_t _tsReadRealX(void) {
int16_t i; int16_t i;
coord_t x; coord_t x;
for(i = 0; i < CONVERSIONS; i++) { for(i = 0; i < TOUCHSCREEN_CONVERSIONS; i++) {
results += ts_lld_read_x(); results += ts_lld_read_x();
} }
/* Take the average of the readings */ /* Take the average of the readings */
x = results / CONVERSIONS; x = results / TOUCHSCREEN_CONVERSIONS;
return x; return x;
} }
@ -74,12 +69,12 @@ static coord_t _tsReadRealY(void) {
int16_t i; int16_t i;
coord_t y; coord_t y;
for(i = 0; i < CONVERSIONS; i++) { for(i = 0; i < TOUCHSCREEN_CONVERSIONS; i++) {
results += ts_lld_read_y(); results += ts_lld_read_y();
} }
/* Take the average of the readings */ /* Take the average of the readings */
y = results / CONVERSIONS; y = results / TOUCHSCREEN_CONVERSIONS;
return y; return y;
} }
@ -237,9 +232,9 @@ coord_t tsReadY(void) {
case GDISP_ROTATE_0: case GDISP_ROTATE_0:
return y; return y;
case GDISP_ROTATE_90: case GDISP_ROTATE_90:
return GDISP_SCREEN_WIDTH - x - 1; return gdispGetWidth() - x - 1;
case GDISP_ROTATE_180: case GDISP_ROTATE_180:
return GDISP_SCREEN_HEIGHT - y - 1; return gdispGetHeight() - y - 1;
case GDISP_ROTATE_270: case GDISP_ROTATE_270:
return x; return x;
} }
@ -268,7 +263,7 @@ coord_t tsReadY(void) {
* *
* @api * @api
*/ */
#if TOUCHSCREEN_HAS_IRQ || defined(__DOXYGEN__) #if TOUCHSCREEN_HAS_PRESSED || defined(__DOXYGEN__)
bool_t tsPressed(void) { bool_t tsPressed(void) {
return ts_lld_pressed(); return ts_lld_pressed();
} }