Import newtree branch as trunk
This commit is contained in:
commit
9ce99b80d3
40 changed files with 300 additions and 242 deletions
15
configure.ac
15
configure.ac
|
@ -1,5 +1,9 @@
|
||||||
define([rev], esyscmd([sh -c "echo -n 'r' && svnversion -n"]))dnl
|
# SVN revison
|
||||||
AC_INIT(libnfc, 1.2.1+rev, info@libnfc.org)
|
define([svn_revision], esyscmd([sh -c "svnversion -n"]))
|
||||||
|
SVN_REVISION=svn_revision
|
||||||
|
|
||||||
|
# General init
|
||||||
|
AC_INIT(libnfc, 1.2.1, info@libnfc.org)
|
||||||
|
|
||||||
AC_CONFIG_HEADER(config.h)
|
AC_CONFIG_HEADER(config.h)
|
||||||
AM_INIT_AUTOMAKE
|
AM_INIT_AUTOMAKE
|
||||||
|
@ -24,7 +28,7 @@ AC_PATH_PROG(PKG_CONFIG, pkg-config)
|
||||||
# Checks for header files.
|
# Checks for header files.
|
||||||
AC_HEADER_STDC
|
AC_HEADER_STDC
|
||||||
AC_HEADER_STDBOOL
|
AC_HEADER_STDBOOL
|
||||||
AC_CHECK_HEADERS([stdio.h stdlib.h stdint.h stddef.h stdbool.h usb.h])
|
AC_CHECK_HEADERS([stdio.h stdlib.h stdint.h stddef.h stdbool.h])
|
||||||
|
|
||||||
# Checks for types
|
# Checks for types
|
||||||
AC_TYPE_SIZE_T
|
AC_TYPE_SIZE_T
|
||||||
|
@ -165,8 +169,11 @@ fi
|
||||||
|
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
Makefile
|
Makefile
|
||||||
src/Makefile
|
src/lib/buses/Makefile
|
||||||
|
src/lib/drivers/Makefile
|
||||||
|
src/lib/Makefile
|
||||||
src/examples/Makefile
|
src/examples/Makefile
|
||||||
|
src/Makefile
|
||||||
libnfc.pc
|
libnfc.pc
|
||||||
Doxyfile
|
Doxyfile
|
||||||
])
|
])
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
prefix=@prefix@
|
prefix=@prefix@
|
||||||
exec_prefix=@exec_prefix@
|
exec_prefix=@exec_prefix@
|
||||||
libdir=@libdir@
|
libdir=@libdir@
|
||||||
includedir=@includedir@/@PACKAGE@
|
includedir=@includedir@/nfc
|
||||||
Name: libnfc
|
Name: libnfc
|
||||||
Description: Near Field Communication (NFC) library
|
Description: Near Field Communication (NFC) library
|
||||||
Version: @VERSION@
|
Version: @VERSION@
|
||||||
|
|
|
@ -1,21 +1,3 @@
|
||||||
SET(LIBRARY-SOURCES libnfc rs232 bitutils dev_arygon dev_pn532_uart)
|
|
||||||
|
|
||||||
# find PCSC library and headers
|
|
||||||
IF(LIBNFC_PCSC)
|
|
||||||
FIND_PACKAGE(PCSC REQUIRED)
|
|
||||||
ADD_DEFINITIONS("-DHAVE_PCSC_LITE=1")
|
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PCSC_CFLAGS_OTHER}")
|
|
||||||
SET(LIBRARY-SOURCES ${LIBRARY-SOURCES} "dev_acr122")
|
|
||||||
ENDIF(LIBNFC_PCSC)
|
|
||||||
|
|
||||||
# find libusb library and headers
|
|
||||||
IF(LIBNFC_USB)
|
|
||||||
FIND_PACKAGE(LIBUSB REQUIRED)
|
|
||||||
ADD_DEFINITIONS("-DHAVE_LIBUSB=1")
|
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${LIBUSB_CFLAGS_OTHER}")
|
|
||||||
SET(LIBRARY-SOURCES ${LIBRARY-SOURCES} "dev_pn531" "dev_pn533")
|
|
||||||
ENDIF(LIBNFC_USB)
|
|
||||||
|
|
||||||
IF(LIBNFC_VERBOSE_OUTPUT)
|
IF(LIBNFC_VERBOSE_OUTPUT)
|
||||||
ADD_DEFINITIONS("-DDEBUG")
|
ADD_DEFINITIONS("-DDEBUG")
|
||||||
ENDIF(LIBNFC_VERBOSE_OUTPUT)
|
ENDIF(LIBNFC_VERBOSE_OUTPUT)
|
||||||
|
@ -37,31 +19,5 @@ ENDIF(MSVC)
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(${LIBUSB_INCLUDE_DIRS} ${PCSC_INCLUDE_DIRS})
|
INCLUDE_DIRECTORIES(${LIBUSB_INCLUDE_DIRS} ${PCSC_INCLUDE_DIRS})
|
||||||
|
|
||||||
# Library
|
ADD_SUBDIRECTORY(lib)
|
||||||
ADD_LIBRARY(nfc SHARED ${LIBRARY-SOURCES})
|
|
||||||
TARGET_LINK_LIBRARIES(nfc ${LIBUSB_LIBRARIES} ${PCSC_LIBRARIES})
|
|
||||||
SET_TARGET_PROPERTIES(nfc PROPERTIES SOVERSION 0 VERSION 0.0.0)
|
|
||||||
|
|
||||||
IF(MSVC)
|
|
||||||
# On Windows the shared (runtime) library should be either in the same
|
|
||||||
# directory as the excutables or in the path, we add it to same directory
|
|
||||||
INSTALL(TARGETS nfc RUNTIME DESTINATION bin COMPONENT libraries)
|
|
||||||
|
|
||||||
# At compile time we need the .LIB file, we place it in the lib directory
|
|
||||||
INSTALL(TARGETS nfc ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT headers)
|
|
||||||
ELSE(MSVC)
|
|
||||||
INSTALL(TARGETS nfc LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries)
|
|
||||||
ENDIF(MSVC)
|
|
||||||
|
|
||||||
# Headers
|
|
||||||
FILE(GLOB headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
|
|
||||||
INSTALL(FILES ${headers} DESTINATION ${INCLUDE_INSTALL_DIR}/libnfc COMPONENT headers)
|
|
||||||
IF(MSVC)
|
|
||||||
# On Windows we also install the stdint headers, without it programs using it
|
|
||||||
# can't compile (like if we want to compile the included examples "out of
|
|
||||||
# tree")
|
|
||||||
#FILE(GLOB stdint "${CMAKE_CURRENT_SOURCE_DIR}/msvc/*.h")
|
|
||||||
#INSTALL(FILES ${stdint} DESTINATION ${INCLUDE_INSTALL_DIR}/libnfc COMPONENT headers)
|
|
||||||
ENDIF(MSVC)
|
|
||||||
|
|
||||||
ADD_SUBDIRECTORY(examples)
|
ADD_SUBDIRECTORY(examples)
|
||||||
|
|
|
@ -1,30 +1,3 @@
|
||||||
SUBDIRS = . examples
|
SUBDIRS = lib examples
|
||||||
|
|
||||||
# set the include path found by configure
|
|
||||||
INCLUDES= $(all_includes)
|
|
||||||
|
|
||||||
nfc_devices_headers = dev_arygon.h dev_pn532_uart.h
|
|
||||||
nfcinclude_HEADERS = libnfc.h bitutils.h defines.h types.h rs232.h devices.h messages.h
|
|
||||||
nfcinclude_HEADERS += $(nfc_devices_headers)
|
|
||||||
nfcincludedir = $(includedir)/libnfc
|
|
||||||
|
|
||||||
lib_LTLIBRARIES = libnfc.la
|
|
||||||
libnfc_la_SOURCES = bitutils.c libnfc.c rs232.c dev_arygon.c dev_pn532_uart.c
|
|
||||||
libnfc_la_CFLAGS =
|
|
||||||
libnfc_la_LIBADD =
|
|
||||||
|
|
||||||
if PCSC_LITE_ENABLED
|
|
||||||
nfcinclude_HEADERS += dev_acr122.h
|
|
||||||
libnfc_la_CFLAGS += @LIBPCSCLITE_CFLAGS@ -DHAVE_PCSC_LITE
|
|
||||||
libnfc_la_SOURCES += dev_acr122.c
|
|
||||||
libnfc_la_LIBADD += @LIBPCSCLITE_LIBS@
|
|
||||||
endif
|
|
||||||
|
|
||||||
if LIBUSB_ENABLED
|
|
||||||
nfcinclude_HEADERS += dev_pn531.h dev_pn533.h
|
|
||||||
libnfc_la_CFLAGS += @LIBUSB_CFLAGS@ -DHAVE_LIBUSB
|
|
||||||
libnfc_la_SOURCES += dev_pn531.c dev_pn533.c
|
|
||||||
libnfc_la_LIBADD += @LIBUSB_LIBS@
|
|
||||||
endif
|
|
||||||
|
|
||||||
DISTCLEANFILES = Makefile.in
|
DISTCLEANFILES = Makefile.in
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
SET(EXAMPLES-SOURCES nfc-list nfc-mfclassic nfc-mfultralight nfcip-initiator nfcip-target nfc-anticol nfc-emulate nfc-relay)
|
SET(EXAMPLES-SOURCES nfc-list nfc-mfclassic nfc-mfultralight nfcip-initiator nfcip-target nfc-anticol nfc-emulate nfc-relay)
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../)
|
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../lib)
|
||||||
|
|
||||||
# Examples
|
# Examples
|
||||||
FOREACH(source ${EXAMPLES-SOURCES})
|
FOREACH(source ${EXAMPLES-SOURCES})
|
||||||
|
|
|
@ -4,36 +4,34 @@ bin_PROGRAMS = nfc-anticol nfc-list nfc-mfclassic nfc-mfultralight nfc-relay nfc
|
||||||
INCLUDES= $(all_includes)
|
INCLUDES= $(all_includes)
|
||||||
|
|
||||||
nfcinclude_HEADERS = mifaretag.h mifareultag.h
|
nfcinclude_HEADERS = mifaretag.h mifareultag.h
|
||||||
nfcincludedir = $(includedir)/libnfc
|
nfcincludedir = $(includedir)/nfc
|
||||||
|
|
||||||
AM_CFLAGS = -I$(top_srcdir)/src
|
AM_CFLAGS = -I$(top_srcdir)/src/lib
|
||||||
|
|
||||||
nfc_anticol_SOURCES = nfc-anticol.c
|
nfc_anticol_SOURCES = nfc-anticol.c
|
||||||
nfc_anticol_LDADD = $(top_builddir)/src/libnfc.la
|
nfc_anticol_LDADD = $(top_builddir)/src/lib/libnfc.la
|
||||||
|
|
||||||
nfc_list_SOURCES = nfc-list.c
|
nfc_list_SOURCES = nfc-list.c
|
||||||
nfc_list_LDADD = $(top_builddir)/src/libnfc.la
|
nfc_list_LDADD = $(top_builddir)/src/lib/libnfc.la
|
||||||
|
|
||||||
nfc_mfultralight_SOURCES = nfc-mfultralight.c mifareultag.h
|
nfc_mfultralight_SOURCES = nfc-mfultralight.c mifareultag.h
|
||||||
nfc_mfultralight_LDADD = $(top_builddir)/src/libnfc.la
|
nfc_mfultralight_LDADD = $(top_builddir)/src/lib/libnfc.la
|
||||||
|
|
||||||
nfc_mfclassic_SOURCES = nfc-mfclassic.c mifaretag.h
|
nfc_mfclassic_SOURCES = nfc-mfclassic.c mifaretag.h
|
||||||
nfc_mfclassic_LDADD = $(top_builddir)/src/libnfc.la
|
nfc_mfclassic_LDADD = $(top_builddir)/src/lib/libnfc.la
|
||||||
|
|
||||||
nfc_relay_SOURCES = nfc-relay.c
|
nfc_relay_SOURCES = nfc-relay.c
|
||||||
nfc_relay_LDADD = $(top_builddir)/src/libnfc.la
|
nfc_relay_LDADD = $(top_builddir)/src/lib/libnfc.la
|
||||||
|
|
||||||
nfc_emulate_SOURCES = nfc-emulate.c
|
nfc_emulate_SOURCES = nfc-emulate.c
|
||||||
nfc_emulate_LDADD = $(top_builddir)/src/libnfc.la
|
nfc_emulate_LDADD = $(top_builddir)/src/lib/libnfc.la
|
||||||
|
|
||||||
nfcip_target_SOURCES = nfcip-target.c
|
nfcip_target_SOURCES = nfcip-target.c
|
||||||
nfcip_target_LDADD = $(top_builddir)/src/libnfc.la
|
nfcip_target_LDADD = $(top_builddir)/src/lib/libnfc.la
|
||||||
|
|
||||||
nfcip_initiator_SOURCES = nfcip-initiator.c
|
nfcip_initiator_SOURCES = nfcip-initiator.c
|
||||||
nfcip_initiator_LDADD = $(top_builddir)/src/libnfc.la
|
nfcip_initiator_LDADD = $(top_builddir)/src/lib/libnfc.la
|
||||||
|
|
||||||
dist_man_MANS = nfc-anticol.1 nfc-emulate.1 nfc-list.1 nfc-mfclassic.1 nfc-mfultralight.1 nfc-relay.1
|
dist_man_MANS = nfc-anticol.1 nfc-emulate.1 nfc-list.1 nfc-mfclassic.1 nfc-mfultralight.1 nfc-relay.1
|
||||||
#dist_man_MANS = $(man_MANS)
|
|
||||||
#EXTRA_DIST = $(man_MANS)
|
|
||||||
|
|
||||||
DISTCLEANFILES = Makefile.in
|
DISTCLEANFILES = Makefile.in
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "libnfc.h"
|
#include <nfc.h>
|
||||||
|
|
||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
#include "bitutils.h"
|
#include "bitutils.h"
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "libnfc.h"
|
#include <nfc.h>
|
||||||
|
|
||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
#include "bitutils.h"
|
#include "bitutils.h"
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "libnfc.h"
|
#include <nfc.h>
|
||||||
|
|
||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
#include "bitutils.h"
|
#include "bitutils.h"
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
#include "libnfc.h"
|
#include <nfc.h>
|
||||||
|
|
||||||
#include "mifaretag.h"
|
#include "mifaretag.h"
|
||||||
#include "bitutils.h"
|
#include "bitutils.h"
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
#include "libnfc.h"
|
#include <nfc.h>
|
||||||
|
|
||||||
#include "mifareultag.h"
|
#include "mifareultag.h"
|
||||||
#include "bitutils.h"
|
#include "bitutils.h"
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "libnfc.h"
|
#include <nfc.h>
|
||||||
|
|
||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
#include "bitutils.h"
|
#include "bitutils.h"
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "libnfc.h"
|
#include <nfc.h>
|
||||||
|
|
||||||
int main(int argc, const char *argv[])
|
int main(int argc, const char *argv[])
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "libnfc.h"
|
#include <nfc.h>
|
||||||
|
|
||||||
int main(int argc, const char *argv[])
|
int main(int argc, const char *argv[])
|
||||||
{
|
{
|
||||||
|
|
55
src/lib/CMakeLists.txt
Normal file
55
src/lib/CMakeLists.txt
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
# Library's buses
|
||||||
|
SET(BUSES_SOURCES buses/uart)
|
||||||
|
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/buses)
|
||||||
|
|
||||||
|
# Library's drivers
|
||||||
|
SET(DRIVERS_SOURCES drivers/arygon drivers/pn532_uart)
|
||||||
|
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/drivers)
|
||||||
|
|
||||||
|
## find PCSC library and headers
|
||||||
|
IF(LIBNFC_PCSC)
|
||||||
|
FIND_PACKAGE(PCSC REQUIRED)
|
||||||
|
ADD_DEFINITIONS("-DHAVE_PCSC_LITE=1")
|
||||||
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PCSC_CFLAGS_OTHER}")
|
||||||
|
SET(DRIVERS_SOURCES ${DRIVERS_SOURCES} "drivers/acr122")
|
||||||
|
ENDIF(LIBNFC_PCSC)
|
||||||
|
|
||||||
|
## find libusb library and headers
|
||||||
|
IF(LIBNFC_USB)
|
||||||
|
FIND_PACKAGE(LIBUSB REQUIRED)
|
||||||
|
ADD_DEFINITIONS("-DHAVE_LIBUSB=1")
|
||||||
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${LIBUSB_CFLAGS_OTHER}")
|
||||||
|
SET(DRIVERS_SOURCES ${DRIVERS_SOURCES} "drivers/pn531" "drivers/pn533")
|
||||||
|
ENDIF(LIBNFC_USB)
|
||||||
|
|
||||||
|
|
||||||
|
# Library
|
||||||
|
SET(LIBRARY_SOURCES nfc bitutils ${DRIVERS_SOURCES} ${BUSES_SOURCES})
|
||||||
|
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
ADD_LIBRARY(nfc SHARED ${LIBRARY_SOURCES})
|
||||||
|
TARGET_LINK_LIBRARIES(nfc ${LIBUSB_LIBRARIES} ${PCSC_LIBRARIES})
|
||||||
|
SET_TARGET_PROPERTIES(nfc PROPERTIES SOVERSION 0 VERSION 0.0.0)
|
||||||
|
|
||||||
|
IF(MSVC)
|
||||||
|
# On Windows the shared (runtime) library should be either in the same
|
||||||
|
# directory as the excutables or in the path, we add it to same directory
|
||||||
|
INSTALL(TARGETS nfc RUNTIME DESTINATION bin COMPONENT libraries)
|
||||||
|
|
||||||
|
# At compile time we need the .LIB file, we place it in the lib directory
|
||||||
|
INSTALL(TARGETS nfc ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT headers)
|
||||||
|
ELSE(MSVC)
|
||||||
|
INSTALL(TARGETS nfc LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries)
|
||||||
|
ENDIF(MSVC)
|
||||||
|
|
||||||
|
# Headers
|
||||||
|
FILE(GLOB headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
|
||||||
|
INSTALL(FILES ${headers} DESTINATION ${INCLUDE_INSTALL_DIR}/libnfc COMPONENT headers)
|
||||||
|
IF(MSVC)
|
||||||
|
# On Windows we also install the stdint headers, without it programs using it
|
||||||
|
# can't compile (like if we want to compile the included examples "out of
|
||||||
|
# tree")
|
||||||
|
#FILE(GLOB stdint "${CMAKE_CURRENT_SOURCE_DIR}/msvc/*.h")
|
||||||
|
#INSTALL(FILES ${stdint} DESTINATION ${INCLUDE_INSTALL_DIR}/libnfc COMPONENT headers)
|
||||||
|
ENDIF(MSVC)
|
||||||
|
|
||||||
|
|
27
src/lib/Makefile.am
Normal file
27
src/lib/Makefile.am
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
SUBDIRS = buses drivers .
|
||||||
|
|
||||||
|
# set the include path found by configure
|
||||||
|
INCLUDES= $(all_includes)
|
||||||
|
|
||||||
|
nfcinclude_HEADERS = nfc.h defines.h types.h buses.h drivers.h messages.h bitutils.h
|
||||||
|
nfcincludedir = $(includedir)/nfc
|
||||||
|
|
||||||
|
lib_LTLIBRARIES = libnfc.la
|
||||||
|
libnfc_la_SOURCES = nfc.c bitutils.c
|
||||||
|
libnfc_la_LDFLAGS = -no-undefined -version-info=0:0:0
|
||||||
|
libnfc_la_CFLAGS =
|
||||||
|
libnfc_la_LIBADD = \
|
||||||
|
$(top_builddir)/src/lib/buses/libnfcbuses.la \
|
||||||
|
$(top_builddir)/src/lib/drivers/libnfcdrivers.la
|
||||||
|
|
||||||
|
if PCSC_LITE_ENABLED
|
||||||
|
libnfc_la_CFLAGS += @LIBPCSCLITE_CFLAGS@ -DHAVE_PCSC_LITE
|
||||||
|
libnfc_la_LIBADD += @LIBPCSCLITE_LIBS@
|
||||||
|
endif
|
||||||
|
|
||||||
|
if LIBUSB_ENABLED
|
||||||
|
libnfc_la_CFLAGS += @LIBUSB_CFLAGS@ -DHAVE_LIBUSB
|
||||||
|
libnfc_la_LIBADD += @LIBUSB_LIBS@
|
||||||
|
endif
|
||||||
|
|
||||||
|
DISTCLEANFILES = Makefile.in
|
23
src/lib/buses.h
Normal file
23
src/lib/buses.h
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/**
|
||||||
|
* Public platform independent Near Field Communication (NFC) library
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009, Roel Verdult
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU Lesser General Public License as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @file buses.h
|
||||||
|
* @brief
|
||||||
|
*/
|
||||||
|
|
10
src/lib/buses/Makefile.am
Normal file
10
src/lib/buses/Makefile.am
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
|
||||||
|
# set the include path found by configure
|
||||||
|
INCLUDES= $(all_includes)
|
||||||
|
|
||||||
|
noinst_HEADERS = uart.h
|
||||||
|
noinst_LTLIBRARIES = libnfcbuses.la
|
||||||
|
libnfcbuses_la_SOURCES = uart.c
|
||||||
|
libnfcbuses_la_CFLAGS = -I$(top_srcdir)/src/lib
|
||||||
|
|
||||||
|
DISTCLEANFILES = Makefile.in
|
|
@ -17,17 +17,17 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @file rs232.c
|
* @file uart.c
|
||||||
* @brief
|
* @brief
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Based on rs232-code written by Teunis van Beelen available:
|
Based on uart-code written by Teunis van Beelen available:
|
||||||
http://www.teuniz.net/RS-232/index.html
|
http://www.teuniz.net/RS-232/index.html
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "rs232.h"
|
#include "uart.h"
|
||||||
|
|
||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
|
|
||||||
|
@ -48,10 +48,10 @@ struct timeval tv = {
|
||||||
.tv_usec = 30000 // 30,000 micro seconds
|
.tv_usec = 30000 // 30,000 micro seconds
|
||||||
};
|
};
|
||||||
|
|
||||||
// Work-around to claim rs232 interface using the c_iflag (software input processing) from the termios struct
|
// Work-around to claim uart interface using the c_iflag (software input processing) from the termios struct
|
||||||
#define CCLAIMED 0x80000000
|
#define CCLAIMED 0x80000000
|
||||||
|
|
||||||
serial_port rs232_open(const char* pcPortName)
|
serial_port uart_open(const char* pcPortName)
|
||||||
{
|
{
|
||||||
serial_port_unix* sp = malloc(sizeof(serial_port_unix));
|
serial_port_unix* sp = malloc(sizeof(serial_port_unix));
|
||||||
|
|
||||||
|
@ -60,20 +60,20 @@ serial_port rs232_open(const char* pcPortName)
|
||||||
sp->fd = open(pcPortName, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK);
|
sp->fd = open(pcPortName, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK);
|
||||||
if(sp->fd == -1)
|
if(sp->fd == -1)
|
||||||
{
|
{
|
||||||
rs232_close(sp);
|
uart_close(sp);
|
||||||
return INVALID_SERIAL_PORT;
|
return INVALID_SERIAL_PORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(tcgetattr(sp->fd,&sp->tiOld) == -1)
|
if(tcgetattr(sp->fd,&sp->tiOld) == -1)
|
||||||
{
|
{
|
||||||
rs232_close(sp);
|
uart_close(sp);
|
||||||
return INVALID_SERIAL_PORT;
|
return INVALID_SERIAL_PORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure the port is not claimed already
|
// Make sure the port is not claimed already
|
||||||
if (sp->tiOld.c_iflag & CCLAIMED)
|
if (sp->tiOld.c_iflag & CCLAIMED)
|
||||||
{
|
{
|
||||||
rs232_close(sp);
|
uart_close(sp);
|
||||||
return CLAIMED_SERIAL_PORT;
|
return CLAIMED_SERIAL_PORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ serial_port rs232_open(const char* pcPortName)
|
||||||
|
|
||||||
if(tcsetattr(sp->fd,TCSANOW,&sp->tiNew) == -1)
|
if(tcsetattr(sp->fd,TCSANOW,&sp->tiNew) == -1)
|
||||||
{
|
{
|
||||||
rs232_close(sp);
|
uart_close(sp);
|
||||||
return INVALID_SERIAL_PORT;
|
return INVALID_SERIAL_PORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ serial_port rs232_open(const char* pcPortName)
|
||||||
return sp;
|
return sp;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rs232_set_speed(serial_port sp, const uint32_t uiPortSpeed)
|
void uart_set_speed(serial_port sp, const uint32_t uiPortSpeed)
|
||||||
{
|
{
|
||||||
DBG("Serial port speed requested to be set to %d bauds.", uiPortSpeed);
|
DBG("Serial port speed requested to be set to %d bauds.", uiPortSpeed);
|
||||||
// Set port speed (Input and Output)
|
// Set port speed (Input and Output)
|
||||||
|
@ -136,7 +136,7 @@ void rs232_set_speed(serial_port sp, const uint32_t uiPortSpeed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t rs232_get_speed(const serial_port sp)
|
uint32_t uart_get_speed(const serial_port sp)
|
||||||
{
|
{
|
||||||
uint32_t uiPortSpeed = 0;
|
uint32_t uiPortSpeed = 0;
|
||||||
const serial_port_unix* spu = (serial_port_unix*)sp;
|
const serial_port_unix* spu = (serial_port_unix*)sp;
|
||||||
|
@ -163,21 +163,21 @@ uint32_t rs232_get_speed(const serial_port sp)
|
||||||
return uiPortSpeed;
|
return uiPortSpeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rs232_close(const serial_port sp)
|
void uart_close(const serial_port sp)
|
||||||
{
|
{
|
||||||
tcsetattr(((serial_port_unix*)sp)->fd,TCSANOW,&((serial_port_unix*)sp)->tiOld);
|
tcsetattr(((serial_port_unix*)sp)->fd,TCSANOW,&((serial_port_unix*)sp)->tiOld);
|
||||||
close(((serial_port_unix*)sp)->fd);
|
close(((serial_port_unix*)sp)->fd);
|
||||||
free(sp);
|
free(sp);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool rs232_cts(const serial_port sp)
|
bool uart_cts(const serial_port sp)
|
||||||
{
|
{
|
||||||
char status;
|
char status;
|
||||||
if (ioctl(((serial_port_unix*)sp)->fd,TIOCMGET,&status) < 0) return false;
|
if (ioctl(((serial_port_unix*)sp)->fd,TIOCMGET,&status) < 0) return false;
|
||||||
return (status & TIOCM_CTS);
|
return (status & TIOCM_CTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool rs232_receive(const serial_port sp, byte_t* pbtRx, size_t* pszRxLen)
|
bool uart_receive(const serial_port sp, byte_t* pbtRx, size_t* pszRxLen)
|
||||||
{
|
{
|
||||||
int iResult;
|
int iResult;
|
||||||
int byteCount;
|
int byteCount;
|
||||||
|
@ -217,7 +217,7 @@ bool rs232_receive(const serial_port sp, byte_t* pbtRx, size_t* pszRxLen)
|
||||||
return (*pszRxLen > 0);
|
return (*pszRxLen > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool rs232_send(const serial_port sp, const byte_t* pbtTx, const size_t szTxLen)
|
bool uart_send(const serial_port sp, const byte_t* pbtTx, const size_t szTxLen)
|
||||||
{
|
{
|
||||||
int iResult;
|
int iResult;
|
||||||
iResult = write(((serial_port_unix*)sp)->fd,pbtTx,szTxLen);
|
iResult = write(((serial_port_unix*)sp)->fd,pbtTx,szTxLen);
|
||||||
|
@ -233,7 +233,7 @@ typedef struct {
|
||||||
COMMTIMEOUTS ct; // Serial port time-out configuration
|
COMMTIMEOUTS ct; // Serial port time-out configuration
|
||||||
} serial_port_windows;
|
} serial_port_windows;
|
||||||
|
|
||||||
serial_port rs232_open(const char* pcPortName)
|
serial_port uart_open(const char* pcPortName)
|
||||||
{
|
{
|
||||||
char acPortName[255];
|
char acPortName[255];
|
||||||
serial_port_windows* sp = malloc(sizeof(serial_port_windows));
|
serial_port_windows* sp = malloc(sizeof(serial_port_windows));
|
||||||
|
@ -246,7 +246,7 @@ serial_port rs232_open(const char* pcPortName)
|
||||||
sp->hPort = CreateFileA(acPortName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
|
sp->hPort = CreateFileA(acPortName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
|
||||||
if (sp->hPort == INVALID_HANDLE_VALUE)
|
if (sp->hPort == INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
rs232_close(sp);
|
uart_close(sp);
|
||||||
return INVALID_SERIAL_PORT;
|
return INVALID_SERIAL_PORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,14 +255,14 @@ serial_port rs232_open(const char* pcPortName)
|
||||||
sp->dcb.DCBlength = sizeof(DCB);
|
sp->dcb.DCBlength = sizeof(DCB);
|
||||||
if(!BuildCommDCBA("baud=9600 data=8 parity=N stop=1",&sp->dcb))
|
if(!BuildCommDCBA("baud=9600 data=8 parity=N stop=1",&sp->dcb))
|
||||||
{
|
{
|
||||||
rs232_close(sp);
|
uart_close(sp);
|
||||||
return INVALID_SERIAL_PORT;
|
return INVALID_SERIAL_PORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the active serial port
|
// Update the active serial port
|
||||||
if(!SetCommState(sp->hPort,&sp->dcb))
|
if(!SetCommState(sp->hPort,&sp->dcb))
|
||||||
{
|
{
|
||||||
rs232_close(sp);
|
uart_close(sp);
|
||||||
return INVALID_SERIAL_PORT;
|
return INVALID_SERIAL_PORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -274,7 +274,7 @@ serial_port rs232_open(const char* pcPortName)
|
||||||
|
|
||||||
if(!SetCommTimeouts(sp->hPort,&sp->ct))
|
if(!SetCommTimeouts(sp->hPort,&sp->ct))
|
||||||
{
|
{
|
||||||
rs232_close(sp);
|
uart_close(sp);
|
||||||
return INVALID_SERIAL_PORT;
|
return INVALID_SERIAL_PORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -283,13 +283,13 @@ serial_port rs232_open(const char* pcPortName)
|
||||||
return sp;
|
return sp;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rs232_close(const serial_port sp)
|
void uart_close(const serial_port sp)
|
||||||
{
|
{
|
||||||
CloseHandle(((serial_port_windows*)sp)->hPort);
|
CloseHandle(((serial_port_windows*)sp)->hPort);
|
||||||
free(sp);
|
free(sp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rs232_set_speed(serial_port sp, const uint32_t uiPortSpeed)
|
void uart_set_speed(serial_port sp, const uint32_t uiPortSpeed)
|
||||||
{
|
{
|
||||||
serial_port_windows* spw;
|
serial_port_windows* spw;
|
||||||
|
|
||||||
|
@ -316,7 +316,7 @@ void rs232_set_speed(serial_port sp, const uint32_t uiPortSpeed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t rs232_get_speed(const serial_port sp)
|
uint32_t uart_get_speed(const serial_port sp)
|
||||||
{
|
{
|
||||||
const serial_port_windows* spw = (serial_port_windows*)sp;
|
const serial_port_windows* spw = (serial_port_windows*)sp;
|
||||||
if (!GetCommState(spw->hPort, (serial_port)&spw->dcb))
|
if (!GetCommState(spw->hPort, (serial_port)&spw->dcb))
|
||||||
|
@ -325,20 +325,13 @@ uint32_t rs232_get_speed(const serial_port sp)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool rs232_cts(const serial_port sp)
|
bool uart_receive(const serial_port sp, byte_t* pbtRx, size_t* pszRxLen)
|
||||||
{
|
|
||||||
DWORD dwStatus;
|
|
||||||
if (!GetCommModemStatus(((serial_port_windows*)sp)->hPort,&dwStatus)) return false;
|
|
||||||
return (dwStatus & MS_CTS_ON);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool rs232_receive(const serial_port sp, byte_t* pbtRx, size_t* pszRxLen)
|
|
||||||
{
|
{
|
||||||
ReadFile(((serial_port_windows*)sp)->hPort,pbtRx,*pszRxLen,(LPDWORD)pszRxLen,NULL);
|
ReadFile(((serial_port_windows*)sp)->hPort,pbtRx,*pszRxLen,(LPDWORD)pszRxLen,NULL);
|
||||||
return (*pszRxLen != 0);
|
return (*pszRxLen != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool rs232_send(const serial_port sp, const byte_t* pbtTx, const size_t szTxLen)
|
bool uart_send(const serial_port sp, const byte_t* pbtTx, const size_t szTxLen)
|
||||||
{
|
{
|
||||||
DWORD dwTxLen = 0;
|
DWORD dwTxLen = 0;
|
||||||
return WriteFile(((serial_port_windows*)sp)->hPort,pbtTx,szTxLen,&dwTxLen,NULL);
|
return WriteFile(((serial_port_windows*)sp)->hPort,pbtTx,szTxLen,&dwTxLen,NULL);
|
|
@ -17,7 +17,7 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @file rs232.h
|
* @file uart.h
|
||||||
* @brief
|
* @brief
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -49,16 +49,14 @@ typedef void* serial_port;
|
||||||
#define INVALID_SERIAL_PORT (void*)(~1)
|
#define INVALID_SERIAL_PORT (void*)(~1)
|
||||||
#define CLAIMED_SERIAL_PORT (void*)(~2)
|
#define CLAIMED_SERIAL_PORT (void*)(~2)
|
||||||
|
|
||||||
serial_port rs232_open(const char* pcPortName);
|
serial_port uart_open(const char* pcPortName);
|
||||||
void rs232_close(const serial_port sp);
|
void uart_close(const serial_port sp);
|
||||||
|
|
||||||
void rs232_set_speed(serial_port sp, const uint32_t uiPortSpeed);
|
void uart_set_speed(serial_port sp, const uint32_t uiPortSpeed);
|
||||||
uint32_t rs232_get_speed(const serial_port sp);
|
uint32_t uart_get_speed(const serial_port sp);
|
||||||
|
|
||||||
bool rs232_cts(const serial_port sp);
|
bool uart_receive(const serial_port sp, byte_t* pbtRx, size_t* pszRxLen);
|
||||||
|
bool uart_send(const serial_port sp, const byte_t* pbtTx, const size_t szTxLen);
|
||||||
bool rs232_receive(const serial_port sp, byte_t* pbtRx, size_t* pszRxLen);
|
|
||||||
bool rs232_send(const serial_port sp, const byte_t* pbtTx, const size_t szTxLen);
|
|
||||||
|
|
||||||
#endif // _LIBNFC_RS232_H_
|
#endif // _LIBNFC_RS232_H_
|
||||||
|
|
|
@ -27,26 +27,26 @@
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#ifdef HAVE_PCSC_LITE
|
#ifdef HAVE_PCSC_LITE
|
||||||
#include "dev_acr122.h"
|
#include "drivers/acr122.h"
|
||||||
#endif /* HAVE_PCSC_LITE */
|
#endif /* HAVE_PCSC_LITE */
|
||||||
#ifdef HAVE_LIBUSB
|
#ifdef HAVE_LIBUSB
|
||||||
#include "dev_pn531.h"
|
#include "drivers/pn531.h"
|
||||||
#include "dev_pn533.h"
|
#include "drivers/pn533.h"
|
||||||
#endif /* HAVE_LIBUSB */
|
#endif /* HAVE_LIBUSB */
|
||||||
#include "dev_arygon.h"
|
#include "drivers/arygon.h"
|
||||||
#include "dev_pn532_uart.h"
|
#include "drivers/pn532_uart.h"
|
||||||
|
|
||||||
const static struct dev_callbacks dev_callbacks_list[] = {
|
const static struct driver_callbacks drivers_callbacks_list[] = {
|
||||||
// Driver Name Connect Transceive Disconnect
|
// Driver Name Connect Transceive Disconnect
|
||||||
#ifdef HAVE_PCSC_LITE
|
#ifdef HAVE_PCSC_LITE
|
||||||
{ "ACR122", dev_acr122_connect, dev_acr122_transceive, dev_acr122_disconnect },
|
{ "ACR122", acr122_connect, acr122_transceive, acr122_disconnect },
|
||||||
#endif /* HAVE_PCSC_LITE */
|
#endif /* HAVE_PCSC_LITE */
|
||||||
#ifdef HAVE_LIBUSB
|
#ifdef HAVE_LIBUSB
|
||||||
{ "PN531USB", dev_pn531_connect, dev_pn531_transceive, dev_pn531_disconnect },
|
{ "PN531USB", pn531_connect, pn531_transceive, pn531_disconnect },
|
||||||
{ "PN533USB", dev_pn533_connect, dev_pn533_transceive, dev_pn533_disconnect },
|
{ "PN533USB", pn533_connect, pn533_transceive, pn533_disconnect },
|
||||||
#endif /* HAVE_LIBUSB */
|
#endif /* HAVE_LIBUSB */
|
||||||
{ "PN532_UART", dev_pn532_uart_connect, dev_pn532_uart_transceive, dev_pn532_uart_disconnect },
|
{ "PN532_UART", pn532_uart_connect, pn532_uart_transceive, pn532_uart_disconnect },
|
||||||
{ "ARYGON", dev_arygon_connect, dev_arygon_transceive, dev_arygon_disconnect }
|
{ "ARYGON", arygon_connect, arygon_transceive, arygon_disconnect }
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _LIBNFC_DEVICES_H_
|
#endif // _LIBNFC_DEVICES_H_
|
24
src/lib/drivers/Makefile.am
Normal file
24
src/lib/drivers/Makefile.am
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# set the include path found by configure
|
||||||
|
INCLUDES= $(all_includes)
|
||||||
|
|
||||||
|
noinst_HEADERS = arygon.h pn532_uart.h
|
||||||
|
noinst_LTLIBRARIES = libnfcdrivers.la
|
||||||
|
libnfcdrivers_la_SOURCES = arygon.c pn532_uart.c
|
||||||
|
libnfcdrivers_la_CFLAGS = -I$(top_srcdir)/src/lib -I$(top_srcdir)/src/lib/buses
|
||||||
|
libnfcdrivers_la_LIBADD =
|
||||||
|
|
||||||
|
if PCSC_LITE_ENABLED
|
||||||
|
noinst_HEADERS += acr122.h
|
||||||
|
libnfcdrivers_la_CFLAGS += @LIBPCSCLITE_CFLAGS@ -DHAVE_PCSC_LITE
|
||||||
|
libnfcdrivers_la_SOURCES += acr122.c
|
||||||
|
libnfcdrivers_la_LIBADD += @LIBPCSCLITE_LIBS@
|
||||||
|
endif
|
||||||
|
|
||||||
|
if LIBUSB_ENABLED
|
||||||
|
noinst_HEADERS += pn531.h pn533.h
|
||||||
|
libnfcdrivers_la_CFLAGS += @LIBUSB_CFLAGS@ -DHAVE_LIBUSB
|
||||||
|
libnfcdrivers_la_SOURCES += pn531.c pn533.c
|
||||||
|
libnfcdrivers_la_LIBADD += @LIBUSB_LIBS@
|
||||||
|
endif
|
||||||
|
|
||||||
|
DISTCLEANFILES = Makefile.in
|
|
@ -17,11 +17,11 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @file dev_acr122.c
|
* @file acr122.c
|
||||||
* @brief
|
* @brief
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dev_acr122.h"
|
#include "acr122.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -35,7 +35,6 @@
|
||||||
|
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
#include "bitutils.h"
|
|
||||||
|
|
||||||
// WINDOWS: #define IOCTL_CCID_ESCAPE_SCARD_CTL_CODE SCARD_CTL_CODE(3500)
|
// WINDOWS: #define IOCTL_CCID_ESCAPE_SCARD_CTL_CODE SCARD_CTL_CODE(3500)
|
||||||
#define IOCTL_CCID_ESCAPE_SCARD_CTL_CODE (((0x31) << 16) | ((3500) << 2))
|
#define IOCTL_CCID_ESCAPE_SCARD_CTL_CODE (((0x31) << 16) | ((3500) << 2))
|
||||||
|
@ -58,7 +57,7 @@ typedef struct {
|
||||||
SCARD_IO_REQUEST ioCard;
|
SCARD_IO_REQUEST ioCard;
|
||||||
} dev_spec_acr122;
|
} dev_spec_acr122;
|
||||||
|
|
||||||
dev_info* dev_acr122_connect(const nfc_device_desc_t* pndd)
|
dev_info* acr122_connect(const nfc_device_desc_t* pndd)
|
||||||
{
|
{
|
||||||
char* pacReaders[MAX_DEVICES];
|
char* pacReaders[MAX_DEVICES];
|
||||||
char acList[256+64*MAX_DEVICES];
|
char acList[256+64*MAX_DEVICES];
|
||||||
|
@ -131,7 +130,7 @@ dev_info* dev_acr122_connect(const nfc_device_desc_t* pndd)
|
||||||
dsa.ioCard.cbPciLength = sizeof(SCARD_IO_REQUEST);
|
dsa.ioCard.cbPciLength = sizeof(SCARD_IO_REQUEST);
|
||||||
|
|
||||||
// Retrieve the current firmware version
|
// Retrieve the current firmware version
|
||||||
pcFirmware = dev_acr122_firmware((dev_info*)&dsa);
|
pcFirmware = acr122_firmware((dev_info*)&dsa);
|
||||||
if (strstr(pcFirmware,FIRMWARE_TEXT) != NULL)
|
if (strstr(pcFirmware,FIRMWARE_TEXT) != NULL)
|
||||||
{
|
{
|
||||||
// We found a occurence, test if it has the right index
|
// We found a occurence, test if it has the right index
|
||||||
|
@ -163,7 +162,7 @@ dev_info* dev_acr122_connect(const nfc_device_desc_t* pndd)
|
||||||
return INVALID_DEVICE_INFO;
|
return INVALID_DEVICE_INFO;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dev_acr122_disconnect(dev_info* pdi)
|
void acr122_disconnect(dev_info* pdi)
|
||||||
{
|
{
|
||||||
dev_spec_acr122* pdsa = (dev_spec_acr122*)pdi->ds;
|
dev_spec_acr122* pdsa = (dev_spec_acr122*)pdi->ds;
|
||||||
SCardDisconnect(pdsa->hCard,SCARD_LEAVE_CARD);
|
SCardDisconnect(pdsa->hCard,SCARD_LEAVE_CARD);
|
||||||
|
@ -172,7 +171,7 @@ void dev_acr122_disconnect(dev_info* pdi)
|
||||||
free(pdi);
|
free(pdi);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dev_acr122_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen)
|
bool acr122_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen)
|
||||||
{
|
{
|
||||||
byte_t abtRxCmd[5] = { 0xFF,0xC0,0x00,0x00 };
|
byte_t abtRxCmd[5] = { 0xFF,0xC0,0x00,0x00 };
|
||||||
size_t szRxCmdLen = sizeof(abtRxCmd);
|
size_t szRxCmdLen = sizeof(abtRxCmd);
|
||||||
|
@ -234,7 +233,7 @@ bool dev_acr122_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* dev_acr122_firmware(const dev_spec ds)
|
char* acr122_firmware(const dev_spec ds)
|
||||||
{
|
{
|
||||||
byte_t abtGetFw[5] = { 0xFF,0x00,0x48,0x00,0x00 };
|
byte_t abtGetFw[5] = { 0xFF,0x00,0x48,0x00,0x00 };
|
||||||
uint32_t uiResult;
|
uint32_t uiResult;
|
||||||
|
@ -260,7 +259,7 @@ char* dev_acr122_firmware(const dev_spec ds)
|
||||||
return abtFw;
|
return abtFw;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dev_acr122_led_red(const dev_spec ds, bool bOn)
|
bool acr122_led_red(const dev_spec ds, bool bOn)
|
||||||
{
|
{
|
||||||
byte_t abtLed[9] = { 0xFF,0x00,0x40,0x05,0x04,0x00,0x00,0x00,0x00 };
|
byte_t abtLed[9] = { 0xFF,0x00,0x40,0x05,0x04,0x00,0x00,0x00,0x00 };
|
||||||
dev_spec_acr122* pdsa = (dev_spec_acr122*)ds;
|
dev_spec_acr122* pdsa = (dev_spec_acr122*)ds;
|
|
@ -17,7 +17,7 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @file dev_acr122.h
|
* @file acr122.h
|
||||||
* @brief
|
* @brief
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -31,15 +31,15 @@
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
// Functions used by developer to handle connection to this device
|
// Functions used by developer to handle connection to this device
|
||||||
dev_info* dev_acr122_connect(const nfc_device_desc_t* pndd);
|
dev_info* acr122_connect(const nfc_device_desc_t* pndd);
|
||||||
void dev_acr122_disconnect(dev_info* pdi);
|
void acr122_disconnect(dev_info* pdi);
|
||||||
|
|
||||||
// Callback function used by libnfc to transmit commands to the PN53X chip
|
// Callback function used by libnfc to transmit commands to the PN53X chip
|
||||||
bool dev_acr122_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen);
|
bool acr122_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen);
|
||||||
|
|
||||||
// Various additional features this device supports
|
// Various additional features this device supports
|
||||||
char* dev_acr122_firmware(const dev_spec ds);
|
char* acr122_firmware(const dev_spec ds);
|
||||||
bool dev_acr122_led_red(const dev_spec ds, bool bOn);
|
bool acr122_led_red(const dev_spec ds, bool bOn);
|
||||||
|
|
||||||
#endif // _LIBNFC_DEV_ACR122_H_
|
#endif // _LIBNFC_DEV_ACR122_H_
|
||||||
|
|
|
@ -17,14 +17,13 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @file dev_arygon.c
|
* @file arygon.c
|
||||||
* @brief
|
* @brief
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dev_arygon.h"
|
#include "arygon.h"
|
||||||
|
|
||||||
#include "rs232.h"
|
#include "uart.h"
|
||||||
#include "bitutils.h"
|
|
||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
@ -73,7 +72,7 @@
|
||||||
* @note ARYGON-APDB2UA33 (PN532 + ARYGON µC): 9600,n,8,1
|
* @note ARYGON-APDB2UA33 (PN532 + ARYGON µC): 9600,n,8,1
|
||||||
*/
|
*/
|
||||||
|
|
||||||
dev_info* dev_arygon_connect(const nfc_device_desc_t* pndd)
|
dev_info* arygon_connect(const nfc_device_desc_t* pndd)
|
||||||
{
|
{
|
||||||
uint32_t uiDevNr;
|
uint32_t uiDevNr;
|
||||||
serial_port sp;
|
serial_port sp;
|
||||||
|
@ -95,10 +94,10 @@ dev_info* dev_arygon_connect(const nfc_device_desc_t* pndd)
|
||||||
sprintf(acConnect,"%s%d",SERIAL_STRING,uiDevNr);
|
sprintf(acConnect,"%s%d",SERIAL_STRING,uiDevNr);
|
||||||
#endif /* __APPLE__ */
|
#endif /* __APPLE__ */
|
||||||
|
|
||||||
sp = rs232_open(acConnect);
|
sp = uart_open(acConnect);
|
||||||
if ((sp != INVALID_SERIAL_PORT) && (sp != CLAIMED_SERIAL_PORT))
|
if ((sp != INVALID_SERIAL_PORT) && (sp != CLAIMED_SERIAL_PORT))
|
||||||
{
|
{
|
||||||
rs232_set_speed(sp, SERIAL_DEFAULT_PORT_SPEED);
|
uart_set_speed(sp, SERIAL_DEFAULT_PORT_SPEED);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
@ -112,12 +111,12 @@ dev_info* dev_arygon_connect(const nfc_device_desc_t* pndd)
|
||||||
} else {
|
} else {
|
||||||
DBG("Connecting to: %s at %d bauds.",pndd->pcPort, pndd->uiSpeed);
|
DBG("Connecting to: %s at %d bauds.",pndd->pcPort, pndd->uiSpeed);
|
||||||
strcpy(acConnect,pndd->pcPort);
|
strcpy(acConnect,pndd->pcPort);
|
||||||
sp = rs232_open(acConnect);
|
sp = uart_open(acConnect);
|
||||||
if (sp == INVALID_SERIAL_PORT) ERR("Invalid serial port: %s",acConnect);
|
if (sp == INVALID_SERIAL_PORT) ERR("Invalid serial port: %s",acConnect);
|
||||||
if (sp == CLAIMED_SERIAL_PORT) ERR("Serial port already claimed: %s",acConnect);
|
if (sp == CLAIMED_SERIAL_PORT) ERR("Serial port already claimed: %s",acConnect);
|
||||||
if ((sp == CLAIMED_SERIAL_PORT) || (sp == INVALID_SERIAL_PORT)) return INVALID_DEVICE_INFO;
|
if ((sp == CLAIMED_SERIAL_PORT) || (sp == INVALID_SERIAL_PORT)) return INVALID_DEVICE_INFO;
|
||||||
|
|
||||||
rs232_set_speed(sp, pndd->uiSpeed);
|
uart_set_speed(sp, pndd->uiSpeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
DBG("Successfully connected to: %s",acConnect);
|
DBG("Successfully connected to: %s",acConnect);
|
||||||
|
@ -134,13 +133,13 @@ dev_info* dev_arygon_connect(const nfc_device_desc_t* pndd)
|
||||||
return pdi;
|
return pdi;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dev_arygon_disconnect(dev_info* pdi)
|
void arygon_disconnect(dev_info* pdi)
|
||||||
{
|
{
|
||||||
rs232_close((serial_port)pdi->ds);
|
uart_close((serial_port)pdi->ds);
|
||||||
free(pdi);
|
free(pdi);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dev_arygon_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen)
|
bool arygon_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen)
|
||||||
{
|
{
|
||||||
byte_t abtTxBuf[BUFFER_LENGTH] = { DEV_ARYGON_PROTOCOL_TAMA, 0x00, 0x00, 0xff }; // Every packet must start with "00 00 ff"
|
byte_t abtTxBuf[BUFFER_LENGTH] = { DEV_ARYGON_PROTOCOL_TAMA, 0x00, 0x00, 0xff }; // Every packet must start with "00 00 ff"
|
||||||
byte_t abtRxBuf[BUFFER_LENGTH];
|
byte_t abtRxBuf[BUFFER_LENGTH];
|
||||||
|
@ -168,7 +167,7 @@ bool dev_arygon_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t
|
||||||
printf(" TX: ");
|
printf(" TX: ");
|
||||||
print_hex(abtTxBuf,szTxLen+8);
|
print_hex(abtTxBuf,szTxLen+8);
|
||||||
#endif
|
#endif
|
||||||
if (!rs232_send((serial_port)ds,abtTxBuf,szTxLen+8)) {
|
if (!uart_send((serial_port)ds,abtTxBuf,szTxLen+8)) {
|
||||||
ERR("Unable to transmit data. (TX)");
|
ERR("Unable to transmit data. (TX)");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -188,7 +187,7 @@ bool dev_arygon_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t
|
||||||
* For more information, see Issue 23 on development site : http://code.google.com/p/libnfc/issues/detail?id=23
|
* For more information, see Issue 23 on development site : http://code.google.com/p/libnfc/issues/detail?id=23
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!rs232_receive((serial_port)ds,abtRxBuf,&szRxBufLen)) {
|
if (!uart_receive((serial_port)ds,abtRxBuf,&szRxBufLen)) {
|
||||||
ERR("Unable to receive data. (RX)");
|
ERR("Unable to receive data. (RX)");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
|
@ -17,7 +17,7 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @file dev_arygon.h
|
* @file arygon.h
|
||||||
* @brief
|
* @brief
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -28,11 +28,11 @@
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
// Functions used by developer to handle connection to this device
|
// Functions used by developer to handle connection to this device
|
||||||
dev_info* dev_arygon_connect(const nfc_device_desc_t* pndd);
|
dev_info* arygon_connect(const nfc_device_desc_t* pndd);
|
||||||
void dev_arygon_disconnect(dev_info* pdi);
|
void arygon_disconnect(dev_info* pdi);
|
||||||
|
|
||||||
// Callback function used by libnfc to transmit commands to the PN53X chip
|
// Callback function used by libnfc to transmit commands to the PN53X chip
|
||||||
bool dev_arygon_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen);
|
bool arygon_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen);
|
||||||
|
|
||||||
#endif // _LIBNFC_DEV_ARYGON_H_
|
#endif // _LIBNFC_DEV_ARYGON_H_
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @file dev_pn531.c
|
* @file pn531.c
|
||||||
* @brief
|
* @brief
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -32,8 +32,7 @@ Thanks to d18c7db and Okko for example code
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "dev_pn531.h"
|
#include "pn531.h"
|
||||||
#include "bitutils.h"
|
|
||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
|
|
||||||
#define BUFFER_LENGTH 256
|
#define BUFFER_LENGTH 256
|
||||||
|
@ -81,7 +80,7 @@ static void get_end_points(struct usb_device *dev, dev_spec_pn531* pdsp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_info* dev_pn531_connect(const nfc_device_desc_t* pndd)
|
dev_info* pn531_connect(const nfc_device_desc_t* pndd)
|
||||||
{
|
{
|
||||||
int idvendor = 0x04CC;
|
int idvendor = 0x04CC;
|
||||||
int idproduct = 0x0531;
|
int idproduct = 0x0531;
|
||||||
|
@ -163,7 +162,7 @@ dev_info* dev_pn531_connect(const nfc_device_desc_t* pndd)
|
||||||
return pdi;
|
return pdi;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dev_pn531_disconnect(dev_info* pdi)
|
void pn531_disconnect(dev_info* pdi)
|
||||||
{
|
{
|
||||||
dev_spec_pn531* pdsp = (dev_spec_pn531*)pdi->ds;
|
dev_spec_pn531* pdsp = (dev_spec_pn531*)pdi->ds;
|
||||||
usb_release_interface(pdsp->pudh,0);
|
usb_release_interface(pdsp->pudh,0);
|
||||||
|
@ -172,7 +171,7 @@ void dev_pn531_disconnect(dev_info* pdi)
|
||||||
free(pdi);
|
free(pdi);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dev_pn531_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen)
|
bool pn531_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen)
|
||||||
{
|
{
|
||||||
size_t uiPos = 0;
|
size_t uiPos = 0;
|
||||||
int ret = 0;
|
int ret = 0;
|
|
@ -17,7 +17,7 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @file dev_pn531.h
|
* @file pn531.h
|
||||||
* @brief
|
* @brief
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -31,11 +31,11 @@
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
// Functions used by developer to handle connection to this device
|
// Functions used by developer to handle connection to this device
|
||||||
dev_info* dev_pn531_connect(const nfc_device_desc_t* pndd);
|
dev_info* pn531_connect(const nfc_device_desc_t* pndd);
|
||||||
void dev_pn531_disconnect(dev_info* pdi);
|
void pn531_disconnect(dev_info* pdi);
|
||||||
|
|
||||||
// Callback function used by libnfc to transmit commands to the PN53X chip
|
// Callback function used by libnfc to transmit commands to the PN53X chip
|
||||||
bool dev_pn531_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen);
|
bool pn531_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen);
|
||||||
|
|
||||||
#endif // _LIBNFC_DEV_PN531_H_
|
#endif // _LIBNFC_DEV_PN531_H_
|
||||||
|
|
|
@ -17,14 +17,13 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @file dev_pn532_uart.c
|
* @file pn532_uart.c
|
||||||
* @brief
|
* @brief
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dev_pn532_uart.h"
|
#include "pn532_uart.h"
|
||||||
|
|
||||||
#include "rs232.h"
|
#include "uart.h"
|
||||||
#include "bitutils.h"
|
|
||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
@ -48,7 +47,7 @@
|
||||||
|
|
||||||
#define SERIAL_DEFAULT_PORT_SPEED 115200
|
#define SERIAL_DEFAULT_PORT_SPEED 115200
|
||||||
|
|
||||||
dev_info* dev_pn532_uart_connect(const nfc_device_desc_t* pndd)
|
dev_info* pn532_uart_connect(const nfc_device_desc_t* pndd)
|
||||||
{
|
{
|
||||||
uint32_t uiDevNr;
|
uint32_t uiDevNr;
|
||||||
serial_port sp;
|
serial_port sp;
|
||||||
|
@ -70,10 +69,10 @@ dev_info* dev_pn532_uart_connect(const nfc_device_desc_t* pndd)
|
||||||
sprintf(acConnect,"%s%d",SERIAL_STRING,uiDevNr);
|
sprintf(acConnect,"%s%d",SERIAL_STRING,uiDevNr);
|
||||||
#endif /* __APPLE__ */
|
#endif /* __APPLE__ */
|
||||||
|
|
||||||
sp = rs232_open(acConnect);
|
sp = uart_open(acConnect);
|
||||||
if ((sp != INVALID_SERIAL_PORT) && (sp != CLAIMED_SERIAL_PORT))
|
if ((sp != INVALID_SERIAL_PORT) && (sp != CLAIMED_SERIAL_PORT))
|
||||||
{
|
{
|
||||||
rs232_set_speed(sp, SERIAL_DEFAULT_PORT_SPEED);
|
uart_set_speed(sp, SERIAL_DEFAULT_PORT_SPEED);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
@ -87,12 +86,12 @@ dev_info* dev_pn532_uart_connect(const nfc_device_desc_t* pndd)
|
||||||
} else {
|
} else {
|
||||||
DBG("Connecting to: %s at %d bauds.",pndd->pcPort, pndd->uiSpeed);
|
DBG("Connecting to: %s at %d bauds.",pndd->pcPort, pndd->uiSpeed);
|
||||||
strcpy(acConnect,pndd->pcPort);
|
strcpy(acConnect,pndd->pcPort);
|
||||||
sp = rs232_open(acConnect);
|
sp = uart_open(acConnect);
|
||||||
if (sp == INVALID_SERIAL_PORT) ERR("Invalid serial port: %s",acConnect);
|
if (sp == INVALID_SERIAL_PORT) ERR("Invalid serial port: %s",acConnect);
|
||||||
if (sp == CLAIMED_SERIAL_PORT) ERR("Serial port already claimed: %s",acConnect);
|
if (sp == CLAIMED_SERIAL_PORT) ERR("Serial port already claimed: %s",acConnect);
|
||||||
if ((sp == CLAIMED_SERIAL_PORT) || (sp == INVALID_SERIAL_PORT)) return INVALID_DEVICE_INFO;
|
if ((sp == CLAIMED_SERIAL_PORT) || (sp == INVALID_SERIAL_PORT)) return INVALID_DEVICE_INFO;
|
||||||
|
|
||||||
rs232_set_speed(sp, pndd->uiSpeed);
|
uart_set_speed(sp, pndd->uiSpeed);
|
||||||
}
|
}
|
||||||
/** @info PN532C106 wakeup. */
|
/** @info PN532C106 wakeup. */
|
||||||
/** @todo Put this command in pn53x init process */
|
/** @todo Put this command in pn53x init process */
|
||||||
|
@ -100,10 +99,10 @@ dev_info* dev_pn532_uart_connect(const nfc_device_desc_t* pndd)
|
||||||
size_t szRxBufLen;
|
size_t szRxBufLen;
|
||||||
const byte_t pncmd_pn532c106_wakeup[] = { 0x55,0x55,0x00,0x00,0x00,0x00,0x00,0xFF,0x03,0xFD,0xD4,0x14,0x01,0x17,0x00 };
|
const byte_t pncmd_pn532c106_wakeup[] = { 0x55,0x55,0x00,0x00,0x00,0x00,0x00,0xFF,0x03,0xFD,0xD4,0x14,0x01,0x17,0x00 };
|
||||||
|
|
||||||
rs232_send(sp, pncmd_pn532c106_wakeup, sizeof(pncmd_pn532c106_wakeup));
|
uart_send(sp, pncmd_pn532c106_wakeup, sizeof(pncmd_pn532c106_wakeup));
|
||||||
delay_ms(10);
|
delay_ms(10);
|
||||||
|
|
||||||
if (!rs232_receive(sp,abtRxBuf,&szRxBufLen)) {
|
if (!uart_receive(sp,abtRxBuf,&szRxBufLen)) {
|
||||||
ERR("Unable to receive data. (RX)");
|
ERR("Unable to receive data. (RX)");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -126,13 +125,13 @@ dev_info* dev_pn532_uart_connect(const nfc_device_desc_t* pndd)
|
||||||
return pdi;
|
return pdi;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dev_pn532_uart_disconnect(dev_info* pdi)
|
void pn532_uart_disconnect(dev_info* pdi)
|
||||||
{
|
{
|
||||||
rs232_close((serial_port)pdi->ds);
|
uart_close((serial_port)pdi->ds);
|
||||||
free(pdi);
|
free(pdi);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dev_pn532_uart_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen)
|
bool pn532_uart_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen)
|
||||||
{
|
{
|
||||||
byte_t abtTxBuf[BUFFER_LENGTH] = { 0x00, 0x00, 0xff }; // Every packet must start with "00 00 ff"
|
byte_t abtTxBuf[BUFFER_LENGTH] = { 0x00, 0x00, 0xff }; // Every packet must start with "00 00 ff"
|
||||||
byte_t abtRxBuf[BUFFER_LENGTH];
|
byte_t abtRxBuf[BUFFER_LENGTH];
|
||||||
|
@ -160,7 +159,7 @@ bool dev_pn532_uart_transceive(const dev_spec ds, const byte_t* pbtTx, const siz
|
||||||
printf(" TX: ");
|
printf(" TX: ");
|
||||||
print_hex(abtTxBuf,szTxLen+7);
|
print_hex(abtTxBuf,szTxLen+7);
|
||||||
#endif
|
#endif
|
||||||
if (!rs232_send((serial_port)ds,abtTxBuf,szTxLen+7)) {
|
if (!uart_send((serial_port)ds,abtTxBuf,szTxLen+7)) {
|
||||||
ERR("Unable to transmit data. (TX)");
|
ERR("Unable to transmit data. (TX)");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -175,7 +174,7 @@ bool dev_pn532_uart_transceive(const dev_spec ds, const byte_t* pbtTx, const siz
|
||||||
*/
|
*/
|
||||||
delay_ms(30);
|
delay_ms(30);
|
||||||
|
|
||||||
if (!rs232_receive((serial_port)ds,abtRxBuf,&szRxBufLen)) {
|
if (!uart_receive((serial_port)ds,abtRxBuf,&szRxBufLen)) {
|
||||||
ERR("Unable to receive data. (RX)");
|
ERR("Unable to receive data. (RX)");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
|
@ -17,7 +17,7 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @file dev_pn532_uart.h
|
* @file pn532_uart.h
|
||||||
* @brief
|
* @brief
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -28,11 +28,11 @@
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
// Functions used by developer to handle connection to this device
|
// Functions used by developer to handle connection to this device
|
||||||
dev_info* dev_pn532_uart_connect(const nfc_device_desc_t* pndd);
|
dev_info* pn532_uart_connect(const nfc_device_desc_t* pndd);
|
||||||
void dev_pn532_uart_disconnect(dev_info* pdi);
|
void pn532_uart_disconnect(dev_info* pdi);
|
||||||
|
|
||||||
// Callback function used by libnfc to transmit commands to the PN53X chip
|
// Callback function used by libnfc to transmit commands to the PN53X chip
|
||||||
bool dev_pn532_uart_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen);
|
bool pn532_uart_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen);
|
||||||
|
|
||||||
#endif // _LIBNFC_DEV_PN532_UART_H_
|
#endif // _LIBNFC_DEV_PN532_UART_H_
|
||||||
|
|
|
@ -17,21 +17,20 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @file dev_pn533.c
|
* @file pn533.c
|
||||||
* @brief
|
* @brief
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Thanks to d18c7db and Okko for example code
|
Thanks to d18c7db and Okko for example code
|
||||||
*/
|
*/
|
||||||
#include "dev_pn533.h"
|
#include "pn533.h"
|
||||||
|
|
||||||
#include <usb.h>
|
#include <usb.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "bitutils.h"
|
|
||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
|
|
||||||
#define BUFFER_LENGTH 256
|
#define BUFFER_LENGTH 256
|
||||||
|
@ -79,7 +78,7 @@ static void get_end_points(struct usb_device *dev, dev_spec_pn533* pdsp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_info* dev_pn533_connect(const nfc_device_desc_t* pndd)
|
dev_info* pn533_connect(const nfc_device_desc_t* pndd)
|
||||||
{
|
{
|
||||||
int idvendor = 0x04e6;
|
int idvendor = 0x04e6;
|
||||||
int idproduct = 0x5591;
|
int idproduct = 0x5591;
|
||||||
|
@ -158,7 +157,7 @@ dev_info* dev_pn533_connect(const nfc_device_desc_t* pndd)
|
||||||
return pdi;
|
return pdi;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dev_pn533_disconnect(dev_info* pdi)
|
void pn533_disconnect(dev_info* pdi)
|
||||||
{
|
{
|
||||||
dev_spec_pn533* pdsp = (dev_spec_pn533*)pdi->ds;
|
dev_spec_pn533* pdsp = (dev_spec_pn533*)pdi->ds;
|
||||||
usb_release_interface(pdsp->pudh,0);
|
usb_release_interface(pdsp->pudh,0);
|
||||||
|
@ -167,7 +166,7 @@ void dev_pn533_disconnect(dev_info* pdi)
|
||||||
free(pdi);
|
free(pdi);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dev_pn533_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen)
|
bool pn533_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen)
|
||||||
{
|
{
|
||||||
size_t uiPos = 0;
|
size_t uiPos = 0;
|
||||||
int ret = 0;
|
int ret = 0;
|
|
@ -17,7 +17,7 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @file dev_pn533.h
|
* @file pn533.h
|
||||||
* @brief
|
* @brief
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -28,11 +28,11 @@
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
// Functions used by developer to handle connection to this device
|
// Functions used by developer to handle connection to this device
|
||||||
dev_info* dev_pn533_connect(const nfc_device_desc_t* pndd);
|
dev_info* pn533_connect(const nfc_device_desc_t* pndd);
|
||||||
void dev_pn533_disconnect(dev_info* pdi);
|
void pn533_disconnect(dev_info* pdi);
|
||||||
|
|
||||||
// Callback function used by libnfc to transmit commands to the PN53X chip
|
// Callback function used by libnfc to transmit commands to the PN53X chip
|
||||||
bool dev_pn533_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen);
|
bool pn533_transceive(const dev_spec ds, const byte_t* pbtTx, const size_t szTxLen, byte_t* pbtRx, size_t* pszRxLen);
|
||||||
|
|
||||||
#endif // _LIBNFC_DEV_PN533_H_
|
#endif // _LIBNFC_DEV_PN533_H_
|
||||||
|
|
|
@ -17,22 +17,21 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @file libnfc.c
|
* @file nfc.c
|
||||||
* @brief
|
* @brief
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "libnfc.h"
|
#include "nfc.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "devices.h"
|
#include "drivers.h"
|
||||||
|
|
||||||
#include "bitutils.h"
|
|
||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
|
|
||||||
#include "../config.h"
|
#include "../../config.h"
|
||||||
|
|
||||||
// Registers and symbols masks used to covers parts within a register
|
// Registers and symbols masks used to covers parts within a register
|
||||||
#define REG_CIU_TX_MODE 0x6302
|
#define REG_CIU_TX_MODE 0x6302
|
||||||
|
@ -285,20 +284,20 @@ dev_info* nfc_connect(nfc_device_desc_t* pndd)
|
||||||
size_t szFwLen = sizeof(abtFw);
|
size_t szFwLen = sizeof(abtFw);
|
||||||
|
|
||||||
// Search through the device list for an available device
|
// Search through the device list for an available device
|
||||||
for (uiDev=0; uiDev<sizeof(dev_callbacks_list)/sizeof(dev_callbacks_list[0]); uiDev++)
|
for (uiDev=0; uiDev<sizeof(drivers_callbacks_list)/sizeof(drivers_callbacks_list[0]); uiDev++)
|
||||||
{
|
{
|
||||||
if (pndd == NULL) {
|
if (pndd == NULL) {
|
||||||
// No device description specified: try to automatically claim a device
|
// No device description specified: try to automatically claim a device
|
||||||
pdi = dev_callbacks_list[uiDev].connect(pndd);
|
pdi = drivers_callbacks_list[uiDev].connect(pndd);
|
||||||
} else {
|
} else {
|
||||||
// Specific device is requested: using device description pndd
|
// Specific device is requested: using device description pndd
|
||||||
if( 0 != strcmp(dev_callbacks_list[uiDev].acDriver, pndd->pcDriver ) )
|
if( 0 != strcmp(drivers_callbacks_list[uiDev].acDriver, pndd->pcDriver ) )
|
||||||
{
|
{
|
||||||
DBG("Looking for %s, found %s... Skip it.", pndd->pcDriver, dev_callbacks_list[uiDev].acDriver);
|
DBG("Looking for %s, found %s... Skip it.", pndd->pcDriver, drivers_callbacks_list[uiDev].acDriver);
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
DBG("Looking for %s, found %s... Use it.", pndd->pcDriver, dev_callbacks_list[uiDev].acDriver);
|
DBG("Looking for %s, found %s... Use it.", pndd->pcDriver, drivers_callbacks_list[uiDev].acDriver);
|
||||||
pdi = dev_callbacks_list[uiDev].connect(pndd);
|
pdi = drivers_callbacks_list[uiDev].connect(pndd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -307,7 +306,7 @@ dev_info* nfc_connect(nfc_device_desc_t* pndd)
|
||||||
{
|
{
|
||||||
DBG("[%s] has been claimed.", pdi->acName);
|
DBG("[%s] has been claimed.", pdi->acName);
|
||||||
// Great we have claimed a device
|
// Great we have claimed a device
|
||||||
pdi->pdc = &(dev_callbacks_list[uiDev]);
|
pdi->pdc = &(drivers_callbacks_list[uiDev]);
|
||||||
|
|
||||||
// Try to retrieve PN53x chip revision
|
// Try to retrieve PN53x chip revision
|
||||||
// We can not use pn53x_transceive() because abtRx[0] gives no status info
|
// We can not use pn53x_transceive() because abtRx[0] gives no status info
|
||||||
|
@ -339,7 +338,7 @@ dev_info* nfc_connect(nfc_device_desc_t* pndd)
|
||||||
|
|
||||||
return pdi;
|
return pdi;
|
||||||
} else {
|
} else {
|
||||||
DBG("No device found using driver: %s", dev_callbacks_list[uiDev].acDriver);
|
DBG("No device found using driver: %s", drivers_callbacks_list[uiDev].acDriver);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// To bad, no reader is ready to be claimed
|
// To bad, no reader is ready to be claimed
|
|
@ -44,7 +44,7 @@ typedef enum {
|
||||||
CT_PN533 = 0x30,
|
CT_PN533 = 0x30,
|
||||||
} chip_type;
|
} chip_type;
|
||||||
|
|
||||||
struct dev_callbacks; // Prototype the callback struct
|
struct driver_callbacks; // Prototype the callback struct
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @struct dev_info
|
* @struct dev_info
|
||||||
|
@ -52,7 +52,7 @@ struct dev_callbacks; // Prototype the callback struct
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/** Callback functions for handling device specific wrapping */
|
/** Callback functions for handling device specific wrapping */
|
||||||
const struct dev_callbacks* pdc;
|
const struct driver_callbacks* pdc;
|
||||||
/** Device name string, including device wrapper firmware */
|
/** Device name string, including device wrapper firmware */
|
||||||
char acName[DEVICE_NAME_LENGTH];
|
char acName[DEVICE_NAME_LENGTH];
|
||||||
/** PN53X chip type, this is useful for some "bug" work-arounds */
|
/** PN53X chip type, this is useful for some "bug" work-arounds */
|
||||||
|
@ -87,10 +87,10 @@ typedef struct {
|
||||||
} nfc_device_desc_t;
|
} nfc_device_desc_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @struct dev_callbacks
|
* @struct driver_callbacks
|
||||||
* @brief NFC defice callbacks
|
* @brief NFC defice callbacks
|
||||||
*/
|
*/
|
||||||
struct dev_callbacks {
|
struct driver_callbacks {
|
||||||
/** Driver name */
|
/** Driver name */
|
||||||
const char* acDriver;
|
const char* acDriver;
|
||||||
/** Connect callback */
|
/** Connect callback */
|
Loading…
Reference in a new issue