Отключить pn53x_check_communication: сообщение об ошибке ввода / вывода
Я использую libnfc 1.7.1, скомпилированную с c, для чтения из ридера PN532 на Raspberry Pi. Цель состоит в том, чтобы создать узел для Node-RED, который вводит UID отсканированной карты или передает ошибки о библиотеке или считывателе. Я изменил пример, чтобы дать мне UID карты в качестве единственного нормального вывода. У меня не может быть напечатано ничего, кроме ошибки, когда библиотека не может быть загружена, ошибки, когда читатель не может быть подключен, или UID карты. Я изменил уровень журнала на 0 в /etc/nfc/libnfc.conf, но моя программа все еще печатает "pn53x_check_communication: Ошибка ввода-вывода" (нежелательная), а также "ОШИБКА: невозможно открыть устройство NFC". (хотел) Я не могу найти способ отключить сообщение об ошибке ввода / вывода. Я посмотрел в библиотеке и обнаружил, что это возвращает NFC_EIO, которая является ошибкой ввода-вывода, которую я получаю, но не могу найти нигде, что это фактически печатает это. Если не считать изменения библиотеки, я не могу найти способ отключить эту печать. Если ничего нельзя сделать, я могу запрограммировать свой узел на игнорирование этого вывода, но я бы предпочел его исключить. Мой код ниже:
#include <stdlib.h>
#include <nfc/nfc.h>
static void
print_long(const uint8_t *pbtData, const size_t szBytes)
{
size_t szPos;
for (szPos = 0; szPos < szBytes; szPos++) {
printf("%03lu", pbtData[szPos]);
}
printf("\n");
}
int
main(int argc, const char *argv[])
{
nfc_device *pnd;
nfc_target nt;
// Allocate only a pointer to nfc_context
nfc_context *context;
// Initialize libnfc and set the nfc_context
nfc_init(&context);
if (context == NULL) {
printf("Unable to init libnfc (malloc)\n");
exit(EXIT_FAILURE);
}
// Open, using the first available NFC device which can be in order of selection:
// - default device specified using environment variable or
// - first specified device in libnfc.conf (/etc/nfc) or
// - first specified device in device-configuration directory (/etc/nfc/devices.d) or
// - first auto-detected (if feature is not disabled in libnfc.conf) device
pnd = nfc_open(context, NULL);
//Send error
if (pnd == NULL) {
printf("ERROR: %s\n", "Unable to open NFC device.");
exit(EXIT_FAILURE);
}
// Set opened NFC device to initiator mode
if (nfc_initiator_init(pnd) < 0) {
nfc_perror(pnd, "nfc_initiator_init");
exit(EXIT_FAILURE);
}
while(true){
// Poll for a ISO14443A (MIFARE) tag
const nfc_modulation nmMifare = {
.nmt = NMT_ISO14443A,
.nbr = NBR_106,
};
//Print decimal version of UID and wait until it's removed to scan again
if (nfc_initiator_select_passive_target(pnd, nmMifare, NULL, 0, &nt) > 0) {
print_long(nt.nti.nai.abtUid, nt.nti.nai.szUidLen);
while (0 == nfc_initiator_target_is_present(pnd, NULL)) {}
}
}
}