Framebuffer Ansteuerung

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Pi-Forum,

    ich versuche mithilfe des Framebuffers ein Bild über HDMI auszugeben. Ziel des Ganzen soll es später sein ein Display über LVDS via DVI-LVDS Adapter anzusteuern. Testen kann ich momentan nur auf einen normalen DVI Monitor.

    Zurzeit schaffe ich es den Framebuffer so zu beschreiben, dass das Display eine Farbe anzeigt. Allerdings blinkt der Cursor noch... Zudem gefällt mir nicht, dass das Display mit 16bitpp angesteuert wird... Wo mir auch die Aufteilung (Blau 8 Bit, Grün 4 Bit und Rot 4 Bit) komisch erscheint...

    Daher meine Fragen:

    - Kann man den Framebuffer "sperren", so dass nur mein Programm Zugriff hat?

    - Wie kann ich das eingespielte "Bild" wieder aus dem Speicher nehmen? Ist es hier evtl. sinnvoll einen Screenshot von der Ausgangsituation zu machen und den dann wieder in den Speicher zu schreiben?

    - Die Display Einstellungen kann ich über die config.txt machen oder?

    Wenn jemand Tipps für mich hat, nehme ich die gerne entgegen :) Bitte beachtet, dass ich erst letzte Woche mit dem Raspberry angefangen habe und seit Anfang dieser Woche die ersten Schritte in C Programmierung mache...

    Vielen Dank! :)


  • Bitte beachtet, dass ich erst letzte Woche mit dem Raspberry angefangen habe und seit Anfang dieser Woche die ersten Schritte in C Programmierung mache...


    Hallo torben_pi,

    Du traust Dich aber was - also für den Einstieg in C ist Dein Projekt sicher "not recommended".
    Deinen (zumindest in Teilen irgendwoher kopierten) Code wird Dir kaum jemand fehlerfrei machen und erweitern.

    Aber wenn Du Dich unbedingt "durchbeissen" willst, wäre ein Blick in die Sourcecodes von z.B. "feh", "fbv", "fbi" sicher nicht verkehrt.

    Nix für ungut,
    Gruß, mmi

  • Danke für deine Antwort mmi!

    Ja, stimmt schon, dass das Thema evtl nicht besonders leicht ist für den Einstieg, aber auf die ganzen "hallo welt" Programme habe ich keinen Bock mehr...

    Ich hoffe ich habe mich nicht falsch ausgedrückt, ich möchte nicht, dass jemand meinen Code optimiert oder erweitert. Ich möchte wissen, ob es eine Möglickeit gibt den Framebuffer zu "sperren".

    Dein Tipp mit den Sourcecodes nehme ich gerne an :)

    Btw. der Code ist fehlerfrei :)


  • ... Zudem gefällt mir nicht, dass das Display mit 16bitpp angesteuert wird... Wo mir auch die Aufteilung (Blau 8 Bit, Grün 4 Bit und Rot 4 Bit) komisch erscheint...

    wo kommt das denn her ? ich kenne nur 5 - 5 - 5 und ein Bit weggeworfen oder 5-6-5

    kann man das nicht ändern ?

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • wo kommt das denn her ? ich kenne nur 5 - 5 - 5 und ein Bit weggeworfen oder 5-6-5

    kann man das nicht ändern ?

    Ich denke, dass die 16Bit Einstellung vom Monitor kommt und so vom RasPi ausgelesen und automatisch eingestellt wurde.

    Die Aufteilung habe ich experimentell ermittelt (Wert der in Speicher geschrieben wird)
    0xf - blau
    0xff - blau
    0xf00 bzw. 0xf000 Rot bzw Grün

  • Hallo torben_pi,

    wahrscheinlich erfindest Du das Rad nochmal neu ;)

    "fbv" ist für Deinen Zweck vermutlich eine gute Lösung, zumindest dürfte der Sourcecode das Wesentliche zeigen. Evtl. ist es sogar am sinnvollsten, wenn Du diesen für Deine Schnittstelle erweiterst oder es genügt bereits, daß jeweilige Bild über eine pipe an fbv zu senden.

    Eine Möglichkeit, den framebuffer zu "sperren", wäre beispielsweise, Deine Anwendung in einer eigenen virtuellen Konsole laufen zu lassen (Auswahl mit "chvt [1..x]").
    Suche auch mal nach "deallocvt" für die Freigabe des framebuffers, da sollte sich einiges finden lassen.

    Gruß, mmi

  • Zitat


    "fbv" ist für Deinen Zweck vermutlich eine gute Lösung, zumindest dürfte der Sourcecode das Wesentliche zeigen. Evtl. ist es sogar am sinnvollsten, wenn Du diesen für Deine Schnittstelle erweiterst oder es genügt bereits, daß jeweilige Bild über eine pipe an fbv zu senden.

    Sehr guter Tipp! :)

    Zitat


    Eine Möglichkeit, den framebuffer zu "sperren", wäre beispielsweise, Deine Anwendung in einer eigenen virtuellen Konsole laufen zu lassen (Auswahl mit "chvt [1..x]").
    Suche auch mal nach "deallocvt" für die Freigabe des framebuffers, da sollte sich einiges finden lassen.

    Habe ich da nicht das gleiche Problem, dass der Cursor blinkt?
    Gibt es auch eine Möglichkeit ein virtuelles Terminal zu beenden, auhc wenn es noch benutzt wird?

  • Natürlich wird man auch den Cursor ausschalten können (in meinen Anwendungsfällen mit "fbv" war das bereits der Fall).

    Ein grober Weg ist aufgezeigt, die Feinheiten muß man sich halt noch erarbeiten, sofern keiner die Ideallösung ohne grösseren Aufwand einblenden kann. ;)

    Zum Beenden eines virtuellen Terminals mit laufender Bildanzeige: siehe "deallocvt" - wie oben schon angesprochen, evtl. notwendigerweise vorher den zugehörigen lfd. Prozess killen.


  • jar:
    Ich habe mich irgendwo bei meinem "Experiment" vertan :blush:

    beruhigt mich aber das ich nicht ganz verbleedet bin 5-6-5 scheint mir logisch und passt ja wieder :thumbs1:


    nur falls einer wissen will warum grün 6 Bit spendiert bekommt, für grün sind unsere Augen am empfindlichsten, dort können wir mehr Abstufungen wahrnehmen und da macht mehr Bittiefe Sinn (oder hat mehr Sinn, je nach belieben)

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (12. Mai 2014 um 15:24)

  • Falls noch jemand die Antwort sucht:

    Der Cursor lässt sich über eine Escape-Sequenz ein- und wiederabschalten.

    Code
    printf("\033[?25l"); --> Cursor aus
    printf("\033[?25h"); --> Cursor an


    In der Konsole selbst, geht das auch über:

    Code
    setterm -cursor off
    bzw. setterm -cursor on

    Vielen Dank an alle für Ihre Hilfe :)

Jetzt mitmachen!

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