2013/02/09

libpafeとlibnfc

Fukuoka NFC Hack 7でRaspberry PiでPaSoRi RC-S370を動かしている例を見た。
そのとき、libpafeとlibnfcを両方やってみたということだった。

そういえば、私も少し触ったことがあったな、と思い出してみた。
思い出すだけで、ソースファイルは見ないから間違ってるかも。


libpafeは、PaSoRiを動かすことに特化している。
また、FeliCa用になっている。
やれることは限定されるけれども、だいたい使う機能は載せられているので、よくできていると思う。

 

libusbは、NFC R/W全般が使えるようにがんばっている。
開発元が日本ではないので、RC-S360へのサポートも含まれてはいるけれども、メンテナンスする人が少ないためか、細かいところまではサポートしていなかったような気がする。

ちなみにlibnfcは、コンパイルオプションか何かでデバイスの検索対象を指定できたような気がする。
USBだけでなく、シリアル接続も対象になっていて、シリアルの場合は接続されている全ポートに対して何かコマンドを投げて応答を見るような作りになっていたと思う。
大ざっぱだなぁ、とは思ったが、接続されているシリアルポートがわからないのだったら他に方法はない。

 

うちのRC-S620/Sでlibusbが動くよう、あれこれ見ていってはいたのだけど、途中でめんどくさくなった。
「もう、自分で作った方が早い!」(できのいかんは別として・・・)というわけで、結果的に自分でライブラリを作ることになったのであった。


今のところの完成形は、こちら。
https://github.com/hirokuma/libhknfcrw_c

「今のところ」のくせに「完成形」も何もあったもんじゃないのだが・・・。
ともかく、今の私の中での最新版である。

当初、C++でつくっていた
どうせNFC R/Wなんか1つしかつながないから、static classだけでいいや、という作りだ。
でも、ライブラリの汎用性を考えていくと、結局Cで作っておいた方が使い勝手がいいか、ということになった。
これが上記のライブラリだ。
なお、C++版を多少いじったのがArduino版だ。
その前に作ったのがAndroid版で、C++版とC#版(SDK for NFC)から持ってきたりしている。

NFC R/Wへの読み書きと、memcpyやタイマ系の部分を分離させ、そこだけ各自のプラットフォーム用に実装すれば使えるようなイメージにしている。
cygwinとFM3基板で動かせるようにはしたので、まあ動くのだろう。

残念ながら、消費電力を抑えるようには作られていない。
そこまでいくと、その上に載せるアプリの仕様などに引っ張られるので、もういいや、と思ったのだ(と思うが、それよりも「めんどう」という気持ちの方が強いがね)。

基本部分は、NfcPcdというソースファイルにあるので、見るべきはそれくらいか。
定数をひたすらバッファに設定してR/Wに送信し、その受信データを見る、というだけだ。

作った当時は、RC-S620/Sのコマンドがわからないので、PN533のドキュメントを見ながら試し、だめだったらパラメータを変更してみる、というような試行錯誤をしていた。
そのため、見た目はわかりやすいが無駄っぽい処理が多い。
あんまりトリッキーなことはしていないと思うので、動かしてみて、必要な処理だけにして、不要なところを改善する、などとするといいのかもね。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。