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!
Diff: PN532/MuNFC.h
- 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_ */