- 3D-Druck Einstieg und Tipps         
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. #5
    HaWe
    Gast
    im Prinzip ist mir die Ebene egal, ich lese die Tastatur in einer Art pthread "keyboard watcher task" - bisher wird nur die Taste ESC überwacht für einen program abort, aber nun sollen auch andere Tasten überwacht werden, insbesondere Sondertasten:

    *arrrgs* wieder kein Code Tag!!!
    Code:
    void* thread1Go(void *)   // medium priority:  keyboard + heartbeat monitoring
    {
       int   c;  // keyboard key
       
       while(_TASKS_ACTIVE_) {         
          c=0;
          if (kbhit())    {           // <<<<<<<<<<<<<<<<<<
              c = getchar();          
              if( c==27 ) {           // ESC to quit program
                   printf("\n\n ESC pressed - program terminated by user \n");
                   _TASKS_ACTIVE_=0;  // semaphore to stop all tasks
                   printf("\n wait for tasks to join main()... \n\n");
                   return NULL;
              }
          }
         
         //... ***SNIP***
    
         delay(50);
       }         
       return NULL;
    }
    kbhit habe ich als conio-mimic hierraus:

    Code:
    #ifndef RPICONIO_H
    #define   RPICONIO_H
    
    
    #include <stdbool.h>
    #include <stdio.h>
    #include <string.h>
    #include <termio.h>
    #include <unistd.h>
    
    bool kbhit(void)
    {
        struct termios original;
        tcgetattr(STDIN_FILENO, &original);
    
        struct termios term;
        memcpy(&term, &original, sizeof(term));
    
        term.c_lflag &= ~ICANON;
        tcsetattr(STDIN_FILENO, TCSANOW, &term);
    
        int characters_buffered = 0;
        ioctl(STDIN_FILENO, FIONREAD, &characters_buffered);
    
        tcsetattr(STDIN_FILENO, TCSANOW, &original);
    
        bool pressed = (characters_buffered != 0);
    
        return pressed;
    }
    
    
    //... ***SNIP***
    
    
    #endif


    über wiederholtes getchar() Auslesen ginge es zwar prinzipiell, aber F1 liefert 3 Zechen im keyb-Puffer (27,79,80) und shift-F1 wohl sogar 6, was ein Unding wäre, das über eine extra state machine verarbeiten zu wollen - für alle 102x7 möglichen key+modifier-Kombis.
    Also wird eine Art "Scancode" gebraucht, so wie es das schon früher bei Turbo Pascal und Turbo C optional, zusätzlich zu readkey oder getchar gab.
    Geändert von HaWe (05.04.2016 um 10:55 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
  •  

LiFePO4 Speicher Test