File: NEWS.md

package info (click to toggle)
libnfc 1.8.0-3.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,864 kB
  • sloc: ansic: 18,590; makefile: 406; sh: 211
file content (394 lines) | stat: -rw-r--r-- 16,015 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
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
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
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
270
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
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
New in 1.8.0:

API Changes:
 - Restore nfc_modulation_type enum order to keep compatibility with libnfc 1.7.1
 - Bump library version to 6.0.0

New in 1.7.2:

Drivers:

  * New driver for pn71xx NXP's NFC Controllers through Linux Libnfc-nci (untested)
  * New driver for contactless PC/SC readers (only as initiator)

API Changes:

  * nfc_device_get_supported_baud_rate() now takes also "mode" as argument
  * New nfc_device_get_supported_baud_rate_target_mode()
  * New NFC modulation type NMT_BARCODE and nfc_barcode_info struct to support Thinfilm NFC Barcode protocol
  * New NFC modulation type NMT_ISO14443BICLASS and NMT_ISO14443BICLASS struct to support HID iClass (Picopass)
  * pn53x_transceive() is now part of public API

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

New in 1.7.0:

Drivers:

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

API Changes:

  * New function iso14443b_crc_append()

New in 1.7.0-rc7:

Drivers:

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

API Changes:

  * Functions
    - nfc_initiator_target_is_present() & str_nfc_target():
      now take a pointer to nfc_target as argument
    - nfc_init(): upon malloc error, doesn't force exit() anymore
      so now you should test if context != NULL after nfc_init() call

New in 1.7.0-rc5:

API Changes:

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

New in 1.7.0-rc3:

API Changes:

  * Functions
    - Add timeout param to nfc_emulate_target()

New in 1.7.0-rc2:

Configuration:
  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:
    - "allow_autoscan" to enable/disable device auto-detection feature;
    - "allow_intrusive_scan" to enable/disable intrusive auto-detection
      (ie. serial port probing);
    - "log_level" to select library verbosity;
    - "device.name" and "device.connstring" to define a user device,
      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
  put them into device search directory (/etc/nfc/devices.d under GNU/Linux).
  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)

API Changes:

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

  * Functions
    - 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.
    - New enum-to-string converter functions str_nfc_modulation_type() and
      str_nfc_baud_rate()
    - New str_nfc_target() to convert nfc_target struct into allocated string
    - New nfc_device_get_information_about() function to retreive some device's
      information
    - No more in/out function parameter: nfc_initiator_transceive_*() now
      take a constant size for Rx buffer
    - New nfc_initiator_target_is_present() to test is the previously selected
      target is available in the field
    - nfc_initiator_transceive_bytes() returns NFC_EMFCAUTHFAIL when AUTH
      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)

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.

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

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)



New in 1.4.1:

API Changes

  * Types
    - 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)



New in 1.4.0:

API Changes

  * Types
    - New nfc_device_option value (enum): NDO_FORCE_ISO14443_A to force the
      chip to switch in ISO14443-A
    - 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
    - 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
    - append_iso14443a_crc() was renamed to iso14443a_crc_append()
    - 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)