struct input_dev — represents an input device
struct input_dev { const char * name; const char * phys; const char * uniq; struct input_id id; unsigned long evbit[BITS_TO_LONGS(EV_CNT)]; unsigned long keybit[BITS_TO_LONGS(KEY_CNT)]; unsigned long relbit[BITS_TO_LONGS(REL_CNT)]; unsigned long absbit[BITS_TO_LONGS(ABS_CNT)]; unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)]; unsigned long ledbit[BITS_TO_LONGS(LED_CNT)]; unsigned long sndbit[BITS_TO_LONGS(SND_CNT)]; unsigned long ffbit[BITS_TO_LONGS(FF_CNT)]; unsigned long swbit[BITS_TO_LONGS(SW_CNT)]; unsigned int keycodemax; unsigned int keycodesize; void * keycode; int (* setkeycode) (struct input_dev *dev, int scancode, int keycode); int (* getkeycode) (struct input_dev *dev, int scancode, int *keycode); struct ff_device * ff; unsigned int repeat_key; struct timer_list timer; int sync; int abs[ABS_MAX + 1]; int rep[REP_MAX + 1]; unsigned long key[BITS_TO_LONGS(KEY_CNT)]; unsigned long led[BITS_TO_LONGS(LED_CNT)]; unsigned long snd[BITS_TO_LONGS(SND_CNT)]; unsigned long sw[BITS_TO_LONGS(SW_CNT)]; int absmax[ABS_MAX + 1]; int absmin[ABS_MAX + 1]; int absfuzz[ABS_MAX + 1]; int absflat[ABS_MAX + 1]; int (* open) (struct input_dev *dev); void (* close) (struct input_dev *dev); int (* flush) (struct input_dev *dev, struct file *file); int (* event) (struct input_dev *dev, unsigned int type, unsigned int code, int value); struct input_handle * grab; spinlock_t event_lock; struct mutex mutex; unsigned int users; int going_away; struct device dev; struct list_head h_list; struct list_head node; };
name of the device
physical path to the device in the system hierarchy
unique identification code for the device (if device has it)
id of the device (struct input_id)
bitmap of types of events supported by the device (EV_KEY, EV_REL, etc.)
bitmap of keys/buttons this device has
bitmap of relative axes for the device
bitmap of absolute axes for the device
bitmap of miscellaneous events supported by the device
bitmap of leds present on the device
bitmap of sound effects supported by the device
bitmap of force feedback effects supported by the device
bitmap of switches present on the device
size of keycode table
size of elements in keycode table
map of scancodes to keycodes for this device
optional method to alter current keymap, used to implement sparse keymaps. If not supplied default mechanism will be used
optional method to retrieve current keymap. If not supplied default mechanism will be used
force feedback structure associated with the device if device supports force feedback effects
stores key code of the last key pressed; used to implement software autorepeat
timer for software autorepeat
set to 1 when there were no new events since last EV_SYNC
current values for reports from absolute axes
current values for autorepeat parameters (delay, rate)
reflects current state of device's keys/buttons
reflects current state of device's LEDs
reflects current state of sound effects
reflects current state of device's switches
maximum values for events coming from absolute axes
minimum values for events coming from absolute axes
describes noisiness for axes
size of the center flat position (used by joydev)
this method is called when the very first user calls
input_open_device
. The driver must prepare the device
to start generating events (start polling thread,
request an IRQ, submit URB, etc.)
this method is called when the very last user calls
input_close_device
.
purges the device. Most commonly used to get rid of force feedback effects loaded into the device when disconnecting from it
event handler for events sent _to_ the device, like EV_LED
or EV_SND. The device is expected to carry out the requested
action (turn on a LED, play sound, etc.) The call is protected
by event_lock
and must not sleep
input handle that currently has the device grabbed (via EVIOCGRAB ioctl). When a handle grabs a device it becomes sole recipient for all input events coming from the device
this spinlock is is taken when input core receives
and processes a new event for the device (in input_event
).
Code that accesses and/or modifies parameters of a device
(such as keymap or absmin, absmax, absfuzz, etc.) after device
has been registered with input core must take this lock.
serializes calls to open
, close
and flush
methods
stores number of users (input handlers) that opened this
device. It is used by input_open_device
and input_close_device
to make sure that dev->open
is only called when the first
user opens device and dev->close
is called when the very
last user closes the device
marks devices that are in a middle of unregistering and causes input_open_device*() fail with -ENODEV.
driver model's view of this device
list of input handles associated with the device. When accessing the list dev->mutex must be held
used to place the device onto input_dev_list