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:
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.
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.