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:
Thu Jul 26 09:12:27 2012 +0000
Revision:
0:480387549d89
Child:
2:913eb8fdfd9d
Initial commit

Who changed what in which revision?

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