[ANNOUNCE] CEC Plugin 0.1.0

  • Das CEC Plugin ermöglicht es, mit jeder Fernbedienung jedes CEC-fähige Gerät steuern zu können (zumindest die Grundfunktionen). Per Menü kann man auf ein "Profil" umschalten z.B. DVD-Player oder Fernseher. Im Plugin lassen sich CEC-Befehle definieren, die an die entsprechenden Gerät gesendet werden, z.B. Power ON/OFF. Des weiteren können Shell-Scripte ausgeführt werden. Achtung, gegenüber der letzten Version wurde der <stillpic> Tag geändert nach <player>.


    Das Plugin simuliert wahlweise einen Standbild-Player und gibt die Tasten der Fernbedienung in dem Modus an das aktive CEC Endgerät weiter. Die STOP-Tasten für den Standbild-Player sind konfigurierbar. Außerdem können "Toggle"-Aktionen konfiguriert werden, d.h. z.B. mit einem Tastendruck wird ein ausgeschaltetes Gerät eingeschaltet und umgekehrt.


    Voraussetzung sind die Pakete xerces-c und libcec. Getestet wurde das mit dem Pulse8 CEC Adapter.


    Im README ist eine einfache Doku enthalten und es gibt eine kommentierte Beispielconfig im contrib-Verzeichnis des Plugins.


    Ob die Konfiguration durch CEC Device-Adressen der Weisheit letzter Schluss sind, weiß ich noch nicht. Anregungen oder Ideen sind hier noch wilkommen.


    TODO-Liste:

    • Anpassbare Keymaps pro Device.


    Download unter http://www.uli-eckhardt.de/vdr…d/vdr-cecremote-0.1.0.tgz oder im Mercurial Repository unter http://hg.uli-eckhardt.de/.


    Bugreports, Wünsche und Ideen sind wie immer willkommen :bpl .

    VDR 2.4.1 Kodi 18.6-Leia
    Ubuntu 20.04, Kernel 5.6.13, Thermaltake DH102, ASHRock J4105B, CineS2 V6.5.
    Plugins:
    radio v1.1.0-6-g468280f , trayopenng 1.0.2, fritzbox 1.5.3, cdplayer 1.2.4, femon v2.4.0-GIT-d366856, menuorg 0.5.2, extrecmenung v2.0.4, streamdev-server v0.6.1-git, cecremote 1.5.0, osd2web 0.2.51, softhdvaapi v3.1.1-GITa41f6b2

  • jepp geht mir unter jessie genauso. FB-Anlerndialog kommt und dann gibts einen segfault.

  • I got the same segfault on raspian, raspberry pi, as well. Interestingly if I simply wait for the remote key learning to end the CEC functionality works surprisingly well.


    This is on raspbian with vdr 2.1.6 and changeset 18:20a5ba3bee27 of cecremote. The TV is a Philips.


    Most buttons on the remote work as expected. There are a couple of gotchas that I have encountered so far.
    The back button does not work... Kind of a showstopper but my workaround while I have time to troubleshoot it properly is to press the subtitles key. That will give the OSD message "No subtitles available" and will take me out of the menus!


    While watching recordings the Stop button does not work. Only way to end the recording is to jump to the end of the recording so that it ends and goes back to live mode again. This is slightly similar to problems I encountered with the cec support for vompclient. The solution there was to announce vdr as a CEC_DEVICE_TYPE_RECORDING_DEVICE instead of a CEC_DEVICE_TYPE_TUNER.


    I will continue my test and will also familiarise myself with the plugin code so that I can contribute.


    - Magnus

  • I was a bit quick in mentioning that I could access the menu using the "Find" button on the remote. Apparently the "Find" button generate a CEC_USER_CONTROL_CODE_CONTENTS_MENU that is mapped to the Setup menu. Since the "Find" button is the only available button on my Philips remote i experimented changing the mapping to kMenu instead of kSetup.


    Also adding the a mapping for the press of the back button, CEC_USER_CONTROL_CODE_EXIT, to kBack made the back button functional.


    The following is the diff of the changes made:



    - Magnus

  • I have done some investigations on why the Stop key does not work as intended on my setup. Turns out the Stop key is interpreted as a combo key. If no other key is pressed within a timeout the key press will be registered by libcec.


    The timeout is configurable by setting iComboKeyTimeoutMs field of CEC:libcec_configuration. By default the timeout is 1000ms.


    The Stop key is prevented to be processed since there is a check for key.duration to be equal to zero. I am not sure on the best way to handle this yet. A dirty workaround is to check for:

    Code
    1. if ((key.keycode >= 0) && (key.keycode <= CEC_USER_CONTROL_CODE_MAX) &&
    2. ((key.duration == 0 || key.duration > 1000)))


    Hints are welcome to solve it in a more proper way.


    - Magnus

  • Ich hätte da mal was zu meckern, bitte nicht böse sein:


    über den Sinn und Unsinn von VDR-Plugin-Configs in XML-Dateien kann man streiten, aber wenn man das macht, nimmt man dann einen XML-Parser, der seit 5 Jahren nicht mehr gewartet wird und die komplette DOM/SAX-Api unterstützt?
    Es geht doch nur drum ein Config zu lesen, da hätte man doch auch was schlankes/performates nehmen können?


    Hier gibts eine schöne Entscheidungshilfe:
    http://stackoverflow.com/quest…-parser-should-i-use-in-c


    Ich würde dann bei TinyXML oder PugiXML landen, was übrigens auch vom Satip-Plugin benutzt wird.

    SAT Hardware: Gibertini SE75 | DuraSat Dur-Line UK-24 | DD OctopusNET V2 Rack (Firmware 1.0.81) mit MaxS8
    Server: Asus M5A78L-M/USB3 | Sempron 145@2Cores | 8GB ECC RAM | PicoPSU | Debian Stretch 64Bit | VDR 2.4.0 mit SAT>IP, epgsearch, epg2vdr, vdr-epg-daemon
    Clients: RaspberryPI 2/3 | Yocto Poky Linux (Openembedded) 2.5+git | Linux Kernel 4.14+git | VDR 2.4.0 mit SAT>IP, RpiHDDevice, SkinDesigner, Remote, Graphlcd-ax206dpf, Extrecmenu, Femon, Mlist


    R.I.P: Gigaset M740 mit VDR von open7x0.org

  • I got the same segfault on raspian, raspberry pi, as well. Interestingly if I simply wait for the remote key learning to end the CEC functionality works surprisingly well.


    I have uploaded Version 0.1.1 which should hopefully fix this problem to http://www.uli-eckhardt.de/vdr…d/vdr-cecremote-0.1.1.tgz. Also your fixes with the keymap are included.

    VDR 2.4.1 Kodi 18.6-Leia
    Ubuntu 20.04, Kernel 5.6.13, Thermaltake DH102, ASHRock J4105B, CineS2 V6.5.
    Plugins:
    radio v1.1.0-6-g468280f , trayopenng 1.0.2, fritzbox 1.5.3, cdplayer 1.2.4, femon v2.4.0-GIT-d366856, menuorg 0.5.2, extrecmenung v2.0.4, streamdev-server v0.6.1-git, cecremote 1.5.0, osd2web 0.2.51, softhdvaapi v3.1.1-GITa41f6b2

  • man dann einen XML-Parser, der seit 5 Jahren nicht mehr gewartet wird


    Wo hast du denn die Info her, das der Code seit 5 Jahren nicht mehr gewartet wird?

    Ich würde dann bei TinyXML oder PugiXML landen, was übrigens auch vom Satip-Plugin benutzt wird.


    Ich schaue mir die noch mal an. Falls die Umstellung nicht zu aufwendig ist, stelle ich das noch auf was schlankeres um.

    VDR 2.4.1 Kodi 18.6-Leia
    Ubuntu 20.04, Kernel 5.6.13, Thermaltake DH102, ASHRock J4105B, CineS2 V6.5.
    Plugins:
    radio v1.1.0-6-g468280f , trayopenng 1.0.2, fritzbox 1.5.3, cdplayer 1.2.4, femon v2.4.0-GIT-d366856, menuorg 0.5.2, extrecmenung v2.0.4, streamdev-server v0.6.1-git, cecremote 1.5.0, osd2web 0.2.51, softhdvaapi v3.1.1-GITa41f6b2


  • Wo hast du denn die Info her, das der Code seit 5 Jahren nicht mehr gewartet wird?


    http://xerces.apache.org/xerces-c/releases_plan.html

    Ich schaue mir die noch mal an. Falls die Umstellung nicht zu aufwendig ist, stelle ich das noch auf was schlankeres um.


    :tup

    SAT Hardware: Gibertini SE75 | DuraSat Dur-Line UK-24 | DD OctopusNET V2 Rack (Firmware 1.0.81) mit MaxS8
    Server: Asus M5A78L-M/USB3 | Sempron 145@2Cores | 8GB ECC RAM | PicoPSU | Debian Stretch 64Bit | VDR 2.4.0 mit SAT>IP, epgsearch, epg2vdr, vdr-epg-daemon
    Clients: RaspberryPI 2/3 | Yocto Poky Linux (Openembedded) 2.5+git | Linux Kernel 4.14+git | VDR 2.4.0 mit SAT>IP, RpiHDDevice, SkinDesigner, Remote, Graphlcd-ax206dpf, Extrecmenu, Femon, Mlist


    R.I.P: Gigaset M740 mit VDR von open7x0.org

  • 0.1.1 funktioniert jetzt gar nicht mehr


    Kannst du mal schauen, ob das Plugin noch was ins Logfile geschrieben hat? Das schaut mir danach aus, als hättest du kein CEC-Adapter, bzw der Adapter wird nicht erkannt.

    VDR 2.4.1 Kodi 18.6-Leia
    Ubuntu 20.04, Kernel 5.6.13, Thermaltake DH102, ASHRock J4105B, CineS2 V6.5.
    Plugins:
    radio v1.1.0-6-g468280f , trayopenng 1.0.2, fritzbox 1.5.3, cdplayer 1.2.4, femon v2.4.0-GIT-d366856, menuorg 0.5.2, extrecmenung v2.0.4, streamdev-server v0.6.1-git, cecremote 1.5.0, osd2web 0.2.51, softhdvaapi v3.1.1-GITa41f6b2

  • Wo hast du denn die Info her, das der Code seit 5 Jahren nicht mehr gewartet wird?



    Zumindest in deren SVN ist aber gelegentlich noch ein Commit zu verzeichnen.


    PugiXML ist aber von der API schlanker und eleganter als xerces, die nächste Version kommt dann mit PugiXML, das macht mir für die konfigurierbaren Keymaps dann das
    Leben auch leichter ;D

    VDR 2.4.1 Kodi 18.6-Leia
    Ubuntu 20.04, Kernel 5.6.13, Thermaltake DH102, ASHRock J4105B, CineS2 V6.5.
    Plugins:
    radio v1.1.0-6-g468280f , trayopenng 1.0.2, fritzbox 1.5.3, cdplayer 1.2.4, femon v2.4.0-GIT-d366856, menuorg 0.5.2, extrecmenung v2.0.4, streamdev-server v0.6.1-git, cecremote 1.5.0, osd2web 0.2.51, softhdvaapi v3.1.1-GITa41f6b2

  • Kannst du mal schauen, ob das Plugin noch was ins Logfile geschrieben hat? Das schaut mir danach aus, als hättest du kein CEC-Adapter, bzw der Adapter wird nicht erkannt.

    Ja, da war was in der Richtung. Ich habe das System im Moment nicht lauffähig. Wenn der genaue Eintrag wichtig ist muss ich den RPi erst wieder anstöpseln.


    PugiXML ist aber von der API schlanker und eleganter als xerces, die nächste Version kommt dann mit PugiXML, das macht mir für die konfigurierbaren Keymaps dann das
    Leben auch leichter

    Dann bekommst du von mir relativ flott einen Patch, der dann auch TinyXML unterstützt. vdr-satip unterstützt auch beide, TinyXML ist aber in den Arch Repositories und PugiXML nicht.

  • PugiXML ist aber von der API schlanker und eleganter als xerces, die nächste Version kommt dann mit PugiXML, das macht mir für die konfigurierbaren Keymaps dann das
    Leben auch leichter

    Copperhead wrote:

    Dann bekommst du von mir relativ flott einen Patch, der dann auch TinyXML unterstützt. vdr-satip unterstützt auch beide, TinyXML ist aber in den Arch Repositories und PugiXML nicht.


    Ich würde auch für TinyXML voten. Ich benutzte Yocto/Openembedded, TinyXML geht da OOTB. Das gilt auch für Raspbian. PugiXML wäre aber auch ok, dann würde ich nen Recipe bauen.

    SAT Hardware: Gibertini SE75 | DuraSat Dur-Line UK-24 | DD OctopusNET V2 Rack (Firmware 1.0.81) mit MaxS8
    Server: Asus M5A78L-M/USB3 | Sempron 145@2Cores | 8GB ECC RAM | PicoPSU | Debian Stretch 64Bit | VDR 2.4.0 mit SAT>IP, epgsearch, epg2vdr, vdr-epg-daemon
    Clients: RaspberryPI 2/3 | Yocto Poky Linux (Openembedded) 2.5+git | Linux Kernel 4.14+git | VDR 2.4.0 mit SAT>IP, RpiHDDevice, SkinDesigner, Remote, Graphlcd-ax206dpf, Extrecmenu, Femon, Mlist


    R.I.P: Gigaset M740 mit VDR von open7x0.org

  • Ich würde auch für TinyXML voten da dies auch von Rasbian unterstützt wird.

    Gruß
    Frodo

  • TinyXML ist aber in den Arch Repositories und PugiXML nicht.


    Jetzt weiss ich wieder warum ich Xerces verwendet hatte, der Parser ist fast überall dabei. Ich will keine zwei Parser unterstützen, das bläht den Code unnötig auf und ich müsste die beide testen.


    Kann man sich auf PugiXML einigen? Ansonsten schmeisse ich meine Änderungen wieder aus dem Repository und es bleibt bei Xerces.

    VDR 2.4.1 Kodi 18.6-Leia
    Ubuntu 20.04, Kernel 5.6.13, Thermaltake DH102, ASHRock J4105B, CineS2 V6.5.
    Plugins:
    radio v1.1.0-6-g468280f , trayopenng 1.0.2, fritzbox 1.5.3, cdplayer 1.2.4, femon v2.4.0-GIT-d366856, menuorg 0.5.2, extrecmenung v2.0.4, streamdev-server v0.6.1-git, cecremote 1.5.0, osd2web 0.2.51, softhdvaapi v3.1.1-GITa41f6b2

  • Wir können uns auf TinyXML einigen :P


    Im satip-Plugin ist das hier der einzige Unterschied:


  • Jetzt weiss ich wieder warum ich Xerces verwendet hatte, der Parser ist fast überall dabei. Ich will keine zwei Parser unterstützen, das bläht den Code unnötig auf und ich müsste die beide testen.
    Kann man sich auf PugiXML einigen? Ansonsten schmeisse ich meine Änderungen wieder aus dem Repository und es bleibt bei Xerces.


    TinyXML ist auch überall dabei. In deinem Repo sehe ich gerade, dass du schon auf PugiXML umgestellt hast, dann lass das einfach so. Inzwischen gibts es auch TinyXML-2, eigentlich sollte man sowieso das nehmen für neue Implementierungen.

    SAT Hardware: Gibertini SE75 | DuraSat Dur-Line UK-24 | DD OctopusNET V2 Rack (Firmware 1.0.81) mit MaxS8
    Server: Asus M5A78L-M/USB3 | Sempron 145@2Cores | 8GB ECC RAM | PicoPSU | Debian Stretch 64Bit | VDR 2.4.0 mit SAT>IP, epgsearch, epg2vdr, vdr-epg-daemon
    Clients: RaspberryPI 2/3 | Yocto Poky Linux (Openembedded) 2.5+git | Linux Kernel 4.14+git | VDR 2.4.0 mit SAT>IP, RpiHDDevice, SkinDesigner, Remote, Graphlcd-ax206dpf, Extrecmenu, Femon, Mlist


    R.I.P: Gigaset M740 mit VDR von open7x0.org

  • Im satip-Plugin ist das hier der einzige Unterschied:


    Logisch, das ist ja auch die einzige Stelle wo XML geparsed wird. Der Parser für mein Plugin ist da deutlich aufwendiger, da ich hierarchische Konfigurationsoptionen habe (der Hauptgrund warum ich mich doch eher schweren Herzens für XML entschieden habe). Schaue dir mal cecconfigfileparser.cc im CECPlugin an, das sind derzeit 367 Zeilen (Tendenz steigend) nur fürs Parsen der Config.

    VDR 2.4.1 Kodi 18.6-Leia
    Ubuntu 20.04, Kernel 5.6.13, Thermaltake DH102, ASHRock J4105B, CineS2 V6.5.
    Plugins:
    radio v1.1.0-6-g468280f , trayopenng 1.0.2, fritzbox 1.5.3, cdplayer 1.2.4, femon v2.4.0-GIT-d366856, menuorg 0.5.2, extrecmenung v2.0.4, streamdev-server v0.6.1-git, cecremote 1.5.0, osd2web 0.2.51, softhdvaapi v3.1.1-GITa41f6b2