[ANNOUNCE] graphlcd 0.1.7

  • hallo,


    habe heute die vorerst letzte stable version vom graphlcd zusammengepackt,
    das ganze gibts jetzt als version 0.1.7:


    download:
    http://projects.vdr-developer.org/projects/graphlcd/files


    die aenderungen:


    graphlcd-base:
    - added futuba MDM166A driver from andreas brachold: http://projects.vdr-developer.org/issues/351
    - fixed compiler warnings: http://projects.vdr-developer.org/issues/352
    - added new attribute 'valign' (vertical alignment) for text objects.
    - text-object: fix to avoid stumbling scrolling
    - text-object: added support for alternative text / alternative condition
    - glcdskin: bugfixing and improvements


    vdr-plugin-graphlcd:
    - added wbreus logo pack (http://wbreu.htpc-forum.de/vdr…rgraphlcdplugin/index.php)
    - added utf8 conversion for correct display (http://projects.vdr-developer.org/issues/436)



    und wie immer bitte fleissig den bugtracker benutzen, wenn probleme auftauchen:


    http://projects.vdr-developer.org/projects/graphlcd/issues



    gruss,
    -- randy

  • Ich hätte da mal ein Problem beim Plugin. graphlcd-base kompiliert problemlos und ist bereits installiert


    Code
    g++ -O2 -fPIC -fPIC -c -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"graphlcd"' -DHAVE_FREETYPE2 -I/usr/src/dvb/linux/include -I./graphlcd-base/ -I/usr/src/vdr/include -I/usr/include -I/usr/include/freetype2 display.c
    display.c: In member function 'void cGraphLCDDisplay::DisplayMenu()':
    display.c:1663:43: error: invalid conversion from 'const char*' to 'char*'
    display.c:1674:47: error: invalid conversion from 'const char*' to 'char*'
    make: *** [display.o] Error 1
  • Zitat

    Original von Copperhead
    Ich hätte da mal ein Problem beim Plugin. graphlcd-base kompiliert problemlos und ist bereits installiert


    danke fuer den eintrag im bugtracker auf projects.vdr-dev;


    bitte teste mal folgende aenderungen:



    display.c, zeile 1590: const char * pszTmp2; statt char * psz...
    display.c, zeile 1668: pszTmp2='\0' statt *psz...


    mein gcc (4.3.2) wirft hier keine fehler, welchen compiler benutzt du?


    gruss,
    -- randy

  • Interessant. Gut zu wissen, dass die neuen Features bald verfügbar werden.


    ... und wenn es Probleme mit GIT gibt, dann kann ich evtl. aushelfen. Ich bin selber vor kurzem zu GIT umgestiegen und habe mir vorher ein Fachbuch zum Thema besorgt.

  • Hallo,


    irgendwie stehe ich im Moment etwas auf dem Schlauch. Wenn ich den VDR mit dem graphlcd-Plugin starte, erhalte ich eine NULL-Pointer-Exception für einen std::string. Ich habe das jetzt soweit debugged, das der Aufruf von

    Code
    return font.LoadFT2(file, cCharSetConv::SystemCharacterTable(), size);

    in der Methode bool cFontElement::Load(const std::string & url), im file layout.c die Exception auslöst. Problem ist hier, das die Funktion cCharSetConv::SystemCharacterTable() einen const char* Pointer zurückgibt der ja intern/implizit in einen std::string umgewandelt wird. Die Funktion cCharSetConv::SystemCharacterTable() liefert hier aber einen NULL-Pointer und somit gibt es die Exception. Nun ist aber die Frage, warum wird hier bei mir ein NULL-Pointer zurück gegeben?
    Any hints?


    Ich glaube, da müssen wir am code an der Stelle wohl nochmal ein paar checks einbauen. :]


    Gruss Steve135

  • So wie ich das verstehe gibt SystemCharacterTable NULL zurück, wenn es UTF-8 ist (siehe tools.h vom VDR), ansonsten den mit SetSystemCharacterTable gesetzten Code.


    Das war aber in graphlcd-0.1.5 auch schon drin .... trotzdem sollte man das NULL abfangen.
    Analog zu dem Aufruf in display.c müsste das so heißen (ungetestet!):

    Code
    return font.LoadFT2(file, cCharSetConv::SystemCharacterTable() ? cCharSetConv::SystemCharacterTable() : "UTF-8", size);


    BTW: das Paket heißt zwar richtig vdr-graphlcd, aber im tar sollte der Pfad graphlcd-0.1.7 sein, nicht vdr-graphlcd-0.1.7

  • FireFly


    Danke für den Hinweis! Mir war nicht klar, dass cCharSetConv::SystemCharacterTable() aus den VDR-Tools kommt. Ich dachte, das ist irgendeine System-Library-Methode. Nach der Code-Sichtung in tools.c, würde ich auch sagen das es so wie von Dir gepostet funktioniert. Werde es heute Abend gleich mal testen...


    Zitat

    Das war aber in graphlcd-0.1.5 auch schon drin .... trotzdem sollte man das NULL abfangen.


    Jain! In graphlcd-0.1.5 hieß das so:


    return font.LoadFT2(file, I18nCharSets()[Setup.OSDLanguage], size);


    Und da konnte m.E. nie ein NULL-Pointer zurück kommen...


    Nochmal Danke für den Tip! :]


    Gruss Steve135

  • :mahlzeit


    Ich habe gestern noch weiter getestet/geschmiedet. Wenn als Default an der Stelle "UTF-8" verwendet wird, habe ich keine korrekte Darstellung der Umlaute im LCD-Display. Stattdessen muss hier dann "ISO-8859-1" verwendet werden, damit werden alle Umlaute korrekt dargestellt. Weiterhin habe ich jetzt noch das Problem, dass das graphlcd-Plugin mit einem SegFault abschmiert wenn ich einen Menü-Punkt aktiviere. Da muss ich nochmal auf die Suche gehen, wo er sich dann im Code verläuft...


    Die Code-Passage müsste also wie folgt heissen:


    Code
    return font.LoadFT2(file, cCharSetConv::SystemCharacterTable() ? cCharSetConv::SystemCharacterTable() : "ISO-8859-1", size);


    Gruss Steve135

  • Hallo,


    schon wieder ich. Die nachfolgende Methode müsste auch noch so angepasst werden:



    Gruss Steve135

  • der segfault kommt bei:


    Code
    0xb7548007 in strchr () from /lib/libc.so.6
    (gdb) bt
    #0  0xb7548007 in strchr () from /lib/libc.so.6
    #1  0xb68577d0 in cGraphLCDDisplay::DisplayMenu (this=0x85e5ba8) at display.c:1678
    #2  0xb68583f2 in cGraphLCDDisplay::Action (this=0x85e5ba8) at display.c:453
    #3  0x08115bdc in cThread::StartThread (Thread=0x85e5ba8) at thread.c:244


    der bug st wohl seit dem Convert() drin. leider bekomme ich das jetzt nicht geloest, muss sich mal
    ein richtiger programmierer anschauen.


    das mit dem SystemCharacterZeugs scheint auch nicht gescheit zu gehen, beim ersten aufruf erscheint
    das epg mit ? anstelle von umlauten, nach menu ist es richtig. benutzt man kein UTF-8 geht alles korrekt.


    -- randy

  • :mahlzeit


    Bin wegen des SegFault auch gerade dort in der Gegend auf der Suche...
    Dabei ist mir nebenbei noch die Funktion strncopy aufgefallen. Wozu wird dort die Stringlänge nochmal ausgezählt!? Das macht doch nur Prozessorlast/Hitze!?


    Original:

    Code
    char * strncopy(char * dest , const char * src , size_t n)
    {
        strncpy(dest, src, n);
        if (strlen(src) >= n)
        {
            *(dest + n - 1) = 0;
        }
        return dest;
    }


    Nachfolgende Änderung ist deutlich schneller und erreicht das selbe...

    Code
    char * strncopy(char * dest , const char * src , size_t n)
    {
        strncpy(dest, src, n);
        *(dest + n - 1) = 0;
    
    
        return dest;
    }


    randy: Kannst Du das dann auch bitte gleich mal anpassen!?


    Danke, Gruss Steve135


    P.S.: Wenn ich bezüglich des SegFault weiter bin, melde ich mich dann nochmal.

  • Hallo,


    ich denke, ich habe das Problem gelöst. Die Methode 'cGraphLCDDisplay::DisplayMenu' sollte besser so aussehen!



    Dann klappt's wohl auch mit dem Nachbarn... :o)


    Gruss Steve135


    [Edit]
    Das ist jetzt natürlich alles noch ein wenig unübersichtlich (die Änderungen). Ich mache heute Abend nochmal ein diff über das gesamte Plugin, damit Randy die Änderungen besser nachverfolgen kann.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!