summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSascha Hlusiak <saschahlusiak@arcor.de>2008-09-30 18:08:04 +0200
committerSascha Hlusiak <saschahlusiak@arcor.de>2008-09-30 18:08:04 +0200
commit5c72d146865982dfa727d469d789ceaa6ac33b8d (patch)
tree00800b63e0e97bcf9ce332075c2c0e11852a1ac8
parent03175f968c4177de2208a2d8e73f9c8106630a6b (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.c29
-rw-r--r--src/jstk.h6
-rw-r--r--src/jstk_axis.c16
-rw-r--r--src/jstk_options.c34
-rw-r--r--src/jstk_options.h3
5 files changed, 26 insertions, 62 deletions
diff --git a/src/jstk.c b/src/jstk.c
index 99c299d..b8b58ab 100644
--- a/src/jstk.c
+++ b/src/jstk.c
@@ -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);
diff --git a/src/jstk.h b/src/jstk.h
index efd878b..ec1a6f7 100644
--- a/src/jstk.h
+++ b/src/jstk.h
@@ -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,