Suspendoutput per svdrpsend Steuern

  • Hi,


    ich habe einen kleinen Patch erstellt, der es ermöglicht suspendoutput per svdrpsend zu steuern: http://www.minidvblinux.de/git/?a=viewblob&p=vdr-plugin-suspendoutput&h=045172a810e98bad784cdae4f22bcc305118b490&hb=HEAD&f=src/11_suspendoutput_svdrp.patch


    Claus

    MLD 5.4 mit vdr 2.4.1 - lirc yaUSBir - Octopus NET S2 - SCR - XFX GeForce 9300 mit Intel E3200 - 2GB RAM - WD Green 12TB HDD - SanDisk 64GB SSD - Lian Li PC-C37B - Samsung LE40A559
    MLD 5.4 mit vdr 2.4 - Raspberry Pi 3 - rpihddevice
    MLD 5.4 mit Squeeze Play - Raspberry Pi 2 - 32GB SD - 7" Touch TFT

  • Hi,


    das hat jetzt vlt. nicht unbedingt etwas mit dem Patch zu tun, aber bei mir lässt sich das Plugin auf dem Pi2 leider nicht bauen: :(


    Code
    1. raspberrypi suspendoutput # make clean all
    2. g++ -Werror=overloaded-virtual -Wno-parentheses -O2 -pipe -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard -g -ggdb -O0 -D__STDC_CONSTANT_MACROS -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -fPIC -fPIC -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -I/usr/src/linux/include/uapi/linux/dvb -c -DPLUGIN_NAME_I18N='"suspendoutput"' -o suspendoutput.o suspendoutput.c
    3. suspendoutput.c: In Elementfunktion »void cPluginSuspendoutput::CheckInactivityTimer()«:
    4. suspendoutput.c:358:20: Fehler: Elementfunktion »bool cCutter::Active()« kann nicht ohne Objekt aufgerufen werden
    5. !cCutter::Active() &&
    6. ^
    7. Makefile:67: die Regel für Ziel „suspendoutput.o“ scheiterte
    8. make: *** [suspendoutput.o] Fehler 1
    9. raspberrypi suspendoutput #
  • Eine kleine Ergänzung: Ich habe zusätzlich ein "STAT"-Kommando addiert, damit lässt sich der aktuelle Zustand abfragen:


    Code
    1. --- suspendoutput-2.0.0/suspendoutput.c 2015-05-15 17:18:31.759801546 +0200+++ suspendoutput/suspendoutput.c 2015-05-07 08:49:01.800319507 +0200@@ -275,6 +280,11 @@ ReplyCode = 250; return cString::sprintf("Resume output"); }+ if (strcasecmp(Command, "STAT") == 0) {+ ReplyCode = 250;+ return cString::sprintf("%s", cDummyPlayerControl::IsOpen() ?+ "suspended" : "resumed");+ } return NULL; }


    Mit einem einfachen Bash-Script, ausgeführt von irexec, lässt sich so der VDR bequem ein- und ausschalten und auch gleich die restlichen Geräte passen einstellen. Die relativ lange Anzeigedauer des Regenbogeneffekts von Hyperion von ca. 16s kommt daher, dass mein A/V-Receiver so lange braucht, bis er das HDMI-Signal auch wirklich ausgibt. Ersatz ist geplant… ;-)


    Shell-Script
    1. #!/bin/bashsusp=`svdrpsend -p 2001 plug suspendoutput stat | grep "suspended"`if [ -n "$susp" ]; then echo "suspended - turning on..." irsend --address lirc.reufer.local --count=3 SEND_ONCE RM-AAL006-ADVANCED HDMI2 irsend --address lirc.reufer.local --count=3 SEND_ONCE RM-ED006-TV POWER_ON hyperion-remote -e "Rainbow swirl fast" -d 16000 svdrpsend -p 2001 plug suspendoutput resu irsend --address lirc.reufer.local --count=3 SEND_ONCE RM-ED006-TV HDMI1else echo "not suspended - turning off..." hyperion-remote -e "Rainbow swirl fast" -d 1000 irsend --address lirc.reufer.local --count=3 SEND_ONCE RM-AAL006 POWER irsend --address lirc.reufer.local --count=3 SEND_ONCE RM-ED006-TV POWER_OFF svdrpsend -p 2001 plug suspendoutput suspfi


    Gruss
    Thomas

  • Dankeschön!


    Es scheint zu funktionieren:



    Allerdings wird es hier nicht aufgeführt:


    Code
    1. raspberrypi ~ # svdrpsend PLUG suspendoutput
    2. 220 raspberrypi SVDRP VideoDiskRecorder 2.2.0; Fri May 15 17:32:27 2015; UTF-8
    3. 214-Plugin suspendoutput v2.0.0 - Suspend output
    4. 214-SVDRP commands:
    5. 214- SUSP RESU
    6. 214 End of HELP info
    7. 221 raspberrypi closing connection
    8. raspberrypi ~ #
  • Ich habe es mal ergänzt. ;)


    Code
    1. raspberrypi suspendoutput-2.0.0 # svdrpsend PLUG suspendoutput
    2. 220 raspberrypi SVDRP VideoDiskRecorder 2.2.0; Fri May 15 18:21:54 2015; UTF-8
    3. 214-Plugin suspendoutput v2.0.0 - Suspend output
    4. 214-SVDRP commands:
    5. 214- SUSP RESU STAT
    6. 214 End of HELP info
    7. 221 raspberrypi closing connection
    8. raspberrypi suspendoutput-2.0.0 #



    Ich hänge mal das gepatchte Plugin an.
    Enthalten sind alle Patche von HIER und die Anpassungen von reufer und mir.

  • Vielen Dank! Das hat bei mir auch geklappt!


    Heinrich

    vdr 1.7.x auf/von Debian Wheezy mit Kernel 3.14.6, Alix.1c Board mit AMD Geode 500 MHz, PCTV 461e, Steuerung über Live-Plugin
    vdr 2.2.0 auf Raspbian GNU/Linux 7.6 mit Kernel 3.18.5+, Raspi B+, PCTV 461e, Plugins: dynamite, epgsearch, live

  • hab es nun auch laufen.
    habe via irexec ein skript auf die Powertaste gelegt mit der ich nun die Ausgabe ein und aus schalten kann.

  • Hallo an alle,


    ich habe vor auf einem rpi2 möglichst schnell zwischen vdr und kodi zu wechseln. Daher habe ich mir überlegt auch das supendoutput plugin zu verwenden. Ich habe die Version von 3PO verwendet (aus diesem Thread), es scheint ja sonst nichts neueres zu geben.


    Den Umschaltcode habe ich mir "zusammengeklaut":



    Jetzt zum Problem: Suspendieren etc funktioniert einwandfrei und ein "startapp /bin/sleep 9999" auch. Aber sobald man die Auflösung oder Refreshrate beim Raspi neu setzt, steigt der vdr aus, z.B.:


    Code
    1. root@raspberrypi:~# tvservice -e "CEA 31"
    2. Powering on HDMI with explicit settings (CEA mode 31)


    Dann steht im Log:


    Code
    1. Jun 8 15:52:09 raspberrypi vdr: [3885] rpihddevice: cOvgThread() thread reset
    2. Jun 8 15:52:09 raspberrypi vdr: [3877] OSD size changed to 1920x1080 @ 1


    Nun macht der kodi das halt auch, sogar beim Starten, sodass dann der vdr aussteigt und in meiner Shell-skript-loop neu startet, sodass dann kodi und vdr parallel laufen. Da scheint doch aber ein Problem mit dem rpihddevice zu sein, dass es nicht mitbekommt, dass der output suspendet ist, oder muss ich noch irgendwas in rpihddevice einstellen/patchen?


    Viele Grüße


    Tim

  • Hallo Tim


    Da scheint doch aber ein Problem mit dem rpihddevice zu sein, dass es nicht mitbekommt, dass der output suspendet ist, oder muss ich noch irgendwas in rpihddevice einstellen/patchen?

    rpihddevice unterstützt keinen Suspend-/Resume-Mechanismus und bleibt deshalb aktiv und reagiert entsprechend beim Wechseln der Auflösung mit einem OSD-Reset. Ich bin der Meinung, dass nicht jedes Ausgabeplugin dazu seine eigenen SVDRP-Befehle implementieren sollte, sondern VDR die Ausgabe mittels Wechsel des Ausgabedevices steuern kann. Das funktioniert ja bereits heute mit dem Dummydevice-Plugin und hier habe ich einen Patch vorgeschlagen, womit man das auch per SVDRP steuern kann. Klaus wird den Patch wohl in die nächste Version aufnehmen, wobei die letzte Version des Patches auch den OSD-Provider beim Wechsel konsequent löscht, und somit beim Dummydevice auf den Default-Provider zurückfällt und so auch beim rpihddevice das OSD komplett frei gibt.


    Gruss
    Thomas

  • Hallo Reufer,


    vielen Dank für die Antwort. Dieser Thread war mir gestern beim Lesen wohl durch die Lappen gegangen (oder ich habe den Zusammenhang nicht begriffen).


    Jedenfalls mit dem Patch von Dir aus dem Thread funktioniert es jetzt wohl! Ich habe erstmal nur wieder sleep und tvservice probiert, aber das klappt (wenn auch etwas langsamer als erhofft). Es ist doch richtig, dass man noch immer das dummydevice als primary definieren muss, wenn man rpihddevice in den Hintergrund schieben möchte, oder? Mit dbus2vdr wollte ich jetzt nicht anfangen...


    So sieht das LSTD bei mir (vdr-2.2.0) mit dummydevice aus:


    Code
    1. LSTD
    2. 250-1 [--] SAT>IP 0 192.168.1.3|DVBS2-1|DIGIBIT
    3. 250-2 [DP] rpihddevice
    4. 250 3 [D-]


    Also würde ich das dann so machen:



    Viele Grüße und Danke!


    Tim

  • Jedenfalls mit dem Patch von Dir aus dem Thread funktioniert es jetzt wohl! Ich habe erstmal nur wieder sleep und tvservice probiert, aber das klappt (wenn auch etwas langsamer als erhofft). Es ist doch richtig, dass man noch immer das dummydevice als primary definieren muss, wenn man rpihddevice in den Hintergrund schieben möchte, oder? Mit dbus2vdr wollte ich jetzt nicht anfangen...

    Ich habe im verlinkten Thread den Patch aktualisiert. Damit wird der OSD-Provider auch gelöscht, wenn das neue Primary-Device keinen eigenen mitbringt. Damit sollte es nun möglich sein, ein beliebiges Device (z.B. Streamdev-Client) als neues Ausgabedevice zu wählen, womit die Notwendigkeit des dummydevice-Plugins entfällt.


    Gruss
    Thomas

  • Hi Thomas,


    Ich habe im verlinkten Thread den Patch aktualisiert. Damit wird der OSD-Provider auch gelöscht, wenn das neue Primary-Device keinen eigenen mitbringt. Damit sollte es nun möglich sein, ein beliebiges Device (z.B. Streamdev-Client) als neues Ausgabedevice zu wählen, womit die Notwendigkeit des dummydevice-Plugins entfällt.


    ich verstehe, also könnte ich in meinem Fall den SAT/IP Client ("1") als Ausgabedevice wählen (auch wenn das gar kein Ausgabedevice ist) und bräuchte deshalb das dummydevice ("3") nicht. Ok, bringt vermutlich aber keinen Vorteil (ausser dass ich das Plugin "dummydevice" nicht benötige), oder?


    Jedenfalls vielen Dank nochmal für den Pointer zu dem Thread, gestern stand ich da auf dem Schlauch.


    Viele Grüße


    Tim

  • ich verstehe, also könnte ich in meinem Fall den SAT/IP Client ("1") als Ausgabedevice wählen (auch wenn das gar kein Ausgabedevice ist) und bräuchte deshalb das dummydevice ("3") nicht. Ok, bringt vermutlich aber keinen Vorteil (ausser dass ich das Plugin "dummydevice" nicht benötige), oder?

    Genau so ist es. Allerdings bezieht VDR dann immer noch den Kanal via satip-Plugin, lediglich die Ausgabe ist deaktiviert. Um auch wirklich alle VDR-Resourcen (also Transponder) freizugeben, benötigt man immer noch das suspendoutput-Plugin (dessen Name in dem Zusammenhang etwas verwirrend ist).


    Gruss
    Thomas

  • Wird denn dann überhaupt noch das suspendoutput Plugin benötigt?


    Claus

    MLD 5.4 mit vdr 2.4.1 - lirc yaUSBir - Octopus NET S2 - SCR - XFX GeForce 9300 mit Intel E3200 - 2GB RAM - WD Green 12TB HDD - SanDisk 64GB SSD - Lian Li PC-C37B - Samsung LE40A559
    MLD 5.4 mit vdr 2.4 - Raspberry Pi 3 - rpihddevice
    MLD 5.4 mit Squeeze Play - Raspberry Pi 2 - 32GB SD - 7" Touch TFT