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!

Committer:
AppNearMe
Date:
Tue Aug 07 21:55:12 2012 +0000
Revision:
3:0b949b2d3b55
Parent:
2:913eb8fdfd9d
Child:
5:e7e4fe1eb562
Child:
6:15b1c45d50d4
Versioning -> Hg

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AppNearMe 3:0b949b2d3b55 1 /*
AppNearMe 3:0b949b2d3b55 2 MuNFC.cpp
AppNearMe 3:0b949b2d3b55 3 Copyright (c) Donatien Garnier 2012
AppNearMe 3:0b949b2d3b55 4 donatien.garnier@appnearme.com
AppNearMe 3:0b949b2d3b55 5 http://www.appnearme.com/
AppNearMe 3:0b949b2d3b55 6 */
AppNearMe 3:0b949b2d3b55 7
AppNearMe 3:0b949b2d3b55 8
AppNearMe 3:0b949b2d3b55 9 #include "MuNFC.h"
AppNearMe 3:0b949b2d3b55 10 #include "MuNFCConfig.h"
AppNearMe 3:0b949b2d3b55 11
AppNearMe 3:0b949b2d3b55 12 #include "mbed.h"
AppNearMe 3:0b949b2d3b55 13 #if MUNFC_RTOS
AppNearMe 3:0b949b2d3b55 14 #include "rtos/rtos.h"
AppNearMe 3:0b949b2d3b55 15 #endif
AppNearMe 3:0b949b2d3b55 16
AppNearMe 3:0b949b2d3b55 17 #include "munfc/core/fwk.h"
AppNearMe 3:0b949b2d3b55 18 #include "munfc/target/event.h"
AppNearMe 3:0b949b2d3b55 19 #include "munfc/target/nfctype2.h"
AppNearMe 3:0b949b2d3b55 20 #include "munfc/target/nfctype4.h"
AppNearMe 3:0b949b2d3b55 21 #include "munfc/ndef/appnearme_ndef.h"
AppNearMe 3:0b949b2d3b55 22 #include "munfc/ndef/appnearme_ndef_tlv.h"
AppNearMe 3:0b949b2d3b55 23
AppNearMe 3:0b949b2d3b55 24 #include <cstring> //For memcpy, strlen
AppNearMe 3:0b949b2d3b55 25
AppNearMe 3:0b949b2d3b55 26 //TODO add handles in NFC stack to avoid ugly things like that
AppNearMe 3:0b949b2d3b55 27 //extern DigitalIn* nfc_irq_pin_int;
AppNearMe 3:0b949b2d3b55 28 extern InterruptIn* nfc_irq_pin_isr;
AppNearMe 3:0b949b2d3b55 29 extern DigitalOut* nfc_cs_pin;
AppNearMe 3:0b949b2d3b55 30 extern SPI* nfc_spi;
AppNearMe 3:0b949b2d3b55 31
AppNearMe 3:0b949b2d3b55 32 #define SIGNAL_START 0x01
AppNearMe 3:0b949b2d3b55 33
AppNearMe 3:0b949b2d3b55 34 MuNFC::MuNFC(char appHash[16], uint32_t version,
AppNearMe 3:0b949b2d3b55 35 PinName mosi, PinName miso, PinName sclk, PinName cs, PinName isr) :
AppNearMe 3:0b949b2d3b55 36 /* m_irq_pin_int(isr),*/ m_irq_pin_isr(isr), m_cs_pin(cs), m_spi(mosi, miso, sclk)
AppNearMe 3:0b949b2d3b55 37 #if MUNFC_RTOS
AppNearMe 3:0b949b2d3b55 38 , m_pThread(NULL)//m_thread(MuNFC::staticCallback, (void*)this)
AppNearMe 3:0b949b2d3b55 39 #endif
AppNearMe 3:0b949b2d3b55 40 {
AppNearMe 3:0b949b2d3b55 41 //nfc_irq_pin_int = &m_irq_pin_int;
AppNearMe 3:0b949b2d3b55 42 nfc_irq_pin_isr = &m_irq_pin_isr;
AppNearMe 3:0b949b2d3b55 43 nfc_cs_pin = &m_cs_pin;
AppNearMe 3:0b949b2d3b55 44 nfc_spi = &m_spi;
AppNearMe 3:0b949b2d3b55 45
AppNearMe 3:0b949b2d3b55 46 appnearme_ndef_init(appHash, version);
AppNearMe 3:0b949b2d3b55 47 m_eventCb.init(target_register_event_callback);
AppNearMe 3:0b949b2d3b55 48 m_encodeCb.init(appnearme_ndef_register_encode_callback);
AppNearMe 3:0b949b2d3b55 49 m_decodeCb.init(appnearme_ndef_register_decode_callback);
AppNearMe 3:0b949b2d3b55 50 }
AppNearMe 3:0b949b2d3b55 51
AppNearMe 3:0b949b2d3b55 52 MuNFC::~MuNFC()
AppNearMe 3:0b949b2d3b55 53 {
AppNearMe 3:0b949b2d3b55 54 if(m_pThread != NULL)
AppNearMe 3:0b949b2d3b55 55 {
AppNearMe 3:0b949b2d3b55 56 delete m_pThread;
AppNearMe 3:0b949b2d3b55 57 }
AppNearMe 3:0b949b2d3b55 58 }
AppNearMe 3:0b949b2d3b55 59
AppNearMe 3:0b949b2d3b55 60 bool MuNFC::init()
AppNearMe 3:0b949b2d3b55 61 {
AppNearMe 3:0b949b2d3b55 62 if(m_pThread == NULL)
AppNearMe 3:0b949b2d3b55 63 {
AppNearMe 3:0b949b2d3b55 64 m_pThread = new Thread(MuNFC::staticCallback, (void*)this);
AppNearMe 3:0b949b2d3b55 65 }
AppNearMe 3:0b949b2d3b55 66 #if NFC_CONTROLLER == PN512
AppNearMe 3:0b949b2d3b55 67 int ret = target_nfctype2_start();
AppNearMe 3:0b949b2d3b55 68 #elif NFC_CONTROLLER == PN532
AppNearMe 3:0b949b2d3b55 69 int ret = target_nfctype4_start();
AppNearMe 3:0b949b2d3b55 70 #endif
AppNearMe 3:0b949b2d3b55 71 if(ret != OK)
AppNearMe 3:0b949b2d3b55 72 {
AppNearMe 3:0b949b2d3b55 73 return false;
AppNearMe 3:0b949b2d3b55 74 }
AppNearMe 3:0b949b2d3b55 75 return true;
AppNearMe 3:0b949b2d3b55 76 }
AppNearMe 3:0b949b2d3b55 77
AppNearMe 3:0b949b2d3b55 78 #if MUNFC_RTOS
AppNearMe 3:0b949b2d3b55 79 void MuNFC::run()
AppNearMe 3:0b949b2d3b55 80 {
AppNearMe 3:0b949b2d3b55 81 //Start NFC thread
AppNearMe 3:0b949b2d3b55 82 m_pThread->signal_set(SIGNAL_START);
AppNearMe 3:0b949b2d3b55 83 }
AppNearMe 3:0b949b2d3b55 84
AppNearMe 3:0b949b2d3b55 85 void MuNFC::process()
AppNearMe 3:0b949b2d3b55 86 {
AppNearMe 3:0b949b2d3b55 87 Thread::signal_wait(SIGNAL_START);
AppNearMe 3:0b949b2d3b55 88 do
AppNearMe 3:0b949b2d3b55 89 {
AppNearMe 3:0b949b2d3b55 90 poll(-1);
AppNearMe 3:0b949b2d3b55 91 } while(true);
AppNearMe 3:0b949b2d3b55 92 }
AppNearMe 3:0b949b2d3b55 93 #endif
AppNearMe 3:0b949b2d3b55 94
AppNearMe 3:0b949b2d3b55 95 void MuNFC::poll(int timeoutMs) //TODO add Timeout
AppNearMe 3:0b949b2d3b55 96 {
AppNearMe 3:0b949b2d3b55 97 #if NFC_CONTROLLER == PN512
AppNearMe 3:0b949b2d3b55 98 target_nfctype2_process();
AppNearMe 3:0b949b2d3b55 99 #elif NFC_CONTROLLER == PN532
AppNearMe 3:0b949b2d3b55 100 target_nfctype4_process();
AppNearMe 3:0b949b2d3b55 101 #endif
AppNearMe 3:0b949b2d3b55 102 }
AppNearMe 3:0b949b2d3b55 103
AppNearMe 3:0b949b2d3b55 104 #if MUNFC_RTOS
AppNearMe 3:0b949b2d3b55 105 /*static*/ void MuNFC::staticCallback(void const* p)
AppNearMe 3:0b949b2d3b55 106 {
AppNearMe 3:0b949b2d3b55 107 ((MuNFC*)p)->process();
AppNearMe 3:0b949b2d3b55 108 }
AppNearMe 3:0b949b2d3b55 109 #endif