touch screen handler for the microchip AR1020

Committer:
hlipka
Date:
Tue Feb 22 21:43:39 2011 +0000
Revision:
1:264ad2a00fd9
Child:
3:b7eb3b3fe79f

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hlipka 1:264ad2a00fd9 1 /*
hlipka 1:264ad2a00fd9 2 * mbed AR1020 library
hlipka 1:264ad2a00fd9 3 * Copyright (c) 2010 Hendrik Lipka
hlipka 1:264ad2a00fd9 4 *
hlipka 1:264ad2a00fd9 5 * Permission is hereby granted, free of charge, to any person obtaining a copy
hlipka 1:264ad2a00fd9 6 * of this software and associated documentation files (the "Software"), to deal
hlipka 1:264ad2a00fd9 7 * in the Software without restriction, including without limitation the rights
hlipka 1:264ad2a00fd9 8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
hlipka 1:264ad2a00fd9 9 * copies of the Software, and to permit persons to whom the Software is
hlipka 1:264ad2a00fd9 10 * furnished to do so, subject to the following conditions:
hlipka 1:264ad2a00fd9 11 *
hlipka 1:264ad2a00fd9 12 * The above copyright notice and this permission notice shall be included in
hlipka 1:264ad2a00fd9 13 * all copies or substantial portions of the Software.
hlipka 1:264ad2a00fd9 14 *
hlipka 1:264ad2a00fd9 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
hlipka 1:264ad2a00fd9 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
hlipka 1:264ad2a00fd9 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
hlipka 1:264ad2a00fd9 18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
hlipka 1:264ad2a00fd9 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
hlipka 1:264ad2a00fd9 20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
hlipka 1:264ad2a00fd9 21 * THE SOFTWARE.
hlipka 1:264ad2a00fd9 22 */
hlipka 1:264ad2a00fd9 23
hlipka 1:264ad2a00fd9 24 #include "AreaTouchHandler.h"
hlipka 1:264ad2a00fd9 25 #include "touchevent.h"
hlipka 1:264ad2a00fd9 26
hlipka 1:264ad2a00fd9 27 using namespace std;
hlipka 1:264ad2a00fd9 28
hlipka 1:264ad2a00fd9 29 uint32_t AreaTouchHandler::down(uint32_t arg)
hlipka 1:264ad2a00fd9 30 {
hlipka 1:264ad2a00fd9 31 TouchEvent *te=(TouchEvent*)arg;
hlipka 1:264ad2a00fd9 32 _x=te->x;
hlipka 1:264ad2a00fd9 33 _y=te->y;
hlipka 1:264ad2a00fd9 34 _samples=1;
hlipka 1:264ad2a00fd9 35 int c=findCommand();
hlipka 1:264ad2a00fd9 36 _called=false;
hlipka 1:264ad2a00fd9 37 if (0!=c)
hlipka 1:264ad2a00fd9 38 {
hlipka 1:264ad2a00fd9 39 _called=true;
hlipka 1:264ad2a00fd9 40 _callback.call(c);
hlipka 1:264ad2a00fd9 41 }
hlipka 1:264ad2a00fd9 42 return 0;
hlipka 1:264ad2a00fd9 43 }
hlipka 1:264ad2a00fd9 44 uint32_t AreaTouchHandler::move(uint32_t arg)
hlipka 1:264ad2a00fd9 45 {
hlipka 1:264ad2a00fd9 46 if (_called)
hlipka 1:264ad2a00fd9 47 return 0;
hlipka 1:264ad2a00fd9 48 TouchEvent *te=(TouchEvent*)arg;
hlipka 1:264ad2a00fd9 49 printf("%i\n",te->y);
hlipka 1:264ad2a00fd9 50 _x=(te->x+_x*_samples)/(_samples+1);
hlipka 1:264ad2a00fd9 51 _y=(te->y+_y*_samples)/(_samples+1);
hlipka 1:264ad2a00fd9 52 _samples++;
hlipka 1:264ad2a00fd9 53 int c=findCommand();
hlipka 1:264ad2a00fd9 54 if (0!=c)
hlipka 1:264ad2a00fd9 55 {
hlipka 1:264ad2a00fd9 56 _called=true;
hlipka 1:264ad2a00fd9 57 _callback.call(c);
hlipka 1:264ad2a00fd9 58 }
hlipka 1:264ad2a00fd9 59 return 0;
hlipka 1:264ad2a00fd9 60 }
hlipka 1:264ad2a00fd9 61 uint32_t AreaTouchHandler::up(uint32_t arg)
hlipka 1:264ad2a00fd9 62 {
hlipka 1:264ad2a00fd9 63 printf("up\n");
hlipka 1:264ad2a00fd9 64 _x=0;
hlipka 1:264ad2a00fd9 65 _y=0;
hlipka 1:264ad2a00fd9 66 _samples=0;
hlipka 1:264ad2a00fd9 67 _called=false;
hlipka 1:264ad2a00fd9 68 return 0;
hlipka 1:264ad2a00fd9 69 }
hlipka 1:264ad2a00fd9 70
hlipka 1:264ad2a00fd9 71 int AreaTouchHandler::findCommand()
hlipka 1:264ad2a00fd9 72 {
hlipka 1:264ad2a00fd9 73 if (_called)
hlipka 1:264ad2a00fd9 74 return 0;
hlipka 1:264ad2a00fd9 75 if (_samples<3)
hlipka 1:264ad2a00fd9 76 return 0;
hlipka 1:264ad2a00fd9 77 printf("%f\n",_y);
hlipka 1:264ad2a00fd9 78 for (list<area*>::iterator it = _areas.begin(); it != _areas.end(); it++) {
hlipka 1:264ad2a00fd9 79 area* a=*it;
hlipka 1:264ad2a00fd9 80 if (_x>=a->left && _x<=a->right && _y>=a->top && _y<=a->bottom)
hlipka 1:264ad2a00fd9 81 return a->command;
hlipka 1:264ad2a00fd9 82 }
hlipka 1:264ad2a00fd9 83 printf(".\n");
hlipka 1:264ad2a00fd9 84 return 0;
hlipka 1:264ad2a00fd9 85 }