summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSascha Hlusiak <saschahlusiak@arcor.de>2009-03-19 08:36:10 +0100
committerSascha Hlusiak <saschahlusiak@arcor.de>2009-03-19 08:36:10 +0100
commitdca19bde2bdd275744e9182dd49a2f2dd81f8c81 (patch)
tree7ddee582b284116122fac79eac27b760ac461283
parent6f2a211b7c3b45e8de9a90835fb7f1a24635c8e5 (diff)
parentc6217b5849b1c2680a9a8c29ca26b3468955b1c1 (diff)
Merge branch 'master' of sascha:develop/xorg/xf86-input-joystick
-rw-r--r--include/joystick-properties.h4
-rw-r--r--src/jstk_properties.c64
2 files changed, 60 insertions, 8 deletions
diff --git a/include/joystick-properties.h b/include/joystick-properties.h
index 8dc5447..0f0d4ed 100644
--- a/include/joystick-properties.h
+++ b/include/joystick-properties.h
@@ -90,7 +90,7 @@ typedef enum _JSTK_MAPPING {
#define JSTK_PROP_AXIS_MAPPING "Axis Mapping"
/** Set movement factor of axis (default 1.0f) */
-/* TODO float, movement amplify value per axis */
+/* FLOAT[MAXAXES], movement amplify per axis */
#define JSTK_PROP_AXIS_AMPLIFY "Axis Amplify"
/** Set KeySyms for axis in low position */
@@ -112,7 +112,7 @@ typedef enum _JSTK_MAPPING {
#define JSTK_PROP_BUTTON_BUTTONNUMBER "Button Number"
/** Set amplify factor of button (default 1.0f) */
-/* TODO float, button amplify value per button */
+/* FLOAT[MAXBUTTONS], amplify value per button */
#define JSTK_PROP_BUTTON_AMPLIFY "Button Amplify"
/** Set KeySyms for button */
diff --git a/src/jstk_properties.c b/src/jstk_properties.c
index 98f85c5..837606c 100644
--- a/src/jstk_properties.c
+++ b/src/jstk_properties.c
@@ -30,6 +30,7 @@
#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 3
+
#include <misc.h>
#include <xf86.h>
#include <X11/Xatom.h>
@@ -58,6 +59,11 @@ static Atom prop_button_amplify = 0;
static Atom prop_button_keys = 0;
+#ifndef XATOM_FLOAT
+#define XATOM_FLOAT "FLOAT"
+#endif
+static Atom float_type = 0;
+
static int
jstkSetProperty(DeviceIntPtr pJstk, Atom atom, XIPropertyValuePtr val,
@@ -154,8 +160,17 @@ jstkSetProperty(DeviceIntPtr pJstk, Atom atom, XIPropertyValuePtr val,
}
}else if (atom == prop_axis_amplify)
{
- /* FIXME */
- return BadValue;
+ float *values;
+ if (val->size != priv->num_axes || val->format != 32 || val->type != float_type)
+ return BadMatch;
+ if (!checkonly)
+ {
+ values = (float*)val->data;
+ for (i =0; i<val->size; i++) {
+ priv->axis[i].amplify = values[i];
+ DBG(1, ErrorF("Amplify of axis %d set to %.3f\n", i, priv->axis[i].amplify));
+ }
+ }
}else if (atom == prop_axis_keys_low)
{
/* FIXME */
@@ -203,8 +218,17 @@ jstkSetProperty(DeviceIntPtr pJstk, Atom atom, XIPropertyValuePtr val,
return Success;
}else if (atom == prop_button_amplify)
{
- /* FIXME */
- return BadValue;
+ float *values;
+ if (val->size != priv->num_buttons || val->format != 32 || val->type != float_type)
+ return BadMatch;
+ if (!checkonly)
+ {
+ values = (float*)val->data;
+ for (i =0; i<val->size; i++) {
+ priv->button[i].amplify = values[i];
+ DBG(1, ErrorF("Amplify of button %d set to %.3f\n", i, priv->button[i].amplify));
+ }
+ }
}else if (atom == prop_button_keys)
{
/* FIXME */
@@ -221,10 +245,22 @@ jstkInitProperties(DeviceIntPtr pJstk, JoystickDevPtr priv)
INT32 axes_values32[MAXAXES];
INT8 axes_values8[MAXAXES];
INT8 button_values8[MAXBUTTONS];
+ float axes_floats[MAXAXES];
+ float button_floats[MAXBUTTONS];
int i;
XIRegisterPropertyHandler(pJstk, jstkSetProperty, NULL, NULL);
+ float_type = XIGetKnownProperty(XATOM_FLOAT);
+ if (!float_type) {
+ float_type = MakeAtom(XATOM_FLOAT, strlen(XATOM_FLOAT), TRUE);
+ if (!float_type) {
+ xf86Msg(X_WARNING, "%s: Failed to init float atom. "
+ "Disabling support for float properties.\n", pJstk->name);
+ }
+ }
+
+
#ifdef DEBUG
/* Debug Level */
prop_debuglevel = MakeAtom(JSTK_PROP_DEBUGLEVEL, strlen(JSTK_PROP_DEBUGLEVEL), TRUE);
@@ -300,7 +336,15 @@ jstkInitProperties(DeviceIntPtr pJstk, JoystickDevPtr priv)
XISetDevicePropertyDeletable(pJstk, prop_axis_mapping, FALSE);
/* priv->axis[].amplify */
- /* FIXME: prop_axis_amplify as float[] */
+ if (float_type) {
+ for (i=0;i<priv->num_axes;i++)
+ axes_floats[i] = priv->axis[i].amplify;
+ prop_axis_amplify = MakeAtom(JSTK_PROP_AXIS_AMPLIFY, strlen(JSTK_PROP_AXIS_AMPLIFY), TRUE);
+ XIChangeDeviceProperty(pJstk, prop_axis_amplify, float_type, 32,
+ PropModeReplace, priv->num_axes, axes_floats,
+ FALSE);
+ XISetDevicePropertyDeletable(pJstk, prop_axis_amplify, FALSE);
+ }
/* priv->axis[].keys_low */
/* FIXME: prop_axis_keys_low */
@@ -336,7 +380,15 @@ jstkInitProperties(DeviceIntPtr pJstk, JoystickDevPtr priv)
XISetDevicePropertyDeletable(pJstk, prop_button_buttonnumber, FALSE);
/* priv->button[].amplify */
- /* FIXME: prop_button_amplify as float[] */
+ if (float_type) {
+ for (i=0;i<priv->num_buttons;i++)
+ button_floats[i] = priv->button[i].amplify;
+ prop_button_amplify = MakeAtom(JSTK_PROP_BUTTON_AMPLIFY, strlen(JSTK_PROP_BUTTON_AMPLIFY), TRUE);
+ XIChangeDeviceProperty(pJstk, prop_button_amplify, float_type, 32,
+ PropModeReplace, priv->num_buttons, button_floats,
+ FALSE);
+ XISetDevicePropertyDeletable(pJstk, prop_button_amplify, FALSE);
+ }
/* priv->button[].keys */
/* FIXME: prop_button_keys */