| 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 */ |