/* This is a Testprogramm Here I want to find out how /dev/input/event works. some parts are taken from esekey which is released under the GPL. This source is also under the terms of the GPL. regards nice */ #include #include #include #define EV_FILE "/dev/input/event0" FILE *fp = NULL; struct input_event ev; char *get_ev_type(struct input_event ev); char *get_ev_key(struct input_event ev); char *get_ev_value(struct input_event ev); long int get_ev_time_sec(struct input_event ev); long int get_ev_time_usec(struct input_event ev); void four2nineKeys(void); void fill_buffer(struct input_event ev); char buffer_i = 'N'; char buffer_j = 'N'; char buffer_k = 'N'; char buffer_l = 'N'; int main () { if (!(fp = fopen (EV_FILE, "r"))) { printf ("can`t open %s\n",EV_FILE); return -4; } while (fread (&ev, sizeof (struct input_event), 1, fp)) { if (ev.type == EV_KEY){ // ev_print(ev,get_ev_time_sec(ev),get_ev_time_usec(ev),get_ev_type(ev),get_ev_key(ev),get_ev_value(ev)); fill_buffer(ev); //printf("BUFFER_I: %c\nBUFFER_J: %c\n",buffer_i,buffer_j); } } fclose (fp); return 0; } void fill_buffer(struct input_event ev){ if (ev.value == 1) switch (ev.code) { case KEY_I: buffer_i = 'J'; four2nineKeys(); break; case KEY_J: buffer_j = 'J'; four2nineKeys(); break; case KEY_K: buffer_k = 'J'; four2nineKeys(); break; case KEY_L: buffer_l = 'J'; four2nineKeys(); break; } if (ev.value == 0) switch (ev.code) { case KEY_I: buffer_i = 'N'; four2nineKeys(); break; case KEY_J: buffer_j = 'N'; four2nineKeys(); break; case KEY_K: buffer_k = 'N'; four2nineKeys(); break; case KEY_L: buffer_l = 'N'; four2nineKeys(); break; } } void four2nineKeys(void){ //center if ((buffer_i=='J') && (buffer_j=='J') && (buffer_k=='J') && (buffer_l=='J')) printf("center\n"); //upper_left if ((buffer_i=='J') && (buffer_j=='J') && (buffer_k=='N') && (buffer_l=='N')) printf("upper_left\n"); //upper_right if ((buffer_i=='J') && (buffer_j=='N') && (buffer_k=='N') && (buffer_l=='J')) printf("upper_right\n"); //lower_left if ((buffer_i=='N') && (buffer_j=='J') && (buffer_k=='J') && (buffer_l=='N')) printf("lower_left\n"); //lower_right if ((buffer_i=='N') && (buffer_j=='N') && (buffer_k=='J') && (buffer_l=='J')) printf("lower_right\n"); //Key_I if ((buffer_i=='J') && (buffer_j=='N') && (buffer_k=='N') && (buffer_l=='N')) printf("Key_I\n"); //Key_J if ((buffer_i=='N') && (buffer_j=='J') && (buffer_k=='N') && (buffer_l=='N')) printf("Key_J\n"); //Key_K if ((buffer_i=='N') && (buffer_j=='N') && (buffer_k=='J') && (buffer_l=='N')) printf("Key_K\n"); //Key_L if ((buffer_i=='N') && (buffer_j=='N') && (buffer_k=='N') && (buffer_l=='J')) printf("Key_L\n"); //Key_not_in_rage // else if ((buffer_i=='N') && (buffer_j=='N') && (buffer_k=='N') && (buffer_l=='N')) // printf("keys are not pressed\n"); // else // printf("WOW, we are in serious trouble"); //printf("BUFFER_I: %c\nBUFFER_J: %c\n",buffer_i,buffer_j); } int ev_print(struct input_event ev,long int ev_time_sec,long int ev_time_usec,char *ev_type,char *ev_key,char *ev_value){ printf("TIME: SEC(%li) USEC(%li)\nTYPE %s\nKEY: %s\nVALUE: %s\n",ev_time_sec,ev_time_usec,ev_type,ev_key,ev_value); } long int get_ev_time_sec(struct input_event ev) { //to do: write some parser and give back the timestemp return ev.time.tv_sec; } long int get_ev_time_usec(struct input_event ev) { //to do: write some parser and give back the timestemp return ev.time.tv_usec; } char *get_ev_type(struct input_event ev) { switch (ev.type) { case EV_SYN: return "EV_SYN"; case EV_KEY: return"EV_KEY"; case EV_REL: return "EV_REL"; case EV_ABS: return "EV_ABS"; case EV_MSC: return "EV_MSC"; case EV_LED: return "EV_LED"; case EV_SND: return "EV_SND"; case EV_REP: return "EV_REP"; case EV_FF: return "EV_FF"; case EV_PWR: return "EV_PWR"; case EV_FF_STATUS: return "EV_FF_STATUS"; case EV_MAX: return "EV_MAX"; default: return "ERROR"; } } //parser.c from esekey char* get_ev_key(struct input_event ev) { switch (ev.code) { case 1: return "ESC"; case 2: return "1"; case 3: return "2"; case 4: return "3"; case 5: return "4"; case 6: return "5"; case 7: return "6"; case 8: return "7"; case 9: return "8"; case 10: return "9"; case 11: return "0"; case 12: return "MINUS"; case 13: return "EQUAL"; case 14: return "BACKSPACE"; case 15: return "TAB"; case 16: return "Q"; case 17: return "W"; case 18: return "E"; case 19: return "R"; case 20: return "T"; case 21: return "Y"; case 22: return "U"; case 23: return "I"; case 24: return "O"; case 25: return "P"; case 26: return "LEFTBRACE"; case 27: return "RIGHTBRACE"; case 28: return "ENTER"; case 29: return "LEFTCTRL"; case 30: return "A"; case 31: return "S"; case 32: return "D"; case 33: return "F"; case 34: return "G"; case 35: return "H"; case 36: return "J"; case 37: return "K"; case 38: return "L"; case 39: return "SEMICOLON"; case 40: return "APOSTROPHE"; case 41: return "GRAVE"; case 42: return "LEFTSHIFT"; case 43: return "BACKSLASH"; case 44: return "Z"; case 45: return "X"; case 46: return "C"; case 47: return "V"; case 48: return "B"; case 49: return "N"; case 50: return "M"; case 51: return "COMMA"; case 52: return "DOT"; case 53: return "SLASH"; case 54: return "RIGHTSHIFT"; case 55: return "KPASTERISK"; case 56: return "LEFTALT"; case 57: return "SPACE"; case 58: return "CAPSLOCK"; case 59: return "F1"; case 60: return "F2"; case 61: return "F3"; case 62: return "F4"; case 63: return "F5"; case 64: return "F6"; case 65: return "F7"; case 66: return "F8"; case 67: return "F9"; case 68: return "F10"; case 69: return "NUMLOCK"; case 70: return "SCROLLLOCK"; case 71: return "KP7"; case 72: return "KP8"; case 73: return "KP9"; case 74: return "KPMINUS"; case 75: return "KP4"; case 76: return "KP5"; case 77: return "KP6"; case 78: return "KPPLUS"; case 79: return "KP1"; case 80: return "KP2"; case 81: return "KP3"; case 82: return "KP0"; case 83: return "KPDOT"; case 85: return "ZENKAKUHANKAKU"; case 86: return "102ND"; case 87: return "F11"; case 88: return "F12"; case 89: return "RO"; case 90: return "KATAKANA"; case 91: return "HIRAGANA"; case 92: return "HENKAN"; case 93: return "KATAKANAHIRAGANA"; case 94: return "MUHENKAN"; case 95: return "KPJPCOMMA"; case 96: return "KPENTER"; case 97: return "RIGHTCTRL"; case 98: return "KPSLASH"; case 99: return "SYSRQ"; case 100: return "RIGHTALT"; case 101: return "LINEFEED"; case 102: return "HOME"; case 103: return "UP"; case 104: return "PAGEUP"; case 105: return "LEFT"; case 106: return "RIGHT"; case 107: return "END"; case 108: return "DOWN"; case 109: return "PAGEDOWN"; case 110: return "INSERT"; case 111: return "DELETE"; case 112: return "MACRO"; case 113: return "MUTE"; case 114: return "VOLUMEDOWN"; case 115: return "VOLUMEUP"; case 116: return "POWER"; case 117: return "KPEQUAL"; case 118: return "KPPLUSMINUS"; case 119: return "PAUSE"; case 121: return "KPCOMMA"; case 122: return "HANGUEL"; case 123: return "HANJA"; case 124: return "YEN"; case 125: return "LEFTMETA"; case 126: return "RIGHTMETA"; case 127: return "COMPOSE"; case 128: return "STOP"; case 129: return "AGAIN"; case 130: return "PROPS"; case 131: return "UNDO"; case 132: return "FRONT"; case 133: return "COPY"; case 134: return "OPEN"; case 135: return "PASTE"; case 136: return "FIND"; case 137: return "CUT"; case 138: return "HELP"; case 139: return "MENU"; case 140: return "CALC"; case 141: return "SETUP"; case 142: return "SLEEP"; case 143: return "WAKEUP"; case 144: return "FILE"; case 145: return "SENDFILE"; case 146: return "DELETEFILE"; case 147: return "XFER"; case 148: return "PROG1"; case 149: return "PROG2"; case 150: return "WWW"; case 151: return "MSDOS"; case 152: return "COFFEE"; case 153: return "DIRECTION"; case 154: return "CYCLEWINDOWS"; case 155: return "MAIL"; case 156: return "BOOKMARKS"; case 157: return "COMPUTER"; case 158: return "BACK"; case 159: return "FORWARD"; case 160: return "CLOSECD"; case 161: return "EJECTCD"; case 162: return "EJECTCLOSECD"; case 163: return "NEXTSONG"; case 164: return "PLAYPAUSE"; case 165: return "PREVIOUSSONG"; case 166: return "STOPCD"; case 167: return "RECORD"; case 168: return "REWIND"; case 169: return "PHONE"; case 170: return "ISO"; case 171: return "CONFIG"; case 172: return "HOMEPAGE"; case 173: return "REFRESH"; case 174: return "EXIT"; case 175: return "MOVE"; case 176: return "EDIT"; case 177: return "SCROLLUP"; case 178: return "SCROLLDOWN"; case 179: return "KPLEFTPAREN"; case 180: return "KPRIGHTPAREN"; case 183: return "F13"; case 184: return "F14"; case 185: return "F15"; case 186: return "F16"; case 187: return "F17"; case 188: return "F18"; case 189: return "F19"; case 190: return "F20"; case 191: return "F21"; case 192: return "F22"; case 193: return "F23"; case 194: return "F24"; case 200: return "PLAYCD"; case 201: return "PAUSECD"; case 202: return "PROG3"; case 203: return "PROG4"; case 205: return "SUSPEND"; case 206: return "CLOSE"; case 207: return "PLAY"; case 208: return "FASTFORWARD"; case 209: return "BASSBOOST"; case 210: return "PRINT"; case 211: return "HP"; case 212: return "CAMERA"; case 213: return "SOUND"; case 214: return "QUESTION"; case 215: return "EMAIL"; case 216: return "CHAT"; case 217: return "SEARCH"; case 218: return "CONNECT"; case 219: return "FINANCE"; case 220: return "SPORT"; case 221: return "SHOP"; case 222: return "ALTERASE"; case 223: return "CANCEL"; case 224: return "BRIGHTNESSDOWN"; case 225: return "BRIGHTNESSUP"; case 226: return "MEDIA"; case 227: return "SWITCHVIDEOMODE"; case 228: return "KBDILLUMTOGGLE"; case 229: return "KBDILLUMDOWN"; case 230: return "KBDILLUMUP"; case 240: return "UNKNOWN"; case 352: return "OK"; case 353: return "SELECT"; case 354: return "GOTO"; case 355: return "CLEAR"; case 356: return "POWER2"; case 357: return "OPTION"; case 358: return "INFO"; case 359: return "TIME"; case 360: return "VENDOR"; case 361: return "ARCHIVE"; case 362: return "PROGRAM"; case 363: return "CHANNEL"; case 364: return "FAVORITES"; case 365: return "EPG"; case 366: return "PVR"; case 367: return "MHP"; case 368: return "LANGUAGE"; case 369: return "TITLE"; case 370: return "SUBTITLE"; case 371: return "ANGLE"; case 372: return "ZOOM"; case 373: return "MODE"; case 374: return "KEYBOARD"; case 375: return "SCREEN"; case 376: return "PC"; case 377: return "TV"; case 378: return "TV2"; case 379: return "VCR"; case 380: return "VCR2"; case 381: return "SAT"; case 382: return "SAT2"; case 383: return "CD"; case 384: return "TAPE"; case 385: return "RADIO"; case 386: return "TUNER"; case 387: return "PLAYER"; case 388: return "TEXT"; case 389: return "DVD"; case 390: return "AUX"; case 391: return "MP3"; case 392: return "AUDIO"; case 393: return "VIDEO"; case 394: return "DIRECTORY"; case 395: return "LIST"; case 396: return "MEMO"; case 397: return "CALENDAR"; case 398: return "RED"; case 399: return "GREEN"; case 400: return "YELLOW"; case 401: return "BLUE"; case 402: return "CHANNELUP"; case 403: return "CHANNELDOWN"; case 404: return "FIRST"; case 405: return "LAST"; case 406: return "AB"; case 407: return "NEXT"; case 408: return "RESTART"; case 409: return "SLOW"; case 410: return "SHUFFLE"; case 411: return "BREAK"; case 412: return "PREVIOUS"; case 413: return "DIGITS"; case 414: return "TEEN"; case 415: return "TWEN"; case 448: return "DEL_EOL"; case 449: return "DEL_EOS"; case 450: return "INS_LINE"; case 451: return "DEL_LINE"; case 464: return "FN"; case 465: return "FN_ESC"; case 466: return "FN_F1"; case 467: return "FN_F2"; case 468: return "FN_F3"; case 469: return "FN_F4"; case 470: return "FN_F5"; case 471: return "FN_F6"; case 472: return "FN_F7"; case 473: return "FN_F8"; case 474: return "FN_F9"; case 475: return "FN_F10"; case 476: return "FN_F11"; case 477: return "FN_F12"; case 478: return "FN_1"; case 479: return "FN_2"; case 480: return "FN_D"; case 481: return "FN_E"; case 482: return "FN_F"; case 483: return "FN_S"; case 484: return "FN_B"; case 511: return "MAX"; default: return "ERROR"; } return NULL; } char *get_ev_value(struct input_event ev) { switch (ev.value) { case 0: return "Release"; case 1: return "Press"; case 2: return "Autorepeat"; default: return "ERROR"; } }