Basically i glued Peter Drescher and Simon Ford libs in a GraphicsDisplay class, then derived TFT or LCD class (which inherits Protocols class), then the most derived ones (Inits), which are per-display and are the only part needed to be adapted to diff hw.

Fork of UniGraphic by GraphicsDisplay

Committer:
rakware
Date:
Wed May 06 16:52:07 2015 +0000
Revision:
22:62f3bed03503
added touch for ADS7843 bound to TFT class

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rakware 22:62f3bed03503 1 /******************************************************************
rakware 22:62f3bed03503 2 ***** *****
rakware 22:62f3bed03503 3 ***** Name: Touch.h *****
rakware 22:62f3bed03503 4 ***** Ver.: 1.0 *****
rakware 22:62f3bed03503 5 ***** Date: 04/01/2013 *****
rakware 22:62f3bed03503 6 ***** Auth: Frank Vannieuwkerke *****
rakware 22:62f3bed03503 7 ***** Erik Olieman *****
rakware 22:62f3bed03503 8 ***** Func: Touch driver for use with ADS7843 *****
rakware 22:62f3bed03503 9 ***** *****
rakware 22:62f3bed03503 10 ******************************************************************/
rakware 22:62f3bed03503 11
rakware 22:62f3bed03503 12 #ifndef MBED_Touch_H
rakware 22:62f3bed03503 13 #define MBED_Touch_H
rakware 22:62f3bed03503 14
rakware 22:62f3bed03503 15 #include "TFT.h"
rakware 22:62f3bed03503 16 #include "mbed.h"
rakware 22:62f3bed03503 17
rakware 22:62f3bed03503 18 typedef struct
rakware 22:62f3bed03503 19 {
rakware 22:62f3bed03503 20 int x;
rakware 22:62f3bed03503 21 int y;
rakware 22:62f3bed03503 22 } Coordinate;
rakware 22:62f3bed03503 23
rakware 22:62f3bed03503 24 typedef struct
rakware 22:62f3bed03503 25 {
rakware 22:62f3bed03503 26 int An,
rakware 22:62f3bed03503 27 Bn,
rakware 22:62f3bed03503 28 Cn,
rakware 22:62f3bed03503 29 Dn,
rakware 22:62f3bed03503 30 En,
rakware 22:62f3bed03503 31 Fn,
rakware 22:62f3bed03503 32 Divider ;
rakware 22:62f3bed03503 33 } Matrix;
rakware 22:62f3bed03503 34
rakware 22:62f3bed03503 35 class TouchScreenADS7843 {
rakware 22:62f3bed03503 36 public:
rakware 22:62f3bed03503 37 Coordinate display;
rakware 22:62f3bed03503 38 Coordinate screen;
rakware 22:62f3bed03503 39
rakware 22:62f3bed03503 40 /*
rakware 22:62f3bed03503 41 * Create a Touchscreen object connected to SPI and two pins.
rakware 22:62f3bed03503 42 *
rakware 22:62f3bed03503 43 * @param mosi,miso,sclk SPI
rakware 22:62f3bed03503 44 * @param cs pin connected to CS of ADS7843
rakware 22:62f3bed03503 45 * @param irq pin connected to IRQ of ADS7843
rakware 22:62f3bed03503 46 * @param pointer to SPI_TFT constructor
rakware 22:62f3bed03503 47 *
rakware 22:62f3bed03503 48 */
rakware 22:62f3bed03503 49 TouchScreenADS7843(PinName tp_mosi, PinName tp_miso, PinName tp_sclk, PinName tp_cs, PinName tp_irq, TFT *_LCD);
rakware 22:62f3bed03503 50
rakware 22:62f3bed03503 51 /*
rakware 22:62f3bed03503 52 * Draw a 2 by 2 dot on the LCD screen.
rakware 22:62f3bed03503 53 *
rakware 22:62f3bed03503 54 * @param x (horizontal position)
rakware 22:62f3bed03503 55 * @param y (vertical position)
rakware 22:62f3bed03503 56 * @param color (16 bit pixel color)
rakware 22:62f3bed03503 57 *
rakware 22:62f3bed03503 58 */
rakware 22:62f3bed03503 59 void TP_DrawPoint(unsigned int Xpos,unsigned int Ypos,unsigned int color);
rakware 22:62f3bed03503 60
rakware 22:62f3bed03503 61 /*
rakware 22:62f3bed03503 62 * Obtain averaged data from ADS7846.
rakware 22:62f3bed03503 63 * does 9 consecutive reads and only stores averaged data
rakware 22:62f3bed03503 64 * when the 9 points are within the treshold limits.
rakware 22:62f3bed03503 65 *
rakware 22:62f3bed03503 66 * @param screenPTR (pointer to store data)
rakware 22:62f3bed03503 67 * @returns 1 on success
rakware 22:62f3bed03503 68 * @returns 0 on failure
rakware 22:62f3bed03503 69 *
rakware 22:62f3bed03503 70 * If called with screenPTR = NULL - 'screen' variable is used, otherwise (parameter) is used.
rakware 22:62f3bed03503 71 *
rakware 22:62f3bed03503 72 */
rakware 22:62f3bed03503 73 unsigned char Read_Ads7843(Coordinate * screenPtr = NULL);
rakware 22:62f3bed03503 74
rakware 22:62f3bed03503 75 /*
rakware 22:62f3bed03503 76 * Calibrate the touch panel.
rakware 22:62f3bed03503 77 * Three crosshairs are drawn and need to be touched in sequence.
rakware 22:62f3bed03503 78 * A calibration matrix is set accordingly.
rakware 22:62f3bed03503 79 *
rakware 22:62f3bed03503 80 */
rakware 22:62f3bed03503 81 void TouchPanel_Calibrate(void);
rakware 22:62f3bed03503 82
rakware 22:62f3bed03503 83 /*
rakware 22:62f3bed03503 84 * Obtain real x,y coordinates.
rakware 22:62f3bed03503 85 * The x,y coordinates are calculated using the calibration matrix.
rakware 22:62f3bed03503 86 *
rakware 22:62f3bed03503 87 */
rakware 22:62f3bed03503 88 unsigned char getDisplayPoint(void);
rakware 22:62f3bed03503 89
rakware 22:62f3bed03503 90 /*
rakware 22:62f3bed03503 91 * Read touchpanel screensample and matrix values.
rakware 22:62f3bed03503 92 *
rakware 22:62f3bed03503 93 * In your code, create 2 structures using Matrix and screenPtr
rakware 22:62f3bed03503 94 * and call this function with these structures.
rakware 22:62f3bed03503 95 * the calibration values are returned into these structures.
rakware 22:62f3bed03503 96 * Example:
rakware 22:62f3bed03503 97 * Matrix matrix;
rakware 22:62f3bed03503 98 * Coordinate ScreenSample[3];
rakware 22:62f3bed03503 99 * GetCalibration(&matrix, &ScreenSample[0]);
rakware 22:62f3bed03503 100 */
rakware 22:62f3bed03503 101 void GetCalibration(Matrix * matrixPtr, Coordinate * screenPtr);
rakware 22:62f3bed03503 102
rakware 22:62f3bed03503 103 /*
rakware 22:62f3bed03503 104 * Set touchpanel calibration using screensample and matrix values.
rakware 22:62f3bed03503 105 *
rakware 22:62f3bed03503 106 * In your code, create 2 structures based on Matrix and screenPtr,
rakware 22:62f3bed03503 107 * copy saved calibration values into these structures
rakware 22:62f3bed03503 108 * and call this function with these structures.
rakware 22:62f3bed03503 109 * Example:
rakware 22:62f3bed03503 110 * Matrix matrix;
rakware 22:62f3bed03503 111 * Coordinate ScreenSample[3];
rakware 22:62f3bed03503 112 * <pseudocode> load matrix with values from external storage (eg eeprom).
rakware 22:62f3bed03503 113 * <pseudocode> load ScreenSample with values from external storage (eg eeprom).
rakware 22:62f3bed03503 114 * SetCalibration(&matrix, &ScreenSample[0]);
rakware 22:62f3bed03503 115 */
rakware 22:62f3bed03503 116 void SetCalibration(Matrix * matrixPtr, Coordinate * screenPtr);
rakware 22:62f3bed03503 117
rakware 22:62f3bed03503 118 TFT *LCD;
rakware 22:62f3bed03503 119 SPI _tp_spi;
rakware 22:62f3bed03503 120 DigitalOut _tp_cs;
rakware 22:62f3bed03503 121 DigitalIn _tp_irq;
rakware 22:62f3bed03503 122
rakware 22:62f3bed03503 123 protected:
rakware 22:62f3bed03503 124
rakware 22:62f3bed03503 125 #define SPI_RD_DELAY 1
rakware 22:62f3bed03503 126 #define CHX 0xd0 // 12 bit mode
rakware 22:62f3bed03503 127 #define CHY 0x90
rakware 22:62f3bed03503 128
rakware 22:62f3bed03503 129 Coordinate DisplaySample[3];
rakware 22:62f3bed03503 130 Coordinate ScreenSample[3];
rakware 22:62f3bed03503 131 Matrix matrix;
rakware 22:62f3bed03503 132
rakware 22:62f3bed03503 133 /*
rakware 22:62f3bed03503 134 * Obtain raw x,y data from ADS7846
rakware 22:62f3bed03503 135 *
rakware 22:62f3bed03503 136 * @param pointer to raw x and y coordinates (pointer to store data)
rakware 22:62f3bed03503 137 * @returns x (horizontal position)
rakware 22:62f3bed03503 138 * @returns y (vertical position)
rakware 22:62f3bed03503 139 *
rakware 22:62f3bed03503 140 */
rakware 22:62f3bed03503 141 void TP_GetAdXY(int *x,int *y);
rakware 22:62f3bed03503 142
rakware 22:62f3bed03503 143 /*
rakware 22:62f3bed03503 144 * Obtain raw single channel data from ADS7846 (Called by TP_GetADXY)
rakware 22:62f3bed03503 145 *
rakware 22:62f3bed03503 146 * @param channel to be read (CHX or CHY)
rakware 22:62f3bed03503 147 * @returns raw scaled down value (return value range must be between 0 and 1024)
rakware 22:62f3bed03503 148 *
rakware 22:62f3bed03503 149 */
rakware 22:62f3bed03503 150 int Read_XY(unsigned char XY);
rakware 22:62f3bed03503 151
rakware 22:62f3bed03503 152 /*
rakware 22:62f3bed03503 153 * Draw a calibration crosshair on the LCD screen
rakware 22:62f3bed03503 154 *
rakware 22:62f3bed03503 155 * @param x (horizontal position)
rakware 22:62f3bed03503 156 * @param y (vertical position)
rakware 22:62f3bed03503 157 *
rakware 22:62f3bed03503 158 */
rakware 22:62f3bed03503 159 void DrawCross(unsigned int Xpos,unsigned int Ypos);
rakware 22:62f3bed03503 160
rakware 22:62f3bed03503 161 /*
rakware 22:62f3bed03503 162 * Set the calibration matrix
rakware 22:62f3bed03503 163 *
rakware 22:62f3bed03503 164 * @param displayPTR (pointer to display data)
rakware 22:62f3bed03503 165 * @param screenPTR (pointer to screen data)
rakware 22:62f3bed03503 166 * @param matrixPTR (pointer to calibration matrix)
rakware 22:62f3bed03503 167 *
rakware 22:62f3bed03503 168 * @returns 0 when matrix.divider != 0
rakware 22:62f3bed03503 169 * @returns 1 when matrix.divider = 0
rakware 22:62f3bed03503 170 *
rakware 22:62f3bed03503 171 */
rakware 22:62f3bed03503 172 unsigned char setCalibrationMatrix( Coordinate * displayPtr,Coordinate * screenPtr,Matrix * matrixPtr);
rakware 22:62f3bed03503 173
rakware 22:62f3bed03503 174 };
rakware 22:62f3bed03503 175 #endif