linux-old/include/linux/input.h
<<
>>
Prefs
   1#ifndef _INPUT_H
   2#define _INPUT_H
   3
   4/*
   5 * $Id: input.h,v 1.34 2001/05/28 09:06:44 vojtech Exp $
   6 *
   7 *  Copyright (c) 1999-2000 Vojtech Pavlik
   8 *
   9 *  Sponsored by SuSE
  10 */
  11
  12/*
  13 * This program is free software; you can redistribute it and/or modify
  14 * it under the terms of the GNU General Public License as published by
  15 * the Free Software Foundation; either version 2 of the License, or
  16 * (at your option) any later version.
  17 *
  18 * This program is distributed in the hope that it will be useful,
  19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21 * GNU General Public License for more details.
  22 *
  23 * You should have received a copy of the GNU General Public License
  24 * along with this program; if not, write to the Free Software
  25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  26 *
  27 * Should you need to contact me, the author, you can do so either by
  28 * e-mail - mail your message to <vojtech@suse.cz>, or by paper mail:
  29 * Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic
  30 */
  31
  32#ifdef __KERNEL__
  33#include <linux/time.h>
  34#else
  35#include <sys/time.h>
  36#include <sys/ioctl.h>
  37#include <asm/types.h>
  38#endif
  39
  40/*
  41 * The event structure itself
  42 */
  43
  44struct input_event {
  45        struct timeval time;
  46        unsigned short type;
  47        unsigned short code;
  48        unsigned int value;
  49};
  50
  51/*
  52 * Protocol version.
  53 */
  54
  55#define EV_VERSION              0x010000
  56
  57/*
  58 * IOCTLs (0x00 - 0x7f)
  59 */
  60
  61#define EVIOCGVERSION           _IOR('E', 0x01, int)                    /* get driver version */
  62#define EVIOCGID                _IOR('E', 0x02, short[4])               /* get device ID */
  63#define EVIOCGREP               _IOR('E', 0x03, int[2])                 /* get repeat settings */
  64#define EVIOCSREP               _IOW('E', 0x03, int[2])                 /* get repeat settings */
  65#define EVIOCGKEYCODE           _IOR('E', 0x04, int[2])                 /* get keycode */
  66#define EVIOCSKEYCODE           _IOW('E', 0x04, int[2])                 /* set keycode */
  67#define EVIOCGKEY               _IOR('E', 0x05, int[2])                 /* get key value */
  68#define EVIOCGNAME(len)         _IOC(_IOC_READ, 'E', 0x06, len)         /* get device name */
  69#define EVIOCGBUS               _IOR('E', 0x07, short[4])               /* get bus address */
  70
  71#define EVIOCGBIT(ev,len)       _IOC(_IOC_READ, 'E', 0x20 + ev, len)    /* get event bits */
  72#define EVIOCGABS(abs)          _IOR('E', 0x40 + abs, int[5])           /* get 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 EVIOCSGAIN              _IOW('E', 0x82, unsigned short)         /* Set overall gain */
  77#define EVIOCSAUTOCENTER        _IOW('E', 0x83, unsigned short)         /* Enable or disable auto-centering */
  78#define EVIOCGEFFECTS           _IOR('E', 0x84, int)                    /* Report number of effects playable at the same time */
  79
  80/*
  81 * Event types
  82 */
  83
  84#define EV_RST                  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_MAX                  0x1f
  94
  95/*
  96 * Keys and buttons
  97 */
  98
  99#define KEY_RESERVED            0
 100#define KEY_ESC                 1
 101#define KEY_1                   2
 102#define KEY_2                   3
 103#define KEY_3                   4
 104#define KEY_4                   5
 105#define KEY_5                   6
 106#define KEY_6                   7
 107#define KEY_7                   8
 108#define KEY_8                   9
 109#define KEY_9                   10
 110#define KEY_0                   11
 111#define KEY_MINUS               12
 112#define KEY_EQUAL               13
 113#define KEY_BACKSPACE           14
 114#define KEY_TAB                 15
 115#define KEY_Q                   16
 116#define KEY_W                   17
 117#define KEY_E                   18
 118#define KEY_R                   19
 119#define KEY_T                   20
 120#define KEY_Y                   21
 121#define KEY_U                   22
 122#define KEY_I                   23
 123#define KEY_O                   24
 124#define KEY_P                   25
 125#define KEY_LEFTBRACE           26
 126#define KEY_RIGHTBRACE          27
 127#define KEY_ENTER               28
 128#define KEY_LEFTCTRL            29
 129#define KEY_A                   30
 130#define KEY_S                   31
 131#define KEY_D                   32
 132#define KEY_F                   33
 133#define KEY_G                   34
 134#define KEY_H                   35
 135#define KEY_J                   36
 136#define KEY_K                   37
 137#define KEY_L                   38
 138#define KEY_SEMICOLON           39
 139#define KEY_APOSTROPHE          40
 140#define KEY_GRAVE               41
 141#define KEY_LEFTSHIFT           42
 142#define KEY_BACKSLASH           43
 143#define KEY_Z                   44
 144#define KEY_X                   45
 145#define KEY_C                   46
 146#define KEY_V                   47
 147#define KEY_B                   48
 148#define KEY_N                   49
 149#define KEY_M                   50
 150#define KEY_COMMA               51
 151#define KEY_DOT                 52
 152#define KEY_SLASH               53
 153#define KEY_RIGHTSHIFT          54
 154#define KEY_KPASTERISK          55
 155#define KEY_LEFTALT             56
 156#define KEY_SPACE               57
 157#define KEY_CAPSLOCK            58
 158#define KEY_F1                  59
 159#define KEY_F2                  60
 160#define KEY_F3                  61
 161#define KEY_F4                  62
 162#define KEY_F5                  63
 163#define KEY_F6                  64
 164#define KEY_F7                  65
 165#define KEY_F8                  66
 166#define KEY_F9                  67
 167#define KEY_F10                 68
 168#define KEY_NUMLOCK             69
 169#define KEY_SCROLLLOCK          70
 170#define KEY_KP7                 71
 171#define KEY_KP8                 72
 172#define KEY_KP9                 73
 173#define KEY_KPMINUS             74
 174#define KEY_KP4                 75
 175#define KEY_KP5                 76
 176#define KEY_KP6                 77
 177#define KEY_KPPLUS              78
 178#define KEY_KP1                 79
 179#define KEY_KP2                 80
 180#define KEY_KP3                 81
 181#define KEY_KP0                 82
 182#define KEY_KPDOT               83
 183#define KEY_103RD               84
 184#define KEY_F13                 85
 185#define KEY_102ND               86
 186#define KEY_F11                 87
 187#define KEY_F12                 88
 188#define KEY_F14                 89
 189#define KEY_F15                 90
 190#define KEY_F16                 91
 191#define KEY_F17                 92
 192#define KEY_F18                 93
 193#define KEY_F19                 94
 194#define KEY_F20                 95
 195#define KEY_KPENTER             96
 196#define KEY_RIGHTCTRL           97
 197#define KEY_KPSLASH             98
 198#define KEY_SYSRQ               99
 199#define KEY_RIGHTALT            100
 200#define KEY_LINEFEED            101
 201#define KEY_HOME                102
 202#define KEY_UP                  103
 203#define KEY_PAGEUP              104
 204#define KEY_LEFT                105
 205#define KEY_RIGHT               106
 206#define KEY_END                 107
 207#define KEY_DOWN                108
 208#define KEY_PAGEDOWN            109
 209#define KEY_INSERT              110
 210#define KEY_DELETE              111
 211#define KEY_MACRO               112
 212#define KEY_MUTE                113
 213#define KEY_VOLUMEDOWN          114
 214#define KEY_VOLUMEUP            115
 215#define KEY_POWER               116
 216#define KEY_KPEQUAL             117
 217#define KEY_KPPLUSMINUS         118
 218#define KEY_PAUSE               119
 219#define KEY_F21                 120
 220#define KEY_F22                 121
 221#define KEY_F23                 122
 222#define KEY_F24                 123
 223#define KEY_KPCOMMA             124
 224#define KEY_LEFTMETA            125
 225#define KEY_RIGHTMETA           126
 226#define KEY_COMPOSE             127
 227
 228#define KEY_STOP                128
 229#define KEY_AGAIN               129
 230#define KEY_PROPS               130
 231#define KEY_UNDO                131
 232#define KEY_FRONT               132
 233#define KEY_COPY                133
 234#define KEY_OPEN                134
 235#define KEY_PASTE               135
 236#define KEY_FIND                136
 237#define KEY_CUT                 137
 238#define KEY_HELP                138
 239#define KEY_MENU                139
 240#define KEY_CALC                140
 241#define KEY_SETUP               141
 242#define KEY_SLEEP               142
 243#define KEY_WAKEUP              143
 244#define KEY_FILE                144
 245#define KEY_SENDFILE            145
 246#define KEY_DELETEFILE          146
 247#define KEY_XFER                147
 248#define KEY_PROG1               148
 249#define KEY_PROG2               149
 250#define KEY_WWW                 150
 251#define KEY_MSDOS               151
 252#define KEY_COFFEE              152
 253#define KEY_DIRECTION           153
 254#define KEY_CYCLEWINDOWS        154
 255#define KEY_MAIL                155
 256#define KEY_BOOKMARKS           156
 257#define KEY_COMPUTER            157
 258#define KEY_BACK                158
 259#define KEY_FORWARD             159
 260#define KEY_CLOSECD             160
 261#define KEY_EJECTCD             161
 262#define KEY_EJECTCLOSECD        162
 263#define KEY_NEXTSONG            163
 264#define KEY_PLAYPAUSE           164
 265#define KEY_PREVIOUSSONG        165
 266#define KEY_STOPCD              166
 267#define KEY_RECORD              167
 268#define KEY_REWIND              168
 269#define KEY_PHONE               169
 270#define KEY_ISO                 170
 271#define KEY_CONFIG              171
 272#define KEY_HOMEPAGE            172
 273#define KEY_REFRESH             173
 274#define KEY_EXIT                174
 275#define KEY_MOVE                175
 276#define KEY_EDIT                176
 277#define KEY_SCROLLUP            177
 278#define KEY_SCROLLDOWN          178
 279#define KEY_KPLEFTPAREN         179
 280#define KEY_KPRIGHTPAREN        180
 281
 282#define KEY_INTL1               181
 283#define KEY_INTL2               182
 284#define KEY_INTL3               183
 285#define KEY_INTL4               184
 286#define KEY_INTL5               185
 287#define KEY_INTL6               186
 288#define KEY_INTL7               187
 289#define KEY_INTL8               188
 290#define KEY_INTL9               189
 291#define KEY_LANG1               190
 292#define KEY_LANG2               191
 293#define KEY_LANG3               192
 294#define KEY_LANG4               193
 295#define KEY_LANG5               194
 296#define KEY_LANG6               195
 297#define KEY_LANG7               196
 298#define KEY_LANG8               197
 299#define KEY_LANG9               198
 300
 301#define KEY_PLAYCD              200
 302#define KEY_PAUSECD             201
 303#define KEY_PROG3               202
 304#define KEY_PROG4               203
 305#define KEY_SUSPEND             205
 306#define KEY_CLOSE               206
 307
 308#define KEY_UNKNOWN             220
 309
 310#define KEY_BRIGHTNESSDOWN      224
 311#define KEY_BRIGHTNESSUP        225
 312
 313#define BTN_MISC                0x100
 314#define BTN_0                   0x100
 315#define BTN_1                   0x101
 316#define BTN_2                   0x102
 317#define BTN_3                   0x103
 318#define BTN_4                   0x104
 319#define BTN_5                   0x105
 320#define BTN_6                   0x106
 321#define BTN_7                   0x107
 322#define BTN_8                   0x108
 323#define BTN_9                   0x109
 324
 325#define BTN_MOUSE               0x110
 326#define BTN_LEFT                0x110
 327#define BTN_RIGHT               0x111
 328#define BTN_MIDDLE              0x112
 329#define BTN_SIDE                0x113
 330#define BTN_EXTRA               0x114
 331#define BTN_FORWARD             0x115
 332#define BTN_BACK                0x116
 333
 334#define BTN_JOYSTICK            0x120
 335#define BTN_TRIGGER             0x120
 336#define BTN_THUMB               0x121
 337#define BTN_THUMB2              0x122
 338#define BTN_TOP                 0x123
 339#define BTN_TOP2                0x124
 340#define BTN_PINKIE              0x125
 341#define BTN_BASE                0x126
 342#define BTN_BASE2               0x127
 343#define BTN_BASE3               0x128
 344#define BTN_BASE4               0x129
 345#define BTN_BASE5               0x12a
 346#define BTN_BASE6               0x12b
 347#define BTN_DEAD                0x12f
 348
 349#define BTN_GAMEPAD             0x130
 350#define BTN_A                   0x130
 351#define BTN_B                   0x131
 352#define BTN_C                   0x132
 353#define BTN_X                   0x133
 354#define BTN_Y                   0x134
 355#define BTN_Z                   0x135
 356#define BTN_TL                  0x136
 357#define BTN_TR                  0x137
 358#define BTN_TL2                 0x138
 359#define BTN_TR2                 0x139
 360#define BTN_SELECT              0x13a
 361#define BTN_START               0x13b
 362#define BTN_MODE                0x13c
 363#define BTN_THUMBL              0x13d
 364#define BTN_THUMBR              0x13e
 365
 366#define BTN_DIGI                0x140
 367#define BTN_TOOL_PEN            0x140
 368#define BTN_TOOL_RUBBER         0x141
 369#define BTN_TOOL_BRUSH          0x142
 370#define BTN_TOOL_PENCIL         0x143
 371#define BTN_TOOL_AIRBRUSH       0x144
 372#define BTN_TOOL_FINGER         0x145
 373#define BTN_TOOL_MOUSE          0x146
 374#define BTN_TOOL_LENS           0x147
 375#define BTN_TOUCH               0x14a
 376#define BTN_STYLUS              0x14b
 377#define BTN_STYLUS2             0x14c
 378
 379#define KEY_MAX                 0x1ff
 380
 381/*
 382 * Relative axes
 383 */
 384
 385#define REL_X                   0x00
 386#define REL_Y                   0x01
 387#define REL_Z                   0x02
 388#define REL_HWHEEL              0x06
 389#define REL_DIAL                0x07
 390#define REL_WHEEL               0x08
 391#define REL_MISC                0x09
 392#define REL_MAX                 0x0f
 393
 394/*
 395 * Absolute axes
 396 */
 397
 398#define ABS_X                   0x00
 399#define ABS_Y                   0x01
 400#define ABS_Z                   0x02
 401#define ABS_RX                  0x03
 402#define ABS_RY                  0x04
 403#define ABS_RZ                  0x05
 404#define ABS_THROTTLE            0x06
 405#define ABS_RUDDER              0x07
 406#define ABS_WHEEL               0x08
 407#define ABS_GAS                 0x09
 408#define ABS_BRAKE               0x0a
 409#define ABS_HAT0X               0x10
 410#define ABS_HAT0Y               0x11
 411#define ABS_HAT1X               0x12
 412#define ABS_HAT1Y               0x13
 413#define ABS_HAT2X               0x14
 414#define ABS_HAT2Y               0x15
 415#define ABS_HAT3X               0x16
 416#define ABS_HAT3Y               0x17
 417#define ABS_PRESSURE            0x18
 418#define ABS_DISTANCE            0x19
 419#define ABS_TILT_X              0x1a
 420#define ABS_TILT_Y              0x1b
 421#define ABS_MISC                0x1c
 422#define ABS_MAX                 0x1f
 423
 424/*
 425 * Misc events
 426 */
 427
 428#define MSC_SERIAL              0x00
 429#define MSC_PULSELED            0x01
 430#define MSC_MAX                 0x07
 431
 432/*
 433 * LEDs
 434 */
 435
 436#define LED_NUML                0x00
 437#define LED_CAPSL               0x01
 438#define LED_SCROLLL             0x02
 439#define LED_COMPOSE             0x03
 440#define LED_KANA                0x04
 441#define LED_SLEEP               0x05
 442#define LED_SUSPEND             0x06
 443#define LED_MUTE                0x07
 444#define LED_MISC                0x08
 445#define LED_MAX                 0x0f
 446
 447/*
 448 * Autorepeat values
 449 */
 450
 451#define REP_DELAY               0x00
 452#define REP_PERIOD              0x01
 453#define REP_MAX                 0x01
 454
 455/*
 456 * Sounds
 457 */
 458
 459#define SND_CLICK               0x00
 460#define SND_BELL                0x01
 461#define SND_MAX                 0x07
 462
 463/*
 464 * IDs.
 465 */
 466
 467#define ID_BUS                  0
 468#define ID_VENDOR               1
 469#define ID_PRODUCT              2
 470#define ID_VERSION              3
 471
 472#define BUS_PCI                 0x01
 473#define BUS_ISAPNP              0x02
 474#define BUS_USB                 0x03
 475#define BUS_HIL                 0x04
 476#define BUS_BLUETOOTH           0x05
 477
 478#define BUS_ISA                 0x10
 479#define BUS_I8042               0x11
 480#define BUS_XTKBD               0x12
 481#define BUS_RS232               0x13
 482#define BUS_GAMEPORT            0x14
 483#define BUS_PARPORT             0x15
 484#define BUS_AMIGA               0x16
 485#define BUS_ADB                 0x17
 486#define BUS_I2C                 0x18
 487
 488/*
 489 * Structures used in ioctls to upload effects to a device
 490 * The first structures are not passed directly by using ioctls.
 491 * They are sub-structures of the actually sent structure (called ff_effect)
 492 */
 493
 494struct ff_replay {
 495        __u16 length;           /* Duration of an effect */
 496        __u16 delay;            /* Time to wait before to start playing an effect */
 497};
 498
 499struct ff_trigger {
 500        __u16 button;           /* Number of button triggering an effect */
 501        __u16 interval;         /* Time to wait before an effect can be re-triggered */
 502};
 503
 504struct ff_shape {
 505        __u16 attack_length;    /* Duration of attack */
 506        __s16 attack_level;     /* Level at beginning of attack */
 507        __u16 fade_length;      /* Duration of fade */
 508        __s16 fade_level;       /* Level at end of fade */
 509};
 510
 511/* FF_CONSTANT */
 512struct ff_constant_effect {
 513        __s16 level;            /* Strength of effect */
 514        __u16 direction;        /* Direction of effect (see periodic effects) */
 515        struct ff_shape shape;
 516};
 517
 518/* FF_SPRING of FF_FRICTION */
 519struct ff_interactive_effect {
 520/* Axis along which effect must be created. If null, the field named direction
 521 * is used
 522 * It is a bit array (ie to enable axes X and Y, use BIT(ABS_X) | BIT(ABS_Y)
 523 */
 524        __u16 axis;
 525        __u16 direction;
 526
 527        __s16 right_saturation; /* Max level when joystick is on the right */
 528        __s16 left_saturation;  /* Max level when joystick in on the left */
 529
 530        __s16 right_coeff;      /* Indicates how fast the force grows when the
 531                                   joystick moves to the right */
 532        __s16 left_coeff;       /* Same for left side */
 533
 534        __u16 deadband;         /* Size of area where no force is produced */
 535        __s16 center;           /* Position of dead dead zone */
 536
 537};
 538
 539/* FF_PERIODIC */
 540struct ff_periodic_effect {
 541        __u16 waveform;         /* Kind of wave (sine, square...) */
 542        __u16 period;
 543        __s16 magnitude;        /* Peak value */
 544        __s16 offset;           /* Mean value of wave (roughly) */
 545        __u16 phase;            /* 'Horizontal' shift */
 546        __u16 direction;        /* Direction. 0 deg -> 0x0000
 547                                             90 deg -> 0x4000 */
 548
 549        struct ff_shape shape;
 550};
 551
 552/*
 553 * Structure sent through ioctl from the application to the driver
 554 */
 555struct ff_effect {
 556        __u16 type;
 557/* Following field denotes the unique id assigned to an effect.
 558 * It is set by the driver.
 559 */
 560        __s16 id;
 561
 562        struct ff_trigger trigger;
 563        struct ff_replay replay;
 564
 565        union {
 566                struct ff_constant_effect constant;
 567                struct ff_periodic_effect periodic;
 568                struct ff_interactive_effect interactive;
 569        } u;
 570};
 571
 572/*
 573 * Buttons that can trigger effects.  Use for example FF_BTN(BTN_TRIGGER) to
 574 * access the bitmap.
 575 */
 576
 577#define FF_BTN(x)       ((x) - BTN_MISC + FF_BTN_OFFSET)
 578#define FF_BTN_OFFSET   0x00
 579
 580/*
 581 * Force feedback axis mappings. Use FF_ABS() to access the bitmap.
 582 */
 583
 584#define FF_ABS(x)       ((x) + FF_ABS_OFFSET)
 585#define FF_ABS_OFFSET   0x40
 586
 587/*
 588 * Force feedback effect types
 589 */
 590
 591#define FF_RUMBLE       0x50
 592#define FF_PERIODIC     0x51
 593#define FF_CONSTANT     0x52
 594#define FF_SPRING       0x53
 595#define FF_FRICTION     0x54
 596
 597/*
 598 * Force feedback periodic effect types
 599 */
 600
 601#define FF_SQUARE       0x58
 602#define FF_TRIANGLE     0x59
 603#define FF_SINE         0x5a
 604#define FF_SAW_UP       0x5b
 605#define FF_SAW_DOWN     0x5c
 606#define FF_CUSTOM       0x5d
 607
 608/*
 609 * Set ff device properties
 610 */
 611
 612#define FF_GAIN         0x60
 613#define FF_AUTOCENTER   0x61
 614
 615#define FF_MAX          0x7f
 616
 617#ifdef __KERNEL__
 618
 619/*
 620 * In-kernel definitions.
 621 */
 622
 623#include <linux/sched.h>
 624#include <linux/devfs_fs_kernel.h>
 625
 626#define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1)
 627#define BIT(x)  (1UL<<((x)%BITS_PER_LONG))
 628#define LONG(x) ((x)/BITS_PER_LONG)
 629
 630struct input_dev {
 631
 632        void *private;
 633
 634        int number;
 635        char *name;
 636        unsigned short idbus;
 637        unsigned short idvendor;
 638        unsigned short idproduct;
 639        unsigned short idversion;
 640
 641        unsigned long evbit[NBITS(EV_MAX)];
 642        unsigned long keybit[NBITS(KEY_MAX)];
 643        unsigned long relbit[NBITS(REL_MAX)];
 644        unsigned long absbit[NBITS(ABS_MAX)];
 645        unsigned long mscbit[NBITS(MSC_MAX)];
 646        unsigned long ledbit[NBITS(LED_MAX)];
 647        unsigned long sndbit[NBITS(SND_MAX)];
 648        unsigned long ffbit[NBITS(FF_MAX)];
 649        int ff_effects_max;
 650
 651        unsigned int keycodemax;
 652        unsigned int keycodesize;
 653        void *keycode;
 654
 655        unsigned int repeat_key;
 656        struct timer_list timer;
 657
 658        int abs[ABS_MAX + 1];
 659        int rep[REP_MAX + 1];
 660
 661        unsigned long key[NBITS(KEY_MAX)];
 662        unsigned long led[NBITS(LED_MAX)];
 663        unsigned long snd[NBITS(SND_MAX)];
 664
 665        int absmax[ABS_MAX + 1];
 666        int absmin[ABS_MAX + 1];
 667        int absfuzz[ABS_MAX + 1];
 668        int absflat[ABS_MAX + 1];
 669
 670        int (*open)(struct input_dev *dev);
 671        void (*close)(struct input_dev *dev);
 672        int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);
 673        int (*upload_effect)(struct input_dev *dev, struct ff_effect *effect);
 674        int (*erase_effect)(struct input_dev *dev, int effect_id);
 675
 676        struct input_handle *handle;
 677        struct input_dev *next;
 678};
 679
 680struct input_handler {
 681
 682        void *private;
 683
 684        void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
 685        struct input_handle* (*connect)(struct input_handler *handler, struct input_dev *dev);
 686        void (*disconnect)(struct input_handle *handle);
 687
 688        struct file_operations *fops;
 689        int minor;
 690
 691        struct input_handle *handle;
 692        struct input_handler *next;
 693};
 694
 695struct input_handle {
 696
 697        void *private;
 698
 699        int open;
 700
 701        struct input_dev *dev;
 702        struct input_handler *handler;
 703
 704        struct input_handle *dnext;
 705        struct input_handle *hnext;
 706};
 707
 708void input_register_device(struct input_dev *);
 709void input_unregister_device(struct input_dev *);
 710
 711void input_register_handler(struct input_handler *);
 712void input_unregister_handler(struct input_handler *);
 713
 714int input_open_device(struct input_handle *);
 715void input_close_device(struct input_handle *);
 716
 717devfs_handle_t input_register_minor(char *name, int minor, int minor_base);
 718void input_unregister_minor(devfs_handle_t handle);
 719
 720void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);
 721
 722#define input_report_key(a,b,c) input_event(a, EV_KEY, b, !!(c))
 723#define input_report_rel(a,b,c) input_event(a, EV_REL, b, c)
 724#define input_report_abs(a,b,c) input_event(a, EV_ABS, b, c)
 725
 726#endif
 727#endif
 728
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.