[LINUX] Hintergrundprozess auf Tastatureingabe reagieren lassen

trench140

Mitglied
Hallo alle miteinander,

ich habe die undankbare Aufgabe bekommen, eine vorhandene, extremst gefrickelte Software umzuschreiben.

Aktuell tut sie Folgendes:

Ein Prozess lauscht auf COM1 (aktuell /dev/ttyUSB0, USB->Serial-Adapter) über den sie bestimmte Signale gesendet bekommt.
Erhält sie ein bestimmtes Signal, so wird eine Videowiedergabe auf einem Bildschirm gestartet. Nach dem Ende eine Clips wird der nächste gespielt solange, bis durch ein weiteres Signal angezeigt wird, dass die Wiedergabe beendet werden soll.

Insgesamt können so zwei Monitore angesteuert werden.

Das funktioniert nun auch alles perfekt, ich soll das ganze nun so ergänzen, dass man die Wiedergabe auch per Tastatur starten und stoppen kann.

Nachdem ich bei dem Gefrickel fast das k*tzen bekommen habe, habe und nun zumindest implementiert, dass wenn der Prozess im VORDERGRUND läuft bei Tastendruck die Wiedergabe gestartet wird. Ein Beenden ist dann aber leider nicht mehr möglich, da durch die Wiedergabe das Prozess im Hintergrund verschwindet und Tastatureingaben schön ignoriert.

Das folgende Codefragment erledigt die Abfrage:
Code:
int ifd;
struct input_event iev;

ifd=open("/dev/input/event2",O_RDONLY);
read(ifd,&iev,sizeof(iev));
			
switch(iev.value)
{
	case KEY_1:
		rc = 2;
		break;
	case KEY_2:
		rc = 0;
		break;
	case KEY_3:
		rc = 3;
		break;
	case KEY_4:
		rc = 1;
		break;
	default:
		rc = -1;
}

Davon ab, dass der Check, ob eine Taste gedrückt wurde/ein Signal gesendet wurde in einer While-Schleife durchgeführt wird und man die Taste recht lange drücken muss bis er gerallt hat, dass die Taste gedrückt wird funktioniert es eben nicht, wenn der Prozess im Hintergrund läuft.

Mein Problem ist nun, dass ich von C/C++ zwar, was die Grundlagen angeht, gute Kenntnisse habe, aber bei spezifischen Themen passen muss. Ich habe mich jetzt einige Stunden bemüht im Internet einen Lösungsansatz zu finden, aber nie etwas gefunden, bei dem es *klick* gemacht hat.

Ich habe nun einiges über IPC und Pipes gelesen, aber irgendwie weiß ich nicht, ob der Aufwand nötig ist.

Wenn also jemand eine Idee hat wäre ich wirklich sehr dankbar, denn ohne funktionierende Tastatureingabe, wenn der Prozess im Hintergrund läuft, kann ich das Ganze direkt vergessen.

Gruß,
Trench

P.S.: Sorry, wenn "Prozess" vielleicht nicht stimmt, aber auch mit der ganzenDaemon-/Prozess-/Fork-Geschichte habe ich mich in den letzten Tage zum ersten Mal wirklich beschäftigt.
 
Hallo,

ich verstehe dein Problem nicht so ganz. Du sagst es funktioniert nicht. Was funktioniert denn nicht? Ein Abbrechen des Prozesses mit Strg-C? Wenn der Prozess im Hintergrund gestartet wird dann ist das normal das er sich nicht mehr mit Strg-C beenden lässt. Du musst ihm wenn schon das Signal -SIGINT von einem anderen Prozess aus schicken damit er sich beendet.

trench140 hat gesagt.:
Davon ab, dass der Check, ob eine Taste gedrückt wurde/ein Signal gesendet wurde in einer While-Schleife durchgeführt wird und man die Taste recht lange drücken muss bis er gerallt hat, dass die Taste gedrückt wird funktioniert es eben nicht, wenn der Prozess im Hintergrund läuft.

Ich versteh nicht so recht was da nicht funktioniert. Funktioniert es generell nicht? Oder äußert sich das "nicht funktionieren" dadurch das er es "nicht rallt" das eine Taste gedrückt wird? Evtl. kannst du dein Anliegen nochmal genauer formulieren.

Gruß,
RedWing
 
Hallo trench140,

stehe jetzt vor einem verdammt ähnlichen Problem, lausche auch auf der seriellen und muß bei Bedarf auch etwas darüber senden, Programm läuft auch im Hintergrund. Hast Du dann noch eine Lösung gefunden gehabt ?

Viele Grüße,

zaphod0815
 
Zurück