alles klar, auf jeden Fall nochmal vielen, vielen Dank, ich kann damit jetzt schon super arbeiten!
- - - Aktualisiert - - -
habs hingekriegt!
die Scanfunktion läuft jetzt in nem eigenen Funktions-Wrap!
Perfekt! Hilft mir jetzt super toll!
Code:// Compile with: g++ -o /var/scripte/tastaturtest1 /var/scripte/tastaturtest1.c -L/usr/local/lib -lpthread // /var/scripte/tastaturtest1 // 05.04.2016 - peterfido #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <stdint.h> #include <sys/sysinfo.h> #include <time.h> #include <linux/input.h> #include <pthread.h> #include <errno.h> #include <termios.h> #include <signal.h> #include <sys/types.h> #include <fcntl.h> #include <dirent.h> #include <sys/stat.h> #include <sys/select.h> int ziffer=0; int beenden=2; int zeit=0; int shiftl=0; int shiftr=0; int strgl=0; int strgr=0; int capsl=0; int alt=0; int altgr=0; int windows=0; int kontext=0; int keybscan=0; int modscode; volatile int _kbscode_ ; // keyboard dev int fkbd; char * kbdin = "/dev/input/event0"; struct input_event ev[64]; int _TASKS_ACTIVE_= 1; int getkbscancode() { int rd, size = sizeof (struct input_event); if ((rd = read (fkbd, ev, size * 64)) < size) printf ("Fehler mit Tastatur"); if (ev[1].type != EV_KEY) return 0; if (ev[1].value==0){ //Taste losgelassen switch (ev[1].code) { case 42: shiftl=0; break; case 54: shiftr=0; break; case 29: strgl=0; break; case 97: strgr=0; break; case 56: alt=0; break; case 125: windows=0; break; case 100: altgr=0; break; case 127: kontext=0; break; } } else { if (ev[1].value==1){ //==1 für nur einen Druck ohne Wiederholung. >=1 für Erkennung von gedrückt gehaltener Taste modscode = 0; switch (ev[1].code) { case 42: shiftl=1; break; case 54: shiftr=1; break; case 29: strgl=1; break; case 97: strgr=1; break; case 56: alt=1; break; case 125: windows=1; break; case 100: altgr=1; modscode+=(2048+4096); break; case 127: kontext=1; break; // Ab hier 'normale Tasten' default: keybscan=ev[1].code;// Scancode ablegen if(shiftl || shiftr ) modscode+=1024; if(strgl || strgr ) modscode+=2048; if(alt) modscode+=4096; if(altgr) modscode+=(2048+4096); if(windows) modscode+=8192; if(kontext) modscode+=16384; if(keybscan>0) { _kbscode_= keybscan + modscode; return keybscan; } else return 0 ; //break; } } } return 0 ; } void* thread6Go(void *) { while (_TASKS_ACTIVE_) { if(getkbscancode()) { printf("\nSHIFTL: %2d, SHIFTR: %2d, STRGL: %2d, STRGR: %2d; ",shiftl,shiftr,strgl,strgr); printf("Typ: %2d; Wert: %2d; Code: %2d scancode=%6d \n",ev[1].type,ev[1].value,ev[1].code, _kbscode_ ); } } beenden=0; pthread_exit((void *) 0); } int main() { pthread_t thread6; struct sched_param param; if ((fkbd = open (kbdin, O_RDONLY)) == -1){ printf ("Fehler mit Tastatur"); } if(pthread_create(&thread6, NULL, thread6Go, NULL) != 0) { fprintf(stderr, "Fehler bei Tastatur......\n"); exit(0); } param.sched_priority = 20; pthread_setschedparam(thread6, SCHED_RR, ¶m); beenden=1; while (beenden > 0) { sleep(1); zeit++; if (zeit==30) { zeit=0; printf("Wieder 30 Sekunden um.\n"); } } usleep(50); printf("***********Ende************\n"); return 0; }









Zitieren

Lesezeichen