sync code with last improvements from OpenBSD

This commit is contained in:
purplerain 2023-08-28 05:57:34 +00:00
commit 88965415ff
Signed by: purplerain
GPG key ID: F42C07F07E2E35B7
26235 changed files with 29195616 additions and 0 deletions

View file

@ -0,0 +1,132 @@
/*
* Copyright 2007-2008 by Sascha Hlusiak. <saschahlusiak@freedesktop.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 Sascha Hlusiak not be used in
* advertising or publicity pertaining to distribution of the software without
* specific, written prior permission. Sascha Hlusiak makes no
* representations about the suitability of this software for any purpose. It
* is provided "as is" without express or implied warranty.
*
* SASCHA HLUSIAK DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
* EVENT SHALL SASCHA HLUSIAK 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.
*
*/
#ifndef __JSTK_H_INCLUDED__
#define __JSTK_H_INCLUDED__
#include <xf86Xinput.h>
#include <X11/extensions/XIproto.h>
#include "joystick-properties.h" /* definitions */
#define MAXBUTTONS 32
#define MAXAXES 32
#define MAXKEYSPERBUTTON 4
#define MIN_KEYCODE 8
#define BUTTONMAP_SIZE 32
/******************************************************************************
* debugging macro
*****************************************************************************/
#ifdef DBG
#undef DBG
#endif
#if DEBUG
extern char debug_level;
#define DBG(lvl, f) {if ((lvl) <= debug_level) f;}
#else
#define DBG(lvl, f)
#endif
#ifndef XI_JOYSTICK
#define XI_JOYSTICK "JOYSTICK"
#endif
#ifndef XI86_SERVER_FD
#define XI86_SERVER_FD 0x20
#endif
typedef enum _JOYSTICKEVENT {
EVENT_NONE=0,
EVENT_BUTTON,
EVENT_AXIS
} JOYSTICKEVENT;
typedef struct _JoystickDevRec *JoystickDevPtr;
typedef int(*jstkOpenDeviceProc)(JoystickDevPtr joystick, Bool probe);
typedef void(*jstkCloseDeviceProc)(JoystickDevPtr joystick);
typedef int(*jstkReadDataProc)(JoystickDevPtr joystick,
JOYSTICKEVENT *event, int *number);
typedef unsigned char KEYSCANCODES [MAXKEYSPERBUTTON];
typedef struct _AXIS {
JSTK_TYPE type;
JSTK_MAPPING mapping;
int value, oldvalue;
int valuator;
int deadzone;
float currentspeed; /* TYPE_ACCELERATED */
float previousposition; /* TYPE_ABSOLUTE */
float amplify;
float subpixel; /* Pending subpixel movement */
KEYSCANCODES keys_low, keys_high; /* MAPPING_KEY */
int key_isdown;
OsTimerPtr timer;
Bool timerrunning;
} AXIS;
typedef struct _BUTTON {
JSTK_MAPPING mapping;
char pressed;
int buttonnumber; /* MAPPING_BUTTON */
float amplify; /* MAPPING_X/Y/ZX/ZY,
MAPPING_SPEED_MULTIPLY */
float currentspeed; /* MAPPING_X/Y/ZX/ZY */
float subpixel; /* Pending subpixel movement */
KEYSCANCODES keys; /* MAPPING_KEY */
} BUTTON;
typedef struct _JoystickDevRec {
int fd; /* Actual file descriptor */
jstkOpenDeviceProc open_proc; /* Call for re-open backend */
jstkCloseDeviceProc close_proc; /* Callback for closing the backend */
jstkReadDataProc read_proc; /* Callback for reading data from the backend */
void *devicedata; /* Extra platform device dependent data */
char *device; /* Name of the device */
InputInfoPtr joystick_device; /* Back pointer to the joystick device */
InputInfoPtr keyboard_device; /* Slave device for keyboard events */
OsTimerPtr timer; /* Timer for axis movement */
Bool timerrunning;
Bool mouse_enabled, keys_enabled;
float amplify; /* Global amplifier of axis movement */
int repeat_delay, repeat_interval; /* Key autorepeat */
CARD8 num_buttons, num_axes; /* Detected number of buttons/axes */
XkbRMLVOSet rmlvo;
AXIS axis[MAXAXES]; /* Configuration per axis */
BUTTON button[MAXBUTTONS]; /* Configuration per button */
} JoystickDevRec;
void jstkCloseDevice(JoystickDevPtr priv);
#endif