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