diff --git a/NEWS b/NEWS index 030a9ca..35ae8d1 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,12 @@ API Changes: * Types - New NFC_ESOFT error to handle software errors (allocations, pie creation, etc.) + * Functions + - New enum-to-string converter functions str_nfc_modulation_type() and + str_nfc_baud_rate() + - New nfc_device_get_information_about() function to retreive some device's + information + New in 1.6.0-rc1: API Changes: diff --git a/include/nfc/nfc.h b/include/nfc/nfc.h index d00bf95..75dbc3c 100644 --- a/include/nfc/nfc.h +++ b/include/nfc/nfc.h @@ -114,7 +114,14 @@ extern "C" { NFC_EXPORT void iso14443a_crc (uint8_t *pbtData, size_t szLen, uint8_t *pbtCrc); NFC_EXPORT void iso14443a_crc_append (uint8_t *pbtData, size_t szLen); NFC_EXPORT uint8_t *iso14443a_locate_historical_bytes (uint8_t *pbtAts, size_t szAts, size_t *pszTk); + NFC_EXPORT const char *nfc_version (void); + NFC_EXPORT int nfc_device_get_information_about (nfc_device *pnd, char *buf, size_t buflen); + +/* String converter functions */ + NFC_EXPORT const char * str_nfc_modulation_type (const nfc_modulation_type nmt); + NFC_EXPORT const char * str_nfc_baud_rate (const nfc_baud_rate nbr); + /* Error codes */ /** @ingroup error diff --git a/libnfc/Makefile.am b/libnfc/Makefile.am index fe373e7..56c32de 100644 --- a/libnfc/Makefile.am +++ b/libnfc/Makefile.am @@ -18,7 +18,7 @@ libnfc_la_SOURCES = \ nfc-emulation.c \ nfc-internal.c -libnfc_la_LDFLAGS = -no-undefined -version-info 3:0:0 -export-symbols-regex '^nfc_|^iso14443a_|pn53x_transceive|pn53x_SAMConfiguration' +libnfc_la_LDFLAGS = -no-undefined -version-info 3:0:0 -export-symbols-regex '^nfc_|^iso14443a_|^str_nfc_|pn53x_transceive|pn53x_SAMConfiguration' libnfc_la_CFLAGS = @DRIVERS_CFLAGS@ libnfc_la_LIBADD = \ $(top_builddir)/libnfc/chips/libnfcchips.la \ diff --git a/libnfc/chips/pn53x.c b/libnfc/chips/pn53x.c index fd17f67..9a78249 100644 --- a/libnfc/chips/pn53x.c +++ b/libnfc/chips/pn53x.c @@ -68,8 +68,7 @@ pn53x_init(struct nfc_device *pnd) { int res = 0; // GetFirmwareVersion command is used to set PN53x chips type (PN531, PN532 or PN533) - char abtFirmwareText[22]; - if ((res = pn53x_get_firmware_version (pnd, abtFirmwareText)) < 0) { + if ((res = pn53x_decode_firmware_version (pnd)) < 0) { return res; } @@ -113,12 +112,6 @@ pn53x_init(struct nfc_device *pnd) if ((res = pn53x_reset_settings(pnd)) < 0) { return res; } - - // Add the firmware revision to the device name - char *pcName; - pcName = strdup (pnd->name); - snprintf (pnd->name, DEVICE_NAME_LENGTH - 1, "%s - %s", pcName, abtFirmwareText); - free (pcName); return NFC_SUCCESS; } @@ -690,7 +683,7 @@ pn53x_writeback_register (struct nfc_device *pnd) } int -pn53x_get_firmware_version (struct nfc_device *pnd, char abtFirmwareText[22]) +pn53x_decode_firmware_version (struct nfc_device *pnd) { const uint8_t abtCmd[] = { GetFirmwareVersion }; uint8_t abtFw[4]; @@ -723,16 +716,16 @@ pn53x_get_firmware_version (struct nfc_device *pnd, char abtFirmwareText[22]) // Convert firmware info in text, PN531 gives 2 bytes info, but PN532 and PN533 gives 4 switch (CHIP_DATA(pnd)->type) { case PN531: - snprintf (abtFirmwareText, 22, "PN531 v%d.%d", abtFw[0], abtFw[1]); + snprintf (CHIP_DATA(pnd)->firmware_text, sizeof(CHIP_DATA(pnd)->firmware_text), "PN531 v%d.%d", abtFw[0], abtFw[1]); pnd->btSupportByte = SUPPORT_ISO14443A | SUPPORT_ISO18092; break; case PN532: - snprintf (abtFirmwareText, 22, "PN532 v%d.%d (0x%02x)", abtFw[1], abtFw[2], abtFw[3]); + snprintf (CHIP_DATA(pnd)->firmware_text, sizeof(CHIP_DATA(pnd)->firmware_text), "PN532 v%d.%d", abtFw[1], abtFw[2]); pnd->btSupportByte = abtFw[3]; break; case PN533: case RCS360: - snprintf (abtFirmwareText, 22, "PN533 v%d.%d (0x%02x)", abtFw[1], abtFw[2], abtFw[3]); + snprintf (CHIP_DATA(pnd)->firmware_text, sizeof(CHIP_DATA(pnd)->firmware_text), "PN533 v%d.%d", abtFw[1], abtFw[2]); pnd->btSupportByte = abtFw[3]; break; case PN53X: @@ -2869,6 +2862,132 @@ pn53x_get_supported_baud_rate (nfc_device *pnd, const nfc_modulation_type nmt, c return NFC_SUCCESS; } +int +pn53x_get_information_about (nfc_device *pnd, char *buf, size_t buflen) +{ + int res; + if ((res = snprintf (buf, buflen, "chip: %s\n", CHIP_DATA(pnd)->firmware_text)) < 0) { + return NFC_ESOFT; + } + buf += res; + if (buflen <= (size_t)res) { + return NFC_EOVFLOW; + } + buflen -= res; + + if ((res = snprintf (buf, buflen, "initator mode modulations: ")) < 0) { + return NFC_ESOFT; + } + buf += res; + if (buflen <= (size_t)res) { + return NFC_EOVFLOW; + } + buflen -= res; + const nfc_modulation_type *nmt; + if ((res = nfc_device_get_supported_modulation(pnd, N_INITIATOR, &nmt)) < 0) { + return res; + } + + for (int i=0; nmt[i]; i++) { + if ((res = snprintf (buf, buflen, "%s%s (", (i==0)?"":", ", str_nfc_modulation_type (nmt[i]))) < 0) { + return NFC_ESOFT; + } + buf += res; + if (buflen <= (size_t)res) { + return NFC_EOVFLOW; + } + buflen -= res; + const nfc_baud_rate *nbr; + if ((res = nfc_device_get_supported_baud_rate (pnd, nmt[i], &nbr)) < 0) { + return res; + } + + for (int j=0; nbr[j]; j++) { + if ((res = snprintf (buf, buflen, "%s%s", (j==0)?"":", ", str_nfc_baud_rate (nbr[j]))) < 0) { + return NFC_ESOFT; + } + buf += res; + if (buflen <= (size_t)res) { + return NFC_EOVFLOW; + } + buflen -= res; + } + if ((res = snprintf (buf, buflen, ")")) < 0) { + return NFC_ESOFT; + } + buf += res; + if (buflen <= (size_t)res) { + return NFC_EOVFLOW; + } + buflen -= res; + + } + if ((res = snprintf (buf, buflen, "\n")) < 0) { + return NFC_ESOFT; + } + buf += res; + if (buflen <= (size_t)res) { + return NFC_EOVFLOW; + } + buflen -= res; + if ((res = snprintf (buf, buflen, "target mode modulations: ")) < 0) { + return NFC_ESOFT; + } + buf += res; + if (buflen <= (size_t)res) { + return NFC_EOVFLOW; + } + buflen -= res; + if ((res = nfc_device_get_supported_modulation(pnd, N_TARGET, &nmt)) < 0) { + return res; + } + + for (int i=0; nmt[i]; i++) { + if ((res = snprintf (buf, buflen, "%s%s (", (i==0)?"":", ", str_nfc_modulation_type (nmt[i]))) < 0) { + return NFC_ESOFT; + } + buf += res; + if (buflen <= (size_t)res) { + return NFC_EOVFLOW; + } + buflen -= res; + const nfc_baud_rate *nbr; + if ((res = nfc_device_get_supported_baud_rate (pnd, nmt[i], &nbr)) < 0) { + return res; + } + + for (int j=0; nbr[j]; j++) { + if ((res = snprintf (buf, buflen, "%s%s", (j==0)?"":", ", str_nfc_baud_rate (nbr[j]))) < 0) { + return NFC_ESOFT; + } + buf += res; + if (buflen <= (size_t)res) { + return NFC_EOVFLOW; + } + buflen -= res; + } + if ((res = snprintf (buf, buflen, ")")) < 0) { + return NFC_ESOFT; + } + buf += res; + if (buflen <= (size_t)res) { + return NFC_EOVFLOW; + } + buflen -= res; + + } + if ((res = snprintf (buf, buflen, "\n")) < 0) { + return NFC_ESOFT; + } + buf += res; + if (buflen <= (size_t)res) { + return NFC_EOVFLOW; + } + buflen -= res; + + return NFC_SUCCESS; +} + void pn53x_data_new (struct nfc_device *pnd, const struct pn53x_io *io) { diff --git a/libnfc/chips/pn53x.h b/libnfc/chips/pn53x.h index 065caba..35dc388 100644 --- a/libnfc/chips/pn53x.h +++ b/libnfc/chips/pn53x.h @@ -155,8 +155,10 @@ struct pn53x_io { * @brief PN53x data structure */ struct pn53x_data { -/** Chip type (PN531, PN532 or PN533)*/ +/** Chip type (PN531, PN532 or PN533) */ pn53x_type type; +/** Chip firmware text */ + char firmware_text[22]; /** Current power mode */ pn53x_power_mode power_mode; /** Current operating mode */ @@ -301,7 +303,7 @@ int pn53x_decode_target_data (const uint8_t *pbtRawData, size_t szRawData, nfc_target_info *pnti); int pn53x_read_register (struct nfc_device *pnd, uint16_t ui16Reg, uint8_t *ui8Value); int pn53x_write_register (struct nfc_device *pnd, uint16_t ui16Reg, uint8_t ui8SymbolMask, uint8_t ui8Value); -int pn53x_get_firmware_version (struct nfc_device *pnd, char abtFirmwareText[22]); +int pn53x_decode_firmware_version (struct nfc_device *pnd); int pn53x_set_property_int (struct nfc_device *pnd, const nfc_property property, const int value); int pn53x_set_property_bool (struct nfc_device *pnd, const nfc_property property, const bool bEnable); @@ -382,6 +384,7 @@ int pn53x_check_error_frame (struct nfc_device *pnd, const uint8_t *pbtRxFram int pn53x_build_frame (uint8_t *pbtFrame, size_t *pszFrame, const uint8_t *pbtData, const size_t szData); int pn53x_get_supported_modulation (nfc_device *pnd, const nfc_mode mode, const nfc_modulation_type **const supported_mt); int pn53x_get_supported_baud_rate (nfc_device *pnd, const nfc_modulation_type nmt, const nfc_baud_rate **const supported_br); +int pn53x_get_information_about (nfc_device *pnd, char *buf, size_t buflen); void pn53x_data_new (struct nfc_device *pnd, const struct pn53x_io *io); void pn53x_data_free (struct nfc_device *pnd); diff --git a/libnfc/drivers/acr122_pcsc.c b/libnfc/drivers/acr122_pcsc.c index 1729621..a64cb14 100644 --- a/libnfc/drivers/acr122_pcsc.c +++ b/libnfc/drivers/acr122_pcsc.c @@ -492,10 +492,11 @@ const struct nfc_driver acr122_pcsc_driver = { .target_send_bits = pn53x_target_send_bits, .target_receive_bits = pn53x_target_receive_bits, - .device_set_property_bool = pn53x_set_property_bool, - .device_set_property_int = pn53x_set_property_int, - .get_supported_modulation = pn53x_get_supported_modulation, - .get_supported_baud_rate = pn53x_get_supported_baud_rate, + .device_set_property_bool = pn53x_set_property_bool, + .device_set_property_int = pn53x_set_property_int, + .get_supported_modulation = pn53x_get_supported_modulation, + .get_supported_baud_rate = pn53x_get_supported_baud_rate, + .device_get_information_about = pn53x_get_information_about, .abort_command = NULL, // FIXME: abort is not supported in this driver .idle = NULL, // FIXME: idle is not supported in this driver diff --git a/libnfc/drivers/acr122_usb.c b/libnfc/drivers/acr122_usb.c index 7f1f60f..98d171b 100644 --- a/libnfc/drivers/acr122_usb.c +++ b/libnfc/drivers/acr122_usb.c @@ -766,8 +766,11 @@ const struct nfc_driver acr122_usb_driver = { .target_send_bits = pn53x_target_send_bits, .target_receive_bits = pn53x_target_receive_bits, - .device_set_property_bool = pn53x_set_property_bool, - .device_set_property_int = pn53x_set_property_int, + .device_set_property_bool = pn53x_set_property_bool, + .device_set_property_int = pn53x_set_property_int, + .get_supported_modulation = pn53x_get_supported_modulation, + .get_supported_baud_rate = pn53x_get_supported_baud_rate, + .device_get_information_about = pn53x_get_information_about, .abort_command = acr122_usb_abort_command, .idle = pn53x_idle, diff --git a/libnfc/drivers/acr122s.c b/libnfc/drivers/acr122s.c index 05eebf8..eaa7538 100644 --- a/libnfc/drivers/acr122s.c +++ b/libnfc/drivers/acr122s.c @@ -744,10 +744,11 @@ const struct nfc_driver acr122s_driver = { .target_send_bits = pn53x_target_send_bits, .target_receive_bits = pn53x_target_receive_bits, - .device_set_property_bool = pn53x_set_property_bool, - .device_set_property_int = pn53x_set_property_int, - .get_supported_modulation = pn53x_get_supported_modulation, - .get_supported_baud_rate = pn53x_get_supported_baud_rate, + .device_set_property_bool = pn53x_set_property_bool, + .device_set_property_int = pn53x_set_property_int, + .get_supported_modulation = pn53x_get_supported_modulation, + .get_supported_baud_rate = pn53x_get_supported_baud_rate, + .device_get_information_about = pn53x_get_information_about, .abort_command = acr122s_abort_command, .idle = NULL, diff --git a/libnfc/drivers/arygon.c b/libnfc/drivers/arygon.c index 8716b79..c4ef881 100644 --- a/libnfc/drivers/arygon.c +++ b/libnfc/drivers/arygon.c @@ -586,10 +586,11 @@ const struct nfc_driver arygon_driver = { .target_send_bits = pn53x_target_send_bits, .target_receive_bits = pn53x_target_receive_bits, - .device_set_property_bool = pn53x_set_property_bool, - .device_set_property_int = pn53x_set_property_int, - .get_supported_modulation = pn53x_get_supported_modulation, - .get_supported_baud_rate = pn53x_get_supported_baud_rate, + .device_set_property_bool = pn53x_set_property_bool, + .device_set_property_int = pn53x_set_property_int, + .get_supported_modulation = pn53x_get_supported_modulation, + .get_supported_baud_rate = pn53x_get_supported_baud_rate, + .device_get_information_about = pn53x_get_information_about, .abort_command = arygon_abort_command, .idle = NULL, // FIXME arygon driver does not support idle() diff --git a/libnfc/drivers/pn532_uart.c b/libnfc/drivers/pn532_uart.c index b389917..b011236 100644 --- a/libnfc/drivers/pn532_uart.c +++ b/libnfc/drivers/pn532_uart.c @@ -528,10 +528,11 @@ const struct nfc_driver pn532_uart_driver = { .target_send_bits = pn53x_target_send_bits, .target_receive_bits = pn53x_target_receive_bits, - .device_set_property_bool = pn53x_set_property_bool, - .device_set_property_int = pn53x_set_property_int, - .get_supported_modulation = pn53x_get_supported_modulation, - .get_supported_baud_rate = pn53x_get_supported_baud_rate, + .device_set_property_bool = pn53x_set_property_bool, + .device_set_property_int = pn53x_set_property_int, + .get_supported_modulation = pn53x_get_supported_modulation, + .get_supported_baud_rate = pn53x_get_supported_baud_rate, + .device_get_information_about = pn53x_get_information_about, .abort_command = pn532_uart_abort_command, .idle = pn53x_idle, diff --git a/libnfc/drivers/pn53x_usb.c b/libnfc/drivers/pn53x_usb.c index 7c2cdb5..0c8a5bd 100644 --- a/libnfc/drivers/pn53x_usb.c +++ b/libnfc/drivers/pn53x_usb.c @@ -779,10 +779,11 @@ const struct nfc_driver pn53x_usb_driver = { .target_send_bits = pn53x_target_send_bits, .target_receive_bits = pn53x_target_receive_bits, - .device_set_property_bool = pn53x_usb_set_property_bool, - .device_set_property_int = pn53x_set_property_int, - .get_supported_modulation = pn53x_get_supported_modulation, - .get_supported_baud_rate = pn53x_get_supported_baud_rate, + .device_set_property_bool = pn53x_usb_set_property_bool, + .device_set_property_int = pn53x_set_property_int, + .get_supported_modulation = pn53x_get_supported_modulation, + .get_supported_baud_rate = pn53x_get_supported_baud_rate, + .device_get_information_about = pn53x_get_information_about, .abort_command = pn53x_usb_abort_command, .idle = pn53x_idle, diff --git a/libnfc/nfc-internal.h b/libnfc/nfc-internal.h index 6f1e579..1815902 100644 --- a/libnfc/nfc-internal.h +++ b/libnfc/nfc-internal.h @@ -160,6 +160,7 @@ struct nfc_driver { int (*device_set_property_int) (struct nfc_device *pnd, const nfc_property property, const int value); int (*get_supported_modulation) (struct nfc_device *pnd, const nfc_mode mode, const nfc_modulation_type **const supported_mt); int (*get_supported_baud_rate) (struct nfc_device *pnd, const nfc_modulation_type nmt, const nfc_baud_rate **const supported_br); + int (*device_get_information_about) (struct nfc_device *pnd, char *buf, size_t buflen); int (*abort_command) (struct nfc_device *pnd); int (*idle) (struct nfc_device *pnd); diff --git a/libnfc/nfc.c b/libnfc/nfc.c index 7709acf..7a6fa7c 100644 --- a/libnfc/nfc.c +++ b/libnfc/nfc.c @@ -1041,3 +1041,83 @@ nfc_version (void) return PACKAGE_VERSION; #endif // SVN_REVISION } + +/** @ingroup misc + * @brief Print information about NFC device + * @return Upon successful return, this function returns the number of characters printed (excluding the null byte used to end output to strings), otherwise returns libnfc's error code (negative value) + * @param pnd \a nfc_device struct pointer that represent currently used device + * @param buf string to print information + * @param buflen buf length + */ +int +nfc_device_get_information_about (nfc_device *pnd, char *buf, size_t buflen) +{ + HAL (device_get_information_about, pnd, buf, buflen); +} + +/** @ingroup string-converter + * @brief Convert \a nfc_baud_rate value to string + * @return Returns nfc baud rate + * @param \a nfc_baud_rate to convert +*/ +const char * +str_nfc_baud_rate (const nfc_baud_rate nbr) +{ + switch(nbr) { + case NBR_UNDEFINED: + return "undefined baud rate"; + break; + case NBR_106: + return "106 kbps"; + break; + case NBR_212: + return "212 kbps"; + break; + case NBR_424: + return "424 kbps"; + break; + case NBR_847: + return "847 kbps"; + break; + } + // Should never go there.. + return ""; +} + +/** @ingroup string-converter + * @brief Convert \a nfc_modulation_type value to string + * @return Returns nfc modulation type + * @param \a nfc_modulation_type to convert +*/ +const char * +str_nfc_modulation_type (const nfc_modulation_type nmt) +{ + switch(nmt) { + case NMT_ISO14443A: + return "ISO/IEC 14443A"; + break; + case NMT_ISO14443B: + return "ISO/IEC 14443-4B"; + break; + case NMT_ISO14443BI: + return "ISO/IEC 14443-4B'"; + break; + case NMT_ISO14443B2CT: + return "ISO/IEC 14443-2B ASK CTx"; + break; + case NMT_ISO14443B2SR: + return "ISO/IEC 14443-2B ST SRx"; + break; + case NMT_FELICA: + return "FeliCa"; + break; + case NMT_JEWEL: + return "Innovision Jewel"; + break; + case NMT_DEP: + return "D.E.P."; + break; + } + // Should never go there.. + return ""; +} diff --git a/utils/nfc-probe.c b/utils/nfc-probe.c index 650b573..956301c 100644 --- a/utils/nfc-probe.c +++ b/utils/nfc-probe.c @@ -3,6 +3,7 @@ * * Copyright (C) 2009, Roel Verdult * Copyright (C) 2010, Romuald Conty, Romain Tartière + * Copyright (C) 2011-2012, Romuald Conty * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -103,10 +104,16 @@ main (int argc, const char *argv[]) } printf ("%d NFC device(s) found:\n", (int)szDeviceFound); + char strinfo[1024]; for (i = 0; i < szDeviceFound; i++) { pnd = nfc_open (NULL, connstrings[i]); if (pnd != NULL) { printf ("- %s:\n %s\n", nfc_device_get_name (pnd), nfc_device_get_connstring (pnd)); + if (verbose) { + if (nfc_device_get_information_about (pnd, strinfo, sizeof(strinfo)) >= 0) { + printf ("%s", strinfo); + } + } nfc_close (pnd); } } diff --git a/utils/nfc-utils.c b/utils/nfc-utils.c index 19d4f83..25efd05 100644 --- a/utils/nfc-utils.c +++ b/utils/nfc-utils.c @@ -656,63 +656,33 @@ print_nfc_dep_info (const nfc_dep_info ndi, bool verbose) } } -const char * -str_nfc_baud_rate (const nfc_baud_rate nbr) -{ - switch(nbr) { - case NBR_UNDEFINED: - return "undefined baud rate"; - break; - case NBR_106: - return "106 kbps"; - break; - case NBR_212: - return "212 kbps"; - break; - case NBR_424: - return "424 kbps"; - break; - case NBR_847: - return "847 kbps"; - break; - } - return ""; -} - void print_nfc_target (const nfc_target nt, bool verbose) { + printf ("%s (%s%s) target:\n", str_nfc_modulation_type(nt.nm.nmt), str_nfc_baud_rate(nt.nm.nbr), (nt.nm.nmt!=NMT_DEP)?"":(nt.nti.ndi.ndm == NDM_ACTIVE)? "active mode" : "passive mode"); switch(nt.nm.nmt) { case NMT_ISO14443A: - printf ("ISO/IEC 14443A (%s) target:\n", str_nfc_baud_rate(nt.nm.nbr)); print_nfc_iso14443a_info (nt.nti.nai, verbose); break; case NMT_JEWEL: - printf ("Innovision Jewel (%s) target:\n", str_nfc_baud_rate(nt.nm.nbr)); print_nfc_jewel_info (nt.nti.nji, verbose); break; case NMT_FELICA: - printf ("FeliCa (%s) target:\n", str_nfc_baud_rate(nt.nm.nbr)); print_nfc_felica_info (nt.nti.nfi, verbose); break; case NMT_ISO14443B: - printf ("ISO/IEC 14443-4B (%s) target:\n", str_nfc_baud_rate(nt.nm.nbr)); print_nfc_iso14443b_info (nt.nti.nbi, verbose); break; case NMT_ISO14443BI: - printf ("ISO/IEC 14443-4B' (%s) target:\n", str_nfc_baud_rate(nt.nm.nbr)); print_nfc_iso14443bi_info (nt.nti.nii, verbose); break; case NMT_ISO14443B2SR: - printf ("ISO/IEC 14443-2B ST SRx (%s) target:\n", str_nfc_baud_rate(nt.nm.nbr)); print_nfc_iso14443b2sr_info (nt.nti.nsi, verbose); break; case NMT_ISO14443B2CT: - printf ("ISO/IEC 14443-2B ASK CTx (%s) target:\n", str_nfc_baud_rate(nt.nm.nbr)); print_nfc_iso14443b2ct_info (nt.nti.nci, verbose); break; case NMT_DEP: - printf ("D.E.P. (%s, %s) target:\n", str_nfc_baud_rate(nt.nm.nbr), (nt.nti.ndi.ndm == NDM_ACTIVE)? "active mode" : "passive mode"); print_nfc_dep_info (nt.nti.ndi, verbose); break; } diff --git a/utils/nfc-utils.h b/utils/nfc-utils.h index d039544..2a7f33c 100644 --- a/utils/nfc-utils.h +++ b/utils/nfc-utils.h @@ -101,7 +101,6 @@ void print_nfc_iso14443b2ct_info (const nfc_iso14443b2ct_info nci, bool verbo void print_nfc_felica_info (const nfc_felica_info nfi, bool verbose); void print_nfc_jewel_info (const nfc_jewel_info nji, bool verbose); void print_nfc_dep_info (const nfc_dep_info ndi, bool verbose); -const char * str_nfc_baud_rate (const nfc_baud_rate nbr); void print_nfc_target (const nfc_target nt, bool verbose);