Tuesday, April 17, 2007

Mac で PaSoRi

それでは早速、libpasori の動作確認をしてみる。

まず、libusb に依存しているのでこれを導入する必要がある。 ソースをダウンロードする前に MacPorts での存在チェック。

% port search libusb
libusb                         devel/libusb   0.1.12       Library providing access to USB devices

おお、あった。一応オプションも確認。

% port variants libusb
libusb has no variants

とくに無いようなのでそのままインストール。

% sudo port install libusb
--->  Fetching libusb
--->  Verifying checksum(s) for libusb
--->  Extracting libusb
--->  Configuring libusb
--->  Building libusb with target all
--->  Staging libusb into destroot
--->  Installing libusb 0.1.12_0
--->  Activating libusb 0.1.12_0
--->  Cleaning libusb

もちろん、libusb からソースダウンロード&コンパイルでもOK。

次に、ライブラリパスを登録しなければいけないのだが、Mac版 ldconfig は無いのかな?本流の作法が分からないがLD_LIBRARY_PATH的環境変数を設定することにする。

Mac では DYLD_LIBRARY_PATH DYLD_FALLBACK_LIBRARY_PATH というのがあるらしい。

「DYLD_LIBRARY_PATH」はここにライブラリがあったらデフォルトのパスよりも優先して使う、「DYLD_FALLBACK_LIBRARY_PATH」はデフォルトのパスにライブラリが見つからない場合ここを探して見つかれば使う、という意味。詳細は Manual Page For dyld(1) を参照のこと。

ということらしいので、ここでは DYLD_FALLBACK_LIBRARY_PATH を設定する。

% export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib

これで準備環境なので、libpasori の動作を確認してみよう。

サンプルプログラムが二つ添付されているので、それぞれ実行してみる。

まずは、lpdump

% tar jxvf libpasori02.tar.bz2
% cd libpasori/src
% ./buildline-libusb.sh
% ./lpdump
# lpdump : Tue Apr 17 05:36:34 2007
# --- IDm info (FeliCa) ---
# Manufacture Date = 2001/2/7
#               SN = 15938
# Manufacture Code = 0101
#      Equip. Code = 0105
# FELICA SYSTEM_CODE = 0003
# card IDm = xxxxxxxxxxxxxxxx
# card PMm = xxxxxxxxxxxxxxxx
... snip ...

まさにダンプデータで中身は理解不能。

次に、lptest

% cp buildline-libusb.sh buildline-libusb-lptest.sh
% perl -i -pe 's/lpdump/lptest/g' buildline-libusb-lptest.sh
% ./buildline-libusb-lptest.sh
% ./lptest
lptest : start
read test
[00] : 08 03 00000E81 E3-3E -> 00-00      0000 -     0 Yen        00013E00
[01] : 16 01 00020E81 E3-55 -> E3-5D      0A00 -    10 Yen        00013D00
[02] : 1A 06 000E0E81 F0-3A -> F0-3A      C800 -   200 Yen        00013B00
[03] : 16 01 00020E81 E3-7D -> E3-7A      C800 -   200 Yen        00013900
[04] : 16 01 00020E7F F2-06 -> F2-0A      6801 -   360 Yen        00013700
... snip ...

あ、0円。こちらは、比較的分かり易いSuicaの利用履歴となっています。

ただ、日付や入出場駅名がコード化されているようなので、これを解析する必要があります。

そこらへんは、以下を参考に。

Suicaのデータは残金や通番など一部のバイトの並びが逆(リトルエンディアン)です。最初の1バイトが 0x1B だとクレジット入金、0x07だと入金、0x46だとサンクスチャージの入金で、0x16が自動改札乗降、0xC7が購買のようです。5バイト目から2バイトが日付で、先頭から7ビットが年、4ビットが月、残り5ビットが日のようです。(ここが面倒でしたね。パズルみたい)7バイト目からの2バイトが入った駅、続く2バイトが出た駅がコードで入っています。 駅のコードは、路線コード/駅コードの組合わせで、有志によるデータベースが公開されています。IC SFCard Fan DB Srevice このソフトではコードからの変換はしていません。12バイト目から2バイトが残金(リトルエンディアン)です。

とにかく、Mac でもなんとか利用できることは分かりました。
次は、これを活用できるようにしていきたいと思います。

関連URL

1 comments:

Anonymous said...

электронные сигареты тюмень - электронная сигарета в липецке