Modified to work with two displays

Dependents:   touch2 default CANary_9341_test CANary_merge

Fork of Touch_tft by Peter Drescher

Committer:
TickTock
Date:
Sun May 18 12:45:30 2014 +0000
Revision:
16:bee053b17977
Parent:
15:f2165aa0daa6
Works with both controllers using precompiler directive

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dreschpe 0:d78b00f167cb 1 /* mbed library for resistive touch pads
dreschpe 0:d78b00f167cb 2 * uses 4 pins - 2 IO and 2 Analog
dreschpe 0:d78b00f167cb 3
dreschpe 0:d78b00f167cb 4 * c 2011 Peter Drescher - DC2PD
dreschpe 0:d78b00f167cb 5 *
dreschpe 0:d78b00f167cb 6 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
dreschpe 0:d78b00f167cb 7 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
dreschpe 0:d78b00f167cb 8 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
dreschpe 0:d78b00f167cb 9 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
dreschpe 0:d78b00f167cb 10 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
dreschpe 0:d78b00f167cb 11 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
dreschpe 0:d78b00f167cb 12 * THE SOFTWARE.
dreschpe 0:d78b00f167cb 13 */
dreschpe 0:d78b00f167cb 14
dreschpe 0:d78b00f167cb 15
TickTock 3:3db7309b6146 16 #include "TOUCH_TFTx2.h"
dreschpe 0:d78b00f167cb 17 #include "mbed.h"
TickTock 13:220e3da2dd00 18 #include "Arial12x12.h"
dreschpe 0:d78b00f167cb 19
TickTock 6:a91b668b058a 20 #define threshold 0x8000 // threshold to detect pressed
TickTock 7:9cc43f20e365 21 #define accuracy 1000 // noise filter
TickTock 5:a9890c586a64 22 #define numsamp 16 // number of averaging samples
dreschpe 0:d78b00f167cb 23
TickTock 16:bee053b17977 24 #if USE_ILI9341== 1
TickTock 3:3db7309b6146 25 TOUCH_TFTx2::TOUCH_TFTx2(PinName xp, PinName xm, PinName yp, PinName ym,
TickTock 16:bee053b17977 26 PinName mosi, PinName miso, PinName sclk, PinName cs0,
TickTock 16:bee053b17977 27 PinName cs1, PinName reset, PinName dc,
TickTock 16:bee053b17977 28 const char* name):
dreschpe 0:d78b00f167cb 29 _xp(xp),_xm(xm),_yp(yp),_ym(ym),_ax(xp),_ay(yp),
TickTock 16:bee053b17977 30 SPI_TFTx2_ILI9341(mosi,miso,sclk,cs0,cs1,reset,dc,name) {
dreschpe 0:d78b00f167cb 31 xa = xp;
dreschpe 0:d78b00f167cb 32 ya = yp;
dreschpe 0:d78b00f167cb 33 }
TickTock 16:bee053b17977 34 #else
TickTock 16:bee053b17977 35 TOUCH_TFTx2::TOUCH_TFTx2(PinName xp, PinName xm, PinName yp, PinName ym,
TickTock 16:bee053b17977 36 PinName mosi, PinName miso, PinName sclk, PinName cs0,
TickTock 16:bee053b17977 37 PinName cs1, PinName reset,
TickTock 16:bee053b17977 38 const char* name):
TickTock 16:bee053b17977 39 _xp(xp),_xm(xm),_yp(yp),_ym(ym),_ax(xp),_ay(yp),
TickTock 16:bee053b17977 40 SPI_TFTx2(mosi,miso,sclk,cs0,cs1,reset,name) {
TickTock 16:bee053b17977 41 xa = xp;
TickTock 16:bee053b17977 42 ya = yp;
TickTock 16:bee053b17977 43 }
TickTock 16:bee053b17977 44 #endif
dreschpe 0:d78b00f167cb 45
TickTock 3:3db7309b6146 46 point TOUCH_TFTx2::get_touch() {
TickTock 7:9cc43f20e365 47 unsigned short x1, x2=0, y1, y2=0, i=0, j=0, k;
TickTock 5:a9890c586a64 48 unsigned long dy , dx, xs1=0, ys1=0, xs2=0, ys2=0;
dreschpe 0:d78b00f167cb 49 point p;
dreschpe 0:d78b00f167cb 50
TickTock 5:a9890c586a64 51 for (k=0; j<numsamp; k++) {
dreschpe 0:d78b00f167cb 52 // read y voltage
TickTock 4:a3cd26c97b76 53 _ym.input(); //LAJ y- has to be passive
TickTock 4:a3cd26c97b76 54 _yp.input(); //LAJ y+ has to be passive
dreschpe 0:d78b00f167cb 55 _xp.output();
dreschpe 0:d78b00f167cb 56 _xm.output();
dreschpe 0:d78b00f167cb 57 switch (orientation) {
dreschpe 0:d78b00f167cb 58 case(0):
dreschpe 0:d78b00f167cb 59 case(3):
dreschpe 0:d78b00f167cb 60 _xp = 1;
dreschpe 0:d78b00f167cb 61 _xm = 0;
dreschpe 0:d78b00f167cb 62 break;
dreschpe 0:d78b00f167cb 63 case(1):
dreschpe 0:d78b00f167cb 64 case(2):
dreschpe 0:d78b00f167cb 65 _xp = 0;
dreschpe 0:d78b00f167cb 66 _xm = 1;
dreschpe 0:d78b00f167cb 67 break;
dreschpe 0:d78b00f167cb 68 }
dreschpe 0:d78b00f167cb 69 AnalogIn Ay(ya); // we have to call the constructor to switch to analog mode
dreschpe 0:d78b00f167cb 70 wait_us(10);
dreschpe 0:d78b00f167cb 71 y1 = Ay.read_u16(); // get y voltage
TickTock 5:a9890c586a64 72 dy = (y1 > y2)? (y1-y2) : (y2-y1);
dreschpe 0:d78b00f167cb 73 y2 = y1;
dreschpe 0:d78b00f167cb 74
dreschpe 0:d78b00f167cb 75 // read x voltage
TickTock 4:a3cd26c97b76 76 _xm.input(); //LAJ x- has to be passive
TickTock 4:a3cd26c97b76 77 _xp.input(); //LAJ x+ has to be passive
dreschpe 0:d78b00f167cb 78 _yp.output();
dreschpe 0:d78b00f167cb 79 _ym.output();
dreschpe 0:d78b00f167cb 80 switch (orientation) {
dreschpe 0:d78b00f167cb 81 case(0):
dreschpe 0:d78b00f167cb 82 case(1):
dreschpe 0:d78b00f167cb 83 _yp = 1;
dreschpe 0:d78b00f167cb 84 _ym = 0;
dreschpe 0:d78b00f167cb 85 break;
dreschpe 0:d78b00f167cb 86 case(2):
dreschpe 0:d78b00f167cb 87 case(3):
dreschpe 0:d78b00f167cb 88 _yp = 0;
dreschpe 0:d78b00f167cb 89 _ym = 1;
dreschpe 0:d78b00f167cb 90 break;
dreschpe 0:d78b00f167cb 91 }
dreschpe 0:d78b00f167cb 92 AnalogIn Ax(xa); // we have to call the constructor to switch to analog mode
dreschpe 0:d78b00f167cb 93 wait_us(10);
dreschpe 0:d78b00f167cb 94 x1 = Ax.read_u16(); // get x voltage
TickTock 5:a9890c586a64 95 dx = (x1 > x2)? (x1-x2) : (x2-x1);
dreschpe 0:d78b00f167cb 96 x2 = x1;
TickTock 5:a9890c586a64 97 if(dy<accuracy && dx<accuracy) {
TickTock 8:fd0abf6a7f59 98 if(k<numsamp/2){
TickTock 5:a9890c586a64 99 xs1 += x1;
TickTock 5:a9890c586a64 100 ys1 += y1;
TickTock 5:a9890c586a64 101 i++;
TickTock 5:a9890c586a64 102 } else {
TickTock 5:a9890c586a64 103 xs2 += x1;
TickTock 5:a9890c586a64 104 ys2 += y1;
TickTock 5:a9890c586a64 105 j++;
TickTock 5:a9890c586a64 106 }
TickTock 5:a9890c586a64 107 }
TickTock 5:a9890c586a64 108 } // for:next
TickTock 5:a9890c586a64 109 xs1 = xs1 / i;
TickTock 5:a9890c586a64 110 ys1 = ys1 / i;
TickTock 5:a9890c586a64 111 xs2 = xs2 / j;
TickTock 5:a9890c586a64 112 ys2 = ys2 / j;
TickTock 5:a9890c586a64 113 dy = (ys1 > ys2)? (ys1-ys2) : (ys2-ys1);
TickTock 5:a9890c586a64 114 dx = (xs1 > xs2)? (xs1-xs2) : (xs2-xs1);
TickTock 5:a9890c586a64 115 if(dy<accuracy && dx<accuracy) {
TickTock 5:a9890c586a64 116
TickTock 5:a9890c586a64 117 switch (orientation) {
TickTock 5:a9890c586a64 118 case(0):
TickTock 5:a9890c586a64 119 case(2):
TickTock 5:a9890c586a64 120 p.y = (xs1+xs2) / 2; // average
TickTock 5:a9890c586a64 121 p.x = (ys1+ys2) / 2;
TickTock 5:a9890c586a64 122 break;
TickTock 5:a9890c586a64 123 case(1):
TickTock 5:a9890c586a64 124 case(3):
TickTock 5:a9890c586a64 125 p.x = (xs1+xs2) / 2; // average
TickTock 5:a9890c586a64 126 p.y = (ys1+ys2) / 2;
TickTock 5:a9890c586a64 127 break;
TickTock 5:a9890c586a64 128 }
TickTock 5:a9890c586a64 129 } else { // sample average moved too much so discard
TickTock 7:9cc43f20e365 130 p.x = 65535;
TickTock 7:9cc43f20e365 131 p.y = 65535;
dreschpe 0:d78b00f167cb 132 }
TickTock 5:a9890c586a64 133 // debug
TickTock 14:c58c98c5020a 134 //locate(1,160);
TickTock 14:c58c98c5020a 135 //printf("d: %4d x: %5d",dx,p.x);
TickTock 14:c58c98c5020a 136 //locate(1,200);
TickTock 5:a9890c586a64 137 //printf("d: %4d y: %5d",dy,p.y);
TickTock 5:a9890c586a64 138 //wait(0.25);
TickTock 6:a91b668b058a 139 wfi(); //enable touchpad input
dreschpe 0:d78b00f167cb 140 return(p);
TickTock 5:a9890c586a64 141 }//*/
dreschpe 0:d78b00f167cb 142
TickTock 7:9cc43f20e365 143
TickTock 7:9cc43f20e365 144
TickTock 7:9cc43f20e365 145 point TOUCH_TFTx2::to_pixel(point a_point) {
TickTock 7:9cc43f20e365 146 static point p;
TickTock 7:9cc43f20e365 147
TickTock 7:9cc43f20e365 148 if (a_point.x < x_mid) { // left screen
TickTock 7:9cc43f20e365 149 p.x = (a_point.x - x0_off) / x0_pp + 3;
TickTock 7:9cc43f20e365 150 if (p.x > width()-1) p.x = width()-1;
TickTock 7:9cc43f20e365 151 p.y = (a_point.y - y0_off) / y0_pp + 3;
TickTock 7:9cc43f20e365 152 }else{ // right screen
TickTock 7:9cc43f20e365 153 p.x = (a_point.x - x1_off) / x1_pp + 3;
TickTock 7:9cc43f20e365 154 if (p.x > width()-1) p.x = 2*width()-1;
TickTock 7:9cc43f20e365 155 else p.x += width(); // add width to indicate right screen
TickTock 7:9cc43f20e365 156 p.y = (a_point.y - y1_off) / y1_pp + 3;
TickTock 7:9cc43f20e365 157 }
TickTock 7:9cc43f20e365 158 if (p.y > height()-1) p.y = height()-1;
TickTock 7:9cc43f20e365 159 //locate(1,60); //debug
TickTock 7:9cc43f20e365 160 //printf("x: %d\ty: %d",p.x,p.y);
TickTock 7:9cc43f20e365 161 return (p);
TickTock 7:9cc43f20e365 162 }
TickTock 7:9cc43f20e365 163
TickTock 7:9cc43f20e365 164 bool TOUCH_TFTx2::is_touched(void) {
TickTock 7:9cc43f20e365 165 unsigned short y1;
TickTock 7:9cc43f20e365 166 // read y voltage
TickTock 7:9cc43f20e365 167 _xm.input(); //x- has to be passive
TickTock 7:9cc43f20e365 168 _xp.input(); //x+ has to be passive
TickTock 7:9cc43f20e365 169 _xm.mode(PullDown);
TickTock 7:9cc43f20e365 170 _xp.mode(PullDown);
TickTock 7:9cc43f20e365 171 _yp.output();
TickTock 7:9cc43f20e365 172 _ym.output();
TickTock 7:9cc43f20e365 173 _yp = 1; //drive y+ high
TickTock 7:9cc43f20e365 174 _ym = 1; //drive y- high
TickTock 7:9cc43f20e365 175 AnalogIn Ay(xa); // we have to call the constructor to switch to analog mode
TickTock 7:9cc43f20e365 176 wait_us(10);
TickTock 7:9cc43f20e365 177 y1 = Ay.read_u16(); // get y voltage
TickTock 7:9cc43f20e365 178 return (y1>threshold);
TickTock 7:9cc43f20e365 179 }
TickTock 7:9cc43f20e365 180
TickTock 7:9cc43f20e365 181 void TOUCH_TFTx2::wfi(void) {
TickTock 7:9cc43f20e365 182 _xm.input(); //x- has to be passive
TickTock 7:9cc43f20e365 183 _xp.input(); //x+ has to be passive
TickTock 7:9cc43f20e365 184 _xm.mode(PullDown);
TickTock 7:9cc43f20e365 185 _xp.mode(PullDown);
TickTock 7:9cc43f20e365 186 _yp.output();
TickTock 7:9cc43f20e365 187 _ym.output();
TickTock 7:9cc43f20e365 188 _yp = 1; //drive y+ high
TickTock 7:9cc43f20e365 189 _ym = 1; //drive y- high
TickTock 7:9cc43f20e365 190 }
TickTock 7:9cc43f20e365 191
TickTock 10:fd7ae99850a9 192 void TOUCH_TFTx2::setcal(int _x0off, int _y0off, int _x0pp, int _y0pp, int _x1off, int _y1off, int _x1pp, int _y1pp, int _xmid) {
TickTock 10:fd7ae99850a9 193 x0_off = _x0off;
TickTock 10:fd7ae99850a9 194 y0_off = _y0off;
TickTock 10:fd7ae99850a9 195 x0_pp = _x0pp;
TickTock 10:fd7ae99850a9 196 y0_pp = _y0pp;
TickTock 10:fd7ae99850a9 197 x1_off = _x1off;
TickTock 10:fd7ae99850a9 198 y1_off = _y1off;
TickTock 10:fd7ae99850a9 199 x1_pp = _x1pp;
TickTock 10:fd7ae99850a9 200 y1_pp = _y1pp;
TickTock 10:fd7ae99850a9 201 x_mid = _xmid;
TickTock 10:fd7ae99850a9 202 }
TickTock 10:fd7ae99850a9 203
TickTock 3:3db7309b6146 204 void TOUCH_TFTx2::calibrate(void) {
dreschpe 0:d78b00f167cb 205 int i;
TickTock 5:a9890c586a64 206 int ulx0 = 0, uly0 = 0, brx0 = 0, bry0 = 0;
TickTock 5:a9890c586a64 207 int ulx1 = 0, uly1 = 0, brx1 = 0, bry1 = 0;
dreschpe 2:ef7972c29c0e 208 int pos_x, pos_y;
dreschpe 0:d78b00f167cb 209 point p;
TickTock 11:ce7ae1584207 210 seldisp=1; // select right display
TickTock 13:220e3da2dd00 211 set_font((unsigned char*) Arial12x12);
TickTock 13:220e3da2dd00 212 foreground(White);
TickTock 13:220e3da2dd00 213 background(Black);
TickTock 11:ce7ae1584207 214 cls();
TickTock 11:ce7ae1584207 215 line(0,3,6,3,White);
TickTock 11:ce7ae1584207 216 line(3,0,3,6,White);
TickTock 11:ce7ae1584207 217
TickTock 11:ce7ae1584207 218 // get the center of the screen
TickTock 11:ce7ae1584207 219 pos_x = columns() / 2 - 3;
TickTock 11:ce7ae1584207 220 pos_x = pos_x * font[1];
TickTock 11:ce7ae1584207 221 pos_y = (rows() / 2) - 1;
TickTock 11:ce7ae1584207 222 pos_y = pos_y * font[2];
TickTock 6:a91b668b058a 223
TickTock 11:ce7ae1584207 224 //calibrate right screen
TickTock 11:ce7ae1584207 225 locate(pos_x,pos_y);
TickTock 11:ce7ae1584207 226 printf("press cross");
TickTock 11:ce7ae1584207 227 locate(pos_x,pos_y + font[2]);
TickTock 11:ce7ae1584207 228 printf("to calibrate");
TickTock 11:ce7ae1584207 229 do {
TickTock 11:ce7ae1584207 230 wait(0.1);
TickTock 11:ce7ae1584207 231 } while (!is_touched()); //Wait for touch
TickTock 11:ce7ae1584207 232 for (i=0; i<5; i++) {
TickTock 6:a91b668b058a 233 do {
TickTock 11:ce7ae1584207 234 p = get_touch();
TickTock 11:ce7ae1584207 235 } while (p.x==0 && p.y==0);
TickTock 11:ce7ae1584207 236 ulx1 += p.x;
TickTock 11:ce7ae1584207 237 uly1 += p.y;
TickTock 11:ce7ae1584207 238 }
TickTock 11:ce7ae1584207 239 ulx1 /= 5;
TickTock 11:ce7ae1584207 240 uly1 /= 5;
TickTock 11:ce7ae1584207 241 locate(pos_x,pos_y);
TickTock 11:ce7ae1584207 242 printf("OK ");
TickTock 11:ce7ae1584207 243 printf(" ");
TickTock 11:ce7ae1584207 244 do {
TickTock 11:ce7ae1584207 245 wait(0.1);
TickTock 11:ce7ae1584207 246 } while (is_touched()); //Wait for no touch
TickTock 11:ce7ae1584207 247
TickTock 11:ce7ae1584207 248 cls();
TickTock 11:ce7ae1584207 249 line(width() -1, height() - 4,width() - 7,height() -4,White); // paint cross
TickTock 11:ce7ae1584207 250 line(width() - 4,height() - 1,width() - 4,height() - 7,White);
TickTock 11:ce7ae1584207 251 locate(pos_x,pos_y);
TickTock 11:ce7ae1584207 252 printf("press cross");
TickTock 11:ce7ae1584207 253 locate(pos_x,pos_y + font[2]);
TickTock 11:ce7ae1584207 254 printf("to calibrate");
TickTock 11:ce7ae1584207 255 do {
TickTock 11:ce7ae1584207 256 wait(0.1);
TickTock 11:ce7ae1584207 257 } while (!is_touched()); //Wait for touch
TickTock 11:ce7ae1584207 258 for (i=0; i<5; i++) {
TickTock 6:a91b668b058a 259 do {
TickTock 11:ce7ae1584207 260 p = get_touch();
TickTock 11:ce7ae1584207 261 } while (p.x==0 && p.y==0); p = get_touch();
TickTock 11:ce7ae1584207 262 brx1 += p.x;
TickTock 11:ce7ae1584207 263 bry1 += p.y;
TickTock 11:ce7ae1584207 264 }
TickTock 11:ce7ae1584207 265 brx1 /= 5;
TickTock 11:ce7ae1584207 266 bry1 /= 5;
TickTock 11:ce7ae1584207 267
TickTock 11:ce7ae1584207 268 locate(pos_x, pos_y);
TickTock 11:ce7ae1584207 269 printf("OK ");
TickTock 11:ce7ae1584207 270 printf(" ");
TickTock 11:ce7ae1584207 271 do {
TickTock 11:ce7ae1584207 272 wait(0.1);
TickTock 11:ce7ae1584207 273 } while (is_touched()); //Wait for no touch
TickTock 11:ce7ae1584207 274
TickTock 11:ce7ae1584207 275 cls();
TickTock 11:ce7ae1584207 276 seldisp=0; // select left display
TickTock 11:ce7ae1584207 277 cls();
TickTock 11:ce7ae1584207 278 line(0,3,6,3,White);
TickTock 11:ce7ae1584207 279 line(3,0,3,6,White);
TickTock 11:ce7ae1584207 280
TickTock 11:ce7ae1584207 281 // now calibrate left screen
TickTock 11:ce7ae1584207 282 locate(pos_x,pos_y);
TickTock 11:ce7ae1584207 283 printf("press cross");
TickTock 11:ce7ae1584207 284 locate(pos_x,pos_y + font[2]);
TickTock 11:ce7ae1584207 285 printf("to calibrate");
TickTock 11:ce7ae1584207 286 do {
TickTock 11:ce7ae1584207 287 wait(0.1);
TickTock 11:ce7ae1584207 288 } while (!is_touched()); //Wait for touch
TickTock 11:ce7ae1584207 289 for (i=0; i<5; i++) {
TickTock 6:a91b668b058a 290 do {
TickTock 11:ce7ae1584207 291 p = get_touch();
TickTock 11:ce7ae1584207 292 } while (p.x==0 && p.y==0);
TickTock 11:ce7ae1584207 293 ulx0 += p.x;
TickTock 11:ce7ae1584207 294 uly0 += p.y;
TickTock 11:ce7ae1584207 295 }
TickTock 11:ce7ae1584207 296 ulx0 /= 5;
TickTock 11:ce7ae1584207 297 uly0 /= 5;
TickTock 11:ce7ae1584207 298 locate(pos_x,pos_y);
TickTock 11:ce7ae1584207 299 printf("OK ");
TickTock 11:ce7ae1584207 300 printf(" ");
TickTock 11:ce7ae1584207 301 do {
TickTock 11:ce7ae1584207 302 wait(0.1);
TickTock 11:ce7ae1584207 303 } while (is_touched()); //Wait for no touch
TickTock 11:ce7ae1584207 304
TickTock 11:ce7ae1584207 305 cls();
TickTock 11:ce7ae1584207 306 line(width() -1, height() - 4,width() - 7,height() -4,White); // paint cross
TickTock 11:ce7ae1584207 307 line(width() - 4,height() - 1,width() - 4,height() - 7,White);
TickTock 11:ce7ae1584207 308 locate(pos_x,pos_y);
TickTock 11:ce7ae1584207 309 printf("press cross");
TickTock 11:ce7ae1584207 310 locate(pos_x,pos_y + font[2]);
TickTock 11:ce7ae1584207 311 printf("to calibrate");
TickTock 11:ce7ae1584207 312 do {
TickTock 11:ce7ae1584207 313 wait(0.1);
TickTock 11:ce7ae1584207 314 } while (!is_touched()); //Wait for touch
TickTock 11:ce7ae1584207 315 for (i=0; i<5; i++) {
TickTock 11:ce7ae1584207 316 do {
TickTock 11:ce7ae1584207 317 p = get_touch();
TickTock 11:ce7ae1584207 318 } while (p.x==0 && p.y==0);
TickTock 11:ce7ae1584207 319 brx0 += p.x;
TickTock 11:ce7ae1584207 320 bry0 += p.y;
TickTock 11:ce7ae1584207 321 }
TickTock 11:ce7ae1584207 322 brx0 /= 5;
TickTock 11:ce7ae1584207 323 bry0 /= 5;
TickTock 11:ce7ae1584207 324
TickTock 11:ce7ae1584207 325 locate(pos_x, pos_y);
TickTock 11:ce7ae1584207 326 printf("OK ");
TickTock 11:ce7ae1584207 327 printf(" ");
TickTock 11:ce7ae1584207 328 do {
TickTock 11:ce7ae1584207 329 wait(0.1);
TickTock 11:ce7ae1584207 330 } while (is_touched()); //Wait for no touch
TickTock 11:ce7ae1584207 331
TickTock 11:ce7ae1584207 332 cls();
TickTock 11:ce7ae1584207 333
TickTock 11:ce7ae1584207 334 x0_off = ulx0;
TickTock 11:ce7ae1584207 335 y0_off = uly0;
TickTock 11:ce7ae1584207 336 x0_pp = (brx0-ulx0) / (width() - 6);
TickTock 11:ce7ae1584207 337 y0_pp = (bry0-uly0) / (height() - 6);
TickTock 6:a91b668b058a 338
TickTock 6:a91b668b058a 339
TickTock 11:ce7ae1584207 340 x1_off = ulx1;
TickTock 11:ce7ae1584207 341 y1_off = uly1;
TickTock 11:ce7ae1584207 342 x1_pp = (brx1-ulx1) / (width() - 6);
TickTock 11:ce7ae1584207 343 y1_pp = (bry1-uly1) / (height() - 6);
TickTock 11:ce7ae1584207 344 x_mid = (brx0 + ulx1) / 2;
TickTock 11:ce7ae1584207 345 //debug
TickTock 11:ce7ae1584207 346 //printf("x0_off:%d y0_off:%d x0_pp:%d y0_pp:%d\n",x0_off,y0_off,x0_pp,y0_pp);
TickTock 11:ce7ae1584207 347 //printf("x1_off:%d y1_off:%d x1_pp:%d y1_pp:%d\n",x1_off,y1_off,x1_pp,y1_pp);
TickTock 11:ce7ae1584207 348 //printf("x_mid:%d\n",x_mid);
dreschpe 0:d78b00f167cb 349 }