All pastes #79695 Raw Edit

nice

public text v1 · immutable
#79695 ·published 2006-07-05 16:43 UTC
rendered paste body

/* 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 <stdio.h>
#include <linux/input.h>
#include <sys/time.h>
#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";
        }
}