aboutsummaryrefslogtreecommitdiff
path: root/src/evdev_abs.c
diff options
context:
space:
mode:
authorZephaniah E. Hull <warp@aehallh.com>2006-04-08 17:23:06 +0000
committerZephaniah E. Hull <warp@aehallh.com>2006-04-08 17:23:06 +0000
commitc97fdb44493e55f3456222855293016a596ff56e (patch)
treeee32d366365e870a35ab04bdcd173d4a4b00f7e1 /src/evdev_abs.c
parentUnlibcwrap. Bump server version requirement. Bump to 1.1.0. (diff)
downloadxf86-input-evdev-c97fdb44493e55f3456222855293016a596ff56e.tar.gz
xf86-input-evdev-c97fdb44493e55f3456222855293016a596ff56e.tar.bz2
xf86-input-evdev-c97fdb44493e55f3456222855293016a596ff56e.zip
Remove evdev_abs.c and evdev_rel.c. Added evdev_axes.c.
Change the calls to refer to EvdevAxes instead of Abs and Rel. Include mipointer.h. (Fixes a compile error.) Remove an unused variable from EvdevReadInput. Removed evdev_abs.c and evdev_rel.c, added evdev_axes.c. Added count to rel and abs. Moved btnMap from rel to the new axes. Shuffle some includes, and include stdarg.h. Removed. New, a mix of rel and abs that should actually work in the rel case. Rearrange include order. btnMap was moved from being part of rel to being part of axes. Removed. Rearrange include order. Rearrange include order. NOTE: This commit has been compile tested, not run tested. I have some other changes to make before I can do more heavy testing.
Diffstat (limited to 'src/evdev_abs.c')
-rw-r--r--src/evdev_abs.c339
1 files changed, 0 insertions, 339 deletions
diff --git a/src/evdev_abs.c b/src/evdev_abs.c
deleted file mode 100644
index ded329a..0000000
--- a/src/evdev_abs.c
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * Copyright © 2006 Zephaniah E. Hull
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Soft-
- * ware"), to deal in the Software without restriction, including without
- * limitation the rights to use, copy, modify, merge, publish, distribute,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, provided that the above copyright
- * notice(s) and this permission notice appear in all copies of the Soft-
- * ware and that both the above copyright notice(s) and this permission
- * notice appear in supporting documentation.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
- * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY
- * RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN
- * THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE-
- * QUENTIAL 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 PERFOR-
- * MANCE OF THIS SOFTWARE.
- *
- * Except as contained in this notice, the name of a copyright holder shall
- * not be used in advertising or otherwise to promote the sale, use or
- * other dealings in this Software without prior written authorization of
- * the copyright holder.
- *
- * Author: Zephaniah E. Hull (warp@aehallh.com)
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <X11/keysym.h>
-#include <X11/XF86keysym.h>
-#include <X11/extensions/XIproto.h>
-
-#include <linux/input.h>
-
-#include <misc.h>
-#include <xf86.h>
-#include <xf86str.h>
-#include <xf86_OSproc.h>
-#include <xf86Xinput.h>
-#include <exevents.h>
-#include <mipointer.h>
-
-#include <xf86Module.h>
-
-#include "evdev.h"
-
-#define ArrayLength(a) (sizeof(a) / (sizeof((a)[0])))
-
-#define BITS_PER_LONG (sizeof(long) * 8)
-#define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1)
-#define OFF(x) ((x)%BITS_PER_LONG)
-#define LONG(x) ((x)/BITS_PER_LONG)
-#define TestBit(bit, array) ((array[LONG(bit)] >> OFF(bit)) & 1)
-
-static char *axis_names[] = {
- "X",
- "Y",
- "Z",
- "RX",
- "RY",
- "RZ",
- "THROTTLE",
- "RUDDER",
- "WHEEL",
- "GAS",
- "BRAKE",
- "11",
- "12",
- "13",
- "14",
- "15",
- "HAT0X",
- "HAT0Y",
- "HAT1X",
- "HAT1Y",
- "HAT2X",
- "HAT2Y",
- "HAT3X",
- "HAT3Y",
- "PRESSURE",
- "TILT_X",
- "TILT_Y",
- "TOOL_WIDTH",
- "VOLUME",
- "29",
- "30",
- "31",
- "32",
- "33",
- "34",
- "35",
- "36",
- "37",
- "38",
- "39",
- "MISC",
- "41",
- "42",
- "43",
- "44",
- "45",
- "46",
- "47",
- "48",
- "49",
- "50",
- "51",
- "52",
- "53",
- "54",
- "55",
- "56",
- "57",
- "58",
- "59",
- "60",
- "61",
- "62",
- NULL
-};
-
-static void
-EvdevPtrCtrlProc(DeviceIntPtr device, PtrCtrl *ctrl)
-{
- /* Nothing to do, dix handles all settings */
-}
-
-static Bool
-EvdevConvert(InputInfoPtr pInfo, int first, int num, int v0, int v1, int v2,
- int v3, int v4, int v5, int *x, int *y)
-{
- if (first == 0) {
- *x = v0;
- *y = v1;
- return TRUE;
- } else
- return FALSE;
-}
-
-/*
- * FIXME: Verify that the C standard lets us pass more variable arguments
- * then we specify.
- */
-void
-EvdevAbsSyn (InputInfoPtr pInfo)
-{
- evdevDevicePtr pEvdev = pInfo->private;
- evdevStatePtr state = &pEvdev->state;
- int i;
- int n;
-
- if (!state->abs)
- return;
-
- n = state->abs->n & 1;
-
- if (state->mode == Absolute) {
- if ((state->abs->screen >= 0) && state->abs->axes >= 2) {
- int conv_x, conv_y;
-
- for (i = 0; i < 2; i++)
- state->abs->v[n][i] = xf86ScaleAxis (state->abs->v[n][i], 0,
- state->abs->scale_x,
- state->abs->min[i], state->abs->max[i]);
-
-
- EvdevConvert (pInfo, 0, 2, state->abs->v[n][0], state->abs->v[n][1],
- 0, 0, 0, 0, &conv_x, &conv_y);
- xf86XInputSetScreen (pInfo, state->abs->screen, conv_x, conv_y);
- }
-
-
- xf86PostMotionEvent(pInfo->dev, 1, 0, state->abs->axes,
- state->abs->v[n][0],
- state->abs->v[n][1], state->abs->v[n][2], state->abs->v[n][3],
- state->abs->v[n][4], state->abs->v[n][5], state->abs->v[n][6],
- state->abs->v[n][7], state->abs->v[n][8], state->abs->v[n][9],
- state->abs->v[n][10], state->abs->v[n][11], state->abs->v[n][12],
- state->abs->v[n][13], state->abs->v[n][14], state->abs->v[n][15]);
- } else {
- for (i = 0; i < 2; i++)
- state->rel->v[i] = state->abs->v[n][i] - state->abs->v[!n][i];
- }
-
- state->abs->n++;
-}
-
-void
-EvdevAbsProcess (InputInfoPtr pInfo, struct input_event *ev)
-{
- evdevDevicePtr pEvdev = pInfo->private;
- evdevStatePtr state = &pEvdev->state;
- int n = state->abs->n & 1;
- int map;
-
- if (ev->code >= ABS_MAX)
- return;
-
- map = pEvdev->state.abs->map[ev->code];
- if (map >= 0)
- pEvdev->state.abs->v[n][map] += ev->value;
- else
- pEvdev->state.abs->v[n][-map] -= ev->value;
-
- if (!pEvdev->state.sync)
- EvdevAbsSyn (pInfo);
-}
-
-int
-EvdevAbsInit (DeviceIntPtr device)
-{
- InputInfoPtr pInfo = device->public.devicePrivate;
- evdevDevicePtr pEvdev = pInfo->private;
- int i;
-
- if (!InitValuatorClassDeviceStruct(device, pEvdev->state.abs->axes,
- miPointerGetMotionEvents,
- miPointerGetMotionBufferSize(), 0))
- return !Success;
-
- for (i = 0; i < pEvdev->state.abs->axes; i++) {
- xf86InitValuatorAxisStruct(device, i, 0, 0, 0, 0, 1);
- xf86InitValuatorDefaults(device, i);
- }
-
- if (!InitPtrFeedbackClassDeviceStruct(device, EvdevPtrCtrlProc))
- return !Success;
-
- return Success;
-}
-
-int
-EvdevAbsOn (DeviceIntPtr device)
-{
- return Success;
-}
-
-int
-EvdevAbsOff (DeviceIntPtr device)
-{
- return Success;
-}
-
-int
-EvdevAbsNew(InputInfoPtr pInfo)
-{
- evdevDevicePtr pEvdev = pInfo->private;
- evdevStatePtr state = &pEvdev->state;
- struct input_absinfo absinfo;
- char *s, option[64];
- int i, j, k = 0, real_axes;
-
- real_axes = 0;
- for (i = 0; i < ABS_MAX; i++)
- if (TestBit (i, pEvdev->bits.abs))
- real_axes++;
-
- if (!real_axes)
- return !Success;
-
- state->abs = Xcalloc (sizeof (evdevAbsRec));
-
- xf86Msg(X_INFO, "%s: Found %d absolute axes.\n", pInfo->name, real_axes);
- xf86Msg(X_INFO, "%s: Configuring as pointer.\n", pInfo->name);
- pInfo->flags |= XI86_POINTER_CAPABLE | XI86_SEND_DRAG_EVENTS |
- XI86_CONFIGURED;
- pInfo->type_name = XI_MOUSE;
- pInfo->conversion_proc = EvdevConvert;
-
- for (i = 0, j = 0; i < ABS_MAX; i++) {
- if (!TestBit (i, pEvdev->bits.abs))
- continue;
-
- snprintf(option, sizeof(option), "%sAbsoluteAxisMap", axis_names[i]);
- k = xf86SetIntOption(pInfo->options, option, -1);
- if (k != -1)
- state->abs->map[i] = k;
- else
- state->abs->map[i] = j;
-
- if (k != -1)
- xf86Msg(X_CONFIG, "%s: %s: %d.\n", pInfo->name, option, k);
-
- if (ioctl (pInfo->fd, EVIOCGABS(i), &absinfo) < 0) {
- xf86Msg(X_ERROR, "ioctl EVIOCGABS failed: %s\n", strerror(errno));
- return !Success;
- }
- state->abs->min[state->abs->map[i]] = absinfo.minimum;
- state->abs->max[state->abs->map[i]] = absinfo.maximum;
-
- j++;
- }
-
- state->abs->axes = real_axes;
- for (i = 0; i < ABS_MAX; i++) {
- if (state->abs->map[i] > state->abs->axes)
- state->abs->axes = state->abs->map[i];
- }
-
- if (state->abs->axes != real_axes)
- xf86Msg(X_CONFIG, "%s: Configuring %d absolute axes.\n", pInfo->name,
- state->abs->axes);
-
- s = xf86SetStrOption(pInfo->options, "Mode", "Absolute");
- if (!strcasecmp(s, "Absolute")) {
- state->mode = Absolute;
- xf86Msg(X_CONFIG, "%s: Configuring in %s mode.\n", pInfo->name, s);
- } else if (!strcasecmp(s, "Relative")) {
- state->mode = Relative;
- xf86Msg(X_CONFIG, "%s: Configuring in %s mode.\n", pInfo->name, s);
- } else {
- state->mode = Absolute;
- xf86Msg(X_CONFIG, "%s: Unknown Mode: %s.\n", pInfo->name, s);
- }
-
- if (TestBit (ABS_X, pEvdev->bits.abs) && TestBit (ABS_Y, pEvdev->bits.abs))
- k = xf86SetIntOption(pInfo->options, "AbsoluteScreen", 0);
- else
- k = xf86SetIntOption(pInfo->options, "AbsoluteScreen", -1);
- if (k < screenInfo.numScreens) {
- state->abs->screen = k;
- xf86Msg(X_CONFIG, "%s: AbsoluteScreen: %d.\n", pInfo->name, k);
- } else {
- state->abs->screen = 0;
- xf86Msg(X_CONFIG, "%s: AbsoluteScreen: %d is not a valid screen.\n", pInfo->name, k);
- }
-
- state->abs->scale_x = screenInfo.screens[state->abs->screen]->width;
- state->abs->scale_y = screenInfo.screens[state->abs->screen]->height;
-
- return Success;
-}