[連載] 3-1 NDEF的記錄-表頭的狀態位元組

表頭(Header) 很重要,因為它將決定應用程式解譯此筆記錄時,該如何切割記錄內所包含長度不一的欄位,然後正確解讀其中訊息的涵義。

接下來,我們以NFC協會所定義的幾種常用標準記錄作例子,來熟悉這些看似繁複的格式定義。在你實際去編寫NDEF時,也不用太慌張,因為透過第三方的NFC應用程式來處理時,就算不懂這些格式定義一樣可以得心應手。

通用的NDEF訊息可以由多個資源紀錄所組成,每筆紀錄則包含表頭與資料內容兩部份。下圖例所顯示是由3筆NDEF紀錄所組成的訊息,首先,我們來看看怎麼由各紀錄的表頭裡的各個功能位元(Bit)來把每筆紀錄串起來。


在表頭的前兩個功能位元(Bit7, Bit6),分別為:
  • MB (Message Begin) MB=1; 表示為訊息的第一筆記錄。
  • ME (Message End) ME=1; 表示為訊息的最後一筆記錄。
所以,如果訊息僅含一筆記錄,則該筆紀錄的表頭的 MB=1, ME=1;如果是圖中的多筆紀錄型態,第一筆的紀錄表頭的 MB=1, ME=0,這樣我們知道這是開頭的第一筆,因為ME=0就表示後面還有紀錄;再來看第二筆紀錄的表頭的 MB=ME=0,明顯地說明後面還有紀錄;最後,第三筆紀錄的表頭的 MB=0, 但ME=1,表示已經到了最後一筆紀錄。

你有沒有發現,訊息本身並沒有什麼欄位明顯指名訊息裡有多少筆紀錄,所以再循序一個一個資料爬進來的同時,一邊解析的同時也要進行統計。

再來,看看其他的功能位元:
  • CF (Chunked Message) CF=1; 表示為分段訊息,表示這個標籤內容,僅為一個超長訊息的其中一部分分段訊息。這個使用機會不高。
  • SR (Short Record) SR=1; 表示為短記錄型式,PAYLOAD_LENGTH僅以單一位元組來定義,表示其後資料內容長度將不超254個位元組。 SR=0; 表示資料內容的長度將以4個位元組來表示。
  • IL (ID Length) IL=1; 表示會有ID長度標示的位元組;反之,IL=0; 表示ID LENGTH與ID均被省略。
而最後的3個位元組合成所謂的TNF:
  • TNF (Type Name Format) 在NDEF訊息裡的每筆記錄,都先必須在記錄的表頭宣告其形態的名稱,而這些名稱又分成幾類的名稱格式 (Type Name Format):
0x00 Empty Record; 僅有此狀態位元組。
0x01 Well_Known Record;
       (TEXT, URI, SmartPoster, Signature)
0x02 MIME Media Record; MIME所定義的媒體記錄
0x03 Absolute URI Record; 絕對URI記錄
0x04 External Record; Domain名稱+“:”+類形名稱
0x05 Unknown Record; TYPE_LENGTH=0且TYPE被省略。
0x06 Unchanged Record; TYPE_LENGTH=0且TYPE被省略。



留言

熱門文章