Отключить 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)) {}
    }
  }
}

0 ответов

Другие вопросы по тегам