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 Jan 15 15:34:39 2013 +0000
Revision:
13:6f98851e025b
Parent:
11:5be631376e5b
renamed rtos.h to platform_rtos.h to prevent insludes mess

Who changed what in which revision?

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