diff options
author | Sascha Hlusiak <saschahlusiak@arcor.de> | 2008-09-30 18:08:04 +0200 |
---|---|---|
committer | Sascha Hlusiak <saschahlusiak@arcor.de> | 2008-09-30 18:08:04 +0200 |
commit | 5c72d146865982dfa727d469d789ceaa6ac33b8d (patch) | |
tree | 00800b63e0e97bcf9ce332075c2c0e11852a1ac8 | |
parent | 03175f968c4177de2208a2d8e73f9c8106630a6b (diff) |
Replace dynamic button map with static one
Saves some configuration efforts but caps logical button numbers to BUTTONMAP_SIZE=32.
Makes property support much easier.
-rw-r--r-- | src/jstk.c | 29 | ||||
-rw-r--r-- | src/jstk.h | 6 | ||||
-rw-r--r-- | src/jstk_axis.c | 16 | ||||
-rw-r--r-- | src/jstk_options.c | 34 | ||||
-rw-r--r-- | src/jstk_options.h | 3 |
5 files changed, 26 insertions, 62 deletions
@@ -341,6 +341,7 @@ jstkDeviceControlProc(DeviceIntPtr pJstk, switch (what) { case DEVICE_INIT: { int m; + CARD8 buttonmap[BUTTONMAP_SIZE+1]; DBG(1, ErrorF("jstkDeviceControlProc what=INIT\n")); /* Probe device and return if error */ if (jstkOpenDevice(priv, TRUE) == -1) { @@ -351,13 +352,12 @@ jstkDeviceControlProc(DeviceIntPtr pJstk, priv->close_proc(priv); } - - if (priv->buttonmap.size != 0) { - if (InitButtonClassDeviceStruct(pJstk, priv->buttonmap.size, - priv->buttonmap.map) == FALSE) { - ErrorF("unable to allocate Button class device\n"); - return !Success; - } + for (m=0; m<=BUTTONMAP_SIZE; m++) + buttonmap[m] = m; + if (InitButtonClassDeviceStruct(pJstk, BUTTONMAP_SIZE, + buttonmap) == FALSE) { + ErrorF("unable to allocate Button class device\n"); + return !Success; } if (!InitPtrFeedbackClassDeviceStruct(pJstk, jstkPtrCtrlProc)) return !Success; @@ -530,7 +530,6 @@ jstkCorePreInit(InputDriverPtr drv, IDevPtr dev, int flags) priv->mouse_enabled = TRUE; priv->keys_enabled = TRUE; priv->amplify = 1.0f; - priv->buttonmap.size = 0; priv->keyboard_device = NULL; priv->keymap.size = 1; memset(priv->keymap.map, NoSymbol, sizeof(priv->keymap.map)); @@ -563,15 +562,13 @@ jstkCorePreInit(InputDriverPtr drv, IDevPtr dev, int flags) priv->button[i].keys[j] = 0; } - priv->buttonmap.map[0] = 0; - /* First three joystick buttons generate mouse clicks */ priv->button[0].mapping = MAPPING_BUTTON; - priv->button[0].buttonnumber = jstkGetButtonNumberInMap(priv, 1); + priv->button[0].buttonnumber = 1; priv->button[1].mapping = MAPPING_BUTTON; - priv->button[1].buttonnumber = jstkGetButtonNumberInMap(priv, 2); + priv->button[1].buttonnumber = 2; priv->button[2].mapping = MAPPING_BUTTON; - priv->button[2].buttonnumber = jstkGetButtonNumberInMap(priv, 3); + priv->button[2].buttonnumber = 3; /* First two axes are a stick for moving */ priv->axis[0].type = TYPE_BYVALUE; @@ -591,12 +588,6 @@ jstkCorePreInit(InputDriverPtr drv, IDevPtr dev, int flags) priv->axis[5].type = TYPE_ACCELERATED; priv->axis[5].mapping = MAPPING_Y; - priv->buttonmap.scrollbutton[0] = jstkGetButtonNumberInMap(priv, 4); - priv->buttonmap.scrollbutton[1] = jstkGetButtonNumberInMap(priv, 5); - priv->buttonmap.scrollbutton[2] = jstkGetButtonNumberInMap(priv, 6); - priv->buttonmap.scrollbutton[3] = jstkGetButtonNumberInMap(priv, 7); - - xf86CollectInputOptions(local, NULL, NULL); xf86OptionListReport(local->options); @@ -32,6 +32,7 @@ #define MAXAXES 32 #define MAXKEYSPERBUTTON 4 #define MIN_KEYCODE 8 +#define BUTTONMAP_SIZE 32 /****************************************************************************** @@ -134,11 +135,6 @@ typedef struct _JoystickDevRec { CARD8 num_buttons, num_axes; /* Detected number of buttons/axes */ - struct _BUTTONMAP { - int size; - CARD8 scrollbutton[4]; /* Logical button numbers for scrollwheel */ - CARD8 map[MAXBUTTONS+1]; - } buttonmap; struct _KEYMAP { int size; KeySym map[256-MIN_KEYCODE]; diff --git a/src/jstk_axis.c b/src/jstk_axis.c index 57eacef..4b46af1 100644 --- a/src/jstk_axis.c +++ b/src/jstk_axis.c @@ -210,31 +210,31 @@ jstkAxisTimer(OsTimerPtr timer, /* Generate scrolling events */ while (movezy >= 1) { /* down */ - xf86PostButtonEvent(device, 0, priv->buttonmap.scrollbutton[1], + xf86PostButtonEvent(device, 0, 5, 1, 0, 0); - xf86PostButtonEvent(device, 0, priv->buttonmap.scrollbutton[1], + xf86PostButtonEvent(device, 0, 5, 0, 0, 0); movezy -= 1; } while (movezy <= -1) { /* up */ - xf86PostButtonEvent(device, 0, priv->buttonmap.scrollbutton[0], + xf86PostButtonEvent(device, 0, 4, 1, 0, 0); - xf86PostButtonEvent(device, 0, priv->buttonmap.scrollbutton[0], + xf86PostButtonEvent(device, 0, 4, 0, 0, 0); movezy += 1; } while (movezx >= 1) { /* right */ - xf86PostButtonEvent(device, 0, priv->buttonmap.scrollbutton[3], + xf86PostButtonEvent(device, 0, 7, 1, 0, 0); - xf86PostButtonEvent(device, 0, priv->buttonmap.scrollbutton[3], + xf86PostButtonEvent(device, 0, 7, 0, 0, 0); movezx -= 1; } while (movezx <= -1) { /* left */ - xf86PostButtonEvent(device, 0, priv->buttonmap.scrollbutton[2], + xf86PostButtonEvent(device, 0, 6, 1, 0, 0); - xf86PostButtonEvent(device, 0, priv->buttonmap.scrollbutton[2], + xf86PostButtonEvent(device, 0, 6, 0, 0, 0); movezx += 1; } diff --git a/src/jstk_options.c b/src/jstk_options.c index 510c160..d0e5769 100644 --- a/src/jstk_options.c +++ b/src/jstk_options.c @@ -43,31 +43,6 @@ /*********************************************************************** * - * jstkGetButtonNumberInMap -- - * - * Adds a button number to the button map and returns the index - * - *********************************************************************** - */ - -int -jstkGetButtonNumberInMap(JoystickDevPtr priv, - int buttonnumber) -{ - int j; - for (j=1; j<=priv->buttonmap.size; j++) - if (priv->buttonmap.map[j] == buttonnumber) - break; - if (j > MAXBUTTONS+1) return 0; - priv->buttonmap.map[j] = buttonnumber; - if (j > priv->buttonmap.size) priv->buttonmap.size = j; - return j; -} - - - -/*********************************************************************** - * * jstkGetKeyNumberInMap -- * * Adds a KeySym to the keymap and returns the index @@ -155,8 +130,13 @@ 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->buttonnumber = jstkGetButtonNumberInMap(priv, value); + if (value<0 || value >BUTTONMAP_SIZE) { + xf86Msg(X_WARNING, "%s: button number out of range (0..%d): %d.\n", + name, BUTTONMAP_SIZE, value); + } else { + button->mapping = MAPPING_BUTTON; + button->buttonnumber = value; + } } else if (sscanf(param, "axis=%15s", p) == 1) { p[15]='\0'; fvalue = 1.0f; diff --git a/src/jstk_options.h b/src/jstk_options.h index bb14934..6fe2d1d 100644 --- a/src/jstk_options.h +++ b/src/jstk_options.h @@ -24,9 +24,6 @@ #ifndef __JSTK_OPTIONS_H_INCLUDED__ #define __JSTK_OPTIONS_H_INCLUDED__ -int jstkGetButtonNumberInMap(JoystickDevPtr priv, - int buttonnumber); - void jstkParseButtonOption(const char* org, JoystickDevPtr priv, int number, |