https://www.sony.jp/support/vaio/products/vpc/vpcs14afj.html
SONYだった時代のVAIOである。これにはNFCのリーダ/ライタがついているので、これをなんとか使って遊べないかなぁといじってみた。
「ついている」というのは、埋め込まれているという事で、きちんと認識しているのかどうか確認。
[bash]
$ lsusb | grep FeliCa
Bus 001 Device 005: ID 054c:02e1 Sony Corp. FeliCa S330 [PaSoRi]
[/bash]
認識しているようだ。さて、使えるか?
それらしいライブラリ(libnfc)を発見するも、使えたり使えなかったりして不安定。S330が搭載されているのにS360として認識したり、使い物にならない。なんとか原因究明出来ないかと四苦八苦したが断念。
別のライブラリを使う。libpafe。毎度の事だがaur死ぬほどお世話になってる、ありがとうございます。
yaourt -S libpafe したら最後に
To use PaSoRi # udevadm control --reload-rules Make 'plugdev' group and add your user
と言われたので、やっておく。
[bash]
$ sudo udevadm control –reload-rules
$ sudo groupadd plugdev
$ sudo usermod -G plugdev tea
[/bash]
さて、テスト。
[bash]
$ pasori_test
PaSoRi (RC-S330)
firmware version 1.30
[/bash]
きちんと認識しているようだし、firmware version拾えてるからPaSoRi自体は使えているっぽい。さて本当にFeliCaを読めるかどうかチェック。
[bash]
$ felica_dump
〜以下略〜
[/bash]
以下データが連なる。データの中身についてはこれから調査する予定。この時使用したのは学生証だが、Suicaを置いた時には何も出力されなかった。これは不明。
ネットで拾ったSuica残高を表示するスクリプトを実行してみる。https://gist.github.com/Akkiesoft/6450764
rubyで書かれているのでlibpafe-rubyをインストールしておくのも忘れずに。aur何でも揃ってるなといった感想(こなみ)
[bash]
$ ruby iccard-check.rb
1226
[/bash]
Suica普通に取り扱えてるみたいだし、felica_dumpに何かしらのバグがあったりするんだろうか。
よし、C++からlibpafe触って見るぞ。ネットで拾ったコードを元に書いてみる(ほぼパクリ)
[cpp]
#include
#include
#define hexformat(fill,wd) hex«setfill(fill)«setw(wd)
extern “C” {
#include <libpafe/libpafe.h>
#include <libpafe/pasori_command.h>
#include <libpafe/felica_command.h>
}
int main(){
using namespace std;
pasori* p;
if((p = pasori_open()) != NULL){
felica* f;
pasori_init(p);
if((f = felica_polling(p, FELICA_POLLING_EDY, 0, 1)) != NULL) {
uint8_t idm[16];
felica_get_idm(f, idm);
for(int n=0; n<7; n++){
cout«hexformat(‘0’,2)«unsigned(idm[n])«”:”;
}
cout«hexformat(‘0’,2)«unsigned(idm[7])«endl;
free(f);
}
}
pasori_close(p);
return 0;
}
[/cpp]
これをコンパイルして実行してみる。
[bash]
$ g++ ./felica.cpp -o ./felica /usr/lib/libpafe.so
$ ./felica
xx:xx:xx:xx:xx:xx:xx:xx
[/bash]
うまくいったっぽい。
あとはlibpafeのREADMEに書いてある事見ながら色々遊んでみようと思っているところ。FeliCaなカードは安く買えるっぽいので何かしら遊んでみよう。
普通に買うとRS-S330ってクソ高いのな、今。