NFC Emulator for Windows 8 and Windows Phone 8

在上一篇文章中,我介紹了NFC Emulator for Windows Phone 8,在這個Emulator出現前,其實Windows 8 就有提供NFC Emulator,不過要用這個工具比較麻煩,得先下載Windows Driver Kit 8,裡面有Windows 8 NFC Emulator的source code,開發者得自行編譯後才能使用。

 

 

 

文/黃忠成

 

 

 

NFC Emulator for Windows 8

 

  在上一篇文章中,我介紹了NFC Emulator for Windows Phone 8,在這個Emulator出現前,其實Windows 8 就有提供NFC Emulator,不過要用這個工具比較麻煩,得先下載Windows Driver Kit 8,裡面有Windows 8 NFC Emulator的source code,

開發者得自行編譯後才能使用。之前我在嘗試下載Windows Driver Kit 8時發生錯誤,持續測了好久才下載並安裝成功,讀者們如果只是要使用這個Driver的話,可以直接到下列網址下載:

http://www.code6421.com/BlogPics/NFCDriver.zip

 

或是自己下載Windows Driver Kit 8。

 

http://msdn.microsoft.com/en-US/windows/hardware/hh852362

 

 

安裝

 

  下載了NFCDriver.zip後解開,會看到以下的目錄結構。

圖1

切換至NFCDriver目錄,會看到一個package.cer,這是一個憑證,必須先行安裝到Windows 8中才能正確地安裝NFC Emulator Driver。

圖2

圖3

圖4

圖5

完成後以系統管理員權限開啟命令列模式,切換到NFCDriver目錄,鍵入以下指令。

 

devcon.exe install NetNfpProvider.inf WUDF\NetNfpProvider

 

沒意外的話會出現下圖。

圖6

點選安裝後,安裝NFC Emulator for Windows 8的工作就完成了。

 

 

測試

 

  通常,測試這個NFC Emulator至少需要兩台Windows 8,所以此處我開了另一個VM來測試,首先先撰寫一個Windows  Store的NFC應用程式,記得要開啟NFC權限。

圖7

下面是測試的程式碼。


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.Networking.Proximity;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238

namespace App21
{
    /// 
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// 
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            ProximityDevice device = ProximityDevice.GetDefault();
            device.PublishUriMessage(new Uri("http://www.microsoft.com"));
        }
    }
}

 

接著請在要測試接收NFC資料的VM上開啟防火牆設定並關閉私人網路的部分(注意,測試完之後請記得開啟)。

圖8

接著在要執行這隻Windows Store程式的電腦上執行netnfpcontrol.exe(在NFCDriver.zip中)。

 

格式:

netnfpcontrol <IP>

範例:

netnfpcontrol 192.168.1.113

 

會看到以下的畫面。

圖9

然後執行我們的Windows Store程式,按下畫面上的按鈕來送出Uri訊息。

圖11

一切正常的話,目的地VM就會出現下列的畫面。

圖12

 

Windows Phone 8 NFC Emulator互通

 

  Windows Phone 8 的NFC Emulator一開始就設計成可以跟Windows 8 NFC Emulator溝通,用法很簡單,只要開啟ProximityTapper程式,輸入目標機器的IP(該機器或是VM必須安裝本文提到的NFC Emulator Driver),按下Add Device按鈕。

 

圖13

完成後點選剛新增的那個Device,然後點選Tap Selected Devices and Remain Connected按鈕。

圖14

接著就可以點選下方的Send Url來送出資料。

圖15

圖16

 

當然,你也可以使用Windows Phone 8 Emulator來執行所寫的NFC應用程式,由Windows Phone 8 Emulator送出 NFC資料到Windows 8,下面是前篇文章所寫過的測試程式。


using System;

using System.Collections.Generic;

using System.Linq;

using System.Net;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Navigation;

using Microsoft.Phone.Controls;

using Microsoft.Phone.Shell;

using PhoneApp17.Resources;

using Windows.Networking.Proximity;


namespace PhoneApp17

{

    public partial class MainPage : PhoneApplicationPage

    {

        // Constructor

        public MainPage()

        {

            InitializeComponent();


            // Sample code to localize the ApplicationBar

            //BuildLocalizedApplicationBar();

        }


        private void Button_Click(object sender, RoutedEventArgs e)

        {

            ProximityDevice device = ProximityDevice.GetDefault();

            device.PublishUriMessage(new Uri("http://www.microsoft.com"));

        }       

    }

}

 

執行後到ProximityTapper去配對Windows 8(IP那個)跟Windows Phone 8 Emulator。

圖17

按下Windows Phone 8 Emulator上程式的按鈕後。

圖18

 

注意: 測試憑證沒有要使用時,請到憑證管理員中刪除。

 

參考資料

http://www.silverlightshow.net/items/Near-Field-Communication-in-windows-8-part-1.aspx