
Кроссплатформенная библиотека Near Field Communication (NFC)
*-
libnfc — это библиотека, которая предоставляет пользовательским приложениям доступ к NFC-устройствам.
Официальный веб-сайт больше не существует; просмотреть его копию можно через WayBackMachine.
Официальный форум больше не существует; просмотреть его копию можно через WayBackMachine.
Официальный сайт разработки: https://github.com/nfc-tools/libnfc
Важное примечание: данный файл описывает POSIX-системы; для Windows, пожалуйста, прочитайте README-Windows.md
Некоторые NFC-драйверы зависят от стороннего программного обеспечения:
pn53x_usb & acr122_usb:
acr122_pcsc:
pcsc:
Набор регрессионных тестов зависит от фреймворка cutter: http://cutter.sf.net
Примечание: если вы работаете напрямую с git-клона репозитория, некоторые файлы необходимо сгенерировать в первую очередь. Для этого выполните
autoreconf -vis
В качестве альтернативы используйте .tar.bz2-версию готового релиза (которая уже содержит ./configure): https://github.com/nfc-tools/libnfc/releases/
Сборка должна быть такой же простой, как выполнение следующих команд:
./configure
make
Чтобы выполнить сборку с конкретным(и) драйвером(ами), обратитесь к параметру --with-drivers=..., описанному в ./configure --help.
make install
Возможно, вам потребуется предоставить вашему пользователю разрешения на управление вашим устройством. В системах GNU/Linux, если вы используете udev, вы можете воспользоваться предоставленными правилами udev. например, в Debian, Ubuntu и т. д.
sudo cp contrib/udev/93-pn53x.rules /lib/udev/rules.d/
В FreeBSD, если вы используете devd, также имеется файл правил: contrib/devd/pn53x.conf.
Чтобы изменить поведение библиотеки по умолчанию, libnfc использует файл конфигурации, расположенный в sysconfdir (как указано в ./configure).
Пример файла с комментариями доступен в исходниках: libnfc.conf.sample
Если вы выполнили сборку, используя:
./configure --prefix=/usr --sysconfdir=/etc
вы можете создать каталог конфигурации и скопировать пример файла:
sudo mkdir /etc/nfc
sudo cp libnfc.conf.sample /etc/nfc/libnfc.conf
Чтобы настроить несколько устройств, вы можете либо изменить libnfc.conf, либо создать файл для каждого устройства в каталоге nfc/devices.d:
sudo mkdir -p /etc/nfc/devices.d
printf 'name = "My first device"\nconnstring = "pn532_uart:/dev/ttyACM0"\n' | sudo tee /etc/nfc/devices.d/first.conf
printf 'name = "My second device"\nconnstring = "pn532_uart:/dev/ttyACM1"\n' | sudo tee /etc/nfc/devices.d/second.conf
Вы можете переопределить некоторые параметры конфигурации во время выполнения с помощью следующих переменных окружения:
LIBNFC_DEFAULT_DEVICE=<connstring>: LIBNFC_DEFAULT_DEVICE=pn532_uart:/dev/ttyACM0 будет использовать pn532 на /dev/ttyACM0 в качестве устройства по умолчаниюLIBNFC_DEVICE=<connstring> проигнорирует все устройства в файлах конфигурации и будет использовать только то, которое определено в переменнойLIBNFC_AUTO_SCAN=<true|false> переопределяет параметр allow_autoscan в файле конфигурацииLIBNFC_INTRUSIVE_SCAN=<true|false> переопределяет параметр allow_intrusive_scan в файле конфигурацииLIBNFC_LOG_LEVEL=<0|1|2|3> переопределяет параметр log_level в файле конфигурацииЧтобы получить connstring распознанного устройства, можно использовать nfc-scan-device: LIBNFC_AUTO_SCAN=true nfc-scan-device покажет имена и connstrings всех найденных устройств.
Чтобы сообщить об ошибке, посетите https://github.com/nfc-tools/libnfc/issues и заполните форму отчёта об ошибке.
Если у вас есть вопросы или замечания, мы приглашаем вас опубликовать их в сообществе разработчиков: http://www.libnfc.org/community
Пожалуйста, обязательно укажите:
Версию libnfc
Информацию о вашей системе. Например:
И всё остальное, что вы считаете важным.
Трассировку с включённой отладкой.
Воспроизведите ошибку с включённой отладкой, например, если команда была:
$ nfc-list -v
выполните её так:
$ LIBNFC_LOG_LEVEL=3 nfc-list -v
Как воспроизвести ошибку.
Пожалуйста, приложите короткую тестовую программу, демонстрирующую это поведение.
В крайнем случае вы также можете указать ссылку на более крупный программный продукт,
который можно загрузить.
Если ошибка приводила к аварийному завершению — точный текст, который был выведен
при возникновении сбоя.
Дополнительная информация, такая как трассировки стека, может быть полезна, но
не обязательна.
Патчи можно отправлять на https://github.com/nfc-tools/libnfc/issues
Если патч исправляет ошибку, обычно рекомендуется включить всю информацию, описанную в разделе «Как сообщать об ошибках».
Если ваше устройство Touchatag или ACR122 не обнаруживается библиотекой libnfc, убедитесь, что демон PCSC-lite (pcscd) установлен и запущен.
Если ваше устройство Touchatag или ACR122 не обнаруживается демоном PCSC-lite (pcsc_scan ничего не видит), попробуйте отключить определение неподдерживаемых прошивок в libccid: отредактируйте файл конфигурации libccid_Info.plist (обычно /etc/libccid_Info.plist), найдите <key>ifdDriverOptions</key>, измените значение <string>0x0000</string> на 0x0004, чтобы разрешить неподдерживаемые (bogus) устройства, и перезапустите демон pcscd.
Использование устройства ACR122 с libnfc без метки (например, для режимов NFCIP или эмуляции карты) требует ещё одной настройки PCSC-lite: необходимо разрешить использование команды CCID Exchange. Для этого отредактируйте файл конфигурации libccid_Info.plist (обычно /etc/libccid_Info.plist), найдите <key>ifdDriverOptions</key>, измените значение <string>0x0000</string> на 0x0001, чтобы разрешить CCID exchange, или на 0x0005, чтобы разрешить CCID exchange и неподдерживаемые устройства (см. предыдущее замечание), и перезапустите демон pcscd.
Предупреждение: если вы используете драйверы ACS CCID (acsccid), файл конфигурации находится, как правило, здесь: /usr/lib/pcsc/drivers/ifd-acsccid.bundle/Contents/Info.plist
Libnfc нельзя использовать одновременно с проприетарным драйвером PCSC для SCL3711. Возможны два решения:
Начиная с версии ядра Linux 3.1, для использования libnfc не должны загружаться некоторые модули ядра: «nfc», «pn533» и «pn533_usb». Чтобы ядро не загружало эти модули автоматически, вы можете добавить их в чёрный список в файле конфигурации modprobe. Этот файл поставляется в архиве libnfc:
sudo cp contrib/linux/blacklist-libnfc.conf /etc/modprobe.d/blacklist-libnfc.conf
Libnfc может работать с проприетарным драйвером PCSC для bR500 и R502, который уже доступен в большинстве дистрибутивов Linux.
Чтобы активировать поддержку PCSC: ./configure --with-drivers=pcsc.
Считыватели, с которыми гарантированно работает:
Эти считыватели поддерживаются CCID начиная с версии 1.4.25; убедитесь, что версия вашего драйвера CCID не ниже 1.4.25.
В macOS вы можете проверить версию CCID следующей командой и, при необходимости, установить последнюю версию драйвера CCID со страницы https://github.com/martinpaljak/osx-ccid-installer/releases
grep -A 1 CFBundleShortVersionString /usr/local/libexec/SmartCardServices/drivers/ifd-ccid.bundle/Contents/Info.plist
В Linux вы можете проверить версию CCID следующей командой и, при необходимости, установить последнюю версию драйвера CCID со страницы https://ccid.apdu.fr/
grep -A 1 CFBundleShortVersionString /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist
FeliCa — зарегистрированный товарный знак Sony Corporation. MIFARE — товарный знак NXP Semiconductors. Jewel Topaz — товарный знак Innovision Research & Technology. Все остальные товарные знаки являются собственностью их соответствующих владельцев.