diff options
author | Sascha Hlusiak <saschahlusiak@arcor.de> | 2007-04-15 22:51:35 -0400 |
---|---|---|
committer | Sascha Hlusiak <saschahlusiak@arcor.de> | 2007-04-15 22:51:35 -0400 |
commit | 470acec6f440cf3cb1dc5ddcb056f717d74ccbef (patch) | |
tree | f2ccef146690f0a1b70e4d8853ea1124509977a6 | |
parent | 886e418b89ac673df3e4be0f7a4b1b8c648cad80 (diff) |
Cosmetic changes to structs, got rid of XFree86LOADER blocks
The XFree86LOADER is mandatory, without it it wouldn't compile anyway, so checks were deleted.
Named structs in jstk.h again
Added unions for mapping-relative data, given values more telling names
-rw-r--r-- | configure.ac | 32 | ||||
-rw-r--r-- | man/joystick.man | 3 | ||||
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/jstk.c | 59 | ||||
-rw-r--r-- | src/jstk.h | 85 | ||||
-rw-r--r-- | src/jstk_axis.c | 18 | ||||
-rw-r--r-- | src/jstk_hw.h | 2 | ||||
-rw-r--r-- | src/jstk_options.c | 8 |
8 files changed, 92 insertions, 117 deletions
diff --git a/configure.ac b/configure.ac index d90be0f..c4dea3b 100644 --- a/configure.ac +++ b/configure.ac @@ -22,7 +22,7 @@ AC_PREREQ(2.57) AC_INIT([xf86-input-joystick], - 1.2.0, + 1.2.1, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xf86-input-joystick) @@ -44,24 +44,6 @@ AC_PROG_CC AH_TOP([#include "xorg-server.h"]) -#AC_DEFINE(XFree86LOADER,1,[Stub define for loadable drivers]) -# -#AC_ARG_ENABLE(XINPUT, AS_HELP_STRING([--enable-xinput], -# [Build XInput support (default: yes)]), -# [XINPUT=$enableval],[XINPUT=yes]) -#AM_CONDITIONAL(XINPUT, test "x$XINPUT" = "xyes") -#if test "x$XINPUT" = "xyes" ; then -# AC_DEFINE(XINPUT,1,[Enable XInput support]) -#fi -# -#AC_ARG_ENABLE(XKB, AS_HELP_STRING([--enable-xkb], -# [Build XKB support (default: yes)]), -# [XKB=$enableval],[XKB=yes]) -#AM_CONDITIONAL(XKB, test "x$XKB" = "xyes") -#if test "x$XKB" = "xyes" ; then -# AC_DEFINE(XKB,1,[Enable XKB support]) -#fi - case $host_os in linux*) IS_LINUX="yes" @@ -72,9 +54,9 @@ case $host_os in ;; *) - AC_MSG_ERROR([Your operating system is not supported by the joystick driver. - Contact xorg@lists.freedesktop.org if you are interested in - porting it.]) + AC_MSG_ERROR([Your operating system is not supported by the joystick + driver. Contact xorg@lists.freedesktop.org if you are + interested in porting it.]) ;; esac AM_CONDITIONAL(LINUX, [test "x$IS_LINUX" = xyes]) @@ -82,7 +64,8 @@ AM_CONDITIONAL(BSD, [test "x$IS_BSD" = xyes]) AC_ARG_WITH(xorg-module-dir, AC_HELP_STRING([--with-xorg-module-dir=DIR], - [Default xorg module directory [[default=$libdir/xorg/modules]]]), + [Default xorg module directory + [[default=$libdir/xorg/modules]]]), [moduledir="$withval"], [moduledir="$libdir/xorg/modules"]) inputdir=${moduledir}/input @@ -93,7 +76,8 @@ XORG_DRIVER_CHECK_EXT(RANDR, randrproto) XORG_DRIVER_CHECK_EXT(XINPUT, inputproto) # Checks for pkg-config packages -PKG_CHECK_MODULES(XORG, [xorg-server >= 1.0.99.901] xproto $REQUIRED_MODULES) +PKG_CHECK_MODULES(XORG, + [xorg-server >= 1.0.99.901] xproto $REQUIRED_MODULES) sdkdir=$(pkg-config --variable=sdkdir xorg-server) CFLAGS="$CFLAGS $XORG_CFLAGS "' -I$(top_srcdir)/src' diff --git a/man/joystick.man b/man/joystick.man index 2ddd273..9e1673f 100644 --- a/man/joystick.man +++ b/man/joystick.man @@ -13,7 +13,8 @@ joystick \- Joystick input driver .fi .SH DESCRIPTION .B joystick -is an __xservername__ input driver for Joysticks, using either Linux\'s joystick devices or *BSD\'s uhid devices. +is an __xservername__ input driver for Joysticks, using either Linux\'s +joystick devices or *BSD\'s uhid devices. .SH SUPPORTED HARDWARE In general, every by the kernel supported joystick should be supported through the diff --git a/src/Makefile.am b/src/Makefile.am index b64ebb9..2987e21 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -32,7 +32,7 @@ jstk_axis.c jstk_axis.h \ jstk_options.c jstk_options.h -BSD_SRCS = bsd_jstk.c +BSD_SRCS = bsd_jstk.c LINUX_SRCS = linux_jstk.c if BSD @@ -35,10 +35,7 @@ #include <exevents.h> /* Needed for InitValuator/Proximity stuff */ #include <math.h> - -#ifdef XFree86LOADER #include <xf86Module.h> -#endif #include "jstk.h" @@ -123,7 +120,7 @@ jstkReadProc(LocalDevicePtr local) switch (priv->button[number].mapping) { case MAPPING_BUTTON: if (priv->mouse_enabled == TRUE) { - xf86PostButtonEvent(local->dev, 0, priv->button[number].value, + xf86PostButtonEvent(local->dev, 0, priv->button[number].buttonnumber, priv->button[number].pressed, 0, 0); } break; @@ -133,7 +130,7 @@ jstkReadProc(LocalDevicePtr local) case MAPPING_ZX: case MAPPING_ZY: if (priv->button[number].pressed == 0) /* If button was released */ - priv->button[number].temp = 1.0; /* Reset speed counter */ + priv->button[number].currentspeed = 1.0; /* Reset speed counter */ else if (priv->mouse_enabled == TRUE) jstkStartButtonAxisTimer(local, number); break; @@ -160,7 +157,7 @@ jstkReadProc(LocalDevicePtr local) for (i=0; i<MAXAXES; i++) { if ((priv->button[i].pressed) && (priv->button[i].mapping == MAPPING_SPEED_MULTIPLY)) - priv->amplify *= ((float)priv->button[i].value) / 1000.0f; + priv->amplify *= priv->button[i].amplify; } DBG(2, ErrorF("Global amplify is now %.3f\n", priv->amplify)); @@ -213,7 +210,7 @@ jstkReadProc(LocalDevicePtr local) case TYPE_BYVALUE: case TYPE_ACCELERATED: if (priv->axis[number].value == 0) /* When axis was released */ - priv->axis[number].temp = 1.0; /* Release speed counter */ + priv->axis[number].currentspeed = 1.0; /* Release speed counter */ if (priv->mouse_enabled == TRUE) jstkStartAxisTimer(local, number); @@ -337,16 +334,6 @@ jstkDeviceControlProc(DeviceIntPtr pJstk, /* *************************************************************************** * - * Dynamic loading functions - * - *************************************************************************** - */ -#ifdef XFree86LOADER - - -/* - *************************************************************************** - * * jstkCorePreInit -- * * Called when a device will be instantiated @@ -406,27 +393,27 @@ jstkCorePreInit(InputDriverPtr drv, IDevPtr dev, int flags) /* Initialize default mappings */ for (i=0; i<MAXAXES; i++) { - priv->axis[i].value = 0; - priv->axis[i].deadzone = 1000; - priv->axis[i].type = TYPE_BYVALUE; - priv->axis[i].mapping = MAPPING_NONE; - priv->axis[i].temp = 0.0f; - priv->axis[i].amplify = 1.0f; + priv->axis[i].value = 0; + priv->axis[i].deadzone = 1000; + priv->axis[i].type = TYPE_BYVALUE; + priv->axis[i].mapping = MAPPING_NONE; + priv->axis[i].currentspeed = 0.0f; + priv->axis[i].amplify = 1.0f; } for (i=0; i<MAXBUTTONS; i++) { - priv->button[i].pressed = 0; - priv->button[i].value = 0; - priv->button[i].mapping = MAPPING_NONE; - priv->button[i].temp = 1.0f; + priv->button[i].pressed = 0; + priv->button[i].buttonnumber = 0; + priv->button[i].mapping = MAPPING_NONE; + priv->button[i].currentspeed = 1.0f; } /* First three joystick buttons generate mouse clicks */ - priv->button[0].mapping = MAPPING_BUTTON; - priv->button[0].value = 1; - priv->button[1].mapping = MAPPING_BUTTON; - priv->button[1].value = 2; - priv->button[2].mapping = MAPPING_BUTTON; - priv->button[2].value = 3; + priv->button[0].mapping = MAPPING_BUTTON; + priv->button[0].buttonnumber = 1; + priv->button[1].mapping = MAPPING_BUTTON; + priv->button[1].buttonnumber = 2; + priv->button[2].mapping = MAPPING_BUTTON; + priv->button[2].buttonnumber = 3; /* Two axes by default */ priv->axis[0].type = TYPE_BYVALUE; @@ -470,8 +457,8 @@ jstkCorePreInit(InputDriverPtr drv, IDevPtr dev, int flags) if (s != NULL) { jstkParseButtonOption(s, priv, i, local->name); } - DBG(1, xf86Msg(X_CONFIG, "Button %d mapped to %d (value=%d)\n", i+1, - priv->button[i].mapping, priv->button[i].value)); + DBG(1, xf86Msg(X_CONFIG, "Button %d mapped to %d\n", i+1, + priv->button[i].mapping)); } /* Process button mapping options */ @@ -621,5 +608,3 @@ _X_EXPORT XF86ModuleData joystickModuleData = { jstkDriverPlug, jstkDriverUnplug }; - -#endif /* XFree86LOADER */ @@ -44,61 +44,67 @@ **/ #if DEBUG -extern int debug_level; -#define DBG(lvl, f) {if ((lvl) <= debug_level) f;} + extern int debug_level; + #define DBG(lvl, f) {if ((lvl) <= debug_level) f;} #else -#define DBG(lvl, f) + #define DBG(lvl, f) #endif - -#define MAXBUTTONS 32 -#define MAXAXES 32 -#define MAXKEYSPERBUTTON 4 - -typedef enum { - TYPE_NONE, +typedef enum _JOYSTICKTYPE{ + TYPE_NONE, /* Axis value is not relevant */ TYPE_BYVALUE, /* Speed of cursor is relative to amplitude */ TYPE_ACCELERATED, /* Speed is accelerated */ TYPE_ABSOLUTE /* The amplitude defines the cursor position */ } JOYSTICKTYPE; -typedef enum { - MAPPING_NONE=0, - MAPPING_X, - MAPPING_Y, - MAPPING_ZX, - MAPPING_ZY, - MAPPING_BUTTON, - MAPPING_KEY, - MAPPING_SPEED_MULTIPLY, - MAPPING_DISABLE, - MAPPING_DISABLE_MOUSE, - MAPPING_DISABLE_KEYS -} JOYSTICKMAPPING ; - - -typedef struct -{ - int value; - int deadzone; - float temp,amplify; - JOYSTICKTYPE type; +typedef enum _JOYSTICKMAPPING{ + MAPPING_NONE, /* Nothing */ + MAPPING_X, /* X-Axis */ + MAPPING_Y, /* Y-Axis */ + MAPPING_ZX, /* Horizontal scrolling */ + MAPPING_ZY, /* Vertical scrolling */ + MAPPING_BUTTON, /* Mouse button */ + MAPPING_KEY, /* Keyboard event */ + MAPPING_SPEED_MULTIPLY, /* Will amplify all axis movement */ + MAPPING_DISABLE, /* Disable mouse and key events */ + MAPPING_DISABLE_MOUSE, /* Disable only mouse events */ + MAPPING_DISABLE_KEYS /* Disable only key events */ +} JOYSTICKMAPPING; + + +typedef struct _AXIS { + JOYSTICKTYPE type; JOYSTICKMAPPING mapping; + int value; + int deadzone; + union { + float currentspeed; + float previousposition; + }; + float amplify; } AXIS; -typedef struct -{ - char pressed; - int value; - unsigned int keys[MAXKEYSPERBUTTON]; - float temp; +#define MAXKEYSPERBUTTON 4 + +typedef struct _BUTTON { JOYSTICKMAPPING mapping; + char pressed; + union { + int buttonnumber; /* MAPPING_BUTTON */ + struct { + float amplify; /* MAPPING_X/Y/ZX/ZY, + MAPPING_SPEED_MULTIPLY */ + float currentspeed; /* MAPPING_X/Y/ZX/ZY */ + }; + unsigned int keys[MAXKEYSPERBUTTON]; /* MAPPING_KEY */ + }; } BUTTON; +#define MAXBUTTONS 32 +#define MAXAXES 32 -typedef struct -{ +typedef struct _JoystickDevRec { int fd; /* Actual file descriptor */ void *devicedata; /* Extra platform device dependend data */ char *device; /* Name of the device */ @@ -115,5 +121,4 @@ typedef struct unsigned char axes, buttons; /* Number of axes and buttons */ } JoystickDevRec, *JoystickDevPtr; - #endif diff --git a/src/jstk_axis.c b/src/jstk_axis.c index 95a1894..d71dc9b 100644 --- a/src/jstk_axis.c +++ b/src/jstk_axis.c @@ -89,9 +89,9 @@ jstkAxisTimer(OsTimerPtr timer, } else if (axis->type == TYPE_ACCELERATED) { /* Stop to accelerate at a certain speed */ - if (axis->temp < 100.0f) axis->temp *= 1.15f; + if (axis->currentspeed < 100.0f) axis->currentspeed *= 1.15f; - p1 = (axis->temp - 0.1f) * (float)NEXTTIMER / 180.0f; + p1 = (axis->currentspeed - 0.1f) * (float)NEXTTIMER / 180.0f; p2 = p1 / 8.0f; } if (axis->value < 0) { @@ -124,9 +124,9 @@ jstkAxisTimer(OsTimerPtr timer, float p1; float p2; - if (priv->button[i].temp < 100.0f) priv->button[i].temp *= 1.15f; - p1 = (priv->button[i].temp - 0.1) * (float)NEXTTIMER / 180.0f * - ((float)priv->button[i].value) / 1000.0f; + if (priv->button[i].currentspeed < 100.0f) priv->button[i].currentspeed *= 1.15f; + p1 = (priv->button[i].currentspeed - 0.1) * (float)NEXTTIMER / 180.0f * + priv->button[i].amplify; p1 *= priv->amplify; p2 = p1 / 8.0f; @@ -263,7 +263,7 @@ jstkStartButtonAxisTimer(LocalDevicePtr device, int number) priv->timerrunning = TRUE; pixel = 1; - if (priv->button[number].value < 0) pixel = -1; + if (priv->button[number].amplify < 0) pixel = -1; switch (priv->button[number].mapping) { case MAPPING_X: priv->x += pixel; @@ -326,15 +326,15 @@ jstkHandleAbsoluteAxis(LocalDevicePtr device, int number) DBG(5, ErrorF("Relative Position of axis %d: %.2f\n", i, rel)); /* Calculate difference to previous position on screen in pixels */ - dif = (int)(rel - priv->axis[i].temp + 0.5f); + dif = (int)(rel - priv->axis[i].previousposition + 0.5f); if ((dif >= 1)||(dif <= -1)) { if (priv->axis[i].mapping == MAPPING_X) { x += (dif); - priv->axis[i].temp += (float)dif; + priv->axis[i].previousposition += (float)dif; } if (priv->axis[i].mapping == MAPPING_Y) { y += (int)(dif); - priv->axis[i].temp += (float)dif; + priv->axis[i].previousposition += (float)dif; } } } diff --git a/src/jstk_hw.h b/src/jstk_hw.h index 2a270e8..5e8988c 100644 --- a/src/jstk_hw.h +++ b/src/jstk_hw.h @@ -24,7 +24,7 @@ #ifndef _LINUX_JSTK_H_INCLUDED_ #define _LINUX_JSTK_H_INCLUDED_ -typedef enum { +typedef enum _JOYSTICKEVENT { EVENT_NONE=0, EVENT_BUTTON, EVENT_AXIS diff --git a/src/jstk_options.c b/src/jstk_options.c index c7a4f39..191cb24 100644 --- a/src/jstk_options.c +++ b/src/jstk_options.c @@ -95,17 +95,17 @@ jstkParseButtonOption(const char* org, if (strcmp(param, "none") == 0) { button->mapping = MAPPING_NONE; } else if (sscanf(param, "button=%d", &value) == 1) { - button->mapping = MAPPING_BUTTON; - button->value = value; + button->mapping = MAPPING_BUTTON; + button->buttonnumber = value; } else if (sscanf(param, "axis=%15s", p) == 1) { button->mapping = jstkGetAxisMapping(&fvalue, p, name); - button->value = (int)(fvalue*1000.0); + button->amplify = fvalue; if (button->mapping == MAPPING_NONE) xf86Msg(X_WARNING, "%s: error parsing axis: %s.\n", name, p); } else if (sscanf(param, "amplify=%f", &fvalue) == 1) { button->mapping = MAPPING_SPEED_MULTIPLY; - button->value = (int)(fvalue*1000.0); + button->amplify = fvalue; } else if (sscanf(param, "key=%30s", p) == 1) { char *current, *next; current = p; |