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:
LCD Picture

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'