diff options
author | Sascha Hlusiak <saschahlusiak@arcor.de> | 2009-03-19 08:36:10 +0100 |
---|---|---|
committer | Sascha Hlusiak <saschahlusiak@arcor.de> | 2009-03-19 08:36:10 +0100 |
commit | dca19bde2bdd275744e9182dd49a2f2dd81f8c81 (patch) | |
tree | 7ddee582b284116122fac79eac27b760ac461283 | |
parent | 6f2a211b7c3b45e8de9a90835fb7f1a24635c8e5 (diff) | |
parent | c6217b5849b1c2680a9a8c29ca26b3468955b1c1 (diff) |
Merge branch 'master' of sascha:develop/xorg/xf86-input-joystick
-rw-r--r-- | include/joystick-properties.h | 4 | ||||
-rw-r--r-- | src/jstk_properties.c | 64 |
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 */ |