Wie sollte man eine Tastatur/Maus/Touchscreen abfragen ...

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
alexander_ro
Beiträge: 298
Registriert: 16.01.2006 17:44:21
Lizenz eigener Beiträge: GNU General Public License

Re: Wie sollte man eine Tastatur/Maus/Touchscreen abfragen .

Beitrag von alexander_ro » 18.02.2017 21:28:45

Danke für die Erklärung zu dem asio das war mir noch nicht alles bekannt.

Ich habe schon ein Eventsystem das hatten wir hier schon mal im Forum besprochen (lange her). Das hatte Dir nicht recht gefallen wollen ich finde es aber gut das möchte ich behalten. Sehe ich das richtig uinput und evdev kann man benutzen um aus dem Userland Nachrichten über den Kernel zwischen Prozessen auszutauschen?

Wenn ich richtig gelesen habe: Wayland verwendet evdev für die Eingabegeräte. Also die unter /dev/input ...

Benutzeravatar
schorsch_76
Beiträge: 2542
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: Wie sollte man eine Tastatur/Maus/Touchscreen abfragen .

Beitrag von schorsch_76 » 19.02.2017 16:10:58

Um Nachrichten zwischen Prozessen auszutauschen gibt es:
  • Posix Message Queue man 3 mq_send
  • Pipes
  • Sockets
  • Unix Domain Sockets
  • Shared Memory
  • DBus
  • ...


http://tldp.org/LDP/lpg/node7.html
http://tldp.org/LDP/lpg/lpg.html

EDIT: Ausserdem gibt es auch noch TIPC. Das ist auch im mainline Kernel, ist nur wenig bekannt.
http://www.slideshare.net/JonMaloy/intr ... ng-service
https://en.wikipedia.org/wiki/Transpare ... munication

alexander_ro
Beiträge: 298
Registriert: 16.01.2006 17:44:21
Lizenz eigener Beiträge: GNU General Public License

Re: Wie sollte man eine Tastatur/Maus/Touchscreen abfragen .

Beitrag von alexander_ro » 20.02.2017 10:35:13

Für was ist dann das uinput gedacht?

DBUS habe ich bisher noch nicht benutzt die anderen kenne ich aber. Stimmt die nimmt man normal für so etwas her.

TIPC kenne ich auch noch nicht klingt aber interessant weil es so wie man es liest weniger Aufwändig ist als eine Verbindung über Domainsockets mit TCP und man kann aber weiter die Socket Schnittstelle verwenden.

Benutzeravatar
schorsch_76
Beiträge: 2542
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: Wie sollte man eine Tastatur/Maus/Touchscreen abfragen .

Beitrag von schorsch_76 » 20.02.2017 12:15:28

uinput ist dafür da, wenn du bsp eine Touch Screen Treiber daemon schreibst, dass du die Maus Position schicken kannst ;) Du lannst damit auh per Programm die Maus bewegen, Klicks auslösen etc pp.

alexander_ro
Beiträge: 298
Registriert: 16.01.2006 17:44:21
Lizenz eigener Beiträge: GNU General Public License

Re: Wie sollte man eine Tastatur/Maus/Touchscreen abfragen .

Beitrag von alexander_ro » 06.03.2017 19:19:03

Beim lesen von stdin bekommt man die Daten erst wenn die Returntaste betätigt wurde. Das scheint hier das Standard verhalten zu sein. Das ist jetzt für mein vorhaben nicht gut geeignet.

Das mit den Kernel Events liefert mehrer Events pro Tastendruck das ist so Ok für meine Anwendung. Aber diese Scancodes haben nicht wirklich etwas mit einem Zeichensatz oder dem Tastatur Layout. Wenn man das alles selber konvertieren muss ist es schon ein bisschen Mühsam. Aber wie es aussieht der einzige weg an jeden einzelnen Tastendruck zu kommen.

So habe ich das jetzt mal zu experimentieren gemacht:

Code: Alles auswählen

unsigned char Keyboard::KernelEventRead (void)
{
  ssize_t rcRead;
  struct input_event eventKeyboard;

  //while (1)
  {
    rcRead = read (idIntKeyboard, &eventKeyboard, sizeof eventKeyboard);

    if (rcRead == (ssize_t) -1)
    {
      return 0;
    }
    else
    if (rcRead != sizeof eventKeyboard)
    {
      return 0;
    }
  }

// Prüfen ob es ein Tastencode ist
  if (eventKeyboard.type == EV_KEY)
  {
    if (eventKeyboard.value == 0)
      std::cout << "Value: Taste loslassen"  << std::endl;
    else
    if (eventKeyboard.value == 1)
      std::cout << "Value: Taste gedrückt" << std::endl;
    else
    if (eventKeyboard.value == 2)
      std::cout << "Value: Auto repeat" << std::endl;

    std::cout << "Code : " << eventKeyboard.code  << std::endl;
  }

  return eventKeyboard.code;
}

alexander_ro
Beiträge: 298
Registriert: 16.01.2006 17:44:21
Lizenz eigener Beiträge: GNU General Public License

Re: Wie sollte man eine Tastatur/Maus/Touchscreen abfragen .

Beitrag von alexander_ro » 09.03.2017 22:44:13

Ich habe jetzt noch das Paket kbd entdeckt das macht ja die Zeichenumsetzung (Scancode => Keycode) aber das geht wie es scheint nur mit /dev/console und das wieder ist etwas das bereits auf die Typische Computer Console zugeschnitten ist. Gibt scheinbar wirklich nur den Weg das über die Kernel Eventschnittstelle für Eingabegeräte zu lesen und die Umsetzung zwischen Scan... und Keycode selber zu bauen. EDV zu Fuß halt. Hatte gedacht es gibt für so eine alltägliche Aufgaben fertige Lösungen. Falsch gedacht ...

Benutzeravatar
schorsch_76
Beiträge: 2542
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: Wie sollte man eine Tastatur/Maus/Touchscreen abfragen .

Beitrag von schorsch_76 » 10.03.2017 08:24:15

SIehe
http://stackoverflow.com/questions/3649 ... e-in-linux

Man könnte auch einfach mal in QT oder GTK reinschauen wie die das machen ;)

alexander_ro
Beiträge: 298
Registriert: 16.01.2006 17:44:21
Lizenz eigener Beiträge: GNU General Public License

Re: Wie sollte man eine Tastatur/Maus/Touchscreen abfragen .

Beitrag von alexander_ro » 10.03.2017 16:48:53

@schorsch_76: Den Link von Dir habe ich mir mal angeschaut. Aber das Programm habe ich nicht ganz verstanden. Die benutzen auf jeden Fall auch die Event Schnittstelle.

Ich schaue mir gerade die libinput von Wayland an. Habe aber da noch nicht die richtige stelle gefunden.
https://cgit.freedesktop.org/wayland/libinput/tree/src

Antworten