2019年7月27日

HUD #2:DirectFBを試してみる

前回の続き。

画面が出るようになったので、今度はグラフィック回りを考えてみる。
Qtは何だか面倒そうだったので、https://blog.techlab-xe.net/archives/4328 を参考に DirectFBを入れてみた。



  • ↑のリンク先に書いてあるまんま、apt-getでインストール
    • sudo apt-get install libdirectfb-extra
    • sudo apt-get install libdirectfb-dev
    • sudo apt-get install libdirectfb-bin
  • ~/.directfbrc に設定を用意、X11はないので https://teratail.com/questions/98161 を参考にして system=fbdev と書いてみた。他の設定の意味はサッパリ理解してないけど、追々何とかする予定で。
  • system=fbdev
    fbdev=/dev/fb1
    no-vt
    mode=320x240
    primary-only
この状態でリンク先のコードをそのままコンパイルしてみるとあっさり通ってしまった。しかも実行してみると (リンク先の画像とはちょっと違うのだけど) 画面になんか出てる。
しかし、ログを見る限りは .directfbrc の "mode=320x240" だとダメみたい。。。正しくは何と書けばいいのだろう?
    $ ./test
    (*) Direct/Thread: Started 'SigHandler' (2251) [CRITICAL - OTHER/0] <8388608>...
    
       ~~~~~~~~~~~~~~~~~~~~~~~~~| DirectFB 1.7.7 |~~~~~~~~~~~~~~~~~~~~~~~~~~
            (c) 2012-2015  DirectFB integrated media GmbH
            (c) 2001-2015  The world wide DirectFB Open Source Community
            (c) 2000-2004  Convergence (integrated media) GmbH
          ----------------------------------------------------------------
    
    (*) DirectFB/Core: Single Application Core.
    (!) Direct/Modules: Unable to dlopen `/usr/lib/arm-linux-gnueabihf/directfb-1.7-7/systems/libdirectfb_mesa_system.so'!
        --> /usr/lib/arm-linux-gnueabihf/directfb-1.7-7/systems/libdirectfb_mesa_system.so: undefined symbol: glEGLImageTargetRenderbufferStorageOES
    (*) Direct/Memcpy: Using libc memcpy()
    (*) Direct/Thread: Started 'Fusion Dispatch' (2252) [MESSAGING - OTHER/0] <8388608>...
    (*) DirectFB/FBDev: Found 'fb_ili9340' (ID 0) with frame buffer at 0x00000000, 150k (MMIO 0x00000000, 0k)
    (*) DirectFB/Input: Hot-plug detection enabled with Input Hub Driver
    (*) Direct/Thread: Started 'PS/2 Input' (2253) [INPUT - OTHER/0] <8388608>...
    (*) DirectFB/Input: IMPS/2 Mouse 1.0 (directfb.org)
    (!) DirectFB/Keyboard: Could not open() /dev/tty0!
        --> Permission denied
    (*) DirectFB/Graphics: Generic Software Rasterizer 0.7 (directfb.org)
    (*) DirectFB/Core/WM: Default 0.3 (directfb.org)
    (*) Direct/Thread: Started 'Genefx' (2254) [DEFAULT - OTHER/0] <8388608>...
     (!!!)  *** ONCE [no mode found for 320x240] *** [fbdev.c:1360 in dfb_fbdev_find_mode()]
    (*) FBDev/Mode: Setting 320x240 LUT8
    (*) FBDev/Mode: Switched to 320x240 (virtual 320x240) at 16 bit (LUT8), pitch 640
    (*) FBDev/Mode: Setting 320x240 LUT8
    (*) FBDev/Mode: Switched to 320x240 (virtual 320x240) at 16 bit (LUT8), pitch 640
    (*) FBDev/Mode: Setting 320x240 LUT8
    (*) FBDev/Mode: Switched to 320x240 (virtual 320x240) at 16 bit (LUT8), pitch 640
    (*) FBDev/Mode: Setting 320x240 LUT8
    (*) FBDev/Mode: Switched to 320x240 (virtual 320x240) at 16 bit (LUT8), pitch 640
     (!!!)  *** UNIMPLEMENTED [fusion_dispatch] *** [fusion.c:3937]
    DONE!
    $
とはいえ、きちんと設定すれば何とかなりそうなので DirectFBでやってみることにする。

今のところの問題点:

  • 画面サイズが正しく設定できてない
    • 320x240だと怒られる
    • 描いた直線が画面の半分までしか出ていないので、実は 640x480として扱われているのか??
  • 色がおかしい
    • リンク先は黄色だが、こちらは 白で描かれている
    • この液晶、16bitカラーだったはずなので、SetColor (primary, 0xFF, 0xFF, までしか使われていないということなのかな?
  • ssh越しに コード触るの結構しんどい、本来はクロス開発環境とか組むべきなんでしょうがやり方分らんので samba立ててお茶を濁すのが楽かな

0 件のコメント:

コメントを投稿