2012/02/04

[sts]とりあえずSmartTagアプリを作ってみよう

アイオイさんのSmartTag。
実装から仕様書を起こしたので、それに対してSDK for NFC Starter Kitで実装を行ってみた。
妄想実装だ。
もうここまで来たので、解析結果も置いた。(やはり間違ってたので、削除)
https://github.com/hirokuma/NfcStarterKitWrap/tree/master/SmartTagRW

困ったことにまだ実機がないので、作ってみただけって感じがしている。
ユーザデータのアクセスには対応していない。
画像の転送と登録ができたらいいな、というところだ。
動作結果を教えていただけるとありがたいです。

こんな動きをするはず(してほしい)

起動して、PaSoRi上にSmartTagを置いて「Polling」ボタンを押すと、左下のステータス表示が変化する。
他のボタンも押せるようになる。

縦に1~12が並んだところをクリックすると、SmartTagが指定した番号のレイアウトに変化する。

「select」ボタンを押して、ほどほどの画像ファイルを選択すると左側に200x96サイズの画像が表示され、右側に2値化された画像が表示。
スライダーバーで閾値が変わるし画像も変わる。

「send」ボタンを押すと、右側の画像がSmartTagに転送され、表示される。

「register」ボタンを押すと、現在選択しているレイアウトに画像が登録される。

一番の難関は、やはり画像転送だ。
なんといっても、データができるかどうかのテストすらしていないってところがまずいな。
サンプルの動作は、こうだ。

画像を1/0反転してビットデータに変換。
なぜかというと、液晶画面の特性が「1→黒」「0→何もしないので白く見える」となるからだ。
電卓やポケコンを想像してもらうとよいだろう。
画面サイズは200x96だが、ビット変換して8分の1になり、2400byteになる。

転送する場合、ブロック単位になる。
1ブロックは16byte。
FeliCa PlugのWrite Without EncryptionやRead Without Encryptionの仕様から、1回のコマンドに載せることができるブロック数は12(=192byte)となっている。
16byteでよければ1ブロックだが、17byteになると2ブロックということになる。
Excelでいえば「=ceiling(バイト数, 16)/16」でブロック数が算出される。
Cとかなら、「(バイト数+15)/16」で出てくる。
2400byteとなると1回のWrite w/o Encでは送信できない。
その場合は、連続してWrite w/o Encを呼び出すことになる。

SmartTagのコマンドは、16byteの制御部+データ部という作りになっている。
つまり、データ部のサイズにかかわらず1ブロックは消費することになる。
また、データ部が1~16byteであれば、それはそれで1ブロックで済むことになる。
2400byteを転送したい場合は、こうなる。
(制御部+11ブロックのデータ部)×13+(制御部+7ブロックのデータ部)

SmartTagは、おそらく月曜日に入金確認されて、週末くらいには来るんじゃなかろうか。
ユーザデータのところも、そのあたりには追加しておきたいところだ。

0 件のコメント:

コメントを投稿

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