地點:30教 5樓 男廁對面 *
時間:下午三點 *
天氣:中雨 *
狀態:3 *
*********************************************************
@brief:
此書之前讀過兩遍,每次讀的目的不同,本次讀的目的是完成NFC考勤設備上位機的開發,主要實現P2P通信功能。
第一章NFC概述
NFC設備:NFC設備、NFC讀卡器、NFC標簽。第一種主要是指集成了多種功能包括P2P、模擬卡、讀取卡功能芯片的設備。后面兩種是只有特定功能的設備,具有專用性。
書中提到一句話:NFC設備即可以工作在主動模式也可以工作在被動模式,而讀卡器只能工作在主動模式下,NFC標簽只能工作在被動模式下。
@note 上面一段話非常關鍵,短短的一句道出了NFC各種芯片電路板的工作模式,之前讀的時候沒有留意這個地方,所以在android api中提到的Initiator和target一直不解,這里的NFC設備有狹義的和廣義的,廣義的nfc設備是包含NFC閱讀器和NFC讀卡器以及NFC標簽,狹義的NFC設備是指有NFC全功能的device。
NFC通信原理是利用磁場的耦合,通信的設備都具有調制解調信號的功能,這個東東在PN532數據手冊上有提到,調制解調是信號與系統課程的概念,不太了解不過不重要,只要知道無論是哪種NFC通訊方式,通訊設備都需要天線就行了。主動設備和被動設備的區別就在於誰提供磁場供能,基於這種區分方式又有主動通信模式和被動通信模式,主動通信模式是通信的兩方都是主動設備,必須產生自己的RF場(專業名詞好像叫RF field),這本書上講P2P就是使用這種模式。
在第一章后面給出了NFC開發常用的網絡資源,相當Nice啊。
google android API NFC Basics:
http://developer.android.com/guide/topics/connectivity/nfc/index.html
android.nfc:
http://developer.android.com/reference/android/nfc/package-sumary.html
android.nfc.tech:
http://developer.android.com/reference/android/nfc/tech/package-summary.html
不出意外,直接訪問是打不開的,為什么呢因為被牆了,有VPN的小伙伴可以直接訪問,沒有的就別看了,洗洗睡了。0.0
還是能看的,不過要改下,前面的協議和主機名改為:https://developer.android.google.cn就可以正常訪問啦。
第二章 NFC協議基礎
看名字就很難,但是協議往往又是通信的核心,頭疼。
NFC技術標准有四層,RF Layer ISO層、Mode Switch層、NFC Protocol(nfc 協議) 、App層,相關層的介紹相當專業啊,看不太懂。這段提到了一個名詞NDEF nfc數據交換格式,在android系統中可以用於P2P,我在讀android api關於主機卡模擬時看到一個APDU格式,也是NFC數據傳輸的格式,這兩者有何聯系?
NDEF協議:
因為android的api中關於P2P通信有一個NDEF類,所有還是詳細了解下。
這里的“載荷內容必須被定義在一個NFC記錄類型定義(RTD)文檔中”,這句話我認為有問題,所要表述的意思是載荷的內容必須是RTD協議定義的格式內容。
NDEF格式這段文字描述有點亂,還是看圖靠譜,前面說NDEF由一系列的Record記錄組成,而記錄又由Identifier+length+type+payload組成,這里的Identifier應該就是記錄的首字節,通俗點講就是類型定義字節(1byte)哦,里邊定義了payload是不是首記錄,載荷里邊有無id,是短記錄還是長記錄,以及非常重要的TNF(3 bit)Type Name Dormat這三位指出Payload類型定義字節Type映射規則;length是Type Length、Payload length、ID length組成,不是單指Payload的長度。
前面說了TNF指明的是Type數值的對應Payload類型的映射關系。TNF的取值如上圖所示,因為TNF是3位所以最多有8種選擇,最后一種未定義。
當TNF=0x01的時候,Type取值對應的Payload類型在下面定義,RTD===Record Type Define
RTD:
NFC定義的數據類型需要的載荷內容被定義在RTD文檔中。
因為傳輸的格式未確定,所以在這里先粗看一遍,了解下。
這本書確實是本好書,總結了NFC通訊協議以及規范,但是講得比較淺,可能是因為很早就出版的原因。需要深入學習NFC的話還是得去NFC FORM查看英文資料,當然也有可能是我基礎太薄弱,覺得講得淺,看不出門道。
直接跳到第四章android nfc api概述
這部分內容是我迫切想要了解的內容,之前有看過一遍,但是印象不深,而且自己對於查看API編程的能力還是很薄弱。
這個NfcAdapter應該和藍牙開發的BluetoothAdapter差不多,這個類是對NFC硬件的抽象,里邊有很多對NFC硬件的操作方法。NdefMessage是NDEF(NFC Data Exchange Format)包的抽象,里面存放的是NFC通訊的數據,做完在測試風火輪的SMC532與Mi 8手機P2P通訊的時候用到一款NDEF Message send app,里邊發送的數據格式就是前面提到的那些格式。
emm,接口,這里回憶起以前學Java的時候,記得在學書中將Package打包哪章,自己總結的一個Package包往往包含類和抽象接口,是的接口都是抽象的,也就是在使用的時候我們必須要自己實現的函數。這里聊點題外話,到現在我都不懂接口調用的機制以及Java中抽象類抽象方法的使用,我現在的猜測是android系統這個東西,在遇到這些接口的觸發條件的時候會去調用這個“函數”,過兩天《thinking in Java》寄到再看一遍,實事是我已經看過兩遍了(手動添加黑臉表情)。
第一個接口看不懂什么意思,第二個接口是NFC設備(手機)檢測到另一個NFC設備(NFC手機)就會調用這個接口,可以在這個接口發送消息通知用戶檢測到NFC設備。第三個接口是數據發送回調接口,就是在NDEF數據包發送成功后,調用這個方法,也可以在里邊Thoast一個消息通知用戶數據發送成功。
上面這個軟件是國外那位大佬編的,格式就是NDEF數據格式。
還有一個構造方法是這樣的
方法什么的查API吧。
簡要看下andorid.nfc.tech包