Files
xsrc/xfree/xc/programs/Xserver/hw/xfree86/input/void/void.c

287 lines
7.1 KiB
C

/*
* Copyright 1999 by Frederic Lepied, France. <Lepied@XFree86.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 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.
*
*/
/* $XFree86: xc/programs/Xserver/hw/xfree86/input/void/void.c,v 1.3 2004/04/26 22:26:11 dawes Exp $ */
/* Input device which doesn't output any event. This device can be used
* as a core pointer or as a core keyboard.
*/
#ifndef XFree86LOADER
#include <unistd.h>
#include <errno.h>
#endif
#include <misc.h>
#include <xf86.h>
#define NEED_XF86_TYPES
#if !defined(DGUX)
#include <xf86_ansic.h>
#include <xisb.h>
#endif
#include <xf86_OSproc.h>
#include <xf86Xinput.h>
#include <exevents.h> /* Needed for InitValuator/Proximity stuff */
#include <keysym.h>
#include <mipointer.h>
#include <xf86Module.h>
#define MAXBUTTONS 3
/******************************************************************************
* Function/Macro keys variables
*****************************************************************************/
static KeySym void_map[] =
{
NoSymbol, /* 0x00 */
NoSymbol, /* 0x01 */
NoSymbol, /* 0x02 */
NoSymbol, /* 0x03 */
NoSymbol, /* 0x04 */
NoSymbol, /* 0x05 */
NoSymbol, /* 0x06 */
NoSymbol /* 0x07 */
};
/* minKeyCode = 8 because this is the min legal key code */
static KeySymsRec void_keysyms = {
/* map minKeyCode maxKC width */
void_map, 8, 8, 1
};
static const char *DEFAULTS[] = {
NULL
};
/*
* 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;
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,
map) == FALSE) {
ErrorF("unable to allocate Button class device\n");
return !Success;
}
if (InitFocusClassDeviceStruct(device) == FALSE) {
ErrorF("unable to init Focus class device\n");
return !Success;
}
if (InitKeyClassDeviceStruct(device, &void_keysyms, NULL) == FALSE) {
ErrorF("unable to init key class device\n");
return !Success;
}
if (InitValuatorClassDeviceStruct(device,
2,
xf86GetMotionEvents,
0,
Absolute) == FALSE) {
InitValuatorAxisStruct(device,
0,
0, /* min val */1, /* max val */
1, /* resolution */
0, /* min_res */
1); /* max_res */
InitValuatorAxisStruct(device,
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);
}
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->motion_history_proc = xf86GetMotionEvents;
pInfo->history_size = 0;
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 = 0;
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);
}
#ifdef XFree86LOADER
static
#endif
InputDriverRec VOID = {
1, /* driver version */
"void", /* driver name */
NULL, /* identify */
xf86VoidInit, /* pre-init */
xf86VoidUninit, /* un-init */
NULL, /* module */
0 /* ref count */
};
/*
***************************************************************************
*
* Dynamic loading functions
*
***************************************************************************
*/
#ifdef XFree86LOADER
/*
* 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,
XF86_VERSION_CURRENT,
1, 0, 0,
ABI_CLASS_XINPUT,
ABI_XINPUT_VERSION,
MOD_CLASS_XINPUT,
{0, 0, 0, 0} /* signature, to be patched into the file by */
/* a tool */
};
XF86ModuleData voidModuleData = {&xf86VoidVersionRec,
xf86VoidPlug,
xf86VoidUnplug};
#endif /* XFree86LOADER */
/*
* Local variables:
* change-log-default-name: "~/xinput.log"
* c-file-style: "bsd"
* End:
*/
/* end of void.c */