Thomas Janke / Mbed 2 deprecated p2p_nfc_test

Dependencies:   AppNearMe_MuNFC_PN532 mbed-rtos mbed

Fork of AppNearMe_MuNFC_PN532_Test by AppNearMe Official

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos/rtos.h"
00003 #include <string>
00004 #include "MuNFC.h"
00005 
00006 DigitalOut led_alive(LED1);
00007 DigitalOut led_progress(LED2);
00008 DigitalOut led_ok(LED3);
00009 DigitalOut led_failed(LED4);
00010 Semaphore s(1);
00011 
00012 MuNFC nfc("00000003RdfgT390", 1, p11, p12, p13, p19, p18);
00013 Serial arduino(p9, p10);  // tx, rx
00014 
00015 #define DEFAULT_PACKET 1
00016 
00017 char messageFromNFC[300];
00018 char c;
00019 string messageFromArduino;
00020 string messageToNFC;
00021 
00022 //Encode callback
00023 void encode_cb(TLVList* tlv, void *)
00024 {
00025   static uint32_t counter = 0;
00026   counter++;
00027   tlv->putUInt8( DEFAULT_PACKET ); //First uint8_t is packet type
00028   tlv->putString((char*)messageToNFC.c_str());
00029   tlv->putUInt32( counter );
00030 }
00031 
00032 //Decode callback
00033 void decode_cb(TLVList* tlv, void *)
00034 {
00035   if(tlv->getNext() != UINT8)
00036   {
00037     return;
00038   }
00039   if(tlv->getUInt8() == DEFAULT_PACKET) //First uint8_t is packet type
00040   { 
00041     if(tlv->getNext() != STRING)
00042     {
00043       return;
00044     }
00045     tlv->getString(messageFromNFC, 299);
00046     printf("Message received from NFC: %s\n",messageFromNFC);
00047   }
00048   s.release();
00049 }
00050 
00051 //NFC event
00052 void event_cb(NFCEvent event, void*)
00053 {
00054     switch(event)
00055     {
00056     case NFC_TRANSACTION_STARTED:
00057         led_progress=1;
00058         led_ok=0;
00059         led_failed=0;
00060     break;
00061     case NFC_TRANSACTION_SUCCESSFUL:
00062         led_progress=0;
00063         led_ok=1;
00064         led_failed=0;
00065     break;
00066     case NFC_TRANSACTION_FAILED:
00067         led_progress=0;
00068         led_ok=0;
00069         led_failed=1;
00070     break;
00071     }
00072 }
00073 
00074 int main() {   
00075     nfc.encode(encode_cb, NULL);
00076     nfc.decode(decode_cb, NULL);
00077     nfc.event(event_cb, NULL);
00078     s.wait();
00079     
00080     bool ret = nfc.init();
00081     if(ret)
00082     {
00083       //printf("MuNFC stack initialized\n");
00084       
00085     }
00086     else
00087     {
00088       //printf("Could not initialize stack\n");
00089     }
00090     
00091     messageFromNFC[0] = '\0';
00092     //messageToNFC = "pay_666_EUR_202_123456789101112131";
00093     messageToNFC = "cancel";
00094     nfc.run(); //Start thread
00095     
00096 
00097     
00098     while(1) {
00099         led_alive = 1;
00100         
00101         
00102         // read messages from arduino
00103         while(arduino.readable()){
00104             
00105             c = arduino.getc();
00106             if (c != '\n'){
00107                 messageFromArduino += c;
00108             } else {
00109                 if (messageFromArduino.length() > 1){    
00110                 
00111                     //blink a bit
00112                     led_alive = 0;
00113                     wait(0.05);
00114                     led_alive = 1;
00115                     wait(0.05);
00116                     led_alive = 0;
00117                 
00118                     messageToNFC = messageFromArduino;
00119                     //printf("Set message to: %s\n",messageToNFC);
00120                 }
00121                 messageFromArduino = "";
00122             }
00123         }
00124         
00125         if (messageFromNFC[0] != '\0'){
00126             arduino.printf("%s\n",messageFromNFC);
00127             messageFromNFC[0] = '\0';
00128         }
00129         
00130         /*
00131         if(s.wait(200) > 0)
00132         {
00133           printf("Got: %s\n",messageFromNFC);
00134         }*/
00135     }
00136 }