First of all, the main file to include in order to interface with the input subsystem is linux/input.h:
#include <linux/input.h>
Whatever type of input device it is, whatever type of event it sends, an input device is represented in the kernel as an instance of struct input_dev:
struct input_dev { const char *name; const char *phys; 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 int repeat_key; int rep[REP_CNT]; struct input_absinfo *absinfo; unsigned long key[BITS_TO_LONGS(KEY_CNT)]; int (*open)(struct input_dev *dev); void (*close)(struct input_dev *dev); unsigned int users; struct device dev; unsigned...