コード例 #1
0
ファイル: pn532.c プロジェクト: CNCBASHER/LPC1114CodeBase
pn532_error_t pn532Write(byte_t * abtCommand, size_t szLen)
{
  if (!pcb.initialised) pn532Init();

  // Try to wake the device up if it's in sleep mode
  if (pcb.state == PN532_STATE_SLEEP)
  {
    pn532_error_t wakeupError = pn532_bus_Wakeup();
    if (wakeupError)
      return wakeupError;
  }

  // Send the command if the device is in an appropriate state
  if (pcb.state == PN532_STATE_READY)
  {
    return pn532_bus_SendCommand(abtCommand, szLen);
  }
  else
  {
    #ifdef PN532_DEBUGMODE
    PN532_DEBUG("Init Failed%s", CFG_PRINTF_NEWLINE);
    #endif
    return PN532_ERROR_UNABLETOINIT;
  }
}
コード例 #2
0
ファイル: pn532.c プロジェクト: CNCBASHER/LPC1114CodeBase
pn532_error_t pn532Read(byte_t * pbtResponse, size_t * pszLen)
{
  if (!pcb.initialised) pn532Init();  

  // Try to wake the device up if it's in sleep mode
  if (pcb.state == PN532_STATE_SLEEP)
  {
    pn532_error_t wakeupError = pn532_bus_Wakeup();
    if (wakeupError)
      return wakeupError;
  }

  // Read the response if the device is in an appropriate state
  if (pcb.state == PN532_STATE_READY)
  {
    return pn532_bus_ReadResponse(pbtResponse, pszLen);
  }
  else
  {
    #ifdef PN532_DEBUGMODE
    PN532_DEBUG("Init Failed%s", CFG_PRINTF_NEWLINE);
    #endif
    return PN532_ERROR_UNABLETOINIT;
  }
}
コード例 #3
0
ファイル: main.c プロジェクト: chenguangshen/LPC1343CodeBase
int main (void)
{
  #ifdef CFG_INTERFACE
    #error "CFG_INTERFACE must be disabled in projectconfig.h for this demo"
  #endif
  #if !defined CFG_PRINTF_USBCDC
    #error "CFG_PRINTF_USBCDC must be enabled in projectconfig.h for this demo"
  #endif

  // Configure cpu and mandatory peripherals
  systemInit();
  
  // Wait 5 second for someone to open the USB connection for printf
  systickDelay(5000);

  // Initialise the PN532
  pn532Init();

  byte_t response[256];
  size_t responseLen;
  pn532_error_t error;

  // Setup command to initialise a single ISO14443A target at 106kbps 
  byte_t abtCommand[] = { PN532_COMMAND_INLISTPASSIVETARGET, 0x01, PN532_MODULATION_ISO14443A_106KBPS };

  while (1)
  {
    printf("%s", CFG_PRINTF_NEWLINE);
    printf("Waiting for an ISO14443A card (Mifare Classic, etc.)%s", CFG_PRINTF_NEWLINE);

    // Send the command (and handle the most common errors)
    error = pn532Write(abtCommand, sizeof(abtCommand));
    if (error)
    {
      // Something went wrong sending the command (probably the bus selection or wiring)
      switch(error)
      {
        case (PN532_ERROR_NOACK):
          // No ACK frame received in UART mode (bus pins not set correctly?)
          printf("Ooops ... No ACK frame was received! Are the bus pins sets to UART?%s", CFG_PRINTF_NEWLINE);
          break;
        case (PN532_ERROR_I2C_NACK):
          // No ACK bit received to I2C start (bus pins not set correctly?)
          printf("Ooops ... No ACK bit received for I2C start! Are the bus pins sets to I2C?%s", CFG_PRINTF_NEWLINE);
          break;
        default:
          printf("Ooops ... something went wrong! [PN532 Error Code: 0x%02X]%s", error, CFG_PRINTF_NEWLINE);
          break;
      }
    }
    else
    {
      // Commmand seems to have gone through ... 
      do
      {
        // Keep reading until we get a response or an unexpected error condition
        error = pn532Read(response, &responseLen);
        systickDelay(25);
      }
      while (error == PN532_ERROR_RESPONSEBUFFEREMPTY);
  
      // Print the card details if possible
      if (!error)
      {
        /* Response for ISO14443A 106KBPS (Mifare Classic, etc.)
           See UM0701-02 section 7.3.5 for more information
  
           byte            Description
           -------------   ------------------------------------------
           b7              Tags Found
           b8              Tag Number (only one used in this example)
           b9..10          SENS_RES
           b11             SEL_RES
           b12             NFCID Length
           b13..NFCIDLen   NFCID
           
           SENS_RES   SEL_RES     Manufacturer/Card Type    NFCID Len
           --------   -------     -----------------------   ---------
           00 04      08          NXP Mifare Classic 1K     4 bytes   */
  
        printf("%s", CFG_PRINTF_NEWLINE);
        printf("%-12s: %d %s", "Tags Found", response[7], CFG_PRINTF_NEWLINE);
        printf("%-12s: %02X %02X %s", "SENS_RES", response[9], response[10], CFG_PRINTF_NEWLINE);
        printf("%-12s: %02X %s", "SEL_RES", response[11], CFG_PRINTF_NEWLINE);
        printf("%-12s: ", "NFCID");
        size_t pos;
        for (pos=0; pos < response[12]; pos++) 
        {
          printf("%02x ", response[13 + pos]);
        }
        printf(CFG_PRINTF_NEWLINE);
        if ((response[9] == 0x00) && (response[10] == 0x04) && (response[11] == 0x08))
        {
          printf("Seems to be a Mifare Classic 1K Card%s", CFG_PRINTF_NEWLINE);
        }
      }
      else
      {
        // Oops .... something bad happened.  Check 'error'
        printf("Ooops! Error %02X %s", error, CFG_PRINTF_NEWLINE);
      }
    }

    // Wait at least one second before trying again
    systickDelay(1000);
  }
}
コード例 #4
0
ファイル: main.c プロジェクト: Miceuz/LPC1343CodeBase
int main (void)
{
  #ifdef CFG_INTERFACE
    //#error "CFG_INTERFACE must be disabled in projectconfig.h for this demo"
  #endif
  #if !defined CFG_PRINTF_USBCDC
    #error "CFG_PRINTF_USBCDC must be enabled in projectconfig.h for this demo"
  #endif

  // Configure cpu and mandatory peripherals
  systemInit();
  
  // Wait a bit for someone to open the USB connection for printf
  systickDelay(5000);

  // Initialise the PN532
  pn532Init();

  pn532_error_t error;
  byte_t response[64];
  size_t responseLen;

  // Setup command to initialise a single ISO14443A target at 106kbps (Mifare Classic, Ultralight, etc.)
  byte_t abtCommand[] = { PN532_COMMAND_INLISTPASSIVETARGET, 0x01, PN532_MODULATION_ISO14443A_106KBPS };

  while (1)
  {
    printf("%s", CFG_PRINTF_NEWLINE);
    printf("Waiting for an ISO14443A card (Mifare Classic, etc.)%s", CFG_PRINTF_NEWLINE);

    // Send the command (and handle the most common errors)
    error = pn532Write(abtCommand, sizeof(abtCommand));
    if (error)
    {
      // Something went wrong sending the command (probably the bus selection or wiring)
      switch(error)
      {
        case (PN532_ERROR_NOACK):
        case (PN532_ERROR_INVALIDACK):
          // No ACK response frame received from the PN532
          printf("Ooops ... No valid ACK frame received!%s", CFG_PRINTF_NEWLINE);
          break;
        case (PN532_ERROR_I2C_NACK):
          // No ACK bit received to I2C start ... not same as PN532 ACK frame (bus pins not set correctly?)
          printf("Ooops ... No I2C ACK received! Are the bus select pins sets to I2C?%s", CFG_PRINTF_NEWLINE);
          break;
        case (PN532_ERROR_READYSTATUSTIMEOUT):
          // Timed out waiting for the ready bit to clear ... this can be intentional, though, in the
          // case of PN532_COMMAND_INLISTPASSIVETARGET since it will only clear when a card
          // enters the magnetic field!  Handle with caution because it isn't always an error
          // Note: Only valid for I2C and SPI
          printf("Timed out waiting for Ready/IRQ%s", CFG_PRINTF_NEWLINE);
          break;
        default:
          printf("Ooops ... something went wrong! [PN532 Error Code: 0x%02X]%s", error, CFG_PRINTF_NEWLINE);
          break;
      }
    }
    else
    {
      // Commmand seems to have gone through ... 
      do
      {
        // Keep reading until we get a response or an unexpected error condition
        error = pn532Read(response, &responseLen);
        systickDelay(25);
      }
      while (error == PN532_ERROR_RESPONSEBUFFEREMPTY);

      printf("%s", CFG_PRINTF_NEWLINE);
      printf("%-12s: ", "Received");
      pn532PrintHex(response, responseLen);

      // Try to handle some potential frame errors
      // Unhandled errors are caught further down
      switch (error)
      {
        case (PN532_ERROR_PREAMBLEMISMATCH):
          // Frame should start with 0x00 0x00 0xFF!
          printf("Response frame doesn't start with expected preamble (00 00 FF)%s", CFG_PRINTF_NEWLINE);
          break;
        case (PN532_ERROR_APPLEVELERROR):
          printf("Application level error reported by PN532%s", CFG_PRINTF_NEWLINE);
          break;
        case (PN532_ERROR_LENCHECKSUMMISMATCH):          
          printf("Frame length check/checksum mismatch%s", CFG_PRINTF_NEWLINE);
          break;
        default:
          // Other errors handled below
          break;
      }
  
      // Print the card details if possible
      if (!error)
      {
        /* Response for ISO14443A 106KBPS (Mifare Classic, etc.)
           See UM0701-02 section 7.3.5 for more information
  
           byte            Description
           -------------   ------------------------------------------
           b7              Tags Found
           b8              Tag Number (only one used in this example)
           b9..10          SENS_RES
           b11             SEL_RES
           b12             NFCID Length
           b13..NFCIDLen   NFCID
           
           SENS_RES   SEL_RES     Manufacturer/Card Type    NFCID Len
           --------   -------     -----------------------   ---------
           00 04      08          NXP Mifare Classic 1K     4 bytes   */
  
        printf("%-12s: %d %s", "Tags Found", response[7], CFG_PRINTF_NEWLINE);
        printf("%-12s: %02X %02X %s", "SENS_RES", response[9], response[10], CFG_PRINTF_NEWLINE);
        printf("%-12s: %02X %s", "SEL_RES", response[11], CFG_PRINTF_NEWLINE);
        printf("%-12s: ", "NFCID");
        size_t pos;
        for (pos=0; pos < response[12]; pos++) 
        {
          printf("%02x ", response[13 + pos]);
        }
        printf(CFG_PRINTF_NEWLINE);
        if ((response[9] == 0x00) && (response[10] == 0x04) && (response[11] == 0x08))
        {
          printf("Seems to be a Mifare Classic 1K Card%s", CFG_PRINTF_NEWLINE);
        }
      }
      else
      {
        // Oops .... something bad happened.  Check 'error'
        printf("Ooops! Error %02X %s", error, CFG_PRINTF_NEWLINE);
      }
    }

    // Wait at least one second before trying again
    systickDelay(1000);
  }
}