標籤:nfc libnfc c++
本篇翻譯文章:
這篇文章主要是說明如何在windows作業系統上安裝、配置和使用libnfc。
一、基本資料1.作業系統:
Windows Vista Home Premium SP 2
2.硬體資訊:
System: Dell Inspiron 1720
Processor: Intel Core 2 Duo CPU T9300 @ 2.5GHz 2.5GHz
System type: 32-bit Operating System
3.所需軟體:
在windows作業系統上安裝軟體需要下列軟體、庫檔案:
- TDM-GCC MinGW Compiler
- libusb-win32
- PCRE for Windows
- CMake
- Doxygen(不是必須的)
如果未安裝doxygen,會遇到下面的警告:Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE),這個是可以忽略的。
二、安裝過程1.安裝TDM
在 http://sourceforge.net/projects/tdm-gcc/ 下載TDM-GCC MinGW 編譯器,本篇下載版本為:tdm64-gcc-4.7.1-3.exe
關於TDM編譯器更多的資訊,可參看 http://tdm-gcc.tdragon.net/ 裡面的介紹。
註:MinGW = windows系統上面最小的GNU
1)雙擊開啟執行檔案,按確認按鈕
2)選擇MinGW-w64/TDM64 Experimental(32-bit and 64-bit),然後按下一步
註:
你需要安裝"MinGW/TDM(32 bit)"版本, “MinGW-w64/TDM64 Experimental"版本將運行在32、64位作業系統上
3)選擇TDM-GCC安裝目錄,例如:D:/ProgramFiles/MinGW64
4) 選擇離你最近的下載伺服器,單擊下一步
5)選擇"TDM-GCC Recormmended,All Packages" ,按下一步
6)等待TDM-GCC安裝完成,點擊下一步
7)點擊完成按鈕,完成TDM-GCC的安裝
關於TDM-GCC的說明資訊,可以參考README-gcc-tdm64.txt檔案
2.安裝libusb-win32
在 http://sourceforge.net/projects/libusb-win32/ 下載libusb-win32軟體,可以下載版本:libusb-win32-bin-1.2.6.0.zip。關於這個庫更多的資訊可參看:http://sourceforge.net/apps/trac/libusb-win32/wiki
下載解壓libusb-win32-bin-1.2.6.0zip檔案到自己指定的目錄即可,不需要再做其他動作了。
3.安裝PCRE
在 http://sourceforge.net/projects/gunwin32/files/pcre/7.0/ 下載PCRE安裝包(Perl-compatible regular-expression),關於PCRE更多的資訊可以參看:http://www.pcre.org
1)雙擊運行可執行檔,點擊下一步
2)接收協議,點擊下一步
3)選擇PCRE安裝目錄,例如:D:/ProgramFiles/GnuWin32,點擊下一步
4)選擇“Full installation”,按下一步
5)輸入在開始菜單中的開始菜單的捷徑,按下一步
6)選擇附加選項,單擊下一步
7)點擊安裝
8)點擊完成
4.安裝CMake
在 http://www.cmake.org/下載CMake windows平台二進位分發包(Win32 installer)。CMake是一個可跨平台的開源的串連庫。可以下載版本:cmake-2.8.11.2-win32-x86.exe
1)雙擊可執行檔,點擊我同意按鈕
2)選擇添加CMake到目前使用者系統路徑,點擊下一步
3)選擇CMake安裝目錄,例如:D:/ProgramFiles/Development/CMake,點擊下一步
4)選擇開始菜單,點擊安裝
5)等待CMake安裝完成,點擊下一步
6)點擊完成按鈕,完成安裝
5.安裝Doxygen
在 http://www.doxygen.org 下載doxygen,比如下載版本:doxygen-1.8.4.-setup.exe
註:安裝Doxygen不是必須的,如果沒有安裝,在用CMake配置libnfc的時候會顯示警告,但是你可以將此警告忽略。
1)雙擊可執行檔,點擊下一步
2)接收協議,點擊下一步
3)選擇Doxygen的安裝目錄,如:D:/ProgramFiles/DevelopmentToos/Doxygen
4)選擇"Full installation" ,點擊下一步
5) 輸入開始菜單Doxygen捷徑,點擊下一步
6)點擊安裝
7)Doxygen正在安裝
8)閱讀Doxygen資訊,點擊下一步
9)點擊完成
6.安裝libnfc
在 http://code.google.com/p/libnfc 下載近距離無線通訊庫檔案,如:libnfc-1.7.0-rc7.tar.gz,解壓到相應目錄下
關於此庫的更多的資訊可以看:http://nfc-tools.org
7.配置libnfc
libnfc目前只支援使用簡單的USB到UART的適配器工具FTDI的UART通訊。在編譯前需要配置libnfc支援UART和PN532指令集。
需要做如下修改:
1)在用mingw32-make時會出現下面的錯誤資訊 “C:\libnfc-build\windows\libnfc.rc:25:37: warning: missing terminating " character [enabled by default]”,編輯libnfc-1.7.0-rc7/CMakeLists.txt檔案,將:
MACRO (GET_CURRENT_YEAR RESULT) EXECUTE_PROCESS(COMMAND "cmd" " /C date /T" OUTPUT_VARIABLE ${RESULT}) STRING(REGEX REPLACE ".*(..)/(..)/(....).*" "\\3" ${RESULT} ${${RESULT}})ENDMACRO (GET_CURRENT_YEAR)
修改為:
MACRO (GET_CURRENT_YEAR RESULT)
EXECUTE_PROCESS(COMMAND "cmd" " /C date /T" OUTPUT_VARIABLE ${RESULT})
STRING(REGEX REPLACE "\n" "" ${RESULT} ${${RESULT}})
STRING(REGEX REPLACE ".*(..)/(..)/(....).*" "\\3" ${RESULT} ${${RESULT}})
ENDMACRO (GET_CURRENT_YEAR)
2)除非附加驅動,否則pn532預設的逾時時間是不夠用的,NFC閱讀器是無法讀取的。需要較長時間的等待來PN532喚醒這個是必要的。因此需要在發送0x55後跟隨30個 0x00
將:
const uint8_t pn532_wakeup_preamble[] = { 0x55, 0x55, 0x00, 0x00, 0x00 };
修改為:
const uint8_t pn532_wakeup_preamble[] = { 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
3)如果複製libnfc-1.7.0-rc7\libnfic.config.sample為libnfc.conf,這個檔案不會被讀到。不要複製libnfc.conf.sample,有另外一種方式,修改libnfc-1.7.0-rc7/libnfc/nfc-internal.c檔案,將:
res->allow_intrusive_scan = false
修改為:
res->allow_intrusive_scan = true;
8.設定系統路徑
開啟“系統屬性”視窗:
右鍵點擊“電腦“
選擇”屬性“
點擊“進階系統設定”,開啟“進階”視窗,點擊"環境變數"
在系統變數子視窗中選擇“,點擊編輯
編輯系統內容變數“path”,添加下面的路徑(如果沒有添加)
D:\ProgramFiles\DevelopmentTools\doxygen\bin; (Only if you installed Doxygen)
D:\ProgramFiles\DevelopmentTools\MinGW64\bin;
D:\ProgramFiles\DevelopmentTools\MinGW64\x86_64-w64-mingw32\lib32;
D:\ProgramFiles\DevelopmentTools\MinGW64\x86_64-w64-mingw32\include;
D:\ProgramFiles\DevelopmentTools\CMake\bin;
D:\ProgramFiles\DevelopmentTools\GnuWin32\bin;
測試是否所需要的軟體和庫都安裝了以及系統變數是否配置正確,開啟dos視窗,運行cmake命令:
9.配置cmake libnfc工程
1)建立libnfc-build檔案夾
2)開啟dos視窗進入"libnfc-build"檔案夾下,輸入cmake-gui命令
cmake用於配置和生產軟體工程所需的編譯檔案。配置一個工程的基本步驟如下:
A.選擇工程源碼目錄,這個目錄應該包括CMakeLists.txt檔案,在本篇中libnfc源碼目錄是D:\ProgramFiles\DevelopmentToos\libnfc-1.7.0-rc7
B.選擇工程的編譯目錄。這個目錄是工程編譯的目錄,它可以與源碼目錄一個目錄,也可以是不同的目錄。為了清理時方便,建議使用單獨的目錄。如果目錄不存在,CMake會自動建立目錄。在本篇中的編譯目錄是libnfc-build
源碼和二進位目錄選擇完,點擊"Configure"安裝,開啟配置視窗:
a.選擇“MinGW Makefiles”生產器
b.選擇"Use default native compilers"
c.點擊完成按鈕
這會讓CMake讀取所有的輸入檔案從而發現所有工程被用到的變數。第一次變數將以紅色背景顯示,我們需要將探測到的紅色的變數修改正確。對於一些工程配置需要進行多次,因此繼續點擊Configure按鈕,知道沒有紅色為止。
修正這些錯誤:
A.點擊 PCRE_INCLUDE_DIRS,填入:D:/ProgramFiles/DevelopmentTools/GunWin32/include
B.點擊PCRE_LIBRARIES,填入:D:/ProgramFiles/DevelopmentTools//GunWin32lib/libpcre.dll.a
C.點擊Configure按鈕
修改錯誤:
A.點擊LIBUSB_INCLUDE_DIRS變數,填入:D:/ProgramFiles/DevelopmentTools/libusb-win32-bin-1.2.6.0/include
B.點擊LIBUSB_LIBRARIES變數,選擇檔案:D:/ProgramFiles/DevelopmentToolslibusb-win32-bin-1.2.6.0/lib/gcc/libusb.a
通過以上步驟,你可以編譯一個32位的程式。對於64位系統,32位、64位的應用程式都可以運行,但是64位的程式只能運行在64位的作業系統上。
a.32位 MinGW GCC
libusb-win32-bin-1.2.6.0\lib\gcc\libusb.a
b.64位 MinGW GCC
直接連接libusb0.dll或者建立自己的匯入lib
c.32位 MSVC(=Microsoft Visual C++)
libusb-win32-bin-1.2.6.0\lib\msvc\libusb.lib
d.64位 MSVC
libusb-win32-bin-1.2.6.0\lib\msvc_x64\libusb.lib
c.64位 MSVC for IA64
libusb-win32-bin-1.2.6.0\lib\bcc\libusb.lib
d.Borland C(僅32位)
libusb-win32-bin-1.2.6.0/lib/bcc/libusb.lib
e. 其他編譯器,使用動態
libusb-win32-bin-1.2.6.0\lib\dynamic\libusb-dyn.c
再次單擊Configure按鈕
根據自己的需要配置libnfc,知道沒有了紅色的警告。在我的環境中我將以串連Adafruit PN532 RFID/NFC通過FTDI面板到windows vista。因為libnfc目前只支援通過UART的通訊,我做了如下的改動:
A.設定CMAKE_BUILD_TYPE=Debug
B.設定CMAKE_ISNTALL_PREFIX=C:/Program Files/libnfc/
C.設定LIBNFC_DEBUG_MODE=ON
D.設定LIBNFC_DRIVER_PN532_UART=ON
E.設定所有的 LIBNFC_DRIVER_NNN=OFF
F.設定LIBNFC_SYSCONFDIR=C:/Program Files/libnfc/config
點擊Configure按鈕,然後點擊Generate按鈕
它將會在libnfc-build目錄組建檔案
10.用mingw32-make編譯window 執行檔案和libnfc.dll檔案
進入libnfc-build目錄,輸入mingw32-make,執行檔案被建立:
libnfc-build\utils目錄下有:nfc-emulate-forum-tag4.exe、nfc-list.ext、nfc-mfclassic.exe、nfc-mfultralight.exe、nfc-read-forum-tag3.exe、nfc-relay-picc.exe、nfc-scan-devicxe.exe
libnfc-build\examples目錄下有:nfc-anticol.exe、nfc-dep-initator.exe、nfc-dep-target.exe、nfc-emulate-forum-tag2.exe、nfc-emulate-tag.exe、nfc-emulate-uid.exe、nfc-mfsetuid.exe、nfc-poll.exe、nfc-relay.exe
libnfc.dll也被產生了
11.複製libnfc.dll到C:\Windows\System32下
通過上面的步驟,運行nfc-list.exe會報下面的錯誤:
This application has failed to start because libnfc.dll was not found. Re-installing the application may fix this problem.
將libnfc.dll檔案複製到System32下後,修複這個錯誤。