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/MuNFC.cpp@3:0b949b2d3b55, 2012-08-07 (annotated)
- 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?
User | Revision | Line number | New 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 |