NEWS 14.9 KB
Newer Older
1 2 3 4 5 6 7
New in 1.7.1:

API Changes:

  * nfc_initiator_select_passive_target() provides defaults if pbtInitData=NULL
  * nfc_initiator_target_is_present() allow NULL pointer to tag

8 9 10 11 12 13
New in 1.7.0:

Drivers:

  * New PN532 over I2C driver, see contrib/libnfc/pn532_i2c_on_rpi.conf.sample

14 15 16 17
API Changes:

  * New function iso14443b_crc_append()

18
New in 1.7.0-rc7:
Philippe Teuwen's avatar
Philippe Teuwen committed
19

20 21 22 23
Drivers:

  * New PN532 over SPI driver, see contrib/libnfc/pn532_spi_on_rpi.conf.sample

Philippe Teuwen's avatar
Philippe Teuwen committed
24 25 26
API Changes:

  * Functions
27
    - nfc_initiator_target_is_present() & str_nfc_target():
Philippe Teuwen's avatar
Philippe Teuwen committed
28
      now take a pointer to nfc_target as argument
29 30
    - nfc_init(): upon malloc error, doesn't force exit() anymore
      so now you should test if context != NULL after nfc_init() call
Philippe Teuwen's avatar
Philippe Teuwen committed
31

32 33 34 35 36 37 38
New in 1.7.0-rc5:

API Changes:

  * Functions
    - New nfc_register_driver() function allowing to hook custom drivers.

39 40 41 42 43 44 45
New in 1.7.0-rc3:

API Changes:

  * Functions
    - Add timeout param to nfc_emulate_target()

46
New in 1.7.0-rc2:
47

48
Configuration:
Philippe Teuwen's avatar
Philippe Teuwen committed
49 50 51
  libnfc can now use a configuration file for special setups, or features
  activation. This file (/etc/nfc/libnfc.conf under GNU/Linux systems)
  supports already some keywords:
52
    - "allow_autoscan" to enable/disable device auto-detection feature;
53
    - "allow_intrusive_scan" to enable/disable intrusive auto-detection
54 55 56
      (ie. serial port probing);
    - "log_level" to select library verbosity;
    - "device.name" and "device.connstring" to define a user device,
Philippe Teuwen's avatar
Philippe Teuwen committed
57 58 59
      this is the recommended method if user has a not easily detectable
      device (ie. a serial one).
  It is also possible to define devices using dedicated configuration files and
60
  put them into device search directory (/etc/nfc/devices.d under GNU/Linux).
61 62 63 64 65 66
  Example for the OpenPCD2: create /etc/nfc/devices.d/openpcd2.conf with:
    name = "OpenPCD2"
    connstring = "pn532_uart:/dev/ttyACM0"
    optional = true
  The keyword "optional" does not mandate the device to be present always
  (it detects if the reader is indeed present before using it)
67

68 69 70
API Changes:

  * Types
71 72
    - New NFC_ESOFT error to handle software errors (allocations, pipe
      creation, etc.)
73

74
  * Functions
75 76 77
    - Remove nfc_get_default_device() function: the default device is now the
      first in nfc_list_devices() or could be open using NULL connstring with
      nfc_open() function.
78 79
    - New enum-to-string converter functions str_nfc_modulation_type() and
      str_nfc_baud_rate()
80
    - New str_nfc_target() to convert nfc_target struct into allocated string
81 82
    - New nfc_device_get_information_about() function to retreive some device's
      information
83
    - No more in/out function parameter: nfc_initiator_transceive_*() now
84
      take a constant size for Rx buffer
85 86
    - New nfc_initiator_target_is_present() to test is the previously selected
      target is available in the field
87
    - nfc_initiator_transceive_bytes() returns NFC_EMFCAUTHFAIL when AUTH
88 89 90
      command failed on a Mifare Classic
    - New nfc_initiator_init_secure_element() to initiate a connection with
      secure element (Only supported with a PN532 with SAM equipped)
91

Romuald Conty's avatar
Romuald Conty committed
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
New in 1.6.0-rc1:

API Changes:

  * Types
    - '_t' suffix removed from all types (e.g. nfc_device_t is now nfc_device)
    - All errors removed in flavour of NFC_EIO, NFC_EINVARG, NFC_EDEVNOTSUPP,
      NFC_ENOTSUCHDEV, NFC_EOVFLOW, NFC_ETIMEOUT, NFC_EOPABORTED, NFC_ENOTIMPL,
      NFC_ETGRELEASED, NFC_ERFTRANS, NFC_ECHIP and NFC_SUCCESS
    - nfc_device_desc_t replaced by nfc_connstring: libnfc now uses connection
      strings to describe a device
    - byte_t typedef removed, libnfc now uses uint8_t from C99
    - nfc_device is now an opaque type
    - nfc_properties replaces nfc_options

  * Functions
    - New nfc_get_default_device() function that allows to grab the connstring
      stored in LIBNFC_DEFAULT_DEVICE environnement variable or returns the
      first available device if not set
    - New nfc_device_get_connstring() accessor function to know the device
      connstring
    - New nfc_device_set_property_bool() function that replace nfc_configure()
    - New nfc_device_set_property_int() function to set integer property
    - nfc_device_name() renamed to nfc_device_get_name() for the sake of
      consistency
    - New nfc_device_get_last_error() function, an accessor to last error occured
    - Whole libnfc's functions now return 0 (NFC_SUCCESS) or positive value if
      appropriated on success and libnfc's error code on failure
    - nfc_connect(), nfc_disconnect() renamed to nfc_open(), nfc_close()
      respectively
    - Add 2 new functions: initialization and deinitialization functions:
      nfc_init() and nfc_exit()
    - New nfc_device_get_supported_modulation() and
      nfc_device_get_supported_baud_rate() functions

  * Dependencies
    - log4c is not anymore used for debugging facility. It was a bad choice,
      sorry for inconvenience.

131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
New in 1.5.1:

API Changes

  * Types
    - Communication-level errors DEIO and DETIMEOUT are now know as ECOMIO,
      ECOMTIMEOUT respectively
    - Common device-level errors DEINVAL and DEABORT are now know as EINVALARG,
      EOPABORT respectively
    - New errors:  EFRAACKMISMATCH, EFRAISERRFRAME, EDEVNOTSUP and ENOTIMPL

  * Functions
    - nfc_abort_command() returns a boolean
    - timeout (struct timeval) pointer added to
      nfc_initiator_transceive_bytes(), nfc_target_send_bytes() and
      nfc_target_receive_bytes()
    - timed functions nfc_initiator_transceive_bytes_timed() and
      nfc_initiator_transceive_bits_timed() now takes uint32_t as cycles
      pointer
    - nfc_initiator_poll_targets() renamed to nfc_initiator_poll_target() and
      only return one target

Romuald Conty's avatar
Romuald Conty committed
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202
New in 1.5.0:

Installed files
  - nfc-message.h have been removed, internal macros are not part of API.
  - New nfc-emulation.h file offers a middle level API to handle emulation (see
    nfc-emulate-forum-tag4 example)

API Changes

  * Types
    - New error: DEABORT raised when operation is aborted by user (using
      nfc_abort_command())
    - nfc_chip_t type removed from public API (have been renamed to pn53x_type
      in chips/pn53x)
    - nfc_device_spec_t removed, each driver can use his own way to keep a
      connection pointer

  * Structures
    - nfc_device_t now have a nfc_driver_t struct pointer (named .driver) and
      void pointer (.driver_data) to handle device specific wrapping
    - nfc_device_t now have a void pointer (.chip_data) to keep some chip
      specific data
    - nfc_device_t now have an file descriptor array to manage to abort request
    - nfc_device_t does have .nc member (nfc_chip_t) anymore (different chips
      handling in now in chip level)
    - nfc_device_t does have .nds member (nfc_device_spec_t) anymore, each
      driver handle its communication using driver_data pointer
    - nfc_device_t does have .bActive member (bool) anymore, this variable was
      almost not used and was not efficient
    - nfc_device_t does have chip's register caches anymore, this is handle in
      chip level (using chip_data pointer)
    - driver_callbacks structure have been removed from public API
    - New nfc_emulator structure used by the new emulation API (see
      nfc_emulate_target())
    - New nfc_emulation_state_machine structure used by the new emulation API,
      it handles an I/O function and data pointer to create a software based
      state-machine.

  * Functions
    - New nfc_abort_command() function to abort current running command.
    - New nfc_initiator_transceive_bits_timed() and
      nfc_initiator_transceive_bytes_timed() to transceive bits/bytes and
      measure the time to have a reply
    - New nfc_emulate_target() function to start a target emulation using an
      nfc_emulator structure (it contains a custom state-machine
      (nfc_emulation_state_machine struct) and a custom target (nfc_target_t)
      (see nfc-emulate-forum-tag4 to have a look on how-to use it)



Romuald Conty's avatar
Romuald Conty committed
203 204 205 206 207
New in 1.4.1:

API Changes

  * Types
Romuald Conty's avatar
Romuald Conty committed
208 209
    - New error: ETGUIDNOTSUP raised when UID is not 4 bytes long or does not
      start with 0x08 (Security restriction present in the NXP PN53x chips)
Romuald Conty's avatar
Romuald Conty committed
210 211 212



213 214 215 216
New in 1.4.0:

API Changes

217
  * Types
218 219
    - New nfc_device_option value (enum): NDO_FORCE_ISO14443_A to force the
      chip to switch in ISO14443-A
220 221 222 223 224 225
    - New nfc_dep_mode_t (enum) for DEP mode:
        NDM_UNDEFINED, NDM_PASSIVE, NDM_ACTIVE
    - New nfc_modulation_type_t (enum) that lists modulation types:
        NMT_ISO14443A, NMT_ISO14443B, NMT_FELICA, NMT_JEWEL, NMT_DEP
    - New nfc_baud_rate_t (enum): list of baud rates:
        NBR_UNDEFINED, NBR_106, NBR_212, NBR_424, NBR_847
226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269
    - nfc_target_type_t have been removed from API (use nfc_modulation_t
      instead)

  * Structures
    - nfc_device_t now have a boolean bAutoIso14443_4 to keep the locally the
      state of NDO_AUTO_ISO14443_4 (should not be directly set, use
      nfc_configure() with NDO_AUTO_ISO14443_4)
    - nfc_device_t now have an uint8_t ui8Parameters to cache PN53x parameters
    - nfc_device_t now have a byte_t btSupportByte to cache supported
      modulations
    - nfc_dep_info_t have completely changed, please see API documentation
    - nfc_iso14443b_info_t have completely changed, please see API
      documentation
    - nfc_modulation_t have completely changed: it now contains a
      nfc_modulation_type_t and nfc_baud_rate_t couple. Initialization example:
        nfc_modulation_t nm = {
          .nmt = NMT_ISO14443A,
          .nbr = NBR_106,
        };
    - nfc_target_t now contains new nfc_modulation_t instead of
      nfc_target_type_t. Initialization example:
        nfc_target_t nt = {
          .nm.nmt = NMT_ISO14443A,
          .nm.nbr = NBR_UNDEFINED,
          .nti.nai.abtAtqa = { 0x03, 0x44 },
          .nti.nai.abtUid = { 0x08, 0xab, 0xcd, 0xef },
          .nti.nai.btSak = 0x20,
          .nti.nai.szUidLen = 4,
          .nti.nai.abtAts = { 0x75, 0x77, 0x81, 0x02, 0x80 },
          .nti.nai.szAtsLen = 5,
        };

  * Functions
    - nfc_initiator_select_passive_target() now use new nfc_modulation_t and
      nfc_target_t instead of nfc_target_info_t
    - nfc_initiator_list_passive_targets() now use new nfc_modulation_t and
      nfc_target_t instead of nfc_target_info_t
    - nfc_initiator_poll_targets() use new nfc_modulation_t instead of
      nfc_target_type_t
    - nfc_initiator_select_dep_target() completely changed, use now
      nfc_dep_mode_t, nfc_baudrate_t, nfc_dep_info_t and nfc_target_t, please
      see API documentation
    - nfc_target_init() have an additional argument: nfc_target_t to describe
      the wanted target
270
    - append_iso14443a_crc() was renamed to iso14443a_crc_append()
271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373
    - New iso14443a_locate_historical_bytes() to locate historical bytes in ATS



New in 1.3.9 (since 1.3.4):

Installed files

  - mifaretag.h and mifareultag.h are removed, Mifare features are not a part
    of libnfc API anymore (these features are always available in examples/)

API Changes

  * Types  
    - New nfc_device_option_t value (enum): NDO_AUTO_14443_4, an option to
      enable/disable auto-switching to ISO/IEC 14443-4 if device is compliliant
    - New nfc_device_option_t value (enum): NDO_EASY_FRAMING, an option to
      enable/disable automatic frames encapsulation and chaining
    - New nfc_target_type_t (enum), with values like NTT_MIFARE,
      NTT_ISO14443B_106, NTT_DEP_ACTIVE_424, etc.
    - Mifare related types have been removed from API: mifare_cmd,
      mifare_param_auth, mifare_param_data, mifare_param_value, mifare_param

  * Structures
    - nfc_device_t now have boolean bEasyFraming to enable/disable "easy
      framing" feature (should not be directly set, use nfc_configure() with
      NDO_EASY_FRAMING)
    - nfc_device_t now have integer iLastError to handle last error
    - New chip_callbacks to handle error lookup per chip
    - driver_callbacks now have a pointer to chip_callbacks
    - New nfc_target_t that contains nfc_target_info_t and nfc_target_type_t

  * Functions
    - nfc_initiator_select_tag() became nfc_initiator_select_passive_target()
    - New nfc_initiator_list_passive_targets() returns a list of detected
      target on desired modulation
    - (experimental) New nfc_initiator_poll_targets() returns targets that are
      detected during hardware polling (available only with PN532)
    - nfc_initiator_transceive_dep_bytes(), nfc_target_receive_dep_bytes() and
      nfc_target_send_dep_bytes() have been removed from API, use
      NDO_EASY_FRAMING option to switch from raw mode to "easy framing"
    - nfc_initiator_mifare_cmd() have been removed: no more Mifare related
      stuff in libnfc's API
    - New nfc_strerror(), nfc_strerror_r() and nfc_perror() to report errors
    - New append_iso14443a_crc() to append iso14443a_crc() to a string


New in 1.3.4 (since 1.2.1):

Installed files

  - Headers are now installed in include/nfc instead of include/libnfc
  - libnfc.h have been renamed to nfc.h
  - defines.h and types.h have been merge into nfc-types.h
  - bitutils.h is not installed anymore, some functions are now in
    examples/nfc-utils.c
  - devices.h, dev_acr122.h, dev_arygon.h, dev_pn531.h, dev_pn533.h and rs232.h
    are not installed anymore
  - New header mifareultag.h, like mifaretag.h for Mifare UltraLight
  - New header nfc-messages.h with messages macros (DBG, ERR, INFO)

API Changes

  * Types
    - uint32_t which was used as size now are size_t
    - chip_type became nfc_chip_t (enum)
    - init_modulation became nfc_modulation_t (enum), and now have
      NM_ACTIVE_DEP and NM_PASSIVE_DEP modulation values added

  * Structures
    - dev_info became nfc_device_t
    - dev_config_option became nfc_device_option_t
    - New nfc_device_desc_t to describe the way to access to a NFC device.
      Initialisation example: 
        nfc_device_desc_t ndd = {
          ndd.pcDriver = "ARYGON";
          ndd.pcPort = "/dev/ttyUSB0";
          ndd.uiSpeed = 115200;
        };
    - dev_callbacks became driver_callbacks and now have two function pointers
      more: pick_device() and list_devices()
    - New nfc_dep_info_t to handle DEP targets info
    - tag_info_iso14443a became nfc_iso14443a_info_t
    - tag_info_iso14443b became nfc_iso14443b_info_t
    - tag_info_felica became nfc_felica_info_t
    - tag_info_jewel became nfc_jewel_info_t
    - tag_info became nfc_target_info_t, and now have extended union to
      nfc_dep_info_t

  * Functions
    - nfc_connect() now takes 1 nfc_devive_desc_t argument (can be NULL)
    - New nfc_list_devices(), it find available NFC devices using all know
      drivers
    - (experimental) New nfc_initiator_select_dep(), it looks for DEP targets
    - (experimental) New nfc_initiator_transceive_dep_bytes(), like
      nfc_initiator_transceive_bytes() for DEP targets
    - (experimental) New nfc_target_receive_dep_bytes() and
      nfc_target_send_dep_bytes(), to receive/send bytes to DEP target
      (configured as initiator) while local NFC device is configured as target
    - New nfc_device_name() returns the device's name
    - New iso14443a_crc() computes CRC as described in ISO/IEC 14443
    - New nfc_version() returns the actual version of libnfc (with SVN
      revision, if available)