Blame view
include/linux/uinput.h
5.77 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#ifndef __UINPUT_H_ #define __UINPUT_H_ /* * User level driver support for input subsystem * * Heavily based on evdev.c by Vojtech Pavlik * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Author: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org> |
221979aad Input: uinput - s... |
23 |
* |
1da177e4c Linux-2.6.12-rc2 |
24 |
* Changes/Revisions: |
ff4625512 Input: uinput - s... |
25 26 27 |
* 0.3 24/05/2006 (Anssi Hannula <anssi.hannulagmail.com>) * - update ff support for the changes in kernel interface * - add UINPUT_VERSION |
1da177e4c Linux-2.6.12-rc2 |
28 29 30 31 32 33 |
* 0.2 16/10/2004 (Micah Dowty <micah@navi.cx>) * - added force feedback support * - added UI_SET_PHYS * 0.1 20/06/2002 * - first public version */ |
ff4625512 Input: uinput - s... |
34 |
|
a830df367 Input: pull input... |
35 |
#include <linux/input.h> |
ff4625512 Input: uinput - s... |
36 |
#define UINPUT_VERSION 3 |
1da177e4c Linux-2.6.12-rc2 |
37 |
#ifdef __KERNEL__ |
1da177e4c Linux-2.6.12-rc2 |
38 39 40 |
#define UINPUT_NAME "uinput" #define UINPUT_BUFFER_SIZE 16 #define UINPUT_NUM_REQUESTS 16 |
29506415a Input: uinput - c... |
41 |
enum uinput_state { UIST_NEW_DEVICE, UIST_SETUP_COMPLETE, UIST_CREATED }; |
1da177e4c Linux-2.6.12-rc2 |
42 43 44 45 46 47 |
struct uinput_request { int id; int code; /* UI_FF_UPLOAD, UI_FF_ERASE */ int retval; |
0048e6030 Input: uinput - u... |
48 |
struct completion done; |
1da177e4c Linux-2.6.12-rc2 |
49 50 51 |
union { int effect_id; |
ff4625512 Input: uinput - s... |
52 53 54 55 |
struct { struct ff_effect *effect; struct ff_effect *old; } upload; |
1da177e4c Linux-2.6.12-rc2 |
56 57 58 59 60 |
} u; }; struct uinput_device { struct input_dev *dev; |
221979aad Input: uinput - s... |
61 |
struct mutex mutex; |
29506415a Input: uinput - c... |
62 |
enum uinput_state state; |
1da177e4c Linux-2.6.12-rc2 |
63 |
wait_queue_head_t waitq; |
29506415a Input: uinput - c... |
64 65 66 |
unsigned char ready; unsigned char head; unsigned char tail; |
1da177e4c Linux-2.6.12-rc2 |
67 |
struct input_event buff[UINPUT_BUFFER_SIZE]; |
05be8b81a Input: force feed... |
68 |
unsigned int ff_effects_max; |
1da177e4c Linux-2.6.12-rc2 |
69 70 71 |
struct uinput_request *requests[UINPUT_NUM_REQUESTS]; wait_queue_head_t requests_waitq; |
0048e6030 Input: uinput - u... |
72 |
spinlock_t requests_lock; |
1da177e4c Linux-2.6.12-rc2 |
73 74 75 76 77 78 79 |
}; #endif /* __KERNEL__ */ struct uinput_ff_upload { int request_id; int retval; struct ff_effect effect; |
ff4625512 Input: uinput - s... |
80 |
struct ff_effect old; |
1da177e4c Linux-2.6.12-rc2 |
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
}; struct uinput_ff_erase { int request_id; int retval; int effect_id; }; /* ioctl */ #define UINPUT_IOCTL_BASE 'U' #define UI_DEV_CREATE _IO(UINPUT_IOCTL_BASE, 1) #define UI_DEV_DESTROY _IO(UINPUT_IOCTL_BASE, 2) #define UI_SET_EVBIT _IOW(UINPUT_IOCTL_BASE, 100, int) #define UI_SET_KEYBIT _IOW(UINPUT_IOCTL_BASE, 101, int) #define UI_SET_RELBIT _IOW(UINPUT_IOCTL_BASE, 102, int) #define UI_SET_ABSBIT _IOW(UINPUT_IOCTL_BASE, 103, int) #define UI_SET_MSCBIT _IOW(UINPUT_IOCTL_BASE, 104, int) #define UI_SET_LEDBIT _IOW(UINPUT_IOCTL_BASE, 105, int) #define UI_SET_SNDBIT _IOW(UINPUT_IOCTL_BASE, 106, int) #define UI_SET_FFBIT _IOW(UINPUT_IOCTL_BASE, 107, int) #define UI_SET_PHYS _IOW(UINPUT_IOCTL_BASE, 108, char*) |
59c7c0377 Input: uinput - a... |
103 |
#define UI_SET_SWBIT _IOW(UINPUT_IOCTL_BASE, 109, int) |
85b772003 Input: introduce ... |
104 |
#define UI_SET_PROPBIT _IOW(UINPUT_IOCTL_BASE, 110, int) |
1da177e4c Linux-2.6.12-rc2 |
105 106 107 108 109 |
#define UI_BEGIN_FF_UPLOAD _IOWR(UINPUT_IOCTL_BASE, 200, struct uinput_ff_upload) #define UI_END_FF_UPLOAD _IOW(UINPUT_IOCTL_BASE, 201, struct uinput_ff_upload) #define UI_BEGIN_FF_ERASE _IOWR(UINPUT_IOCTL_BASE, 202, struct uinput_ff_erase) #define UI_END_FF_ERASE _IOW(UINPUT_IOCTL_BASE, 203, struct uinput_ff_erase) |
ff4625512 Input: uinput - s... |
110 111 |
/* * To write a force-feedback-capable driver, the upload_effect |
1da177e4c Linux-2.6.12-rc2 |
112 113 114 115 116 117 |
* and erase_effect callbacks in input_dev must be implemented. * The uinput driver will generate a fake input event when one of * these callbacks are invoked. The userspace code then uses * ioctls to retrieve additional parameters and send the return code. * The callback blocks until this return code is sent. * |
ff4625512 Input: uinput - s... |
118 119 |
* The described callback mechanism is only used if ff_effects_max * is set. |
1da177e4c Linux-2.6.12-rc2 |
120 121 |
* * To implement upload_effect(): |
ff4625512 Input: uinput - s... |
122 |
* 1. Wait for an event with type == EV_UINPUT and code == UI_FF_UPLOAD. |
1da177e4c Linux-2.6.12-rc2 |
123 124 125 126 127 |
* A request ID will be given in 'value'. * 2. Allocate a uinput_ff_upload struct, fill in request_id with * the 'value' from the EV_UINPUT event. * 3. Issue a UI_BEGIN_FF_UPLOAD ioctl, giving it the * uinput_ff_upload struct. It will be filled in with the |
ff4625512 Input: uinput - s... |
128 129 130 |
* ff_effects passed to upload_effect(). * 4. Perform the effect upload, and place a return code back into the uinput_ff_upload struct. |
1da177e4c Linux-2.6.12-rc2 |
131 132 133 134 135 |
* 5. Issue a UI_END_FF_UPLOAD ioctl, also giving it the * uinput_ff_upload_effect struct. This will complete execution * of our upload_effect() handler. * * To implement erase_effect(): |
ff4625512 Input: uinput - s... |
136 |
* 1. Wait for an event with type == EV_UINPUT and code == UI_FF_ERASE. |
1da177e4c Linux-2.6.12-rc2 |
137 138 139 140 141 142 143 144 |
* A request ID will be given in 'value'. * 2. Allocate a uinput_ff_erase struct, fill in request_id with * the 'value' from the EV_UINPUT event. * 3. Issue a UI_BEGIN_FF_ERASE ioctl, giving it the * uinput_ff_erase struct. It will be filled in with the * effect ID passed to erase_effect(). * 4. Perform the effect erasure, and place a return code back * into the uinput_ff_erase struct. |
1da177e4c Linux-2.6.12-rc2 |
145 146 147 148 |
* 5. Issue a UI_END_FF_ERASE ioctl, also giving it the * uinput_ff_erase_effect struct. This will complete execution * of our erase_effect() handler. */ |
ff4625512 Input: uinput - s... |
149 150 |
/* * This is the new event type, used only by uinput. |
1da177e4c Linux-2.6.12-rc2 |
151 152 153 154 155 156 157 158 |
* 'code' is UI_FF_UPLOAD or UI_FF_ERASE, and 'value' * is the unique request ID. This number was picked * arbitrarily, above EV_MAX (since the input system * never sees it) but in the range of a 16-bit int. */ #define EV_UINPUT 0x0101 #define UI_FF_UPLOAD 1 #define UI_FF_ERASE 2 |
1da177e4c Linux-2.6.12-rc2 |
159 160 161 162 |
#define UINPUT_MAX_NAME_SIZE 80 struct uinput_user_dev { char name[UINPUT_MAX_NAME_SIZE]; struct input_id id; |
81c2a3ba4 Input: use ABS_CN... |
163 164 165 166 167 |
int ff_effects_max; int absmax[ABS_CNT]; int absmin[ABS_CNT]; int absfuzz[ABS_CNT]; int absflat[ABS_CNT]; |
1da177e4c Linux-2.6.12-rc2 |
168 169 |
}; #endif /* __UINPUT_H_ */ |