Simple NFC test projekt

Dependencies:   AppNearMe_MuNFC_PN532 mbed-rtos mbed

Fork of AppNearMe_MuNFC_PN532_Test by AppNearMe Official

main.cpp

Committer:
thomasjanke
Date:
2013-01-24
Revision:
6:f14e71ffdc79
Parent:
5:502178f6a842

File content as of revision 6:f14e71ffdc79:

#include "mbed.h"
#include "rtos/rtos.h"
#include <string>
#include "MuNFC.h"

DigitalOut led_alive(LED1);
DigitalOut led_progress(LED2);
DigitalOut led_ok(LED3);
DigitalOut led_failed(LED4);
Semaphore s(1);

MuNFC nfc("00000003RdfgT390", 1, p11, p12, p13, p19, p18);
Serial arduino(p9, p10);  // tx, rx

#define DEFAULT_PACKET 1

char messageFromNFC[300];
char c;
string messageFromArduino;
string messageToNFC;

//Encode callback
void encode_cb(TLVList* tlv, void *)
{
  static uint32_t counter = 0;
  counter++;
  tlv->putUInt8( DEFAULT_PACKET ); //First uint8_t is packet type
  tlv->putString((char*)messageToNFC.c_str());
  tlv->putUInt32( counter );
}

//Decode callback
void decode_cb(TLVList* tlv, void *)
{
  if(tlv->getNext() != UINT8)
  {
    return;
  }
  if(tlv->getUInt8() == DEFAULT_PACKET) //First uint8_t is packet type
  { 
    if(tlv->getNext() != STRING)
    {
      return;
    }
    tlv->getString(messageFromNFC, 299);
    printf("Message received from NFC: %s\n",messageFromNFC);
  }
  s.release();
}

//NFC event
void event_cb(NFCEvent event, void*)
{
    switch(event)
    {
    case NFC_TRANSACTION_STARTED:
        led_progress=1;
        led_ok=0;
        led_failed=0;
    break;
    case NFC_TRANSACTION_SUCCESSFUL:
        led_progress=0;
        led_ok=1;
        led_failed=0;
    break;
    case NFC_TRANSACTION_FAILED:
        led_progress=0;
        led_ok=0;
        led_failed=1;
    break;
    }
}

int main() {   
    nfc.encode(encode_cb, NULL);
    nfc.decode(decode_cb, NULL);
    nfc.event(event_cb, NULL);
    s.wait();
    
    bool ret = nfc.init();
    if(ret)
    {
      //printf("MuNFC stack initialized\n");
      
    }
    else
    {
      //printf("Could not initialize stack\n");
    }
    
    messageFromNFC[0] = '\0';
    //messageToNFC = "pay_666_EUR_202_123456789101112131";
    messageToNFC = "cancel";
    nfc.run(); //Start thread
    

    
    while(1) {
        led_alive = 1;
        
        
        // read messages from arduino
        while(arduino.readable()){
            
            c = arduino.getc();
            if (c != '\n'){
                messageFromArduino += c;
            } else {
                if (messageFromArduino.length() > 1){    
                
                    //blink a bit
                    led_alive = 0;
                    wait(0.05);
                    led_alive = 1;
                    wait(0.05);
                    led_alive = 0;
                
                    messageToNFC = messageFromArduino;
                    //printf("Set message to: %s\n",messageToNFC);
                }
                messageFromArduino = "";
            }
        }
        
        if (messageFromNFC[0] != '\0'){
            arduino.printf("%s\n",messageFromNFC);
            messageFromNFC[0] = '\0';
        }
        
        /*
        if(s.wait(200) > 0)
        {
          printf("Got: %s\n",messageFromNFC);
        }*/
    }
}