AppNearMe µNFC stack for the NXP PN532 chip License: You can use the stack free of charge to prototype with mbed; if you want to use the stack with your commercial product, get in touch!

Dependents:   IOT_sensor_nfc AppNearMe_MuNFC_PN532_Test p2p_nfc_test NFCMoodLamp ... more

License

You can use the stack free of charge to prototype with mbed; if you want to use the stack with your commercial product, get in touch!

Revision:
11:5be631376e5b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PN532/MuNFC.h	Wed Nov 07 18:19:09 2012 +0000
@@ -0,0 +1,178 @@
+/*
+    MuNFC.h
+    Copyright (c) Donatien Garnier 2012
+    donatien.garnier@appnearme.com
+    http://www.appnearme.com/
+*/
+
+
+#ifndef MUNFC_H_
+#define MUNFC_H_
+
+#include "MuNFCConfig.h"
+
+#include <cstdint> //For uint_*t
+#include <cstring> //For size_t
+
+using std::uint8_t;
+using std::uint16_t;
+using std::uint32_t;
+using std::size_t;
+
+#include "NFCEvent.h"
+#include "NdefCallback.h"
+#include "EventCallback.h"
+#include "TLVList.h"
+
+#include "mbed.h"
+#if MUNFC_RTOS
+#include "rtos/rtos.h"
+#endif
+
+/** A library for embedded NFC applications using NXP's PN512/PN532 NFC transceivers.
+* Visit http://www.appnearme.com/
+*/
+class MuNFC
+{
+public:
+
+
+  /** Instantiate the µNFC stack for the following mobile app and using the following PN512/PN532 chip.
+   * @param appHash 16 chars-long hash of the corresponding mobile app
+   * @param version Minimum version of the mobile app to use in BCD format encoded as an uint32_t (0x01000000 is version 1.0.0.0)
+   * @param mosi MOSI pin of the SPI interface
+   * @param miso MISO pin of the SPI interface
+   * @param sclk SCLK pin of the SPI interface
+   * @param cs CS pin connected to the chip
+   * @param isr ISR pin connected to the chip
+   */
+  MuNFC(char appHash[16], uint32_t version,
+      PinName mosi, PinName miso, PinName sclk, PinName cs, PinName isr);
+
+  ~MuNFC();
+
+  /** Set Encode Callback.
+   *  The encode callback will be called on each start of NFC transaction.
+   *  to populate the data structure that will be transmitted to the reader
+   *  @param fn pointer to the function to be called
+   *  @param arg argument that will be passed to the callback
+   */
+  inline void encode(void (*fn)(TLVList*, void*), void* arg)
+  {
+    m_encodeCb.attach(fn, arg);
+  }
+
+  /** Set Encode Callback.
+   *  The encode callback will be called on each start of NFC transaction.
+   *  to populate the data structure that will be transmitted to the reader
+   *  @param inst pointer to the object on which to call the member
+   *  @param member pointer to the object's member to be called
+   */
+  template <class T>
+  inline void encode(T* inst, void (T::*member)(TLVList*))
+  {
+    m_encodeCb.attach(inst, member);
+  }
+
+  /** Set Decode Callback.
+   *  The decode callback will be called on each successful termination of NFC transaction.
+   *  populated with the data structure that was transmitted by the reader
+   *  @param fn pointer to the function to be called
+   *  @param arg argument that will be passed to the callback
+   */
+  inline void decode(void (*fn)(TLVList*, void*), void* arg)
+  {
+    m_decodeCb.attach(fn, arg);
+  }
+
+  /** Set Decode Callback.
+   *  The decode callback will be called on each successful termination of NFC transaction.
+   *  populated with the data structure that was transmitted by the reader
+   *  @param inst pointer to the object on which to call the member
+   *  @param member pointer to the object's member to be called
+   */
+  template <class T>
+  inline void decode(T* inst, void (T::*member)(TLVList*))
+  {
+    m_decodeCb.attach(inst, member);
+  }
+
+  /** Set Event Callback.
+   *  The event callback will be called on each of the following event:
+   *  - Transaction started
+   *  - Transaction successful
+   *  - Transaction failed
+   *  @param fn pointer to the function to be called
+   *  @param arg argument that will be passed to the callback
+   */
+  inline void event(void (*fn)(NFCEvent, void*), void* arg)
+  {
+    m_eventCb.attach(fn, arg);
+  }
+
+  /** Set Event Callback.
+   *  The event callback will be called on each of the following event:
+   *  - Transaction started
+   *  - Transaction successful
+   *  - Transaction failed
+   *  @param fn pointer to the function to be called
+   *  @param arg argument that will be passed to the callback
+   */
+  template <class T>
+  inline void event(T* inst, void (T::*member)(NFCEvent))
+  {
+    m_eventCb.attach(inst, member);
+  }
+
+  /** Initialize stack.
+   *  @return true if stack was initialized correctly, false otherwise
+   */
+  bool init();
+
+//#if MUNFC_RTOS -- flags must be disabled for proper doxygen support
+  /** Start NFC thread (threaded mode)
+   *
+   */
+  void run();
+//#endif
+
+#if MUNFC_RTOS
+protected:
+  /** NFC Thread
+   *
+   */
+  void process();
+#endif
+
+#if MUNFC_RTOS
+  protected:
+#else
+  public:
+#endif
+  /** Poll for NFC reader (polling mode).
+   *  @param timeoutMs (maximum polling time)
+   */
+  void poll(int timeoutMs);
+
+private:
+#if MUNFC_RTOS
+  static void staticCallback(void const* p);
+#endif
+
+  NdefCallback m_encodeCb;
+  NdefCallback m_decodeCb;
+  EventCallback m_eventCb;
+
+  //DigitalIn m_irq_pin_int;
+  InterruptIn m_irq_pin_isr;
+  DigitalOut m_cs_pin;
+  SPI m_spi;
+
+#if MUNFC_RTOS
+  Thread* m_pThread;
+#endif
+
+};
+
+
+#endif /* MUNFC_H_ */