From edc9cefb719ace028059cb1d911795ca7a42899d Mon Sep 17 00:00:00 2001 From: Jim Grandpre Date: Fri, 28 May 2010 01:26:52 -0400 Subject: [PATCH] Added reading of event* for touch events. --- include/SDL_events.h | 2 + src/events/SDL_events.c | 1 + src/events/SDL_touch.c | 183 +++++++++++++++++++-------------- src/events/SDL_touch_c.h | 24 +++-- src/video/x11/SDL_eventtouch.h | 42 ++++++++ src/video/x11/SDL_x11events.c | 68 +++++++++++- src/video/x11/SDL_x11video.h | 1 + touchTest/makefile | 2 + touchTest/touchPong | Bin 29171 -> 29203 bytes touchTest/touchSimp | Bin 28976 -> 29012 bytes touchTest/touchSimp.c | 4 + touchTest/touchTest.c | 168 ++++++++++++++++++++++++++++++ 12 files changed, 407 insertions(+), 88 deletions(-) create mode 100644 src/video/x11/SDL_eventtouch.h create mode 100644 touchTest/touchTest.c diff --git a/include/SDL_events.h b/include/SDL_events.h index 87096d1d6..150f3305c 100644 --- a/include/SDL_events.h +++ b/include/SDL_events.h @@ -310,6 +310,8 @@ typedef struct SDL_TouchFingerEvent Uint8 state; /**< The current button state */ Uint8 fingerId; Uint8 padding1; + int x; + int y; } SDL_TouchFingerEvent; diff --git a/src/events/SDL_events.c b/src/events/SDL_events.c index e99a55d93..ae82171b9 100644 --- a/src/events/SDL_events.c +++ b/src/events/SDL_events.c @@ -254,6 +254,7 @@ SDL_StartEventLoop(Uint32 flags) retcode = 0; retcode += SDL_KeyboardInit(); retcode += SDL_MouseInit(); + retcode += SDL_TouchInit(); retcode += SDL_QuitInit(); if (retcode < 0) { /* We don't expect them to fail, but... */ diff --git a/src/events/SDL_touch.c b/src/events/SDL_touch.c index 88505daec..cce06c586 100644 --- a/src/events/SDL_touch.c +++ b/src/events/SDL_touch.c @@ -36,8 +36,15 @@ static SDL_Touch **SDL_touchPads = NULL; int SDL_TouchInit(void) { + SDL_Touch touch; + touch.pressure_max = 0; + touch.pressure_min = 0; + touch.id = 0; //Should be function? + + SDL_AddTouch(&touch, "Touch1"); return (0); } + SDL_Touch * SDL_GetTouch(int id) { @@ -48,13 +55,13 @@ SDL_GetTouch(int id) return SDL_touchPads[index]; } -SDL_Finger * -SDL_GetFinger(SDL_Touch* touch,int id) +SDL_Touch * +SDL_GetTouchIndex(int index) { - int index = SDL_GetFingerIndexId(touch,id); - if(index < 0 || index >= touch->num_fingers) - return NULL; - return touch->fingers[index]; + if (index < 0 || index >= SDL_num_touch) { + return NULL; + } + return SDL_touchPads[index]; } int @@ -67,6 +74,17 @@ SDL_GetFingerIndexId(SDL_Touch* touch,int fingerid) return -1; } + +SDL_Finger * +SDL_GetFinger(SDL_Touch* touch,int id) +{ + int index = SDL_GetFingerIndexId(touch,id); + if(index < 0 || index >= touch->num_fingers) + return NULL; + return touch->fingers[index]; +} + + int SDL_GetTouchIndexId(int id) { @@ -83,8 +101,7 @@ SDL_GetTouchIndexId(int id) } int -SDL_AddTouch(const SDL_Touch * touch, char *name, int pressure_max, - int pressure_min, int ends) +SDL_AddTouch(const SDL_Touch * touch, char *name) { SDL_Touch **touchPads; int selected_touch; @@ -118,11 +135,13 @@ SDL_AddTouch(const SDL_Touch * touch, char *name, int pressure_max, length = SDL_strlen(name); SDL_touchPads[index]->focus = 0; SDL_touchPads[index]->name = SDL_malloc((length + 2) * sizeof(char)); - SDL_strlcpy(SDL_touchPads[index]->name, name, length + 1); - SDL_touchPads[index]->pressure_max = pressure_max; - SDL_touchPads[index]->pressure_min = pressure_min; - + SDL_strlcpy(SDL_touchPads[index]->name, name, length + 1); + SDL_touchPads[index]->num_fingers = 0; + SDL_touchPads[index]->buttonstate = 0; + SDL_touchPads[index]->relative_mode = SDL_FALSE; + SDL_touchPads[index]->flush_motion = SDL_FALSE; + return index; } @@ -239,7 +258,7 @@ SDL_AddFinger(SDL_Touch* touch,SDL_Finger* finger) if (SDL_GetFingerIndexId(touch,finger->id) != -1) { SDL_SetError("Finger ID already in use"); - } + } /* Add the touch to the list of touch */ fingers = (SDL_Finger **) SDL_realloc(touch->fingers, @@ -250,7 +269,7 @@ SDL_AddFinger(SDL_Touch* touch,SDL_Finger* finger) } touch->fingers = fingers; - index = SDL_num_touch++; + index = touch->num_fingers++; touch->fingers[index] = (SDL_Finger *) SDL_malloc(sizeof(*(touch->fingers[index]))); if (!touch->fingers[index]) { @@ -265,7 +284,7 @@ SDL_AddFinger(SDL_Touch* touch,SDL_Finger* finger) int SDL_DelFinger(SDL_Touch* touch,int fingerid) { - int index = SLD_GetFingerIndexId(touch,fingerid); + int index = SDL_GetFingerIndexId(touch,fingerid); SDL_Finger* finger = SDL_GetFinger(touch,fingerid); if (!finger) { @@ -282,6 +301,7 @@ SDL_DelFinger(SDL_Touch* touch,int fingerid) int SDL_SendFingerDown(int id, int fingerid, SDL_bool down, int x, int y, int pressure) { + int posted; SDL_Touch* touch = SDL_GetTouch(id); if(down) { SDL_Finger nf; @@ -300,9 +320,11 @@ SDL_SendFingerDown(int id, int fingerid, SDL_bool down, int x, int y, int pressu SDL_Event event; event.tfinger.type = SDL_FINGERDOWN; event.tfinger.touchId = (Uint8) id; + event.tfinger.x = x; + event.tfinger.y = y; event.tfinger.state = touch->buttonstate; event.tfinger.windowID = touch->focus ? touch->focus->id : 0; - event.fingerId = id; + event.tfinger.fingerId = id; posted = (SDL_PushEvent(&event) > 0); } return posted; @@ -316,7 +338,7 @@ SDL_SendFingerDown(int id, int fingerid, SDL_bool down, int x, int y, int pressu event.tfinger.touchId = (Uint8) id; event.tfinger.state = touch->buttonstate; event.tfinger.windowID = touch->focus ? touch->focus->id : 0; - event.fingerId = id; + event.tfinger.fingerId = id; posted = (SDL_PushEvent(&event) > 0); } return posted; @@ -339,69 +361,76 @@ SDL_SendTouchMotion(int id, int fingerid, int relative, return 0; } - /* the relative motion is calculated regarding the system cursor last position */ - if (relative) { - xrel = x; - yrel = y; - x = (finger->last_x + x); - y = (finger->last_y + y); - } else { - xrel = x - finger->last_x; - yrel = y - finger->last_y; - } - - /* Drop events that don't change state */ - if (!xrel && !yrel) { + if(finger == NULL) + SDL_SendFingerDown(id,fingerid,SDL_TRUE,x,y,pressure); + else { + /* the relative motion is calculated regarding the last position */ + if (relative) { + xrel = x; + yrel = y; + x = (finger->last_x + x); + y = (finger->last_y + y); + } else { + if(x < 0) x = finger->last_x; /*If movement is only in one axis,*/ + if(y < 0) y = finger->last_y; /*The other is marked as -1*/ + xrel = x - finger->last_x; + yrel = y - finger->last_y; + } + + /* Drop events that don't change state */ + if (!xrel && !yrel) { #if 0 - printf("Touch event didn't change state - dropped!\n"); + printf("Touch event didn't change state - dropped!\n"); #endif - return 0; - } - - /* Update internal touch coordinates */ - - finger->x = x; - finger->y = y; - - /*Should scale to window? Normalize? Maintain Aspect?*/ - //SDL_GetWindowSize(touch->focus, &x_max, &y_max); - - /* make sure that the pointers find themselves inside the windows */ - /* only check if touch->xmax is set ! */ - /* - if (x_max && touch->x > x_max) { - touch->x = x_max; - } else if (touch->x < 0) { - touch->x = 0; - } - - if (y_max && touch->y > y_max) { - touch->y = y_max; - } else if (touch->y < 0) { - touch->y = 0; - } - */ - finger->xdelta += xrel; - finger->ydelta += yrel; - finger->pressure = pressure; - - - - /* Post the event, if desired */ - posted = 0; - if (SDL_GetEventState(SDL_FINGERMOTION) == SDL_ENABLE) { - SDL_Event event; - event.tfinger.type = SDL_FINGERMOTION; - event.tfinger.which = (Uint8) index; - event.tfinger.state = touch->buttonstate; - event.tfinger.windowID = touch->focus ? touch->focus->id : 0; - posted = (SDL_PushEvent(&event) > 0); + return 0; + } + + /* Update internal touch coordinates */ + + finger->x = x; + finger->y = y; + + /*Should scale to window? Normalize? Maintain Aspect?*/ + //SDL_GetWindowSize(touch->focus, &x_max, &y_max); + + /* make sure that the pointers find themselves inside the windows */ + /* only check if touch->xmax is set ! */ + /* + if (x_max && touch->x > x_max) { + touch->x = x_max; + } else if (touch->x < 0) { + touch->x = 0; + } + + if (y_max && touch->y > y_max) { + touch->y = y_max; + } else if (touch->y < 0) { + touch->y = 0; + } + */ + finger->xdelta += xrel; + finger->ydelta += yrel; + finger->pressure = pressure; + + + + /* Post the event, if desired */ + posted = 0; + if (SDL_GetEventState(SDL_FINGERMOTION) == SDL_ENABLE) { + SDL_Event event; + event.tfinger.type = SDL_FINGERMOTION; + event.tfinger.touchId = (Uint8) index; + event.tfinger.x = x; + event.tfinger.y = y; + event.tfinger.state = touch->buttonstate; + event.tfinger.windowID = touch->focus ? touch->focus->id : 0; + posted = (SDL_PushEvent(&event) > 0); + } + finger->last_x = finger->x; + finger->last_y = finger->y; + return posted; } - finger->last_x = finger->x; - finger->last_y = finger->y; - return posted; } - int SDL_SendTouchButton(int id, Uint8 state, Uint8 button) { @@ -441,7 +470,7 @@ SDL_SendTouchButton(int id, Uint8 state, Uint8 button) if (SDL_GetEventState(type) == SDL_ENABLE) { SDL_Event event; event.type = type; - event.tbutton.which = (Uint8) index; + event.tbutton.touchId = (Uint8) index; event.tbutton.state = state; event.tbutton.button = button; event.tbutton.windowID = touch->focus ? touch->focus->id : 0; diff --git a/src/events/SDL_touch_c.h b/src/events/SDL_touch_c.h index fdc221d79..6a0ebf62d 100644 --- a/src/events/SDL_touch_c.h +++ b/src/events/SDL_touch_c.h @@ -51,9 +51,6 @@ struct SDL_Touch int tilt; /* for future use */ int rotation; /* for future use */ - int total_ends; - int current_end; - /* Data common to all touch */ int id; SDL_Window *focus; @@ -73,14 +70,23 @@ struct SDL_Touch /* Initialize the touch subsystem */ extern int SDL_TouchInit(void); -/* Get the touch at an index */ -extern SDL_Touch *SDL_GetTouch(int index); +/*Get the touch at an index */ +extern SDL_Touch *SDL_GetTouchIndex(int index); + +/* Get the touch with id = id */ +extern SDL_Touch *SDL_GetTouch(int id); + +/*Get the finger at an index */ +extern SDL_Finger *SDL_GetFingerIndex(SDL_Touch *touch, int index); + +/* Get the finger with id = id */ +extern SDL_Finger *SDL_GetFinger(SDL_Touch *touch,int id); + /* Add a touch, possibly reattaching at a particular index (or -1), - returning the index of the touch, or -1 if there was an error. - */ -extern int SDL_AddTouch(const SDL_Touch * touch, char *name, - int pressure_max, int pressure_min, int ends); + returning the index of the touch, or -1 if there was an error. */ +extern int SDL_AddTouch(const SDL_Touch * touch, char *name); + /* Remove a touch at an index, clearing the slot for later */ extern void SDL_DelTouch(int index); diff --git a/src/video/x11/SDL_eventtouch.h b/src/video/x11/SDL_eventtouch.h new file mode 100644 index 000000000..44227318c --- /dev/null +++ b/src/video/x11/SDL_eventtouch.h @@ -0,0 +1,42 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2010 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ +#include "SDL_config.h" + +#ifndef _SDL_eventtouch_h +#define _SDL_eventtouch_h + + +//What should this be? +#if SDL_VIDEO_DRIVER_X11_XINPUT +typedef struct EventTouchData +{ + int x,y,pressure,finger; //Temporary Variables until sync + int eventStream; +} EventTouchData; +#endif + +//extern void X11_InitMouse(_THIS); +//extern void X11_QuitMouse(_THIS); + +#endif /* _SDL_eventtouch_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/video/x11/SDL_x11events.c b/src/video/x11/SDL_x11events.c index c65c67d83..c095a4d64 100644 --- a/src/video/x11/SDL_x11events.c +++ b/src/video/x11/SDL_x11events.c @@ -28,9 +28,16 @@ #include "SDL_x11video.h" #include "../../events/SDL_events_c.h" #include "../../events/SDL_mouse_c.h" +#include "../../events/SDL_touch_c.h" #include "SDL_syswm.h" +#include + +//Touch Input/event* includes +#include +#include + static void X11_DispatchEvent(_THIS) { @@ -410,8 +417,65 @@ X11_PumpEvents(_THIS) } - /* Process Touch events - TODO When X gets touch support, REMOVE THIS*/ - + /* Process Touch events - TODO When X gets touch support, use that instead*/ + int i = 0,rd; + char * name[256]; + struct input_event ev[64]; + int size = sizeof (struct input_event); + static int initd = 0; //TODO - HACK! + for(i = 0;i < SDL_GetNumTouch();++i) { + SDL_Touch* touch = SDL_GetTouchIndex(i); + if(!touch) printf("Touch %i/%i DNE\n",i,SDL_GetNumTouch()); + EventTouchData* data; + if(!initd){//data->eventStream <= 0) { + touch->driverdata = SDL_malloc(sizeof(EventTouchData)); + data = (EventTouchData*)(touch->driverdata); + printf("Openning device...\n"); + data->eventStream = open("/dev/input/wacom-touch", + O_RDONLY | O_NONBLOCK); + ioctl (data->eventStream, EVIOCGNAME (sizeof (name)), name); + printf ("Reading From : %s\n", name); + initd = 1; + } + else + data = (EventTouchData*)(touch->driverdata); + if(data->eventStream <= 0) + printf("Error: Couldn't open stream\n"); + rd = read(data->eventStream, ev, size * 64); + //printf("Got %i/%i bytes\n",rd,size); + if(rd >= size) { + for (i = 0; i < rd / sizeof(struct input_event); i++) { + switch (ev[i].type) { + case EV_ABS: + //printf("Got position x: %i!\n",data->x); + if(ev[i].code == ABS_X) + data->x = ev[i].value; + else if (ev[i].code == ABS_Y) + data->y = ev[i].value; + break; + case EV_MSC: + if(ev[i].code == MSC_SERIAL) + data->finger = ev[i].value; + break; + case EV_SYN: + data->finger -= 1; /*Wacom indexes fingers from 1, + I index from 0*/ + if(data->x >= 0 || data->y >= 0) + SDL_SendTouchMotion(touch->id,data->finger, + SDL_FALSE,data->x,data->y, + data->pressure); + + //printf("Synched: %i tx: %i, ty: %i\n", + // data->finger,data->x,data->y); + data->x = -1; + data->y = -1; + data->pressure = -1; + + break; + } + } + } + } } /* This is so wrong it hurts */ diff --git a/src/video/x11/SDL_x11video.h b/src/video/x11/SDL_x11video.h index 1ba0ba392..bf82547f8 100644 --- a/src/video/x11/SDL_x11video.h +++ b/src/video/x11/SDL_x11video.h @@ -53,6 +53,7 @@ #include "SDL_x11keyboard.h" #include "SDL_x11modes.h" #include "SDL_x11mouse.h" +#include "SDL_eventtouch.h" #include "SDL_x11opengl.h" #include "SDL_x11window.h" diff --git a/touchTest/makefile b/touchTest/makefile index 820205541..a244a2982 100644 --- a/touchTest/makefile +++ b/touchTest/makefile @@ -1,3 +1,5 @@ SDLTest : touchSimp.c touchPong.c + gcc touchTest.c -o touchTest `sdl-config --cflags --libs` -g gcc touchSimp.c -o touchSimp `sdl-config --cflags --libs` -g gcc touchPong.c -o touchPong `sdl-config --cflags --libs` -g + diff --git a/touchTest/touchPong b/touchTest/touchPong index 16303ab5275a16d28c5fde83735805b32427c8f4..d2f1862cc97da9ed0cf7c9e26d5fd98846589489 100755 GIT binary patch delta 3652 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 TM`JC1zf&FfZSL7Ux5E8@k9M1{ delta 3645 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 diff --git a/touchTest/touchSimp.c b/touchTest/touchSimp.c index cc3ff292b..fb02a7b8d 100644 --- a/touchTest/touchSimp.c +++ b/touchTest/touchSimp.c @@ -186,6 +186,10 @@ int main(int argc, char* argv[]) case SDL_MOUSEBUTTONUP: bstatus &= ~(1<<(event.button.button-1)); break; + case SDL_FINGERMOTION: + printf("Holy SH!T\n"); + break; + } } diff --git a/touchTest/touchTest.c b/touchTest/touchTest.c new file mode 100644 index 000000000..2c6d926a6 --- /dev/null +++ b/touchTest/touchTest.c @@ -0,0 +1,168 @@ +#include +#include +#include +#include "../src/events/SDL_touch_c.h" //BAD!!! + +#define PI 3.1415926535897 +#define WIDTH 640 +#define HEIGHT 480 +#define BPP 4 +#define DEPTH 32 + +int mousx,mousy; +int keystat[512]; +int bstatus; + + + + +typedef struct { + int x,y; +} Point; + +void handler (int sig) +{ + printf ("\nexiting...(%d)\n", sig); + exit (0); +} + +void perror_exit (char *error) +{ + perror (error); + handler (9); +} + + +void setpix(SDL_Surface *screen, int x, int y, int col) +{ + Uint32 *pixmem32; + Uint32 colour; + + if((unsigned)x > screen->w) return; + if((unsigned)y > screen->h) return; + + colour = SDL_MapRGB( screen->format, (col>>16)&0xFF, (col>>8)&0xFF, col&0xFF); + + pixmem32 = (Uint32*) screen->pixels + y*screen->pitch/BPP + x; + *pixmem32 = colour; +} + +void drawCircle(SDL_Surface* screen,int x,int y,int r,int c) +{ + + float a; + for(a=0;a<2*PI;a+=1.f/(float)r) + { + setpix(screen,(int)(x+r*cos(a)),(int)(y+r*sin(a)),c); + } +} + +void DrawScreen(SDL_Surface* screen, int h) +{ + int x, y, xm,ym,c; + if(SDL_MUSTLOCK(screen)) + { + if(SDL_LockSurface(screen) < 0) return; + } + for(y = 0; y < screen->h; y++ ) + { + for( x = 0; x < screen->w; x++ ) + { + //setpixel(screen, x, y, (x*x)/256+3*y+h, (y*y)/256+x+h, h); + //xm = (x+h)%screen->w; + //ym = (y+h)%screen->w; + //c = sin(h/256*2*PI)*x*y/screen->w/screen->h; + //setpix(screen,x,y,255*sin(xm/screen->w*2*PI),sin(h/255*2*PI)*255*y/screen->h,c); + setpix(screen,x,y,((x%255)<<16) + ((y%255)<<8) + (x+y)%255); + } + } + drawCircle(screen,mousx,mousy,30,0xFFFFFF); + + + if(SDL_MUSTLOCK(screen)) SDL_UnlockSurface(screen); + + SDL_Flip(screen); +} + +SDL_Surface* initScreen(int width,int height) +{ + return SDL_SetVideoMode(width, height, DEPTH, + SDL_HWSURFACE | SDL_RESIZABLE); +} + +int main(int argc, char* argv[]) +{ + SDL_Surface *screen; + SDL_Event event; + + int keypress = 0; + int h=0,s=1,i,j; + + memset(keystat,0,512*sizeof(keystat[0])); + if (SDL_Init(SDL_INIT_VIDEO) < 0 ) return 1; + + if (!(screen = initScreen(WIDTH,HEIGHT))) + { + SDL_Quit(); + return 1; + } + + while(!keystat[27]) { + //Poll SDL + while(SDL_PollEvent(&event)) + { + switch (event.type) + { + case SDL_QUIT: + keystat[27] = 1; + break; + case SDL_KEYDOWN: + //printf("%i\n",event.key.keysym.sym); + keystat[event.key.keysym.sym] = 1; + //keypress = 1; + break; + case SDL_KEYUP: + //printf("%i\n",event.key.keysym.sym); + keystat[event.key.keysym.sym] = 0; + //keypress = 1; + break; + case SDL_VIDEORESIZE: + if (!(screen = initScreen(event.resize.w, + event.resize.h))) + { + SDL_Quit(); + return 1; + } + break; + case SDL_MOUSEMOTION: + mousx = event.motion.x; + mousy = event.motion.y; + break; + case SDL_MOUSEBUTTONDOWN: + bstatus |= (1<<(event.button.button-1)); + break; + case SDL_MOUSEBUTTONUP: + bstatus &= ~(1<<(event.button.button-1)); + break; + case SDL_FINGERMOTION: + i = 1; + + + printf("Finger: %i,x: %i, y: %i\n",event.tfinger.fingerId, + event.tfinger.x,event.tfinger.y); + + break; + } + } + //And draw + DrawScreen(screen,h); + /* + for(i=0;i<512;i++) + if(keystat[i]) printf("%i\n",i); + printf("Buttons:%i\n",bstatus); + */ + } + SDL_Quit(); + + return 0; +}