Skip to content
Permalink
Browse files

Date: Sat, 10 Dec 2005 18:29:41 +0100

From: Alberto Mardegan <mardy@users.sourceforge.net>
To: sdl@libsdl.org
Subject: [SDL] [PATCH] Touchscreen support to fbcon via tslib


Hi all!

  I'm new to this list, I just subscribed. I've attached to this e-mail
a patch I've written in order to add Touchscreen support to SDL's fbcon
module via the tslib library.
Since it introduces a new dependency, I've also edited the the
configure.in file and added it as a compile-time option.

This patch is especially useful for handhelds (I've tested it in my
Zaurus).
Please consider applying it. :-)


--
Saluti,
    Mardy
http://interlingua.altervista.org
  • Loading branch information
icculus committed Dec 12, 2005
1 parent df90e80 commit 80edcd49d918c914a947a60d58211f1cd9e189c0
Showing with 81 additions and 0 deletions.
  1. +24 −0 configure.in
  2. +48 −0 src/video/fbcon/SDL_fbevents.c
  3. +9 −0 src/video/fbcon/SDL_fbvideo.h
@@ -1233,6 +1233,29 @@ CheckInputEvents()
fi
}

dnl See if we can use the Touchscreen input library
CheckTslib()
{
AC_ARG_ENABLE(input-tslib,
[ --enable-input-tslib use the Touchscreen library for input [default=yes]],
, enable_input_tslib=yes)
if test x$enable_input_tslib = xyes; then
AC_MSG_CHECKING(for Touchscreen library support)
enable_input_tslib=no
AC_TRY_COMPILE([
#include "tslib.h"
],[
],[
enable_input_tslib=yes
])
AC_MSG_RESULT($enable_input_tslib)
if test x$enable_input_tslib = xyes; then
CFLAGS="$CFLAGS -DHAVE_TSLIB"
SYSTEM_LIBS="$SYSTEM_LIBS -lts"
fi
fi
}

dnl See if we can use GNU pth library for threads
CheckPTH()
{
@@ -2078,6 +2101,7 @@ case "$target" in
CheckPicoGUI
CheckOpenGLX11
CheckInputEvents
CheckTslib
CheckPTHREAD
CheckSIGACTION
CheckAltivec
@@ -317,11 +317,19 @@ static enum {
MOUSE_MS,
MOUSE_BM,
MOUSE_ELO,
MOUSE_TSLIB,
NUM_MOUSE_DRVS
} mouse_drv = MOUSE_NONE;

void FB_CloseMouse(_THIS)
{
#ifdef HAVE_TSLIB
if (ts_dev != NULL) {
ts_close(ts_dev);
ts_dev = NULL;
mouse_fd = -1;
}
#endif /* HAVE_TSLIB */
if ( mouse_fd > 0 ) {
close(mouse_fd);
}
@@ -500,6 +508,25 @@ int FB_OpenMouse(_THIS)
mousedev = getenv("SDL_MOUSEDEV");
mouse_fd = -1;

#ifdef HAVE_TSLIB
if ((mousedrv != NULL) && (strcmp(mousedrv, "TSLIB") == 0)) {
if (mousedev == NULL) mousedev = getenv("TSLIB_TSDEVICE");
if (mousedev != NULL) {
ts_dev = ts_open(mousedev, 1);
if ((ts_dev != NULL) && (ts_config(ts_dev) >= 0)) {
#ifdef DEBUG_MOUSE
fprintf(stderr, "Using tslib touchscreen\n");
#endif
mouse_drv = MOUSE_TSLIB;
mouse_fd = ts_fd(ts_dev);
return mouse_fd;
}
}
mouse_drv = MOUSE_NONE;
return mouse_fd;
}
#endif /* HAVE_TSLIB */

/* ELO TOUCHSCREEN SUPPORT */

if( (mousedrv != NULL) && (strcmp(mousedrv, "ELO") == 0) ) {
@@ -642,6 +669,22 @@ void FB_vgamousecallback(int button, int relative, int dx, int dy)
}
}

/* Handle input from tslib */
#ifdef HAVE_TSLIB
static void handle_tslib(_THIS)
{
struct ts_sample sample;
int button;

while (ts_read(ts_dev, &sample, 1) > 0) {
button = (sample.pressure > 0) ? 1 : 0;
button <<= 2; /* must report it as button 3 */
FB_vgamousecallback(button, 0, sample.x, sample.y);
}
return;
}
#endif /* HAVE_TSLIB */

/* For now, use MSC, PS/2, and MS protocols
Driver adapted from the SVGAlib mouse driver code (taken from gpm, etc.)
*/
@@ -678,6 +721,11 @@ static void handle_mouse(_THIS)
packetsize = ELO_PACKET_SIZE;
relative = 0;
break;
case MOUSE_TSLIB:
#ifdef HAVE_TSLIB
handle_tslib(this);
#endif
return; /* nothing left to do */
case NUM_MOUSE_DRVS:
/* Uh oh.. */
packetsize = 0;
@@ -35,6 +35,9 @@ static char rcsid =
#include "SDL_mouse.h"
#include "SDL_mutex.h"
#include "SDL_sysvideo.h"
#ifdef HAVE_TSLIB
#include "tslib.h"
#endif

/* Hidden "this" pointer for the video functions */
#define _THIS SDL_VideoDevice *this
@@ -65,6 +68,9 @@ struct SDL_PrivateVideoData {
struct termios saved_kbd_termios;

int mouse_fd;
#ifdef HAVE_TSLIB
struct tsdev *ts_dev;
#endif

char *mapped_mem;
int mapped_memlen;
@@ -95,6 +101,9 @@ struct SDL_PrivateVideoData {
#define saved_kbd_mode (this->hidden->saved_kbd_mode)
#define saved_kbd_termios (this->hidden->saved_kbd_termios)
#define mouse_fd (this->hidden->mouse_fd)
#ifdef HAVE_TSLIB
#define ts_dev (this->hidden->ts_dev)
#endif /* HAVE_TSLIB */
#define cache_vinfo (this->hidden->cache_vinfo)
#define saved_vinfo (this->hidden->saved_vinfo)
#define saved_cmaplen (this->hidden->saved_cmaplen)

0 comments on commit 80edcd4

Please sign in to comment.