1. NDEF message format
下圖是 NDEF mssage format 的示意圖, 1份 NDEF message 包含 >= 1 NDEF Record
1份 NDEF Record 包含 Header & Payload
Header包含好幾個欄位, 包括 TNF (Type Name Format)
1.1 Record Layout
每個 Record 前5個 bit 定義了record 在message中的位置
- MB (Message Begin) : True when this is the first record in a message.
- ME (Message End) : True when this is the last record in a message.
- CF (Chunk Flag) : True when this record is chunked. (只用在NDEF message大到無法一次傳完)
- SR (Short Record) : True if the short record format is used for payload length.
- IL (ID Length is present) : True if the ID Length field is present.
如果 message 有多個 record, 那麼第一個 record 的 MB=1, ME = 0, 最後一個 record 的 MB = 0, ME = 1
如果 message 只有1個 record, 那個這個 record 的 MB=1, ME = 1
1.2 Type Name Format
TNF (Type Name Format) 佔 3 bits, 值為 0~7
- 0 Empty : Empty record that has no type or payload
- 1 Well-Known : NFC Forum RTD (Record Type Definition) specification 定義好的其中1種
- 2 MIME media-type : Internet media type (defined in RFC 2046 )
- 3 Absolute URI : URI (defined in RFC 3986 )
- 4 External : User-defined value, based on rules in NFC Forum RTD specification
- 5 Unknown : Type is unknown. Type length must be 0.
- 6 Unchanged : Only for middle and terminating records of chunked payloads. Type length must be 0.
- 7 Reserved : Reserved by the NFC Forum for future use.
常見的應用程式裡, TNF 01 (Well-Known) 以及 TNF 02 (MIME media-type) 最為常用
另外, TNF 04 (External) 也很常用, 包括了 Android App
1.3 Record Type Length
在 TNF & Layout Flag 之後是 1 byte 的 Payload Type Length
它定義了 Record Type 的長度
Record Type的用途是在TNF之外提供更細的分類, 而這個欄位的長度是可變動的
而 Record Type Length 定義這個欄位的長度
1.4 Payload Length
接著是 Payload Length, 它可能佔用1個 byte 或佔用 4個 byte
如果前面的 SR (Short Record) = 1, 那麼它佔用1個 byte
如果 SR = 0, 那麼它佔用4個byte
1.5 Record Type
Record Type, RTD (Record Type Definition)進一步描述 Payload的內容, 這個
比如說, 當 TNF = 01 (Well-Known), 那麼 Record Type = "T" 表示 text, "U" 表示 URI, "Sp" 表示 Smart poster,
當 TNF = 02 (MIME media-type), 那麼 Record Type 可以描述 "text/html," "text/json," 以及 "image/gif."
當 TNF = 04 (External), Record Type 可以描述它是 Android APP
1.6 ID length & ID (optional)
如果前面的 flag IL(ID Length is present)=1, 那麼就會有 ID length 以及 ID 欄位
Payload ID 是 optional field, 通常是 URL, 但也可以隨便放, 它的用途是讓應用程式提供相關資訊, 或是讓不同的 NDEF record reference 其它 record
因為是 optional, 所以也可以不放
1.7 Payload
Payload 沒有規定它的 format, 通常 NDEF library 在包NDEF record時, 是直接塞data進去而不做檢查, 所以可以加密, 也可以帶二進位資料
沒有留言:
張貼留言