2011年1月6日木曜日

NDEF メモ

NDEF (NFC Data Exchange Format)

 ・NDEF Tag には 0 個以上の NDEF Messages が含まれる
   ・通常は NDEF Tag に含まれる NDEF Message は 1個
 ・NDEF Message には複数の NDEF Records が含まれる

 * NdefTag の fields は Tag を読んだときにセットされる immutable data だが、このクラスから帰ってくる配列は clone ではないため、modify しないように気をつけること


NDEF Tag - NDEF Message
|
+ NDEF Message - NDEF Record
... |
+ NDEF Record
|
...


 ・NDEF Record には TNF, type, ID, flag, payload が含まれる
 ・payload の長さが 0xff 未満の時 short record という

■ TNF
 ・3 bit = 0x00 - 0x07

 ・0x00 : TNF_EMPTY
   Empty
   (type, ID, paylaod は空でなければならない)

 ・0x01 : TNF_WELL_KNOWN
   NFC Forum well-known type [NFC RTD]
   (type field は RTD type name format を使う
    (RTD_TEXT, RTD_URI など))

 ・0x02 : TNF_MIME_MEDIA
   Media-type as defined in RFC 2046 [RFC 2046]
   (type field は RFC 2046 で定義された
    media type BNF construct 形式の値を含む)

 ・0x03 : TNF_ABSOLUTE_URI
   Absolute URI as defined in RFC 3986 [RFC 3986]
   (RFC 3986 で定義された absolute-URI
    BNF construct 形式の値を含む)

 ・0x04 : TNF_EXTERNAL_TYPE
   NFC Forum external type [NFC RTD]
   (type field は RTD 外部名定義に従った値を含む、
    RTD_TEXT や RTD_URI をこのTNFと使うべきではない)

 ・0x05 : TNF_UNKNOWN
   Unknown
   ("application/octet-scream" MIME type のようなもの、
    payload はNDEF Message にエンコードされていない)

 ・0x06 : TNF_UNCHANGED
   Unchanged
   (payload は chunked NDEF Record の中間または最終の chunk、
    payload type は最初の chunk で指定され、続く chunks は
    TNF_UNCHANGED で type field が空でなければならない。
    それ以外の場面で TNF_UNCHANGED を使ってはならない)

 ・0x07 : TNF_RESERVED
   Reserved
   (Reserved TNF type、NFC Forum NDEF Specification v1.0 は
    この TNF を TNF_UNKNOWN として処理することを推奨している)


■ type
 ・0 - 255 bytes
 ・空の場合もある

 ・0x54 : RTD_TEXT
   ("T" TNF_WELL_KNOWN と一緒に使う)

 ・0x55 : RTD_URI
   ("U" TNF_WELL_KNOWN と一緒に使う)

 ・{0x53, 0x70} : RTD_SMART_POSTER
   ("Sp" TNF_WELL_KNOWN と一緒に使う)

 ・{0x61, 0x63} : RTD_ALTERNATIVE_CARRIER
   ("ac" TNF_WELL_KNOWN と一緒に使う)

 ・{0x48, 0x63} : RTD_HANDOVER_CARRIER
   ("Hc" TNF_WELL_KNOWN と一緒に使う)

 ・{0x48, 0x72} : RTD_HANDOVER_REQUEST
   ("Hr" TNF_WELL_KNOWN と一緒に使う)

 ・{0x48, 0x73} : RTD_HANDOVER_SELECT
   ("Hs" TNF_WELL_KNOWN と一緒に使う)


■ ID
 ・0 - 255 bytes
 ・空の場合もある


■ payload
 ・< 2^32 -1 bytes
 ・空の場合もある


■ flag
 ・5 bit
 ・b4 : MB flag (最初の record のとき 1)
 ・b3 : ME flag (最後の record のとき 1)
 ・b2 : CF flag
 ・b1 : SR flag (short record のとき 1)
 ・b0 : IL flag (id length (id) が提供される場合 1,
         提供されない場合は ID Length field と
         ID field は省略される)


Record Layout 10 byte

b7 b6 b5 b4 b3 b2 b1 b0
| flag | TNF |
| type length |
| payload length 3 |
| payload length 2 |
| payload length 1 |
| payload length 0 |
| id length |
| type |
| id |
| payload |



NDEF short record
 ・SR flag が 1
 ・the PAYLOAD_LENGTH field は 8 byte
 ・payloads or chunks は 255 byte まで

NDEF record chunk
 ・pull payload の 一部
 ・NDEF record は full payload よりも payload の chunk を含むことが多い
 ・chunked payload の最後の record chunk 以外は CF flag が 1
 ・中間と最後の chunked record の TYPE_LENGTH と IL fields は 0x06 (unchanged) でなければならない
 ・PAYLOAD_LENGTH が 0 かそれ以外かにかかわらず、TYPE fields は entire chunked payload の type でなければならない

NDEF chunked payload
 ・Application data は異なる NDEF record で運ばれるの複数の chunk に分けられる
 ・最後の record を除いて CF flag は 1
 ・single NDEF record に入らない大規模な entity 向け
 ・payload size が予め決まっていない動的に生成されるコンテンツの転送向け
 ・コンテンツの多重送信やストリーミングをサポートすることではない

The payload type
 ・コンテンツ部分のタイプ
 ・URIs [RFC 3986]
 ・MIME media type constructs [RFC 2046]
   ・image/png
   ・image/jpeg
   ・message/http
   ・application/xml; charset=“utf-16" など
 ・NFC-specific type format
 ・文字コードは US-ASCII

The payload identifier
 ・付加的な識別子
 ・URI 用に応じた識別子や、絶対的な識別子がある
 ・他の payload との cross-reference 用 URI linking technology をサポートできる

NDEF Encapsulation Constructs
 ・NDEF message で運ばれる NDEF records に数に制限はない
 ・NDEF message を直接ネストすることはできない
 ・NDEF record 内に Full NDEF message としてネストすることは可能





 

2 件のコメント:

  1. このコメントは投稿者によって削除されました。

    返信削除
  2. はじめまして。
    NDEFの調べ事をしてたどりつきました。

    NDEF short recordですが、PAYLOAD_LENGTHは"single octet"なので、1byteかと思われます。
    flagのb4~b0は、b7~b3の方がわかりやすいかな、と思いました。

    返信削除