usb2-相关的input子系统及 写成input子系统

来源:互联网 发布:俄罗斯数学知乎 编辑:程序博客网 时间:2024/05/21 15:06
//设置支持的事件类型,如input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);//声明支持按键事件EV_KEY和相对坐标事件EV_REL//也可用下面的形式set_bit(EV_KEY,input_dev->evbit)set_bit(EV_REL,input_dev->evbit)//设置号支持的类型后,再设置支持类型中的具体事项。input_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) |BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE);//设置支持的具体按键input_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y) | BIT_MASK(REL_WHEEL);//设置支持的具体相对坐标//也可用下面的形式set_bit(BTN_LEFT,input_dev->keybit)set_bit(BTN_RIGHT,input_dev->keybit)set_bit(BTN_MIDDLE,input_dev->keybit)set_bit(REL_X,input_dev->relbit)set_bit(REL_Y,input_dev->relbit)set_bit(REL_WHEEL,input_dev->relbit)//在中断函数或其他需要的地方报告事件        input_report_key(dev, BTN_LEFT,   data[0] & 0x01);//data[0]是通过usb从单片机里取得的数据。        input_report_key(dev, BTN_RIGHT,  data[0] & 0x02);        input_report_key(dev, BTN_MIDDLE, data[0] & 0x04);        input_report_rel(dev, REL_X,     data[1]);//data[1]中是x坐标值,相对坐标        input_report_rel(dev, REL_Y,     data[2]);//data[2]中是y坐标值        input_report_rel(dev, REL_WHEEL, data[3]);//data[3]中是滚轮位置值
//函数原型static inline void input_report_key(struct input_dev *dev, unsigned int code, int value){input_event(dev, EV_KEY, code, !!value);}static inline void input_report_rel(struct input_dev *dev, unsigned int code, int value){    input_event(dev, EV_REL, code, value);}void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value){    unsigned long flags;    if (is_event_supported(type, dev->evbit, EV_MAX)) {        spin_lock_irqsave(&dev->event_lock, flags);        add_input_randomness(type, code, value);        input_handle_event(dev, type, code, value);        spin_unlock_irqrestore(&dev->event_lock, flags);    }}/*void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)type:事件类型,见下面code:每个type有不同的code,代表该类型中不同的事项,见下面value:对于按键事件,取值为1或0,1按下,0释放对于坐标事件,取值为坐标值*/
linux/include/linux/input.h
①type
取值有
/* * Event types */#define EV_SYN0x00#define EV_KEY0x01#define EV_REL0x02#define EV_ABS0x03#define EV_MSC0x04#define EV_SW0x05#define EV_LED0x11#define EV_SND0x12#define EV_REP0x14#define EV_FF0x15#define EV_PWR0x16#define EV_FF_STATUS0x17#define EV_MAX0x1f#define EV_CNT(EV_MAX+1)
②code取值
以下是内核预定义的事件类型EV_KEY所包含的具体按键(鼠标和键盘上的按键)

常用的用/**common**/标记
/* * Keys and buttons * * Most of the keys/buttons are modeled after USB HUT 1.12 * (see http://www.usb.org/developers/hidpage). * Abbreviations in the comments: * AC - Application Control * AL - Application Launch Button * SC - System Control *///EV_KEY#define KEY_RESERVED0#define KEY_ESC1#define KEY_12/**common**/#define KEY_23/**common**/#define KEY_34/**common**/#define KEY_45/**common**/#define KEY_56/**common**/#define KEY_67/**common**/#define KEY_78/**common**/#define KEY_89/**common**/#define KEY_910/**common**/#define KEY_011/**common**/#define KEY_MINUS12#define KEY_EQUAL13#define KEY_BACKSPACE14#define KEY_TAB15#define KEY_Q16/**common**/#define KEY_W17/**common**/#define KEY_E18/**common**/#define KEY_R19/**common**/#define KEY_T20/**common**/#define KEY_Y21/**common**/#define KEY_U22/**common**/#define KEY_I23/**common**/#define KEY_O24/**common**/#define KEY_P25/**common**/#define KEY_LEFTBRACE26#define KEY_RIGHTBRACE27#define KEY_ENTER28#define KEY_LEFTCTRL29#define KEY_A30/**common**/#define KEY_S31/**common**/#define KEY_D32/**common**/#define KEY_F33/**common**/#define KEY_G34/**common**/#define KEY_H35/**common**/#define KEY_J36/**common**/#define KEY_K37/**common**/#define KEY_L38/**common**/#define KEY_SEMICOLON39#define KEY_APOSTROPHE40#define KEY_GRAVE41#define KEY_LEFTSHIFT42#define KEY_BACKSLASH43#define KEY_Z44/**common**/#define KEY_X45/**common**/#define KEY_C46/**common**/#define KEY_V47/**common**/#define KEY_B48/**common**/#define KEY_N49/**common**/#define KEY_M50/**common**/#define KEY_COMMA51#define KEY_DOT52#define KEY_SLASH53#define KEY_RIGHTSHIFT54#define KEY_KPASTERISK55#define KEY_LEFTALT56#define KEY_SPACE57#define KEY_CAPSLOCK58#define KEY_F159#define KEY_F260#define KEY_F361#define KEY_F462#define KEY_F563#define KEY_F664#define KEY_F765#define KEY_F866#define KEY_F967#define KEY_F1068#define KEY_NUMLOCK69#define KEY_SCROLLLOCK70#define KEY_KP771#define KEY_KP872#define KEY_KP973#define KEY_KPMINUS74#define KEY_KP475#define KEY_KP576#define KEY_KP677#define KEY_KPPLUS78#define KEY_KP179#define KEY_KP280#define KEY_KP381#define KEY_KP082#define KEY_KPDOT83#define KEY_ZENKAKUHANKAKU85#define KEY_102ND86#define KEY_F1187#define KEY_F1288#define KEY_RO89#define KEY_KATAKANA90#define KEY_HIRAGANA91#define KEY_HENKAN92#define KEY_KATAKANAHIRAGANA93#define KEY_MUHENKAN94#define KEY_KPJPCOMMA95#define KEY_KPENTER96#define KEY_RIGHTCTRL97#define KEY_KPSLASH98#define KEY_SYSRQ99#define KEY_RIGHTALT100#define KEY_LINEFEED101#define KEY_HOME102#define KEY_UP103#define KEY_PAGEUP104#define KEY_LEFT105#define KEY_RIGHT106#define KEY_END107#define KEY_DOWN108#define KEY_PAGEDOWN109#define KEY_INSERT110#define KEY_DELETE111#define KEY_MACRO112#define KEY_MUTE113#define KEY_VOLUMEDOWN114#define KEY_VOLUMEUP115#define KEY_POWER116/* SC System Power Down */#define KEY_KPEQUAL117#define KEY_KPPLUSMINUS118#define KEY_PAUSE119#define KEY_SCALE120/* AL Compiz Scale (Expose) */#define KEY_KPCOMMA121#define KEY_HANGEUL122#define KEY_HANGUELKEY_HANGEUL#define KEY_HANJA123#define KEY_YEN124#define KEY_LEFTMETA125#define KEY_RIGHTMETA126#define KEY_COMPOSE127#define KEY_STOP128/* AC Stop */#define KEY_AGAIN129#define KEY_PROPS130/* AC Properties */#define KEY_UNDO131/* AC Undo */#define KEY_FRONT132#define KEY_COPY133/* AC Copy */#define KEY_OPEN134/* AC Open */#define KEY_PASTE135/* AC Paste */#define KEY_FIND136/* AC Search */#define KEY_CUT137/* AC Cut */#define KEY_HELP138/* AL Integrated Help Center */#define KEY_MENU139/* Menu (show menu) */#define KEY_CALC140/* AL Calculator */#define KEY_SETUP141#define KEY_SLEEP142/* SC System Sleep */#define KEY_WAKEUP143/* System Wake Up */#define KEY_FILE144/* AL Local Machine Browser */#define KEY_SENDFILE145#define KEY_DELETEFILE146#define KEY_XFER147#define KEY_PROG1148#define KEY_PROG2149#define KEY_WWW150/* AL Internet Browser */#define KEY_MSDOS151#define KEY_COFFEE152/* AL Terminal Lock/Screensaver */#define KEY_SCREENLOCKKEY_COFFEE#define KEY_DIRECTION153#define KEY_CYCLEWINDOWS154#define KEY_MAIL155#define KEY_BOOKMARKS156/* AC Bookmarks */#define KEY_COMPUTER157#define KEY_BACK158/* AC Back */#define KEY_FORWARD159/* AC Forward */#define KEY_CLOSECD160#define KEY_EJECTCD161#define KEY_EJECTCLOSECD162#define KEY_NEXTSONG163#define KEY_PLAYPAUSE164#define KEY_PREVIOUSSONG165#define KEY_STOPCD166#define KEY_RECORD167#define KEY_REWIND168#define KEY_PHONE169/* Media Select Telephone */#define KEY_ISO170#define KEY_CONFIG171/* AL Consumer Control Configuration */#define KEY_HOMEPAGE172/* AC Home */#define KEY_REFRESH173/* AC Refresh */#define KEY_EXIT174/* AC Exit */#define KEY_MOVE175#define KEY_EDIT176#define KEY_SCROLLUP177#define KEY_SCROLLDOWN178#define KEY_KPLEFTPAREN179#define KEY_KPRIGHTPAREN180#define KEY_NEW181/* AC New */#define KEY_REDO182/* AC Redo/Repeat */#define KEY_F13183#define KEY_F14184#define KEY_F15185#define KEY_F16186#define KEY_F17187#define KEY_F18188#define KEY_F19189#define KEY_F20190#define KEY_F21191#define KEY_F22192#define KEY_F23193#define KEY_F24194#define KEY_PLAYCD200#define KEY_PAUSECD201#define KEY_PROG3202#define KEY_PROG4203#define KEY_DASHBOARD204/* AL Dashboard */#define KEY_SUSPEND205#define KEY_CLOSE206/* AC Close */#define KEY_PLAY207#define KEY_FASTFORWARD208#define KEY_BASSBOOST209#define KEY_PRINT210/* AC Print */#define KEY_HP211#define KEY_CAMERA212#define KEY_SOUND213#define KEY_QUESTION214#define KEY_EMAIL215#define KEY_CHAT216#define KEY_SEARCH217#define KEY_CONNECT218#define KEY_FINANCE219/* AL Checkbook/Finance */#define KEY_SPORT220#define KEY_SHOP221#define KEY_ALTERASE222#define KEY_CANCEL223/* AC Cancel */#define KEY_BRIGHTNESSDOWN224#define KEY_BRIGHTNESSUP225#define KEY_MEDIA226#define KEY_SWITCHVIDEOMODE227/* Cycle between available video   outputs (Monitor/LCD/TV-out/etc) */#define KEY_KBDILLUMTOGGLE228#define KEY_KBDILLUMDOWN229#define KEY_KBDILLUMUP230#define KEY_SEND231/* AC Send */#define KEY_REPLY232/* AC Reply */#define KEY_FORWARDMAIL233/* AC Forward Msg */#define KEY_SAVE234/* AC Save */#define KEY_DOCUMENTS235#define KEY_BATTERY236#define KEY_BLUETOOTH237#define KEY_WLAN238#define KEY_UWB239#define KEY_UNKNOWN240#define KEY_VIDEO_NEXT241/* drive next video source */#define KEY_VIDEO_PREV242/* drive previous video source */#define KEY_BRIGHTNESS_CYCLE243/* brightness up, after max is min */#define KEY_BRIGHTNESS_ZERO244/* brightness off, use ambient */#define KEY_DISPLAY_OFF245/* display device to off state */#define KEY_WIMAX246/* Range 248 - 255 is reserved for special needs of AT keyboard driver */#define BTN_MISC0x100#define BTN_00x100#define BTN_10x101#define BTN_20x102#define BTN_30x103#define BTN_40x104#define BTN_50x105#define BTN_60x106#define BTN_70x107#define BTN_80x108#define BTN_90x109#define BTN_MOUSE0x110#define BTN_LEFT0x110/**common**/#define BTN_RIGHT0x111/**common**/#define BTN_MIDDLE0x112/**common**/#define BTN_SIDE0x113#define BTN_EXTRA0x114#define BTN_FORWARD0x115#define BTN_BACK0x116#define BTN_TASK0x117#define BTN_JOYSTICK0x120#define BTN_TRIGGER0x120#define BTN_THUMB0x121#define BTN_THUMB20x122#define BTN_TOP0x123#define BTN_TOP20x124#define BTN_PINKIE0x125#define BTN_BASE0x126#define BTN_BASE20x127#define BTN_BASE30x128#define BTN_BASE40x129#define BTN_BASE50x12a#define BTN_BASE60x12b#define BTN_DEAD0x12f#define BTN_GAMEPAD0x130#define BTN_A0x130#define BTN_B0x131#define BTN_C0x132#define BTN_X0x133#define BTN_Y0x134#define BTN_Z0x135#define BTN_TL0x136#define BTN_TR0x137#define BTN_TL20x138#define BTN_TR20x139#define BTN_SELECT0x13a#define BTN_START0x13b#define BTN_MODE0x13c#define BTN_THUMBL0x13d#define BTN_THUMBR0x13e#define BTN_DIGI0x140#define BTN_TOOL_PEN0x140#define BTN_TOOL_RUBBER0x141#define BTN_TOOL_BRUSH0x142#define BTN_TOOL_PENCIL0x143#define BTN_TOOL_AIRBRUSH0x144#define BTN_TOOL_FINGER0x145#define BTN_TOOL_MOUSE0x146#define BTN_TOOL_LENS0x147#define BTN_TOUCH0x14a#define BTN_STYLUS0x14b#define BTN_STYLUS20x14c#define BTN_TOOL_DOUBLETAP0x14d#define BTN_TOOL_TRIPLETAP0x14e#define BTN_TOOL_QUADTAP0x14f/* Four fingers on trackpad */#define BTN_WHEEL0x150#define BTN_GEAR_DOWN0x150#define BTN_GEAR_UP0x151#define KEY_OK0x160#define KEY_SELECT0x161#define KEY_GOTO0x162#define KEY_CLEAR0x163#define KEY_POWER20x164#define KEY_OPTION0x165#define KEY_INFO0x166/* AL OEM Features/Tips/Tutorial */#define KEY_TIME0x167#define KEY_VENDOR0x168#define KEY_ARCHIVE0x169#define KEY_PROGRAM0x16a/* Media Select Program Guide */#define KEY_CHANNEL0x16b#define KEY_FAVORITES0x16c#define KEY_EPG0x16d#define KEY_PVR0x16e/* Media Select Home */#define KEY_MHP0x16f#define KEY_LANGUAGE0x170#define KEY_TITLE0x171#define KEY_SUBTITLE0x172#define KEY_ANGLE0x173#define KEY_ZOOM0x174#define KEY_MODE0x175#define KEY_KEYBOARD0x176#define KEY_SCREEN0x177#define KEY_PC0x178/* Media Select Computer */#define KEY_TV0x179/* Media Select TV */#define KEY_TV20x17a/* Media Select Cable */#define KEY_VCR0x17b/* Media Select VCR */#define KEY_VCR20x17c/* VCR Plus */#define KEY_SAT0x17d/* Media Select Satellite */#define KEY_SAT20x17e#define KEY_CD0x17f/* Media Select CD */#define KEY_TAPE0x180/* Media Select Tape */#define KEY_RADIO0x181#define KEY_TUNER0x182/* Media Select Tuner */#define KEY_PLAYER0x183#define KEY_TEXT0x184#define KEY_DVD0x185/* Media Select DVD */#define KEY_AUX0x186#define KEY_MP30x187#define KEY_AUDIO0x188#define KEY_VIDEO0x189#define KEY_DIRECTORY0x18a#define KEY_LIST0x18b#define KEY_MEMO0x18c/* Media Select Messages */#define KEY_CALENDAR0x18d#define KEY_RED0x18e#define KEY_GREEN0x18f#define KEY_YELLOW0x190#define KEY_BLUE0x191#define KEY_CHANNELUP0x192/* Channel Increment */#define KEY_CHANNELDOWN0x193/* Channel Decrement */#define KEY_FIRST0x194#define KEY_LAST0x195/* Recall Last */#define KEY_AB0x196#define KEY_NEXT0x197#define KEY_RESTART0x198#define KEY_SLOW0x199#define KEY_SHUFFLE0x19a#define KEY_BREAK0x19b#define KEY_PREVIOUS0x19c#define KEY_DIGITS0x19d#define KEY_TEEN0x19e#define KEY_TWEN0x19f#define KEY_VIDEOPHONE0x1a0/* Media Select Video Phone */#define KEY_GAMES0x1a1/* Media Select Games */#define KEY_ZOOMIN0x1a2/* AC Zoom In */#define KEY_ZOOMOUT0x1a3/* AC Zoom Out */#define KEY_ZOOMRESET0x1a4/* AC Zoom */#define KEY_WORDPROCESSOR0x1a5/* AL Word Processor */#define KEY_EDITOR0x1a6/* AL Text Editor */#define KEY_SPREADSHEET0x1a7/* AL Spreadsheet */#define KEY_GRAPHICSEDITOR0x1a8/* AL Graphics Editor */#define KEY_PRESENTATION0x1a9/* AL Presentation App */#define KEY_DATABASE0x1aa/* AL Database App */#define KEY_NEWS0x1ab/* AL Newsreader */#define KEY_VOICEMAIL0x1ac/* AL Voicemail */#define KEY_ADDRESSBOOK0x1ad/* AL Contacts/Address Book */#define KEY_MESSENGER0x1ae/* AL Instant Messaging */#define KEY_DISPLAYTOGGLE0x1af/* Turn display (LCD) on and off */#define KEY_SPELLCHECK0x1b0   /* AL Spell Check */#define KEY_LOGOFF0x1b1   /* AL Logoff */#define KEY_DOLLAR0x1b2#define KEY_EURO0x1b3#define KEY_FRAMEBACK0x1b4/* Consumer - transport controls */#define KEY_FRAMEFORWARD0x1b5#define KEY_CONTEXT_MENU0x1b6/* GenDesc - system context menu */#define KEY_MEDIA_REPEAT0x1b7/* Consumer - transport control */#define KEY_DEL_EOL0x1c0#define KEY_DEL_EOS0x1c1#define KEY_INS_LINE0x1c2#define KEY_DEL_LINE0x1c3#define KEY_FN0x1d0#define KEY_FN_ESC0x1d1#define KEY_FN_F10x1d2#define KEY_FN_F20x1d3#define KEY_FN_F30x1d4#define KEY_FN_F40x1d5#define KEY_FN_F50x1d6#define KEY_FN_F60x1d7#define KEY_FN_F70x1d8#define KEY_FN_F80x1d9#define KEY_FN_F90x1da#define KEY_FN_F100x1db#define KEY_FN_F110x1dc#define KEY_FN_F120x1dd#define KEY_FN_10x1de#define KEY_FN_20x1df#define KEY_FN_D0x1e0#define KEY_FN_E0x1e1#define KEY_FN_F0x1e2#define KEY_FN_S0x1e3#define KEY_FN_B0x1e4#define KEY_BRL_DOT10x1f1#define KEY_BRL_DOT20x1f2#define KEY_BRL_DOT30x1f3#define KEY_BRL_DOT40x1f4#define KEY_BRL_DOT50x1f5#define KEY_BRL_DOT60x1f6#define KEY_BRL_DOT70x1f7#define KEY_BRL_DOT80x1f8#define KEY_BRL_DOT90x1f9#define KEY_BRL_DOT100x1fa#define KEY_NUMERIC_00x200/* used by phones, remote controls, */#define KEY_NUMERIC_10x201/* and other keypads */#define KEY_NUMERIC_20x202#define KEY_NUMERIC_30x203#define KEY_NUMERIC_40x204#define KEY_NUMERIC_50x205#define KEY_NUMERIC_60x206#define KEY_NUMERIC_70x207#define KEY_NUMERIC_80x208#define KEY_NUMERIC_90x209#define KEY_NUMERIC_STAR0x20a#define KEY_NUMERIC_POUND0x20b
以下是内核预定义的事件类型EV_REL的具体坐标
/* * Relative axes */#define REL_X0x00/**common**/#define REL_Y0x01/**common**/#define REL_Z0x02#define REL_RX0x03#define REL_RY0x04#define REL_RZ0x05#define REL_HWHEEL0x06#define REL_DIAL0x07#define REL_WHEEL0x08/**common**/#define REL_MISC0x09#define REL_MAX0x0f#define REL_CNT(REL_MAX+1)
以下是内核预定义的其他事件类型的的具体事项
/* * Absolute axes */#define ABS_X0x00#define ABS_Y0x01#define ABS_Z0x02#define ABS_RX0x03#define ABS_RY0x04#define ABS_RZ0x05#define ABS_THROTTLE0x06#define ABS_RUDDER0x07#define ABS_WHEEL0x08#define ABS_GAS0x09#define ABS_BRAKE0x0a#define ABS_HAT0X0x10#define ABS_HAT0Y0x11#define ABS_HAT1X0x12#define ABS_HAT1Y0x13#define ABS_HAT2X0x14#define ABS_HAT2Y0x15#define ABS_HAT3X0x16#define ABS_HAT3Y0x17#define ABS_PRESSURE0x18#define ABS_DISTANCE0x19#define ABS_TILT_X0x1a#define ABS_TILT_Y0x1b#define ABS_TOOL_WIDTH0x1c#define ABS_VOLUME0x20#define ABS_MISC0x28#define ABS_MT_TOUCH_MAJOR0x30/* Major axis of touching ellipse */#define ABS_MT_TOUCH_MINOR0x31/* Minor axis (omit if circular) */#define ABS_MT_WIDTH_MAJOR0x32/* Major axis of approaching ellipse */#define ABS_MT_WIDTH_MINOR0x33/* Minor axis (omit if circular) */#define ABS_MT_ORIENTATION0x34/* Ellipse orientation */#define ABS_MT_POSITION_X0x35/* Center X ellipse position */#define ABS_MT_POSITION_Y0x36/* Center Y ellipse position */#define ABS_MT_TOOL_TYPE0x37/* Type of touching device */#define ABS_MT_BLOB_ID0x38/* Group a set of packets as a blob */#define ABS_MT_TRACKING_ID0x39/* Unique ID of initiated contact */#define ABS_MAX0x3f#define ABS_CNT(ABS_MAX+1)/* * Switch events */#define SW_LID0x00  /* set = lid shut */#define SW_TABLET_MODE0x01  /* set = tablet mode */#define SW_HEADPHONE_INSERT0x02  /* set = inserted */#define SW_RFKILL_ALL0x03  /* rfkill master switch, type "any" set = radio enabled */#define SW_RADIOSW_RFKILL_ALL/* deprecated */#define SW_MICROPHONE_INSERT0x04  /* set = inserted */#define SW_DOCK0x05  /* set = plugged into dock */#define SW_LINEOUT_INSERT0x06  /* set = inserted */#define SW_JACK_PHYSICAL_INSERT 0x07  /* set = mechanical switch set */#define SW_VIDEOOUT_INSERT0x08  /* set = inserted */#define SW_MAX0x0f#define SW_CNT(SW_MAX+1)/* * Misc events */#define MSC_SERIAL0x00#define MSC_PULSELED0x01#define MSC_GESTURE0x02#define MSC_RAW0x03#define MSC_SCAN0x04#define MSC_MAX0x07#define MSC_CNT(MSC_MAX+1)/* * LEDs */#define LED_NUML0x00#define LED_CAPSL0x01#define LED_SCROLLL0x02#define LED_COMPOSE0x03#define LED_KANA0x04#define LED_SLEEP0x05#define LED_SUSPEND0x06#define LED_MUTE0x07#define LED_MISC0x08#define LED_MAIL0x09#define LED_CHARGING0x0a#define LED_MAX0x0f#define LED_CNT(LED_MAX+1)/* * Autorepeat values */#define REP_DELAY0x00#define REP_PERIOD0x01#define REP_MAX0x01/* * Sounds */#define SND_CLICK0x00#define SND_BELL0x01#define SND_TONE0x02#define SND_MAX0x07#define SND_CNT(SND_MAX+1)

***************************************************************************************************************************************************************************************
下面是一个input模型驱动的例子代码,linux2.6.32.2 ,insmod之后会在/dev/input下出现event1(event0是触摸屏)设备文件. 如果在板子上打开一个便签或终端之类的可以输入的程序,则每隔1秒会自动输入一个数字,各是1 2 3 4 5 6 7 8,
可见只要是input子系统写的驱动,自动会跟上层应用程序对接了。大概原理是上层应用会定时读取/dev/input/eventx文件(所有的event文件)看一下是否有鼠标按下信息,键盘按键信息,屏幕触摸信息等。有读到的话,就显示出来。当然读取event文件是要按照input文件的各是来读的,后面附有一个测试读的例子。
//input_test.c#include <linux/module.h>#include <linux/init.h>#include <asm/io.h>#include <asm/uaccess.h>#include <linux/fs.h>#include <linux/timer.h>#include <linux/input.h>#include <linux/delay.h>/*! Input device structure. */static struct input_dev *test_dev = NULL;static struct timer_list report_timer;static unsigned short t_interval = HZ;//delay 1 s#define  KEYCODES 8static u16 test_keycodes[KEYCODES] = {KEY_1,KEY_2,KEY_3, KEY_4,KEY_5,KEY_6,KEY_7, KEY_8};//timer的中断服务程序static void handle_timer(unsigned long data){       static int i=0;       input_event(test_dev, EV_KEY, test_keycodes[i/2], ((i%2)==0)?1:0);       if(++i >=2*KEYCODES) i=0;       report_timer.expires = jiffies + t_interval;       add_timer(&report_timer);}static int test_open(struct input_dev *dev){return 0;}static void test_close(struct input_dev *dev){;}static int init_inputdev(){       int i;       //申请input_dev设备       test_dev = input_allocate_device();       if (!test_dev) {              printk(KERN_ERR                     "test_dev: not enough memory for input device/n");              return -ENOMEM;       }       //初始化input_dev结构体       test_dev->keycode = &test_keycodes;       test_dev->keycodesize = sizeof(unsigned char);       test_dev->keycodemax = KEYCODES;       test_dev->name = "input_song";       test_dev->id.bustype = BUS_HOST;       test_dev->open = test_open;       test_dev->close = test_close;       set_bit(EV_KEY, test_dev->evbit);      //设定其支持的事件码       for (i = 0; i < KEYCODES; i++)              set_bit(test_keycodes[i], test_dev->keybit);      //向系统注册input_dev设备        input_register_device(test_dev);       /* Initialize the polling timer */       init_timer(&report_timer);       report_timer.expires = jiffies + t_interval;       report_timer.function = handle_timer;       add_timer(&report_timer);       return 0;}static int __init test_init(void){         if(init_inputdev()){              printk(KERN_INFO "Cannot insmod ser_kpp/n");              return 1;       }else{              printk(KERN_INFO "input drivers init/n");              return 0;       }}static void __exit test_cleanup(void){       del_timer(&report_timer);       input_unregister_device(test_dev);       if (test_dev)              input_free_device(test_dev);}module_init(test_init);module_exit(test_cleanup);MODULE_AUTHOR("song");MODULE_DESCRIPTION("input test Driver");MODULE_LICENSE("GPL");
makefile如下
ifneq ($(KERNELRELEASE),)  obj-m :=  input_test.oelse  KDIR := /opt/FriendlyARM/mini2440/linux-2.6.32.2  #KDIR := /lib/modules/`uname -r`/buildall:  make -C $(KDIR) M=$(PWD) modules  clean:  rm -f *.ko *.o *.mod.o *.mod.c *.symvers  endif  

一个测试读event设备的例子。evtest.c
/* * $Id: evtest.c,v 1.23 2005/02/06 13:51:42 vojtech Exp $ * *  Copyright (c) 1999-2000 Vojtech Pavlik * *  Event device test program *//* * 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 *  * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <vojtech@ucw.cz>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic */#include <stdint.h>#include <linux/input.h>#include <string.h>#include <fcntl.h>#include <unistd.h>#include <stdio.h>#ifndef EV_SYN#define EV_SYN 0#endifchar *events[EV_MAX + 1] = {[0 ... EV_MAX] = NULL,[EV_SYN] = "Sync",[EV_KEY] = "Key",[EV_REL] = "Relative",[EV_ABS] = "Absolute",[EV_MSC] = "Misc",[EV_LED] = "LED",[EV_SND] = "Sound",[EV_REP] = "Repeat",[EV_FF] = "ForceFeedback",[EV_PWR] = "Power",[EV_FF_STATUS] = "ForceFeedbackStatus",};char *keys[KEY_MAX + 1] = {[0 ... KEY_MAX] = NULL,[KEY_RESERVED] = "Reserved",[KEY_ESC] = "Esc",[KEY_1] = "1",[KEY_2] = "2",[KEY_3] = "3",[KEY_4] = "4",[KEY_5] = "5",[KEY_6] = "6",[KEY_7] = "7",[KEY_8] = "8",[KEY_9] = "9",[KEY_0] = "0",[KEY_MINUS] = "Minus",[KEY_EQUAL] = "Equal",[KEY_BACKSPACE] = "Backspace",[KEY_TAB] = "Tab",[KEY_Q] = "Q",[KEY_W] = "W",[KEY_E] = "E",[KEY_R] = "R",[KEY_T] = "T",[KEY_Y] = "Y",[KEY_U] = "U",[KEY_I] = "I",[KEY_O] = "O",[KEY_P] = "P",[KEY_LEFTBRACE] = "LeftBrace",[KEY_RIGHTBRACE] = "RightBrace",[KEY_ENTER] = "Enter",[KEY_LEFTCTRL] = "LeftControl",[KEY_A] = "A",[KEY_S] = "S",[KEY_D] = "D",[KEY_F] = "F",[KEY_G] = "G",[KEY_H] = "H",[KEY_J] = "J",[KEY_K] = "K",[KEY_L] = "L",[KEY_SEMICOLON] = "Semicolon",[KEY_APOSTROPHE] = "Apostrophe",[KEY_GRAVE] = "Grave",[KEY_LEFTSHIFT] = "LeftShift",[KEY_BACKSLASH] = "BackSlash",[KEY_Z] = "Z",[KEY_X] = "X",[KEY_C] = "C",[KEY_V] = "V",[KEY_B] = "B",[KEY_N] = "N",[KEY_M] = "M",[KEY_COMMA] = "Comma",[KEY_DOT] = "Dot",[KEY_SLASH] = "Slash",[KEY_RIGHTSHIFT] = "RightShift",[KEY_KPASTERISK] = "KPAsterisk",[KEY_LEFTALT] = "LeftAlt",[KEY_SPACE] = "Space",[KEY_CAPSLOCK] = "CapsLock",[KEY_F1] = "F1",[KEY_F2] = "F2",[KEY_F3] = "F3",[KEY_F4] = "F4",[KEY_F5] = "F5",[KEY_F6] = "F6",[KEY_F7] = "F7",[KEY_F8] = "F8",[KEY_F9] = "F9",[KEY_F10] = "F10",[KEY_NUMLOCK] = "NumLock",[KEY_SCROLLLOCK] = "ScrollLock",[KEY_KP7] = "KP7",[KEY_KP8] = "KP8",[KEY_KP9] = "KP9",[KEY_KPMINUS] = "KPMinus",[KEY_KP4] = "KP4",[KEY_KP5] = "KP5",[KEY_KP6] = "KP6",[KEY_KPPLUS] = "KPPlus",[KEY_KP1] = "KP1",[KEY_KP2] = "KP2",[KEY_KP3] = "KP3",[KEY_KP0] = "KP0",[KEY_KPDOT] = "KPDot",[KEY_ZENKAKUHANKAKU] = "Zenkaku/Hankaku", [KEY_102ND] = "102nd",[KEY_F11] = "F11",[KEY_F12] = "F12",[KEY_RO] = "RO",[KEY_KATAKANA] = "Katakana",[KEY_HIRAGANA] = "HIRAGANA",[KEY_HENKAN] = "Henkan",[KEY_KATAKANAHIRAGANA] = "Katakana/Hiragana", [KEY_MUHENKAN] = "Muhenkan",[KEY_KPJPCOMMA] = "KPJpComma",[KEY_KPENTER] = "KPEnter",[KEY_RIGHTCTRL] = "RightCtrl",[KEY_KPSLASH] = "KPSlash",[KEY_SYSRQ] = "SysRq",[KEY_RIGHTALT] = "RightAlt",[KEY_LINEFEED] = "LineFeed",[KEY_HOME] = "Home",[KEY_UP] = "Up",[KEY_PAGEUP] = "PageUp",[KEY_LEFT] = "Left",[KEY_RIGHT] = "Right",[KEY_END] = "End",[KEY_DOWN] = "Down",[KEY_PAGEDOWN] = "PageDown",[KEY_INSERT] = "Insert",[KEY_DELETE] = "Delete",[KEY_MACRO] = "Macro",[KEY_MUTE] = "Mute",[KEY_VOLUMEDOWN] = "VolumeDown",[KEY_VOLUMEUP] = "VolumeUp",[KEY_POWER] = "Power",[KEY_KPEQUAL] = "KPEqual",[KEY_KPPLUSMINUS] = "KPPlusMinus",[KEY_PAUSE] = "Pause",[KEY_KPCOMMA] = "KPComma",[KEY_HANGUEL] = "Hanguel",[KEY_HANJA] = "Hanja",[KEY_YEN] = "Yen",[KEY_LEFTMETA] = "LeftMeta",[KEY_RIGHTMETA] = "RightMeta",[KEY_COMPOSE] = "Compose",[KEY_STOP] = "Stop",[KEY_AGAIN] = "Again",[KEY_PROPS] = "Props",[KEY_UNDO] = "Undo",[KEY_FRONT] = "Front",[KEY_COPY] = "Copy",[KEY_OPEN] = "Open",[KEY_PASTE] = "Paste",[KEY_FIND] = "Find",[KEY_CUT] = "Cut",[KEY_HELP] = "Help",[KEY_MENU] = "Menu",[KEY_CALC] = "Calc",[KEY_SETUP] = "Setup",[KEY_SLEEP] = "Sleep",[KEY_WAKEUP] = "WakeUp",[KEY_FILE] = "File",[KEY_SENDFILE] = "SendFile",[KEY_DELETEFILE] = "DeleteFile",[KEY_XFER] = "X-fer",[KEY_PROG1] = "Prog1",[KEY_PROG2] = "Prog2",[KEY_WWW] = "WWW",[KEY_MSDOS] = "MSDOS",[KEY_COFFEE] = "Coffee",[KEY_DIRECTION] = "Direction",[KEY_CYCLEWINDOWS] = "CycleWindows",[KEY_MAIL] = "Mail",[KEY_BOOKMARKS] = "Bookmarks",[KEY_COMPUTER] = "Computer",[KEY_BACK] = "Back",[KEY_FORWARD] = "Forward",[KEY_CLOSECD] = "CloseCD",[KEY_EJECTCD] = "EjectCD",[KEY_EJECTCLOSECD] = "EjectCloseCD",[KEY_NEXTSONG] = "NextSong",[KEY_PLAYPAUSE] = "PlayPause",[KEY_PREVIOUSSONG] = "PreviousSong",[KEY_STOPCD] = "StopCD",[KEY_RECORD] = "Record",[KEY_REWIND] = "Rewind",[KEY_PHONE] = "Phone",[KEY_ISO] = "ISOKey",[KEY_CONFIG] = "Config",[KEY_HOMEPAGE] = "HomePage",[KEY_REFRESH] = "Refresh",[KEY_EXIT] = "Exit",[KEY_MOVE] = "Move",[KEY_EDIT] = "Edit",[KEY_SCROLLUP] = "ScrollUp",[KEY_SCROLLDOWN] = "ScrollDown",[KEY_KPLEFTPAREN] = "KPLeftParenthesis",[KEY_KPRIGHTPAREN] = "KPRightParenthesis", [KEY_F13] = "F13",[KEY_F14] = "F14",[KEY_F15] = "F15",[KEY_F16] = "F16",[KEY_F17] = "F17",[KEY_F18] = "F18",[KEY_F19] = "F19",[KEY_F20] = "F20",[KEY_F21] = "F21",[KEY_F22] = "F22",[KEY_F23] = "F23",[KEY_F24] = "F24",[KEY_PLAYCD] = "PlayCD",[KEY_PAUSECD] = "PauseCD",[KEY_PROG3] = "Prog3",[KEY_PROG4] = "Prog4",[KEY_SUSPEND] = "Suspend",[KEY_CLOSE] = "Close",[KEY_PLAY] = "Play",[KEY_FASTFORWARD] = "Fast Forward",[KEY_BASSBOOST] = "Bass Boost",[KEY_PRINT] = "Print",[KEY_HP] = "HP",[KEY_CAMERA] = "Camera",[KEY_SOUND] = "Sound",[KEY_QUESTION] = "Question",[KEY_EMAIL] = "Email",[KEY_CHAT] = "Chat",[KEY_SEARCH] = "Search",[KEY_CONNECT] = "Connect",[KEY_FINANCE] = "Finance",[KEY_SPORT] = "Sport",[KEY_SHOP] = "Shop",[KEY_ALTERASE] = "Alternate Erase",[KEY_CANCEL] = "Cancel",[KEY_BRIGHTNESSDOWN] = "Brightness down", [KEY_BRIGHTNESSUP] = "Brightness up",[KEY_MEDIA] = "Media",[KEY_UNKNOWN] = "Unknown",[BTN_0] = "Btn0",[BTN_1] = "Btn1",[BTN_2] = "Btn2",[BTN_3] = "Btn3",[BTN_4] = "Btn4",[BTN_5] = "Btn5",[BTN_6] = "Btn6",[BTN_7] = "Btn7",[BTN_8] = "Btn8",[BTN_9] = "Btn9",[BTN_LEFT] = "LeftBtn",[BTN_RIGHT] = "RightBtn",[BTN_MIDDLE] = "MiddleBtn",[BTN_SIDE] = "SideBtn",[BTN_EXTRA] = "ExtraBtn",[BTN_FORWARD] = "ForwardBtn",[BTN_BACK] = "BackBtn",[BTN_TASK] = "TaskBtn",[BTN_TRIGGER] = "Trigger",[BTN_THUMB] = "ThumbBtn",[BTN_THUMB2] = "ThumbBtn2",[BTN_TOP] = "TopBtn",[BTN_TOP2] = "TopBtn2",[BTN_PINKIE] = "PinkieBtn",[BTN_BASE] = "BaseBtn",[BTN_BASE2] = "BaseBtn2",[BTN_BASE3] = "BaseBtn3",[BTN_BASE4] = "BaseBtn4",[BTN_BASE5] = "BaseBtn5",[BTN_BASE6] = "BaseBtn6",[BTN_DEAD] = "BtnDead",[BTN_A] = "BtnA",[BTN_B] = "BtnB",[BTN_C] = "BtnC",[BTN_X] = "BtnX",[BTN_Y] = "BtnY",[BTN_Z] = "BtnZ",[BTN_TL] = "BtnTL",[BTN_TR] = "BtnTR",[BTN_TL2] = "BtnTL2",[BTN_TR2] = "BtnTR2",[BTN_SELECT] = "BtnSelect",[BTN_START] = "BtnStart",[BTN_MODE] = "BtnMode",[BTN_THUMBL] = "BtnThumbL",[BTN_THUMBR] = "BtnThumbR",[BTN_TOOL_PEN] = "ToolPen",[BTN_TOOL_RUBBER] = "ToolRubber",[BTN_TOOL_BRUSH] = "ToolBrush",[BTN_TOOL_PENCIL] = "ToolPencil",[BTN_TOOL_AIRBRUSH] = "ToolAirbrush",[BTN_TOOL_FINGER] = "ToolFinger",[BTN_TOOL_MOUSE] = "ToolMouse",[BTN_TOOL_LENS] = "ToolLens",[BTN_TOUCH] = "Touch",[BTN_STYLUS] = "Stylus",[BTN_STYLUS2] = "Stylus2",[BTN_TOOL_DOUBLETAP] = "Tool Doubletap",[BTN_TOOL_TRIPLETAP] = "Tool Tripletap", [BTN_GEAR_DOWN] = "WheelBtn",[BTN_GEAR_UP] = "Gear up",[KEY_OK] = "Ok",[KEY_SELECT] = "Select",[KEY_GOTO] = "Goto",[KEY_CLEAR] = "Clear",[KEY_POWER2] = "Power2",[KEY_OPTION] = "Option",[KEY_INFO] = "Info",[KEY_TIME] = "Time",[KEY_VENDOR] = "Vendor",[KEY_ARCHIVE] = "Archive",[KEY_PROGRAM] = "Program",[KEY_CHANNEL] = "Channel",[KEY_FAVORITES] = "Favorites",[KEY_EPG] = "EPG",[KEY_PVR] = "PVR",[KEY_MHP] = "MHP",[KEY_LANGUAGE] = "Language",[KEY_TITLE] = "Title",[KEY_SUBTITLE] = "Subtitle",[KEY_ANGLE] = "Angle",[KEY_ZOOM] = "Zoom",[KEY_MODE] = "Mode",[KEY_KEYBOARD] = "Keyboard",[KEY_SCREEN] = "Screen",[KEY_PC] = "PC",[KEY_TV] = "TV",[KEY_TV2] = "TV2",[KEY_VCR] = "VCR",[KEY_VCR2] = "VCR2",[KEY_SAT] = "Sat",[KEY_SAT2] = "Sat2",[KEY_CD] = "CD",[KEY_TAPE] = "Tape",[KEY_RADIO] = "Radio",[KEY_TUNER] = "Tuner",[KEY_PLAYER] = "Player",[KEY_TEXT] = "Text",[KEY_DVD] = "DVD",[KEY_AUX] = "Aux",[KEY_MP3] = "MP3",[KEY_AUDIO] = "Audio",[KEY_VIDEO] = "Video",[KEY_DIRECTORY] = "Directory",[KEY_LIST] = "List",[KEY_MEMO] = "Memo",[KEY_CALENDAR] = "Calendar",[KEY_RED] = "Red",[KEY_GREEN] = "Green",[KEY_YELLOW] = "Yellow",[KEY_BLUE] = "Blue",[KEY_CHANNELUP] = "ChannelUp",[KEY_CHANNELDOWN] = "ChannelDown",[KEY_FIRST] = "First",[KEY_LAST] = "Last",[KEY_AB] = "AB",[KEY_NEXT] = "Next",[KEY_RESTART] = "Restart",[KEY_SLOW] = "Slow",[KEY_SHUFFLE] = "Shuffle",[KEY_BREAK] = "Break",[KEY_PREVIOUS] = "Previous",[KEY_DIGITS] = "Digits",[KEY_TEEN] = "TEEN",[KEY_TWEN] = "TWEN",[KEY_DEL_EOL] = "Delete EOL",[KEY_DEL_EOS] = "Delete EOS",[KEY_INS_LINE] = "Insert line",[KEY_DEL_LINE] = "Delete line",};char *absval[5] = { "Value", "Min  ", "Max  ", "Fuzz ", "Flat " };char *relatives[REL_MAX + 1] = {[0 ... REL_MAX] = NULL,[REL_X] = "X",[REL_Y] = "Y",[REL_Z] = "Z",[REL_HWHEEL] = "HWheel",[REL_DIAL] = "Dial",[REL_WHEEL] = "Wheel", [REL_MISC] = "Misc",};char *absolutes[ABS_MAX + 1] = {[0 ... ABS_MAX] = NULL,[ABS_X] = "X",[ABS_Y] = "Y",[ABS_Z] = "Z",[ABS_RX] = "Rx",[ABS_RY] = "Ry",[ABS_RZ] = "Rz",[ABS_THROTTLE] = "Throttle",[ABS_RUDDER] = "Rudder",[ABS_WHEEL] = "Wheel",[ABS_GAS] = "Gas",[ABS_BRAKE] = "Brake",[ABS_HAT0X] = "Hat0X",[ABS_HAT0Y] = "Hat0Y",[ABS_HAT1X] = "Hat1X",[ABS_HAT1Y] = "Hat1Y",[ABS_HAT2X] = "Hat2X",[ABS_HAT2Y] = "Hat2Y",[ABS_HAT3X] = "Hat3X",[ABS_HAT3Y] = "Hat 3Y",[ABS_PRESSURE] = "Pressure",[ABS_DISTANCE] = "Distance",[ABS_TILT_X] = "XTilt",[ABS_TILT_Y] = "YTilt",[ABS_TOOL_WIDTH] = "Tool Width",[ABS_VOLUME] = "Volume",[ABS_MISC] = "Misc",};char *misc[MSC_MAX + 1] = {[ 0 ... MSC_MAX] = NULL,[MSC_SERIAL] = "Serial",[MSC_PULSELED] = "Pulseled",[MSC_GESTURE] = "Gesture",[MSC_RAW] = "RawData",[MSC_SCAN] = "ScanCode",};char *leds[LED_MAX + 1] = {[0 ... LED_MAX] = NULL,[LED_NUML] = "NumLock",[LED_CAPSL] = "CapsLock", [LED_SCROLLL] = "ScrollLock",[LED_COMPOSE] = "Compose",[LED_KANA] = "Kana",[LED_SLEEP] = "Sleep", [LED_SUSPEND] = "Suspend",[LED_MUTE] = "Mute",[LED_MISC] = "Misc",};char *repeats[REP_MAX + 1] = {[0 ... REP_MAX] = NULL,[REP_DELAY] = "Delay",[REP_PERIOD] = "Period"};char *sounds[SND_MAX + 1] = {[0 ... SND_MAX] = NULL,[SND_CLICK] = "Click",[SND_BELL] = "Bell",[SND_TONE] = "Tone"};char **names[EV_MAX + 1] = {[0 ... EV_MAX] = NULL,[EV_SYN] = events,[EV_KEY] = keys,[EV_REL] = relatives,[EV_ABS] = absolutes,[EV_MSC] = misc,[EV_LED] = leds,[EV_SND] = sounds,[EV_REP] = repeats,};#define BITS_PER_LONG (sizeof(long) * 8)#define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1)#define OFF(x)  ((x)%BITS_PER_LONG)#define BIT(x)  (1UL<<OFF(x))#define LONG(x) ((x)/BITS_PER_LONG)#define test_bit(bit, array)((array[LONG(bit)] >> OFF(bit)) & 1)int main (int argc, char **argv){int fd, rd, i, j, k;struct input_event ev[64];int version;unsigned short id[4];unsigned long bit[EV_MAX][NBITS(KEY_MAX)];char name[256] = "Unknown";int abs[5];if (argc < 2) {printf("Usage: evtest /dev/input/eventX\n");printf("Where X = input device number\n");return 1;}if ((fd = open(argv[argc - 1], O_RDONLY)) < 0) {perror("evtest");return 1;}if (ioctl(fd, EVIOCGVERSION, &version)) {perror("evtest: can't get version");return 1;}printf("Input driver version is %d.%d.%d\n",version >> 16, (version >> 8) & 0xff, version & 0xff);ioctl(fd, EVIOCGID, id);printf("Input device ID: bus 0x%x vendor 0x%x product 0x%x version 0x%x\n",id[ID_BUS], id[ID_VENDOR], id[ID_PRODUCT], id[ID_VERSION]);ioctl(fd, EVIOCGNAME(sizeof(name)), name);printf("Input device name: \"%s\"\n", name);memset(bit, 0, sizeof(bit));ioctl(fd, EVIOCGBIT(0, EV_MAX), bit[0]);printf("Supported events:\n");for (i = 0; i < EV_MAX; i++)if (test_bit(i, bit[0])) {printf("  Event type %d (%s)\n", i, events[i] ? events[i] : "?");if (!i) continue;ioctl(fd, EVIOCGBIT(i, KEY_MAX), bit[i]);for (j = 0; j < KEY_MAX; j++) if (test_bit(j, bit[i])) {printf("    Event code %d (%s)\n", j, names[i] ? (names[i][j] ? names[i][j] : "?") : "?");if (i == EV_ABS) {ioctl(fd, EVIOCGABS(j), abs);for (k = 0; k < 5; k++)if ((k < 3) || abs[k])printf("      %s %6d\n", absval[k], abs[k]);}}}printf("Testing ... (interrupt to exit)\n");while (1) {rd = read(fd, ev, sizeof(struct input_event) * 64);if (rd < (int) sizeof(struct input_event)) {printf("yyy\n");perror("\nevtest: error reading");return 1;}for (i = 0; i < rd / sizeof(struct input_event); i++)if (ev[i].type == EV_SYN) {printf("Event: time %ld.%06ld, -------------- %s ------------\n",ev[i].time.tv_sec, ev[i].time.tv_usec, ev[i].code ? "Config Sync" : "Report Sync" );} else if (ev[i].type == EV_MSC && (ev[i].code == MSC_RAW || ev[i].code == MSC_SCAN)) {printf("Event: time %ld.%06ld, type %d (%s), code %d (%s), value %02x\n",ev[i].time.tv_sec, ev[i].time.tv_usec, ev[i].type,events[ev[i].type] ? events[ev[i].type] : "?",ev[i].code,names[ev[i].type] ? (names[ev[i].type][ev[i].code] ? names[ev[i].type][ev[i].code] : "?") : "?",ev[i].value);} else {printf("Event: time %ld.%06ld, type %d (%s), code %d (%s), value %d\n",ev[i].time.tv_sec, ev[i].time.tv_usec, ev[i].type,events[ev[i].type] ? events[ev[i].type] : "?",ev[i].code,names[ev[i].type] ? (names[ev[i].type][ev[i].code] ? names[ev[i].type][ev[i].code] : "?") : "?",ev[i].value);}}}
用evtest读取刚刚的event1
[root@FriendlyARM plg]# ./evtest /dev/input/event1Input driver version is 1.0.0Input device ID: bus 0x19 vendor 0x0 product 0x0 version 0x0Input device name: "input_song"Supported events://支持的事件,有两种  Event type 0 (Sync)  Event type 1 (Key)    Event code 2 (1)//code 2,表示按键1    Event code 3 (2)    Event code 4 (3)    Event code 5 (4)    Event code 6 (5)    Event code 7 (6)    Event code 8 (7)    Event code 9 (8)Testing ... (interrupt to exit)Event: time -45878002.839866, type 1 (Key), code 9 (8), value 1//检测到事件,8按下Event: time -45878001.839865, type 1 (Key), code 9 (8), value 0//检测到事件,8弹起Event: time -45878000.839858, type 1 (Key), code 2 (1), value 1Event: time -45877999.839865, type 1 (Key), code 2 (1), value 0Event: time -45877998.839858, type 1 (Key), code 3 (2), value 1Event: time -45877997.839865, type 1 (Key), code 3 (2), value 0Event: time -45877996.839864, type 1 (Key), code 4 (3), value 1Event: time -45877995.839862, type 1 (Key), code 4 (3), value 0Event: time -45877994.839856, type 1 (Key), code 5 (4), value 1Event: time -45877993.839858, type 1 (Key), code 5 (4), value 0Event: time -45877992.839870, type 1 (Key), code 6 (5), value 1Event: time -45877991.839859, type 1 (Key), code 6 (5), value 0Event: time -45877990.839861, type 1 (Key), code 7 (6), value 1Event: time -45877989.839863, type 1 (Key), code 7 (6), value 0Event: time -45877988.839858, type 1 (Key), code 8 (7), value 1



原创粉丝点击