PN532 Driver library This library provides an abstract API to drive the pn532 nfc chip, with I2C/HSU/SPI interface. Its based on the Seeed Studio's Arduino version.

Dependents:   PN532_ReadUid Nfctest2

Revision:
0:db8030e71f55
diff -r 000000000000 -r db8030e71f55 PN532/examples/android_hce/android_hce.ino
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PN532/examples/android_hce/android_hce.ino	Tue Sep 13 06:01:19 2016 +0000
@@ -0,0 +1,135 @@
+#include <SPI.h>
+#include <PN532_SPI.h>
+#include <PN532Interface.h>
+#include <PN532.h>
+
+PN532_SPI pn532spi(SPI, 10);
+PN532 nfc(pn532spi);
+
+
+void setup()
+{    
+    Serial.begin(115200);
+    Serial.println("-------Peer to Peer HCE--------");
+    
+    nfc.begin();
+    
+    uint32_t versiondata = nfc.getFirmwareVersion();
+    if (! versiondata) {
+      Serial.print("Didn't find PN53x board");
+      while (1); // halt
+    }
+    
+    // Got ok data, print it out!
+    Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); 
+    Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); 
+    Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
+    
+    // Set the max number of retry attempts to read from a card
+    // This prevents us from waiting forever for a card, which is
+    // the default behaviour of the PN532.
+    //nfc.setPassiveActivationRetries(0xFF);
+    
+    // configure board to read RFID tags
+    nfc.SAMConfig();
+}
+
+void loop()
+{
+  bool success;
+  
+  uint8_t responseLength = 32;
+  
+  Serial.println("Waiting for an ISO14443A card");
+  
+  // set shield to inListPassiveTarget
+  success = nfc.inListPassiveTarget();
+
+  if(success) {
+   
+     Serial.println("Found something!");
+                  
+    uint8_t selectApdu[] = { 0x00, /* CLA */
+                              0xA4, /* INS */
+                              0x04, /* P1  */
+                              0x00, /* P2  */
+                              0x07, /* Length of AID  */
+                              0xF0, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, /* AID defined on Android App */
+                              0x00  /* Le  */ };
+                              
+    uint8_t response[32];  
+     
+    success = nfc.inDataExchange(selectApdu, sizeof(selectApdu), response, &responseLength);
+    
+    if(success) {
+      
+      Serial.print("responseLength: "); Serial.println(responseLength);
+       
+      nfc.PrintHexChar(response, responseLength);
+      
+      do {
+        uint8_t apdu[] = "Hello from Arduino";
+        uint8_t back[32];
+        uint8_t length = 32; 
+
+        success = nfc.inDataExchange(apdu, sizeof(apdu), back, &length);
+        
+        if(success) {
+         
+          Serial.print("responseLength: "); Serial.println(length);
+           
+          nfc.PrintHexChar(back, length);
+        }
+        else {
+          
+          Serial.println("Broken connection?"); 
+        }
+      }
+      while(success);
+    }
+    else {
+     
+      Serial.println("Failed sending SELECT AID"); 
+    }
+  }
+  else {
+   
+    Serial.println("Didn't find anything!");
+  }
+
+  delay(1000);
+}
+
+void printResponse(uint8_t *response, uint8_t responseLength) {
+  
+   String respBuffer;
+
+    for (int i = 0; i < responseLength; i++) {
+      
+      if (response[i] < 0x10) 
+        respBuffer = respBuffer + "0"; //Adds leading zeros if hex value is smaller than 0x10
+      
+      respBuffer = respBuffer + String(response[i], HEX) + " ";                        
+    }
+
+    Serial.print("response: "); Serial.println(respBuffer);
+}
+
+void setupNFC() {
+ 
+  nfc.begin();
+    
+  uint32_t versiondata = nfc.getFirmwareVersion();
+  if (! versiondata) {
+    Serial.print("Didn't find PN53x board");
+    while (1); // halt
+  }
+  
+  // Got ok data, print it out!
+  Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); 
+  Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); 
+  Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
+  
+  // configure board to read RFID tags
+  nfc.SAMConfig(); 
+}