2011年11月6日

[ubuntu]Ubuntu 11.10にして、よくわからんごとなった

昨日までUbuntu 11.04を使っていたが、ふっと思いついて11.10にアップデートした。
まあ、新しもの好きってだけかもしれんが。

 

そしたら・・・いろいろとわからんごとなった。
まず、Unityってのになった。
11.04にもあったけど、gnomeもあったのでそっちを使っていたのだ。
慣れようとがんばったけど、そもそもUbuntuってウィンドウシステムを変更できるんだから、無理する必要はないよな・・・。
そんなわけで、gnomeをインストールした。

したのはいいんだけど、前と違う。
なんか、日付が上部バーの中央に出てくる・・・。
上部バーにパネルが置けない・・・。

 

それはまだいい。
困ったのは、mayuだ。
キーバインド変更のためにmayuを使っていたのだが、ビルドが通らなくなった。
libboost_regexのリンクがうまくいってないように見える。
しかたないのでboostのソースファイルからビルドしたけど、まだだめ。
シンプルなサンプルを作って、boost側なのかmayu側なのかの切り分けをせねば。
とはいえ、11.04のときにはビルドできてたんだけどな・・・。

 

なんやかんやで、アップデートせんのきゃよかったと思った私であった。
こうやってだんだん新しいものに手を出さなくなっていくんだろうな・・・。

2011年11月5日

[libnfc]libnfc-llcpをビルドしてみよう

さて、ではlibnfc-llcpをビルドしてみよう。
configureがなかったのでどうしていいかわからんかったが、探すとこうやるみたいだ。

http://www.libnfc.org/community/topic/467/solved-compiling-libnfcllcp-under-linux-does-not-work-correctly/

$ autoreconf -vis
Can't exec "libtoolize": No such file or directory at /usr/bin/autoreconf line 196.
Use of uninitialized value in pattern match (m//) at /usr/bin/autoreconf line 196.
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal -I m4
autoreconf: configure.ac: tracing
autoreconf: configure.ac: not using Libtool
autoreconf: running: /usr/bin/autoconf
configure.ac:8: error: possibly undefined macro: AC_PROG_LIBTOOL
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
autoreconf: /usr/bin/autoconf failed with exit status: 1

よくわからんが、libtoolってのがなさそうだ。

$ sudo apt-get install libtool
$ autoreconf -vis
$ ./configure
$ make
$ sudo make install

なんかできた。

examplesを見ると、nexus-get-tag、という実行ファイルができている。
何も考えずに実行。

$ ./nexus-get-tag
引数 -o がない、とかなんとか

$ sudo ./nexus-get-tag -o test.dat
lt-nexus-get-tag: No NFC device found

うーん、sudoでもだめなのか。


ここでNFCデバイスの有無を確認しているのは、nfc_list_devices()という関数。
その呼び出し方は、nfc-pollもnexus-get-tagも同じだ。
んで、さっき動いたnfc-pollも同じことになった。

うーむ。

psで見ると、kworkerがいっぱいある。
これかい?

[libnfc]Ubuntuではすんなり動く

MinGW64環境で動かせたlibnfc(のPN53x USB版)。
Linuxだとどうだろう?
うちのUtunbu11.04(64bit)で試した。
$ ./configure --with-drivers=pn53x_usb,pn532_uart
$ make
$ sudo make install

特に問題なし。
では、パソリをつないで・・・。
$ cd examples
$ ./nfc-poll
/home/xxx/libnfc/libnfc-1.5.1/examples/.libs/lt-nfc-poll uses libnfc 1.5.1 (r1175)
No NFC device found.

あら。
$ sudo ./nfc-poll
nfc-poll uses libnfc 1.5.1 (r1175)
Connected to NFC reader: Sony / RC-S370/P - PN533 v1.48 (0x07)
NFC device will poll during 30000 ms (20 pollings of 300 ms for 5 modulations)
FeliCa (212 kbps) target:
        ID (NFCID2): xx  xx  xx  xx  xx  xx  xx  xx 
    Parameter (PAD): yy  yy  yy  yy  yy  yy  yy  yy 
   System Code (SC): zz  zz
 
そういうことですか。
まあ、特に問題なく動くことがわかった。
なので、まずLinuxでパソリを動かすなら、libnfcがいいんじゃないかと思う。

RC-S620/SをUART-USB変換モジュールに接続

いつかやろう、ではだめだ。
というわけで、RC-S620/SをUART-USB変換モジュールに接続した。

RC-S620/S
http://www.switch-science.com/products/detail.php?product_id=353

ピッチ変換
http://www.aitendo.co.jp/product/2202

UART-USB変換モジュール
http://www.aitendo.co.jp/product/2890

 

ピッチ変換基板は在庫無しのようなので、スイッチサイエンス社から買うのがよかろう。
http://www.switch-science.com/products/detail.php?product_id=725

これを買っていたら、半田付けしないでブレッドボードを使った方がすっきりしそうだ。


SANY0001

接続は、特に説明するほどのものではない。
電源は3.3Vの方を使った。テスタでUART-USB変換モジュールのTXD電圧を測ると3.3Vくらいだったからだ。
あとは、RC-S620/Sとクロスで接続するだけ。
すごく簡単。

 

なんだけど、ピッチ変換基板に書いてあるピンの並びをそのまま使うと、RC-S620/Sとは順序が逆になってしまう。
まあ、前壊したのはそのせいなんだけどね・・・。
今回は3回くらいテスタで接続確認をした。

それでも怖かったので、パソコンとつなぎつなぎ確認。
自作のRC-S956ライブラリをCOMポート接続で動かせたので、OKだ。

 

そろそろ、これはケースに入れたくなってきたな。
パソコンで遊ぶ分にはPaSoRiでもいいんだけど、UARTで使えるってのは組込み機器としてはありがたい。


あと、うちにはFeliCa Plugがある。
この子は、SPI接続みたいだ。
なので、パソコンからの接続はあまりやりたくない(やるならFTDIの変換モジュールを買うのか?)。

載せるなら、小さい組込み基板がよかろう。
なぜ「小さい」かというと、FeliCa Plugが小さいからだ。
せっかくだから、小さくまとめたくなるではないか。

そうなると、BeagleBoardは大きすぎる。
(余談だが、BeagleBoardのUARTで未使用のものは1.8Vくらいなので、ちょっとRC-S620/Sはつなげにくい。)
CQ出版社のInterface誌付録の基板がいくつかあるから、それが使えそうだ。

2011年11月3日

[nfc]NFCID3とNFCID2の関係を再考

以前、「NFCID3とNFCID2の関係」という記事を書いていた。

http://hiro99ma.blogspot.com/2011/02/nfcnfcid3nfcid2.html

NFC-DEPで使うので読み返したのだが、考察が中途半端だ。

「NFCID2(IDm)の先頭8byteと同じ」というのはよい。
しかし、NFCID3は10byteある。
残りの2byteはどうしたらいいのだ?


まず、上記の英文を引用しよう。
「NFCForum-TS-DigitalProtocol-1.0」だ。

14.6.2.1
If the Initiator is using NFC-F Technology, the Initiator MUST fill Byte 3 to Byte 10 of ATR_REQ with NFCID2 of the Target it wants to address.

これはNFC-FでのATR_REQパケットの説明で、3~12バイト目にはNFCID3が入る構成になっている。

おや、続きがある。

Byte 11 to Byte 12 of ATR_REQ MAY be filled with Any Value.

ああそうですか。
なんでもいいのね。

なお、NFC-DEPで使用するプロトコルは以下の5つである。

  • ATR_REQ/ATR_RES
  • PSL_REQ/PSL_RES
  • DEP_REQ/DEP_RES
  • DSL_REQ/DSL_RES
  • RLS_REQ/RLS_RES

NFC-Fのときはそうだが、NFC-AでもNFC-DEPは使うことができる。
そのときのNFCID3については記載が見つからない。

ってことは、NFC-Fの場合にはNFCID2(IDm)だけあればよく、NFC-Aの場合には別個にNFCID3を持たねばならないということか。
まあ、同じようにNFCID1から作っても悪くはないということなのだろうかね。

[libnfc]今回インストールしたもの

備忘録として、どこからダウンロードしたかを残しておこう。
なお、うちはWindows XP SP3 (32bit)である。

 

libnfc 1.5.1 : http://www.libnfc.org/documentation/introduction

http://code.google.com/p/libnfc/downloads/list

http://code.google.com/p/libnfc/downloads/detail?name=libnfc-1.5.1.tar.gz&can=2&q=

 

cmake 2.8.6 : http://www.cmake.org/

http://www.cmake.org/cmake/resources/software.html

http://www.cmake.org/files/v2.8/cmake-2.8.6-win32-x86.exe

 

LibUSB 1.2.5.0 : http://sourceforge.net/apps/trac/libusb-win32/wiki

http://sourceforge.net/projects/libusb-win32/files/libusb-win32-releases/

http://sourceforge.net/projects/libusb-win32/files/libusb-win32-releases/1.2.5.0/libusb-win32-bin-1.2.5.0.zip/download

 

TDM-GCC 4.6.1:

http://sourceforge.net/projects/tdm-gcc/files/

http://sourceforge.net/projects/tdm-gcc/files/TDM-GCC%20Installer/tdm-gcc-4.6.1.exe/download


さて、ビルドも通ったことだし、次はNFC-DEPか。
実はサンプルとして、nfc-dep-initiatorとnfc-dep-targetというものがある。
名前からするに、NFC-DEPしてくれそうではないか。

試したいところだが・・・PaSoRiは1台しか持っていない。
RC-S620/Sがあるんだけど、まだ動くように仕立ててない。
なぜ仕立ててないかというと・・・1つ前に買ったRC-S620/Sを壊したのがショックだったからだ。
引き続いて起こした、A500のフレキ切断もそれを補強してしまっている。
また、また壊すのでは・・・。

 

しかし、破壊なきところに創造なしというではないか。
それに、さんざん壊したんだから、もう大丈夫だろう。

 

仕立てたとして、今度はUARTで操作しないといけない。
まあ、USB2つだとどうせ認識できないだろうから、それでいいか。

[libnfc]TDM-GCCでビルドするとうまくいった

libnfc-1.5.1を解凍すると、README-Windows.txtというファイルがある。
これを読みながらやってみた。

最初は素直にMinGWとLibUSB 1.2.5をインストールしたのだがどうもうまくいかん。
しかし本当に「素直に」やるならば、MinGWではなくて、テキストの一番下にリンクがあるTDM-GCCというものを使うやり方になるのだった。

 

cmake-guiで、ビルドしたいpn53x_usbドライバを指定してconfigure。
なんかエラーが出たけど、もう一度configure。
LibUSBのincludeとlibを指定してなかったのでエラー→指定してconfigure。
そうすると、通った。

あとは書いてあるとおりに、mingw32-make。
こちらはwarningは出るけれども、最後まで通った。


examplesディレクトリにexeがあるので、よくわからないままnfc-poll.exeを実行。
・・・libnfc.dllがない、と。
どっかパスが通る場所にlibnfc.dllを置いて実行。
・・・NFCデバイスがない、と。

LibUSBのドライバを正しくインストールしていないためだった。
LibUSBからダウンロードしたファイルを解凍すると、binの中にinf-wizard.exeがある。
それを実行する前にlibusb-win32-bin-README.txtを読むと、dllのファイル名を変更せよとある。
なので、それに従って名前を変え、inf-wizard.exeを起動。
PaSoRiを選択したらinfができ、そのままインストールまで実行できる。
インストールすると、デバイスマネージャの「libusb-win32 devices」の下にPaSoRiが出てくる。

zadigで最初はやってたのだが、それではだめなようだ。
一度インストールしてしまえば、install-filter-win.exeが使えたような気がするが、まあいいや。

 

この状態でPaSoRiの上にMifare Standardカードを置いて、nfc-poll.exeを実行。

nfc-poll uses libnfc 1.5.1
Connected to NFC reader: Sony / RC-S370/P - PN533 v1.48 (0x07)
NFC device will poll during 30000 ms (20 pollings of 300 ms for zd modulations)
ISO/IEC 14443A (106 kbps) target:
    ATQA (SENS_RES): 00  04
       UID (NFCID1): 1e  63  b2  53
      SAK (SEL_RES): 08

ふむ、動いていそうだ。
FeliCa Liteカードでもやってみたが、ちゃんとIDmなどが取れている。

[libnfc]cygwinでビルドできるか?

libnfcがcygwinでビルドできるかやってみた。

まずはconfigure。
・・・だめだ。
gcc自身がエラーを出しているっぽい。
gcc4.5は早すぎたか・・・。

 

$ set-gcc-default-3.sh
$ ./configure --with-drivers=pn53x_usb --with-libusb-win32 --enable-debug
$ make

uart_posix.c:58:6: #error "Can't determine serial string for your system"

あー、uart.cのなかで、_WIN32が定義されていたらuart_win32.cをincludeするのか。
他にもマクロ定義があるかも・・・と思うと、時間を無駄にしたくない私は指示通りにMinGWを使うことにした。

cygmpfr-4.dllが見つからん場合は、libmpfr4をインストール

cygwinの話だ。
gccでビルドすると、こんなエラーが出た。
/usr/lib/gcc/i686-pc-cygwin/4.5.3/cc1.exe: error while loading shared libraries: cygmpfr-4.dll: cannot open shared object file: No such file or directory
見つからんらしい。

ネット検索すると、libmpfr4パッケージをインストールすればいいらしい。
ふーん。
カテゴリーは「Libs」。
説明は「A library for multiple-precision floationg-point arithmatic with exact rounding」。
単にmainしかない関数なんだけど、gcc4のリンカが指定しているってことかな。
それなら自動的にインストールしてほしいものだが(ぶつぶつ)。

ぶつぶつ言っても仕方ないので、インストールしてコンパイル。
うん、よさそうだ。

2011年11月1日

[libnfc]まずlibnfcより始めよ

libnfcには、pn53xドライバがある。
ソースを見ると、PaSoRiもいけるみたいだ。

なら、まずlibnfcから始めようかね。

 

しかし、LLCPを使いたいがためにライブラリを使うのもなんだかなー、という気がしている。
仕事でやるわけじゃないんだから、自分でLLCP実装してもいいんじゃないの、とか。

そんな心の声が出てくるまでは、libnfcを動かしてみることにしよう。