C-Berry Touch - 3,5" und Java die VHDDBIA Methode

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Ich bastel gerade an einem kleinen Home Automation Projekt und habe mir das C-Berry Touch für eine Steuerungszentrale angeschafft. Es gibt vom Hersteller einige Beispiele in C wie das Display anzusteuern ist, und hier im Forum findet man auch einen Kernel-Treiber um es als Framebuffer Device zu nutzen. Ich bin zwar ein Anwendungsentwickler, bin aber eher in den objektorientierten Hochsprachen bewandert, daher setze ich das ganze auch mit Java um. Leider gibt es bisher keine brauchbaren Beispiele wie dieses Display in Java anzusprechen ist (wenn es überhaupt ohne Nutzung von C Libraries geht). Daher habe ich eine kleine VHDDBIA Methode entwickelt um das Display zu nutzen, die ich gerne teilen möchte, falls jemand anderes dies gebrauchen kann.

    Was ist denn bitte eine VHDDBIA Mehtode denkt ihr euch ?
    Die "Von hinten durch die Brust ins Auge" Methode!

    Direktes Ansteuern des Displays habe ich nicht geschafft. Ich habe auch versucht die Quellen vom Hersteller zu einer Library zu kompilieren und dann mit JNI oder mit JNA daraus eine Bindung zu Java herzustellen... alles ohne erfolg. Daher hab ich ein wenig in C experimentiert, und aus den Quellen des Herstellers ein simples Kontrollprogramm gemacht, das ich zwischen Java und dem Display einsetzen kann.

    Die Quellen vom Hersteller gibt es auf dessen Seite, hier das Steuerprogramm dazu:

    Wie man sieht einfach ein Thread der auf bestimmte Dateien reagiert. Eine Datei zum steuern der Helligkeit des Display, eine Datei zum anzeigen eines Bildes auf dem Display, eine Datei um das Programm zu beenden. Wenn das Display berührt wird, dann werden die Koordinaten in eine Ausgabedatei geschrieben.

    Jetzt muss ich in Java eigentlich nur noch diese Dateien liefern bzw die Ausgabe überwachen, was sich auch mit einem Thread prima lösen lässt.
    Hier ein erstes "Framework" für das GUI welches ich auf diese Weise anzeigen lassen möchte:

    Nach und nach werde ich dies nun erweitern. Mit simplen Bildmanipulations-Funktionen von Java lässt sich auf das BufferedImage Objekt ein GUI selbst zeichnen, und je nachdem was angezeigt wird kann dann auch die Eingabe abgefangen werden, und entsprechend darauf reagiert werden.

    Ja, es ist eine sehr seltsame Lösung, aber es Funktioniert. Es lassen sich ca 2 Bilder pro Sekunde übertragen, also vollkommen ausreichend für eine Steuerungskonsole. Es sollen ja keine großartigen Animationen ablaufen. Auf diese Art kriegt man zwar auch keinen "Swipe" wie von Smartphones bekannt hin, aber auch das ist ja nich zwingend notwendig. Einfaches Tasten-drücken reicht mir aus.

    Falls jemand konstruktive Vorschläge hat oder einen Weg kennt das Display direkter mit Java anzusprechen immer her damit ;)

    Das spannende ist nur, das die Koordinaten, die bei Berührung registriert werden irgendwie nicht mir den Pixelkoordinaten überein stimmen, und ich bisher nirgendwo Informationen gefunden habe wie diese Koordinaten zusammengesetzt sind.
    X und Y fangen bei ca 15 an und gehen beide bis ca 160. Seltsam, es muss also noch irgend eine Konvertierung eingebaut werden um auf Bild-Koordinaten zu kommen.

    Einmal editiert, zuletzt von RyuKajiya (20. November 2014 um 21:56)

  • Hallo,

    ich habe es hinbekommen. Ich benutze dazu JNA. Die libtft.so habe ich so (im tft_test - Verzeichnis der Demo-Software) gelinkt:

    gcc -shared -Wl,-soname,libtft.so.1 -o libtft.so.1.0 -lbcm2835 -lrt -lm *.o

    Dabei entsteht eine libtft.so.1.0. Damit JNA die findet, muss sie als 'libtft.so' in einem Unterverzeichnis 'linux-arm' eines lib-Verzeichnisses stehen und diese lib-verzeihnic muss im Classpath stehen.

    Java - Code schaut in etwa so aus:

    Der Vorteil ist: man kann so auf einem BufferedImage mit allem Komfort rendern, aber auch native mit den wenigen Funktionen im RAIO.

  • Hallo,

    ich habe heute das C-Berry Touch Display bekommen. Installation hat geklappt, habe die bcm2835 Treiber Version 1.39 (bcm2835-1.39.tar.gz) verwendet und - da ich den Raspberry Pi2 verwende - auch in der Datei bcm2835-1.36/src/bcm2835.h
    #define BCM2835_PERI_BASE 0x20000000
    geändert auf:
    #define BCM2835_PERI_BASE 0x3F000000

    Habe das dieser Anleitung entnommen:
    http://www.7soft.de/index.php?n=Raspi.C-Berry

    Die Anzeige das Programms tft_test funktioniert - nur die Buttons reagieren nicht auf den Druck. Liegt das daran, dass die Touch Funktionalität beim Treiber für den Raspberry PI 2 noch nicht implementiert ist?

    Würde mich freuen wenn jemand schon Erfahrung mit dem RPi2 und dem C-Berry Touch hat und mir hier weiterhelfen kann.

    Danke

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!