VirtualBox

source: vbox/trunk/src/VBox/Additions/x11/x11include/xorg-server-1.9.0/dmxinputinit.h@ 38889

Last change on this file since 38889 was 32163, checked in by vboxsync, 14 years ago

Additions/x11/x11include: additional headers for building drivers for X.Org Server 1.9

  • Property svn:eol-style set to native
File size: 13.9 KB
Line 
1/*
2 * Copyright 2002 Red Hat Inc., Durham, North Carolina.
3 *
4 * All Rights Reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining
7 * a copy of this software and associated documentation files (the
8 * "Software"), to deal in the Software without restriction, including
9 * without limitation on the rights to use, copy, modify, merge,
10 * publish, distribute, sublicense, and/or sell copies of the Software,
11 * and to permit persons to whom the Software is furnished to do so,
12 * subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice (including the
15 * next paragraph) shall be included in all copies or substantial
16 * portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21 * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
22 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
23 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25 * SOFTWARE.
26 */
27
28/*
29 * Authors:
30 * Rickard E. (Rik) Faith <[email protected]>
31 *
32 */
33
34/** \file
35 * Interface for low-level input support. \see dmxinputinit.c */
36
37#ifndef _DMXINPUTINIT_H_
38#define _DMXINPUTINIT_H_
39
40#include "dmx.h"
41#include "dmxinput.h"
42#include "dmxlog.h"
43
44
45#define DMX_LOCAL_DEFAULT_KEYBOARD "kbd"
46#define DMX_LOCAL_DEFAULT_POINTER "ps2"
47#define DMX_MAX_BUTTONS 256
48#define DMX_MOTION_SIZE 256
49#define DMX_MAX_VALUATORS 32
50#define DMX_MAX_AXES 32
51#define DMX_MAX_XINPUT_EVENT_TYPES 100
52#define DMX_MAP_ENTRIES 16 /* Must be a power of 2 */
53#define DMX_MAP_MASK (DMX_MAP_ENTRIES - 1)
54
55typedef enum {
56 DMX_FUNCTION_GRAB,
57 DMX_FUNCTION_TERMINATE,
58 DMX_FUNCTION_FINE
59} DMXFunctionType;
60
61typedef enum {
62 DMX_LOCAL_HIGHLEVEL,
63 DMX_LOCAL_KEYBOARD,
64 DMX_LOCAL_MOUSE,
65 DMX_LOCAL_OTHER
66} DMXLocalInputType;
67
68typedef enum {
69 DMX_LOCAL_TYPE_LOCAL,
70 DMX_LOCAL_TYPE_CONSOLE,
71 DMX_LOCAL_TYPE_BACKEND,
72 DMX_LOCAL_TYPE_COMMON
73} DMXLocalInputExtType;
74
75typedef enum {
76 DMX_RELATIVE,
77 DMX_ABSOLUTE,
78 DMX_ABSOLUTE_CONFINED
79} DMXMotionType;
80
81/** Stores information from low-level device that is used to initialize
82 * the device at the dix level. */
83typedef struct _DMXLocalInitInfo {
84 int keyboard; /**< Non-zero if the device is a keyboard */
85
86 int keyClass; /**< Non-zero if keys are present */
87 KeySymsRec keySyms; /**< Key symbols */
88 int freemap; /**< If non-zero, free keySyms.map */
89 CARD8 modMap[MAP_LENGTH]; /**< Modifier map */
90 XkbDescPtr xkb; /**< XKB description */
91 XkbComponentNamesRec names; /**< XKB component names */
92 int freenames; /**< Non-zero if names should be free'd */
93 int force; /**< Do not allow command line override */
94
95 int buttonClass; /**< Non-zero if buttons are present */
96 int numButtons; /**< Number of buttons */
97 unsigned char map[DMX_MAX_BUTTONS]; /**< Button map */
98
99 int valuatorClass; /**< Non-zero if valuators are
100 * present */
101 int numRelAxes; /**< Number of relative axes */
102 int numAbsAxes; /**< Number of absolute axes */
103 int minval[DMX_MAX_AXES]; /**< Minimum values */
104 int maxval[DMX_MAX_AXES]; /**< Maximum values */
105 int res[DMX_MAX_AXES]; /**< Resolution */
106 int minres[DMX_MAX_AXES]; /**< Minimum resolutions */
107 int maxres[DMX_MAX_AXES]; /**< Maximum resolutions */
108
109 int focusClass; /**< Non-zero if device can
110 * cause focus */
111 int proximityClass; /**< Non-zero if device
112 * causes proximity events */
113 int kbdFeedbackClass; /**< Non-zero if device has
114 * keyboard feedback */
115 int ptrFeedbackClass; /**< Non-zero if device has
116 * pointer feedback */
117 int ledFeedbackClass; /**< Non-zero if device has
118 * LED indicators */
119 int belFeedbackClass; /**< Non-zero if device has a
120 * bell */
121 int intFeedbackClass; /**< Non-zero if device has
122 * integer feedback */
123 int strFeedbackClass; /**< Non-zero if device has
124 * string feedback */
125
126 int maxSymbols; /**< Maximum symbols */
127 int maxSymbolsSupported; /**< Maximum symbols supported */
128 KeySym *symbols; /**< Key symbols */
129} DMXLocalInitInfo, *DMXLocalInitInfoPtr;
130
131typedef pointer (*dmxCreatePrivateProcPtr)(DeviceIntPtr);
132typedef void (*dmxDestroyPrivateProcPtr)(pointer);
133
134typedef void (*dmxInitProcPtr)(DevicePtr);
135typedef void (*dmxReInitProcPtr)(DevicePtr);
136typedef void (*dmxLateReInitProcPtr)(DevicePtr);
137typedef void (*dmxGetInfoProcPtr)(DevicePtr, DMXLocalInitInfoPtr);
138typedef int (*dmxOnProcPtr)(DevicePtr);
139typedef void (*dmxOffProcPtr)(DevicePtr);
140typedef void (*dmxUpdatePositionProcPtr)(pointer, int x, int y);
141
142typedef void (*dmxVTPreSwitchProcPtr)(pointer); /* Turn I/O Off */
143typedef void (*dmxVTPostSwitchProcPtr)(pointer); /* Turn I/O On */
144typedef void (*dmxVTSwitchReturnProcPtr)(pointer);
145typedef int (*dmxVTSwitchProcPtr)(pointer, int vt,
146 dmxVTSwitchReturnProcPtr, pointer);
147
148typedef void (*dmxMotionProcPtr)(DevicePtr,
149 int *valuators,
150 int firstAxis,
151 int axesCount,
152 DMXMotionType type,
153 DMXBlockType block);
154typedef void (*dmxEnqueueProcPtr)(DevicePtr, int type, int detail,
155 KeySym keySym, XEvent *e,
156 DMXBlockType block);
157typedef int (*dmxCheckSpecialProcPtr)(DevicePtr, KeySym keySym);
158typedef void (*dmxCollectEventsProcPtr)(DevicePtr,
159 dmxMotionProcPtr,
160 dmxEnqueueProcPtr,
161 dmxCheckSpecialProcPtr,
162 DMXBlockType);
163typedef void (*dmxProcessInputProcPtr)(pointer);
164typedef void (*dmxUpdateInfoProcPtr)(pointer, DMXUpdateType, WindowPtr);
165typedef int (*dmxFunctionsProcPtr)(pointer, DMXFunctionType);
166
167typedef void (*dmxKBCtrlProcPtr)(DevicePtr, KeybdCtrl *ctrl);
168typedef void (*dmxMCtrlProcPtr)(DevicePtr, PtrCtrl *ctrl);
169typedef void (*dmxKBBellProcPtr)(DevicePtr, int percent,
170 int volume, int pitch, int duration);
171
172/** Stores a mapping between the device id on the remote X server and
173 * the id on the DMX server */
174typedef struct _DMXEventMap {
175 int remote; /**< Event number on remote X server */
176 int server; /**< Event number (unbiased) on DMX server */
177} DMXEventMap;
178
179/** This is the device-independent structure used by the low-level input
180 * routines. The contents are not exposed to top-level .c files (except
181 * dmxextensions.c). \see dmxinput.h \see dmxextensions.c */
182typedef struct _DMXLocalInputInfo {
183 const char *name; /**< Device name */
184 DMXLocalInputType type; /**< Device type */
185 DMXLocalInputExtType extType; /**< Extended device type */
186 int binding; /**< Count of how many consecutive
187 * structs are bound to the same
188 * device */
189
190 /* Low-level (e.g., keyboard/mouse drivers) */
191
192 dmxCreatePrivateProcPtr create_private; /**< Create
193 * device-dependent
194 * private */
195 dmxDestroyPrivateProcPtr destroy_private; /**< Destroy
196 * device-dependent
197 * private */
198 dmxInitProcPtr init; /**< Initialize device */
199 dmxReInitProcPtr reinit; /**< Reinitialize device
200 * (during a
201 * reconfiguration) */
202 dmxLateReInitProcPtr latereinit; /**< Reinitialize a device
203 * (called very late
204 * during a
205 * reconfiguration) */
206 dmxGetInfoProcPtr get_info; /**< Get device information */
207 dmxOnProcPtr on; /**< Turn device on */
208 dmxOffProcPtr off; /**< Turn device off */
209 dmxUpdatePositionProcPtr update_position; /**< Called when another
210 * device updates the
211 * cursor position */
212 dmxVTPreSwitchProcPtr vt_pre_switch; /**< Called before a VT switch */
213 dmxVTPostSwitchProcPtr vt_post_switch; /**< Called after a VT switch */
214 dmxVTSwitchProcPtr vt_switch; /**< Causes a VT switch */
215
216 dmxCollectEventsProcPtr collect_events; /**< Collect and enqueue
217 * events from the
218 * device*/
219 dmxProcessInputProcPtr process_input; /**< Process event (from
220 * queue) */
221 dmxFunctionsProcPtr functions;
222 dmxUpdateInfoProcPtr update_info; /**< Update window layout
223 * information */
224
225 dmxMCtrlProcPtr mCtrl; /**< Pointer control */
226 dmxKBCtrlProcPtr kCtrl; /**< Keyboard control */
227 dmxKBBellProcPtr kBell; /**< Bell control */
228
229 pointer private; /**< Device-dependent private */
230 int isCore; /**< Is a DMX core device */
231 int sendsCore; /**< Sends DMX core events */
232 KeybdCtrl kctrl; /**< Keyboard control */
233 PtrCtrl mctrl; /**< Pointer control */
234
235 DeviceIntPtr pDevice; /**< X-level device */
236 int inputIdx; /**< High-level index */
237 int lastX, lastY; /**< Last known position;
238 * for XInput in
239 * dmxevents.c */
240
241 int head; /**< XInput motion history
242 * head */
243 int tail; /**< XInput motion history
244 * tail */
245 unsigned long *history; /**< XInput motion history */
246 int *valuators; /**< Cache of previous values */
247
248 /* for XInput ChangePointerDevice */
249 int (*savedMotionProc)(DeviceIntPtr,
250 xTimecoord *,
251 unsigned long,
252 unsigned long,
253 ScreenPtr);
254 int savedMotionEvents; /**< Saved motion events */
255 int savedSendsCore; /**< Saved sends-core flag */
256
257 DMXEventMap map[DMX_MAP_ENTRIES]; /**< XInput device id map */
258 int mapOptimize; /**< XInput device id
259 * map
260 * optimization */
261
262 long deviceId; /**< device id on remote side,
263 * if any */
264 const char *deviceName; /**< devive name on remote
265 * side, if any */
266} DMXLocalInputInfoRec;
267
268extern DMXLocalInputInfoPtr dmxLocalCorePointer, dmxLocalCoreKeyboard;
269
270extern void dmxLocalInitInput(DMXInputInfo *dmxInput);
271extern DMXLocalInputInfoPtr dmxInputCopyLocal(DMXInputInfo *dmxInput,
272 DMXLocalInputInfoPtr s);
273
274extern void dmxChangePointerControl(DeviceIntPtr pDevice, PtrCtrl *ctrl);
275extern void dmxKeyboardKbdCtrlProc(DeviceIntPtr pDevice, KeybdCtrl *ctrl);
276extern void dmxKeyboardBellProc(int percent, DeviceIntPtr pDevice,
277 pointer ctrl, int unknown);
278
279extern int dmxInputExtensionErrorHandler(Display *dsp, _Xconst char *name,
280 _Xconst char *reason);
281
282extern int dmxInputDetach(DMXInputInfo *dmxInput);
283extern void dmxInputDetachAll(DMXScreenInfo *dmxScreen);
284extern int dmxInputDetachId(int id);
285extern DMXInputInfo *dmxInputLocateId(int id);
286extern int dmxInputAttachConsole(const char *name, int isCore,
287 int *id);
288extern int dmxInputAttachBackend(int physicalScreen, int isCore,
289 int *id);
290
291#endif
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette