Subversion Repositories shark

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
422 giacomo 1
#ifndef _INPUT_H
2
#define _INPUT_H
3
 
4
/*
5
 * Copyright (c) 1999-2002 Vojtech Pavlik
6
 *
7
 * This program is free software; you can redistribute it and/or modify it
8
 * under the terms of the GNU General Public License version 2 as published by
9
 * the Free Software Foundation.
10
 */
11
 
12
#ifdef __KERNEL__
13
#include <linux/time.h>
14
#include <linux/list.h>
15
#else
16
#include <sys/time.h>
17
#include <sys/ioctl.h>
18
#include <asm/types.h>
19
#endif
20
 
21
/*
22
 * The event structure itself
23
 */
24
 
25
struct input_event {
26
        struct timeval time;
27
        __u16 type;
28
        __u16 code;
29
        __s32 value;
30
};
31
 
32
/*
33
 * Protocol version.
34
 */
35
 
36
#define EV_VERSION              0x010000
37
 
38
/*
39
 * IOCTLs (0x00 - 0x7f)
40
 */
41
 
42
struct input_id {
43
        __u16 bustype;
44
        __u16 vendor;
45
        __u16 product;
46
        __u16 version;
47
};
48
 
49
struct input_absinfo {
50
        __s32 value;
51
        __s32 minimum;
52
        __s32 maximum;
53
        __s32 fuzz;
54
        __s32 flat;
55
};
56
 
57
#define EVIOCGVERSION           _IOR('E', 0x01, int)                    /* get driver version */
58
#define EVIOCGID                _IOR('E', 0x02, struct input_id)        /* get device ID */
59
#define EVIOCGKEYCODE           _IOR('E', 0x04, int[2])                 /* get keycode */
60
#define EVIOCSKEYCODE           _IOW('E', 0x04, int[2])                 /* set keycode */
61
 
62
#define EVIOCGNAME(len)         _IOC(_IOC_READ, 'E', 0x06, len)         /* get device name */
63
#define EVIOCGPHYS(len)         _IOC(_IOC_READ, 'E', 0x07, len)         /* get physical location */
64
#define EVIOCGUNIQ(len)         _IOC(_IOC_READ, 'E', 0x08, len)         /* get unique identifier */
65
 
66
#define EVIOCGKEY(len)          _IOC(_IOC_READ, 'E', 0x18, len)         /* get global keystate */
67
#define EVIOCGLED(len)          _IOC(_IOC_READ, 'E', 0x19, len)         /* get all LEDs */
68
#define EVIOCGSND(len)          _IOC(_IOC_READ, 'E', 0x1a, len)         /* get all sounds status */
69
 
70
#define EVIOCGBIT(ev,len)       _IOC(_IOC_READ, 'E', 0x20 + ev, len)    /* get event bits */
71
#define EVIOCGABS(abs)          _IOR('E', 0x40 + abs, struct input_absinfo)             /* get abs value/limits */
72
#define EVIOCSABS(abs)          _IOW('E', 0xc0 + abs, struct input_absinfo)             /* set abs value/limits */
73
 
74
#define EVIOCSFF                _IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect))   /* send a force effect to a force feedback device */
75
#define EVIOCRMFF               _IOW('E', 0x81, int)                    /* Erase a force effect */
76
#define EVIOCGEFFECTS           _IOR('E', 0x84, int)                    /* Report number of effects playable at the same time */
77
 
78
#define EVIOCGRAB               _IOW('E', 0x90, int)                    /* Grab/Release device */
79
 
80
/*
81
 * Event types
82
 */
83
 
84
#define EV_SYN                  0x00
85
#define EV_KEY                  0x01
86
#define EV_REL                  0x02
87
#define EV_ABS                  0x03
88
#define EV_MSC                  0x04
89
#define EV_LED                  0x11
90
#define EV_SND                  0x12
91
#define EV_REP                  0x14
92
#define EV_FF                   0x15
93
#define EV_PWR                  0x16
94
#define EV_FF_STATUS            0x17
95
#define EV_MAX                  0x1f
96
 
97
/*
98
 * Synchronization events.
99
 */
100
 
101
#define SYN_REPORT              0
102
#define SYN_CONFIG              1
103
 
104
/*
105
 * Keys and buttons
106
 */
107
 
108
#define KEY_RESERVED            0
109
#define KEY_ESC                 1
110
#define KEY_1                   2
111
#define KEY_2                   3
112
#define KEY_3                   4
113
#define KEY_4                   5
114
#define KEY_5                   6
115
#define KEY_6                   7
116
#define KEY_7                   8
117
#define KEY_8                   9
118
#define KEY_9                   10
119
#define KEY_0                   11
120
#define KEY_MINUS               12
121
#define KEY_EQUAL               13
122
#define KEY_BACKSPACE           14
123
#define KEY_TAB                 15
124
#define KEY_Q                   16
125
#define KEY_W                   17
126
#define KEY_E                   18
127
#define KEY_R                   19
128
#define KEY_T                   20
129
#define KEY_Y                   21
130
#define KEY_U                   22
131
#define KEY_I                   23
132
#define KEY_O                   24
133
#define KEY_P                   25
134
#define KEY_LEFTBRACE           26
135
#define KEY_RIGHTBRACE          27
136
#define KEY_ENTER               28
137
#define KEY_LEFTCTRL            29
138
#define KEY_A                   30
139
#define KEY_S                   31
140
#define KEY_D                   32
141
#define KEY_F                   33
142
#define KEY_G                   34
143
#define KEY_H                   35
144
#define KEY_J                   36
145
#define KEY_K                   37
146
#define KEY_L                   38
147
#define KEY_SEMICOLON           39
148
#define KEY_APOSTROPHE          40
149
#define KEY_GRAVE               41
150
#define KEY_LEFTSHIFT           42
151
#define KEY_BACKSLASH           43
152
#define KEY_Z                   44
153
#define KEY_X                   45
154
#define KEY_C                   46
155
#define KEY_V                   47
156
#define KEY_B                   48
157
#define KEY_N                   49
158
#define KEY_M                   50
159
#define KEY_COMMA               51
160
#define KEY_DOT                 52
161
#define KEY_SLASH               53
162
#define KEY_RIGHTSHIFT          54
163
#define KEY_KPASTERISK          55
164
#define KEY_LEFTALT             56
165
#define KEY_SPACE               57
166
#define KEY_CAPSLOCK            58
167
#define KEY_F1                  59
168
#define KEY_F2                  60
169
#define KEY_F3                  61
170
#define KEY_F4                  62
171
#define KEY_F5                  63
172
#define KEY_F6                  64
173
#define KEY_F7                  65
174
#define KEY_F8                  66
175
#define KEY_F9                  67
176
#define KEY_F10                 68
177
#define KEY_NUMLOCK             69
178
#define KEY_SCROLLLOCK          70
179
#define KEY_KP7                 71
180
#define KEY_KP8                 72
181
#define KEY_KP9                 73
182
#define KEY_KPMINUS             74
183
#define KEY_KP4                 75
184
#define KEY_KP5                 76
185
#define KEY_KP6                 77
186
#define KEY_KPPLUS              78
187
#define KEY_KP1                 79
188
#define KEY_KP2                 80
189
#define KEY_KP3                 81
190
#define KEY_KP0                 82
191
#define KEY_KPDOT               83
192
#define KEY_103RD               84
193
#define KEY_F13                 85
194
#define KEY_102ND               86
195
#define KEY_F11                 87
196
#define KEY_F12                 88
197
#define KEY_F14                 89
198
#define KEY_F15                 90
199
#define KEY_F16                 91
200
#define KEY_F17                 92
201
#define KEY_F18                 93
202
#define KEY_F19                 94
203
#define KEY_F20                 95
204
#define KEY_KPENTER             96
205
#define KEY_RIGHTCTRL           97
206
#define KEY_KPSLASH             98
207
#define KEY_SYSRQ               99
208
#define KEY_RIGHTALT            100
209
#define KEY_LINEFEED            101
210
#define KEY_HOME                102
211
#define KEY_UP                  103
212
#define KEY_PAGEUP              104
213
#define KEY_LEFT                105
214
#define KEY_RIGHT               106
215
#define KEY_END                 107
216
#define KEY_DOWN                108
217
#define KEY_PAGEDOWN            109
218
#define KEY_INSERT              110
219
#define KEY_DELETE              111
220
#define KEY_MACRO               112
221
#define KEY_MUTE                113
222
#define KEY_VOLUMEDOWN          114
223
#define KEY_VOLUMEUP            115
224
#define KEY_POWER               116
225
#define KEY_KPEQUAL             117
226
#define KEY_KPPLUSMINUS         118
227
#define KEY_PAUSE               119
228
#define KEY_F21                 120
229
#define KEY_F22                 121
230
#define KEY_F23                 122
231
#define KEY_F24                 123
232
#define KEY_KPCOMMA             124
233
#define KEY_LEFTMETA            125
234
#define KEY_RIGHTMETA           126
235
#define KEY_COMPOSE             127
236
 
237
#define KEY_STOP                128
238
#define KEY_AGAIN               129
239
#define KEY_PROPS               130
240
#define KEY_UNDO                131
241
#define KEY_FRONT               132
242
#define KEY_COPY                133
243
#define KEY_OPEN                134
244
#define KEY_PASTE               135
245
#define KEY_FIND                136
246
#define KEY_CUT                 137
247
#define KEY_HELP                138
248
#define KEY_MENU                139
249
#define KEY_CALC                140
250
#define KEY_SETUP               141
251
#define KEY_SLEEP               142
252
#define KEY_WAKEUP              143
253
#define KEY_FILE                144
254
#define KEY_SENDFILE            145
255
#define KEY_DELETEFILE          146
256
#define KEY_XFER                147
257
#define KEY_PROG1               148
258
#define KEY_PROG2               149
259
#define KEY_WWW                 150
260
#define KEY_MSDOS               151
261
#define KEY_COFFEE              152
262
#define KEY_DIRECTION           153
263
#define KEY_CYCLEWINDOWS        154
264
#define KEY_MAIL                155
265
#define KEY_BOOKMARKS           156
266
#define KEY_COMPUTER            157
267
#define KEY_BACK                158
268
#define KEY_FORWARD             159
269
#define KEY_CLOSECD             160
270
#define KEY_EJECTCD             161
271
#define KEY_EJECTCLOSECD        162
272
#define KEY_NEXTSONG            163
273
#define KEY_PLAYPAUSE           164
274
#define KEY_PREVIOUSSONG        165
275
#define KEY_STOPCD              166
276
#define KEY_RECORD              167
277
#define KEY_REWIND              168
278
#define KEY_PHONE               169
279
#define KEY_ISO                 170
280
#define KEY_CONFIG              171
281
#define KEY_HOMEPAGE            172
282
#define KEY_REFRESH             173
283
#define KEY_EXIT                174
284
#define KEY_MOVE                175
285
#define KEY_EDIT                176
286
#define KEY_SCROLLUP            177
287
#define KEY_SCROLLDOWN          178
288
#define KEY_KPLEFTPAREN         179
289
#define KEY_KPRIGHTPAREN        180
290
 
291
#define KEY_INTL1               181
292
#define KEY_INTL2               182
293
#define KEY_INTL3               183
294
#define KEY_INTL4               184
295
#define KEY_INTL5               185
296
#define KEY_INTL6               186
297
#define KEY_INTL7               187
298
#define KEY_INTL8               188
299
#define KEY_INTL9               189
300
#define KEY_LANG1               190
301
#define KEY_LANG2               191
302
#define KEY_LANG3               192
303
#define KEY_LANG4               193
304
#define KEY_LANG5               194
305
#define KEY_LANG6               195
306
#define KEY_LANG7               196
307
#define KEY_LANG8               197
308
#define KEY_LANG9               198
309
 
310
#define KEY_PLAYCD              200
311
#define KEY_PAUSECD             201
312
#define KEY_PROG3               202
313
#define KEY_PROG4               203
314
#define KEY_SUSPEND             205
315
#define KEY_CLOSE               206
316
#define KEY_PLAY                207
317
#define KEY_FASTFORWARD         208
318
#define KEY_BASSBOOST           209
319
#define KEY_PRINT               210
320
#define KEY_HP                  211
321
#define KEY_CAMERA              212
322
#define KEY_SOUND               213
323
#define KEY_QUESTION            214
324
#define KEY_EMAIL               215
325
#define KEY_CHAT                216
326
#define KEY_SEARCH              217
327
#define KEY_CONNECT             218
328
#define KEY_FINANCE             219
329
#define KEY_SPORT               220
330
#define KEY_SHOP                221
331
#define KEY_ALTERASE            222
332
#define KEY_CANCEL              223
333
#define KEY_BRIGHTNESSDOWN      224
334
#define KEY_BRIGHTNESSUP        225
335
#define KEY_MEDIA               226
336
 
337
#define KEY_UNKNOWN             240
338
 
339
#define BTN_MISC                0x100
340
#define BTN_0                   0x100
341
#define BTN_1                   0x101
342
#define BTN_2                   0x102
343
#define BTN_3                   0x103
344
#define BTN_4                   0x104
345
#define BTN_5                   0x105
346
#define BTN_6                   0x106
347
#define BTN_7                   0x107
348
#define BTN_8                   0x108
349
#define BTN_9                   0x109
350
 
351
#define BTN_MOUSE               0x110
352
#define BTN_LEFT                0x110
353
#define BTN_RIGHT               0x111
354
#define BTN_MIDDLE              0x112
355
#define BTN_SIDE                0x113
356
#define BTN_EXTRA               0x114
357
#define BTN_FORWARD             0x115
358
#define BTN_BACK                0x116
359
#define BTN_TASK                0x117
360
 
361
#define BTN_JOYSTICK            0x120
362
#define BTN_TRIGGER             0x120
363
#define BTN_THUMB               0x121
364
#define BTN_THUMB2              0x122
365
#define BTN_TOP                 0x123
366
#define BTN_TOP2                0x124
367
#define BTN_PINKIE              0x125
368
#define BTN_BASE                0x126
369
#define BTN_BASE2               0x127
370
#define BTN_BASE3               0x128
371
#define BTN_BASE4               0x129
372
#define BTN_BASE5               0x12a
373
#define BTN_BASE6               0x12b
374
#define BTN_DEAD                0x12f
375
 
376
#define BTN_GAMEPAD             0x130
377
#define BTN_A                   0x130
378
#define BTN_B                   0x131
379
#define BTN_C                   0x132
380
#define BTN_X                   0x133
381
#define BTN_Y                   0x134
382
#define BTN_Z                   0x135
383
#define BTN_TL                  0x136
384
#define BTN_TR                  0x137
385
#define BTN_TL2                 0x138
386
#define BTN_TR2                 0x139
387
#define BTN_SELECT              0x13a
388
#define BTN_START               0x13b
389
#define BTN_MODE                0x13c
390
#define BTN_THUMBL              0x13d
391
#define BTN_THUMBR              0x13e
392
 
393
#define BTN_DIGI                0x140
394
#define BTN_TOOL_PEN            0x140
395
#define BTN_TOOL_RUBBER         0x141
396
#define BTN_TOOL_BRUSH          0x142
397
#define BTN_TOOL_PENCIL         0x143
398
#define BTN_TOOL_AIRBRUSH       0x144
399
#define BTN_TOOL_FINGER         0x145
400
#define BTN_TOOL_MOUSE          0x146
401
#define BTN_TOOL_LENS           0x147
402
#define BTN_TOUCH               0x14a
403
#define BTN_STYLUS              0x14b
404
#define BTN_STYLUS2             0x14c
405
#define BTN_TOOL_DOUBLETAP      0x14d
406
#define BTN_TOOL_TRIPLETAP      0x14e
407
 
408
#define BTN_WHEEL               0x150
409
#define BTN_GEAR_DOWN           0x150
410
#define BTN_GEAR_UP             0x151
411
 
412
#define KEY_OK                  0x160
413
#define KEY_SELECT              0x161
414
#define KEY_GOTO                0x162
415
#define KEY_CLEAR               0x163
416
#define KEY_POWER2              0x164
417
#define KEY_OPTION              0x165
418
#define KEY_INFO                0x166
419
#define KEY_TIME                0x167
420
#define KEY_VENDOR              0x168
421
#define KEY_ARCHIVE             0x169
422
#define KEY_PROGRAM             0x16a
423
#define KEY_CHANNEL             0x16b
424
#define KEY_FAVORITES           0x16c
425
#define KEY_EPG                 0x16d
426
#define KEY_PVR                 0x16e
427
#define KEY_MHP                 0x16f
428
#define KEY_LANGUAGE            0x170
429
#define KEY_TITLE               0x171
430
#define KEY_SUBTITLE            0x172
431
#define KEY_ANGLE               0x173
432
#define KEY_ZOOM                0x174
433
#define KEY_MODE                0x175
434
#define KEY_KEYBOARD            0x176
435
#define KEY_SCREEN              0x177
436
#define KEY_PC                  0x178
437
#define KEY_TV                  0x179
438
#define KEY_TV2                 0x17a
439
#define KEY_VCR                 0x17b
440
#define KEY_VCR2                0x17c
441
#define KEY_SAT                 0x17d
442
#define KEY_SAT2                0x17e
443
#define KEY_CD                  0x17f
444
#define KEY_TAPE                0x180
445
#define KEY_RADIO               0x181
446
#define KEY_TUNER               0x182
447
#define KEY_PLAYER              0x183
448
#define KEY_TEXT                0x184
449
#define KEY_DVD                 0x185
450
#define KEY_AUX                 0x186
451
#define KEY_MP3                 0x187
452
#define KEY_AUDIO               0x188
453
#define KEY_VIDEO               0x189
454
#define KEY_DIRECTORY           0x18a
455
#define KEY_LIST                0x18b
456
#define KEY_MEMO                0x18c
457
#define KEY_CALENDAR            0x18d
458
#define KEY_RED                 0x18e
459
#define KEY_GREEN               0x18f
460
#define KEY_YELLOW              0x190
461
#define KEY_BLUE                0x191
462
#define KEY_CHANNELUP           0x192
463
#define KEY_CHANNELDOWN         0x193
464
#define KEY_FIRST               0x194
465
#define KEY_LAST                0x195
466
#define KEY_AB                  0x196
467
#define KEY_NEXT                0x197
468
#define KEY_RESTART             0x198
469
#define KEY_SLOW                0x199
470
#define KEY_SHUFFLE             0x19a
471
#define KEY_BREAK               0x19b
472
#define KEY_PREVIOUS            0x19c
473
#define KEY_DIGITS              0x19d
474
#define KEY_TEEN                0x19e
475
#define KEY_TWEN                0x19f
476
 
477
#define KEY_DEL_EOL             0x1c0
478
#define KEY_DEL_EOS             0x1c1
479
#define KEY_INS_LINE            0x1c2
480
#define KEY_DEL_LINE            0x1c3
481
 
482
#define KEY_MAX                 0x1ff
483
 
484
/*
485
 * Relative axes
486
 */
487
 
488
#define REL_X                   0x00
489
#define REL_Y                   0x01
490
#define REL_Z                   0x02
491
#define REL_HWHEEL              0x06
492
#define REL_DIAL                0x07
493
#define REL_WHEEL               0x08
494
#define REL_MISC                0x09
495
#define REL_MAX                 0x0f
496
 
497
/*
498
 * Absolute axes
499
 */
500
 
501
#define ABS_X                   0x00
502
#define ABS_Y                   0x01
503
#define ABS_Z                   0x02
504
#define ABS_RX                  0x03
505
#define ABS_RY                  0x04
506
#define ABS_RZ                  0x05
507
#define ABS_THROTTLE            0x06
508
#define ABS_RUDDER              0x07
509
#define ABS_WHEEL               0x08
510
#define ABS_GAS                 0x09
511
#define ABS_BRAKE               0x0a
512
#define ABS_HAT0X               0x10
513
#define ABS_HAT0Y               0x11
514
#define ABS_HAT1X               0x12
515
#define ABS_HAT1Y               0x13
516
#define ABS_HAT2X               0x14
517
#define ABS_HAT2Y               0x15
518
#define ABS_HAT3X               0x16
519
#define ABS_HAT3Y               0x17
520
#define ABS_PRESSURE            0x18
521
#define ABS_DISTANCE            0x19
522
#define ABS_TILT_X              0x1a
523
#define ABS_TILT_Y              0x1b
524
#define ABS_TOOL_WIDTH          0x1c
525
#define ABS_VOLUME              0x20
526
#define ABS_MISC                0x28
527
#define ABS_MAX                 0x3f
528
 
529
/*
530
 * Misc events
531
 */
532
 
533
#define MSC_SERIAL              0x00
534
#define MSC_PULSELED            0x01
535
#define MSC_GESTURE             0x02
536
#define MSC_MAX                 0x07
537
 
538
/*
539
 * LEDs
540
 */
541
 
542
#define LED_NUML                0x00
543
#define LED_CAPSL               0x01
544
#define LED_SCROLLL             0x02
545
#define LED_COMPOSE             0x03
546
#define LED_KANA                0x04
547
#define LED_SLEEP               0x05
548
#define LED_SUSPEND             0x06
549
#define LED_MUTE                0x07
550
#define LED_MISC                0x08
551
#define LED_MAX                 0x0f
552
 
553
/*
554
 * Autorepeat values
555
 */
556
 
557
#define REP_DELAY               0x00
558
#define REP_PERIOD              0x01
559
#define REP_MAX                 0x01
560
 
561
/*
562
 * Sounds
563
 */
564
 
565
#define SND_CLICK               0x00
566
#define SND_BELL                0x01
567
#define SND_TONE                0x02
568
#define SND_MAX                 0x07
569
 
570
/*
571
 * IDs.
572
 */
573
 
574
#define ID_BUS                  0
575
#define ID_VENDOR               1
576
#define ID_PRODUCT              2
577
#define ID_VERSION              3
578
 
579
#define BUS_PCI                 0x01
580
#define BUS_ISAPNP              0x02
581
#define BUS_USB                 0x03
582
#define BUS_HIL                 0x04
583
 
584
#define BUS_ISA                 0x10
585
#define BUS_I8042               0x11
586
#define BUS_XTKBD               0x12
587
#define BUS_RS232               0x13
588
#define BUS_GAMEPORT            0x14
589
#define BUS_PARPORT             0x15
590
#define BUS_AMIGA               0x16
591
#define BUS_ADB                 0x17
592
#define BUS_I2C                 0x18
593
#define BUS_HOST                0x19
594
 
595
/*
596
 * Values describing the status of an effect
597
 */
598
#define FF_STATUS_STOPPED       0x00
599
#define FF_STATUS_PLAYING       0x01
600
#define FF_STATUS_MAX           0x01
601
 
602
/*
603
 * Structures used in ioctls to upload effects to a device
604
 * The first structures are not passed directly by using ioctls.
605
 * They are sub-structures of the actually sent structure (called ff_effect)
606
 */
607
 
608
struct ff_replay {
609
        __u16 length; /* Duration of an effect in ms. All other times are also expressed in ms */
610
        __u16 delay;  /* Time to wait before to start playing an effect */
611
};
612
 
613
struct ff_trigger {
614
        __u16 button;   /* Number of button triggering an effect */
615
        __u16 interval; /* Time to wait before an effect can be re-triggered (ms) */
616
};
617
 
618
struct ff_envelope {
619
        __u16 attack_length;    /* Duration of attack (ms) */
620
        __u16 attack_level;     /* Level at beginning of attack */
621
        __u16 fade_length;      /* Duration of fade (ms) */
622
        __u16 fade_level;       /* Level at end of fade */
623
};
624
 
625
/* FF_CONSTANT */
626
struct ff_constant_effect {
627
        __s16 level;        /* Strength of effect. Negative values are OK */
628
        struct ff_envelope envelope;
629
};
630
 
631
/* FF_RAMP */
632
struct ff_ramp_effect {
633
        __s16 start_level;
634
        __s16 end_level;
635
        struct ff_envelope envelope;
636
};
637
 
638
/* FF_SPRING of FF_FRICTION */
639
struct ff_condition_effect {
640
        __u16 right_saturation; /* Max level when joystick is on the right */
641
        __u16 left_saturation;  /* Max level when joystick in on the left */
642
 
643
        __s16 right_coeff;      /* Indicates how fast the force grows when the
644
                                   joystick moves to the right */
645
        __s16 left_coeff;       /* Same for left side */
646
 
647
        __u16 deadband; /* Size of area where no force is produced */
648
        __s16 center;   /* Position of dead zone */
649
 
650
};
651
 
652
/* FF_PERIODIC */
653
struct ff_periodic_effect {
654
        __u16 waveform; /* Kind of wave (sine, square...) */
655
        __u16 period;   /* in ms */
656
        __s16 magnitude;        /* Peak value */
657
        __s16 offset;   /* Mean value of wave (roughly) */
658
        __u16 phase;            /* 'Horizontal' shift */
659
 
660
        struct ff_envelope envelope;
661
 
662
/* Only used if waveform == FF_CUSTOM */
663
        __u32 custom_len;       /* Number of samples  */       
664
        __s16 *custom_data;     /* Buffer of samples */
665
/* Note: the data pointed by custom_data is copied by the driver. You can
666
 * therefore dispose of the memory after the upload/update */
667
};
668
 
669
/* FF_RUMBLE */
670
/* Some rumble pads have two motors of different weight.
671
   strong_magnitude represents the magnitude of the vibration generated
672
   by the heavy motor.
673
*/
674
struct ff_rumble_effect {
675
        __u16 strong_magnitude;  /* Magnitude of the heavy motor */
676
        __u16 weak_magnitude;    /* Magnitude of the light one */
677
};
678
 
679
/*
680
 * Structure sent through ioctl from the application to the driver
681
 */
682
struct ff_effect {
683
        __u16 type;
684
/* Following field denotes the unique id assigned to an effect.
685
 * If user sets if to -1, a new effect is created, and its id is returned in the same field
686
 * Else, the user sets it to the effect id it wants to update.
687
 */
688
        __s16 id;
689
 
690
        __u16 direction;        /* Direction. 0 deg -> 0x0000 (down)
691
                                             90 deg -> 0x4000 (left)
692
                                            180 deg -> 0x8000 (up)
693
                                            270 deg -> 0xC000 (right)
694
                                */
695
 
696
        struct ff_trigger trigger;
697
        struct ff_replay replay;
698
 
699
        union {
700
                struct ff_constant_effect constant;
701
                struct ff_ramp_effect ramp;
702
                struct ff_periodic_effect periodic;
703
                struct ff_condition_effect condition[2]; /* One for each axis */
704
                struct ff_rumble_effect rumble;
705
        } u;
706
};
707
 
708
/*
709
 * Force feedback effect types
710
 */
711
 
712
#define FF_RUMBLE       0x50
713
#define FF_PERIODIC     0x51
714
#define FF_CONSTANT     0x52
715
#define FF_SPRING       0x53
716
#define FF_FRICTION     0x54
717
#define FF_DAMPER       0x55
718
#define FF_INERTIA      0x56
719
#define FF_RAMP         0x57
720
 
721
/*
722
 * Force feedback periodic effect types
723
 */
724
 
725
#define FF_SQUARE       0x58
726
#define FF_TRIANGLE     0x59
727
#define FF_SINE         0x5a
728
#define FF_SAW_UP       0x5b
729
#define FF_SAW_DOWN     0x5c
730
#define FF_CUSTOM       0x5d
731
 
732
/*
733
 * Set ff device properties
734
 */
735
 
736
#define FF_GAIN         0x60
737
#define FF_AUTOCENTER   0x61
738
 
739
#define FF_MAX          0x7f
740
 
741
#ifdef __KERNEL__
742
 
743
/*
744
 * In-kernel definitions.
745
 */
746
 
747
#include <linux/fs.h>
748
#include <linux/timer.h>
749
 
750
#define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1)
751
#define BIT(x)  (1UL<<((x)%BITS_PER_LONG))
752
#define LONG(x) ((x)/BITS_PER_LONG)
753
 
754
#define INPUT_KEYCODE(dev, scancode) ((dev->keycodesize == 1) ? ((u8*)dev->keycode)[scancode] : \
755
        ((dev->keycodesize == 2) ? ((u16*)dev->keycode)[scancode] : (((u32*)dev->keycode)[scancode])))
756
 
757
#define init_input_dev(dev)     do { INIT_LIST_HEAD(&((dev)->h_list)); INIT_LIST_HEAD(&((dev)->node)); } while (0)
758
 
759
struct input_dev {
760
 
761
        void *private;
762
 
763
        char *name;
764
        char *phys;
765
        char *uniq;
766
        struct input_id id;
767
 
768
        unsigned long evbit[NBITS(EV_MAX)];
769
        unsigned long keybit[NBITS(KEY_MAX)];
770
        unsigned long relbit[NBITS(REL_MAX)];
771
        unsigned long absbit[NBITS(ABS_MAX)];
772
        unsigned long mscbit[NBITS(MSC_MAX)];
773
        unsigned long ledbit[NBITS(LED_MAX)];
774
        unsigned long sndbit[NBITS(SND_MAX)];
775
        unsigned long ffbit[NBITS(FF_MAX)];
776
        int ff_effects_max;
777
 
778
        unsigned int keycodemax;
779
        unsigned int keycodesize;
780
        void *keycode;
781
 
782
        unsigned int repeat_key;
783
        struct timer_list timer;
784
 
785
        struct pm_dev *pm_dev;
786
        struct pt_regs *regs;
787
        int state;
788
 
789
        int sync;
790
 
791
        int abs[ABS_MAX + 1];
792
        int rep[REP_MAX + 1];
793
 
794
        unsigned long key[NBITS(KEY_MAX)];
795
        unsigned long led[NBITS(LED_MAX)];
796
        unsigned long snd[NBITS(SND_MAX)];
797
 
798
        int absmax[ABS_MAX + 1];
799
        int absmin[ABS_MAX + 1];
800
        int absfuzz[ABS_MAX + 1];
801
        int absflat[ABS_MAX + 1];
802
 
803
        int (*open)(struct input_dev *dev);
804
        void (*close)(struct input_dev *dev);
805
        int (*accept)(struct input_dev *dev, struct file *file);
806
        int (*flush)(struct input_dev *dev, struct file *file);
807
        int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);
808
        int (*upload_effect)(struct input_dev *dev, struct ff_effect *effect);
809
        int (*erase_effect)(struct input_dev *dev, int effect_id);
810
 
811
        struct input_handle *grab;
812
 
813
        struct list_head        h_list;
814
        struct list_head        node;
815
};
816
 
817
/*
818
 * Structure for hotplug & device<->driver matching.
819
 */
820
 
821
#define INPUT_DEVICE_ID_MATCH_BUS       1
822
#define INPUT_DEVICE_ID_MATCH_VENDOR    2
823
#define INPUT_DEVICE_ID_MATCH_PRODUCT   4
824
#define INPUT_DEVICE_ID_MATCH_VERSION   8
825
 
826
#define INPUT_DEVICE_ID_MATCH_EVBIT     0x010
827
#define INPUT_DEVICE_ID_MATCH_KEYBIT    0x020
828
#define INPUT_DEVICE_ID_MATCH_RELBIT    0x040
829
#define INPUT_DEVICE_ID_MATCH_ABSBIT    0x080
830
#define INPUT_DEVICE_ID_MATCH_MSCIT     0x100
831
#define INPUT_DEVICE_ID_MATCH_LEDBIT    0x200
832
#define INPUT_DEVICE_ID_MATCH_SNDBIT    0x400
833
#define INPUT_DEVICE_ID_MATCH_FFBIT     0x800
834
 
835
#define INPUT_DEVICE_ID_MATCH_DEVICE\
836
        (INPUT_DEVICE_ID_MATCH_BUS | INPUT_DEVICE_ID_MATCH_VENDOR | INPUT_DEVICE_ID_MATCH_PRODUCT)
837
#define INPUT_DEVICE_ID_MATCH_DEVICE_AND_VERSION\
838
        (INPUT_DEVICE_ID_MATCH_DEVICE | INPUT_DEVICE_ID_MATCH_VERSION)
839
 
840
struct input_device_id {
841
 
842
        unsigned long flags;
843
 
844
        struct input_id id;
845
 
846
        unsigned long evbit[NBITS(EV_MAX)];
847
        unsigned long keybit[NBITS(KEY_MAX)];
848
        unsigned long relbit[NBITS(REL_MAX)];
849
        unsigned long absbit[NBITS(ABS_MAX)];
850
        unsigned long mscbit[NBITS(MSC_MAX)];
851
        unsigned long ledbit[NBITS(LED_MAX)];
852
        unsigned long sndbit[NBITS(SND_MAX)];
853
        unsigned long ffbit[NBITS(FF_MAX)];
854
 
855
        unsigned long driver_info;
856
};
857
 
858
struct input_handle;
859
 
860
struct input_handler {
861
 
862
        void *private;
863
 
864
        void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
865
        struct input_handle* (*connect)(struct input_handler *handler, struct input_dev *dev, struct input_device_id *id);
866
        void (*disconnect)(struct input_handle *handle);
867
 
868
        struct file_operations *fops;
869
        int minor;
870
        char *name;
871
 
872
        struct input_device_id *id_table;
873
 
874
        struct list_head        h_list;
875
        struct list_head        node;
876
};
877
 
878
struct input_handle {
879
 
880
        void *private;
881
 
882
        int open;
883
        char *name;
884
 
885
        struct input_dev *dev;
886
        struct input_handler *handler;
887
 
888
        struct list_head        d_node;
889
        struct list_head        h_node;
890
};
891
 
892
#define to_dev(n) container_of(n,struct input_dev,node)
893
#define to_handler(n) container_of(n,struct input_handler,node);
894
#define to_handle(n) container_of(n,struct input_handle,d_node)
895
#define to_handle_h(n) container_of(n,struct input_handle,h_node)
896
 
897
void input_register_device(struct input_dev *);
898
void input_unregister_device(struct input_dev *);
899
 
900
void input_register_handler(struct input_handler *);
901
void input_unregister_handler(struct input_handler *);
902
 
903
int input_grab_device(struct input_handle *);
904
void input_release_device(struct input_handle *);
905
 
906
int input_open_device(struct input_handle *);
907
void input_close_device(struct input_handle *);
908
 
909
int input_accept_process(struct input_handle *handle, struct file *file);
910
int input_flush_device(struct input_handle* handle, struct file* file);
911
 
912
void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);
913
 
914
#define input_report_key(a,b,c) input_event(a, EV_KEY, b, !!(c))
915
#define input_report_rel(a,b,c) input_event(a, EV_REL, b, c)
916
#define input_report_abs(a,b,c) input_event(a, EV_ABS, b, c)
917
#define input_report_ff(a,b,c)  input_event(a, EV_FF, b, c)
918
#define input_report_ff_status(a,b,c)   input_event(a, EV_FF_STATUS, b, c)
919
 
920
#define input_regs(a,b)         do { (a)->regs = (b); } while (0)
921
#define input_sync(a)           do { input_event(a, EV_SYN, SYN_REPORT, 0); (a)->regs = NULL; } while (0)
922
 
923
extern struct class input_class;
924
 
925
#endif
926
#endif