Mei dass då nix oafach is!
Derzeit manipuliere ich den C++-Code von audacious so, dass die neue Funktion "eject" als Toolbar-Button und als Menüpunkt (Wiedergabe-->Eject) zur Verfügung steht (erfolgreich ergänzt)
und
die in den Beiträgen #11 und #25 umgebaute Auswurftaste des CDROM-Laufwerks über GPIO4 gesperrt wird. Dies ist beinahe erfolgreich umgesetzt: Die Sperre an sich funktioniert.
Aber jetzt erstmal wieder ein bissl mimimi:
Neben der Tatsache, dass mich die nicht nur bei mir, sondern selbst bei Experten gefürchtete C-/C++-typische #include/Makefile-Geschichte immer wieder ausbremst, habe ich es jetzt tatsächlich geschafft, das audacious-Projekt auf dem RPi zu kompilieren und dabei die pigpio-Bibliothek -lpigpiod_if2 über die Datei buildsys.mk in das Projekt mit einzubinden. Das ist die Version von pigpio, die den GPIO-Zugriff über den pigpio-Daemon durchführt. Damit braucht das Clientprogramm (audacious) keine Rootrechte.
Aber was passiert jetzt als neues Schmankerl?
Nach Absetzen von sudo pigpiod läuft die Audioausgabe gar nicht oder nur mit ca. 50% der Originalgeschwindigkeit.
Ein geschmeidiger sudo killall pigpiod führt sofort dazu, dass nach dem Kill die Audiogeschwindigkeit beim laufenden Musikstück (Nightwish: "Dead Gardens") sofort wieder auf 100% ansteigt.
Ich vermute, dass pigpio den I²S-Bus irgendwie ausbremst... --> siehe hier
Bisher kenne ich mich mit den GPIOs überhaupt nicht gescheit aus, aber folgende Lösungsvorschläge geistern in meinem Kopf herum:
- Die "normale" pigpio-Variante -lpigpio ohne Daemon bremst die Audioausgabe ebenfalls aus!
- Kann der pigpiod auf eine Teilmenge der GPIOs (hier GPIO4) eingeschränkt werden?
- hilft es, ein kleines C-Programm zu erstellen, das den GPIO4 ansteuert und mit system(<Pfad>/<Programmdatei>) aus audacious heraus aufgerufen wird?
- wäre eine andere Lib (wiringPi, bcm2835) evtl. besser geeignet?
Es ist zum ko... -- äh Mäuse melken!
schlizbäda
Edith meint dazu:
Ich habe pigpio durch wiringPi ersetzt. Um genau zu sein, verwende ich das in wiringPi enthaltene Kommandzeilenprogramm gpio zum Ändern von GPIO4. Erstens war das am schnellsten in den audacious-Quellcode eingebunden (nur der simple Aufruf der Funktion system("gpio ...") aus der <stdlib>) und zweitens (der wichtigere Grund) braucht audacious dazu keine Rootrechte. Und damit schalte ich GPIO4 problemlos, ohne die I²S-Kommunikation zu beeinträchtigen!
Den von mir geänderten audacious-Code (stable version 3.9) habe ich schon mal vorab als Github-Repository veröffentlicht. Jetzt bin ich gerade dran, noch eine LaTeX-Doku dafür zu verfassen, auf deutsch und auf englisch...