#ifndef _DMXINPUTINIT_H_
#define _DMXINPUTINIT_H_
#include "dmx.h"
#include "dmxinput.h"
#include "dmxlog.h"
#define DMX_LOCAL_DEFAULT_KEYBOARD "kbd"
#define DMX_LOCAL_DEFAULT_POINTER "ps2"
#define DMX_MAX_BUTTONS 256
#define DMX_MOTION_SIZE 256
#define DMX_MAX_VALUATORS 32
#define DMX_MAX_AXES 32
#define DMX_MAX_XINPUT_EVENT_TYPES 100
#define DMX_MAP_ENTRIES 16
#define DMX_MAP_MASK (DMX_MAP_ENTRIES - 1)
typedef enum {
DMX_FUNCTION_GRAB,
DMX_FUNCTION_TERMINATE,
DMX_FUNCTION_FINE
} DMXFunctionType;
typedef enum {
DMX_LOCAL_HIGHLEVEL,
DMX_LOCAL_KEYBOARD,
DMX_LOCAL_MOUSE,
DMX_LOCAL_OTHER
} DMXLocalInputType;
typedef enum {
DMX_LOCAL_TYPE_LOCAL,
DMX_LOCAL_TYPE_CONSOLE,
DMX_LOCAL_TYPE_BACKEND,
DMX_LOCAL_TYPE_COMMON
} DMXLocalInputExtType;
typedef enum {
DMX_RELATIVE,
DMX_ABSOLUTE,
DMX_ABSOLUTE_CONFINED
} DMXMotionType;
typedef struct _DMXLocalInitInfo {
int keyboard;
int keyClass;
KeySymsRec keySyms;
int freemap;
CARD8 modMap[MAP_LENGTH];
#ifdef XKB
XkbDescPtr xkb;
XkbComponentNamesRec names;
int freenames;
int force;
#endif
int buttonClass;
int numButtons;
unsigned char map[DMX_MAX_BUTTONS];
int valuatorClass;
int numRelAxes;
int numAbsAxes;
int minval[DMX_MAX_AXES];
int maxval[DMX_MAX_AXES];
int res[DMX_MAX_AXES];
int minres[DMX_MAX_AXES];
int maxres[DMX_MAX_AXES];
int focusClass;
int proximityClass;
int kbdFeedbackClass;
int ptrFeedbackClass;
int ledFeedbackClass;
int belFeedbackClass;
int intFeedbackClass;
int strFeedbackClass;
int maxSymbols;
int maxSymbolsSupported;
KeySym *symbols;
} DMXLocalInitInfo, *DMXLocalInitInfoPtr;
typedef pointer (*dmxCreatePrivateProcPtr)(DeviceIntPtr);
typedef void (*dmxDestroyPrivateProcPtr)(pointer);
typedef void (*dmxInitProcPtr)(DevicePtr);
typedef void (*dmxReInitProcPtr)(DevicePtr);
typedef void (*dmxLateReInitProcPtr)(DevicePtr);
typedef void (*dmxGetInfoProcPtr)(DevicePtr, DMXLocalInitInfoPtr);
typedef int (*dmxOnProcPtr)(DevicePtr);
typedef void (*dmxOffProcPtr)(DevicePtr);
typedef void (*dmxUpdatePositionProcPtr)(pointer, int x, int y);
typedef void (*dmxVTPreSwitchProcPtr)(pointer);
typedef void (*dmxVTPostSwitchProcPtr)(pointer);
typedef void (*dmxVTSwitchReturnProcPtr)(pointer);
typedef int (*dmxVTSwitchProcPtr)(pointer, int vt,
dmxVTSwitchReturnProcPtr, pointer);
typedef void (*dmxMotionProcPtr)(DevicePtr,
int *valuators,
int firstAxis,
int axesCount,
DMXMotionType type,
DMXBlockType block);
typedef void (*dmxEnqueueProcPtr)(DevicePtr, int type, int detail,
KeySym keySym, XEvent *e,
DMXBlockType block);
typedef int (*dmxCheckSpecialProcPtr)(DevicePtr, KeySym keySym);
typedef void (*dmxCollectEventsProcPtr)(DevicePtr,
dmxMotionProcPtr,
dmxEnqueueProcPtr,
dmxCheckSpecialProcPtr,
DMXBlockType);
typedef void (*dmxProcessInputProcPtr)(pointer);
typedef void (*dmxUpdateInfoProcPtr)(pointer, DMXUpdateType, WindowPtr);
typedef int (*dmxFunctionsProcPtr)(pointer, DMXFunctionType);
typedef void (*dmxKBCtrlProcPtr)(DevicePtr, KeybdCtrl *ctrl);
typedef void (*dmxMCtrlProcPtr)(DevicePtr, PtrCtrl *ctrl);
typedef void (*dmxKBBellProcPtr)(DevicePtr, int percent,
int volume, int pitch, int duration);
typedef struct _DMXEventMap {
int remote;
int server;
} DMXEventMap;
typedef struct _DMXLocalInputInfo {
const char *name;
DMXLocalInputType type;
DMXLocalInputExtType extType;
int binding;
dmxCreatePrivateProcPtr create_private;
dmxDestroyPrivateProcPtr destroy_private;
dmxInitProcPtr init;
dmxReInitProcPtr reinit;
dmxLateReInitProcPtr latereinit;
dmxGetInfoProcPtr get_info;
dmxOnProcPtr on;
dmxOffProcPtr off;
dmxUpdatePositionProcPtr update_position;
dmxVTPreSwitchProcPtr vt_pre_switch;
dmxVTPostSwitchProcPtr vt_post_switch;
dmxVTSwitchProcPtr vt_switch;
dmxCollectEventsProcPtr collect_events;
dmxProcessInputProcPtr process_input;
dmxFunctionsProcPtr functions;
dmxUpdateInfoProcPtr update_info;
dmxMCtrlProcPtr mCtrl;
dmxKBCtrlProcPtr kCtrl;
dmxKBBellProcPtr kBell;
pointer private;
int isCore;
int sendsCore;
KeybdCtrl kctrl;
PtrCtrl mctrl;
DeviceIntPtr pDevice;
int inputIdx;
int lastX, lastY;
int head;
int tail;
unsigned long *history;
int *valuators;
int (*savedMotionProc)(DeviceIntPtr,
xTimecoord *,
unsigned long,
unsigned long,
ScreenPtr);
int savedMotionEvents;
int savedSendsCore;
DMXEventMap map[DMX_MAP_ENTRIES];
int mapOptimize;
long deviceId;
const char *deviceName;
} DMXLocalInputInfoRec;
extern DMXLocalInputInfoPtr dmxLocalCorePointer, dmxLocalCoreKeyboard;
extern void dmxLocalInitInput(DMXInputInfo *dmxInput);
extern DMXLocalInputInfoPtr dmxInputCopyLocal(DMXInputInfo *dmxInput,
DMXLocalInputInfoPtr s);
extern void dmxChangePointerControl(DeviceIntPtr pDevice, PtrCtrl *ctrl);
extern void dmxKeyboardKbdCtrlProc(DeviceIntPtr pDevice, KeybdCtrl *ctrl);
extern void dmxKeyboardBellProc(int percent, DeviceIntPtr pDevice,
pointer ctrl, int unknown);
extern int dmxInputExtensionErrorHandler(Display *dsp, char *name,
char *reason);
extern int dmxInputDetach(DMXInputInfo *dmxInput);
extern void dmxInputDetachAll(DMXScreenInfo *dmxScreen);
extern int dmxInputDetachId(int id);
extern DMXInputInfo *dmxInputLocateId(int id);
extern int dmxInputAttachConsole(const char *name, int isCore,
int *id);
extern int dmxInputAttachBackend(int physicalScreen, int isCore,
int *id);
#endif