2012年5月31日

[adk]何かが足りない・・・

前回、PC+libusb-1.0でAcerタブレットのA500をAccessory Modeにすることができたようだった。

 

では、と同じしくみをCQ社のLPC2388基板に組み込んで動かしてみた。
うんうん、VID(Vendor ID)とPID(Product ID)は、ちゃんとAccessory Modeのに切り替わった。
ちゃんとAccessory Modeになると、A500側にダイアログが出てくるのだが・・・出てこん。
待ち時間を増やしたり、PCでうまくいった処理を削っていったりして何が足りないのか調べたが、よくわからん。
「一家に1台のUSBアナライザ」という言葉があるが、こういうことか(いやいや私には不要だ)。。。

 

違いそうな点は、取り除く処理だ。
たとえばWindowsだと、VID/PIDが切り替わるので、デバイスが取り除かれるサウンドと取り付けられるサウンドが鳴動する。
android developerのサイトにあったArduinoサンプルを見ると、AAP(Android Accessory Protocol)の最後でdetach待ちのようなことを行っている。

 

NXPのUsbHostLiteサンプルにはなさそうなところだった。
はて・・・どうしたもんだか。

2012年5月30日

[nfc]TargetになるのとCard Emulationするのはちょっと異なる

NFCでターゲットになるのと、カードエミュレーションするのは、ちょっと異なると思う。

ターゲットにならないとカードエミュレーションできないのだが、ターゲットになったからといってカードエミュレーションをする必要はない。

 

カードエミュレーションというのは、文字通り「カードのエミュレーションをする」ことである。
ターゲットというのは、単にイニシエータの対象になる側に回るというだけのことだ。

 

先日、Androidは250msごとにポーリングし、ポーリングし終わったらカードエミュレーションする、と書いたが、それはソースのコメントにそう書いてあっただけだ。
カードエミュレーションするのだったらターゲットになってるからAndroid Beamもやることができるだろうな、というだけであって、Android Beamをするためにカードエミュレーションをする必要はない。

 

NFC Forumの図でも、P2PとCard Emulationが別の柱になっているのはそういうわけである。


しかし、こちらの記事を読んだが、Google Walletってこれじゃいかんよなあ、と思う。
Google Wallet:使ってみました,CNET Brian Bennet氏体験記

なんというか、緊急通報でアプリが落ちる携帯電話、みたいな気分になってしまう。
考えが甘いところがあると、業界全体がだめになったりする。
それでも、できの悪いシステムはもうちょっとつるし上げられないといかんのじゃないか、という気にすらさせられるお話だった。

2012年5月27日

ADKの練習

LPC2388基板を使って、ADK(USB Host側)になろうとしている。
しかし、USBもままならないのに、いきなり海に飛び込んでいいものだろうか?
やはり準備運動をしないと、足がつってしまうかもしれない。

 

そんな心配があったので、libusb-1.0を使ってPCをADK化(というのか?)してみた。
cygwinでやったせいかちょっとめんどくさかったが、A500がAccessoryModeになるところまで確認できた。
(Windowsだと、zadig.exeなどを使うことになると思う。説明はこちら。)

https://github.com/hirokuma/libusb_adk

 

さすがlibusbで、Android Accessory Protocolの仕様通りにやったら、動いた。

Accessory Modeになることはできたが、そこから元に戻すプロトコルはなさそうだ。
USBを引っこ抜けば、元に戻るようだった。

 

A500は、以前はAcerのベンダIDのままだったような気がするが、少なくとも今回はAAPの仕様通りに動いた。
Linuxでも動かせると思うが、LinuxだったらAccessoryChatがあるので、そっちをいじった方が確実かも。

Android側のアプリを作ってないので、本業であるバルク通信までは確認できないんだけど、まあなんとかなるだろう。

USBのEnumeration (1)

LPC2388のUSB Host機能を使おうとしている。
USBメモリはサンプル通りにやって使えたのだが、何が行われて動いているのか全然わかっていない。
LPC2388などのUSB Hostサンプルは、NXPが公開している。
私は楽をしたいので、Interface誌の記事をそのまま使った。

Host_EnumDev()を呼んで、MS_Init()を呼んで、FAT_Init()を呼ぶと、USBメモリが使えるようになっている。
MS_Init()は、MassStorageクラスの初期化だろう。
FAT_Init()は、ファイルシステムの初期化だろう。
Host_EnumDev()がUSB Host機能の初期化部分なので、ここだけ把握しておけば何とかなるんじゃなかろうか。



EnumDev、とあるので、これが「USB Enumeration」というやつだろう。
カタカナだと「エニュメレーション」らしい(Googleは、まず入力した通りに検索してくれないものかね)。
確かに、Tech Villageのサイトに書かれている順番でやっているのだけど、もうちょっと詳細が知りたい。
そういうときは、元資料を探さねば。
http://www.usb.org/developers/docs/
USB.orgのドキュメントページから、USB2.0の仕様書をダウンロード。
(仕様書はときどき更新されているのか、私が昔ダウンロードしたものとファイル名が変わっていた。)
この中の「usb_20.pdf」が基本資料になっている。
私が知りたいことは、9章に書かれていた。



まず、Stateという概念がある。
Attached、Powered、Default、Address、ConfiguredとSuspendedの6つ。
9.1.2節が、Bus Enumerationの説明だ。
USB機器を挿すと、AttachedからPoweredになり、Default、Addressを経由して、ConfiguredまでいくとUSB機器として使えるようになる、ということらしい。
このStateを順番に回すから、enumeration、なのかな。

でも・・・Tech Villageに書いてあることとそんなに変わらない。
私が知りたいことは、もうちょっと実装レベルのことだ。
一番わかりやすかったのは、PICでなんか作るばい、というページ。
たしかに、こういう実装になっているのだ。
初回のGET_DESCRIPTORが8byteしか読んでいないので、気になっていたのだが、そういうものらしい。
では、気にせずこのままいくとしよう。

Androidはポーリング周期後にカードエミュレーションするのか

昨日の勉強会で、Androidでは250msごとに搬送波が出ている、というオシロスコープを使った報告があった。

この辺ってどうなってるんだっけ、と思って調べる。


深く追わずに、25、というキーワードで検索。

packages/apps/Nfc/jni/com_android_nfc_NativeNfcManager.cpp

ここに「Polling Loop」というコメントがあり、ひっかかった。
コメント通りなら、250msごとに搬送波を出すが、出し終わったらカードエミュレーションモードになるらしい。

ほほぅ。
確かにこうすれば、Android Beamのためにターゲットにならんといかんという部分が解決できる。

もう少し下のソースに、「Enable CEA detection mechanism」って書いてあるが、これは「Card Emulation A」の略みたいだ。
Type-Aのエミュレーションってことかね。

少し上には「RF Level Detector」って書いてあるので、搬送波検知のRSSIレベルをここで設定して、割込が発生するようになるのかも。

 

しかし1つ疑問が。
同じタイミングで同じ設定のAndroid端末を2台起動すると、同じタイミングでポーリングしてしまって検出できなくなるんじゃないの?と思ったのだ。
ちょっとでも違えば、たぶん搬送波検知機能が動作するんだろうけど、まったく同じタイミングだったらどうしようもあるまい。

なにか手は打ってあるんだろうと思うが、意外と忘れてたりして。

NTAG203は何が違うのだろう?

昨日の勉強会で、勉強会スタンプラリーのスタンプがNFCタグだった。
このタグ、シールタイプのNFCタグだが、NTAG203らしい。
「NFCの性能を全部引き出す」みたいなのが売り文句だったと思うが、はて、何が違うのだろう?


203という数字には意味があり、

2・・・Platform indicator
0・・・Generation number(0はじまり)
3・・・Code number for memory size(3は128~256byte)

となっている。
特徴を見ても、NFC-Aと変わらんように見える。
106kbpsだし、7byte UIDだし。
そもそも「NFC Forum Tag 2 Type compliance」って書いてあるから、大きな違いはないはずだ。

ブロック図も、Ultralight(Cがつかない方)と同じ。


ただ、203Fになると、ちょっと違う。

Fは「Field Detection」、つまり搬送波検知つきなのだ。
カードで検知しても仕方ないが、NTAG203FはHWSON8というパッケージらしい。

Fの方は、データシートの入手にパスワードが必要らしい。
よくわからんが、そこらへんが境目らしい。

2012年5月26日

NFC勉強会2はArduino率が高かった

福岡NFC勉強会の2回目から帰ってきた。
(主催者のまどろみさん、おつかれさまです)

 

今回の私は、「FALPとLLCP」というスライドを公開した。
公開、というのか。展示、ではないとおもうが。

私としては、FALPでもLLCPでもなんでもいいから、データを吸い上げたいだけだ。
しかし世の中の事情がそう簡単にはできていないので、うちの環境ではどっちも実現できないもどかしさを墨絵によって表現した。
・・・いや、墨絵ってのは嘘だがね。

 

聞いていた発表は、かなり興味深いところだった。
そこら辺は、他の人の紹介にお任せします。

 

基本的に、私は外に出て行くタイプの人間ではないので、社外勉強会に出ると驚かれる。
一応フォローしておくと、誘われたからでたんですよ! です。
3回目のお誘いはどうなるか、わからんです。
でも、主催者が今年までだし・・・などと悩むところでもあるが、まあそれは私の問題だ。


今回の勉強会に行ってわかったのは、Arduino率が高いということ。
私はArduinoを持ってないので、あー、とか、うー、とか思いながら見てたが、話には入れなかった自分に忸怩たるものがある。
深く恥じ入っているわけではないが、悔しいというところか。
業界とか情勢とか把握してなくて、話を聞くだけになってたところも多いがね。

 

しかしまあ、Arduinoはよくできていると思う。
使ったことはないけど、液晶に画面を出して「1ヶ月くらいしかやってないんですよ」っていわれると、そう思わざるを得ない。
持っている人の割合が非常に高かった。

まあ、こうやって時代に取り残されていくのだろうな、と寂しく笑い、私は天神を去った。

形式手法というものがある

今月のInterface誌が届いていたので、朝から読み始めた。

FM3の説明がたくさんあり、マルチファンクションシリアルで挫折しかけた私にはよさそうだった。

今はLPC2388で遊んでいるので、読むのは後回しにしようかと思ったのだが、OpenOCDの話が載っていたので、そこは読んでおこうと思う。
JTAGデバッガがほしいほしいといってはいるものの、あまり深く考えてなかったのだ。
私は仕事でロータバッハのしか使ったことがないのだが、そういえばJTAG ICEってなんでもいいってわけでもないよなあ、ということに気付いたのだ。

まあ、勉強会が終わってからですな。


今月からの新連載として「Bメソッドによる形式手法」という6回連載の企画が始まった。
仕事が煮詰まっていて忙しいときは、あまりこういう記事を読む気分になれないのだが、今月末は珍しく作業の狭間が来るので、ちょっと(気分に)余裕がある。
そういうときに、こういう勉強をしておかねば。

 

こういう「手法」のようなものは、展示会に行ったりするとあちこちで説明していたりするイメージがある。
なんというか、流行のようなものがあるような気がして、「また来年いくと違うことやってるんだろうな」と思って、不勉強なままになってしまう。
ここ数年、展示会とかいってないので、私の勝手なイメージだがね。

ただ、そうやって見過ごしていると、いつの間にか世の中の潮流から取り残されてしまう、という心配を最近するようになった。
「オオカミが来たぞ-」っていわれても「またか」と無視しているうちに、本当にオオカミが来て村が全滅してしまった、みたいな心配だ。


Bメソッド、というのは、ソフト開発のための形式手法の一つらしい。
そもそも「形式手法」ってなんじゃ?と思ったら、ちょうどいいのがあった。

いまさら聞けない 形式手法入門 (1/3)

そうなのよね・・・ときどき「いまさら」と思って調べないままにしてしまうことがあるのだ。
いかんいかんと心の中では思っているのだが・・・。

と思って読んだけど、やっぱりよくわからん。
もう1つ見てみた。

ディペンダブル・システムのための形式手法の実践ポータル

総称らしい。
たしかに、Bメソッドの記事にも「この辺をカバーします」みたいなことが書かれている。

 

最近、実装していくごとに仕様不明点を質問されたりするので、なんとかしたいところだ。
「こうやってこうやってこうやったときは、どうなるの?」というのが、自分でもよくわからなくなることがあるのだ。

曖昧な点をなくすために長い文章を書くのもメンテナンスが大変になるので、こういった手法で解決できるなら取り入れたいところだ。

2012年5月25日

[無駄無駄話]どうでもよさそうなスライドたち

前回の続き。
今度は、今まで作った中でもどうでもよさそうなスライドたちだ。

これはねぇ、うちの電子レンジが今年で18歳になったときに考えたものだ。
私が学校の研究室に入った年に買って(みんなの金で)、私が卒業するときに研究室が解散になったのでもらい、今に至る。



なんだこりゃ?
ああ、これは二日酔いでぼーっとした頭で電車に乗ろうとして切符を買ったが、ぼーっとしすぎて名前が似た遠い駅まで買ったときに書いたものだ。
払った金が悔しくてね。


これはなんか、急に思いついてつくった。
なぜか「メガネって、ずっとつけとるやん」と思ったのがきっかけ。
クリップアートを多用した作りになっているのは、「やっぱり絵があるといいよな」と思っただけである。


これは、あんまりおちゃらけてない。
AndroidでできたNFCアプリをPCから動かせるといいかもな、と思ったのがきっかけ。
バックグラウンドでの定期ポーリングがカードアクセス中に動いてしまうので何らかのブロックを入れたいな、と思ったところで止まっている。
この作りかけから、誰かやってくれんかなあ。
でも、AndroidエミュレータでNFCが使えるようになるという話もあったので、そんなに需要はないのかも。

2012年5月24日

[無駄話]最近作ったスライドたち

なぜか、ときどきスライドを作りたくなる。
前回のNFC福岡勉強会を機に作るようになったのだが、どうでもいいことを書きたいときに作るようになってしまった。
今回は初回なので、今まで作ったものをいくつか載せていこう。
といいつつ、slideshareの貼り方練習だったりする。
ページが重たそうだったら、気にくわないので削除しよう。

記念すべき?初回作品。
自分の過去を振り返っただけなので、ちと恥ずかしい気もするが、まあいいや。

これは勉強会で発表したもの。
背景が青っぽいのは、昔からの癖だ。
暗い部屋だと、白背景は画面がまぶしすぎる、というのもあるし、医学学会などでは青背景のスライドが多かったので、見慣れたということもある。
まあ、最近はそこまで暗い部屋でやることもなくなったので、そうでもないのかな。
きっとプロジェクターの性能が上がって、明るい部屋でも見やすくなったのだろう。
技術の進歩は、スライドの背景色も変える。

Aboutものが2つ。

どっちも、よく使っているものなので、自分のまとめとして作ったものだ。
FeliCa Plugは、私も話を聞いてもピンとこなかったので、イメージがつかめると嬉しいところだ。

基礎っぽい資料もいくつかある。

基礎は大切なので、資料を作っておきたい。
といいつつ、私自身は「NFCとは・・」みたいなのがあんまりわかっていない。
「ああ、nimocaとかあんなのね」とか「PaSoRiでアクセスできるやつね」で済ませるようにしている。
詳しい人も多いので、あまり細かいところまで気を遣いたくないだけだ。



さて、こんなところだろうか。
あとは、どうでもいいスライドたちが残っている。
個人的にはそっちの方に対する思い入れが強いのだが、忘れてるしなあ。