2011/10/22

Android NDEF Push Protocol Specificationを読む

ひどく眠たいので、違うことを書くかもしれんが許しておくれ。


Android NDEF Push Protocol Specification

Version : 1    2011-02-22

2. Overview :

NDEF Push Protocol (NPP) はLLCPの上に載っかるシンプルなプロトコルで、用途は別デバイスへNDEFメッセージをPUSHするためのもので、client→serverの方向。


NPPをサポートするデバイスは、以下のようにあるべし。

  • [MUST]常にNPPサーバを立ち上げておく
  • [MAY]NDEFメッセージがPUSH可能なら、NPPクライアントを起動させる

こうすることで、NPPデバイス間で双方向のNDEF交換ができる。
(サーバ実装は必須で、クライアント実装はおまかせってこと?)

 

3. Data Format

ヘッダとNDEFエントリーから構成されている。
・・・でもヘッダにNDEFエントリーが入っているから、正確にはヘッダだけか。

 

バージョン

メジャーバージョンとマイナーバージョンがあって、今はメジャー0、マイナー1。
ヘッダの"Protocol version"はそれぞれ4bitで、0x01となる。

 

NDEFエントリー

このバージョンではNDEFエントリーは1つだけサポートする。

 

Action code

このバージョンでは0x01固定。
0x01の意味は「NDEFメッセージはpassive tagを読んだかのように処理されねばならない」だ。
(ひとりごと:相手からPUSHされたのではなく、自分でPULLしにいったかのようにということ?)

 

サーバ

サーバのサービス名は"com.android.npp"であるべし。
そしてService Discovery Protocol(SDP)で検出可能であるべし。

PUSHを受信した場合、そのNDEFエントリーは受信した順番に処理せねばならない。
(原文ではAction codeのことも書いてあるが、どっちにせよ1つしかないから同じだよな?)

サーバは、クライアントから最後のNDEFエントリーを受信後に接続を切られたら、全部受信し終わったと判断することになる。

 

クライアント

クライアントはNDEFメッセージがあるなら、NFC-DEP接続を確立後、すぐにNPP pushを行うべし。

  1. サービス名"com.android.npp"でLLCPソケットにてサーバと接続
  2. データフォーマットに従って送信
  3. LLCPソケットの切断

クライアントは、NPP pushに失敗したことを表示するために各ステージで失敗をチェックするべし。
エラーによるリトライなどはない。
クライアントは、クライアントが実装しているProtocol versionに従ったAction codeを送信するべし。
(サーバに合わせたりするんじゃないよ、ってことか)

2 件のコメント:

  1. SNEPのヘーダ構成書いてほしいです。

    返信削除
    返信
    1. Headerですか。
      SNEPのことは、NFC Forumの仕様書がわかりやすかったです。

      簡単に、こちらに書いています。
      https://sites.google.com/site/hiro99ma/home/experiment/snepunit/snep

      削除

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