00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00037 #ifndef _DMXINPUTINIT_H_
00038 #define _DMXINPUTINIT_H_
00039 
00040 #include "dmx.h"
00041 #include "dmxinput.h"
00042 #include "dmxlog.h"
00043 
00044 
00045 #define DMX_LOCAL_DEFAULT_KEYBOARD "kbd"
00046 #define DMX_LOCAL_DEFAULT_POINTER  "ps2"
00047 #define DMX_MAX_BUTTONS            256
00048 #define DMX_MOTION_SIZE            256
00049 #define DMX_MAX_VALUATORS          32
00050 #define DMX_MAX_AXES               32
00051 #define DMX_MAX_XINPUT_EVENT_TYPES 100
00052 #define DMX_MAP_ENTRIES            16 
00053 #define DMX_MAP_MASK               (DMX_MAP_ENTRIES - 1)
00054 
00055 typedef enum {
00056     DMX_FUNCTION_GRAB,
00057     DMX_FUNCTION_TERMINATE,
00058     DMX_FUNCTION_FINE
00059 } DMXFunctionType;
00060 
00061 typedef enum {
00062     DMX_LOCAL_HIGHLEVEL,
00063     DMX_LOCAL_KEYBOARD,
00064     DMX_LOCAL_MOUSE,
00065     DMX_LOCAL_OTHER
00066 } DMXLocalInputType;
00067 
00068 typedef enum {
00069     DMX_LOCAL_TYPE_LOCAL,
00070     DMX_LOCAL_TYPE_CONSOLE,
00071     DMX_LOCAL_TYPE_BACKEND,
00072     DMX_LOCAL_TYPE_COMMON
00073 } DMXLocalInputExtType;
00074 
00075 typedef enum {
00076     DMX_RELATIVE,
00077     DMX_ABSOLUTE,
00078     DMX_ABSOLUTE_CONFINED
00079 } DMXMotionType;
00080 
00083 typedef struct _DMXLocalInitInfo {
00084     int                  keyboard; 
00086     int                  keyClass; 
00087     KeySymsRec           keySyms;  
00088     int                  freemap;  
00089     CARD8                modMap[MAP_LENGTH]; 
00090     XkbDescPtr           xkb;       
00091     XkbComponentNamesRec names;     
00092     int                  freenames; 
00093     int                  force;     
00095     int                  buttonClass; 
00096     int                  numButtons;  
00097     unsigned char        map[DMX_MAX_BUTTONS]; 
00099     int                  valuatorClass; 
00101     int                  numRelAxes;    
00102     int                  numAbsAxes;    
00103     int                  minval[DMX_MAX_AXES]; 
00104     int                  maxval[DMX_MAX_AXES]; 
00105     int                  res[DMX_MAX_AXES];    
00106     int                  minres[DMX_MAX_AXES]; 
00107     int                  maxres[DMX_MAX_AXES]; 
00109     int                  focusClass;       
00111     int                  proximityClass;   
00113     int                  kbdFeedbackClass; 
00115     int                  ptrFeedbackClass; 
00117     int                  ledFeedbackClass; 
00119     int                  belFeedbackClass; 
00121     int                  intFeedbackClass; 
00123     int                  strFeedbackClass; 
00126     int                  maxSymbols;          
00127     int                  maxSymbolsSupported; 
00128     KeySym               *symbols;            
00129 } DMXLocalInitInfo, *DMXLocalInitInfoPtr;
00130 
00131 typedef pointer (*dmxCreatePrivateProcPtr)(DeviceIntPtr);
00132 typedef void    (*dmxDestroyPrivateProcPtr)(pointer);
00133                 
00134 typedef void    (*dmxInitProcPtr)(DevicePtr);
00135 typedef void    (*dmxReInitProcPtr)(DevicePtr);
00136 typedef void    (*dmxLateReInitProcPtr)(DevicePtr);
00137 typedef void    (*dmxGetInfoProcPtr)(DevicePtr, DMXLocalInitInfoPtr);
00138 typedef int     (*dmxOnProcPtr)(DevicePtr);
00139 typedef void    (*dmxOffProcPtr)(DevicePtr);
00140 typedef void    (*dmxUpdatePositionProcPtr)(pointer, int x, int y);
00141                 
00142 typedef void    (*dmxVTPreSwitchProcPtr)(pointer);  
00143 typedef void    (*dmxVTPostSwitchProcPtr)(pointer); 
00144 typedef void    (*dmxVTSwitchReturnProcPtr)(pointer);
00145 typedef int     (*dmxVTSwitchProcPtr)(pointer, int vt,
00146                                       dmxVTSwitchReturnProcPtr, pointer);
00147                 
00148 typedef void    (*dmxMotionProcPtr)(DevicePtr,
00149                                     int *valuators,
00150                                     int firstAxis,
00151                                     int axesCount,
00152                                     DMXMotionType type,
00153                                     DMXBlockType block);
00154 typedef void    (*dmxEnqueueProcPtr)(DevicePtr, int type, int detail,
00155                                      KeySym keySym, XEvent *e,
00156                                      DMXBlockType block);
00157 typedef int     (*dmxCheckSpecialProcPtr)(DevicePtr, KeySym keySym);
00158 typedef void    (*dmxCollectEventsProcPtr)(DevicePtr,
00159                                            dmxMotionProcPtr,
00160                                            dmxEnqueueProcPtr,
00161                                            dmxCheckSpecialProcPtr,
00162                                            DMXBlockType);
00163 typedef void    (*dmxProcessInputProcPtr)(pointer);
00164 typedef void    (*dmxUpdateInfoProcPtr)(pointer, DMXUpdateType, WindowPtr);
00165 typedef int     (*dmxFunctionsProcPtr)(pointer, DMXFunctionType);
00166                 
00167 typedef void    (*dmxKBCtrlProcPtr)(DevicePtr, KeybdCtrl *ctrl);
00168 typedef void    (*dmxMCtrlProcPtr)(DevicePtr, PtrCtrl *ctrl);
00169 typedef void    (*dmxKBBellProcPtr)(DevicePtr, int percent,
00170                                     int volume, int pitch, int duration);
00171 
00174 typedef struct _DMXEventMap {
00175     int remote;                 
00176     int server;                 
00177 } DMXEventMap;
00178 
00182 typedef struct _DMXLocalInputInfo {
00183     const char               *name;   
00184     DMXLocalInputType        type;    
00185     DMXLocalInputExtType     extType; 
00186     int                      binding; 
00190                                 
00191 
00192     dmxCreatePrivateProcPtr  create_private;  
00195     dmxDestroyPrivateProcPtr destroy_private; 
00198     dmxInitProcPtr           init;            
00199     dmxReInitProcPtr         reinit;          
00202     dmxLateReInitProcPtr     latereinit;      
00206     dmxGetInfoProcPtr        get_info;        
00207     dmxOnProcPtr             on;              
00208     dmxOffProcPtr            off;             
00209     dmxUpdatePositionProcPtr update_position; 
00212     dmxVTPreSwitchProcPtr    vt_pre_switch;   
00213     dmxVTPostSwitchProcPtr   vt_post_switch;  
00214     dmxVTSwitchProcPtr       vt_switch;       
00216     dmxCollectEventsProcPtr  collect_events;  
00219     dmxProcessInputProcPtr   process_input;   
00221     dmxFunctionsProcPtr      functions;
00222     dmxUpdateInfoProcPtr     update_info;     
00225     dmxMCtrlProcPtr          mCtrl;           
00226     dmxKBCtrlProcPtr         kCtrl;           
00227     dmxKBBellProcPtr         kBell;           
00229     pointer                  private;         
00230     int                      isCore;          
00231     int                      sendsCore;       
00232     KeybdCtrl                kctrl;           
00233     PtrCtrl                  mctrl;           
00235     DeviceIntPtr             pDevice;         
00236     int                      inputIdx;        
00237     int                      lastX, lastY;    
00241     int                      head;            
00243     int                      tail;            
00245     unsigned long            *history;        
00246     int                      *valuators;      
00248                                 
00249     int                      (*savedMotionProc)(DeviceIntPtr,
00250                                                 xTimecoord *,
00251                                                 unsigned long,
00252                                                 unsigned long,
00253                                                 ScreenPtr);
00254     int                      savedMotionEvents; 
00255     int                      savedSendsCore;    
00257     DMXEventMap              map[DMX_MAP_ENTRIES]; 
00258     int                      mapOptimize;          
00262     long                     deviceId;    
00264     const char               *deviceName; 
00266 } DMXLocalInputInfoRec;
00267 
00268 extern DMXLocalInputInfoPtr dmxLocalCorePointer, dmxLocalCoreKeyboard;
00269 
00270 extern void                 dmxLocalInitInput(DMXInputInfo *dmxInput);
00271 extern DMXLocalInputInfoPtr dmxInputCopyLocal(DMXInputInfo *dmxInput,
00272                                               DMXLocalInputInfoPtr s);
00273 
00274 extern void dmxChangePointerControl(DeviceIntPtr pDevice, PtrCtrl *ctrl);
00275 extern void dmxKeyboardKbdCtrlProc(DeviceIntPtr pDevice, KeybdCtrl *ctrl);
00276 extern void dmxKeyboardBellProc(int percent, DeviceIntPtr pDevice,
00277                                 pointer ctrl, int unknown);
00278 
00279 extern int  dmxInputExtensionErrorHandler(Display *dsp, _Xconst char *name,
00280                                           _Xconst char *reason);
00281 
00282 extern int          dmxInputDetach(DMXInputInfo *dmxInput);
00283 extern void         dmxInputDetachAll(DMXScreenInfo *dmxScreen);
00284 extern int          dmxInputDetachId(int id);
00285 extern DMXInputInfo *dmxInputLocateId(int id);
00286 extern int          dmxInputAttachConsole(const char *name, int isCore,
00287                                           int *id);
00288 extern int          dmxInputAttachBackend(int physicalScreen, int isCore,
00289                                           int *id);
00290 
00291 #endif