35c38a5540337fd2fb3f03e99d6416a7625379ee
[framework/uifw/xorg/server/xorg-server.git] / hw / xfree86 / common / xf86Xinput.h
1 /*
2  * Copyright 1995-1999 by Frederic Lepied, France. <Lepied@XFree86.org>
3  *                                                                            
4  * Permission to use, copy, modify, distribute, and sell this software and its
5  * documentation for any purpose is  hereby granted without fee, provided that
6  * the  above copyright   notice appear  in   all  copies and  that both  that
7  * copyright  notice   and   this  permission   notice  appear  in  supporting
8  * documentation, and that   the  name of  Frederic   Lepied not  be  used  in
9  * advertising or publicity pertaining to distribution of the software without
10  * specific,  written      prior  permission.     Frederic  Lepied   makes  no
11  * representations about the suitability of this software for any purpose.  It
12  * is provided "as is" without express or implied warranty.                   
13  *                                                                            
14  * FREDERIC  LEPIED DISCLAIMS ALL   WARRANTIES WITH REGARD  TO  THIS SOFTWARE,
15  * INCLUDING ALL IMPLIED   WARRANTIES OF MERCHANTABILITY  AND   FITNESS, IN NO
16  * EVENT  SHALL FREDERIC  LEPIED BE   LIABLE   FOR ANY  SPECIAL, INDIRECT   OR
17  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18  * DATA  OR PROFITS, WHETHER  IN  AN ACTION OF  CONTRACT,  NEGLIGENCE OR OTHER
19  * TORTIOUS  ACTION, ARISING    OUT OF OR   IN  CONNECTION  WITH THE USE    OR
20  * PERFORMANCE OF THIS SOFTWARE.
21  *
22  */
23
24 /*
25  * Copyright (c) 2000-2002 by The XFree86 Project, Inc.
26  *
27  * Permission is hereby granted, free of charge, to any person obtaining a
28  * copy of this software and associated documentation files (the "Software"),
29  * to deal in the Software without restriction, including without limitation
30  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
31  * and/or sell copies of the Software, and to permit persons to whom the
32  * Software is furnished to do so, subject to the following conditions:
33  *
34  * The above copyright notice and this permission notice shall be included in
35  * all copies or substantial portions of the Software.
36  *
37  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
38  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
39  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
40  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
41  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
42  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
43  * OTHER DEALINGS IN THE SOFTWARE.
44  *
45  * Except as contained in this notice, the name of the copyright holder(s)
46  * and author(s) shall not be used in advertising or otherwise to promote
47  * the sale, use or other dealings in this Software without prior written
48  * authorization from the copyright holder(s) and author(s).
49  */
50
51 #ifndef _xf86Xinput_h
52 #define _xf86Xinput_h
53
54 #include "xf86str.h"
55 #include "inputstr.h"
56 #include <X11/extensions/XI.h>
57 #include <X11/extensions/XIproto.h>
58 #include "XIstubs.h"
59
60 /* Input device flags */
61 #define XI86_ALWAYS_CORE        0x04    /* device always controls the pointer */
62 /* the device sends Xinput and core pointer events */
63 #define XI86_SEND_CORE_EVENTS   XI86_ALWAYS_CORE
64 /* 0x08 is reserved for legacy XI86_SEND_DRAG_EVENTS, do not use for now */
65 /* server-internal only */
66 #define XI86_DEVICE_DISABLED    0x10    /* device was disabled before vt switch */
67
68 /* This holds the input driver entry and module information. */
69 typedef struct _InputDriverRec {
70     int driverVersion;
71     const char *driverName;
72     void (*Identify) (int flags);
73     int (*PreInit) (struct _InputDriverRec * drv,
74                     struct _InputInfoRec * pInfo, int flags);
75     void (*UnInit) (struct _InputDriverRec * drv,
76                     struct _InputInfoRec * pInfo, int flags);
77     pointer module;
78     const char **default_options;
79 } InputDriverRec, *InputDriverPtr;
80
81 /* This is to input devices what the ScrnInfoRec is to screens. */
82
83 typedef struct _InputInfoRec {
84     struct _InputInfoRec *next;
85     char *name;
86     char *driver;
87
88     int flags;
89
90     Bool (*device_control) (DeviceIntPtr device, int what);
91     void (*read_input) (struct _InputInfoRec * local);
92     int (*control_proc) (struct _InputInfoRec * local, xDeviceCtl * control);
93     int (*switch_mode) (ClientPtr client, DeviceIntPtr dev, int mode);
94     int (*set_device_valuators)
95      (struct _InputInfoRec * local,
96       int *valuators, int first_valuator, int num_valuators);
97
98     int fd;
99     DeviceIntPtr dev;
100     pointer private;
101     const char *type_name;
102     InputDriverPtr drv;
103     pointer module;
104     XF86OptionPtr options;
105     InputAttributes *attrs;
106 } *InputInfoPtr;
107
108 /* xf86Globals.c */
109 extern InputInfoPtr xf86InputDevs;
110
111 /* xf86Xinput.c */
112 extern _X_EXPORT void xf86PostMotionEvent(DeviceIntPtr device, int is_absolute,
113                                           int first_valuator, int num_valuators,
114                                           ...);
115 extern _X_EXPORT void xf86PostMotionEventP(DeviceIntPtr device, int is_absolute,
116                                            int first_valuator,
117                                            int num_valuators,
118                                            const int *valuators);
119 extern _X_EXPORT void xf86PostMotionEventM(DeviceIntPtr device, int is_absolute,
120                                            const ValuatorMask *mask);
121 extern _X_EXPORT void xf86PostProximityEvent(DeviceIntPtr device, int is_in,
122                                              int first_valuator,
123                                              int num_valuators, ...);
124 extern _X_EXPORT void xf86PostProximityEventP(DeviceIntPtr device, int is_in,
125                                               int first_valuator,
126                                               int num_valuators,
127                                               const int *valuators);
128 extern _X_EXPORT void xf86PostProximityEventM(DeviceIntPtr device, int is_in,
129                                               const ValuatorMask *mask);
130 extern _X_EXPORT void xf86PostButtonEvent(DeviceIntPtr device, int is_absolute,
131                                           int button, int is_down,
132                                           int first_valuator, int num_valuators,
133                                           ...);
134 extern _X_EXPORT void xf86PostButtonEventP(DeviceIntPtr device, int is_absolute,
135                                            int button, int is_down,
136                                            int first_valuator,
137                                            int num_valuators,
138                                            const int *valuators);
139 extern _X_EXPORT void xf86PostButtonEventM(DeviceIntPtr device, int is_absolute,
140                                            int button, int is_down,
141                                            const ValuatorMask *mask);
142 extern _X_EXPORT void xf86PostKeyEvent(DeviceIntPtr device,
143                                        unsigned int key_code, int is_down,
144                                        int is_absolute, int first_valuator,
145                                        int num_valuators, ...);
146 extern _X_EXPORT void xf86PostKeyEventM(DeviceIntPtr device,
147                                         unsigned int key_code, int is_down,
148                                         int is_absolute,
149                                         const ValuatorMask *mask);
150 extern _X_EXPORT void xf86PostKeyEventP(DeviceIntPtr device,
151                                         unsigned int key_code, int is_down,
152                                         int is_absolute, int first_valuator,
153                                         int num_valuators,
154                                         const int *valuators);
155 extern _X_EXPORT void xf86PostKeyboardEvent(DeviceIntPtr device,
156                                             unsigned int key_code, int is_down);
157 extern _X_EXPORT void xf86PostTouchEvent(DeviceIntPtr dev, uint32_t touchid,
158                                          uint16_t type, uint32_t flags,
159                                          const ValuatorMask *mask);
160 extern _X_EXPORT InputInfoPtr xf86FirstLocalDevice(void);
161 extern _X_EXPORT int xf86ScaleAxis(int Cx, int to_max, int to_min, int from_max,
162                                    int from_min);
163 extern _X_EXPORT void xf86ProcessCommonOptions(InputInfoPtr pInfo,
164                                                XF86OptionPtr options);
165 extern _X_EXPORT Bool xf86InitValuatorAxisStruct(DeviceIntPtr dev, int axnum,
166                                                  Atom label, int minval,
167                                                  int maxval, int resolution,
168                                                  int min_res, int max_res,
169                                                  int mode);
170 extern _X_EXPORT void xf86InitValuatorDefaults(DeviceIntPtr dev, int axnum);
171 extern _X_EXPORT void xf86AddEnabledDevice(InputInfoPtr pInfo);
172 extern _X_EXPORT void xf86RemoveEnabledDevice(InputInfoPtr pInfo);
173 extern _X_EXPORT void xf86DisableDevice(DeviceIntPtr dev, Bool panic);
174 extern _X_EXPORT void xf86EnableDevice(DeviceIntPtr dev);
175
176 /* not exported */
177 int xf86NewInputDevice(InputInfoPtr pInfo, DeviceIntPtr *pdev, BOOL is_auto);
178 InputInfoPtr xf86AllocateInput(void);
179
180 /* xf86Helper.c */
181 extern _X_EXPORT void xf86AddInputDriver(InputDriverPtr driver, pointer module,
182                                          int flags);
183 extern _X_EXPORT void xf86DeleteInputDriver(int drvIndex);
184 extern _X_EXPORT InputDriverPtr xf86LookupInputDriver(const char *name);
185 extern _X_EXPORT InputInfoPtr xf86LookupInput(const char *name);
186 extern _X_EXPORT void xf86DeleteInput(InputInfoPtr pInp, int flags);
187 extern _X_EXPORT void xf86MotionHistoryAllocate(InputInfoPtr pInfo);
188 extern _X_EXPORT void
189 xf86IDrvMsgVerb(InputInfoPtr dev,
190                 MessageType type, int verb, const char *format, ...)
191 _X_ATTRIBUTE_PRINTF(4, 5);
192 extern _X_EXPORT void
193 xf86IDrvMsg(InputInfoPtr dev, MessageType type, const char *format, ...)
194 _X_ATTRIBUTE_PRINTF(3, 4);
195 extern _X_EXPORT void
196 xf86VIDrvMsgVerb(InputInfoPtr dev,
197                  MessageType type, int verb, const char *format, va_list args)
198 _X_ATTRIBUTE_PRINTF(4, 0);
199
200 /* xf86Option.c */
201 extern _X_EXPORT void
202 xf86CollectInputOptions(InputInfoPtr pInfo, const char **defaultOpts);
203
204 #endif                          /* _xf86Xinput_h */