das Web-Interface zugänglich machen könnte. Viele wollten auf diese Art
beim Abspielen von Filmen mit der XBOX das Display der DBox für die
Anzeige verwenden, andere das Display aus eigenen Scripten heraus
ansprechen. Ich habe dazu mal den nhttpd aufgebohrt und die ersten
Tests verliefen ermutigend. Wenn einer der Devs Interesse hat, würde ich
ihm die modifizierten Sourcen gern zukommen lassen, vielleicht finden sie
ja einen Weg in's CVS. Zur Info schon mal ein Auszug aus der geänderten
api_doku.txt:
Code: Alles auswählen
**********************************************************************************************
19. LCD Interface
**********************************************************************************************
Handler: http://dbox/control/lcd
Parameter: lock, clear, png, raw, line, rect, xpos, ypos, size, font, color, text, update
Rückgabe: ok /error
Ansteuerung des LCD-Interfaces über das Web-Interface
Folgende Parameter werden dabei unterstützt:
lock=n : n=1 -> das Display wird bis auf Widerruf für Neutrino gesperrt
n=0 -> das Display wird wieder für Neutrino freigegeben
clear=n : n=1 -> das Display wird gelöscht (sollte ganz vorn stehen)
n=0 -> das Display wird vor der neuen Ausgabe nicht gelöscht (kann entfallen)
png=Dateiname : eine lokal auf der Box liegende PNG-Datei wird in's Display geladen
(z.B. /share/tuxbox/lcdd/icons/setup.png als Hintergrund)
raw=x,y,xs,ys,d1,..,dn : überträgt die Daten d1 bis dn an die Position (x,y) im Display mit
xs Spalten und ys Zeilen. Die Daten werden dezimal übertragen. Je-
der Wert repräsentiert dabei 8 Punkte innerhalb einer Zeile. Das
höchstwertige Bit entspricht dem Pixel ganz links. Sollen in einer
Zeile 9 Pixel geschrieben werden, sind dafür zwei Datenwerte nötig,
auch wenn die restlichen 7 Bit des zweiten Wertes nicht verwendet
werden. Die Werte werden zeilenweise hintereinandergeschrieben.
Für ein Rechteck von 8 Zeilen zu 9 Pixeln sind also 16 Werte erfor-
derlich, beginnend mit dem Wert für die 8 Pixel ganz links oben, ge-
folgt von dem Wert für das letzte Pixel der obersten Zeile (mit einem
Wert von 128 wenn es gesetzt werden soll), dann der Wert für die ers-
ten 8 Pixel der zweiten Zeile usw.
line=x1,y1,x2,y2,col : zeichnet eine Linie von (x1,y1) nach (x2,y2) mit der Farbe col
col=0 -> aus, col=1 -> leuchtend, col=2 -> invertierend
rect=x1,y1,x2,y2,col1,col2: zeichnet ein Rechteck mit der linken oberen Ecke (x1,y1) und der
rechten unteren Ecke (x2,y2), der Rahmenfarbe col1 welches mit
der Farbe col2 ausgefüllt wird (Farben siehe "line")
update=1 : an dieser Stelle wird das Display upgedatet. Somit kann man zunächst einige Aus-
gaben machen und dann erst alles zusammen updaten. Somit wird ein Flackern des
Displays verhindert. Sequenzen ohne diesen Parameter haben auf die Anzeige also
zunächst erst mal keine Auswirkung.
Die folgenden Parameter betreffen nur die Textausgabe
text= : Auszugebender Text in UTF-8 Format (Leerzeichen = %20, Zeilenumbruch = %0A usw.)
xpos=nn : Position des ersten Zeichens horizontal (default 10)
ypos=nn : Position der linken oberen Ecke des ersten Zeichens (default 10)
size=nn : Größe der Textes (default 12)
color=n : Textfarbe (default 1, siehe "line")
font=n : zu verwendender Font (default 0)
n=0 -> micron.ttf, n=1 -> micron_bold.ttf, n=2 -> pakenham.ttf
Hinweise:
----------------------------------
Innerhalb eines Aufrufes können mehrere Kommandos gleichzeitig angegeben werden. Allerdings müs-
sen sie von unterschiedlichem Typ sein. Bei z.B. zwei rect-Parametern innerhalb eines Aufrufes
wird der zweite Parameter ignoriert. Abgearbeitet werden die Kommandos in der Reihenfolge:
lock, clear, png, raw, line, rect, xpos, ypos, size, color, font, text, update.
Der Parameter lock ist erforderlich, da ohne Sperrung das Displays für Neutrino die über den
nhttpd gemachten Ausgaben auf dem Display spätestens nach einer Sekunde durch das zyklische
Update von Neutrino wieder überschrieben werden würden. Daher ist bei der ersten Ausgabe lock=1
zu setzen. Wird das Display nicht mehr benötigt, muß lock=0 gesetzt werden, damit Neutrino wieder
Zugriff auf das LCD erhält.
Beispiel:
----------------------------------
wget -O /tmp/nhttpd.res 'http://localhost/control/lcd?lock=1&clear=1&rect=10,10,110,50,1,0&xpos=20&ypos=27&size=22&font=2&text=%20Hallo%20Welt%0A%C3%9Cbungstext&update=1'
wget -O /tmp/nhttpd.res 'http://localhost/control/lcd?rect=10,10,110,50,1,2&update=1'
um das Display wieder freizugeben, sollte zum Schluß
wget -O /tmp/nhttpd.res 'http://localhost/control/lcd?lock=0'
ausgeführt werden.
Code: Alles auswählen
#!/bin/sh
# Das Script mit den Rechten 755 nach /tmp/ kopieren und mit "/tmp/test &" aufrufen
# Beenden über "touch /tmp/test.stop"
remotebox="localhost"
wget -q -Y off -O /dev/null "http://$remotebox/control/lcd?lock=1&clear=1&png=/share/tuxbox/lcdd/icons/setup.png"
while [ ! -e /tmp/test.stop ]; do
datenow=`date +%H:%M:%S`
secs=`date +%S`
secs=`expr $secs \* 100`
secs=`expr $secs \/ 60`
pos=`expr 10 + $secs`
wget -q -Y off -O /dev/null "http://$remotebox/control/lcd?rect=10,18,110,58,1,0&xpos=21&ypos=47&size=34&font=2&text=$datenow"
wget -q -Y off -O /dev/null "http://$remotebox/control/lcd?rect=10,18,110,23,1,0"
wget -q -Y off -O /dev/null "http://$remotebox/control/lcd?rect=10,18,$pos,23,1,1"
wget -q -Y off -O /dev/null "http://$remotebox/control/lcd?rect=10,53,110,58,1,0"
wget -q -Y off -O /dev/null "http://$remotebox/control/lcd?rect=$pos,53,110,58,1,1&update=1"
sleep 1
done
rm /tmp/test.stop
wget -q -Y off -O /dev/null "http://$remotebox/control/lcd?lock=0&clear=1&update=1"
Mit einer anderen Adresse als "localhost", also mit der entsprechenden
Box-IP kann dieses Script auch auf einer anderen Box oder einem Linux-
PC (oder Windows-PC mit Cygwin) laufen und das Display der eingetra-
genen Box steuern.