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!

PN532/NdefCallback.h

Committer:
AppNearMe
Date:
2012-08-07
Revision:
3:0b949b2d3b55
Parent:
0:480387549d89

File content as of revision 3:0b949b2d3b55:

/*
    NdefCallback.h 
    Copyright (c) Donatien Garnier 2012
    donatien.garnier@appnearme.com
    http://www.appnearme.com/
*/


#ifndef NDEFCALLBACK_H_
#define NDEFCALLBACK_H_

#include "TLVList.h"

#include "munfc/core/fwk.h"
#include "munfc/ndef/appnearme_ndef.h"

class NdefCallback
{
protected:
  NdefCallback(); //Callable by MuNFC

  void init(void (*fn)(appnearme_ndef_callback, void*));

  void attach(void (*fn)(TLVList*, void*), void* arg);

  template <class T>
  void attach(T* inst, void (T::*member)(TLVList*))
  {
    m_fn = NULL;
    m_inst = inst;
    m_member = member;
    m_caller = &NdefCallback::memberCaller<T>;
  }

private:
  void callback(tlv_list* payload);

  //Data
  TLVList m_tlvList;

  //Function
  void(*m_fn)(TLVList*, void*);
  void* m_arg;

  //Member of object instance
  void* m_inst;
  void* m_member;
  void* (*m_caller)(TLVList*);

  template <class T>
  static inline void memberCaller(TLVList* tlvList)
  {
    T* inst = (T*) m_inst;
    void (T::*member)(TLVList*) = m_member;
    inst->member(tlvList);
  }

  static void staticCallback(tlv_list* payload, void* param);

  friend class MuNFC;
};


#endif /* NDEFCALLBACK_H_ */