Vor geraumer Zeit habe ich mir ein LCD von
wallbraun-electronics.de
gekauft. Es gab zwar damals keinen Linuxtreiber für das LCD, aber in meinem Jugendlichen Leichtsinn, bin ich davon ausgegangen, dass es schon irgendwie gehen wird.
Doch wie sich schnell herausgestellt hat, war dies ein Irrtumm, zwar weiss ich dass beim LCD als Grafikcontroller ein Epson S1D13305 eingesetzt wird. Ausserdem wird die Verbindung zwischen dem LCD und USB über eine ftdi Chip hergestellt. Auch das sniffen des Datenverkehrs zwischen dem Rechner und dem LCD unter Windows hat mich nicht weitergebracht. Ich konnte zwar das LCD löschen und auch Text ausgeben, aber richtig rund ist das ganze nie gelaufen.
Daraufhin habe ich wallbraun-electronics.de angeschrieben ob es nicht irgendwo einen Linuxtreiber gibt.
M.Wallbraun hat sich dann als überaus netter Kontakt herausgestellt. Zwar existierte bis dahin kein Linuxtreiber, aber er war gerne bereit den bestehenden Windowstreiber an Linux anzupassen. Dabei habe ich dann gerne als Tester mitgewirkt. Leider ist der sourcecode für den Linuxtreiber LUIse-0.1.1 nicht freigegeben worden, aber der Treiber darf ohne Einschränkungen genutzt und weitergegeben werden. Wie die library installiert wird ist in der Documentation gut erklärt.
Die nächste Hürde war ein Programm zu finden das die LUIse-0.1.1 nutzt und somit das LCD unterstützt. Ich habe mich für lcd4linux entschieden. Das schreiben eines neuen Treibers in lcd4linux wird sehr gut erklärt und auch M.Reinelt ist seht hilfsbereit wenn man mal nicht weiterkommt. Der Treiber nennt sich drv_LUIse und ist in der aktuellen CVS Version von lcd4linux enthalten.
Hier ein Bild von meinem LCD:
Hier noch meine config:
Variables {
tick 500
tack 100
minute 60000
}
Display LUIse {
Driver 'LUIse'
# im moment immer 0, evtl. werden in einer der naechsten
# versionen der libluise mehr gleichzeitig unterstützt.
DeviceNum '0'
# Standard Wert, wird von drv_LUIse.c nicht ausgewertet
# falls um 90 grad gedreht Size ist = 240x320
Size '320x240'
Model 'generic'
# 0 = aus, 1 = an
Backlight '1'
# 0 = sehr hell, 255 = dunkel
Contrast '105'
# Wenn angegeben, wird das Bild in den 2ten Grafikspeicher
# geladen, gfxmode sollte dann auf 0 gesetzt werden.
Backpicture '/root/lcd4linux/bigwig4_normal.bmp'
# 0. gfxmode 0=or,1=and,2=xor
# 0. gfxinfert 0=normal,1=invert
# 0. ScreenRotation 0=normal,1=90 Grad, 2=180 Grad, 3=240 Grad
# 2. IORefresh 0=25ms....255=256*25ms
Mode '0.1.0.2'
}
Widget OS {
class 'Text'
expression '*** '.uname('sysname').' '.uname('release').' ***'
width 20
align 'M'
speed 120
update tick
}
Widget CPU {
class 'Text'
expression uname('machine')
prefix 'CPU '
width 9
align 'L'
update tick
}
Widget UseRAM {
class 'Text'
expression (meminfo('MemTotal') - meminfo('MemFree'))/1024
postfix ' MB RAM'
width 12
precision 1
align 'R'
update tick
}
Widget FreeRAM {
class 'Text'
expression meminfo('MemFree')/1024
postfix ' MB RAM'
width 12
precision 1
align 'R'
update tick
}
Widget RAM {
class 'Text'
expression meminfo('MemTotal')/1024
postfix ' MB RAM'
width 12
precision 0
align 'L'
update tick
}
Widget Busy {
class 'Text'
expression proc_stat::cpu('busy', 500)
# prefix 'Busy'
postfix '%'
width 9
precision 1
align 'R'
update tick
}
Widget BusyBar {
class 'Bar'
expression proc_stat::cpu('busy', 500)
expression2 proc_stat::cpu('system', 500)
length 10
direction 'E'
update tack
}
Widget Load {
class 'Text'
expression loadavg(1)
# prefix 'Load'
postfix loadavg(1)>1.0?'!':' '
width 10
precision 1
align 'R'
update tick
}
Widget LoadBar {
class 'Bar'
expression loadavg(1)
max 2.0
length 10
direction 'E'
update tack
}
Widget Eth0 {
class 'Text'
expression (netdev('eth0', 'Rx_bytes', 500)+netdev('eth0', 'Tx_bytes', 500))/1024
prefix 'eth0'
postfix ' '
width 10
precision 0
align 'R'
update tick
}
Widget Eth0Bar {
class 'Bar'
expression netdev('eth0', 'Rx_bytes', 500)
expression2 netdev('eth0', 'Tx_bytes', 500)
length 14
direction 'E'
update tack
}
Widget Temp {
class 'Text'
expression i2c_sensors('temp2_input')
# expression i2c_sensors('temp3_input')*1.0324-67
# width 9
precision 0
align 'L'
update tick
}
Widget TempBar {
class 'Bar'
expression i2c_sensors('temp2_input')
#expression i2c_sensors('temp3_input')*1.0324-67
min 20
max 80
length 10
direction 'S'
update tack
}
Widget Uptime {
class 'Text'
expression uptime('%d days, %H:%M:%S')
width 20
align 'R'
#prefix 'Up '
update 1000
}
Widget Time {
class 'Text'
#expression strftime('%a,%d/%m %H:%M:%S',time())
expression strftime('%A, %d.%b %H:%M:%S',time())
width 30
align 'L'
update 1000
}
Widget VCore {
class 'Text'
expression i2c_sensors('in0_input')
width 11
prefix '+'
precision 2
align 'L'
update 500
}
Widget plusDREI_V {
class 'Text'
expression i2c_sensors('in2_input')
width 11
prefix '+'
precision 2
align 'L'
update 500
}
Widget plusFUENF_V {
class 'Text'
expression i2c_sensors('in3_input')
width 11
prefix '+'
precision 2
align 'L'
update 500
}
Widget plusZWOELF_V {
class 'Text'
expression i2c_sensors('in4_input')
width 11
prefix '+'
precision 2
align 'L'
update 500
}
Widget CPUfreq {
class 'Text'
expression cpuinfo('cpu MHz')
# width 11
postfix ' MHz'
precision 1
align 'L'
}
Widget CPUmodel {
class 'Text'
expression '.:'.cpuinfo('model name').' ::.'
width 20
align 'M'
speed 120
update tick
}
Layout LUIse {
Row2 {
Col18 'OS'
}
Row3 {
Col5 'TempBar'
}
Row5 {
Col24 'Time'
}
Row6 {
Col24 'Uptime'
}
Row10 {
Col20 'VCore'
Col32 'CPUmodel'
}
Row11 {
Col20 'plusDREI_V'
Col35 'CPUfreq'
}
Row12 {
# Col20 'plusFUENF_V'
}
Row13 {
# Col20 'plusZWOELF_V'
Col43 'Busy'
Col33 'BusyBar'
}
Row14 {
Col3 'Temp'
}
Row18 {
Col34 'Eth0Bar'
}
Row20 {
Col34 'mailSchneider'
Col41 'mailGMX'
}
Row24 {
Col33 'RAM'
}
Row25 {
Col27 'Load'
Col37 'LoadBar'
}
Row26 {
Col33 'FreeRAM'
}
Row27 {
Col33 'UseRAM'
}
}
Display 'LUIse'
Layout 'LUIse'