岳佳欣,王 忠
(1.四川電影電視學院,成都 610036;2.四川大學 電氣信息學院,成都 610065)
基于NFC的P2P文件傳輸系統將NFC、藍牙技術結合,可實現2臺智能移動終端之間文件的快速互傳,優化2臺NFC設備之間的P2P通信方案。NFC P2P通信是Android Beam技術的應用,APP采用基于市場占有率最高的Android系統進行開發[1]。NFC論壇定義的P2P通信模式可支持2臺NFC設備之間的雙向交互,實現數據信息點到點傳輸[2-3]。傳輸的文件包括圖片、視頻、音頻、程序、APK等[4]。在P2P通信模式下,參與通信的2臺NFC設備分別稱為發起設備(initiator)和目標設備(target)。initiator和target之間可以相互轉換,NFC P2P傳輸速率有106、212、424 kbit/s[5]。由于傳輸速率的限制,P2P通信適合小文件的傳輸,在傳輸過程中,2臺NFC設備必須保持在通信距離范圍(<4 cm)內,否則通信鏈路中斷,文件傳輸失敗。為了提高文件傳輸速率,增大通信距離,NFC P2P文件傳輸系統實現2臺NFC設備之間快速配對,然后使用藍牙技術實現數據傳輸[6]。
P2P通信模式是NFC技術三大工作模式之一。在該模式下,2臺NFC設備之間可以進行點對點數據通信。NFC P2P通信也被稱為Android Beam技術。本系統采用Android Beam實現2臺智能移動終端之間通信鏈路的建立,采用藍牙技術實現文件之間的互傳。
NFC技術是近距離高頻無線電通信技術,其基于無線電射頻識別技術[7-8]。NFC技術允許2臺設備之間、設備和NFC標簽之間在小于4 cm的通信距離內進行數據傳輸,工作頻率為13.56 MHz,工作原理采用電磁感應耦合技術[9]。NFC電磁感應耦合系統及等效電路如圖1所示。
在NFC系統中,若設備依靠自身RF場提供的能量激活通信,則稱為主設備(active device);若設備依靠其他設備的RF場提供能量并響應,則稱為從設備(passive device)。發射器(initiator)和應答器(transponder)之間進行數據交互時,要求至少有一方為主設備[10]。

圖1 NFC電磁感應耦合系統及等效電路
P2P文件傳輸系統的設計包括initiator與target兩部分。首先要為2臺NFC智能移動終端選定Initiator和Target的角色。當2臺NFC手機觸碰時,鏈接開始建立,選定的文件通過藍牙技術從Initiator傳向Target。當2臺NFC智能移動終端互換角色時,文件可反方向從新的Initiator傳向新的Target。P2P文件傳輸系統架構如圖2所示。

圖2 P2P文件傳輸系統架構
NFC P2P協議棧的最高層是邏輯鏈路控制(LLC)層,該層使用的協議是LLCP。簡單NDEF交換協議(simple NDEF exchange protocol,SNEP)緊接LLC層,它支持2個NFC設備之間直接交換NDEF消息。protocol binding使得NFC可以支持其他高層次且用途廣泛的協議。othere protocols中常用的是conection handover protocol(CHP)[11]。P2P文件傳輸系統基于SNEP開發,NFC P2P協議棧如圖3所示。

圖3 NFC P2P協議棧
LLCP基于IEEE 802.2的規范定義了OSI第二層協議。LLCP可以更好地支持小應用的有限數據傳輸,例如交換名片或相互識別磁條卡號碼等。SNEP專為P2P模式設計,其目的是在通信過程中使用NDEF消息交換信息。SNEP是一種面向鏈接的數據傳輸協議,它的服務端口號為0x04,服務名為“urn:nfc:snep”。SNEP的工作方式是Request/Response。首先,SNEP客戶端向SNEP服務器端發送SNEP Request消息,請求服務器端處理;然后,SNEP服務器端向SNEP客戶端回復SNEP Response,告知客戶端處理結果。
當2臺NFC設備都開啟NFC功能并進入有效通信距離時,它們的LLC模塊將進入鏈路激活階段(link activition)。在此階段中,2臺NFC設備分別扮演initiator和target的角色。首先,initiator向target發送prameter exchang(PAX)數據包,該數據包用于交換2臺NFC設備LLC層的配置信息。target收到PAX包后進行相應的處理,處理完成后將自己的LLC層配置信息發送給initiator。當initiator檢測到target的LLC層參數配置正常時,雙方邏輯鏈路建立成功,可正常工作。當2臺NFC設備超過有限通信距離范圍時,link deactivition觸發,鏈路斷開[12]。link activition工作流程如圖4所示。

圖4 Link Activition工作流程
鏈路被激活后,2臺NFC設備之間先建立面向鏈接的關系,然后再進行數據交互。客戶端通過CONNECT包向服務器端發起鏈接請求。當服務器端對CONNECT包處理成功后,它向客戶端回復connection complete(CC)包,此時鏈接關系建立成功。此后,客戶端和服務器端可通過information包和receive ready(RR)包來傳遞數據。面向鏈接工作流程如圖5所示。

圖5 面向鏈接工作流程
當2臺NFC設備之間通信鏈路建立后,系統快速連接藍牙服務。由于Android平臺對藍牙通信協議提供了完整的封裝,本系統直接調用Android提供的接口實現藍牙傳輸的服務。
API 14中NFC P2P通信被稱為Android beam,它允許2個Android設備之間進行簡單的數據對等交互。當initiator和target兩臺設備在NFC通信范圍內,用戶選定要傳輸的信息,然后觸碰UI界面,信息從initiator傳到target。
通過調用setNdefPushMessage()或setNdef-PushMessageCallback()方法,APP啟用Android Beam。setNdefPushMessage()方法把接收到的NdefMessage對象作為一個消息設置給Beam。當2臺設備在NFC通信距離范圍內,消息會自動發。setNdefPushMessageCallback()方法接收包含createNdefMessage()方法的回調。當Android智能移動終端在發射數據的范圍以內時,該回調方法會被調用。
1個Activity每次只能推送1條NDEF消息,若2種方法同時使用,setNdefPushMessageCallback()方法的優先級要高于setNdefPushMessage()方法。
在啟用Android Beam時,首先需要創建一個包含NdefRecord的NdefMessage對象,該NdefMessage準備被推送到另1臺設備上,然后調用帶有NdefMessage類型參數的setNdefPushMessage()方法,或者是在Activity的onCreate()方法中調用setNdefPushMessageCallback方法,目的是用來傳遞實現NfcAdapter.CreateNdefMessageCallback接口的對象。
在本文中,使用Android Beam技術實現2臺NFC設備的快速配對,當通信鏈路建立后,系統連接藍牙服務。由于Android平臺提供了對藍牙通信協議完整的封裝,因此直接調用接口,定義類Bluetoothservice.java實現藍牙傳輸的服務。開啟同意接收線程AcceptThread()后,建立一個已連接的單線程ConnectedThread(),通過read()方法傳輸數據,通過cancel()方法取消傳輸。
在P2P文件傳輸系統測試中,通信是雙向的,因此選用NFC平板電腦和NFC手機用于P2P測試。P2P文件傳輸系統測試工具如表1所示。

表1 P2P通信模塊測試工具
在NFC手機和NFC平板電腦上分別安裝P2P文件傳輸APP,首先選擇手機作為Initiator,平板電腦作為Target。進入APP,NFC平板電腦上的APP不啟動,保證2臺設備都處于非鎖屏狀態。該系統APP主界面如圖6所示,界面4個按鈕分別用于獲取本機的視頻、音頻、圖片和文件列表。點擊按鈕選擇所要傳輸的文件(例如進入音頻列表,選擇第1個音頻為待傳輸文件,本機音頻列表界面如圖7所示)。將NFC手機和NFC平板電腦的線圈感應區域靠近,用手觸發NFC手機屏幕,音頻文件便可從NFC手機傳向NFC平板電腦,P2P通信測試過程如圖8所示。

圖6 P2P通信APP測試界面

圖7 本機音頻列表界面

圖8 P2P通信測試過程圖
在文件傳輸過程中,由于采用的是藍牙技術,因此可將NFC手機與NFC平板電腦移開,不會影響文件傳輸過程。P2P通信文件傳輸過程截圖如圖9所示,可以看到NFC手機提示欄顯示“正在傳輸信息”,NFC平板電腦提示欄顯示“正在接收Beam內容”。文件接收成功后,可在NFC平板上播放所傳的音頻文件。

圖9 P2P通信文件傳輸過程截圖
將上述操作反方向再進行一遍,NFC平板電腦上選取的文件成功傳至NFC手機。這說明2臺NFC設備之間已通過雙向P2P通信測試。使用NFC P2P文件傳輸系統時,只需將用于通信的2臺NFC設備觸碰便可實現通信鏈路的建立,免去藍牙復雜的連接匹配過程。而采用藍牙技術傳輸數據可提高傳輸速率,避免移開2臺NFC設備時造成的通信過程中斷的問題。
本文中,P2P文件傳輸系統采用NFC技術實現設備的匹配連接,利用藍牙技術實現數據互傳。該系統充分利用了NFC與藍牙技術各自的通信與傳輸優勢,將NFC技術與藍牙技術有機結合,成功實現了P2P文件較遠距離的傳輸,為智能移動終端文件方便快捷地傳輸提供了高效的解決方案。