grafik LCD als normaler user ansteuern, wie geht das?

  • Hallo,


    bei mir läuft der VDR nicht als root sondern als ein seperater user.
    Nun hatte ich das Problem, daß ich keine Anzeige auf das Display bekommen habe.


    Was muß ich ändern, daß dies auch möglich ist?
    Wenn ich dem Device (/dev/lp0) die rechte für den user gebe, geht es troz dem nicht.


    Wenn ich es mal mit diesem user mit dem program showpic probiere, dann bekommme ich diese Meldung:

    Code
    ./showpic /usr/local/src/VDR/PLUGINS/src/graphlcd/graphlcd/goodbye.glcd
    ERROR: ioperm failed! errno=1 (cGraphLCDDevice::Init)
    ERROR cannot initialize cGraphLCDGraphLib object


    Wie kann ich das als normaler user ausführen?

  • Hi matrix79,


    das geht zur Zeit nicht, soll aber in einer der kommenden Versionen möglich sein.


    Gruss
    RalfW

    ******************************

    Gen2Vdr 2.0
    ASUS K8N-E Deluxe, AMD Semperon 3000, 762 MB RAM
    Nova-S + Nova SE2 + DigiStar DVB-S
    Toschiba DVD-LW,
    IDE 160 GB, 200 GB, S-ATA 500 GB
    Wakeup Board 2.0,
    Genius SW-HF5.1 5000 Beech Wood Boxenset

  • Hi,
    tja, Ralf hat (leider) Recht. Das geht zur Zeit leider noch nicht :(
    Um das irgendwann mal hinzukriegen, schwebt mir ein Daemon vor, der nur für die Ausgabe zuständig ist und beim Systemstart (vom root) gestartet wird. Ähnlich wie der LCDd von lcdproc. Das sind aber leider wilde Designänderungen an dem Plugin nötig. Erwarte die Lösung also bitte nicht in Kürze...
    Gruss, Carsten

  • zuallererst: hallo an alle, mein erster beitrag.


    es geht schon, wenn der printerport 'sauber' ueber ioctl und "/dev/parportX' angesprochen wird. da wird auch kein daemon oder dgl. benoetigt.


    habe fuer das optrex 323 einen treiber erstellt und eine verbindung glcd <-> treiber. ergebnisse siehe anhang. zzt. hat das ganze noch keine release-quality (darstellungsfehler, von denen ich nicht weiss woher die kommen (siehe bild ZDF), sauberes Makefile, ... . ich hoffe, die darstellungsfehler liegen nicht an der etwas 'ungewoehnlichen' aufloesung 117x62 (eigent. koennte das display 121x62 darstellen, jew. die beiden linken und rechten spalten aber nur mit doppelter breite -> unbrauchbar fuer 'lineare' darstellung). der treiber selber sollte eigentl. keine darstellungsfehler haben (bereits in anderen tests verifiziert).


    der eigentl. treiber basiert auf einem freebsd-projekt, der entwickler hat dort sauber mit ioctl gearbeitet, dies habe ich unter linux uebernommen (sideeffect: mein treiber sollte unter freebsd und linux funktionieren - ein paar #ifdef's machen's moeglich .. ;) geschwindigkeitseinbussen kann ich nicht wirklich feststellen, habe aber im treiber mit einem buffer gearbeitet, der die zum druckerport (/dev/parportX) gesendeten daten auf ein minimum reduziert (der freebsd-treiber beschraenkte sich auf textmodus und rudimentaere gfx-darstellung) - aber auch bei sturer alles-immer-wieder-neu-zeichnen ist die darstellung mehr als ausreichend schnell IMHO.


    ergaenzend zu oben und zum thema dieses threads: vdr laeuft bei mir als user. einzige aenderung: der user wurde zur gruppe 'lp' hinzugefuegt.


    gruesse
    wastl

  • Zitat

    Original von wastl
    zuallererst: hallo an alle, mein erster beitrag.


    es geht schon, wenn der printerport 'sauber' ueber ioctl und "/dev/parportX' angesprochen wird. da wird auch kein daemon oder dgl. benoetigt.


    heya,



    sieht ja schon mal ganz gut aus ;)


    kannste evtl ein codebeispiel posten wie das dann laeuft? dann kann ich meine
    teile vom treiber mal umschreiben und testen ...



    gruss,
    -- randy

  • die grundlage fuer meinen treiber war wie oben erwaehnt die software folgenden projekts:
    http://www.thiemo.net/projects/orpheus/optrex/


    die software:
    http://www.thiemo.net/projects/orpheus/optrex/LCD.tgz



    oeffnen von /dev/parportX (linux benoetigt zusaetzlich ein PPCLAIM, freebsd anscheinend nicht, ppdev => zb. "/dev/parport0")



    int openPP(const char ppdev[]) {
    int fd;


    if ((fd = open(ppdev, O_RDWR)) < 0) {
    fprintf(stderr, "Error opening %s: %s\n",
    ppdev, strerror(errno));
    return -1;
    }
    if ( ioctl(fd,PPCLAIM,0) ) {
    fprintf(stderr, "Error claiming %s: %s\n",
    ppdev, strerror(errno));
    return -1;
    }
    return fd;
    }



    die 'lowlevel'-ansteuerung habe ich fast 1:1 uebernommen, die essentielle funktion ist 'dowrite', diese sendet die daten zum druckerport (alle anderen funktionen wie WriteSED, PutCtrl, PutData greifen darauf zu)



    void dowrite(int fd, u_int8_t data) {
    u_int8_t foo;


    foo = data;
    if (ioctl(fd, PPWDATA, &foo) < 0) {
    fprintf(stderr, "ioctl() failed: %s.\n", strerror(errno));
    exit(23);
    }
    }

    (Anmerkung: PPISDATA => FreeBSD, PPWDATA => linux)






    anbindung an GLCD:


    Im cGraphLCDDevice::cGraphLCDDevice (void):



    lptDevice="/dev/parport0";




    int
    cGraphLCDDevice::Init (void) {
    int x;
    struct timeval tv1, tv2;


    if(!lptDevice) {
    esyslog("graphlcd plugin: ERROR LPT Port not specified (cGraphLCDDevice::Init)\n");
    return -1;
    }


    lptFD = openPP(lptDevice);
    if(lptFD < 0) {
    esyslog("graphlcd plugin: ERROR could not open LPT Port (cGraphLCDDevice::Init)\n");
    return -1;
    }


    ... initialisierung ...




    hoffe, dass man damit etwas anfangen kann (und ich die tags richtig gesetzt habe und die zeilenvorschuebe nicht verschluckt werden ....


    gruesse
    /wastl

  • Super wastl, :respekt
    ich werd's mir mal anschauen und ein bischen rumprobieren...
    Danke, Carsten

  • hallo,
    die optrex-anbindung schreitet voran, die darstellungsfehler habe ich fast vollstaendig beseitigen koennen (Set8Pixels ist nicht gerade logisch, habe ein paar 'schreibtischtests' benoetigt bis ich die funktionsweise und randbedingungen dieser funktion vollstaendig durchschaut habe ;)
    ein problem gibt's aber noch (siehe 1. bild, uhrzeit: dieser fehler tritt nur am ende des displays auf und nur bei 'textausgabe'. auch bei filmtiteln, wenn diese bis an den rechten rand gehen ab und zu)


    die im ersten beitrag angehaengten bilder habe ich ca. 10 minuten geschossen, nachdem das erste mal etwas brauchbares angezeigt worden ist, in der zwischenzeit bin ich schon ganz zufrieden damit. einige codebereinigungen noch bis man das ganze releasen kann ('mal schauen, ob sich's vor meinem urlaub noch ausgeht ..


    das 2. neue bild zeigt die bereinigte darstellung v. elementen, die auf Set8Pixels basieren (anm: als oesterreicher muss ich endlich einmal einen screenshot mit einem orf-programm machen ;) das logo ist husch-pfusch hinge'gimp'ed (nicht zu uebersehen ..)



    anregung:
    habe testhalber einen menuepunkt 'Backlight on/off' hinzugefuegt. funktioniert auch -> kann die hintergrundbeleuchtung jetzt ueber's menue ein- und ausschalten. weiss jetzt nicht, ob die bereits vorhandenen displays auch softwareseitig die beleuchtung ein/ausschalten koennen, wenn ja, waere vielleicht eine aufnahme eines solchen settings ueberlegenswert ?! (siehe bild 1)


    frage:
    ist es moeglich, beim replay die foldernamen wegzulassen (habe zb einen folder: 'v Musicvideos'. spiele ich daraus ein video, sehe ich ueber der timebar 'v Musicvideos~' und ein paar buchstaben vom eigentl. namen des videos. interessant ist aber eigentl. imho nur der name des videos.
    (falls diese frage bereits gestellt wurde: mea culpa, war zu faul zum suchen und gerade ohnedies im schreiben ;)


    gruesse
    /wastl

  • Zitat

    Original von wastl
    anregung:
    habe testhalber einen menuepunkt 'Backlight on/off' hinzugefuegt. funktioniert auch -> kann die hintergrundbeleuchtung jetzt ueber's menue ein- und ausschalten. weiss jetzt nicht, ob die bereits vorhandenen displays auch softwareseitig die beleuchtung ein/ausschalten koennen, wenn ja, waere vielleicht eine aufnahme eines solchen settings ueberlegenswert ?! (siehe bild 1)
    /wastl


    heya,


    ich bin auch grad am ueberlegen wegen backlight. bei den ks0107 based lcd's
    waers auch moeglich, wenn man cs1+cs2 zusammenschaltet und dann am freien
    port mit einem bs170 o.aehn. das backlight steuert...


    kannst du den diff hier mal reinsetzen oder mir mailen bitte? wuerd gerne
    "deine pins" uebernehmen (die meisten anderen schaltungen nehmen pin17/SELECT
    dafuer her - was aber auch ne komplette aenderung fuer die anschaltung von
    ks0107er display bedeuten wuerde...)


    gruss,


    -- randy

  • hallo,


    fuer das optrex 323 duerfte sich eine standardanbindung durchgesetzt haben (meines wissens gibt es ein winamp-plugin dafuer, orpheus projekt v. thiemo (auf dessen software mein treiber basiert) und noch ein anderes projekt (weiss den namen nicht mehr). all diese verwenden diesselbe anbindung - duerfte daraus resultieren, dass optrex eine referenz-test applikation zur verfuegung stellt / gestellt hat und dazu eine anschlusstabelle:


    http://www.thiemo.net/projects/orpheus/optrex/KurzInfo.pdf



    wie aus dem pdf zu sehen, wird einfach pin 3 (lcd-seitig) = pin 9 (pc-seitig (data 7)) entweder gesetzt (backlight on) oder nicht (backlight off)


    die softwareseitige ansteuerung habe ich 1:1 von thiemo uebernommen:
    bei jedem WriteSED (quelle: siehe oben projekt orpheus) setzt er entweder das bit fuer DATA7 oder nicht ..


    oder kurz zusammengefasst: pin 17 verwende ich nicht, da das optrex mit 7 daten/steuerleitungen auskommt (DATA 0-5,7) und ich die verkabelung von den anderen projekten und der referenz-app uebernommen habe (wer hat schon gerne 470 verschiedene verkabelungen wie bei den diversen hd44780-projekten leider gang und gaebe ...)



    was auch noch nett geht beim optrex 323:
    softwareseitige kontrasteinstellung (32 stufen: 0 - 31).
    auch das habe ich ins menue aufgenommen mittlerweile. (dies ist aber ein standardbefehl des controllers SED1531 (der das optrex ansteuert) --> keine hardwareseitigen aenderungen notwendig (wie zb. bei hd44780-displays afair)


    backlight on / kontrast habe ich einstweilen via #if defined(OPTREX323) hineingehackt.


    habe jetzt nur noch ein problem, dass ab und zu ein ppdev/parport* kernel-modul abschmiert (kernel oops) und dann die ansteuerung tot ist. haengt womoeglich mit einem (unbeabsichtigt) laufenden cupsd zusammen ...


    gruesse
    /wastl

  • heya,


    Zitat

    Original von wastl
    hallo,


    wie aus dem pdf zu sehen, wird einfach pin 3 (lcd-seitig) = pin 9 (pc-seitig (data 7)) entweder gesetzt (backlight on) oder nicht (backlight off)


    ah, das issn "serielles" display ... dann kommste schon mit paar datenleitungen aus ;)


    ich dachte das ist auchn paralleles.


    Zitat


    was auch noch nett geht beim optrex 323:
    softwareseitige kontrasteinstellung (32 stufen: 0 - 31).
    auch das habe ich ins menue aufgenommen mittlerweile. (dies ist aber ein standardbefehl des controllers SED1531 (der das optrex ansteuert) --> keine hardwareseitigen aenderungen notwendig (wie zb. bei hd44780-displays afair)


    nett. ich bin grad am ueberlegen mit digi-potis von dallas (DS1669), die sind
    speziell fuer contraststeuerung von lcd's gebaut worden (gibt ne eigene
    application note dafuer inkl negativer spannung...)


    Zitat


    backlight on / kontrast habe ich einstweilen via #if defined(OPTREX323) hineingehackt.


    ... was sinn macht... :)


    Zitat


    habe jetzt nur noch ein problem, dass ab und zu ein ppdev/parport* kernel-modul abschmiert (kernel oops) und dann die ansteuerung tot ist. haengt womoeglich mit einem (unbeabsichtigt) laufenden cupsd zusammen ...


    gruesse
    /wastl


    das iss tuerlich ned schoen ;)
    kann man ppdev nicht exclusiv reservieren?


    -- randy

  • hallo


    Zitat

    ah, das issn "serielles" display ... dann kommste schon mit paar datenleitungen aus ;)


    ich dachte das ist auchn paralleles.


    oh sorry, hab mir darueber nicht so wirklich gedanken gemacht, da die lowlevel-ansteuerung schon vorhanden war. hab nur die art der hw-anbindung im auge gehabt (serieller port vs parport => hab mal fuer hd44780 (paralleles device) parport treiber geschrieben, aber auch anbindung an seriellen port mit PIC und allem was dazugehoert ... habe ich aber nicht mehr wirklich weiterverfolgt ...)



    ad digipoti und anbindung an parport bzw. backlight on/off hinzufuegen: der scheiss an dem ganzen sind dann immer die unterschiedlichen wirings. habe das damals beim hd44780 hassen gelernt ...
    da ist der 'quasi-standard' beim optrex eine wohltat.


    ad lcd tot: war ein simpler wackelkontakt ;) modul haut's zwar aufs maul, aber anscheinend eh nicht dauerhaft (sollte man trotzdem wegbekommen. wir sind ja saubere programmierer ...)



    gruesse
    /wastl

Jetzt mitmachen!

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