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@0:480387549d89, 2012-07-26 (annotated)
- 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?
User | Revision | Line number | New 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 |