ゆかりん@さいたま1日目だったが雪で車は出せず、もし出せても高速が使えない、電車はまだかなりの路線が止まっていて、帰りのことも考えると厳しい、そもそもバスが来ないので駅まで歩くしかないという悲惨な状況のため断念。チケットはカバンに入れてあったので、昨日職場に泊まっていれば行けたかもしれない。


 aitendoで買った320×240ドットの液晶をラズパイにつなげてfbtftでフレームバッファ化できたので、適当な画像表示ソフトを探すも見つからず。fbiでは仮想コンソール経由だとうまく動かないし、物理キーボードでqを押さないと終了しないので面倒。仕方が無いので自前で無圧縮bmpファイルを表示するソフトを作ってみるテスト。


 まずフレームバッファの扱い方がわからなかったので適当にググってみたところ、open()でデバイスを開いてmmap()でポインタに割り当ててやることでメモリマップドI/Oのように1ピクセル2bytesで使えるらしい。X68000みたいな感じだろうたぶん。画面サイズなどはioctrl()で調べられるらしい。
 bmpも同様に調べたところ、ヘッダーのフォーマットとデータ部の並び方が判明。
 とりあえず/dev/fb1に適当なファイルを流し込んだら液晶にノイズが表示された。速度重視ならこの手も使えると思われる。それの応用で/dev/fb1を開いてバッファサイズを調べ、0を書き込んでいくだけのプログラムを作成。単に液晶画面をクリアするだけだが結構便利。
 次にそれぞれの情報を見るだけのプログラムを作った。ここで、液晶は16bitカラーだがbmpファイルは色々あることがわかる。windowsで普通に作ると24bitカラーになるのでこのフォーマットだけに限定し、24itから16bitの減色は単純なビット切り落としで対応することにした。
 スモールエンディアンの罠にはまったが単純にbmpファイルを液晶の画面サイズ分だけ表示するプログラムが完成。更に画面上の任意の位置から表示するオプションも付けてみた。bmpファイルはimagemagickで色々と加工生成が可能なので、シェルスクリプトで好きな画像を好きな位置に好きな大きさで表示させることができる。
 imagemagickは文字の描画にも対応しているので、任意のテキスト(ファイルも可)をbmp化して液晶に表示するスクリプトを作った。
 バックライトがいつの間にか消えてしまうので、gpioでバックライトをonするだけのスクリプトを作成。