text aufs LCD ausgeben

  • Hallo,


    ich möchte text aufs LCD ausgeben, da mir bis jetzt noch niemand sagen konnte wie das geht, habe ich schon selbst im /usr/lib/enigma2/python/ Verzeichnis gesucht.


    Ich habe schon im /usr/lib/enigma2/python/ Verzeichnis in allen Dateien nach Wörtern (z.B. Mainmenue) die im LCD ausgegeben werden, ohne erfolg gesucht.


    Bedeutet dies, daß die Routinen die Text aufs LCD ausgeben nicht in Python geschrieben sind?


    Außerdem ist mir aufgefallen, daß in enigma.py ein "import _enigma" steht, ich konnte aber keine Datei finden die mit _enigma beginnt.


    Gruß Ralf

    Two mit SSD, One, 7025-S, 7000-S

  • erstmal, versuch bloss nicht, aus enigma.py irgendwas brauchbares herauszulesen. Das ist eine automatisch erzeugte Wrapper-Datei. _enigma ist der in C++ geschriebene teil, der wird interne bereitgestellt.


    Was auf dem LCD dargestellt wird sind sog. "Summary Screens". In lib/python/Screens/InfoBarGenerics.py gibt es z.b. die InfoBarSummary.


    der bestimmt, was auf dem LCD angezeigt wird, z.b. wenn man sich in der InfoBar befindet.

  • Zitat

    Original von tmbinc
    Was auf dem LCD dargestellt wird sind sog. "Summary Screens". In lib/python/Screens/InfoBarGenerics.py gibt es z.b. die InfoBarSummary.


    der bestimmt, was auf dem LCD angezeigt wird, z.b. wenn man sich in der InfoBar befindet.


    das ist ähnlich wie die StandbySummary in der Standby.py:




    Ich habe es schon mit der StandbySummary versucht, aber mir ist damit keine LCD Ausgabe gelungen..



    Gruß Ralf

    Two mit SSD, One, 7025-S, 7000-S

    Einmal editiert, zuletzt von ralfK ()

  • ich habe inzwischen mein Testplugin ein wenig verändert, aber mir ist noch keine LCD Ausgabe gelungen.


    Nun weiß ich nicht mehr weiter.



    Gruß Ralf

    Two mit SSD, One, 7025-S, 7000-S

  • den Screen (der "für den bildschirm gemacht ist") muss eine funktion "createSummary" besitzen, die den Summary-Screen erzeugt (siehe z.b. InfoBarSummarySupport). Dieser wird dann automatisch gleichzeitig mit dem main screen auf dem lcd angezeigt.


    Ach, und bitte nicht "time.sleep" benutzen, das wird nicht funktionieren. das blockiert z.b. auch redraws. Stattdessen eTimer() mit callbacks benutzen.

  • Zitat

    Original von tmbinc
    den Screen (der "für den bildschirm gemacht ist") muss eine funktion "createSummary" besitzen, die den Summary-Screen erzeugt (siehe z.b. InfoBarSummarySupport). Dieser wird dann automatisch gleichzeitig mit dem main screen auf dem lcd angezeigt.


    So?



    Beim Ausführen erhalte ich einen bluescreen mit der der folgenden Fehlermeldung:
    "TypeError unbound method createSummary() must be called with LCDAusgSupport instance"


    "def playEntry(self)" gehört zum movieplayer.py wo die LCD-Ausgabe erfolgen soll.


    Gruß Ralf

    Two mit SSD, One, 7025-S, 7000-S

    Einmal editiert, zuletzt von ralfK ()

  • Es gibt keine Funktion "um text auszugeben" (egal ob TV oder LCD). Sondern es kann nur ein "Fenster" (=Screen) aktiv sein, welches halt einen Text ausgibt. Wie z.b. unter windows - da kann ja auch keine Anwendung einfach text ausgeben.



    Das Demo Plugin öffnet einen Screen, der auf dem TV dargestellt wird. Diesem Screen kann man nun einen zweiten screen an die hand drücken, der eine "zusammenfassung" (daher "summary") auf dem LCD ausgibt.


    D.h. du musst zwei screens bauen: einen für den TV, einen für das LCD. der LCD-Screen übernimmt vermutlich nur, was eh schon auf dem TV steht.


    du musst/darfst createSummary nicht per hand aufrufen. Sofern du ein createSummary definierst, wird es schon automatisch aufgerufen, sobald dein Screen angezeigt wird.

  • Zitat

    Original von tmbincD.h. du musst zwei screens bauen: einen für den TV, einen für das LCD. der LCD-Screen übernimmt vermutlich nur, was eh schon auf dem TV steht.


    Hallo tmbinc,


    je mehr Tipps und Infos ich von dir bekomme und je mehr ich mich damit befasse, um so größer und für mich unüberwindlicher werden die Probleme.


    Am Anfang habe ich recht blauäugig gedacht, daß die LCD Ausgabe ohne größere Probleme hinzubekommen sein müsste.


    Nun weis ich warum es in den Plugins die es z.Zt. gibt, keine LCD Ausgabe gibt.


    Nachdem es gutemine gelungen ist, in das "menü Fantastic" Plugin eine LCD Ausgabe einzubauen, habe ich es mit diesem Code versucht.


    Dies hat mich bis jetzt aber nicht wirklich weitergebracht.


    Wenn ich im der Mediaplayer.py die FantasticLCD class mit
    self.session.open(FantasticLCD,text)
    aufrufe, wird zwar auf dem LCD der aktuell gespielte Titel angezeigt, aber die FantasticLCD session wird erst beendet wenn ich z.B. die ok-Taste drücke.
    Das nächste Problem ist, daß danach wieder der Text Mediaplayer auf dem LCD steht.



    Zitat

    Original von tmbinc
    du musst/darfst createSummary nicht per hand aufrufen. Sofern du ein createSummary definierst, wird es schon automatisch aufgerufen, sobald dein Screen angezeigt wird.


    Habe inzwischen die entsprechende Zeile in mytest.py gefunden. Nun ist es vom Prinzip her klar.


    Laut dem Beispiel in standby.py muß ich den folgenden Code in die MediaPlayer.py einfügen.
    Nur weiß ich nicht wie ich den Text im LCD updaten kann?



    Irgendwas passt aber noch nicht. Beim Starten vom Mediaplayer bekomme ich den folgenden bluescreen:


    Gruß Ralf

  • Ich habe an der class LCDAusg einige Änderungen vorgenommen.
    Nun habe ich keinen bluescreen mehr, aber ein leeres LCD.


    Welche Befehle sind nun noch notwendig, das auf dem LCD auch ein Text ausgegeben wird?



    Gruß Ralf

    Two mit SSD, One, 7025-S, 7000-S

  • size=0,0 ist *definitiv* falsch. K.a. in welchem Kontext das bei gutemine irgendwelche effekte verursachen mag.


    LCDAusg ist das, was in "createSummary" zurückgegeben wird, ja?


    mache size bei beiden auf "132,64" (die normale LCD größe, links und rechts können bis zu 6 pixel fehlen, das ist normal).


    mit

    Code
    self["text"]=Label("hallo!")

    müsste dann zumindest initial ein "Hallo!" zu sehen sein.


    Vielleicht kannst du nochmal im ganzen erklären, was für ein Plugin du machst, das macht es einfacher, zusammenhänge zu erklären.


    Um den Text auf dem LCD dann parallel mit dem Text auf dem Bildschirm zu ändern, musst du in deinem "parent" (das ist der "Screen" der auf dem Bildschirm zu sehen ist, wo du ein "createSummary" hast) z.b. folgendes bauen:


  • Hallo tmbinc,


    vielen Dank für deine Tipps und den Beispielcode, damit hat die LCD-Ausgabe auf Anhieb wie gewünscht funktioniert.



    Zitat

    Original von tmbinc
    Vielleicht kannst du nochmal im ganzen erklären, was für ein Plugin du machst, das macht es einfacher, zusammenhänge zu erklären.


    Ich möchte den Mediaplayer (/usr/lib/enigma2/python/Screens/MediaPlayer.py) besser benutzbar machen. Ich möchte ihn auch ohne Bildschirm bedienen können.


    Damit er besser bedienbar ist, habe ich die folgenden Funktionen auf Tasten gelegt:


    left - Eintrag aus Playliste entfernen
    right - Eintrag zu Playliste hinzufügen
    nextBouquet - wechseln zur FileList
    prevBouquet - wechseln zur PlayList


    Das Löschen der PlayList möchte ich auf die "Shift TV" Taste legen.
    Die Shuffelfunktion von aladin25 möchte ich auf die "Shift Radio" Taste legen.


    Nur weiß ich nicht, was ich dazu in der keymap.xml eintragen muß.



    Und mit dem folgenden Code, wird der gerade gespielte und der nächste Titel jeweils 2-zeilig auf dem LCD angezeigt.




    Mit dem folgendem Code gebe ich den gerade selektierten Filelisteneintrag auf dem LCD aus.
    Zusätzlich würde ich gerne noch den nach dem selektierten Filelisteneintrag folgenden Eintrag ausgeben. Aber ich weiß nicht wie ich diesen abfragen kann.



    Gruß Ralf

    Two mit SSD, One, 7025-S, 7000-S

  • Zitat

    Original von tmbinc
    KEY_STOP und KEY_RECORD entspricht den geshifteten tasten.


    Danke, damit funktioniert es.



    Nun habe ich noch 2 Probleme:


    Ich möchte mit der "9"-Taste ans Listenende springen.
    Bei der Playliste funktioniert es.
    Aber bei der Fileliste kommt bei "len(self.filelist)" ein bluescreen. Gibt es außer "len" eine andere Möglichkeit die anzahl der Fileliste-Einträge zu bestimmen?


    Code
    def skip_listend(self):
    		if self.currList == "filelist":
    			self.filelist.moveToIndex(len(self.filelist))
    		else:
    			self.playlist.moveToIndex(len(self.playlist)-1)



    Ich möchte bei der Play- und Fileliste den gerade selektierten und den folgenden Eintrag aufs LCD ausgeben.
    Bei der Playliste funktioniert es inzwischen:




    Bei der Fileliste kann ich zwar mit
    text = self.filelist.getSelection()[0].getPath()
    den gerade selektierten Eintrag abfragen und dann aufs LCD ausgeben.


    Nur wie kann ich bei der Fileliste der dem selektierten folgenden Eintrag abfragen?
    "idx = self.filelist.getSelectionIndex()" funktioniert nicht (bluescreen).


    Gruß Ralf


    P.S. es dürfen außer tmbinc auch andere antworten

    Two mit SSD, One, 7025-S, 7000-S

  • Hallo,


    hier ist eine erste Testversion meines erweiterten Mediaplayers mit LCD-Ausgabe.


    Damit der Mediaplayer besser bedienbar ist, habe ich die folgenden Funktionen auf Tasten gelegt:


    "left" - Eintrag aus Playliste entfernen
    "right" - Eintrag zu Playliste hinzufügen
    "nextBouquet" - wechseln zur FileList
    "prevBouquet" - wechseln zur PlayList
    "Shift TV" - Playliste löschen
    "Shift Radio" - shuffelfunktion von aladin25
    "0" - Zum Listenanfang springen
    "8" oder "9" - Zum Playlistenende springen


    Zum installieren die Datei "MediaPlayer.py" einfach nach
    /usr/lib/enigma2/python/Screens/


    und die "keymap.xml" nach
    /usr/share/enigma2/
    kopieren.


    An der "keymap.xml" habe ich ab der Zeile 486 folgende 2 Zeilen eingefügt.

    Code
    <map context="MediaPlayerSeekActions">
    		<device name="dreambox remote control (native)">
    			<key id="KEY_YELLOW" mapto="pause" flags="m" />
    			<key id="KEY_GREEN" mapto="play" flags="m" />
    # ------- Mediaplayer erweiterung von ralfk -------------------------------------
    			<key id="KEY_STOP" mapto="shift_stop" flags="m" />
    			<key id="KEY_RECORD" mapto="shift_record" flags="m" />
    # ------- Mediaplayer erweiterung von ralfk -------------------------------------
    		</device>



    Gruß Ralf


    Die aktuelle Version gibt es unter
    etwas besser benutzbarer Mediaplayer mit LCD Ausgabe

  • Ich habe versucht ein Hilfefenster zu realisieren:



    aber wie kann ich die MessageBox auf dem Bildschirm vertikal zentrieren?


    Wegen der proportionalen Schrift sind die "-" Zeichen auf dem Bildschirm nicht untereinander.
    Gib es eine Möglichkeit den Text so zu formatieren, daß alle "-" Zeichen untereinander sind?



    Weiß zufällig jemand was die Tasten 5,2,4 und 6 für eine Funktion haben?
    Beim Testen konnte ich keine Funktion feststellen.



    Gruß Ralf

    Two mit SSD, One, 7025-S, 7000-S

    Einmal editiert, zuletzt von ralfK ()

  • Ich möchte gerne noch den nach dem selektierten Filelisteneintrag folgenden Eintrag ausgeben. Aber ich weiß nicht wie ich diesen abfragen kann.


    Bei der playlist ist es kein Problem:
    idx = self.playlist.getSelectionIndex()
    idx = idx + 1
    currref = self.playlist.getServiceRefList()[idx]
    text = currref.getPath()


    Aber wie mache ich es bei der Filelist?
    "idx = self.filelist.getSelectionIndex()" funktioniert nicht.
    "currref = self.filelist.getServiceRefList()[idx]" funktioniert auch nicht.


    Ich kann zwar mit "self.filelist.getSelection()[0]" den gerade selektierten Filelisteneintrag abragen, aber das hilft mir nicht weiter.


    Gruß Ralf

    Two mit SSD, One, 7025-S, 7000-S