Main Page | Alphabetical List | Data Structures | File List | Data Fields | Globals

# dmxinputinit.h

Go to the documentation of this file.

    00001 /* $XFree86$ */
    00002 /*
    00003  * Copyright 2002 Red Hat Inc., Durham, North Carolina.
    00004  *
    00005  * All Rights Reserved.
    00006  *
    00007  * Permission is hereby granted, free of charge, to any person obtaining
    00008  * a copy of this software and associated documentation files (the
    00009  * "Software"), to deal in the Software without restriction, including
    00010  * without limitation on the rights to use, copy, modify, merge,
    00011  * publish, distribute, sublicense, and/or sell copies of the Software,
    00012  * and to permit persons to whom the Software is furnished to do so,
    00013  * subject to the following conditions:
    00014  *
    00015  * The above copyright notice and this permission notice (including the
    00016  * next paragraph) shall be included in all copies or substantial
    00017  * portions of the Software.
    00018  *
    00019  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    00020  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    00021  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    00022  * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
    00023  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
    00024  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    00025  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    00026  * SOFTWARE.
    00027  */
    00028
    00029 /*
    00030  * Authors:
    00031  *   Rickard E. (Rik) Faith <faith@redhat.com>
    00032  *
    00033  */
    00034
    00038 #ifndef _DMXINPUTINIT_H_
    00039 #define _DMXINPUTINIT_H_
    00040
    00041 #include "dmx.h"
    00042 #include "dmxinput.h"
    00043 #include "dmxlog.h"
    00044
    00045
    00046 #define DMX_LOCAL_DEFAULT_KEYBOARD "kbd"
    00047 #define DMX_LOCAL_DEFAULT_POINTER  "ps2"
    00048 #define DMX_MAX_BUTTONS            256
    00049 #define DMX_MOTION_SIZE            256
    00050 #define DMX_MAX_VALUATORS          32
    00051 #define DMX_MAX_AXES               32
    00052 #define DMX_MAX_XINPUT_EVENT_TYPES 100
    00053 #define DMX_MAP_ENTRIES            16 /* Must be a power of 2 */
    00054 #define DMX_MAP_MASK               (DMX_MAP_ENTRIES - 1)
    00055
    00056 typedef enum {
    00057     DMX_FUNCTION_GRAB,
    00058     DMX_FUNCTION_TERMINATE,
    00059     DMX_FUNCTION_FINE
    00060 } DMXFunctionType;
    00061
    00062 typedef enum {
    00063     DMX_LOCAL_HIGHLEVEL,
    00064     DMX_LOCAL_KEYBOARD,
    00065     DMX_LOCAL_MOUSE,
    00066     DMX_LOCAL_OTHER
    00067 } DMXLocalInputType;
    00068
    00069 typedef enum {
    00070     DMX_LOCAL_TYPE_LOCAL,
    00071     DMX_LOCAL_TYPE_CONSOLE,
    00072     DMX_LOCAL_TYPE_BACKEND,
    00073     DMX_LOCAL_TYPE_COMMON
    00074 } DMXLocalInputExtType;
    00075
    00076 typedef enum {
    00077     DMX_RELATIVE,
    00078     DMX_ABSOLUTE,
    00079     DMX_ABSOLUTE_CONFINED
    00080 } DMXMotionType;
    00081
    00084 typedef struct _DMXLocalInitInfo {
    00085     int                  keyboard;
    00087     int                  keyClass;
    00088     KeySymsRec           keySyms;
    00089     int                  freemap;
    00090     CARD8                modMap[MAP_LENGTH];
    00091 #ifdef XKB
    00092     XkbDescPtr           xkb;
    00093     XkbComponentNamesRec names;
    00094     int                  freenames;
    00095     int                  force;
    00096 #endif
    00097
    00098     int                  buttonClass;
    00099     int                  numButtons;
    00100     unsigned char        map[DMX_MAX_BUTTONS];
    00102     int                  valuatorClass;
    00104     int                  numRelAxes;
    00105     int                  numAbsAxes;
    00106     int                  minval[DMX_MAX_AXES];
    00107     int                  maxval[DMX_MAX_AXES];
    00108     int                  res[DMX_MAX_AXES];
    00109     int                  minres[DMX_MAX_AXES];
    00110     int                  maxres[DMX_MAX_AXES];
    00112     int                  focusClass;
    00114     int                  proximityClass;
    00116     int                  kbdFeedbackClass;
    00118     int                  ptrFeedbackClass;
    00120     int                  ledFeedbackClass;
    00122     int                  belFeedbackClass;
    00124     int                  intFeedbackClass;
    00126     int                  strFeedbackClass;
    00129     int                  maxSymbols;
    00130     int                  maxSymbolsSupported;
    00131     KeySym               *symbols;
    00132 } DMXLocalInitInfo, *DMXLocalInitInfoPtr;
    00133
    00134 typedef pointer (*dmxCreatePrivateProcPtr)(DeviceIntPtr);
    00135 typedef void    (*dmxDestroyPrivateProcPtr)(pointer);
    00136
    00137 typedef void    (*dmxInitProcPtr)(DevicePtr);
    00138 typedef void    (*dmxReInitProcPtr)(DevicePtr);
    00139 typedef void    (*dmxLateReInitProcPtr)(DevicePtr);
    00140 typedef void    (*dmxGetInfoProcPtr)(DevicePtr, DMXLocalInitInfoPtr);
    00141 typedef int     (*dmxOnProcPtr)(DevicePtr);
    00142 typedef void    (*dmxOffProcPtr)(DevicePtr);
    00143 typedef void    (*dmxUpdatePositionProcPtr)(pointer, int x, int y);
    00144
    00145 typedef void    (*dmxVTPreSwitchProcPtr)(pointer);  /* Turn I/O Off */
    00146 typedef void    (*dmxVTPostSwitchProcPtr)(pointer); /* Turn I/O On */
    00147 typedef void    (*dmxVTSwitchReturnProcPtr)(pointer);
    00148 typedef int     (*dmxVTSwitchProcPtr)(pointer, int vt,
    00149                                       dmxVTSwitchReturnProcPtr, pointer);
    00150
    00151 typedef void    (*dmxMotionProcPtr)(DevicePtr,
    00152                                     int *valuators,
    00153                                     int firstAxis,
    00154                                     int axesCount,
    00155                                     DMXMotionType type,
    00156                                     DMXBlockType block);
    00157 typedef void    (*dmxEnqueueProcPtr)(DevicePtr, int type, int detail,
    00158                                      KeySym keySym, XEvent *e,
    00159                                      DMXBlockType block);
    00160 typedef int     (*dmxCheckSpecialProcPtr)(DevicePtr, KeySym keySym);
    00161 typedef void    (*dmxCollectEventsProcPtr)(DevicePtr,
    00162                                            dmxMotionProcPtr,
    00163                                            dmxEnqueueProcPtr,
    00164                                            dmxCheckSpecialProcPtr,
    00165                                            DMXBlockType);
    00166 typedef void    (*dmxProcessInputProcPtr)(pointer);
    00167 typedef void    (*dmxUpdateInfoProcPtr)(pointer, DMXUpdateType, WindowPtr);
    00168 typedef int     (*dmxFunctionsProcPtr)(pointer, DMXFunctionType);
    00169
    00170 typedef void    (*dmxKBCtrlProcPtr)(DevicePtr, KeybdCtrl *ctrl);
    00171 typedef void    (*dmxMCtrlProcPtr)(DevicePtr, PtrCtrl *ctrl);
    00172 typedef void    (*dmxKBBellProcPtr)(DevicePtr, int percent,
    00173                                     int volume, int pitch, int duration);
    00174
    00177 typedef struct _DMXEventMap {
    00178     int remote;
    00179     int server;
    00180 } DMXEventMap;
    00181
    00185 typedef struct _DMXLocalInputInfo {
    00186     const char               *name;
    00187     DMXLocalInputType        type;
    00188     DMXLocalInputExtType     extType;
    00189     int                      binding;
    00193                                 /* Low-level (e.g., keyboard/mouse drivers) */
    00194
    00195     dmxCreatePrivateProcPtr  create_private;
    00198     dmxDestroyPrivateProcPtr destroy_private;
    00201     dmxInitProcPtr           init;
    00202     dmxReInitProcPtr         reinit;
    00205     dmxLateReInitProcPtr     latereinit;
    00209     dmxGetInfoProcPtr        get_info;
    00210     dmxOnProcPtr             on;
    00211     dmxOffProcPtr            off;
    00212     dmxUpdatePositionProcPtr update_position;
    00215     dmxVTPreSwitchProcPtr    vt_pre_switch;
    00216     dmxVTPostSwitchProcPtr   vt_post_switch;
    00217     dmxVTSwitchProcPtr       vt_switch;
    00219     dmxCollectEventsProcPtr  collect_events;
    00222     dmxProcessInputProcPtr   process_input;
    00224     dmxFunctionsProcPtr      functions;
    00225     dmxUpdateInfoProcPtr     update_info;
    00228     dmxMCtrlProcPtr          mCtrl;
    00229     dmxKBCtrlProcPtr         kCtrl;
    00230     dmxKBBellProcPtr         kBell;
    00232     pointer                  private;
    00233     int                      isCore;
    00234     int                      sendsCore;
    00235     KeybdCtrl                kctrl;
    00236     PtrCtrl                  mctrl;
    00238     DeviceIntPtr             pDevice;
    00239     int                      inputIdx;
    00240     int                      lastX, lastY;
    00244     int                      head;
    00246     int                      tail;
    00248     unsigned long            *history;
    00249     int                      *valuators;
    00251                                 /* for XInput ChangePointerDevice */
    00252     int                      (*savedMotionProc)(DeviceIntPtr,
    00253                                                 xTimecoord *,
    00254                                                 unsigned long,
    00255                                                 unsigned long,
    00256                                                 ScreenPtr);
    00257     int                      savedMotionEvents;
    00258     int                      savedSendsCore;
    00260     DMXEventMap              map[DMX_MAP_ENTRIES];
    00261     int                      mapOptimize;
    00265     long                     deviceId;
    00267     const char               *deviceName;
    00269 } DMXLocalInputInfoRec;
    00270
    00271 extern DMXLocalInputInfoPtr dmxLocalCorePointer, dmxLocalCoreKeyboard;
    00272
    00273 extern void                 dmxLocalInitInput(DMXInputInfo *dmxInput);
    00274 extern DMXLocalInputInfoPtr dmxInputCopyLocal(DMXInputInfo *dmxInput,
    00275                                               DMXLocalInputInfoPtr s);
    00276
    00277 extern void dmxChangePointerControl(DeviceIntPtr pDevice, PtrCtrl *ctrl);
    00278 extern void dmxKeyboardKbdCtrlProc(DeviceIntPtr pDevice, KeybdCtrl *ctrl);
    00279 extern void dmxKeyboardBellProc(int percent, DeviceIntPtr pDevice,
    00280                                 pointer ctrl, int unknown);
    00281
    00282 extern int  dmxInputExtensionErrorHandler(Display *dsp, char *name,
    00283                                           char *reason);
    00284
    00285 extern int          dmxInputDetach(DMXInputInfo *dmxInput);
    00286 extern void         dmxInputDetachAll(DMXScreenInfo *dmxScreen);
    00287 extern int          dmxInputDetachId(int id);
    00288 extern DMXInputInfo *dmxInputLocateId(int id);
    00289 extern int          dmxInputAttachConsole(const char *name, int isCore,
    00290                                           int *id);
    00291 extern int          dmxInputAttachBackend(int physicalScreen, int isCore,
    00292                                           int *id);
    00293
    00294 #endif