分享

在 Android 通过 get

 dwlinux_gs 2014-08-22

Android 本身有一个genevnet 和 sendevent 工具用来从内核获取event事件和向内核发送event事件,具体可以参考  Android 下收发input事件的工具 getevent 和 sendevent

o get_evnet 是一个可以获得注册成input设备上报event的调试工具。

o usage: get_event /dev/input/eventX, X is 0, 1, 2,3,  4, 5,6

o 附件为其源代码, 可以采用静态编译,然后通过adb push进 手机, 进行调试。

arm-linux-gcc -static get_event.c -o get_evnet

-> 获得 红外gp2ap 的上报 event

    shell@android:/ # get_event /dev/input/event0
    Input driver version is 1.0.1
    Input device ID: bus 0x0 vendor 0x0 product 0x0 version 0x0
    Input device name: gp2ap
    Supported events:
      Event type 0 (Sync)
      Event type 3 (Absolute)
        Event code 25 (Distance)
          Value     -1
          Min        0
          Max        1
        Event code 40 (Misc)
          Value      0
          Min        0
          Max    65535

    Testing ... (interrupt to exit)

-> 获得touchscreen 的上报 event

130|shell@android:/ # get_event /dev/input/event1
Input driver version is 1.0.1
Input device ID: bus 0x18 vendor 0x0 product 0x1 version 0x1005
Input device name: mx_ts
Supported events:
  Event type 0 (Sync)
  Event type 1 (Key)
    Event code 102 (Home)
    Event code 103 (Up)
    Event code 105 (Left)
    Event code 106 (Right)
    Event code 107 (End)
    Event code 108 (Down)
    Event code 129 (Again)
    Event code 158 (Back)
    Event code 325 (ToolFinger)
    Event code 330 (Touch)
  Event type 3 (Absolute)
    Event code 0 (X)
      Value      0
      Min        0
      Max     1334
    Event code 1 (Y)
      Value      0
      Min        0
      Max     2214
    Event code 24 (Pressure)
      Value      0
      Min        0
      Max      255
    Event code 47 (?)
      Value      0
      Min        0
      Max        9
    Event code 48 (ABS_MT_TOUCH_MAJOR)
      Value      0
      Min        0
      Max       15
    Event code 53 (ABS_MT_POSITION_X)
      Value      0
      Min        0
      Max     1334
    Event code 54 (ABS_MT_POSITION_Y)
      Value      0
      Min        0
      Max     2214
    Event code 57 (ABS_MT_TRACKING_ID)
      Value      0
      Min        0
      Max    65535
    Event code 58 (ABS_MT_PRESSURE)
      Value      0
      Min        0
      Max      255
Testing ... (interrupt to exit)
Event: time 1325376099.794968, type 3 (Absolute), code 57 (ABS_MT_TRACKING_ID), value 0
Event: time 1325376099.794990, type 1 (Key), code 330 (Touch), value 1
Event: time 1325376099.794999, type 1 (Key), code 325 (ToolFinger), value 1
Event: time 1325376099.795009, type 3 (Absolute), code 53 (ABS_MT_POSITION_X), value 738
Event: time 1325376099.795018, type 3 (Absolute), code 54 (ABS_MT_POSITION_Y), value 1487
Event: time 1325376099.795027, type 3 (Absolute), code 58 (ABS_MT_PRESSURE), value 84
Event: time 1325376099.795036, type 3 (Absolute), code 48 (ABS_MT_TOUCH_MAJOR), value 4
Event: time 1325376099.795090, -------------- Report Sync ------------
Event: time 1325376099.903355, type 3 (Absolute), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1325376099.903432, -------------- Report Sync ------------

-> 获得物理按键key 的上报 event

130|shell@android:/ # get_event /dev/input/event2
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: gpio-keys
Supported events:
  Event type 0 (Sync)
  Event type 1 (Key)
    Event code 102 (Home)
    Event code 114 (VolumeDown)
    Event code 115 (VolumeUp)
    Event code 116 (Power)
Testing ... (interrupt to exit)

Event: time 1325376161.600192, type 1 (Key), code 115 (VolumeUp), value 1
Event: time 1325376161.600214, -------------- Report Sync ------------
Event: time 1325376161.794925, type 1 (Key), code 115 (VolumeUp), value 0
Event: time 1325376161.794933, -------------- Report Sync ------------
Event: time 1325376162.645193, type 1 (Key), code 102 (Home), value 1
Event: time 1325376162.645215, -------------- Report Sync ------------
Event: time 1325376162.794977, type 1 (Key), code 102 (Home), value 0
Event: time 1325376162.794995, -------------- Report Sync ------------
Event: time 1325376164.970050, type 1 (Key), code 114 (VolumeDown), value 1
Event: time 1325376164.970072, -------------- Report Sync ------------
Event: time 1325376164.975038, type 1 (Key), code 114 (VolumeDown), value 0
Event: time 1325376164.975058, -------------- Report Sync ------------
Event: time 1325376165.000110, type 1 (Key), code 114 (VolumeDown), value 1
Event: time 1325376165.000135, -------------- Report Sync ------------
Event: time 1325376165.005173, type 1 (Key), code 114 (VolumeDown), value 0
Event: time 1325376165.005190, -------------- Report Sync ------------
Event: time 1325376166.700714, type 1 (Key), code 116 (Power), value 1
Event: time 1325376166.700737, -------------- Report Sync ------------
Event: time 1325376167.005092, type 1 (Key), code 116 (Power), value 0
Event: time 1325376167.005110, -------------- Report Sync ------------

-> 获得headset 的上报 event

130|shell@android:/ # get_event /dev/input/event3
Input driver version is 1.0.1
Input device ID: bus 0x0 vendor 0x0 product 0x0 version 0x0
Input device name: Headset
Supported events:
  Event type 0 (Sync)
  Event type 1 (Key)
    Event code 226 (Media)
    Event code 259 (Btn3)
    Event code 260 (Btn4)
    Event code 261 (Btn5)
Testing ... (interrupt to exit)

Event: time 1325376242.312919, type 1 (Key), code 261 (Btn5), value 1
Event: time 1325376242.312944, -------------- Report Sync ------------
Event: time 1325376242.463815, type 1 (Key), code 261 (Btn5), value 0
Event: time 1325376242.463837, -------------- Report Sync ------------
Event: time 1325376243.583124, type 1 (Key), code 261 (Btn5), value 1
Event: time 1325376243.583150, -------------- Report Sync ------------
Event: time 1325376243.690958, type 1 (Key), code 261 (Btn5), value 0
Event: time 1325376243.690979, -------------- Report Sync ------------
Event: time 1325376245.200309, type 1 (Key), code 226 (Media), value 1
Event: time 1325376245.200334, -------------- Report Sync ------------
Event: time 1325376245.302111, type 1 (Key), code 226 (Media), value 0

Event: time 1325376245.302145, -------------- Report Sync -----------

get_event.c 源码, 具体可调整里面对应的key-value 值进行调试

  1. #include <stdint.h>  
  2. #include <linux/input.h>  
  3. #include <string.h>  
  4. #include <fcntl.h>  
  5. #include <unistd.h>  
  6. #include <stdio.h>  
  7. #ifndef EV_SYN  
  8. #define EV_SYN 0  
  9. #endif  
  10. char *events[EV_MAX + 1] = {  
  11.     [0 ... EV_MAX] = NULL,  
  12.     [EV_SYN] = "Sync",            [EV_KEY] = "Key",  
  13.     [EV_REL] = "Relative",            [EV_ABS] = "Absolute",  
  14.     [EV_MSC] = "Misc",            [EV_LED] = "LED",  
  15.     [EV_SND] = "Sound",            [EV_REP] = "Repeat",  
  16.     [EV_FF] = "ForceFeedback",        [EV_PWR] = "Power",  
  17.     [EV_FF_STATUS] = "ForceFeedbackStatus",  
  18. };  
  19.   
  20. char *keys[KEY_MAX + 1] = {  
  21.     [0 ... KEY_MAX] = NULL,  
  22.     [KEY_RESERVED] = "Reserved",        [KEY_ESC] = "Esc",  
  23.     [KEY_1] = "1",                [KEY_2] = "2",  
  24.     [KEY_3] = "3",                [KEY_4] = "4",  
  25.     [KEY_5] = "5",                [KEY_6] = "6",  
  26.     [KEY_7] = "7",                [KEY_8] = "8",  
  27.     [KEY_9] = "9",                [KEY_0] = "0",  
  28.     [KEY_MINUS] = "Minus",            [KEY_EQUAL] = "Equal",  
  29.     [KEY_BACKSPACE] = "Backspace",        [KEY_TAB] = "Tab",  
  30.     [KEY_Q] = "Q",                [KEY_W] = "W",  
  31.     [KEY_E] = "E",                [KEY_R] = "R",  
  32.     [KEY_T] = "T",                [KEY_Y] = "Y",  
  33.     [KEY_U] = "U",                [KEY_I] = "I",  
  34.     [KEY_O] = "O",                [KEY_P] = "P",  
  35.     [KEY_LEFTBRACE] = "LeftBrace",        [KEY_RIGHTBRACE] = "RightBrace",  
  36.     [KEY_ENTER] = "Enter",            [KEY_LEFTCTRL] = "LeftControl",  
  37.     [KEY_A] = "A",                [KEY_S] = "S",  
  38.     [KEY_D] = "D",                [KEY_F] = "F",  
  39.     [KEY_G] = "G",                [KEY_H] = "H",  
  40.     [KEY_J] = "J",                [KEY_K] = "K",  
  41.     [KEY_L] = "L",                [KEY_SEMICOLON] = "Semicolon",  
  42.     [KEY_APOSTROPHE] = "Apostrophe",    [KEY_GRAVE] = "Grave",  
  43.     [KEY_LEFTSHIFT] = "LeftShift",        [KEY_BACKSLASH] = "BackSlash",  
  44.     [KEY_Z] = "Z",                [KEY_X] = "X",  
  45.     [KEY_C] = "C",                [KEY_V] = "V",  
  46.     [KEY_B] = "B",                [KEY_N] = "N",  
  47.     [KEY_M] = "M",                [KEY_COMMA] = "Comma",  
  48.     [KEY_DOT] = "Dot",            [KEY_SLASH] = "Slash",  
  49.     [KEY_RIGHTSHIFT] = "RightShift",    [KEY_KPASTERISK] = "KPAsterisk",  
  50.     [KEY_LEFTALT] = "LeftAlt",        [KEY_SPACE] = "Space",  
  51.     [KEY_CAPSLOCK] = "CapsLock",        [KEY_F1] = "F1",  
  52.     [KEY_F2] = "F2",            [KEY_F3] = "F3",  
  53.     [KEY_F4] = "F4",            [KEY_F5] = "F5",  
  54.     [KEY_F6] = "F6",            [KEY_F7] = "F7",  
  55.     [KEY_F8] = "F8",            [KEY_F9] = "F9",  
  56.     [KEY_F10] = "F10",            [KEY_NUMLOCK] = "NumLock",  
  57.     [KEY_SCROLLLOCK] = "ScrollLock",    [KEY_KP7] = "KP7",  
  58.     [KEY_KP8] = "KP8",            [KEY_KP9] = "KP9",  
  59.     [KEY_KPMINUS] = "KPMinus",        [KEY_KP4] = "KP4",  
  60.     [KEY_KP5] = "KP5",            [KEY_KP6] = "KP6",  
  61.     [KEY_KPPLUS] = "KPPlus",        [KEY_KP1] = "KP1",  
  62.     [KEY_KP2] = "KP2",            [KEY_KP3] = "KP3",  
  63.     [KEY_KP0] = "KP0",            [KEY_KPDOT] = "KPDot",  
  64.     [KEY_ZENKAKUHANKAKU] = "Zenkaku/Hankaku", [KEY_102ND] = "102nd",  
  65.     [KEY_F11] = "F11",            [KEY_F12] = "F12",  
  66.     [KEY_RO] = "RO",            [KEY_KATAKANA] = "Katakana",  
  67.     [KEY_HIRAGANA] = "HIRAGANA",        [KEY_HENKAN] = "Henkan",  
  68.     [KEY_KATAKANAHIRAGANA] = "Katakana/Hiragana", [KEY_MUHENKAN] = "Muhenkan",  
  69.     [KEY_KPJPCOMMA] = "KPJpComma",        [KEY_KPENTER] = "KPEnter",  
  70.     [KEY_RIGHTCTRL] = "RightCtrl",        [KEY_KPSLASH] = "KPSlash",  
  71.     [KEY_SYSRQ] = "SysRq",            [KEY_RIGHTALT] = "RightAlt",  
  72.     [KEY_LINEFEED] = "LineFeed",        [KEY_HOME] = "Home",  
  73.     [KEY_UP] = "Up",            [KEY_PAGEUP] = "PageUp",  
  74.     [KEY_LEFT] = "Left",            [KEY_RIGHT] = "Right",  
  75.     [KEY_END] = "End",            [KEY_DOWN] = "Down",  
  76.     [KEY_PAGEDOWN] = "PageDown",        [KEY_INSERT] = "Insert",  
  77.     [KEY_DELETE] = "Delete",        [KEY_MACRO] = "Macro",  
  78.     [KEY_MUTE] = "Mute",            [KEY_VOLUMEDOWN] = "VolumeDown",  
  79.     [KEY_VOLUMEUP] = "VolumeUp",        [KEY_POWER] = "Power",  
  80.     [KEY_KPEQUAL] = "KPEqual",        [KEY_KPPLUSMINUS] = "KPPlusMinus",  
  81.     [KEY_PAUSE] = "Pause",            [KEY_KPCOMMA] = "KPComma",  
  82.     [KEY_HANGUEL] = "Hanguel",        [KEY_HANJA] = "Hanja",  
  83.     [KEY_YEN] = "Yen",            [KEY_LEFTMETA] = "LeftMeta",  
  84.     [KEY_RIGHTMETA] = "RightMeta",        [KEY_COMPOSE] = "Compose",  
  85.     [KEY_STOP] = "Stop",            [KEY_AGAIN] = "Again",  
  86.     [KEY_PROPS] = "Props",            [KEY_UNDO] = "Undo",  
  87.     [KEY_FRONT] = "Front",            [KEY_COPY] = "Copy",  
  88.     [KEY_OPEN] = "Open",            [KEY_PASTE] = "Paste",  
  89.     [KEY_FIND] = "Find",            [KEY_CUT] = "Cut",  
  90.     [KEY_HELP] = "Help",            [KEY_MENU] = "Menu",  
  91.     [KEY_CALC] = "Calc",            [KEY_SETUP] = "Setup",  
  92.     [KEY_SLEEP] = "Sleep",            [KEY_WAKEUP] = "WakeUp",  
  93.     [KEY_FILE] = "File",            [KEY_SENDFILE] = "SendFile",  
  94.     [KEY_DELETEFILE] = "DeleteFile",    [KEY_XFER] = "X-fer",  
  95.     [KEY_PROG1] = "Prog1",            [KEY_PROG2] = "Prog2",  
  96.     [KEY_WWW] = "WWW",            [KEY_MSDOS] = "MSDOS",  
  97.     [KEY_COFFEE] = "Coffee",        [KEY_DIRECTION] = "Direction",  
  98.     [KEY_CYCLEWINDOWS] = "CycleWindows",    [KEY_MAIL] = "Mail",  
  99.     [KEY_BOOKMARKS] = "Bookmarks",        [KEY_COMPUTER] = "Computer",  
  100.     [KEY_BACK] = "Back",            [KEY_FORWARD] = "Forward",  
  101.     [KEY_CLOSECD] = "CloseCD",        [KEY_EJECTCD] = "EjectCD",  
  102.     [KEY_EJECTCLOSECD] = "EjectCloseCD",    [KEY_NEXTSONG] = "NextSong",  
  103.     [KEY_PLAYPAUSE] = "PlayPause",        [KEY_PREVIOUSSONG] = "PreviousSong",  
  104.     [KEY_STOPCD] = "StopCD",        [KEY_RECORD] = "Record",  
  105.     [KEY_REWIND] = "Rewind",        [KEY_PHONE] = "Phone",  
  106.     [KEY_ISO] = "ISOKey",            [KEY_CONFIG] = "Config",  
  107.     [KEY_HOMEPAGE] = "HomePage",        [KEY_REFRESH] = "Refresh",  
  108.     [KEY_EXIT] = "Exit",            [KEY_MOVE] = "Move",  
  109.     [KEY_EDIT] = "Edit",            [KEY_SCROLLUP] = "ScrollUp",  
  110.     [KEY_SCROLLDOWN] = "ScrollDown",    [KEY_KPLEFTPAREN] = "KPLeftParenthesis",  
  111.     [KEY_KPRIGHTPAREN] = "KPRightParenthesis", [KEY_F13] = "F13",  
  112.     [KEY_F14] = "F14",            [KEY_F15] = "F15",  
  113.     [KEY_F16] = "F16",            [KEY_F17] = "F17",  
  114.     [KEY_F18] = "F18",            [KEY_F19] = "F19",  
  115.     [KEY_F20] = "F20",            [KEY_F21] = "F21",  
  116.     [KEY_F22] = "F22",            [KEY_F23] = "F23",  
  117.     [KEY_F24] = "F24",            [KEY_PLAYCD] = "PlayCD",  
  118.     [KEY_PAUSECD] = "PauseCD",        [KEY_PROG3] = "Prog3",  
  119.     [KEY_PROG4] = "Prog4",            [KEY_SUSPEND] = "Suspend",  
  120.     [KEY_CLOSE] = "Close",            [KEY_PLAY] = "Play",  
  121.     [KEY_FASTFORWARD] = "Fast Forward",    [KEY_BASSBOOST] = "Bass Boost",  
  122.     [KEY_PRINT] = "Print",            [KEY_HP] = "HP",  
  123.     [KEY_CAMERA] = "Camera",        [KEY_SOUND] = "Sound",  
  124.     [KEY_QUESTION] = "Question",        [KEY_EMAIL] = "Email",  
  125.     [KEY_CHAT] = "Chat",            [KEY_SEARCH] = "Search",  
  126.     [KEY_CONNECT] = "Connect",        [KEY_FINANCE] = "Finance",  
  127.     [KEY_SPORT] = "Sport",            [KEY_SHOP] = "Shop",  
  128.     [KEY_ALTERASE] = "Alternate Erase",    [KEY_CANCEL] = "Cancel",  
  129.     [KEY_BRIGHTNESSDOWN] = "Brightness down", [KEY_BRIGHTNESSUP] = "Brightness up",  
  130.     [KEY_MEDIA] = "Media",            [KEY_UNKNOWN] = "Unknown",  
  131.     [BTN_0] = "Btn0",            [BTN_1] = "Btn1",  
  132.     [BTN_2] = "Btn2",            [BTN_3] = "Btn3",  
  133.     [BTN_4] = "Btn4",            [BTN_5] = "Btn5",  
  134.     [BTN_6] = "Btn6",            [BTN_7] = "Btn7",  
  135.     [BTN_8] = "Btn8",            [BTN_9] = "Btn9",  
  136.     [BTN_LEFT] = "LeftBtn",            [BTN_RIGHT] = "RightBtn",  
  137.     [BTN_MIDDLE] = "MiddleBtn",        [BTN_SIDE] = "SideBtn",  
  138.     [BTN_EXTRA] = "ExtraBtn",        [BTN_FORWARD] = "ForwardBtn",  
  139.     [BTN_BACK] = "BackBtn",            [BTN_TASK] = "TaskBtn",  
  140.     [BTN_TRIGGER] = "Trigger",        [BTN_THUMB] = "ThumbBtn",  
  141.     [BTN_THUMB2] = "ThumbBtn2",        [BTN_TOP] = "TopBtn",  
  142.     [BTN_TOP2] = "TopBtn2",            [BTN_PINKIE] = "PinkieBtn",  
  143.     [BTN_BASE] = "BaseBtn",            [BTN_BASE2] = "BaseBtn2",  
  144.     [BTN_BASE3] = "BaseBtn3",        [BTN_BASE4] = "BaseBtn4",  
  145.     [BTN_BASE5] = "BaseBtn5",        [BTN_BASE6] = "BaseBtn6",  
  146.     [BTN_DEAD] = "BtnDead",            [BTN_A] = "BtnA",  
  147.     [BTN_B] = "BtnB",            [BTN_C] = "BtnC",  
  148.     [BTN_X] = "BtnX",            [BTN_Y] = "BtnY",  
  149.     [BTN_Z] = "BtnZ",            [BTN_TL] = "BtnTL",  
  150.     [BTN_TR] = "BtnTR",            [BTN_TL2] = "BtnTL2",  
  151.     [BTN_TR2] = "BtnTR2",            [BTN_SELECT] = "BtnSelect",  
  152.     [BTN_START] = "BtnStart",        [BTN_MODE] = "BtnMode",  
  153.     [BTN_THUMBL] = "BtnThumbL",        [BTN_THUMBR] = "BtnThumbR",  
  154.     [BTN_TOOL_PEN] = "ToolPen",        [BTN_TOOL_RUBBER] = "ToolRubber",  
  155.     [BTN_TOOL_BRUSH] = "ToolBrush",        [BTN_TOOL_PENCIL] = "ToolPencil",  
  156.     [BTN_TOOL_AIRBRUSH] = "ToolAirbrush",    [BTN_TOOL_FINGER] = "ToolFinger",  
  157.     [BTN_TOOL_MOUSE] = "ToolMouse",        [BTN_TOOL_LENS] = "ToolLens",  
  158.     [BTN_TOUCH] = "Touch",            [BTN_STYLUS] = "Stylus",  
  159.     [BTN_STYLUS2] = "Stylus2",        [BTN_TOOL_DOUBLETAP] = "Tool Doubletap",  
  160.     [BTN_TOOL_TRIPLETAP] = "Tool Tripletap", [BTN_GEAR_DOWN] = "WheelBtn",  
  161.     [BTN_GEAR_UP] = "Gear up",        [KEY_OK] = "Ok",  
  162.     [KEY_SELECT] = "Select",        [KEY_GOTO] = "Goto",  
  163.     [KEY_CLEAR] = "Clear",            [KEY_POWER2] = "Power2",  
  164.     [KEY_OPTION] = "Option",        [KEY_INFO] = "Info",  
  165.     [KEY_TIME] = "Time",            [KEY_VENDOR] = "Vendor",  
  166.     [KEY_ARCHIVE] = "Archive",        [KEY_PROGRAM] = "Program",  
  167.     [KEY_CHANNEL] = "Channel",        [KEY_FAVORITES] = "Favorites",  
  168.     [KEY_EPG] = "EPG",            [KEY_PVR] = "PVR",  
  169.     [KEY_MHP] = "MHP",            [KEY_LANGUAGE] = "Language",  
  170.     [KEY_TITLE] = "Title",            [KEY_SUBTITLE] = "Subtitle",  
  171.     [KEY_ANGLE] = "Angle",            [KEY_ZOOM] = "Zoom",  
  172.     [KEY_MODE] = "Mode",            [KEY_KEYBOARD] = "Keyboard",  
  173.     [KEY_SCREEN] = "Screen",        [KEY_PC] = "PC",  
  174.     [KEY_TV] = "TV",            [KEY_TV2] = "TV2",  
  175.     [KEY_VCR] = "VCR",            [KEY_VCR2] = "VCR2",  
  176.     [KEY_SAT] = "Sat",            [KEY_SAT2] = "Sat2",  
  177.     [KEY_CD] = "CD",            [KEY_TAPE] = "Tape",  
  178.     [KEY_RADIO] = "Radio",            [KEY_TUNER] = "Tuner",  
  179.     [KEY_PLAYER] = "Player",        [KEY_TEXT] = "Text",  
  180.     [KEY_DVD] = "DVD",            [KEY_AUX] = "Aux",  
  181.     [KEY_MP3] = "MP3",            [KEY_AUDIO] = "Audio",  
  182.     [KEY_VIDEO] = "Video",            [KEY_DIRECTORY] = "Directory",  
  183.     [KEY_LIST] = "List",            [KEY_MEMO] = "Memo",  
  184.     [KEY_CALENDAR] = "Calendar",        [KEY_RED] = "Red",  
  185.     [KEY_GREEN] = "Green",            [KEY_YELLOW] = "Yellow",  
  186.     [KEY_BLUE] = "Blue",            [KEY_CHANNELUP] = "ChannelUp",  
  187.     [KEY_CHANNELDOWN] = "ChannelDown",    [KEY_FIRST] = "First",  
  188.     [KEY_LAST] = "Last",            [KEY_AB] = "AB",  
  189.     [KEY_NEXT] = "Next",            [KEY_RESTART] = "Restart",  
  190.     [KEY_SLOW] = "Slow",            [KEY_SHUFFLE] = "Shuffle",  
  191.     [KEY_BREAK] = "Break",            [KEY_PREVIOUS] = "Previous",  
  192.     [KEY_DIGITS] = "Digits",        [KEY_TEEN] = "TEEN",  
  193.     [KEY_TWEN] = "TWEN",            [KEY_DEL_EOL] = "Delete EOL",  
  194.     [KEY_DEL_EOS] = "Delete EOS",        [KEY_INS_LINE] = "Insert line",  
  195.     [KEY_DEL_LINE] = "Delete line",  
  196. };  
  197. char *absval[5] = { "Value", "Min  ", "Max  ", "Fuzz ", "Flat " };  
  198. char *relatives[REL_MAX + 1] = {  
  199.     [0 ... REL_MAX] = NULL,  
  200.     [REL_X] = "X",            [REL_Y] = "Y",  
  201.     [REL_Z] = "Z",            [REL_HWHEEL] = "HWheel",  
  202.     [REL_DIAL] = "Dial",        [REL_WHEEL] = "Wheel",  
  203.     [REL_MISC] = "Misc",  
  204. };  
  205. char *absolutes[ABS_MAX + 1] = {  
  206.     [0 ... ABS_MAX] = NULL,  
  207.     [ABS_X] = "X",            [ABS_Y] = "Y",  
  208.     [ABS_Z] = "Z",            [ABS_RX] = "Rx",  
  209.     [ABS_RY] = "Ry",        [ABS_RZ] = "Rz",  
  210.     [ABS_THROTTLE] = "Throttle",    [ABS_RUDDER] = "Rudder",  
  211.     [ABS_WHEEL] = "Wheel",        [ABS_GAS] = "Gas",  
  212.     [ABS_BRAKE] = "Brake",        [ABS_HAT0X] = "Hat0X",  
  213.     [ABS_HAT0Y] = "Hat0Y",        [ABS_HAT1X] = "Hat1X",  
  214.     [ABS_HAT1Y] = "Hat1Y",        [ABS_HAT2X] = "Hat2X",  
  215.     [ABS_HAT2Y] = "Hat2Y",        [ABS_HAT3X] = "Hat3X",  
  216.     [ABS_HAT3Y] = "Hat 3Y",        [ABS_PRESSURE] = "Pressure",  
  217.     [ABS_DISTANCE] = "Distance",    [ABS_TILT_X] = "XTilt",  
  218.     [ABS_TILT_Y] = "YTilt",        [ABS_TOOL_WIDTH] = "Tool Width",  
  219.     [ABS_VOLUME] = "Volume",    [ABS_MISC] = "Misc",  
  220.   
  221. #define ABS_MT_TOUCH_MAJOR  0x30    /* Major axis of touching ellipse */  
  222. #define ABS_MT_TOUCH_MINOR  0x31    /* Minor axis (omit if circular) */  
  223. #define ABS_MT_WIDTH_MAJOR  0x32    /* Major axis of approaching ellipse */  
  224. #define ABS_MT_WIDTH_MINOR  0x33    /* Minor axis (omit if circular) */  
  225. #define ABS_MT_ORIENTATION  0x34    /* Ellipse orientation */  
  226. #define ABS_MT_POSITION_X   0x35    /* Center X ellipse position */  
  227. #define ABS_MT_POSITION_Y   0x36    /* Center Y ellipse position */  
  228. #define ABS_MT_TOOL_TYPE    0x37    /* Type of touching device */  
  229. #define ABS_MT_BLOB_ID      0x38    /* Group a set of packets as a blob */  
  230. #define ABS_MT_TRACKING_ID  0x39    /* Unique ID of initiated contact */  
  231. #define ABS_MT_PRESSURE     0x3a    /* Pressure on contact area */  
  232. #define ABS_MT_DISTANCE     0x3b    /* Contact hover distance */  
  233.   
  234. [ABS_MT_TOUCH_MAJOR] = "ABS_MT_TOUCH_MAJOR",            // 0x30 /* Major axis of touching ellipse */  
  235. [ABS_MT_TOUCH_MINOR] = "ABS_MT_TOUCH_MINOR",        // 0x31 /* Minor axis (omit if circular) */  
  236. [ABS_MT_WIDTH_MAJOR] = "ABS_MT_WIDTH_MAJOR",        // 0x32 /* Major axis of approaching ellipse */  
  237. [ABS_MT_WIDTH_MINOR] = "ABS_MT_WIDTH_MINOR",        // 0x33 /* Minor axis (omit if circular) */  
  238. [ABS_MT_ORIENTATION] = "ABS_MT_ORIENTATION",        // 0x34 /* Ellipse orientation */  
  239. [ABS_MT_POSITION_X]  = "ABS_MT_POSITION_X" ,        // 0x35 /* Center X ellipse position */  
  240. [ABS_MT_POSITION_Y]  = "ABS_MT_POSITION_Y" ,        // 0x36 /* Center Y ellipse position */  
  241. [ABS_MT_TOOL_TYPE]   = "ABS_MT_TOOL_TYPE"  ,        // 0x37 /* Type of touching device */  
  242. [ABS_MT_BLOB_ID]     = "ABS_MT_BLOB_ID"    ,    // 0x38 /* Group a set of packets as a blob */  
  243. [ABS_MT_TRACKING_ID] = "ABS_MT_TRACKING_ID",        // 0x39 /* Unique ID of initiated contact */  
  244. [ABS_MT_PRESSURE]    = "ABS_MT_PRESSURE"   ,        // 0x3a /* Pressure on contact area */  
  245. [ABS_MT_DISTANCE]    = "ABS_MT_DISTANCE"   ,        // 0x3b /* Contact hover distance */  
  246.   
  247. };  
  248. char *misc[MSC_MAX + 1] = {  
  249.     [ 0 ... MSC_MAX] = NULL,  
  250.     [MSC_SERIAL] = "Serial",    [MSC_PULSELED] = "Pulseled",  
  251.     [MSC_GESTURE] = "Gesture",    [MSC_RAW] = "RawData",  
  252.     [MSC_SCAN] = "ScanCode",  
  253. };  
  254. char *leds[LED_MAX + 1] = {  
  255.     [0 ... LED_MAX] = NULL,  
  256.     [LED_NUML] = "NumLock",        [LED_CAPSL] = "CapsLock",  
  257.     [LED_SCROLLL] = "ScrollLock",    [LED_COMPOSE] = "Compose",  
  258.     [LED_KANA] = "Kana",        [LED_SLEEP] = "Sleep",  
  259.     [LED_SUSPEND] = "Suspend",    [LED_MUTE] = "Mute",  
  260.     [LED_MISC] = "Misc",  
  261. };  
  262. char *repeats[REP_MAX + 1] = {  
  263.     [0 ... REP_MAX] = NULL,  
  264.     [REP_DELAY] = "Delay",        [REP_PERIOD] = "Period"  
  265. };  
  266. char *sounds[SND_MAX + 1] = {  
  267.     [0 ... SND_MAX] = NULL,  
  268.     [SND_CLICK] = "Click",        [SND_BELL] = "Bell",  
  269.     [SND_TONE] = "Tone"  
  270. };  
  271. char **names[EV_MAX + 1] = {  
  272.     [0 ... EV_MAX] = NULL,  
  273.     [EV_SYN] = events,            [EV_KEY] = keys,  
  274.     [EV_REL] = relatives,            [EV_ABS] = absolutes,  
  275.     [EV_MSC] = misc,            [EV_LED] = leds,  
  276.     [EV_SND] = sounds,            [EV_REP] = repeats,  
  277. };  
  278. #define BITS_PER_LONG (sizeof(long) * 8)  
  279. #define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1)  
  280. #define OFF(x)  ((x)%BITS_PER_LONG)  
  281. #define BIT(x)  (1UL<<OFF(x))  
  282. #define LONG(x) ((x)/BITS_PER_LONG)  
  283. #define test_bit(bit, array)    ((array[LONG(bit)] >> OFF(bit)) & 1)  
  284. int main (int argc, char **argv)  
  285. {  
  286.     int fd, rd, i, j, k;  
  287.     struct input_event ev[64];  
  288.     int version;  
  289.     unsigned short id[4];  
  290.     unsigned long bit[EV_MAX][NBITS(KEY_MAX)];  
  291.     char name[256] = "Unknown";  
  292.     int abs[5];  
  293.     if (argc < 2) {  
  294.         printf("Usage: evtest /dev/input/eventX\n");  
  295.         printf("Where X = input device number\n");  
  296.         return 1;  
  297.     }  
  298.     if ((fd = open(argv[argc - 1], O_RDONLY)) < 0) {  
  299.         perror("evtest");  
  300.         return 1;  
  301.     }  
  302.     if (ioctl(fd, EVIOCGVERSION, &version)) {  
  303.         perror("evtest: can't get version\n");  
  304.         return 1;  
  305.     }  
  306.     printf("Input driver version is %d.%d.%d\n",  
  307.         version >> 16, (version >> 8) & 0xff, version & 0xff);  
  308.     ioctl(fd, EVIOCGID, id);  
  309.     printf("Input device ID: bus 0x%x vendor 0x%x product 0x%x version 0x%x\n",  
  310.         id[ID_BUS], id[ID_VENDOR], id[ID_PRODUCT], id[ID_VERSION]);  
  311.     ioctl(fd, EVIOCGNAME(sizeof(name)), name);  
  312.     printf("Input device name: %s\n", name);  
  313.     memset(bit, 0, sizeof(bit));  
  314.     ioctl(fd, EVIOCGBIT(0, EV_MAX), bit[0]);  
  315.     printf("Supported events:\n");  
  316.     for (i = 0; i < EV_MAX; i++)  
  317.         if (test_bit(i, bit[0])) {  
  318.             printf("  Event type %d (%s)\n", i, events[i] ? events[i] : "?");  
  319.             if (!i) continue;  
  320.             ioctl(fd, EVIOCGBIT(i, KEY_MAX), bit[i]);  
  321.             for (j = 0; j < KEY_MAX; j++)  
  322.                 if (test_bit(j, bit[i])) {  
  323.                     printf("    Event code %d (%s)\n", j, names[i] ? (names[i][j] ? names[i][j] : "?") : "?");  
  324.                     if (i == EV_ABS) {  
  325.                         ioctl(fd, EVIOCGABS(j), abs);  
  326.                         for (k = 0; k < 5; k++)  
  327.                             if ((k < 3) || abs[k])  
  328.                                 printf("      %s %6d\n", absval[k], abs[k]);  
  329.                     }  
  330.                 }  
  331.         }  
  332.   
  333.     printf("Testing ... (interrupt to exit)\n");  
  334.     while (1) {  
  335.         rd = read(fd, ev, sizeof(struct input_event) * 64);  
  336.         if (rd < (int) sizeof(struct input_event)) {  
  337.             printf("yyy\n");  
  338.             perror("\nevtest: error reading\n");  
  339.             return 1;  
  340.         }  
  341.         for (i = 0; i < rd / sizeof(struct input_event); i++)  
  342.             if (ev[i].type == EV_SYN) {  
  343.                 printf("Event: time %ld.%06ld, -------------- %s ------------\n",  
  344.                     ev[i].time.tv_sec, ev[i].time.tv_usec, ev[i].code ? "Config Sync" : "Report Sync" );  
  345.             } else if (ev[i].type == EV_MSC && (ev[i].code == MSC_RAW || ev[i].code == MSC_SCAN)) {  
  346.                 printf("Event: time %ld.%06ld, type %d (%s), code %d (%s), value %02x\n",  
  347.                     ev[i].time.tv_sec, ev[i].time.tv_usec, ev[i].type,  
  348.                     events[ev[i].type] ? events[ev[i].type] : "?",  
  349.                     ev[i].code,  
  350.                     names[ev[i].type] ? (names[ev[i].type][ev[i].code] ? names[ev[i].type][ev[i].code] : "?") : "?",  
  351.                     ev[i].value);  
  352.             } else {  
  353.                 printf("Event: time %ld.%06ld, type %d (%s), code %d (%s), value %d\n",  
  354.                     ev[i].time.tv_sec, ev[i].time.tv_usec, ev[i].type,  
  355.                     events[ev[i].type] ? events[ev[i].type] : "?",  
  356.                     ev[i].code,  
  357.                     names[ev[i].type] ? (names[ev[i].type][ev[i].code] ? names[ev[i].type][ev[i].code] : "?") : "?",  
  358.                     ev[i].value);  
  359.             }  
  360.    }  
  361. }  


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多