- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 33

Thema: C/C++ lib für Sonderzeichenkombinationen (F1-12, +shift, alt, ctrl) als Scancode

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #17
    HaWe
    Gast
    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, &param);
       
        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;
    }
    Geändert von HaWe (07.04.2016 um 08:52 Uhr)

Ähnliche Themen

  1. Antworten: 10
    Letzter Beitrag: 01.11.2017, 12:53
  2. Neue Atmega "A" und "PA" Typen
    Von AVR168 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 07.05.2012, 16:47
  3. Antworten: 2
    Letzter Beitrag: 15.06.2011, 21:18
  4. "Lichtverfolgung" in "TV-Remote" einbaue
    Von fabqu im Forum Robby RP6
    Antworten: 3
    Letzter Beitrag: 04.01.2011, 10:14
  5. "Soft-Reset?" und "Finger-Interrupt?"
    Von trapperjohn im Forum Asuro
    Antworten: 8
    Letzter Beitrag: 10.06.2008, 23:02

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests