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;
}
Lesezeichen