本篇翻译文章:
这篇文章主要是说明如何在windows操作系统上安装、配置和使用libnfc。
Windows Vista Home Premium SP 2
System: Dell Inspiron 1720
Processor: Intel Core 2 Duo CPU T9300 @ 2.5GHz 2.5GHz
System type: 32-bit Operating System
在windows操作系统上安装软件需要下列软件、库文件:
在 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文件
在 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文件到自己指定的目录即可,不需要再做其他操作了。
在 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)点击完成
在 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)点击完成按钮,完成安装
在 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)点击完成
在 http://code.google.com/p/libnfc 下载近场通信库文件,如:libnfc-1.7.0-rc7.tar.gz,解压到相应目录下
关于此库的更多的信息可以看:http://nfc-tools.org
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;
打开“系统属性”窗口:
右键点击“计算机“
选择”属性“
点击“高级系统设置”,打开“高级”窗口,点击"环境变量"
在系统变量子窗口中选择“,点击编辑
编辑系统环境变量“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命令:
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目录生成文件
进入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也被生成了
通过上面的步骤,运行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下后,修复这个错误。