/* * Copyright 1999 by Frederic Lepied, France. * * 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 name of Frederic Lepied not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. Frederic Lepied makes no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * FREDERIC LEPIED DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL FREDERIC LEPIED 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. * */ /* Input device which doesn't output any event. This device can be used * as a core pointer or as a core keyboard. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #define NEED_XF86_TYPES 1 #if !defined(DGUX) #include #endif #include #include #include /* Needed for InitValuator/Proximity stuff */ #include #include #include #include #include #define MAXBUTTONS 3 /****************************************************************************** * Function/Macro keys variables *****************************************************************************/ static const char *DEFAULTS[] = { NULL }; static void BellProc( int percent, DeviceIntPtr pDev, pointer ctrl, int unused) { return; } static void KeyControlProc( DeviceIntPtr pDev, KeybdCtrl *ctrl) { return; } static void PointerControlProc( DeviceIntPtr dev, PtrCtrl *ctrl) { return; } /* * xf86VoidControlProc -- * * called to change the state of a device. */ static int xf86VoidControlProc(DeviceIntPtr device, int what) { InputInfoPtr pInfo; unsigned char map[MAXBUTTONS + 1]; int i; Bool result; Atom btn_labels[MAXBUTTONS] = {0}; Atom axes_labels[2] = {0}; axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_X); axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_Y); btn_labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT); btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE); btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT); pInfo = device->public.devicePrivate; switch (what) { case DEVICE_INIT: device->public.on = FALSE; for (i = 0; i < MAXBUTTONS; i++) { map[i + 1] = i + 1; } if (InitButtonClassDeviceStruct(device, MAXBUTTONS, btn_labels, map) == FALSE) { ErrorF("unable to allocate Button class device\n"); return !Success; } result = InitKeyboardDeviceStruct(device, NULL, BellProc, KeyControlProc); if (!result) { ErrorF("unable to init keyboard device\n"); return !Success; } if (InitValuatorClassDeviceStruct(device, 2, axes_labels, 0, Absolute) == FALSE) { InitValuatorAxisStruct(device, 0, axes_labels[0], 0, /* min val */1, /* max val */ 1, /* resolution */ 0, /* min_res */ 1); /* max_res */ InitValuatorAxisStruct(device, 1, axes_labels[1], 0, /* min val */1, /* max val */ 1, /* resolution */ 0, /* min_res */ 1); /* max_res */ ErrorF("unable to allocate Valuator class device\n"); return !Success; } else { /* allocate the motion history buffer if needed */ xf86MotionHistoryAllocate(pInfo); } if (InitPtrFeedbackClassDeviceStruct(device, PointerControlProc) == FALSE) { ErrorF("unable to init pointer feedback class device\n"); return !Success; } break; case DEVICE_ON: device->public.on = TRUE; break; case DEVICE_OFF: case DEVICE_CLOSE: device->public.on = FALSE; break; } return Success; } /* * xf86VoidUninit -- * * called when the driver is unloaded. */ static void xf86VoidUninit(InputDriverPtr drv, InputInfoPtr pInfo, int flags) { xf86VoidControlProc(pInfo->dev, DEVICE_OFF); } /* * xf86VoidInit -- * * called when the module subsection is found in XF86Config */ static InputInfoPtr xf86VoidInit(InputDriverPtr drv, IDevPtr dev, int flags) { InputInfoPtr pInfo; if (!(pInfo = xf86AllocateInput(drv, 0))) return NULL; /* Initialise the InputInfoRec. */ pInfo->name = dev->identifier; pInfo->type_name = "Void"; pInfo->flags = XI86_KEYBOARD_CAPABLE | XI86_POINTER_CAPABLE | XI86_SEND_DRAG_EVENTS; pInfo->device_control = xf86VoidControlProc; pInfo->read_input = NULL; pInfo->control_proc = NULL; pInfo->close_proc = NULL; pInfo->switch_mode = NULL; pInfo->conversion_proc = NULL; pInfo->reverse_conversion_proc = NULL; pInfo->fd = -1; pInfo->dev = NULL; pInfo->private_flags = 0; pInfo->always_core_feedback = NULL; pInfo->conf_idev = dev; /* Collect the options, and process the common options. */ xf86CollectInputOptions(pInfo, DEFAULTS, NULL); xf86ProcessCommonOptions(pInfo, pInfo->options); /* Mark the device configured */ pInfo->flags |= XI86_CONFIGURED; /* Return the configured device */ return (pInfo); } _X_EXPORT InputDriverRec VOID = { 1, /* driver version */ "void", /* driver name */ NULL, /* identify */ xf86VoidInit, /* pre-init */ xf86VoidUninit, /* un-init */ NULL, /* module */ }; /* *************************************************************************** * * Dynamic loading functions * *************************************************************************** */ /* * xf86VoidUnplug -- * * called when the module subsection is found in XF86Config */ static void xf86VoidUnplug(pointer p) { } /* * xf86VoidPlug -- * * called when the module subsection is found in XF86Config */ static pointer xf86VoidPlug(pointer module, pointer options, int *errmaj, int *errmin) { xf86AddInputDriver(&VOID, module, 0); return module; } static XF86ModuleVersionInfo xf86VoidVersionRec = { "void", MODULEVENDORSTRING, MODINFOSTRING1, MODINFOSTRING2, XORG_VERSION_CURRENT, PACKAGE_VERSION_MAJOR, PACKAGE_VERSION_MINOR, PACKAGE_VERSION_PATCHLEVEL, ABI_CLASS_XINPUT, ABI_XINPUT_VERSION, MOD_CLASS_XINPUT, {0, 0, 0, 0} /* signature, to be patched into the file by */ /* a tool */ }; _X_EXPORT XF86ModuleData voidModuleData = { &xf86VoidVersionRec, xf86VoidPlug, xf86VoidUnplug };