2012/11/29

[win8]Proximate DeviceはNDEFのみか

NFPを使ってみようかと思って、サンプルを動かした。
サンプルの中身は簡単に前回書いた。

NFCカードの検出を見ることができる3番目のサンプルを見ていたのだが、どうもNDEFになったカードしか検出を通知しないように見える。


image

 

サンプルがそうできているかもしれないのだが、サンプルがそこまで厳密にやるだろうか。
どちらかといえば、幅広くNFCカードのアクセスを検出したくなりそうではないか。

image

でも・・・使いもしないWindowsストアアプリを勉強するのも、ちょっと面倒だ。
どうせPaSoRiを使うんだし、SDK for NFC Starter Kitだけでいいやん、という逃げの気分にもなる。

どうしたもんかね。

[win8]Live Writerを使うとうまくアップロードできない

XPでLive Writerを使っていたので、8でも使っている。
が、ブログを書くところまではいいものの、アップロードすると終わらない。。。

5分放置しても終わらないので、Shift+Ctrl+Escでタスクマネージャーを起動し、なくなく削除。
さすがに、がっくりだ。

 

書いていたのは「for Windows8の開発画面は黒くてアイコンとかが見えないけど、設定を淡色にすると見やすいよ」という話。

image

Live Writerでうまくいったことが少ないので、なんかあるんかな。

こういう些末な作業が多くて、まだNFPのアプリを見てみるところまで進んでいない。
開発環境が変わるんだから、仕方が無いと言えば仕方が無いのだが、無駄な時間とも感じてしまうことだよ。

[win8]Live Writerを使うとうまくアップロードできない

XPでLive Writerを使っていたので、8でも使っている。
が、ブログを書くところまではいいものの、アップロードすると終わらない。。。

5分放置しても終わらないので、Shift+Ctrl+Escでタスクマネージャーを起動し、なくなく削除。
さすがに、がっくりだ。

 

書いていたのは「for Windows8の開発画面は黒くてアイコンとかが見えないけど、設定を淡色にすると見やすいよ」という話。

image

Live Writerでうまくいったことが少ないので、なんかあるんかな。

2012/11/28

[win8]Express for Windows8は評価用?

Visual Studio Express 2012 for Windows 8をインストールした。
デスクトップアプリしか作らないだろうと思ったけど、NFPのサンプルが四角い画面が出てくるアプリ用のようだったので、インストールしたのだ。

起動させると、いつものlive.comからライセンスなのかなんなのかを取得する画面が出てきた。
まあ、これはとればいいや。
「評価用です」と出てくるが、Expressだからそうなのかな?

取得した文字列を入力すると次に進み、こんな画面が出てきた。

image

おおう。
キャンセルしても進めることができる。

どこまでできるかやってみたが、ビルドまでだった。
実行すると、配置エラー、なるものが発生した。
許可されてないからコピーできないとか、そんなのだろうか。

あきらめて同意すると、こんな画面が最後に出てきた。

image

1ヶ月??
Desktopの方は何もいわれなかったのに・・・。

http://msdn.microsoft.com/ja-JP/library/windows/apps/hh974578.aspx
ここを少し読んだが、開発者用ライセンスは無料で作ることができて、それを使うと期間が長くなるよ、というようなことをいっているようだ。

まあ、そのとき考えよう。


MicrosoftのProximity Sampleを動かすと、こんな画面が出てくる。

image

3つ項目があって、最初はSNEP受信(というのも変なので、たぶんSNEP Server)。
次は、Windows8から送るSNEP Put。
最後は、NDEFカード検出。

・・・だと思う。
よくわからん。

デスクトップ画面で動作するExpressからビルドして、Expressから実行すると、「Windows SDK」という青い画面(ブルースクリーンよりは淡い画面)が出てきて、それから上のような画面に遷移する。
Alt+TABを押すと、またデスクトップに戻ることができる。

が、そこからあのアプリに遷移する方法がなかなかわからん。
とりあえず、

  1. マウスカーソルを右下に持ってきて、右側にメニューっぽいのを出す
  2. 上から3番目「スタート」を選択
  3. 四角がたくさん表示されるので、一番右までスクロールさせる

image

この「Windows SDK」を選択すると、あのアプリ画面に遷移した。

 

「あのアプリ画面」とか「四角い画面」とか呼んでるけど、正式にはなんだろうね。
Metro、というのも登録商標がかぶってだめだったとかなんとかいっていたような。
どうも「Windowsストアアプリ」らしいのだが・・・Windowsストアに置かなくてもそう呼んでいいんかな。


スタートメニューを見ると、Desktopの方は「Microsoft Visual Studio 2012 Express」に、Windows8は「Microsoft Visual Studio 2012」にインストールされていることがわかった。

image

ってことは、Express for Windows8はExpressだけどExpress扱いじゃないということなのかな。
ようわからんわぁ。


ちなみに、SNEPで送りつけるとこんなのが来ているらしい。

image

NfcBarcode ?

NFC Barcodeなるものが、Android 4.2にあるらしい。
classは、NfcBarcode
読んでもわからん。

 

NFC Worldでは、これこの記事か。
日本語で説明してあるのは、これがわかりやすい
ビット数は多くないし、ROMにしかならないが、とにかくRFIDとして読み込めるらしい。
「barcode」ってのは、ROMですよってことから付けた名前なのかな。

 

Kovioさんのところでは、開発キットもあると書かれていた。
なんだろう。専用インクをくれるのかな?
でも、それだけだと・・・。

 

まあ、そういう切り口の製品もあるんだな。
値段が非常に安いというのは強みだから、いい製品に育ってほしいものだ。

2012/11/26

RC-S380はRC-S370ではない

まあ、当たり前のことなのだが。

RC-S380は、RC-S370とは違うよ、ということ。
予想では、こことここが違うんじゃないかな、という程度だったのだが、そんなもんじゃなかった。
そういう意味では、買ってみてよかった、というところである。
(詳細が知りたい場合は、自分で調べてみよう。)

不思議なことに、私としては非常に安心した、ということを書いておこう。
しばらくは、NFP用にしておいて大丈夫そうだ。

2012/11/25

[winxp]RC-S380を挿す

さて、Windows XP SP3にもRC-S380を挿してみよう。
デバイスマネージャは、OSが対応していないから「FeliCa Port」扱い。

コントロールパネルの方は、ちょっと違った。

image

Windows8のと同じダイアログで、NFPのチェックボックスがなくなっている。
PC/SCが無効になっているのは、手動で変更させただけだ。

 

さて、この状態で搬送波が出ているかというと・・・やはり出ていない。
Windows8のときには出ていたから、やはりOSがポーリングなどやっているのだろう。


気になるのは、PC/SC設定はいいとして、右側のNFC-F以外の設定ができる部分だ。

「カード共通設定」と「Mifare Emulation対応カード設定」の2つ。
これらは、一体何なのだろうか?
Windows8では意味を持つけど、WinXPでは効果が無い項目なのかな?

というのも、NFC-AとBの通信速度が、424Kbpsになっていたからだ。
彼らは、106kbpsデバイスではないか。
なぜゆえ、デフォルト値がそうなっていないのだろうか?

FeliCaランチャーの動きが変わるかと思ったが、「FeliCa」とついているだけあって、MIFARE Ultralightには反応しなかった。
まあ、これは以前からそうだな。

であれば、XPからRC-S380を使う点で有利なのは、SDK for NFC Starter Kit Ver.2.0を使ったアプリを作るときかな。


さて、あとはRC-S380について個人的に詳細を調べる必要がある。
こっから先はWindowsの話じゃないし、私が想像しているRC-S380とどれだけあってるかの答合わせをするだけなので、ここでおしまい。

[win8]RC-S380を挿す

とうとう、うちにもRC-S380がやってきた。
PaSoRi製品が2つもあると、NFCをやっている人のように見えてしまうが・・・。

Windows8 Pro 32bitに挿した。
ちなみにPCは、Thinkpad T61だ。

デバイスマネージャでは、こう見える。

image

上の「FeliCa Port」は、RC-S370、下の「近接通信デバイス」がRC-S380だ。
そう、扱いが違うのだよ、扱いが。

コントロールパネルの「NFCポート/パソリ」も様子が変わる。

image

うーん、よくわからん。

PC/SCを無効にしたが、ちゃんとポーリングは続けている。
OSがやっていると考えていいのだろうと思う。

 

Nexus7でブラウザを起動させてホームページを開いた後でRC-S380に載せると、Nexus7にはAndroid Beamの送信側画面が出てくる。
Windows8側は、音が何かしているようだ。

Nexus7側をタッチすると、Windows8側は右上にメッセージが表示された(なんとか、って名前がついていたような・・・)。
タップせい、と言われるのでマウスクリックすると、ブラウザが起動して、同じURLが開いた。
うちのPC設定のせいかもしれんが、タイルが出てる画面でも、デスクトップ画面でも、デスクトップ画面に遷移してFirefoxが起動した。
Unityっぽい画面でブラウザは起動しないのか、Firefoxを標準にしているからこういう動きなのか・・・。

 

私としては、Android Beamもこの方式の方がいいと思う。
つまり、受信側が「受けとる選択」をできる方式だ。
Androidは送信側主体だから、セキュリティ的にちょっと、なんだかなぁ。


おまけ

検索すると、Proximity Setting、みたいなコントロールパネルもありそうなのだが、見つからんかった。
製品になってなくなったのか、なんか違うのか・・・。
http://www.thewindowsclub.com/enable-disable-proximity-feature-windows-8

2012/11/24

[win8]DesktopからWinRT APIを使うことはできるようだ

正式には、Metroじゃなくて、Windows Realtimeと呼ぶらしい。WinRTとか。
Realtimeって書くと、リアルタイムOS系の人が混乱しそうだけどな。

 

まだWindows8を使い始めて日も浅いし、メインPCにインストールしているわけでもないのでそんなには使っていない。
UbuntuでUnityが使いづらいのでxubuntuにしたのと同じように、Windows8の四角がいっぱい出てくる画面(WinRTを使った画面?)は私には無理だった。すまん。

通常使う分にはそれでいいのだが、MicrosoftのNFC実装であるNFPはWinRTのAPIらしい。
以前調べたときからWordの文書も更新されているみたいだ(2012年10月12日版)。変更履歴には、Tap and Doのマークについての情報が更新されたらしい。

正直に書くと、私はWindowsのソフト開発には全然詳しくない。
開発環境をインストールすればなんとか調べつつできるかも、というレベルだ。
ここを読むと、WinRTというのは、.NET/Win32の上位層で、なおかつそれらから切り離されたシステムらしい。WinRTからWin32は呼べない、と書いてあるからだ。

じゃあ、開発環境もDesktopではなくてWindows8にせんといかんの?
あんだけ時間かけてインストールしたのに・・・。


あまり読んでいなくて申し訳ないが、タイトルだけ見る限りではWin32からWinRTのAPIは呼べるらしい。

Using Windows 8* WinRT API from desktop applications

さすがWin32。しぶとい。
.NETもそうだけど、結局はWin32のAPIを呼ぶことになるということも多いので、最後まで生き残る気がする。

WinRTのアプリは使うことがないのだろうが、デスクトップアプリでも動かせるのならやってみてもいいのかな。
とりあえず、Visual Studio ExpressもDesktopでやれると考えておこう。
だめだったら、そのときだ。


Windows RT、というのもある。
はっきりとMicrosoftが書いたページが見つけられないのだが、WinRTしか動かないOSのようなことが書かれているところが多かった。

WinRTはCOMベースらしいので、ARMのようにバイナリが異なる環境であっても、プロトコルさえあっていれば動く、ということなんかね。
COMって使ったことないけど、ATLとかなんとか、そんなのじゃなかったっけ(ATLも使ってない)。
CORBAみたいなの、と当時は説明があったような気がするが、CORBAもやったことがない。。。
.NETが出たときは「中間言語にするからバイナリが異なってもOK」だったと思うが、気分が変わったのだろうか。。。

てきとうにまとめると、

  • WinRTで書いておくと、四角いカラフルな画面やWindowsRTから使えるが、Desktopでは使えん
  • Win32で書いておくと、四角いカラフルな画面やWindowsRTからは使えないが、Desktopでは使える

ということなのかな。

[win8]無償のVisual Studio Expressはどちらを選べばよいのか

OSをインストールしたら、開発環境もインストールせんといかん。
Windowsであれば、とりあえずVisual Studio Expressか(無償だから)。

はた、と困った。
Windows8」と「Desktop」があるからだ。
四角がいっぱい出てくる方がWindows8で、いつものデスクトップ画面がDesktopだろう。

Windows8の方は、使えるシステムはWindows8だけだ。
Desktopは、Windows7でも使えるようである。


それで、だ。
私がやりたいのは、NFP(Near Field Proximity) APIを使うことだ。
それには、どっちをインストールすればいいんだろうか?
あるいは・・・サンプルソースなんかは「Visual Studio 2012」とあるから、Expressでは利用できないのか?

うーむ。

2012/11/23

[nfc]よくわかってないハンドオーバー

ひさびさに、NFC Forumのドキュメント読みを始めた。
方向性に迷っているので、基本に返ってみよう。

 

ドキュメント名は「ConnectionHandover」。
ハンドオーバー。
あんまり縁が無いのだが、最近はNFCのハンドオーバーで接続をする、みたいな機器がよく出ている。
わからないままでいるのも寂しいので、資料を読んでみようというところだ。


まだ最初しか読んでいないが、「ハンドオーバー」といっても2つあるらしい。
Negotiated HandoverとStatic Handoverだ。

 

Negotiated Handover

Negotiated Handoverは、2台のNFC Forum端末が「further data exchange」をするために、別の通信方式(alternative carriers)でやりましょうよ、というNDEFメッセージを交換することらしい。

「further」はfarの比較級だから、より遠い、なんだろうけど、より速い、という意味もあるのかな。より大きなデータの交換をしたい、というのもあるだろう。

接続要求を行う側(Requester)と、それに返事をする側(Selector)に分かれている。
NFCの読み書きっぽくいうと、RequesterがInitiatorに、SelectorがTargetに相当するようなものっぽい。
図を見ると、

Requester:Wi-FiかBluetoothでどう?
Selector:じゃあ、Bluetoothでいこう。

みたいなことをやっている。

image

 

Static Handover

もう1つのStatic Handoverは、NFC Forum端末同士ではなく、NFC Forum端末がNDEFカードなどのデータを読み込んで通信網との接続設定を行うしくみ、だと思う(provision、と書いてあるので)。

無線LANのアクセスポイントとの接続設定なんかをやるイメージでいいのかな。
接続設定なんて最初とか新しく買い直したときくらいしかやらないので、だいたいやり方を忘れてしまっている。
それをかざすだけでやれるんなら便利だな、と思ってしまう。

そういう「めったにやらないけど、必要な手順」みたいなところでNFCを使うとよい、ということなのかしらね。

image


ざっとPDFを検索したのだが、Bluetooth、という単語は説明のところしかなく、NDEFのところには出てこない。
具体例も載っていないので、実際の運用をどうするかはBluetooth SSPなんかのドキュメントを読むことになるのかね。

 

あら、Wi-FiのドキュメントはまだNFC Forumにはなさそうだ。
これは煮詰めているところなのかな?
Wi-Fi Directってのがあるが、ああいうのになるのかな?

世の中の流行り廃りがよくわかってないなぁ。

[win8]哀しきハイコントラスト

Windows8でハイコントラストテーマを使っている。
ブラウザで、Google+のページを見てみた。

 

image

哀しすぎる・・・。
ボタン類がまったく見えない。

コントラストは高いのかもしれんが、ここまで見えないと使い物にならない。
まあ、Windows8のせいってわけでもないのだろうが、ちょっとこれはねぇ。。。。

泣く泣く元に戻すことになった。

[win8]RC-S370は標準NFC機能に対応していない

わかっていたとはいえ、一度やっておきたかった。。。

RC-S370は、Windows8の標準NFC機能に対応していない、となっている。
では、つなぐとどうなるんだろう?

USBを挿すと、Windowsが認識して、SONYのドライバがインストールされたようだ。
もしかすると、と思ってPaSoRiに携帯電話をかざしてみたが、搬送波を出している様子はない。
まあ、そうだよね。。。

デバイスマネージャを開くと、NFCポートソフトウェアはインストールされていない、と出てきた。
クリックするとインストールが・・・始まらなかった。
うちのPCの設定のせいかもしれんが、デバイスマネージャが応答無しになってしまった。

SONYのホームページからダウンロードしようとしたが、ダウンロードボタンが見えない。。。
FirefoxもIEも見えない。class=”button”ってのが見えてないのかな?
XPからだと見えているけど、なんだろう?
詳しくないのでよくわからん。
※Windows8でハイコントラストテーマを使っていたので見えていなかったようだ。変更すると見えた。

ボタンが見えないだけで押せるので、ダウンロードはできる。
インストールしてからPaSoRiを挿すと、搬送波が出始めた。
FeliCaランチャーが起動したんだろうと思ったが、そうでもない。

ってことは、Windows8がポーリングしているのか?
P2Pの相手を探そうとしているのかも、と思ってNexus7をかざしてみたが、特にお互い何もない。

コントロールパネルにPaSoRiの設定があったので見てみると、PC/SC設定に「ポーリング」というのがあった。
PC/SCを無効にしてPaSoRiを挿し直すとポーリングが止まった。
そういうことですか。

 

ということで、RC-S370はWindows8の標準NFC機能には対応していない、ということの確認でした。
まあ、SDK for NFC Starter Kitは対応しているだろうと思うから、試してみよう。

[nfc]NCIの使用例

http://blog.livedoor.jp/cartan0216/archives/54272832.html

 

たしか、Nexus7はNXPのPN65を採用していたんだと思う。
Nexus10とかでは、Broadcomのチップに変更されたらしい。

 

そこまでは、ふーん、と読んでいたのだが、BroadcomはNCI仕様のドライバを提供しているようだ。
ドライバなのかミドルなのかは知らんけど、とにかくNCI仕様のインターフェースということだ。
今までのAndroidは、NfcServiceから下はかなりNXPのライブラリであるlibnfc-nxpに依存していた。
ちょろっとPaSoRi用に移植してみようとしたが、深い部分には手を入れるのが難しかった。

それがNCI仕様になったということは、NfcServiceもNCI向けに書き直したということだろう(既にそうなっていたのかもしれないが)。
ってことは、たとえば今SONYさんが作ってる新しいモバイルNFCチップなんかも、NCI仕様に沿ったドライバ/ミドルを提供すれば、今までよりも搭載しやすくなった、ということだろう。

まあ、だいたいこういう「つなぐ」作業はすんなりいかずに細かい部分で苦労することになるんだろうけど、まったく新規でやるよりも敷居は低くなることだろう。

 

ハードウェアメーカーにとっては「○○に採用されたので安心できる」という状況ではなくなってしまったが、いいものを作ればよそに取って代わることもできる、ということなんだろうな。
大変な時代になったなあ。

[win8]ハイコントラスト

ノートPCに、Windows8をインストールした。
新しくすると、いかに前のOSに慣れていたかがわかってよいものだ。。。

 

使い慣れていないのは、使い慣れるか、使い慣れずに腹が立つかどちらかになるだろう。
しかし、見えにくい、というのはちょっと困った。
私が、見えにくい、と思ったのは、これら。

  • ウィンドウタイトル
  • スクロールバー
  • デスクトップの文字

 

デスクトップの文字、というのは、アイコンの下に表示される文字のことだ。
ドットフォントじゃないので、にじんで見えてしまう。
だからといってフォントのスムージングをOFFにすると、がたがたして格好が悪い。
うーむ。

これは、窓の杜でフォントを変更するツールが紹介されていたので解決した。
ありがたや。

 

スクロールバーは、バーとその外側の色の差があんまりないので、どっちがバーかわからんかった。
ウィンドウの見た目が平べったくなったのは、Windows 3.0A(だっけ)みたいで好きなんだけどねぇ。

色を変更していっても変わらなかったのだけど「ハイコントラストテーマ」にすると見栄えが変わった。
バーの方に「三」みたいなのがついて、どっちがバーかわかるのだ。
まあ、それでいいか。

 

ウィンドウタイトルは、文字色が黒固定だったので、ウィンドウの色を濃くすると見えづらかった。
しかしこれも、ハイコントラストテーマにすると色を選択できることがわかった。
まあ、それでいいか。。。

 

ただ、タスクバーの見栄え、というよりもQuick Launchの見栄えがかっこうわるくなった。

image

縦線が入るし、隠れたアイコンを表示させるボタンが出っ張ってる。
マウスカーソルを当てるとへこんで見えていたのだろうが、その部分が黒になっているのだろう。
うーん・・・

もう、根負けして、しばらくこれでやることにしよう。
何が見やすいのか、だんだんわからなくなってきた。。。

OSが変わっても使うツールが一緒ならなんとかなるだろう、と思ったが、けっこう依存しているということがわかっただけでも収穫があったと見ることにしよう。

2012/11/18

[android]PreferenceActivityとActivity

わかったような、わからんような・・・。
基本に戻って、Android DevelopersのSettingsを読んだ。
<PreferenceScreen>の書き方は、前と同じようだ。
前をあまり知らないが、昔使っていたxmlファイルも同じような書き方だった、というだけだが。

「Using Preference Fragments」に、「PreferenceFragmentを追加すればPreferenceActivityは使わなくてよい」とある。
このときは、こんな感じみたいだ。
  • 上のActivityは、"Activity"をextends
  • その中に、static classとしてPreferenceFragmentをextendsしたものを持つ
    • onCreate()でaddPreferencesFromResource(R.layout.xxx)する
  • ActivityのonCreate()ではsetContentView(R.layout.xxx)はやらない。
    代わりにgetFragmentManager().beginTransaction().replace()してstatic classを指定?する。
こうすると、PreferenceActivityでやったときのような画面が表示された。
R.layout.xxxの中身を見て判断しているのかな?

じゃあPreferenceActivityはもういらないのか、と思って読み進めると「Using Preference Headers」でまた出てきた。
A500の設定画面は、左側に設定グループ、右側に選択した設定グループの中身が表示されていた。
あの左側に表示されるやつがHeaderみたいだ。
<PreferenceCategory>とはまた違うのか。
あるいは、<PreferenceScreen>の中に<PreferenceScreen>を書くようなsubscreenとも違うのかね。
subscreenは1つのxmlファイルの中に書かんといかんのだが、それが分離できてよい?
でも、ちょっとやれることが異なるような気がする。
とにかく、Preference Headerを使うときは、こんな感じみたいだ。
さっきと違うところは赤文字にした。
  • 上のActivityは、"PreferenceActivity"をextends
  • その中に、static classとしてPreferenceFragmentをextendsしたものを持つ
    • onCreate()でaddPreferencesFromResource(R.layout.xxx)する
  • ActivityのonCreate()ではsetContentView(R.layout.xxx)はやらない。
    getFragmentManager().beginTransaction().replace()もやらない。
  • onBuildHeaders()を追加する。
    その中でloadHeadersFromResource(R.xml.xxx_header)する
  • res/xml/xxx_headers.xmlを追加する。
    その中にandroid:fragmentでstatic classを指定?する。
こうすると、Nexus7では、最初にPreference Headerが表示され、それを選択するとPreferenceActivityでやったときのような画面が表示された。
Fragmentって、必ず画面が左右に分かれるわけじゃないんだな。
あまりFragment自体をわかっていなかったのだが、左右に画面を分けるしくみじゃなくて、画面の大きさを吸収するためのしくみらしい。
私にとってはNexus7はけっこう大きな画面だと思っていたのだが、Fragmentにしても画面遷移しているところからすると、まだまだ狭いということなのだろう。
試しに横向きにしてみたが、同じだった。
まあ、そういうものなのだろう。

試作アプリ
https://sites.google.com/site/hiro99ma/home/files/freeapk/LockMemo.apk?attredirects=0&d=1

2012/11/17

[android]PreferenceActivityがうまくいかん

久々の、うまくいかんシリーズだ。

Android 4.2になって、SDKなども新しくなった。
1つ気付いたのは、LockScreenでウィジェットが表示できるようになったことだ。

所有者情報にテキストを入力しておくと、それが表示されることもわかったが、ウィジェットも表示されるならそれを利用したしくみがあってもよかろう。
そう思って、単に登録した文字列をTextViewで表示させるウィジェットを作ろうと思った。

 

ウィジェット自体はときどき作っているのでいいとして、問題は文字列を入力するしくみだ。
設定画面を表示するウィジェットも作っていたので、それを流用しようとしたが・・・。
「そのAPIはもう時代遅れですよ」みたいなことをいわれてしまった。

年齢に敏感なお年頃だけに、そういうのには反応が早い。
なんとしてでも、時代遅れでないAPIを使わねばッ!

PreferenceActivity#addPreferencesFromResource()みたいなのが、いかんらしい。
じゃあどうしたらいいんだというと、どうもフラグメントというものを使うらしい。
名前は聞いたことがあるが、自分には関係ないだろうと思っていたやつだ。


とりあえず、うまくいっていないことだけは書いておこう。
だめなのはわかるけど、logcatでエラーも出ていないので模索中、というところだ。

まあ、なんでもかんでもうまくいくと、おもしろくないわな。


おまけ

 

最近のAndroidアプリ開発では、Eclipseのウィザードでアイコンなんかも作ってくれる。
このしくみは非常に助かる。
見た目は変えたいけど、開発中なので「見た目が違う」程度でいい、というときなどだ。


それはいいのだが、「これはなんだろう?」というものもある。
私が気になったのは、これだ。

image

右上がなんとなく顔っぽいから「木の幹が歩いて岩場を渡っている」というようにみえる。

でも、左下のほうを注目すると、ムーミンに出てくるばあさんの横顔のようにも見える。
ばあさんが、カーテンを手にとって匂いをかいでいる、というイメージだ。

もう少し掘り下げると、このばあさんは姑で、同居している嫁との仲があまりよろしくない。
追い出すわけにもいかないけれども、がさつな嫁に一日ひとことはいわないと気が済まない。
今日はカーテンのことにするか、と思ったシーンである。

「毎日ファブリーズはしているんですよ」
「ふん、あんなもので全部が片付くわけないでしょ」

そんなツンケンした会話が聞こえてきそうだ。

NfcAdapter.getDefaultAdapter()がなくなっていたが、NfcManagerを使えばいいようだ

うちのNexus7も、Android 4.2になった。
ロック画面に所有者情報が表示できるようになっていた。
操作するAPIはあるのかな?

と思って、新しいAndroid APIの差分を見ていると、気になるのがあった。
NfcAdapter.getDefaultAdapter()がなくなったらしい(API 16)。
http://developer.android.com/sdk/api_diff/16/changes.html

 

4.2はAPI 17らしいから、前からそうだったんだ。。
どうしたらいいんだろう?と思ったが、NfcManager#getDefaultAdapter()がいるから、いいのか。

あんまりよくわかってないと、ささいなことに動揺してしまいますな。

 

setBeamPushUris()、なんてAPIもできたのか、と説明を見てみると、こっちの例ではNfcAdapterのgetDefaultAdapter()を使っていた。。。
先にsetBeamPushUris()が追加されて、あとでNfcAdapter.getDefaultAdapter()がなくなったのかな、とよい方に解釈しておこう。

[nfc]Activityを把握したい

私が読んだことがあるNFC Forumの技術仕様書はどれだっけ、と調べてみた。

緑色は、よく読んだと思うもの(自分の中では)。
橙色は、少しは読んだと思うもの。

image

うーん、あんまり読んでないな・・・。
色がついているから読んでいるように見えるが、橙色のものはそんなに読んでないのだ。

 

読んでない中でも、Activityは気になっている。
「NFCは規格で、FeliCaはその中のNFC-F / Type 3 Tag」といってはいるが、製品としての振る舞いとなると話はまた違う。
SONY製品の技術者インタビューにこんな一文があった。

動作上の違いは、NFC対応の機種ではアプリをインストール済みであれば起動していなくてもワンタッチでペアリングできるのに対して、「おサイフケータイ」対応の機種ではアプリを起動した状態でタッチして接続する。

確かにおサイフケータイは、デフォルトでカードエミュレーションになっている。
そして、NFC搭載のAndroid端末は画面がロックされていなければカードを探しに行く。

さて、この動きの違いをどう考えたらいいだろうか? となったときに読むのが、Activityだと思っている。


私は、Android端末の動きは、Androidの仕様だろうと思っている。
(ロック画面になったらポーリングしない、という仕様はNFC Forumでは決めてないだろう、というだけ。)

 

Activity仕様書を読むと・・といいたいが、読むのに時間がかかるのでInterface誌2012年4月号を読む。
第2章が非常に役立っている。
これを読むと「PollとListenを任意の間隔で行き来する」と書いてある。
ということは、この動作についてはAndroidの動きがNFC Forumの仕様に近いんだ。

 

個人の感想でいえば、ユーザがボタンを押している間はPollする、というような方がうれしいな。電池食うし。
Listenも、押してる間だけでいいや。
まあ、ボタンを付けると値段が上がってしまうことにはなるが、机の上にNFCカードをばらまいているときにNexus7をぽいっと置くと、あの検知音が鳴動するのは寂しいものだよ。
まだNFC製品は多くないからいいけど、「カバンの中に端末を入れてたら勝手にNFC検知してしまった」みたいなことがあるのかもね(勝手に電話がかかってしまった、みたいなイメージ)。

2012/11/14

9patchとNFC (2)

勢いで、昨日のやつの蓄積版を作った。

https://sites.google.com/site/hiro99ma/home/files/freeapk/NfcTest7.apk?attredirects=0&d=1

 

まったく、役に立ちません。
しかも、長さの記録も残らないという。。。

 

まあ、これはこれとして。
作っていて思ったのだが、NFCすごろく、みたいなのもいいかも(正月が近いので)。

すごろくの台紙と駒は、自作する。
台紙は好きなように作ってよい。スタートとゴール、それとイベントポイントを作る。
イベントポイントには、NFCのシールを貼る。

あとは、いつも通りにすごろくをやる。
駒がイベントポイントに止まったら、NFCのリーダをポイントにかざす。
そうすると、イベント内容が画面に出てくる。

イベントの内容は、あらかじめ決めておいてもいいし、ランダムでもいい。
すごろくの開始前にどうするか決めるようにするといいだろう。

 

「既存の遊び飽きたすごろくも、これを使って新しい遊び方が!」みたいな。。。

 

売れんな。

9patchとNFC

せっかく9patchの練習をしたので、NFCアプリを作ってみた。

https://sites.google.com/site/hiro99ma/home/files/freeapk/NfcTest6.apk?attredirects=0&d=1

 

 

・・・。
・・・・・・・。

私の作るアプリなんて、こんなものだ。

 

応用編として、加算されていく、というバージョンも考えている。
ゴールに到達するまでの時間を競う、とかなんとか。
まあ、考えただけで、たぶん作らないけどね。

2012/11/11

[nfc]SNEP serverを簡易実装

前回の続き。
SNEP serverを、簡単に実装することにした。

SAPの扱いがわかれば、そう難しいものではない。
しかも「簡易」なので、1回分のI PDUしか扱わない。お手軽だ。

 

さて、実装はしたのだが、今のところCygwinとかでしか動かない。
なんというか・・・使い道がない。
CygwinでURLを受けとって、何ができるのか・・・wgetとかか?


そうした末に思ったのが「組込機器がSNEP serverになって、やれることは何か?」ということだった。

携帯電話であれば、画面もあるしネットワークもあるので、SNEP serverとしても十分に役立つ。
しかし、画面もない、ネットワークもない、となると、あまりメリットが思いつかない。

 

ちょっと思いついたのは、揮発メモリっぽい使い方だ。
NFCカードに書き込むと、消さない限りは残ってしまう。
それだと嫌だな、という場合に、

  1. SNEP serverとしてSNEPを受けとる(RAMに保存)
  2. 次にSNEP Getされたら、終わると同時にRAMから消す

みたいな使い方だ。
使い道は・・・スパイ手帳、みたいなやつかしら。
電源スイッチがあって、押している間しか保持されないようにしておけば、途中で敵(?)に襲撃されて奪われても、手を離しさえすれば消えてしまうとかね。
人が記憶しておけばいいやん、と思うかもしれんが、記憶していたら引っ張り出されるかもしれんからな。
スイッチを押している手が大変って? それはスパイだから技術でカバーだ。


NFCって、近距離しか通信しないので、秘密めいたことをやるのも楽しい気がする。

2012/11/10

[llcp]SSAPで0x20をもらったら

いつものことだが、マニアックな話だ。

Nexus7が来て、うちでもSNEPの動作が確認できるようになった。
送信(PUT)の方は、できる。
そうなると、SNEPサーバ側になってPUTを受けとる方もやりたいではないか。

 

PUTするときは、こんなシーケンス(site)だ。
それを受けとる方になるなら、こういうことになるだろう。

image

単に左右が逆になっただけだ。

そこまではよかった。
PaSoRiと向かい合わせて、Nexus7をタッチするとPDUでCONNECTが来ることもわかった。
しかし、CONNECTと一緒にくるSSAP(Source Service Access Point)が、0x20だったのだ。


SAP(Service Access Point)は、「HTTPだったら80」みたいなものと同じような扱いだ(と思っている)。
SAPの値によって、やりたいことが決まるのだ。

SSAPは、送信元のSAP。DSAPもあって、これは送信先のSAP。
PDUのCONNECTは、SSAPとDSAPを指定することになっているので、両方来る。

SAPの値は、0x00~0x0Fまでが「Well-known」になっていて、固定だ。
SNEPは0x04。
だから、私も「SSAP=0x04、DSAP=0x04」を期待していたのだ。

 

だが、やってきたのは「SSAP=0x20、DSAP=0x04」。
DSAP、つまり私に対しては、SNEPを要求している。

では、0x20は?
これは、「local LLC as the result of an upper layer service request」ってなってる。
0x20~0x3Fが、その値。
local LLCは、well-known LLCではない、という意味のlocalか。
それに続く「上位層のサービス要求の結果」は、何がいいたいのか。。。

0x00~0x0Fと、0x20~0x3Fは上記の要領だが、その間の0x10~0x1Fもある。
これは、名前検索(SDP)を使って割り当てる、ということらしい。
で?

よくわからんので、試すことにした。
Androidが先生なわけじゃないから、あまり好きではないのだが、わからんのだから仕方が無い。


  • SSAPが0x20~0x3Fのときは、PDU CCを返す

これは、いいとしよう。
CCにもSSAPとDSAPがいるので、その値が今回のポイントになる。

  • DSAPが0x04になっているので、SSAPも0x04で返す
  • SSAPが0x20になっているので、DSAPも0x20で返す

 

試した結果、前者はSYMMをやり返すだけになってしまったが、後者はI PDUを送り返してきた。
つまり「あんたにはSNEPでやってほしいけど、他の番号でやりとりしようや」ということなのかな。

これは、Nexus7のchromeで、このhiro99ma blogを表示したままタッチしたときのI PDUだ。

D/[analyzePdu() 1259] [D:0x20/S:0x20]
D/[analyzeInfo() 1427] PDU_I(NS:0 / NR:0))
D/[analyzeInfo() 1437]   [I]10  SNEP version(1.0)
D/[analyzeInfo() 1437]   [I]02  SNEP Put Request
D/[analyzeInfo() 1437]   [I]00  Length [0]
D/[analyzeInfo() 1437]   [I]00         [1]
D/[analyzeInfo() 1437]   [I]00         [2]
D/[analyzeInfo() 1437]   [I]1a         [3]
D/[analyzeInfo() 1437]   [I]d1  SR=1, TNF=WKS, MB=1, ME=1
D/[analyzeInfo() 1437]   [I]01  RecordType長
D/[analyzeInfo() 1437]   [I]16  Payload長
D/[analyzeInfo() 1437]   [I]55  U(URI)
D/[analyzeInfo() 1437]   [I]03  http://
D/[analyzeInfo() 1437]   [I]68  h
D/[analyzeInfo() 1437]   [I]69  i
D/[analyzeInfo() 1437]   [I]72  r
D/[analyzeInfo() 1437]   [I]6f  o
D/[analyzeInfo() 1437]   [I]39  9
D/[analyzeInfo() 1437]   [I]39  9
D/[analyzeInfo() 1437]   [I]6d  m
D/[analyzeInfo() 1437]   [I]61  a
D/[analyzeInfo() 1437]   [I]2e  .
D/[analyzeInfo() 1437]   [I]62  b
D/[analyzeInfo() 1437]   [I]6c  l
D/[analyzeInfo() 1437]   [I]6f  o
D/[analyzeInfo() 1437]   [I]67  g
D/[analyzeInfo() 1437]   [I]73  s
D/[analyzeInfo() 1437]   [I]70  p
D/[analyzeInfo() 1437]   [I]6f  o
D/[analyzeInfo() 1437]   [I]74  t
D/[analyzeInfo() 1437]   [I]2e  .
D/[analyzeInfo() 1437]   [I]6a  j
D/[analyzeInfo() 1437]   [I]70  p
D/[analyzeInfo() 1437]   [I]2f  /

 

いいのか・・・な?
どうも、LLCPについてはNFC Forumのドキュメントを読んでもよくわからんなぁ。

[nfc]NCI仕様書1.0が出た

NFC Forumから、NCI技術仕様書1.0が出た。

NCI・・・NFC Controller Interface。
以前取り上げた気もするが、すっかり忘れている。
週末、軽く読んでみるか。

とちょっと眺めようと思ったが、これはそういう姿勢で見ちゃいかんな。
大物の仕様書らしき感触がある。

 

今までのNFC Forum仕様書は、どっちかというとNFCの無線に関する仕様が多かったと思う。
こういう無線で制御しましょう(Technology)とか、こういうデータにしましょう(Platform、NDEF)というようなものや、無線の出し方(Activity)とかだ。

NCIはもうちょっと内側の、NFCを制御する機器や部品を中心にした仕様のようだ。
仕様書では、NFCを直接制御する機器をNFCC(NFC Controller)、NFCCを制御する機器をDH(Device Host)と呼んでいて、このNFCCとDH間のインターフェースをNCI、という名前で決めたもののようだ。

図だけ見ると、NFCCとDHの間は物理的(Physical connections)に接続されている。
だからドキュメントの中にも、SPIやI2C、UARTのような用語が出ている。

と思っていたが、ISO-DEP/NFC-DEPをRemote NFC Endpoint間の通信として使うようなことも書かれている。
広い・・・範囲が広いな。


これだけ読むと、MicrosoftとかがやってるPC/SCと似たようなもののような気がする。
まあ、PC/SCの仕様書も読んでないから、雰囲気だけでそう思ったのだが。。。
APDU、なんて出てくるから、関係はあるのかな(ISO/IEC 7816関係?)。

 

ちょっと不思議なのは、NFCEE(NFC Execution Environment)のプロトコルに、Type 3 Tagがあること。
Type 1, 2, 4はないんだな。
APDU、HCI、Type 3 Tag、と。
なんだろう?

 

ネットでNCIを調べると、既にNFCプロトコルとして製品にしているところもあるし、Linuxなんかも実装しているようだ。
早いなあ。

NCIが一般的になって助かるのは、アプリケーションの人だろう。
私はNFCのリーダライタとしてRC-S620/Sを使っているが、いつも仕様書とにらめっこしている。
もしこれがPN533に変更、となったら、今度はPN533の仕様書とにらめっこをせんといかん。
おそらく抽象化するために1つ吸収する層を置くことになるだろうが、それを自前で実装することになるだろう。

その吸収する層としてNCIを使うことができるようになるんじゃないかな。
まあ、誰かがNCIを実装せんといかんが、メーカーがハードウェアと一緒にNCI層も提供するようになると、買う方としては気に入ったNFCデバイスを選べるようになる。
OpenGLみたいな感じになるのかな-、と個人的には思っている。

image

 

思っているだけでまだ読んだわけじゃないから、まだ認識は間違ってるかもしれんね。
ちょっとずつ読んでいこう

2012/11/04

今さら、Windows8 RPをインストールしてみる

製品版も発売されたWindows8。
私は今さらだが、その前に評価用として出ていたRP版を試すことにした。

 

私がメインで使っている環境は、Windows XP 32bit版だ。
Androidのビルドをするときは、xubuntu12(だったと思う) 64bit版を使っている。
メモリは6GB載せているので、Windowsを使うときは「なんとなくもったいない」というところだった。

最近は64bit版でもそんなに困るようなことがなさそうなので、試してみてよさそうだったら買ってもいいかな、というところだ。
32bit版から64bit版へのアップグレードはできるけどDVDを買ってね、と書いているので、買わんといかんのか。

あれ・・・、アップグレードで維持できるもの、という項目にはRP版が書かれてるな・・・。
ということは、RP版からダウンロードでアップグレードしてもいいということかい?
でも、RP版の期限は来年の1月に切れるらしいから、だめなのかな。

そもそも「アップグレード」だから、XPをアップグレードして消してやらんといかんように思う。
並行して使いたいなら、DSP版を買うことになるのか。
なら、あせらんでいいな。


うちの環境はハードディスクが3つあって、

  • Windows XP
  • xubuntu
  • データ

となっている。
Windows XPのディスクにパーティションを切って、後ろ側にインストールすることにした。

メインのブートローダはgrub2で、それはxubuntuのディスクに入っている。
Windows8 RPをインストールするとどうなるかな、と心配したが、grub2は無事だった(当たり前か)。
Windows XPのブートローダがWindows8のブートローダに差し替えられ、そこからWindows8かそれ以外のOS(今回はXP)かを選択するようになっている。

Windows8のブートローダは、XPを選択すると、また再起動してXPを立ち上げに来るのが好かんな。


それ以外は、まだあまり困っていない。
Metro UIと呼ばれていたやつを無効にしたり、スタートメニューを表示させたりとかはしたし、AutoHotKeyでキーカスタマイズはするんだが、変更はその程度だ。

とりあえずeclipseをインストールしようとしたのだが、なぜかzipが解凍できない・・・。
標準でも、lhazでもだめだった。
lhazで中身を閲覧して、ファイルを選択しながらだと解凍できた。
なんだろう?


まあ、しばらくは様子を見てみるか。

2012/11/03

[nfc]復習しよう

ここ最近、本業が忙しくて記憶が無い。
NFCのことも記憶から遠ざかろうとしている。。。

DRAMと一緒で、定期的に記憶をリフレッシュしないといかんようだ。


NFCとは・・・・というのは、私はあまり気にしていない。
私にとってのNFCとは、SONYのPaSoRiでアクセスできるかどうか、という基準になっている。
(すまん、15693・・・)

 

用語定義はいろいろあるけれども、NFC Forumの仕様書で考えるようにしている。
でも、めんどうであれば、知っている用語でもいいことにする。
たとえば、NFCID2、じゃなくて、IDm、と呼ぶこともある、とか。


NFC Forumでは、まずNFCの本質に当たる部分を3つに分けている。

  • Technology・・・NFC-A, B, F
  • Platform・・・Type 1 Tag、Type 2 Tag、Type 3 Tag、Type 4A Tag、Type 4B Tag
  • Protocol・・・ISO-DEP、NFC-DEP

ときどき「NFCとFeliCaの違いは?」という文字を見かけるが、それは「米とコシヒカリの違いは?」と言っているようなものだと思う。

NFCの定義(というか、NFC Forumが定義するNFCの定義)からすると、FeliCaであれば、

  • Technology・・・NFC-F
  • Platform・・・Type 3 Tag

だし、MIFARE Ultralight(いっぱい種類があるから絞っておこう)であれば、

  • Technology・・・NFC-A
  • Platform・・・Type 2 Tag

となる。
(Protocolが出てこないのは、カードじゃなくて端末の機能だから。)

 

NFC、と呼んでいるものは、「定義」だと私は思っている。
あれはああだ、これはこうだ、という定義。
MIFARE UltralightとかFeliCaとかは、その定義を実現した製品、という位置づけだ。
たとえばMIFARE Ultralightだと、こんな(私の)イメージ。

仕様書にある定義を自分なりに解釈して実装した、というところ。
(まあ現実としては、MIFARE Ultralightという製品をリバースエンジニアリングして仕様書を起こした、ということになっているのだろうが。)

 

比較するなら、同じ次元でやらんとわからんので「NFC-AとNFC-Fの違いは?」とか、「MIFARE UltralightとFeliCaの違いは?」などとなるだろう。


先ほど、Technology、Platform、Protocol、と3つ書いたが、TechnologyとPlatformが出てきて、Protocolは出てきていない。

また、仕様書を読んだらわかるが、例えばPlatformのType 3 Tagだと「TechnologyとしてNFC-Fを使う」と書いてあるので、PlatformはTechnologyと密接な関係がある。

それに、ProtocolのISO-DEPはTechnologyのNFC-AとNFC-Bだけ、NFC-DEPはTechnologyのNFC-AとNFC-Fだけ、と偏りがある。

 

考え方としては、こう思っている。

まず、Technologyありき。
Technologyは、無線の通信方法などを含めて定義している。
無線というのは扱いが難しくて、読む方と書く方の両方が同じようにやらないと、うまくいかないのだ。
周波数だけでなく、データの送信方法、エラーの対処方法など、細かく決めておく。
この無線通信の土台となっているのが、Technology。

PlatformとProtocolは、Technologyという無線の土台を使ってどう通信するかを決めている部分。
さきほど、MIFARE Ultralight(Type 2 Tag)はNFC-Aと書いたが、Topazという製品(Type 1 Tag)もNFC-Aを使っている。
だからといって、MIFARE Ultralight用の通信ができればTopazにもアクセスできるかというと、そうではない。
Platformが異なると、やはりだめなのだ。
語族が同じだけど、言語が異なっている、みたいなものか。


NFC Forumでは、デバイス(カードではない方)について、これも3つ使い方を考えている。

  • リーダライタモード(カードを読み書き)
  • カードエミュレーションモード(カードとして振る舞う。オプション。)
  • Peer to Peerモード(データ交換)

 

NFC Forumの考え方としては、デバイスが複数あるPlatoformに対応する、ということでNFCの互換性を高めようとしている。
互換性、というのはなんか変な気もするので、汎用性、のほうがいいのかもしれん。

とにかく、NFCカードは、1つのPlatformしか実現できないので、じゃあデバイスでがんばろう、ということだ。

 

リーダライタモードは、NFCカードを読み取り、書き込むことができる。
Androidだと、画面がロックされていなければ、だいたいリーダライタモードだ。

カードエミュレーションは、NFCカードのふりをすること。
一番の用途は、ペイメント、お金の扱いだろう。

Peer to Peerはなんだかわかりにくいが、デバイス同士の通信、と言い換えるとわかりやすいだろう。
よく見るのは、Android Beamのように、片方がもう片方へデータを送信するやつだ。

 

最近の製品によくある、NFCスピーカやNFCマウスは、認証の部分だけをリーダライタモードなんかで済ませてしまい、あとはもう少し高速な通信を使って動作するようになっているらしい。


先にも書いたが、NFC Forumは「先に規格ありき」ではなく、「先に製品ありき」だった。
そこを、統一規格を作り出すのではなく、あえて共通要素を少しずつ切り出して規格化し、それぞれの製品を否定しないようにしていった、というところに苦労が忍ばれる。

ただのフォーマットだったら画像などのように乱立しただろうが、生活基盤に近いところだったので、否定しない方式をとったのだろう、と勝手に思っている。

 

などなど、どういうことがあったのかな、と考えながら仕様書を読むのも、無機質に読み進めるよりは楽しいものだ。
技術はともかく、規格としては比較的新しい部類になるので、まだまだ追加があるだろうし、もしかしたら消えてしまうかもしれない。
仕様、というと機械的なものと思いがちだが、結局は人間が使うシステムのためにあるので、そういった人間的な部分を見ようと思えば見えてくるものだな、と思った。

[過去記事]voldとMountServiceの関係

注文していた、Nexus7用のUSBホストケーブルが届いた。
しかし、USBメモリを挿してもマウントされなかった。
そこまでは、情報通りだ。

 

では、どうやったらマウントできるのか?
rootをとれば、できるらしい。
ということは、kernelレベルでは対応しているのだろう。
有償アプリをインストールすれば、rootにならなくてもアクセスできるらしい。
ということは、root権限がなくても使うルートがある?
あるいは、Nexusだけのしくみがあるのか?

よくわからないので、adb shellで見える情報から探ってみよう。。。
としたのだけど、/procとか/sysとかの見方をすっかり忘れてしまった。

昔つくった記事があったので、それをみてみよう。
2010年7月11日だ。


[froyo]voldとMountServiceの関係

 

Androidの起動時、init.rcが処理される。
init.rcの中で、voldが起動される。
voldは起動すると、/sys/block以下にあるueventに"add"と書き込みを行う。
これにより、ブロックデバイスからnetlink(AF_NETLINK)が飛ぶ。
voldはnetlinkを受信する機能も含んでいる。
イベントとして受信し、ブロックデバイスからだったらVolumeManagerのイベントハンドラが呼び出される。
ここでDEVPATHとvold.fstabに書いた中身の比較をし、一致したら処理をしている。
MountServiceはvoldに"list"を要求し、SDカードの挿抜状態を確認する。
最初はPendingで、その後Mountになっていた。
--------------------------------------------------------------------------------
つまりまあ、udevの役割を分担し、ブロックデバイス関係のものはvoldが行っているという見方でいいのかな。
vold.fstabは、サンプルだと/devices/以下になっていたが、SmartQ5では/blockだった。
これはデバイスドライバ依存なのかな?
"/sys/devices/virtual/switch/usb_mass_storage/state"を参照して、これがあればUMS(USB Mass Storage)が使えるんだかなんだかっていう部分があった。
vold起動時しかやってないのだが、どう動くのだろう?
SmartQ5ではファイルがないのでよくわからん。
ASEC、というのがちょこちょこ出てくる。
検索すると、暗号化したファイルと関係しているようだ。
MountServiceなどから受け付けるコマンドに"share"というのがある。
共有化?


ここまで。

froyoって、懐かしいな・・・。まだ2年前なんだ。

とりあえず、"/sys/devices/virtual/switch/usb_mass_storage"はなかった。
まあ、のんびりやりますかね。

 

ネットで見ると、Jerry BeanにはUMS (USB Mass Storage)がない、というのもあった。
http://forum.xda-developers.com/showthread.php?t=1833161

ないなら、どうしようもない・・・。
いやいや、これは「UMSがなくなってMTPになった」という、クライアント側で動くときの話か。

 

shell@android:/sys/class/usb_device/usbdev2.2/device $ ls -l
drwxr-xr-x root     root              2012-11-03 14:02 2-1:1.0
-rw-r--r-- root     root         4096 2012-11-03 14:02 authorized
-rw-r--r-- root     root         4096 2012-11-03 14:02 avoid_reset_quirk
-rw-r--r-- root     root         4096 2012-11-03 14:02 bConfigurationValue
-r--r--r-- root     root         4096 2012-11-03 14:02 bDeviceClass
-r--r--r-- root     root         4096 2012-11-03 14:02 bDeviceProtocol
-r--r--r-- root     root         4096 2012-11-03 14:02 bDeviceSubClass
-r--r--r-- root     root         4096 2012-11-03 14:02 bMaxPacketSize0
-r--r--r-- root     root         4096 2012-11-03 14:02 bMaxPower
-r--r--r-- root     root         4096 2012-11-03 14:02 bNumConfigurations
-r--r--r-- root     root         4096 2012-11-03 14:02 bNumInterfaces
-r--r--r-- root     root         4096 2012-11-03 14:02 bcdDevice
-r--r--r-- root     root         4096 2012-11-03 14:02 bmAttributes
-r--r--r-- root     root         4096 2012-11-03 14:02 busnum
-r--r--r-- root     root         4096 2012-11-03 14:02 configuration
-r--r--r-- root     root        65553 2012-11-03 14:02 descriptors
-r--r--r-- root     root         4096 2012-11-03 14:02 dev
-r--r--r-- root     root         4096 2012-11-03 14:02 devnum
-r--r--r-- root     root         4096 2012-11-03 14:02 devpath
lrwxrwxrwx root     root              2012-11-03 14:02 driver -> ../../../../../bus/usb/drivers/usb
drwxr-xr-x root     root              2012-11-03 14:02 ep_00
-r--r--r-- root     root         4096 2012-11-03 14:02 idProduct
-r--r--r-- root     root         4096 2012-11-03 14:02 idVendor
-r--r--r-- root     root         4096 2012-11-03 14:02 manufacturer
-r--r--r-- root     root         4096 2012-11-03 14:02 maxchild
drwxr-xr-x root     root              2012-11-03 14:02 power
-r--r--r-- root     root         4096 2012-11-03 14:02 product
-r--r--r-- root     root         4096 2012-11-03 14:02 quirks
--w------- root     root         4096 2012-11-03 14:02 remove
-r--r--r-- root     root         4096 2012-11-03 14:02 serial
-r--r--r-- root     root         4096 2012-11-03 14:02 speed
lrwxrwxrwx root     root              2012-11-03 14:02 subsystem -> ../../../../../bus/usb
-rw-r--r-- root     root         4096 2012-11-03 14:02 uevent
-r--r--r-- root     root         4096 2012-11-03 14:02 urbnum
drwxr-xr-x root     root              2012-11-03 14:02 usb_device
-r--r--r-- root     root         4096 2012-11-03 14:02 version

 

shell@android:/sys/class/usb_device/usbdev2.2/device $ cat manufacturer
cat manufacturer
A-DATA

ふむ、USBメモリはわかっているようだ。

255|shell@android:/sys/class/usb_device/usbdev2.2/device/driver $ printenv
printenv
_=/system/bin/printenv
LD_LIBRARY_PATH=/vendor/lib:/system/lib
HOSTNAME=android
BOOTCLASSPATH=/system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar
PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin
LOOP_MOUNTPOINT=/mnt/obb
ANDROID_DATA=/data
ANDROID_ROOT=/system
SHELL=/system/bin/sh
MKSH=/system/bin/sh
USER=shell
ANDROID_PROPERTY_WORKSPACE=9,32768
EXTERNAL_STORAGE=/storage/sdcard0
ANDROID_ASSETS=/system/app
TERM=vt100
RANDOM=20849
ASEC_MOUNTPOINT=/mnt/asec
HOME=/data
ANDROID_BOOTLOGO=1
PS1=$(precmd)$USER@$HOSTNAME:${PWD:-?} $

EXTERNAL_STORAGEは、内蔵のSDカードだな。

 

# create directory for mounting usb drives
mkdir /mnt/usbdrive 0666 system system
symlink /mnt/usbdrive /usbdrive

こんなのもある。

 

いまさらlogcatでUSBメモリを挿したときの様子を見てみたが、何もない。
これは、ログを見せていないだけなのか、本当に何もないのか・・・。

 

vold.fstabとかにUSBメモリのことが書いてあれば、MountServiceを使って操作することができると思う。
でも"/usbdrive"でマウント要求しても、「そんなのない」とあしらわれてしまった。
ないんだろうね。

うーん、アプリの方はどうやって解決しているんだろう。
買って試せばいいのかもしれんが、答を見てしまうのも面白くないので粘ってみよう。