Pages - Menu

2012年8月31日金曜日

Windows8とAndroidでSNEP通信してみた

SNEP通信してみた

SNEPとはP2Pで使用されるプロトコルの名前です。
AndroidではAndroid BEAMという名前で呼ばれていますが、このSNEPプロトコルを使用して実現しています。
今回はAndroidとWindows8でSNEP通信をしてみます。


用意するもの

Windows8















RC-S380















Android 4.0















Windows8にRC-S380を接続しドライバをインストールします。
AndroidはSC-04D Android 4.0.4を使用しています。


カードを読み取る

SNEPをする前に普通のNFCカードを読み取ってみます。
中にはNDEFでURLを書き込んでいます。
NFCカード















カードをRC-S380にかざします。
読み取るとぴこぴこ音がします。















Windows8側に通知が表示されました。
クリックではなくタップになっていますね。















通知をクリックするとブラウザが起動します。
NFC QUESTのページが表示されました。















カードを読み取って中のNDEFデータからURLを取得し
ブラウザに表示することができました。
これはRC-S330/Sでも可能でしたね。


SNEP通信をする

続いてSNEP通信をしてみます。
Androidでブラウザを開いている状態でRC-S380にタッチすると通信することができます。


Androidでブラウザを起動します。
弊社のホームページ見てます。















AndroidをRC-S380にかざします。
Android BEAMの画面になった!!















タップしてビームを送信するとWindows8に
カードの時同様、通知が表示されます。
さっきとは違うアングルから















こちらも通知をクリックすることでブラウザが表示されます。
大きい画面で見れた!















無事SNEPでも通信することができました。

まとめ

今回SNEP通信をしましたが、ドライバのインストールをしただけで、プログラムは一切書かずに実現することができました。

今後パソコンにもNFCが搭載されていきます。今回はその片鱗が少し見えたような気がしました。利用シーンで考えると、帰宅時に見ていたホームページを、家に帰ってきてから大きい画面で見たいなと思った時に便利なのではないでしょうか。
さらにプログラムからアクセスできるようならば、もっと夢が広がると思います。


Windows8用ドライバは評価用にお借りしたものなので一般公開はされていませんが
今後Windows8のリリース後に公開されるのではないでしょうか。
さらに今後のアップデートに期待です。

カスタマー開発部 山下智樹

映像情報メディア学会 2日目



2012年映像情報メディア学会の2日目となりました。学会自体は明日8/31(金)までありますが、本日大阪に帰らなければいけなかったので、私にとっては最終日となりました。3日目のキネクトやARなどのデモが本当は出席したかったので、実に残念です。

さて、本日は朝の9:00から夕方の17:30までいろいろな講演・研究発表を回ってきました。簡単に見てきたことを書きます。今日はもう遅いので詳しくはまたの機会に。。。

2012年8月30日木曜日

映像情報メディア学会 アンドロイド講習会



2012年映像情報メディア学会にアンドロイド講習会講師として参加してきました。

場所は広島市立大学です。広島市立大学は、広島駅からJR可部線で一駅の横川駅からバスで12分、市街地を出たかと思うと、2kmほどの長いトンネルを抜けたところにキャンパスがあります。

f:id:bs-android:20120829125100j:image:w360:right

2012年8月21日火曜日

NFCが濱コンにやってきた!



街コンって?


みなさんは街コンというイベントをご存知でしょうか


街コンとは、地域振興を目的とした大規模な合コンイベントです。


参加者は少ない場合でも100名、多い時は1000名を超えます。


街コンは地域の商店街で開催されることが多く、地域活性化の側面をもっていますが


合コンなので、参加者が出会いを求められるという側面ももっています。


座席指定で男女が必ずテーブルを囲むように案内されることや


気になる異性に声をかけやすくする仕組みがある場合があります。



街コン - Wikipedia
http://ja.wikipedia.org/wiki/%E8%A1%97%E3%82%B3%E3%83%B3

濱コンって?


f:id:bs-android:20120816163222j:image:h400


[こののぼりが目印!]


横浜最大の街コンイベントです。


横浜市関内を中心に、横浜市のさまざまな場所で開催されています。


完全事前受付制となっており


受付でリストバンドを受け取った後、街コン参加店舗で


食べ放題、飲み放題となります。



濱コンオフィシャルサイト | 濱コン
http://www.hamacon.jp/


濱コン@横濱 | Facebook
http://www.facebook.com/hamacon.jp

NFCがやってきた!


今回濱コン事務局さんと協力して、街コンにNFCを組込みました。


全国初!NFCを街コンに実戦投入しましたので、そちらのレポートを書きます。


プレスリリースはこちら



街コン支援システム「NFCで街コンつく~る」を提供開始
http://www.brilliantservice.co.jp/press/pdf/nfc-machikon.pdf

濱コン行ってきたよ!


今回参加したイベントは20代限定のイベントでした。


通常は年齢制限のない濱コンですが、今回は20代のみの参加者となります。



濱コンUnder30~【20代限定】横浜へ集え!素敵な出会いをGet!(街コン) | 横濱史上最大規模の地域活性化イベント・濱コン
http://www.hamacon.jp/satellite_120817/index.html

受付

f:id:bs-android:20120816190928j:image:w400


受付では事前に登録した情報と、リストバンドをひもづけるために


パソコンとPaSoRiを使ってヒモ付作業をします。


リストバンドを装着

f:id:bs-android:20120816200037j:image:w400


参加者にはひもづけられたリストバンドを装着してもらい


街コンに参加してもらいます。


今回使ったリストバンド

f:id:bs-android:20120816200357j:image:w400


今回使用したリストバンドがこちらです。


裏にシール型のNFCタグが貼られています。


NFCタグにはFeliCa Liteを使用しております。


今回もSonyさんにご協力いただきました!ありがとうございます!


店頭でリストバンドを読み取り!

f:id:bs-android:20120816205254j:image:w400


参加者は店舗入退店時に、スタッフのもつスマホにリストバンドをかざしてもらうことで


入店状況を記録します。


ここは仕組み上不安なところでした。


リストバンドをタッチするということが馴染みないので


実施にやってみたら、みんな面倒がってタッチしてくれないんじゃないかな…と考えていました。


しかし実際にやってみると、慣れないのは最初だけで


慣れてくると積極的にタッチしていただけていたので、無駄な不安だったみたいです(笑)


混雑状況が分かる!

f:id:bs-android:20120821084751j:image:w400


サーバに蓄積されたデータから、参加者に直接混雑状況を配信します。


楽しい街コン!

f:id:bs-android:20120816220206j:image:w400


店内ではみなさん楽しそうに過ごしていました。


ぱっと見は普通の居酒屋さんっぽいですが


リストバンドをつけていることで、「あ、この人も同じイベントに参加しているんだ」という一体感とか安心感がありますね(笑)





個人的な感想など


私自身街コンを目にすることが初めてだったのですが


さまざまな人が参加し、非常に活気のあるイベントでした。(私も参加したかった!!)





街コンの中でも、特に濱コンは大人気です。応募総数を明かすことはできないのですが


多くの参加希望者が集まったそうです。


ちなみに次回開催は9月8日に1000人規模で開催されますので、参加されてはいかがでしょうか。


受付もまもなく開始と聞いていますので、濱コンホームページをこまめにチェックしてみてください!


もちろんそちらでもNFCが使われますよ!


今回、参加人数は男女200名とあまり大きいものではありませんでしたが


貴重なデータが得られましたので、今後に活かしてもっとよいシステムに改良していきたいと思います!





文責:カスタマー開発部 品川開発課 山下 智樹





2012年8月8日水曜日

AndroidでRTD Textを書く

RTD Textを書く

AndroidでRTD Textを書き込みます。

反応するタグの種類の限定

NDEFを書き込めるタグの種類はNDEFタグもしくはNDEFFormatableタグなので、どちらかに反応するようにNfcAdapter#enableForgroundDispatch()を呼んであげます。

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
getClass()), 0);
IntentFilter[] intentFilter = new IntentFilter[] {
new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED),
};
String[][] techList = new String[][] {
{
android.nfc.tech.NdefFormatable.class.getName()
}, {
android.nfc.tech.Ndef.class.getName()
}
};
mNfcAdapter.enableForegroundDispatch(this, pendingIntent, intentFilter, techList);

NdefMessageの作成

書き込み対象のRTD Text RecordをもったNdefMessageを作成します。
NdefRecordの作成には
  • TNF
  • TYPE
  • ID
  • PAYLOAD
が必要になります。(他に全てのバイナリから作成することも可能です)
TNFはTextRecord#TNF_WELL_KNOWN を使用します。
TYPEはTextRecord#RTD_TEXT を使用します。
IDは今回使用しないので空の配列を渡します。
PAYLOADは自作する必要があります。

NDEFを書き込む

タグの判定

NDEFを書き込むには、NFC反応時に発行されるIntent内に含まれるTagから
Ndef クラスもしくはNdefFormatable クラスに変換する必要があります。
また、NdefクラスとNdefFormatableクラスに親子関係はないので
どのタグなのか判定した上で、処理を別にする必要があります。

Ndefの書き込み

Ndefの場合、書き込み禁止やサイズを見ることができるので
判定した上で書き込みます。

NdefFormatableの書き込み

NdefFormatableの場合、Ndefの様にタグの状態を見ることができないので
そのまま書き込みます。

ソースコード


カスタマー開発部 山下智樹

2012年8月7日火曜日

SNEP(Simple NDEF Exchange Protocol)の仕様書を和訳しました。

SNEPとは

Simple NDEF Exchange Protocol(通称SNEP)とは、NFCのP2Pで使われるプロトコルです。
NFC Device同士でServerとClientになり、HTTPのようにGETやPUTなどのメソッドを使いデータのやり取りを行います。


原文

Simple NDEF Exchange Protocol
Technical Specification
NFC Forum™
SNEP 1.0
NFCForum-TS-SNEP_1.0
2011-08-31

NFC Simple NDEF Exchange Protocol (SNEP) specification


和訳



カスタマー開発部 山下智樹

2012年8月3日金曜日

AndroidでRTD Textを読む

RTD Textを読む

AndroidでRTD Textを読み取ります。
AndroidではNdefMessageNdefRecordのクラスが用意されています。
NdefRecordはヘッダまでしかパースされないので
PAYLOADを自分でパースする必要があります。

NDEF Messageを取得する

NdefMessageActivity#onNewIntent(:Intent):void のIntentのExtraに
NfcAdapter.EXTRA_NDEF_MESSAGESという名前で格納されています。
形式はParcelable[]なので一時的にParcelable[]で保持しておき
その中のNdefMessageを取り出します。

Ndef Recordを取得する

NdefRecordNdefMessage#getRecords():NdefRecord[] で取得します。

RTD Textの判定をする

Textの判定はTNFがWELL_KNOWNになっていることと、TYPEが'T'になっていることを確認します。
NdefRecordからTNFを取得するにはNdefRecord#getTnf():shortを使います。
また、各TNFはNdefRecordに定義されているのでその定数を使います。
NdefRecordからTYPEを取得するにはNdefRecord#getType():byte[]を使います。
また、RTDのTYPEはNdefRecordに定義されているのでその定数を使います。

RTD Textをパースする

NdefRecordからPAYLOADを取得するにはNdefRecord#getPayload():byte[]を使用します。
PAYLOADが取得できたので、RTD Textの仕様に従いパースしていきます。
RTD Textの仕様についてはこちらを御覧ください。
ブリリアントサービス NFC技術ブログ: RTD Textとは
例では文字列(言語コード)という内容で返しています。

実行イメージ


ソースコード

https://github.com/bs-nfc/ReadRTDText

カスタマー開発部 山下智樹

2012年8月2日木曜日

NDEFとは

NDEFとは

NFC Data Exchange Formatと呼ばれるもので、NFCでデータのやり取りをする際に使われるデータ・フォーマットです。
仕様書はこちらにあります


NFC Forum : Technical Specifications
http://www.nfc-forum.org/specs/spec_list/#ndefts


この内容についてNFC Labにて発表をしました。
資料はこちらです。
http://www.slideshare.net/tomorrowkey/ndef-13784268

Ndefの構成


NDEFには一つのNdef Messageが含まれます。
またNdef Messageには0個以上のNdef Recordが含まれます。

Ndef Recordの構成


Ndef Recordは大きくヘッダとペイロードの2つに分けることができます。

  • ヘッダ
    • MB(Message Begin)
      • 1bit
      • このフラグが1になっていると、最初のNdef Recordであることを表します。
    • ME(Message End)
      • 1bit
      • このフラグが1になっていると、最後のNdefRecordであることを表します。
    • CR(Chunked Flag)
      • 1bit
      • このフラグが1になっていると、分割されたNdef Messageであることを表します。
    • SR(Short Record)
      • 1bit
      • このフラグが1になっていると、Ndef Message全体が255Byte以下であることを表します。
      • またその場合、Payload Lengthが1Byteになります。(データサイズの節約になります)
    • IL(ID Length)
      • 1bit
      • このフラグが1になっていると、IDが格納されていることを表します。
    • TNF(Type Name Format)
      • 3bit
      • TYPEの種類を表します。
        • 0x00 Empty
        • 0x01 NFC Forum well-known-type
        • 0x02 Media-type as define in RFC2046
        • 0x03 Absolute URI as define in RFC 3986
        • 0x04 NFC Forum external type
        • 0x05 Unknown
        • 0x06 Unchanged
        • 0x07 Reserved
      • ここの内容によってTYPE の解釈が変わります。
    • TYPE LENGTH
      • 1Byte
      • TYPEフィールドの長さを表します。
      • 符号なし整数
    • PAYLOAD LENGTH
      • 1Byte or 4Byte
      • PAYLOADの長さを表します。
      • ビッグエンディアン、符号なし整数
      • SRが1だった場合、1Byteになります。
    • ID LENGTH
      • 1Byte
      • IDの長さを指定します。
      • 符号なし整数
    • TYPE
      • TYPE LENGTHによって長さが変わります。
      • TNFの値によって内容の解釈が変わります。
      • 例えば0x01 NFC Forum well-known-type だった場合
        • 'T' -> Text
        • 'U' -> URI
        • 'Sp' -> Smart Poster
    • ID
      • ILによって存在しない場合があります。
      • ID LENGTHによって長さが変わります。
      • Ndef RecordのIDを設定することができます。
  • ペイロード
    • データ本体
    • TYPEとTNFによってフォーマットが異なります。
    • well-known-typeについては別エントリにて解説します。



カスタマー開発部 山下智樹

RTD Textとは

RTD Textとは

Record Type DefinitionのTextフォーマットのことを指します。
仕様書はこちらにあります。


NFC Forum : Technical Specifications
http://www.nfc-forum.org/specs/spec_list/#rtds

Textフォーマットの構造

  • Encode
    • 1bit
    • エンコードを表します。
      • 0 -> UTF-8
      • 1 -> UTF-16
  • RFU
    • 1bit
    • Reserved for Future Use
  • Language Code Length
    • 6bit
    • 言語コードの長さを表します。
  • Language Code
    • Language Code Lengthによって長さが変わります。
    • 言語コードを表します。(ISO/IANA)
    • US-ASCIIエンコードで格納します。
  • Actual Text
    • 実際のテキストを格納します。
    • Encodeにて指定したエンコードで格納します。

Textを格納したNDEFの例

"Hello, World." を表したNDEFは以下のようになります。

D1 01 10 54
02 65 6E 48
65 6C 6C 6F
2C 20 57 6F
72 6C 64 2E

  • FLAGS
    • MB 0x01
    • ME 0x01
    • CF 0x00
    • SR 0x01
    • IL 0x00
  • TNF 0x01 (Well Known Type)
  • TYPE LENGTH 0x01
  • PAYLOAD LENGTH 0x10 -> 16
  • TYPE 0x54 -> 'T'
  • PAYLOAD
    • Encoding 0x00 -> UTF-8
    • Language Code Length 0x02
    • Language Code 0x65 0x6E -> "en"
    • Actual Text
      • 0x48 0x65 0x6C 0x6C 0x6F 0x2C 0x20 0x57 0x6F 0x72 0x6C 0x64 0x2E
      • -> "Hello, World."

カスタマー開発部 山下智樹

RTDとは

RTDとは

Record Type Definitionの略称で、NDEFのTNFにWell Known Typeが指定された際に、使用できるTYPEです。
仕様書はこちらにあります。


NFC Forum : Technical Specifications
http://www.nfc-forum.org/specs/spec_list/#rtds


2012年8月時点では以下の種類のフォーマットがあります。

  • Text
    • 複数の言語のテキストを効率的に格納するためのフォーマットです。
  • URI
    • URI(Uniform Resource Identifier)を効率的に格納するフォーマットです。
  • SmartPoster
    • URLやSMS,電話番号などを格納するフォーマットです。
    • このフォーマットはTextのブロックとURIのブロックで構成されています。
  • GenericControl
    • NFCの通信を介して他のデバイス、タグに特定のアクション(アプリケーションの起動やモードの変更など)を要求する簡単な方法を提供します。
  • Signature
    • NDEFに署名を追加するためのフォーマットです。

カスタマー開発部 山下智樹