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

Generated June 29, 2004 for Distributed Multihead X by doxygen 1.3.4.