2017年08月09日

ラズパイ: Luajit で OpenVG を使う

 ラズパイ上のスクリプト言語の一つとして、Jun Mizutani さんに倣って、luajit を試してみた。これはいいですね。C のインターフェイスを内蔵していて、OS の共有ライブラリを直接呼べるのがいい。

 低レベル入出力関数の open() なんかも、こんな風に直接呼び出せるわけです。

local ffi = require "ffi"
ffi.cdef[[
  int open(const char* filename, int flags);
  int close(int fd);
]]
local O_RDONLY = 0
fd = ffi.C.open("/dev/input/event0", O_RDONLY)

 前にやった OpenVG のグラフィック描画 を、luajit で試してみた。Jun Mizutani さんの LjES を参考にした(一部コードを使わせていただいた)。

20170809-1.jpg

 昔の 8 ビットマイコンゲーム風動画。まだキャラクタが動いているだけだけど。

 コードはこちらに置いておきます。ラズパイ上でダウンロードして、tar xvfz ljsc_sample.tar.gz で展開して、cd ljsc_sample; luajit fish.lua で実行できます。

posted by toshinagata at 17:49| 日記

2017年08月06日

ラズパイのタッチパネル液晶:tslib を使う

 「ラズパイの液晶タッチパネルを使う」の続き。自前でキャリブレーションのプログラムを書いていたのだが、tslib を使えばいいじゃない、と今さらながら気がついた。ということで、再トライしてみた。液晶は前と同じで、Waveshare 3.2inch RPi LCD (B), 320×240

 まず、tslib のインストール。

pi@raspberrypi:~ $ sudo apt-get install evtest tslib libts-bin

 evtest でデバイス番号を確認。/dev/input/event0 だった。

pi@raspberrypi:~ $ evtest
No device specified, trying to scan all of /dev/input/event*
Not running as root, no devices may be available.
Available devices:
/dev/input/event0:	ADS7846 Touchscreen
Select the device event number [0-0]: 0

 ts_calibrate でキャリブレート。+印が5箇所に順に表示されるので、スタイラスでタッチする。

pi@raspberrypi:~ $ sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/event0 ts_calibrate
20170805-1.jpg

 ts_test でテスト。やっぱりX方向はノイジーで、ときどきポインタが飛んでしまう。

pi@raspberrypi:~ $ sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/event0 ts_test
20170805-2.jpg

 C で使おうとすると、もう一手間かかる。tslib のライブラリは /usr/lib/arm-linux-gnueabihf/libts-0.0.so.0 なのだが、これをフルパスで指定する必要があるみたい。また、tslib.h がどこにもインストールされていないので、必要な宣言をソースに埋め込む。

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
struct tsdev;
struct ts_sample {
  int x, y;
  unsigned int pressure;
  struct timeval tv;
};
extern struct tsdev *ts_open(const char *dev_name, int nonblock);
extern int ts_config(struct tsdev *);
extern int ts_read(struct tsdev *, struct ts_sample *, int);
extern int ts_close(struct tsdev *);

int main(int argc, const char **argv)
{
  struct tsdev *ts;
  ts = ts_open("/dev/input/event0", 1);
  if (ts == NULL) {
    printf("Failed to open /dev/input/event0.\n");
    exit(1);
  }
  if (ts_config(ts) != 0) {
    printf("Failed to configure touchscreen.\n");
    exit(1);
  }
  while (1) {
    struct ts_sample samp;
    if (ts_read(ts, &samp, 1) == 1) {
      printf("%d %d %d\n", samp.x, samp.y, samp.pressure);
    }
  }
  return 0;
}

 コンパイルして実行してみた。

pi@raspberrypi:~ pi@raspberrypi:~$ gcc -o tstest tstest.c /usr/lib/arm-linux-gnueabihf/libts-0.0.so.0
pi@raspberrypi:~$ ./tstest
133 180 65063
132 180 65104
131 180 65116
132 180 65114
135 186 0
^C
pi@raspberrypi:~$ 

 ここまで来れば簡単に使えるのだが、道のりが妙に長いな。Raspbian のパッケージで tslib をもう少しちゃんとサポートしてくれたら、楽に使えるんだけどな。

タグ:Raspberry Pi
posted by toshinagata at 11:01| 日記

2017年07月31日

MacBook (Late 2008) のバッテリーを交換

 MacBook (Late 2008) のバッテリーが少し膨らんできた。はて、これ交換するの初めてだっけ? 電源周りのトラブルはけっこう何度もあったので、もう忘れてしまったよ。純正品は(たぶん)手に入らないので、互換品を購入しました。

 バッテリーを取り出して比べてみた。奥が今までのもの、手前が新しいもの。今までのものは純正品だから、たぶん交換歴はありませんね。

20170731-1.jpg

 本体に装着した状態で見ると、わずかに膨れているのがわかる(写真ではわからないかも)。

20170731-2.jpg

 新しいのはこんな感じ。隙間が少し細いのがわかりますでしょうか。継ぎ目を指で触ると、はっきり違いがわかるんだけどね。

20170731-3.jpg

「システムレポート」はこんな風になった。

20170731-4.png

 互換バッテリーについては「2年ぐらいでへたる」という情報もある。さすがにその頃には、次のマシンに乗り換えることを考えないといけないだろうな。

タグ:Mac
posted by toshinagata at 17:54| 日記