Library for MI0283QT-2 LCD
Touchlib.c@0:7ad454fed160, 2012-05-23 (annotated)
- Committer:
- clemente
- Date:
- Wed May 23 06:25:31 2012 +0000
- Revision:
- 0:7ad454fed160
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
clemente | 0:7ad454fed160 | 1 | /* mbed TouchScreen ADS7846 library. |
clemente | 0:7ad454fed160 | 2 | |
clemente | 0:7ad454fed160 | 3 | Copyright (c) 2011 NXP 3803 |
clemente | 0:7ad454fed160 | 4 | |
clemente | 0:7ad454fed160 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy |
clemente | 0:7ad454fed160 | 6 | of this software and associated documentation files (the "Software"), to deal |
clemente | 0:7ad454fed160 | 7 | in the Software without restriction, including without limitation the rights |
clemente | 0:7ad454fed160 | 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
clemente | 0:7ad454fed160 | 9 | copies of the Software, and to permit persons to whom the Software is |
clemente | 0:7ad454fed160 | 10 | furnished to do so, subject to the following conditions: |
clemente | 0:7ad454fed160 | 11 | |
clemente | 0:7ad454fed160 | 12 | The above copyright notice and this permission notice shall be included in |
clemente | 0:7ad454fed160 | 13 | all copies or substantial portions of the Software. |
clemente | 0:7ad454fed160 | 14 | |
clemente | 0:7ad454fed160 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
clemente | 0:7ad454fed160 | 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
clemente | 0:7ad454fed160 | 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
clemente | 0:7ad454fed160 | 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
clemente | 0:7ad454fed160 | 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
clemente | 0:7ad454fed160 | 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
clemente | 0:7ad454fed160 | 21 | THE SOFTWARE. |
clemente | 0:7ad454fed160 | 22 | */ |
clemente | 0:7ad454fed160 | 23 | |
clemente | 0:7ad454fed160 | 24 | #include "mbed.h" |
clemente | 0:7ad454fed160 | 25 | #include "string.h" |
clemente | 0:7ad454fed160 | 26 | #include "Touchlib.h" |
clemente | 0:7ad454fed160 | 27 | #include "calibrate.h" |
clemente | 0:7ad454fed160 | 28 | #include "crocino.h" |
clemente | 0:7ad454fed160 | 29 | |
clemente | 0:7ad454fed160 | 30 | /* */ |
clemente | 0:7ad454fed160 | 31 | unsigned char TSCmd[cTS_CMDSIZE] = { |
clemente | 0:7ad454fed160 | 32 | cTS_GETY, 0x00, cTS_GETY, 0x00, /* y */ |
clemente | 0:7ad454fed160 | 33 | cTS_GETZ1, 0x00, cTS_GETZ1, 0x00, /* z1 */ |
clemente | 0:7ad454fed160 | 34 | cTS_GETZ2, 0x00, cTS_GETZ2, 0x00, /* z2 */ |
clemente | 0:7ad454fed160 | 35 | cTS_GETX, 0x00, cTS_END, 0x00, 0x00 /* x */ |
clemente | 0:7ad454fed160 | 36 | }; |
clemente | 0:7ad454fed160 | 37 | |
clemente | 0:7ad454fed160 | 38 | #define cTS_SAMPLE 8 |
clemente | 0:7ad454fed160 | 39 | #define MODE12 0 |
clemente | 0:7ad454fed160 | 40 | |
clemente | 0:7ad454fed160 | 41 | POINT crocino_coord[3] = { |
clemente | 0:7ad454fed160 | 42 | {80,120}, |
clemente | 0:7ad454fed160 | 43 | {240,60}, |
clemente | 0:7ad454fed160 | 44 | {240,180} |
clemente | 0:7ad454fed160 | 45 | }; |
clemente | 0:7ad454fed160 | 46 | |
clemente | 0:7ad454fed160 | 47 | MATRIX TS_Matrix; |
clemente | 0:7ad454fed160 | 48 | |
clemente | 0:7ad454fed160 | 49 | unsigned char TSValue[cTS_CMDSIZE]; |
clemente | 0:7ad454fed160 | 50 | unsigned int tap_debounce; |
clemente | 0:7ad454fed160 | 51 | |
clemente | 0:7ad454fed160 | 52 | DigitalOut TS_DBG_LED(LED4); |
clemente | 0:7ad454fed160 | 53 | |
clemente | 0:7ad454fed160 | 54 | TOUCHS::TOUCHS( PinName mosi, PinName miso, PinName sclk, PinName cs, PinName penirq) : _spi( mosi, miso, sclk), _cs( cs), _penirq( penirq) { |
clemente | 0:7ad454fed160 | 55 | // defaults params |
clemente | 0:7ad454fed160 | 56 | |
clemente | 0:7ad454fed160 | 57 | } |
clemente | 0:7ad454fed160 | 58 | |
clemente | 0:7ad454fed160 | 59 | unsigned int TOUCHS::setcalibration( _TS_COORD *ts) |
clemente | 0:7ad454fed160 | 60 | { |
clemente | 0:7ad454fed160 | 61 | POINT screen[3]; |
clemente | 0:7ad454fed160 | 62 | /* from struct TS_COORD to struct POINT. */ |
clemente | 0:7ad454fed160 | 63 | screen[0].x=ts[0].x; |
clemente | 0:7ad454fed160 | 64 | screen[0].y=ts[0].y; |
clemente | 0:7ad454fed160 | 65 | screen[1].x=ts[1].x; |
clemente | 0:7ad454fed160 | 66 | screen[1].y=ts[1].y; |
clemente | 0:7ad454fed160 | 67 | screen[2].x=ts[2].x; |
clemente | 0:7ad454fed160 | 68 | screen[2].y=ts[2].y; |
clemente | 0:7ad454fed160 | 69 | /* Now start the calibration process. */ |
clemente | 0:7ad454fed160 | 70 | ts_val.calibration_done=!setCalibrationMatrix( &crocino_coord[0], &screen[0], &TS_Matrix); |
clemente | 0:7ad454fed160 | 71 | /* Return the result. */ |
clemente | 0:7ad454fed160 | 72 | return( ts_val.calibration_done); |
clemente | 0:7ad454fed160 | 73 | } |
clemente | 0:7ad454fed160 | 74 | |
clemente | 0:7ad454fed160 | 75 | unsigned int TOUCHS::calibrate( void) |
clemente | 0:7ad454fed160 | 76 | { |
clemente | 0:7ad454fed160 | 77 | POINT ts_tmp, coord; |
clemente | 0:7ad454fed160 | 78 | |
clemente | 0:7ad454fed160 | 79 | coord.x=ts_val.coord.x; |
clemente | 0:7ad454fed160 | 80 | coord.y=ts_val.coord.y; |
clemente | 0:7ad454fed160 | 81 | // see calibrate.c |
clemente | 0:7ad454fed160 | 82 | getDisplayPoint( &ts_tmp, &coord, &TS_Matrix); |
clemente | 0:7ad454fed160 | 83 | // |
clemente | 0:7ad454fed160 | 84 | ts_val.coord.x = ts_tmp.x; |
clemente | 0:7ad454fed160 | 85 | ts_val.coord.y = ts_tmp.y; |
clemente | 0:7ad454fed160 | 86 | |
clemente | 0:7ad454fed160 | 87 | return 0; |
clemente | 0:7ad454fed160 | 88 | } |
clemente | 0:7ad454fed160 | 89 | |
clemente | 0:7ad454fed160 | 90 | unsigned int TOUCHS::crocino_size( void) |
clemente | 0:7ad454fed160 | 91 | { |
clemente | 0:7ad454fed160 | 92 | return( cTS_CROCINO); |
clemente | 0:7ad454fed160 | 93 | } |
clemente | 0:7ad454fed160 | 94 | |
clemente | 0:7ad454fed160 | 95 | unsigned int TOUCHS::getcrocino_x( unsigned char idx) |
clemente | 0:7ad454fed160 | 96 | { |
clemente | 0:7ad454fed160 | 97 | if ( idx > 3) |
clemente | 0:7ad454fed160 | 98 | idx=3; |
clemente | 0:7ad454fed160 | 99 | |
clemente | 0:7ad454fed160 | 100 | return ( crocino_coord[idx].x); |
clemente | 0:7ad454fed160 | 101 | } |
clemente | 0:7ad454fed160 | 102 | |
clemente | 0:7ad454fed160 | 103 | unsigned int TOUCHS::getcrocino_y( unsigned char idx) |
clemente | 0:7ad454fed160 | 104 | { |
clemente | 0:7ad454fed160 | 105 | if ( idx > 3) |
clemente | 0:7ad454fed160 | 106 | idx=3; |
clemente | 0:7ad454fed160 | 107 | |
clemente | 0:7ad454fed160 | 108 | return ( crocino_coord[idx].y); |
clemente | 0:7ad454fed160 | 109 | } |
clemente | 0:7ad454fed160 | 110 | |
clemente | 0:7ad454fed160 | 111 | unsigned int TOUCHS::gettsmatrixsize( void) |
clemente | 0:7ad454fed160 | 112 | { |
clemente | 0:7ad454fed160 | 113 | return( sizeof( TS_Matrix)); |
clemente | 0:7ad454fed160 | 114 | } |
clemente | 0:7ad454fed160 | 115 | |
clemente | 0:7ad454fed160 | 116 | void TOUCHS::gettsmatrix( unsigned char *pmatrix) |
clemente | 0:7ad454fed160 | 117 | { |
clemente | 0:7ad454fed160 | 118 | |
clemente | 0:7ad454fed160 | 119 | *pmatrix++=((unsigned char*)&TS_Matrix.An)[0]; |
clemente | 0:7ad454fed160 | 120 | *pmatrix++=((unsigned char*)&TS_Matrix.An)[1]; |
clemente | 0:7ad454fed160 | 121 | *pmatrix++=((unsigned char*)&TS_Matrix.An)[2]; |
clemente | 0:7ad454fed160 | 122 | *pmatrix++=((unsigned char*)&TS_Matrix.An)[3]; |
clemente | 0:7ad454fed160 | 123 | *pmatrix++=((unsigned char*)&TS_Matrix.Bn)[0]; |
clemente | 0:7ad454fed160 | 124 | *pmatrix++=((unsigned char*)&TS_Matrix.Bn)[1]; |
clemente | 0:7ad454fed160 | 125 | *pmatrix++=((unsigned char*)&TS_Matrix.Bn)[2]; |
clemente | 0:7ad454fed160 | 126 | *pmatrix++=((unsigned char*)&TS_Matrix.Bn)[3]; |
clemente | 0:7ad454fed160 | 127 | *pmatrix++=((unsigned char*)&TS_Matrix.Cn)[0]; |
clemente | 0:7ad454fed160 | 128 | *pmatrix++=((unsigned char*)&TS_Matrix.Cn)[1]; |
clemente | 0:7ad454fed160 | 129 | *pmatrix++=((unsigned char*)&TS_Matrix.Cn)[2]; |
clemente | 0:7ad454fed160 | 130 | *pmatrix++=((unsigned char*)&TS_Matrix.Cn)[3]; |
clemente | 0:7ad454fed160 | 131 | *pmatrix++=((unsigned char*)&TS_Matrix.Dn)[0]; |
clemente | 0:7ad454fed160 | 132 | *pmatrix++=((unsigned char*)&TS_Matrix.Dn)[1]; |
clemente | 0:7ad454fed160 | 133 | *pmatrix++=((unsigned char*)&TS_Matrix.Dn)[2]; |
clemente | 0:7ad454fed160 | 134 | *pmatrix++=((unsigned char*)&TS_Matrix.Dn)[3]; |
clemente | 0:7ad454fed160 | 135 | *pmatrix++=((unsigned char*)&TS_Matrix.En)[0]; |
clemente | 0:7ad454fed160 | 136 | *pmatrix++=((unsigned char*)&TS_Matrix.En)[1]; |
clemente | 0:7ad454fed160 | 137 | *pmatrix++=((unsigned char*)&TS_Matrix.En)[2]; |
clemente | 0:7ad454fed160 | 138 | *pmatrix++=((unsigned char*)&TS_Matrix.En)[3]; |
clemente | 0:7ad454fed160 | 139 | *pmatrix++=((unsigned char*)&TS_Matrix.Fn)[0]; |
clemente | 0:7ad454fed160 | 140 | *pmatrix++=((unsigned char*)&TS_Matrix.Fn)[1]; |
clemente | 0:7ad454fed160 | 141 | *pmatrix++=((unsigned char*)&TS_Matrix.Fn)[2]; |
clemente | 0:7ad454fed160 | 142 | *pmatrix++=((unsigned char*)&TS_Matrix.Fn)[3]; |
clemente | 0:7ad454fed160 | 143 | *pmatrix++=((unsigned char*)&TS_Matrix.Divider)[0]; |
clemente | 0:7ad454fed160 | 144 | *pmatrix++=((unsigned char*)&TS_Matrix.Divider)[1]; |
clemente | 0:7ad454fed160 | 145 | *pmatrix++=((unsigned char*)&TS_Matrix.Divider)[2]; |
clemente | 0:7ad454fed160 | 146 | *pmatrix++=((unsigned char*)&TS_Matrix.Divider)[3]; |
clemente | 0:7ad454fed160 | 147 | |
clemente | 0:7ad454fed160 | 148 | } |
clemente | 0:7ad454fed160 | 149 | |
clemente | 0:7ad454fed160 | 150 | void TOUCHS::settsmatrix( unsigned char *pmatrix) |
clemente | 0:7ad454fed160 | 151 | { |
clemente | 0:7ad454fed160 | 152 | |
clemente | 0:7ad454fed160 | 153 | ((unsigned char*)&TS_Matrix.An)[0]=*pmatrix++; |
clemente | 0:7ad454fed160 | 154 | ((unsigned char*)&TS_Matrix.An)[1]=*pmatrix++; |
clemente | 0:7ad454fed160 | 155 | ((unsigned char*)&TS_Matrix.An)[2]=*pmatrix++; |
clemente | 0:7ad454fed160 | 156 | ((unsigned char*)&TS_Matrix.An)[3]=*pmatrix++; |
clemente | 0:7ad454fed160 | 157 | ((unsigned char*)&TS_Matrix.Bn)[0]=*pmatrix++; |
clemente | 0:7ad454fed160 | 158 | ((unsigned char*)&TS_Matrix.Bn)[1]=*pmatrix++; |
clemente | 0:7ad454fed160 | 159 | ((unsigned char*)&TS_Matrix.Bn)[2]=*pmatrix++; |
clemente | 0:7ad454fed160 | 160 | ((unsigned char*)&TS_Matrix.Bn)[3]=*pmatrix++; |
clemente | 0:7ad454fed160 | 161 | ((unsigned char*)&TS_Matrix.Cn)[0]=*pmatrix++; |
clemente | 0:7ad454fed160 | 162 | ((unsigned char*)&TS_Matrix.Cn)[1]=*pmatrix++; |
clemente | 0:7ad454fed160 | 163 | ((unsigned char*)&TS_Matrix.Cn)[2]=*pmatrix++; |
clemente | 0:7ad454fed160 | 164 | ((unsigned char*)&TS_Matrix.Cn)[3]=*pmatrix++; |
clemente | 0:7ad454fed160 | 165 | ((unsigned char*)&TS_Matrix.Dn)[0]=*pmatrix++; |
clemente | 0:7ad454fed160 | 166 | ((unsigned char*)&TS_Matrix.Dn)[1]=*pmatrix++; |
clemente | 0:7ad454fed160 | 167 | ((unsigned char*)&TS_Matrix.Dn)[2]=*pmatrix++; |
clemente | 0:7ad454fed160 | 168 | ((unsigned char*)&TS_Matrix.Dn)[3]=*pmatrix++; |
clemente | 0:7ad454fed160 | 169 | ((unsigned char*)&TS_Matrix.En)[0]=*pmatrix++; |
clemente | 0:7ad454fed160 | 170 | ((unsigned char*)&TS_Matrix.En)[1]=*pmatrix++; |
clemente | 0:7ad454fed160 | 171 | ((unsigned char*)&TS_Matrix.En)[2]=*pmatrix++; |
clemente | 0:7ad454fed160 | 172 | ((unsigned char*)&TS_Matrix.En)[3]=*pmatrix++; |
clemente | 0:7ad454fed160 | 173 | ((unsigned char*)&TS_Matrix.Fn)[0]=*pmatrix++; |
clemente | 0:7ad454fed160 | 174 | ((unsigned char*)&TS_Matrix.Fn)[1]=*pmatrix++; |
clemente | 0:7ad454fed160 | 175 | ((unsigned char*)&TS_Matrix.Fn)[2]=*pmatrix++; |
clemente | 0:7ad454fed160 | 176 | ((unsigned char*)&TS_Matrix.Fn)[3]=*pmatrix++; |
clemente | 0:7ad454fed160 | 177 | ((unsigned char*)&TS_Matrix.Divider)[0]=*pmatrix++; |
clemente | 0:7ad454fed160 | 178 | ((unsigned char*)&TS_Matrix.Divider)[1]=*pmatrix++; |
clemente | 0:7ad454fed160 | 179 | ((unsigned char*)&TS_Matrix.Divider)[2]=*pmatrix++; |
clemente | 0:7ad454fed160 | 180 | ((unsigned char*)&TS_Matrix.Divider)[3]=*pmatrix++; |
clemente | 0:7ad454fed160 | 181 | |
clemente | 0:7ad454fed160 | 182 | ts_val.calibration_done=1; |
clemente | 0:7ad454fed160 | 183 | |
clemente | 0:7ad454fed160 | 184 | } |
clemente | 0:7ad454fed160 | 185 | |
clemente | 0:7ad454fed160 | 186 | void TOUCHS::init( void) |
clemente | 0:7ad454fed160 | 187 | { |
clemente | 0:7ad454fed160 | 188 | _spi.format( 8, BUS_MODE); |
clemente | 0:7ad454fed160 | 189 | _spi.frequency( TS_SPEED); |
clemente | 0:7ad454fed160 | 190 | |
clemente | 0:7ad454fed160 | 191 | } |
clemente | 0:7ad454fed160 | 192 | |
clemente | 0:7ad454fed160 | 193 | |
clemente | 0:7ad454fed160 | 194 | void TOUCHS::do_tap( void) |
clemente | 0:7ad454fed160 | 195 | { |
clemente | 0:7ad454fed160 | 196 | unsigned int i, x, y; |
clemente | 0:7ad454fed160 | 197 | |
clemente | 0:7ad454fed160 | 198 | if ( TOUCHS::pressure() && ts_val.touched==0) { |
clemente | 0:7ad454fed160 | 199 | printf("press: %d\r\n", tap_debounce ); |
clemente | 0:7ad454fed160 | 200 | tap_debounce++; |
clemente | 0:7ad454fed160 | 201 | if ( tap_debounce>= cTS_DEBOUNCE) { |
clemente | 0:7ad454fed160 | 202 | tap_debounce=0; |
clemente | 0:7ad454fed160 | 203 | ts_val.touched=1; |
clemente | 0:7ad454fed160 | 204 | for ( i=4, x=0,y=0; i!=0; i--) { |
clemente | 0:7ad454fed160 | 205 | TOUCHS::read( &ts_val.coord); |
clemente | 0:7ad454fed160 | 206 | x+=ts_val.coord.x; |
clemente | 0:7ad454fed160 | 207 | y+=ts_val.coord.y; |
clemente | 0:7ad454fed160 | 208 | } |
clemente | 0:7ad454fed160 | 209 | ts_val.coord.x=x>>2; |
clemente | 0:7ad454fed160 | 210 | ts_val.coord.y=y>>2; |
clemente | 0:7ad454fed160 | 211 | // If the calibration process was successful complited... |
clemente | 0:7ad454fed160 | 212 | if ( ts_val.calibration_done) { |
clemente | 0:7ad454fed160 | 213 | // ...run the convertion from touch to screen coord. |
clemente | 0:7ad454fed160 | 214 | TOUCHS::calibrate(); |
clemente | 0:7ad454fed160 | 215 | } |
clemente | 0:7ad454fed160 | 216 | } |
clemente | 0:7ad454fed160 | 217 | } |
clemente | 0:7ad454fed160 | 218 | } |
clemente | 0:7ad454fed160 | 219 | |
clemente | 0:7ad454fed160 | 220 | unsigned int TOUCHS::pressure( void) |
clemente | 0:7ad454fed160 | 221 | { |
clemente | 0:7ad454fed160 | 222 | unsigned char pressure; |
clemente | 0:7ad454fed160 | 223 | unsigned char iZ2, iZ1; |
clemente | 0:7ad454fed160 | 224 | |
clemente | 0:7ad454fed160 | 225 | _spi.frequency( TS_SPEED); |
clemente | 0:7ad454fed160 | 226 | |
clemente | 0:7ad454fed160 | 227 | _cs = 0; /* Seleziono il CS del TS */ |
clemente | 0:7ad454fed160 | 228 | |
clemente | 0:7ad454fed160 | 229 | _spi.write( 0xB0); |
clemente | 0:7ad454fed160 | 230 | iZ1 = _spi.write( 0x00); |
clemente | 0:7ad454fed160 | 231 | // |
clemente | 0:7ad454fed160 | 232 | _spi.write( 0xC0); |
clemente | 0:7ad454fed160 | 233 | iZ2 = 127-_spi.write( 0x00); |
clemente | 0:7ad454fed160 | 234 | _cs = 1; /* De-Seleziono il CS del TS */ |
clemente | 0:7ad454fed160 | 235 | |
clemente | 0:7ad454fed160 | 236 | pressure=iZ1+iZ2; |
clemente | 0:7ad454fed160 | 237 | |
clemente | 0:7ad454fed160 | 238 | if ( pressure > 3) { |
clemente | 0:7ad454fed160 | 239 | // ts_val.touched=1; |
clemente | 0:7ad454fed160 | 240 | return( 1); |
clemente | 0:7ad454fed160 | 241 | } else { |
clemente | 0:7ad454fed160 | 242 | // ts_val.touched=0; |
clemente | 0:7ad454fed160 | 243 | return( 0); |
clemente | 0:7ad454fed160 | 244 | } |
clemente | 0:7ad454fed160 | 245 | |
clemente | 0:7ad454fed160 | 246 | } |
clemente | 0:7ad454fed160 | 247 | |
clemente | 0:7ad454fed160 | 248 | /* Read the value from the touch. Write the raw value inside the struct TS_COORD. */ |
clemente | 0:7ad454fed160 | 249 | void TOUCHS::read( _TS_COORD *ts) |
clemente | 0:7ad454fed160 | 250 | { |
clemente | 0:7ad454fed160 | 251 | unsigned int i, idx; |
clemente | 0:7ad454fed160 | 252 | unsigned int iZ1, iZ2; |
clemente | 0:7ad454fed160 | 253 | |
clemente | 0:7ad454fed160 | 254 | _spi.frequency( TS_SPEED); |
clemente | 0:7ad454fed160 | 255 | |
clemente | 0:7ad454fed160 | 256 | idx=0; |
clemente | 0:7ad454fed160 | 257 | while( 1) { |
clemente | 0:7ad454fed160 | 258 | // |
clemente | 0:7ad454fed160 | 259 | i=0; |
clemente | 0:7ad454fed160 | 260 | _cs = 0; /* Assert the CS */ |
clemente | 0:7ad454fed160 | 261 | |
clemente | 0:7ad454fed160 | 262 | while ( i<cTS_CMDSIZE) { |
clemente | 0:7ad454fed160 | 263 | TSValue[i] = _spi.write( TSCmd[i]); |
clemente | 0:7ad454fed160 | 264 | /* */ |
clemente | 0:7ad454fed160 | 265 | i++; |
clemente | 0:7ad454fed160 | 266 | } |
clemente | 0:7ad454fed160 | 267 | |
clemente | 0:7ad454fed160 | 268 | _cs = 1; /* Deasser the CS */ |
clemente | 0:7ad454fed160 | 269 | |
clemente | 0:7ad454fed160 | 270 | /* */ |
clemente | 0:7ad454fed160 | 271 | ts->x = ((unsigned int)TSValue[15]<<5) | (TSValue[16]>>3); |
clemente | 0:7ad454fed160 | 272 | ts->y = ((unsigned int)TSValue[3]<<5) | (TSValue[4]>>3); |
clemente | 0:7ad454fed160 | 273 | iZ2 = ((unsigned int)TSValue[11]<<5) | (TSValue[12]>>3); |
clemente | 0:7ad454fed160 | 274 | iZ1 = ((unsigned int)TSValue[7]<<5) | (TSValue[8]>>3); |
clemente | 0:7ad454fed160 | 275 | ts->z = (int)(330.0 * (((double)ts->x)/4096.0)*((((double)iZ2)/((double)iZ1))-1.0)); |
clemente | 0:7ad454fed160 | 276 | |
clemente | 0:7ad454fed160 | 277 | /* Reduce the value to 10bit */ |
clemente | 0:7ad454fed160 | 278 | ts->y = (ts->y >> MODE12); |
clemente | 0:7ad454fed160 | 279 | ts->x = (ts->x >> MODE12); |
clemente | 0:7ad454fed160 | 280 | |
clemente | 0:7ad454fed160 | 281 | idx++; |
clemente | 0:7ad454fed160 | 282 | if ( ts->z < 10000 || idx>10) |
clemente | 0:7ad454fed160 | 283 | break; |
clemente | 0:7ad454fed160 | 284 | } |
clemente | 0:7ad454fed160 | 285 | } |
clemente | 0:7ad454fed160 | 286 |