ぱらつり記

No description

libpafeでSuica読もうとしたら共有ライブラリ素人だった話

普段使っているUbuntu入りのサブ機ですが、PaSoRiが搭載されていたことを一昨日になって思い出しました。

f:id:paralleltree:20170401203346j:plain

$ lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 002: ID 054c:01bb Sony Corp. FeliCa S320 [PaSoRi]
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

lsusbしてみるとRC-S320(通称白PaSoRi)が入っているようだったので使いたくなりました。 なんか使いたくなりました。

PaSoRi対応のライブラリ

調べる過程でいくつかPaSoRi対応のライブラリが見つかりました。

最初は全部同じじゃないのと思っていましたが、対応機種が違っていたのでメモしておきます。 間違いあるかもですが許して

ライブラリ RC-S310 RC-S320 RC-S330 RC-S360 RC-S370 RC-S380
libpafe o o o
libnfc o o o
nfcpy o o o o

というわけで # apt-get install libusb-dev からのlibpafeインストールを決めました。

共有ライブラリが読めねえ

やったのはいいんですが、適当なソースをコンパイルして実行すると

cannot open shared object file: No such file or directory

で怒られるんですね。

libpafe-rubyを入れてもrequire 'pasori'に失敗する状況でした。

lddしてみると

        linux-vdso.so.1 =>  (0x00007ffc00703000)
        libpafe.so.0 => not found
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fade9c13000)
        libusb-0.1.so.4 => /lib/x86_64-linux-gnu/libusb-0.1.so.4 (0x00007fade9a0a000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fadea1e0000)

と出てきたので、共有ライブラリがロードできていない。

ls /usr/local/lib/libpafe*でライブラリは入ってるし、

$ cat /etc/ld.so.conf.d/libc.conf
/usr/local/lib

で参照パスも追加されているはず……。

解決

キャッシュ更新されてませんでした

ldconfigで共有ライブラリのキャッシュを更新しました。 このあたりは今まで全然やったことなかったので解決にちょっと時間がかかってしまった。

PaSoRiいじいじ

というわけで、手持ちのSuicaを読んでみました。

IDmを取り出したり、

f:id:paralleltree:20170331124753p:plain

サイバネ駅コードDBと連携して乗車記録を見てみたり。

冬コミのときのコンビニの買い物とかpixivインターンの合間にTOEICやらOSCへ行くために乗った鉄道の利用情報が残ってますね。

上のサイトでエクスポートしたExcelファイル、何故か壊れていたので他のmdbファイルを引っ張ってExcelCSVに変換しました。

せっかくなのでIDmを使って何か作りたい。

FeliCaについて

PaSoRiを調べる途中でFeliCaSuicaについても調べてみましたが、Suicaって本当にすごいんですね。

1件のトランザクションが200ms以内で完了して、1分間に45人~60人が改札を通過できて、Suica読み取り部から10cm離れていても通信できるってマジやばくね?

某解説サイト

東京の通勤電車の自動改札機用途以外、世界中のどこにも必要性のない超高性能である。

でちょっと笑ってました。

さすが世界有数の駅乗降客数を誇るJR東……。