mirror of
https://github.com/X11Libre/xf86-input-joystick.git
synced 2026-03-24 01:34:06 +00:00
Merge branch 'scancodes' of ssh://deepthought/home/sascha/develop/xorg/xf86-input-joystick into scancodes
This commit is contained in:
@@ -33,13 +33,13 @@
|
||||
<!-- EXAMPLES
|
||||
<merge key="input.x11_options.DebugLevel" type="string">5</merge>
|
||||
<merge key="input.x11_options.AutoRepeat" type="string">500 4</merge>
|
||||
<merge key="input.x11_options.MapButton4" type="string">key=Alt_L+Tab</merge>
|
||||
<merge key="input.x11_options.MapButton4" type="string">key=64+23</merge>
|
||||
<merge key="input.x11_options.MapButton8" type="string">amplify=0.3</merge>
|
||||
<merge key="input.x11_options.MapButton9" type="string">disable-mouse</merge>
|
||||
<merge key="input.x11_options.MapButton10" type="string">key=space</merge>
|
||||
<merge key="input.x11_options.MapButton10" type="string">key=65</merge>
|
||||
|
||||
<merge key="input.x11_options.MapAxis1" type="string">mode=accelerated keylow=Left keyhigh=Right</merge>
|
||||
<merge key="input.x11_options.MapAxis2" type="string">mode=accelerated keylow=Up keyhigh=Down</merge>
|
||||
<merge key="input.x11_options.MapAxis1" type="string">mode=accelerated keylow=113 keyhigh=114</merge>
|
||||
<merge key="input.x11_options.MapAxis2" type="string">mode=accelerated keylow=111 keyhigh=116</merge>
|
||||
-->
|
||||
</match>
|
||||
</match>
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
AC_PREREQ(2.57)
|
||||
AC_INIT([xf86-input-joystick],
|
||||
1.4.0,
|
||||
1.4.99,
|
||||
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
|
||||
xf86-input-joystick)
|
||||
|
||||
|
||||
@@ -93,12 +93,12 @@ typedef enum _JSTK_MAPPING {
|
||||
/* FLOAT[MAXAXES], movement amplify per axis */
|
||||
#define JSTK_PROP_AXIS_AMPLIFY "Axis Amplify"
|
||||
|
||||
/** Set KeySyms for axis in low position */
|
||||
/* TODO 16 bit */
|
||||
/** Scancodes for axis in low position */
|
||||
/* 8 bit, 4 per axis */
|
||||
#define JSTK_PROP_AXIS_KEYS_LOW "Axis Keys (low)"
|
||||
|
||||
/** Set KeySyms for axis in high position */
|
||||
/* TODO 16 bit */
|
||||
/** Scancodes for axis in high position */
|
||||
/* 8 bit, 4 per axis */
|
||||
#define JSTK_PROP_AXIS_KEYS_HIGH "Axis keys (high)"
|
||||
|
||||
/** Set the mapping of each button to
|
||||
@@ -115,8 +115,8 @@ typedef enum _JSTK_MAPPING {
|
||||
/* FLOAT[MAXBUTTONS], amplify value per button */
|
||||
#define JSTK_PROP_BUTTON_AMPLIFY "Button Amplify"
|
||||
|
||||
/** Set KeySyms for button */
|
||||
/* TODO 16 bit, set keysyms for button. Format: (button keysym1 keysym2 keysym3 keysym4) */
|
||||
/** Scancodes for button */
|
||||
/* 8 bit, 4 per button */
|
||||
#define JSTK_PROP_BUTTON_KEYS "Button Keys"
|
||||
|
||||
|
||||
|
||||
@@ -93,10 +93,10 @@ Use positive and negative values to control the direction. Default: 1.0
|
||||
Amplifies the movement of all axes by the given factor when pressed. Different
|
||||
factors can be combined.
|
||||
.TP 7
|
||||
.BI "\*qkey="<keysym>[,<keysym>[,<keysym>[,<keysym>]]]
|
||||
When button is pressed, a series of keydown events with the specified keysym is
|
||||
.BI "\*qkey="<scancode>[,<scancode>[,<scancode>[,<scancode>]]]
|
||||
When button is pressed, a series of keydown events with the specified scancode is
|
||||
generated. When the button is released, keyup events in the opposite
|
||||
order are generated. You can specify up to 4 keysyms per button.
|
||||
order are generated. You can specify up to 4 scancodes per button.
|
||||
|
||||
See special section about key events below.
|
||||
.TP 7
|
||||
@@ -150,12 +150,12 @@ is an optional amplifier of the axis, like
|
||||
.B -, +, -5, 0.4, 1.3, ...
|
||||
Negative values will invert the movement. Default: 1.0
|
||||
.TP 7
|
||||
.BI "\*qkeylow= "<keysym>[,<keysym>[,<keysym>[,<keysym>]]]
|
||||
.BI "\*qkeylow= "<scancode>[,<scancode>[,<scancode>[,<scancode>]]]
|
||||
.TP 7
|
||||
.BI "\*qkeyhigh="<keysym>[,<keysym>[,<keysym>[,<keysym>]]]
|
||||
.BI "\*qkeyhigh="<scancode>[,<scancode>[,<scancode>[,<scancode>]]]
|
||||
When the axis is moved out of the deadzone, a series of keydown events according
|
||||
to the direction of the movement is generated. When the axis is released, keyup
|
||||
events will be generated. You can specify up to 4 keysyms for each direction.
|
||||
events will be generated. You can specify up to 4 scancodes for each direction.
|
||||
|
||||
.B keylow
|
||||
defines the keys to be generated when the axis is moved in negative direction (ie. left or up),
|
||||
@@ -270,45 +270,41 @@ total range of 200 pixels, 100 to the top and 100 to the bottom:
|
||||
.fi
|
||||
|
||||
.SH "GENERATING KEY EVENTS"
|
||||
Providing a \*qkey=<keysym>[,<keysym>[...]]\*q option will generate X Events with the specified keysyms
|
||||
Providing a \*qkey=<scancode>[,<scancode>[...]]\*q option will generate X Events with the specified scancodes
|
||||
when the joystick button is pressed or the axis changed it's position. When the button/axis is released, the keys are released in the reverse order.
|
||||
|
||||
The keysym parameter can be defined as a numerical value, which can be looked up in the file
|
||||
.IR /usr/include/X11/keysymdef.h ,
|
||||
or as the symbolic identifier (case sensitive, without the leading XK_).
|
||||
To lookup keycodes for KeySyms, you can use
|
||||
.BR "xmodmap -pk" .
|
||||
You can use unused keycodes and map them to a KeySym of your choice using xmodmap(1).
|
||||
|
||||
You can specify up to 4 keysyms per joystick button/axis, which is useful to use modificators. Make sure you use the modificators
|
||||
You can specify up to 4 scancodes per joystick button/axis, which is useful to use modificators. Make sure you use modificators
|
||||
that are necessary to get a certain keysym.
|
||||
|
||||
Examples:
|
||||
.nf
|
||||
.BI " Option \*qMapButton1\*q \*q" "key=0xffe9,0xff09" \*q
|
||||
.BI " Option \*qMapButton1\*q \*q" "key=Alt_L,Tab" \*q
|
||||
.BI " Option \*qMapButton1\*q \*q" "key=64,23" \*q
|
||||
.fi
|
||||
will generate
|
||||
.I "Alt_L+Tab"
|
||||
when the button is pressed.
|
||||
|
||||
.nf
|
||||
.BI " Option \*qMapButton1\*q \*q" "key=0xffe1,0x0064" \*q
|
||||
.BI " Option \*qMapButton1\*q \*q" "key=Shift_L,d" \*q
|
||||
.BI " Option \*qMapButton1\*q \*q" "key=50,40" \*q
|
||||
.fi
|
||||
will generate an uppercase
|
||||
will generate a Shift_L+d which will be an uppercase
|
||||
.IR d .
|
||||
|
||||
.nf
|
||||
.BI " Option \*qMapButton1\*q \*q" "key=0x0020" \*q
|
||||
.BI " Option \*qMapButton1\*q \*q" "key=32" \*q
|
||||
.BI " Option \*qMapButton1\*q \*q" "key=space" \*q
|
||||
.BI " Option \*qMapButton1\*q \*q" "key=65" \*q
|
||||
.fi
|
||||
is for the
|
||||
.IR "space " key.
|
||||
|
||||
.nf
|
||||
.BI " Option \*qMapAxis1\*q \*q" "mode=relative keylow=Left keyhigh=Right axis=0.5key" \*q
|
||||
.BI " Option \*qMapAxis2\*q \*q" "mode=relative keylow=Up keyhigh=Down" \*q
|
||||
.BI " Option \*qMapAxis3\*q \*q" "mode=accelerated keylow=Left keyhigh=Right" \*q
|
||||
.BI " Option \*qMapAxis4\*q \*q" "mode=accelerated keylow=Up keyhigh=Down" \*q
|
||||
.BI " Option \*qMapAxis1\*q \*q" "mode=relative keylow=113 keyhigh=114 axis=0.5key" \*q
|
||||
.BI " Option \*qMapAxis2\*q \*q" "mode=relative keylow=111 keyhigh=116" \*q
|
||||
.BI " Option \*qMapAxis3\*q \*q" "mode=accelerated keylow=113 keyhigh=114" \*q
|
||||
.BI " Option \*qMapAxis4\*q \*q" "mode=accelerated keylow=111 keyhigh=116" \*q
|
||||
.fi
|
||||
will map the first and third axis to the arrow keys
|
||||
.IR left " and " right
|
||||
@@ -345,6 +341,6 @@ Example:
|
||||
.SH "SEE ALSO"
|
||||
__xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), Xserver(__appmansuffix__), X(__miscmansuffix__), xmodmap(1)
|
||||
.SH AUTHORS
|
||||
Sascha Hlusiak (2007-2008),
|
||||
Sascha Hlusiak (2007-2009),
|
||||
.fi
|
||||
Frederic Lepied (1995-1999)
|
||||
|
||||
@@ -36,8 +36,7 @@ INCLUDES=-I$(top_srcdir)/include/
|
||||
jstk_axis.c jstk_axis.h \
|
||||
jstk_key.c jstk_key.h \
|
||||
jstk_options.c jstk_options.h \
|
||||
jstk_properties.c jstk_properties.h \
|
||||
StrKeysym.c StrKeysym.h ks_tables.h
|
||||
jstk_properties.c jstk_properties.h
|
||||
|
||||
BSD_SRCS = backend_bsd.c backend_bsd.h
|
||||
LINUX_SRCS = backend_joystick.c backend_joystick.h
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
/* $Xorg: StrKeysym.c,v 1.5 2001/02/09 02:03:37 xorgcvs Exp $ */
|
||||
/*
|
||||
|
||||
Copyright 1985, 1987, 1990, 1998 The Open Group
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of The Open Group shall not be
|
||||
used in advertising or otherwise to promote the sale, use or other dealings
|
||||
in this Software without prior written authorization from The Open Group.
|
||||
|
||||
*/
|
||||
/* $XFree86: xc/lib/X11/StrKeysym.c,v 3.7 2003/04/13 19:22:18 dawes Exp $ */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <xf86.h>
|
||||
#include <X11/keysymdef.h>
|
||||
|
||||
#define NEEDKTABLE
|
||||
#include "ks_tables.h"
|
||||
|
||||
#include "StrKeysym.h"
|
||||
|
||||
|
||||
KeySym
|
||||
XStringToKeysym(_Xconst char *s)
|
||||
{
|
||||
register int i, n;
|
||||
int h;
|
||||
register unsigned long sig = 0;
|
||||
register const char *p = s;
|
||||
register int c;
|
||||
register int idx;
|
||||
const unsigned char *entry;
|
||||
unsigned char sig1, sig2;
|
||||
KeySym val;
|
||||
|
||||
while ((c = *p++))
|
||||
sig = (sig << 1) + c;
|
||||
i = sig % KTABLESIZE;
|
||||
h = i + 1;
|
||||
sig1 = (sig >> 8) & 0xff;
|
||||
sig2 = sig & 0xff;
|
||||
n = KMAXHASH;
|
||||
while ((idx = hashString[i]))
|
||||
{
|
||||
entry = &_XkeyTable[idx];
|
||||
if ((entry[0] == sig1) && (entry[1] == sig2) &&
|
||||
!strcmp(s, (char *)entry + 6))
|
||||
{
|
||||
val = (entry[2] << 24) | (entry[3] << 16) |
|
||||
(entry[4] << 8) | entry[5];
|
||||
if (!val)
|
||||
val = XK_VoidSymbol;
|
||||
return val;
|
||||
}
|
||||
if (!--n)
|
||||
break;
|
||||
i += h;
|
||||
if (i >= KTABLESIZE)
|
||||
i -= KTABLESIZE;
|
||||
}
|
||||
|
||||
return NoSymbol;
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
/*
|
||||
* Copyright 2007-2008 by Sascha Hlusiak. <saschahlusiak@freedesktop.org>
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation, and that the names of copyright holders not be used in
|
||||
* advertising or publicity pertaining to distribution of the software without
|
||||
* specific, written prior permission. The copyright holders make no
|
||||
* representations about the suitability of this software for any purpose. It
|
||||
* is provided "as is" without express or implied warranty.
|
||||
*
|
||||
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef _STRKEYSYM_H_INCLUDED_
|
||||
#define _STRKEYSYM_H_INCLUDED_
|
||||
|
||||
KeySym XStringToKeysym(_Xconst char *s);
|
||||
|
||||
#endif
|
||||
22
src/jstk.c
22
src/jstk.c
@@ -555,8 +555,6 @@ jstkCorePreInit(InputDriverPtr drv, IDevPtr dev, int flags)
|
||||
priv->keys_enabled = TRUE;
|
||||
priv->amplify = 1.0f;
|
||||
priv->keyboard_device = NULL;
|
||||
priv->keymap.size = 1;
|
||||
memset(priv->keymap.map, NoSymbol, sizeof(priv->keymap.map));
|
||||
priv->repeat_delay = 0;
|
||||
priv->repeat_interval = 0;
|
||||
priv->num_axes = MAXAXES;
|
||||
@@ -660,6 +658,26 @@ jstkCorePreInit(InputDriverPtr drv, IDevPtr dev, int flags)
|
||||
}
|
||||
xfree(s);
|
||||
}
|
||||
|
||||
priv->rmlvo.rules = xf86SetStrOption(dev->commonOptions, "xkb_rules", NULL);
|
||||
if (!priv->rmlvo.rules)
|
||||
priv->rmlvo.rules = xf86SetStrOption(dev->commonOptions, "XkbRules", "evdev");
|
||||
|
||||
priv->rmlvo.model = xf86SetStrOption(dev->commonOptions, "xkb_model", NULL);
|
||||
if (!priv->rmlvo.model)
|
||||
priv->rmlvo.model = xf86SetStrOption(dev->commonOptions, "XkbModel", "evdev");
|
||||
|
||||
priv->rmlvo.layout = xf86SetStrOption(dev->commonOptions, "xkb_layout", NULL);
|
||||
if (!priv->rmlvo.layout)
|
||||
priv->rmlvo.layout = xf86SetStrOption(dev->commonOptions, "XkbLayout", "uk");
|
||||
|
||||
priv->rmlvo.variant = xf86SetStrOption(dev->commonOptions, "xkb_variant", NULL);
|
||||
if (!priv->rmlvo.variant)
|
||||
priv->rmlvo.variant = xf86SetStrOption(dev->commonOptions, "XkbVariant", NULL);
|
||||
|
||||
priv->rmlvo.options = xf86SetStrOption(dev->commonOptions, "xkb_options", NULL);
|
||||
if (!priv->rmlvo.options)
|
||||
priv->rmlvo.options = xf86SetStrOption(dev->commonOptions, "XkbOptions", NULL);
|
||||
|
||||
priv->mouse_enabled = xf86SetBoolOption(dev->commonOptions, "StartMouseEnabled", TRUE);
|
||||
priv->keys_enabled = xf86SetBoolOption(dev->commonOptions, "StartKeysEnabled", TRUE);
|
||||
|
||||
19
src/jstk.h
19
src/jstk.h
@@ -55,6 +55,17 @@
|
||||
#define XI_JOYSTICK "JOYSTICK"
|
||||
#endif
|
||||
|
||||
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 5
|
||||
typedef struct {
|
||||
char *rules;
|
||||
char *model;
|
||||
char *layout;
|
||||
char *variant;
|
||||
char *options;
|
||||
} XkbRMLVOSet;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
typedef enum _JOYSTICKEVENT {
|
||||
EVENT_NONE=0,
|
||||
@@ -69,7 +80,7 @@ typedef void(*jstkCloseDeviceProc)(JoystickDevPtr joystick);
|
||||
typedef int(*jstkReadDataProc)(JoystickDevPtr joystick,
|
||||
JOYSTICKEVENT *event, int *number);
|
||||
|
||||
typedef unsigned int KEYSCANCODES [MAXKEYSPERBUTTON];
|
||||
typedef unsigned char KEYSCANCODES [MAXKEYSPERBUTTON];
|
||||
|
||||
typedef struct _AXIS {
|
||||
JSTK_TYPE type;
|
||||
@@ -118,11 +129,7 @@ typedef struct _JoystickDevRec {
|
||||
|
||||
CARD8 num_buttons, num_axes; /* Detected number of buttons/axes */
|
||||
|
||||
struct _KEYMAP {
|
||||
int size;
|
||||
KeySym map[256-MIN_KEYCODE];
|
||||
} keymap;
|
||||
|
||||
XkbRMLVOSet rmlvo;
|
||||
AXIS axis[MAXAXES]; /* Configuration per axis */
|
||||
BUTTON button[MAXBUTTONS]; /* Configuration per button */
|
||||
} JoystickDevRec;
|
||||
|
||||
354
src/jstk_key.c
354
src/jstk_key.c
@@ -42,6 +42,9 @@
|
||||
#include <xkbsrv.h>
|
||||
#endif
|
||||
|
||||
#define MIN_KEYCODE 8
|
||||
#define GLYPHS_PER_KEY 2
|
||||
|
||||
#define AltMask Mod1Mask
|
||||
#define NumLockMask Mod2Mask
|
||||
#define AltLangMask Mod3Mask
|
||||
@@ -50,6 +53,277 @@
|
||||
|
||||
|
||||
|
||||
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 5
|
||||
static KeySym map[] = {
|
||||
/* 0x00 */ NoSymbol, NoSymbol,
|
||||
/* 0x01 */ XK_Escape, NoSymbol,
|
||||
/* 0x02 */ XK_1, XK_exclam,
|
||||
/* 0x03 */ XK_2, XK_at,
|
||||
/* 0x04 */ XK_3, XK_numbersign,
|
||||
/* 0x05 */ XK_4, XK_dollar,
|
||||
/* 0x06 */ XK_5, XK_percent,
|
||||
/* 0x07 */ XK_6, XK_asciicircum,
|
||||
/* 0x08 */ XK_7, XK_ampersand,
|
||||
/* 0x09 */ XK_8, XK_asterisk,
|
||||
/* 0x0a */ XK_9, XK_parenleft,
|
||||
/* 0x0b */ XK_0, XK_parenright,
|
||||
/* 0x0c */ XK_minus, XK_underscore,
|
||||
/* 0x0d */ XK_equal, XK_plus,
|
||||
/* 0x0e */ XK_BackSpace, NoSymbol,
|
||||
/* 0x0f */ XK_Tab, XK_ISO_Left_Tab,
|
||||
/* 0x10 */ XK_Q, NoSymbol,
|
||||
/* 0x11 */ XK_W, NoSymbol,
|
||||
/* 0x12 */ XK_E, NoSymbol,
|
||||
/* 0x13 */ XK_R, NoSymbol,
|
||||
/* 0x14 */ XK_T, NoSymbol,
|
||||
/* 0x15 */ XK_Y, NoSymbol,
|
||||
/* 0x16 */ XK_U, NoSymbol,
|
||||
/* 0x17 */ XK_I, NoSymbol,
|
||||
/* 0x18 */ XK_O, NoSymbol,
|
||||
/* 0x19 */ XK_P, NoSymbol,
|
||||
/* 0x1a */ XK_bracketleft, XK_braceleft,
|
||||
/* 0x1b */ XK_bracketright,XK_braceright,
|
||||
/* 0x1c */ XK_Return, NoSymbol,
|
||||
/* 0x1d */ XK_Control_L, NoSymbol,
|
||||
/* 0x1e */ XK_A, NoSymbol,
|
||||
/* 0x1f */ XK_S, NoSymbol,
|
||||
/* 0x20 */ XK_D, NoSymbol,
|
||||
/* 0x21 */ XK_F, NoSymbol,
|
||||
/* 0x22 */ XK_G, NoSymbol,
|
||||
/* 0x23 */ XK_H, NoSymbol,
|
||||
/* 0x24 */ XK_J, NoSymbol,
|
||||
/* 0x25 */ XK_K, NoSymbol,
|
||||
/* 0x26 */ XK_L, NoSymbol,
|
||||
/* 0x27 */ XK_semicolon, XK_colon,
|
||||
/* 0x28 */ XK_quoteright, XK_quotedbl,
|
||||
/* 0x29 */ XK_quoteleft, XK_asciitilde,
|
||||
/* 0x2a */ XK_Shift_L, NoSymbol,
|
||||
/* 0x2b */ XK_backslash, XK_bar,
|
||||
/* 0x2c */ XK_Z, NoSymbol,
|
||||
/* 0x2d */ XK_X, NoSymbol,
|
||||
/* 0x2e */ XK_C, NoSymbol,
|
||||
/* 0x2f */ XK_V, NoSymbol,
|
||||
/* 0x30 */ XK_B, NoSymbol,
|
||||
/* 0x31 */ XK_N, NoSymbol,
|
||||
/* 0x32 */ XK_M, NoSymbol,
|
||||
/* 0x33 */ XK_comma, XK_less,
|
||||
/* 0x34 */ XK_period, XK_greater,
|
||||
/* 0x35 */ XK_slash, XK_question,
|
||||
/* 0x36 */ XK_Shift_R, NoSymbol,
|
||||
/* 0x37 */ XK_KP_Multiply, NoSymbol,
|
||||
/* 0x38 */ XK_Alt_L, XK_Meta_L,
|
||||
/* 0x39 */ XK_space, NoSymbol,
|
||||
/* 0x3a */ XK_Caps_Lock, NoSymbol,
|
||||
/* 0x3b */ XK_F1, NoSymbol,
|
||||
/* 0x3c */ XK_F2, NoSymbol,
|
||||
/* 0x3d */ XK_F3, NoSymbol,
|
||||
/* 0x3e */ XK_F4, NoSymbol,
|
||||
/* 0x3f */ XK_F5, NoSymbol,
|
||||
/* 0x40 */ XK_F6, NoSymbol,
|
||||
/* 0x41 */ XK_F7, NoSymbol,
|
||||
/* 0x42 */ XK_F8, NoSymbol,
|
||||
/* 0x43 */ XK_F9, NoSymbol,
|
||||
/* 0x44 */ XK_F10, NoSymbol,
|
||||
/* 0x45 */ XK_Num_Lock, NoSymbol,
|
||||
/* 0x46 */ XK_Scroll_Lock, NoSymbol,
|
||||
/* These KP keys should have the KP_7 keysyms in the numlock
|
||||
* modifer... ? */
|
||||
/* 0x47 */ XK_KP_Home, XK_KP_7,
|
||||
/* 0x48 */ XK_KP_Up, XK_KP_8,
|
||||
/* 0x49 */ XK_KP_Prior, XK_KP_9,
|
||||
/* 0x4a */ XK_KP_Subtract, NoSymbol,
|
||||
/* 0x4b */ XK_KP_Left, XK_KP_4,
|
||||
/* 0x4c */ XK_KP_Begin, XK_KP_5,
|
||||
/* 0x4d */ XK_KP_Right, XK_KP_6,
|
||||
/* 0x4e */ XK_KP_Add, NoSymbol,
|
||||
/* 0x4f */ XK_KP_End, XK_KP_1,
|
||||
/* 0x50 */ XK_KP_Down, XK_KP_2,
|
||||
/* 0x51 */ XK_KP_Next, XK_KP_3,
|
||||
/* 0x52 */ XK_KP_Insert, XK_KP_0,
|
||||
/* 0x53 */ XK_KP_Delete, XK_KP_Decimal,
|
||||
/* 0x54 */ NoSymbol, NoSymbol,
|
||||
/* 0x55 */ XK_F13, NoSymbol,
|
||||
/* 0x56 */ XK_less, XK_greater,
|
||||
/* 0x57 */ XK_F11, NoSymbol,
|
||||
/* 0x58 */ XK_F12, NoSymbol,
|
||||
/* 0x59 */ XK_F14, NoSymbol,
|
||||
/* 0x5a */ XK_F15, NoSymbol,
|
||||
/* 0x5b */ XK_F16, NoSymbol,
|
||||
/* 0x5c */ XK_F17, NoSymbol,
|
||||
/* 0x5d */ XK_F18, NoSymbol,
|
||||
/* 0x5e */ XK_F19, NoSymbol,
|
||||
/* 0x5f */ XK_F20, NoSymbol,
|
||||
/* 0x60 */ XK_KP_Enter, NoSymbol,
|
||||
/* 0x61 */ XK_Control_R, NoSymbol,
|
||||
/* 0x62 */ XK_KP_Divide, NoSymbol,
|
||||
/* 0x63 */ XK_Print, XK_Sys_Req,
|
||||
/* 0x64 */ XK_Alt_R, XK_Meta_R,
|
||||
/* 0x65 */ NoSymbol, NoSymbol, /* KEY_LINEFEED */
|
||||
/* 0x66 */ XK_Home, NoSymbol,
|
||||
/* 0x67 */ XK_Up, NoSymbol,
|
||||
/* 0x68 */ XK_Prior, NoSymbol,
|
||||
/* 0x69 */ XK_Left, NoSymbol,
|
||||
/* 0x6a */ XK_Right, NoSymbol,
|
||||
/* 0x6b */ XK_End, NoSymbol,
|
||||
/* 0x6c */ XK_Down, NoSymbol,
|
||||
/* 0x6d */ XK_Next, NoSymbol,
|
||||
/* 0x6e */ XK_Insert, NoSymbol,
|
||||
/* 0x6f */ XK_Delete, NoSymbol,
|
||||
/* 0x70 */ NoSymbol, NoSymbol, /* KEY_MACRO */
|
||||
/* 0x71 */ NoSymbol, NoSymbol,
|
||||
/* 0x72 */ NoSymbol, NoSymbol,
|
||||
/* 0x73 */ NoSymbol, NoSymbol,
|
||||
/* 0x74 */ NoSymbol, NoSymbol,
|
||||
/* 0x75 */ XK_KP_Equal, NoSymbol,
|
||||
/* 0x76 */ NoSymbol, NoSymbol,
|
||||
/* 0x77 */ NoSymbol, NoSymbol,
|
||||
/* 0x78 */ XK_F21, NoSymbol,
|
||||
/* 0x79 */ XK_F22, NoSymbol,
|
||||
/* 0x7a */ XK_F23, NoSymbol,
|
||||
/* 0x7b */ XK_F24, NoSymbol,
|
||||
/* 0x7c */ XK_KP_Separator, NoSymbol,
|
||||
/* 0x7d */ XK_Meta_L, NoSymbol,
|
||||
/* 0x7e */ XK_Meta_R, NoSymbol,
|
||||
/* 0x7f */ XK_Multi_key, NoSymbol,
|
||||
/* 0x80 */ NoSymbol, NoSymbol,
|
||||
/* 0x81 */ NoSymbol, NoSymbol,
|
||||
/* 0x82 */ NoSymbol, NoSymbol,
|
||||
/* 0x83 */ NoSymbol, NoSymbol,
|
||||
/* 0x84 */ NoSymbol, NoSymbol,
|
||||
/* 0x85 */ NoSymbol, NoSymbol,
|
||||
/* 0x86 */ NoSymbol, NoSymbol,
|
||||
/* 0x87 */ NoSymbol, NoSymbol,
|
||||
/* 0x88 */ NoSymbol, NoSymbol,
|
||||
/* 0x89 */ NoSymbol, NoSymbol,
|
||||
/* 0x8a */ NoSymbol, NoSymbol,
|
||||
/* 0x8b */ NoSymbol, NoSymbol,
|
||||
/* 0x8c */ NoSymbol, NoSymbol,
|
||||
/* 0x8d */ NoSymbol, NoSymbol,
|
||||
/* 0x8e */ NoSymbol, NoSymbol,
|
||||
/* 0x8f */ NoSymbol, NoSymbol,
|
||||
/* 0x90 */ NoSymbol, NoSymbol,
|
||||
/* 0x91 */ NoSymbol, NoSymbol,
|
||||
/* 0x92 */ NoSymbol, NoSymbol,
|
||||
/* 0x93 */ NoSymbol, NoSymbol,
|
||||
/* 0x94 */ NoSymbol, NoSymbol,
|
||||
/* 0x95 */ NoSymbol, NoSymbol,
|
||||
/* 0x96 */ NoSymbol, NoSymbol,
|
||||
/* 0x97 */ NoSymbol, NoSymbol,
|
||||
/* 0x98 */ NoSymbol, NoSymbol,
|
||||
/* 0x99 */ NoSymbol, NoSymbol,
|
||||
/* 0x9a */ NoSymbol, NoSymbol,
|
||||
/* 0x9b */ NoSymbol, NoSymbol,
|
||||
/* 0x9c */ NoSymbol, NoSymbol,
|
||||
/* 0x9d */ NoSymbol, NoSymbol,
|
||||
/* 0x9e */ NoSymbol, NoSymbol,
|
||||
/* 0x9f */ NoSymbol, NoSymbol,
|
||||
/* 0xa0 */ NoSymbol, NoSymbol,
|
||||
/* 0xa1 */ NoSymbol, NoSymbol,
|
||||
/* 0xa2 */ NoSymbol, NoSymbol,
|
||||
/* 0xa3 */ NoSymbol, NoSymbol,
|
||||
/* 0xa4 */ NoSymbol, NoSymbol,
|
||||
/* 0xa5 */ NoSymbol, NoSymbol,
|
||||
/* 0xa6 */ NoSymbol, NoSymbol,
|
||||
/* 0xa7 */ NoSymbol, NoSymbol,
|
||||
/* 0xa8 */ NoSymbol, NoSymbol,
|
||||
/* 0xa9 */ NoSymbol, NoSymbol,
|
||||
/* 0xaa */ NoSymbol, NoSymbol,
|
||||
/* 0xab */ NoSymbol, NoSymbol,
|
||||
/* 0xac */ NoSymbol, NoSymbol,
|
||||
/* 0xad */ NoSymbol, NoSymbol,
|
||||
/* 0xae */ NoSymbol, NoSymbol,
|
||||
/* 0xaf */ NoSymbol, NoSymbol,
|
||||
/* 0xb0 */ NoSymbol, NoSymbol,
|
||||
/* 0xb1 */ NoSymbol, NoSymbol,
|
||||
/* 0xb2 */ NoSymbol, NoSymbol,
|
||||
/* 0xb3 */ NoSymbol, NoSymbol,
|
||||
/* 0xb4 */ NoSymbol, NoSymbol,
|
||||
/* 0xb5 */ NoSymbol, NoSymbol,
|
||||
/* 0xb6 */ NoSymbol, NoSymbol,
|
||||
/* 0xb7 */ NoSymbol, NoSymbol,
|
||||
/* 0xb8 */ NoSymbol, NoSymbol,
|
||||
/* 0xb9 */ NoSymbol, NoSymbol,
|
||||
/* 0xba */ NoSymbol, NoSymbol,
|
||||
/* 0xbb */ NoSymbol, NoSymbol,
|
||||
/* 0xbc */ NoSymbol, NoSymbol,
|
||||
/* 0xbd */ NoSymbol, NoSymbol,
|
||||
/* 0xbe */ NoSymbol, NoSymbol,
|
||||
/* 0xbf */ NoSymbol, NoSymbol,
|
||||
/* 0xc0 */ NoSymbol, NoSymbol,
|
||||
/* 0xc1 */ NoSymbol, NoSymbol,
|
||||
/* 0xc2 */ NoSymbol, NoSymbol,
|
||||
/* 0xc3 */ NoSymbol, NoSymbol,
|
||||
/* 0xc4 */ NoSymbol, NoSymbol,
|
||||
/* 0xc5 */ NoSymbol, NoSymbol,
|
||||
/* 0xc6 */ NoSymbol, NoSymbol,
|
||||
/* 0xc7 */ NoSymbol, NoSymbol,
|
||||
/* 0xc8 */ NoSymbol, NoSymbol,
|
||||
/* 0xc9 */ NoSymbol, NoSymbol,
|
||||
/* 0xca */ NoSymbol, NoSymbol,
|
||||
/* 0xcb */ NoSymbol, NoSymbol,
|
||||
/* 0xcc */ NoSymbol, NoSymbol,
|
||||
/* 0xcd */ NoSymbol, NoSymbol,
|
||||
/* 0xce */ NoSymbol, NoSymbol,
|
||||
/* 0xcf */ NoSymbol, NoSymbol,
|
||||
/* 0xd0 */ NoSymbol, NoSymbol,
|
||||
/* 0xd1 */ NoSymbol, NoSymbol,
|
||||
/* 0xd2 */ NoSymbol, NoSymbol,
|
||||
/* 0xd3 */ NoSymbol, NoSymbol,
|
||||
/* 0xd4 */ NoSymbol, NoSymbol,
|
||||
/* 0xd5 */ NoSymbol, NoSymbol,
|
||||
/* 0xd6 */ NoSymbol, NoSymbol,
|
||||
/* 0xd7 */ NoSymbol, NoSymbol,
|
||||
/* 0xd8 */ NoSymbol, NoSymbol,
|
||||
/* 0xd9 */ NoSymbol, NoSymbol,
|
||||
/* 0xda */ NoSymbol, NoSymbol,
|
||||
/* 0xdb */ NoSymbol, NoSymbol,
|
||||
/* 0xdc */ NoSymbol, NoSymbol,
|
||||
/* 0xdd */ NoSymbol, NoSymbol,
|
||||
/* 0xde */ NoSymbol, NoSymbol,
|
||||
/* 0xdf */ NoSymbol, NoSymbol,
|
||||
/* 0xe0 */ NoSymbol, NoSymbol,
|
||||
/* 0xe1 */ NoSymbol, NoSymbol,
|
||||
/* 0xe2 */ NoSymbol, NoSymbol,
|
||||
/* 0xe3 */ NoSymbol, NoSymbol,
|
||||
/* 0xe4 */ NoSymbol, NoSymbol,
|
||||
/* 0xe5 */ NoSymbol, NoSymbol,
|
||||
/* 0xe6 */ NoSymbol, NoSymbol,
|
||||
/* 0xe7 */ NoSymbol, NoSymbol,
|
||||
/* 0xe8 */ NoSymbol, NoSymbol,
|
||||
/* 0xe9 */ NoSymbol, NoSymbol,
|
||||
/* 0xea */ NoSymbol, NoSymbol,
|
||||
/* 0xeb */ NoSymbol, NoSymbol,
|
||||
/* 0xec */ NoSymbol, NoSymbol,
|
||||
/* 0xed */ NoSymbol, NoSymbol,
|
||||
/* 0xee */ NoSymbol, NoSymbol,
|
||||
/* 0xef */ NoSymbol, NoSymbol,
|
||||
/* 0xf0 */ NoSymbol, NoSymbol,
|
||||
/* 0xf1 */ NoSymbol, NoSymbol,
|
||||
/* 0xf2 */ NoSymbol, NoSymbol,
|
||||
/* 0xf3 */ NoSymbol, NoSymbol,
|
||||
/* 0xf4 */ NoSymbol, NoSymbol,
|
||||
/* 0xf5 */ NoSymbol, NoSymbol,
|
||||
/* 0xf6 */ NoSymbol, NoSymbol,
|
||||
/* 0xf7 */ NoSymbol, NoSymbol,
|
||||
};
|
||||
|
||||
static struct { KeySym keysym; CARD8 mask; } modifiers[] = {
|
||||
{ XK_Shift_L, ShiftMask },
|
||||
{ XK_Shift_R, ShiftMask },
|
||||
{ XK_Control_L, ControlMask },
|
||||
{ XK_Control_R, ControlMask },
|
||||
{ XK_Caps_Lock, LockMask },
|
||||
{ XK_Alt_L, AltMask },
|
||||
{ XK_Alt_R, AltMask },
|
||||
{ XK_Meta_L, Mod4Mask },
|
||||
{ XK_Meta_R, Mod4Mask },
|
||||
{ XK_Num_Lock, NumLockMask },
|
||||
{ XK_Scroll_Lock, ScrollLockMask },
|
||||
{ XK_Mode_switch, AltLangMask }
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
static void
|
||||
jstkKbdCtrl(DeviceIntPtr device, KeybdCtrl *ctrl)
|
||||
@@ -69,67 +343,52 @@ jstkKbdCtrl(DeviceIntPtr device, KeybdCtrl *ctrl)
|
||||
static int
|
||||
jstkInitKeys(DeviceIntPtr pJstk, JoystickDevPtr priv)
|
||||
{
|
||||
KeySymsRec keySyms;
|
||||
CARD8 modMap[MAP_LENGTH];
|
||||
KeySym sym;
|
||||
int i, j;
|
||||
XkbSrvInfoPtr xkbi;
|
||||
XkbControlsPtr ctrls;
|
||||
|
||||
static struct { KeySym keysym; CARD8 mask; } modifiers[] = {
|
||||
{ XK_Shift_L, ShiftMask },
|
||||
{ XK_Shift_R, ShiftMask },
|
||||
{ XK_Control_L, ControlMask },
|
||||
{ XK_Control_R, ControlMask },
|
||||
{ XK_Caps_Lock, LockMask },
|
||||
{ XK_Alt_L, AltMask },
|
||||
{ XK_Alt_R, AltMask },
|
||||
{ XK_Num_Lock, NumLockMask },
|
||||
{ XK_Scroll_Lock, ScrollLockMask },
|
||||
{ XK_Mode_switch, AltLangMask }
|
||||
};
|
||||
|
||||
DBG(1, xf86Msg(X_CONFIG, "Initializing Keyboard with %d keys\n",
|
||||
priv->keymap.size));
|
||||
for (i = 0; i < priv->keymap.size; i++)
|
||||
{
|
||||
DBG(6, xf86Msg(X_CONFIG, "Keymap [%d]: 0x%08X\n", MIN_KEYCODE+i,(unsigned int)priv->keymap.map[i]));
|
||||
}
|
||||
|
||||
memset(modMap, 0, sizeof(modMap));
|
||||
|
||||
|
||||
keySyms.map = priv->keymap.map;
|
||||
keySyms.mapWidth = 1;
|
||||
keySyms.minKeyCode = MIN_KEYCODE;
|
||||
/* keySyms.maxKeyCode = MIN_KEYCODE + priv->keymap.size - 1; */
|
||||
keySyms.maxKeyCode = MIN_KEYCODE + sizeof(priv->keymap.map)/sizeof(priv->keymap.map[0]) - 1;
|
||||
|
||||
for (i = 0; i < priv->keymap.size; i++) {
|
||||
sym = priv->keymap.map[i];
|
||||
for (j = 0; j < sizeof(modifiers)/sizeof(modifiers[0]); j++) {
|
||||
if (modifiers[j].keysym == sym)
|
||||
modMap[i + MIN_KEYCODE] = modifiers[j].mask;
|
||||
}
|
||||
}
|
||||
|
||||
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 5
|
||||
{
|
||||
XkbRMLVOSet rmlvo;
|
||||
XkbGetRulesDflts(&rmlvo);
|
||||
/* XkbRMLVOSet rmlvo; */
|
||||
/* XkbGetRulesDflts(&rmlvo); */
|
||||
/* FIXME */
|
||||
#warning KEYMAP FOR ABI_XINPUT_VERSION >= 5 BROKEN RIGHT NOW
|
||||
if (!InitKeyboardDeviceStruct(pJstk, &rmlvo, NULL, jstkKbdCtrl))
|
||||
if (!InitKeyboardDeviceStruct(pJstk, &priv->rmlvo, NULL, jstkKbdCtrl))
|
||||
{
|
||||
ErrorF("unable to init keyboard device\n");
|
||||
return !Success;
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (InitKeyboardDeviceStruct((DevicePtr)pJstk, &keySyms, modMap, NULL, jstkKbdCtrl) == FALSE) {
|
||||
ErrorF("unable to init keyboard device\n");
|
||||
return !Success;
|
||||
KeySymsRec keySyms;
|
||||
CARD8 modMap[MAP_LENGTH];
|
||||
KeySym sym;
|
||||
int i, j;
|
||||
XkbComponentNamesRec xkbnames;
|
||||
|
||||
memset(modMap, 0, sizeof(modMap));
|
||||
memset(&xkbnames, 0, sizeof(xkbnames));
|
||||
|
||||
keySyms.map = map;
|
||||
keySyms.mapWidth = GLYPHS_PER_KEY;
|
||||
keySyms.minKeyCode = MIN_KEYCODE;
|
||||
keySyms.maxKeyCode = MIN_KEYCODE + (sizeof(map) / sizeof(map[0])) / GLYPHS_PER_KEY - 1;
|
||||
|
||||
for (i = 0; i < (sizeof(map) / sizeof(map[0])) / GLYPHS_PER_KEY; i++) {
|
||||
sym = map[i * GLYPHS_PER_KEY];
|
||||
for (j = 0; j < sizeof(modifiers)/sizeof(modifiers[0]); j++) {
|
||||
if (modifiers[j].keysym == sym)
|
||||
modMap[i + MIN_KEYCODE] = modifiers[j].mask;
|
||||
}
|
||||
}
|
||||
|
||||
ErrorF("%s, %s, %s, %s, %s\n", priv->rmlvo.rules, priv->rmlvo.model, priv->rmlvo.layout, priv->rmlvo.variant, priv->rmlvo.options);
|
||||
XkbSetRulesDflts(priv->rmlvo.rules, priv->rmlvo.model,
|
||||
priv->rmlvo.layout, priv->rmlvo.variant,
|
||||
priv->rmlvo.options);
|
||||
if (!XkbInitKeyboardDeviceStruct(pJstk, &xkbnames,
|
||||
&keySyms, modMap, NULL,
|
||||
jstkKbdCtrl))
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
/* Set Autorepeat and Delay */
|
||||
@@ -175,7 +434,6 @@ jstkGenerateKeys(LocalDevicePtr device, KEYSCANCODES keys, char pressed)
|
||||
else k = keys[MAXKEYSPERBUTTON - i - 1];
|
||||
|
||||
if (k != 0) {
|
||||
k = k + MIN_KEYCODE;
|
||||
DBG(2, ErrorF("Generating key %s event with keycode %d\n",
|
||||
(pressed)?"press":"release", k));
|
||||
xf86PostKeyboardEvent(device->dev, k, pressed);
|
||||
|
||||
@@ -35,36 +35,10 @@
|
||||
#include <X11/XF86keysym.h>
|
||||
#include "jstk.h"
|
||||
#include "jstk_options.h"
|
||||
#include "StrKeysym.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
*
|
||||
* jstkGetKeyNumberInMap --
|
||||
*
|
||||
* Adds a KeySym to the keymap and returns the index
|
||||
*
|
||||
***********************************************************************
|
||||
*/
|
||||
|
||||
static int
|
||||
jstkGetKeyNumberInMap(JoystickDevPtr priv,
|
||||
KeySym keysym)
|
||||
{
|
||||
int j;
|
||||
for (j=0; j<priv->keymap.size; j++)
|
||||
if (priv->keymap.map[j] == keysym)
|
||||
break;
|
||||
if (j >= sizeof(priv->keymap.map)/sizeof(priv->keymap.map[0])) return 0;
|
||||
priv->keymap.map[j] = keysym;
|
||||
if (j + 1 > priv->keymap.size) priv->keymap.size = j + 1;
|
||||
return j;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
*
|
||||
* jstkGetAxisMapping --
|
||||
@@ -156,21 +130,17 @@ jstkParseButtonOption(const char* org,
|
||||
button->mapping = JSTK_MAPPING_KEY;
|
||||
|
||||
for (value = 0; value < MAXKEYSPERBUTTON; value++) if (current != NULL) {
|
||||
unsigned key;
|
||||
unsigned int key;
|
||||
next = strchr(current, ',');
|
||||
if (!next) next = strchr(current, '+');
|
||||
if (!next) next = strchr(current, '+');
|
||||
if (next) *(next++) = '\0';
|
||||
#ifdef _STRKEYSYM_H_INCLUDED_
|
||||
key = XStringToKeysym(current);
|
||||
if (key == NoSymbol)
|
||||
#endif
|
||||
key = strtol(current, NULL, 0);
|
||||
key = strtol(current, NULL, 0);
|
||||
DBG(3, ErrorF("Parsed %s to %d\n", current, key));
|
||||
if (key == 0)
|
||||
xf86Msg(X_WARNING, "%s: error parsing key value: %s.\n",
|
||||
name, current);
|
||||
else {
|
||||
button->keys[value] = jstkGetKeyNumberInMap(priv, key);
|
||||
button->keys[value] = key;
|
||||
}
|
||||
current = next;
|
||||
} else button->keys[value] = 0;
|
||||
@@ -272,17 +242,13 @@ jstkParseAxisOption(const char* org,
|
||||
if (!next) next = strchr(current, '+');
|
||||
if (next) *(next++) = '\0';
|
||||
|
||||
#ifdef _STRKEYSYM_H_INCLUDED_
|
||||
key = XStringToKeysym(current);
|
||||
if (key == NoSymbol)
|
||||
#endif
|
||||
key = strtol(current, NULL, 0);
|
||||
key = strtol(current, NULL, 0);
|
||||
DBG(3, ErrorF("Parsed %s to %d\n", current, key));
|
||||
if (key == 0)
|
||||
xf86Msg(X_WARNING, "%s: error parsing keylow value: %s.\n",
|
||||
name, current);
|
||||
else {
|
||||
axis->keys_low[value] = jstkGetKeyNumberInMap(priv, key);
|
||||
axis->keys_low[value] = key;
|
||||
}
|
||||
current = next;
|
||||
} else axis->keys_low[value] = 0;
|
||||
@@ -299,20 +265,16 @@ jstkParseAxisOption(const char* org,
|
||||
for (value = 0; value < MAXKEYSPERBUTTON; value++)
|
||||
if (current != NULL) {
|
||||
next = strchr(current, ',');
|
||||
if (!next) next = strchr(current, '+');
|
||||
if (!next) next = strchr(current, '+');
|
||||
if (next) *(next++) = '\0';
|
||||
key = strtol(current, NULL, 0);
|
||||
#ifdef _STRKEYSYM_H_INCLUDED_
|
||||
key = XStringToKeysym(current);
|
||||
if (key == NoSymbol)
|
||||
#endif
|
||||
key = strtol(current, NULL, 0);
|
||||
key = strtol(current, NULL, 0);
|
||||
DBG(3, ErrorF("Parsed %s to %d\n", current, key));
|
||||
if (key == 0)
|
||||
xf86Msg(X_WARNING, "%s: error parsing keyhigh value: %s.\n",
|
||||
name, current);
|
||||
else {
|
||||
axis->keys_high[value] = jstkGetKeyNumberInMap(priv, key);
|
||||
axis->keys_high[value] = key;
|
||||
}
|
||||
current = next;
|
||||
} else axis->keys_high[value] = 0;
|
||||
|
||||
@@ -71,7 +71,7 @@ jstkSetProperty(DeviceIntPtr pJstk, Atom atom, XIPropertyValuePtr val,
|
||||
{
|
||||
InputInfoPtr pInfo = pJstk->public.devicePrivate;
|
||||
JoystickDevPtr priv = pInfo->private;
|
||||
int i;
|
||||
int i, j;
|
||||
|
||||
if (atom == prop_debuglevel)
|
||||
{
|
||||
@@ -173,12 +173,38 @@ jstkSetProperty(DeviceIntPtr pJstk, Atom atom, XIPropertyValuePtr val,
|
||||
}
|
||||
}else if (atom == prop_axis_keys_low)
|
||||
{
|
||||
/* FIXME */
|
||||
return BadValue;
|
||||
unsigned char *values;
|
||||
if (val->size != priv->num_axes*MAXKEYSPERBUTTON || val->format != 8 || val->type != XA_INTEGER)
|
||||
return BadMatch;
|
||||
if (!checkonly)
|
||||
{
|
||||
values = (unsigned char*)val->data;
|
||||
for (i =0; i<val->size/MAXKEYSPERBUTTON; i++) {
|
||||
DBG(1, ErrorF("key_low of axis %d set to ", i));
|
||||
for (j = 0; j<MAXKEYSPERBUTTON; j++) {
|
||||
priv->axis[i].keys_low[j] = values[i*MAXKEYSPERBUTTON+j];
|
||||
DBG(1, ErrorF("%d ", priv->axis[i].keys_low[j]));
|
||||
}
|
||||
DBG(1, ErrorF("\n"));
|
||||
}
|
||||
}
|
||||
}else if (atom == prop_axis_keys_high)
|
||||
{
|
||||
/* FIXME */
|
||||
return BadValue;
|
||||
unsigned char *values;
|
||||
if (val->size != priv->num_axes*MAXKEYSPERBUTTON || val->format != 8 || val->type != XA_INTEGER)
|
||||
return BadMatch;
|
||||
if (!checkonly)
|
||||
{
|
||||
values = (unsigned char*)val->data;
|
||||
for (i =0; i<val->size/MAXKEYSPERBUTTON; i++) {
|
||||
DBG(1, ErrorF("key_high of axis %d set to ", i));
|
||||
for (j = 0; j<MAXKEYSPERBUTTON; j++) {
|
||||
priv->axis[i].keys_high[j] = values[i*MAXKEYSPERBUTTON+j];
|
||||
DBG(1, ErrorF("%d ", priv->axis[i].keys_high[j]));
|
||||
}
|
||||
DBG(1, ErrorF("\n"));
|
||||
}
|
||||
}
|
||||
}else if (atom == prop_button_mapping)
|
||||
{
|
||||
INT8 *values;
|
||||
@@ -231,8 +257,21 @@ jstkSetProperty(DeviceIntPtr pJstk, Atom atom, XIPropertyValuePtr val,
|
||||
}
|
||||
}else if (atom == prop_button_keys)
|
||||
{
|
||||
/* FIXME */
|
||||
return BadValue;
|
||||
unsigned char *values;
|
||||
if (val->size != priv->num_buttons*MAXKEYSPERBUTTON || val->format != 8 || val->type != XA_INTEGER)
|
||||
return BadMatch;
|
||||
if (!checkonly)
|
||||
{
|
||||
values = (unsigned char*)val->data;
|
||||
for (i = 0; i<val->size/MAXKEYSPERBUTTON; i++) {
|
||||
DBG(1, ErrorF("keys of button %d set to ", i));
|
||||
for (j = 0; j<MAXKEYSPERBUTTON; j++) {
|
||||
priv->button[i].keys[j] = values[i*MAXKEYSPERBUTTON+j];
|
||||
DBG(1, ErrorF("%d ", priv->button[i].keys[j]));
|
||||
}
|
||||
DBG(1, ErrorF("\n"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* property not handled, report success */
|
||||
@@ -243,11 +282,11 @@ Bool
|
||||
jstkInitProperties(DeviceIntPtr pJstk, JoystickDevPtr priv)
|
||||
{
|
||||
INT32 axes_values32[MAXAXES];
|
||||
INT8 axes_values8[MAXAXES];
|
||||
INT8 button_values8[MAXBUTTONS];
|
||||
INT8 axes_values8[MAXAXES*MAXKEYSPERBUTTON];
|
||||
INT8 button_values8[MAXBUTTONS*MAXKEYSPERBUTTON];
|
||||
float axes_floats[MAXAXES];
|
||||
float button_floats[MAXBUTTONS];
|
||||
int i;
|
||||
int i, j;
|
||||
|
||||
XIRegisterPropertyHandler(pJstk, jstkSetProperty, NULL, NULL);
|
||||
|
||||
@@ -347,12 +386,26 @@ jstkInitProperties(DeviceIntPtr pJstk, JoystickDevPtr priv)
|
||||
}
|
||||
|
||||
/* priv->axis[].keys_low */
|
||||
/* FIXME: prop_axis_keys_low */
|
||||
for (i=0;i<priv->num_axes;i++)
|
||||
for (j=0;j<MAXKEYSPERBUTTON;j++)
|
||||
axes_values8[i*MAXKEYSPERBUTTON+j] = (INT8)priv->axis[i].keys_low[j];
|
||||
prop_axis_keys_low = MakeAtom(JSTK_PROP_AXIS_KEYS_LOW, strlen(JSTK_PROP_AXIS_KEYS_LOW), TRUE);
|
||||
XIChangeDeviceProperty(pJstk, prop_axis_keys_low, XA_INTEGER, 8,
|
||||
PropModeReplace, priv->num_axes*MAXKEYSPERBUTTON,
|
||||
axes_values8,
|
||||
FALSE);
|
||||
XISetDevicePropertyDeletable(pJstk, prop_axis_keys_low, FALSE);
|
||||
|
||||
/* priv->axis[].keys_high */
|
||||
/* FIXME: prop_axis_keys_high */
|
||||
|
||||
|
||||
for (i=0;i<priv->num_axes;i++)
|
||||
for (j=0;j<MAXKEYSPERBUTTON;j++)
|
||||
axes_values8[i*MAXKEYSPERBUTTON+j] = (INT8)priv->axis[i].keys_high[j];
|
||||
prop_axis_keys_high = MakeAtom(JSTK_PROP_AXIS_KEYS_HIGH, strlen(JSTK_PROP_AXIS_KEYS_HIGH), TRUE);
|
||||
XIChangeDeviceProperty(pJstk, prop_axis_keys_high, XA_INTEGER, 8,
|
||||
PropModeReplace, priv->num_axes*MAXKEYSPERBUTTON,
|
||||
axes_values8,
|
||||
FALSE);
|
||||
XISetDevicePropertyDeletable(pJstk, prop_axis_keys_high, FALSE);
|
||||
|
||||
|
||||
/* priv->button[].mapping */
|
||||
@@ -391,7 +444,15 @@ jstkInitProperties(DeviceIntPtr pJstk, JoystickDevPtr priv)
|
||||
}
|
||||
|
||||
/* priv->button[].keys */
|
||||
/* FIXME: prop_button_keys */
|
||||
for (i=0;i<priv->num_buttons;i++)
|
||||
for (j=0;j<MAXKEYSPERBUTTON;j++)
|
||||
button_values8[i*MAXKEYSPERBUTTON+j] = (INT8)priv->button[i].keys[j];
|
||||
prop_button_keys = MakeAtom(JSTK_PROP_BUTTON_KEYS, strlen(JSTK_PROP_BUTTON_KEYS), TRUE);
|
||||
XIChangeDeviceProperty(pJstk, prop_button_keys, XA_INTEGER, 8,
|
||||
PropModeReplace, priv->num_buttons*MAXKEYSPERBUTTON,
|
||||
button_values8,
|
||||
FALSE);
|
||||
XISetDevicePropertyDeletable(pJstk, prop_button_keys, FALSE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
2694
src/ks_tables.h
2694
src/ks_tables.h
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user