![](/media/cache/profiles/7dcf06698a343e7d4985689898cb8491.jpg.50x50_q85.jpg)
Gestione VCARD
Dependencies: NDefLib X_NUCLEO_NFC01A1 mbed
Fork of HelloWorld_NFC01A1 by
Diff: main.cpp
- Revision:
- 17:22e6c00f3a4c
- Parent:
- 14:1b99908360c5
- Child:
- 20:0f35e8fe0465
--- a/main.cpp Wed Feb 03 10:17:14 2016 +0000 +++ b/main.cpp Wed Aug 31 11:23:41 2016 +0000 @@ -43,19 +43,12 @@ /** * Write a Ndef URI message linking to st.com site. - */ -int main(void){ - - //use default board pinout - I2C i2cChannel(X_NUCLEO_NFC01A1::DEFAULT_SDA_PIN,X_NUCLEO_NFC01A1::DEFAULT_SDL_PIN); - X_NUCLEO_NFC01A1 *nfcNucleo = X_NUCLEO_NFC01A1::Instance(i2cChannel,NULL, - X_NUCLEO_NFC01A1::DEFAULT_GPO_PIN,X_NUCLEO_NFC01A1::DEFAULT_RF_DISABLE_PIN, - X_NUCLEO_NFC01A1::DEFAULT_LED1_PIN,X_NUCLEO_NFC01A1::DEFAULT_LED2_PIN, - X_NUCLEO_NFC01A1::DEFAULT_LED3_PIN); - + * Write an NDef message with a Uri record linking the st.com site + * @param nfcNucleo expansion board where write the NDef message + */ +static void writeUrl(X_NUCLEO_NFC01A1 *nfcNucleo){ //retrieve the NdefLib interface - NDefLib::NDefNfcTag& tag =nfcNucleo->getM24SR().getNDefTag(); - printf("System Init done: !\n\r"); + NDefLib::NDefNfcTag& tag = nfcNucleo->getM24SR().getNDefTag(); //open the i2c session with the nfc chip if(tag.openSession()){ @@ -85,4 +78,93 @@ }else printf("Error opening the session\n\r"); -} \ No newline at end of file +} + +/** + * Read a NDef message and print content and type of all the uri record inside + * the message + * @param nfcNucleo expansion board from where read the message + */ +static void readUrl(X_NUCLEO_NFC01A1 *nfcNucleo){ + //retrieve the NdefLib interface + NDefLib::NDefNfcTag& tag = nfcNucleo->getM24SR().getNDefTag(); + + //open the i2c session with the nfc chip + if(tag.openSession()){ + printf("Session opened\n\r"); + nfcNucleo->getLed1()=1; + + //create the NDef message and record + NDefLib::Message msg; + + //read the tag + if(tag.read(&msg)){ + const uint32_t nRecords = msg.getNRecords(); + printf("Tag read: %d record\n\r",msg.getNRecords()); + for(int i =0 ;i<nRecords ;i++){ + if(msg[i]->getType()== NDefLib::Record::TYPE_URI){ + NDefLib::RecordURI *rUri = (NDefLib::RecordURI *)msg[i]; + printf("UriType: %x\n\rUriContent: %s\n\r", + rUri->getUriId(), + rUri->getContent().c_str()); + }//if + }//for + //free the read records + NDefLib::Message::removeAndDeleteAllRecord(msg); + }else{ + printf("Error Reading \n\r"); + }//if-else + + //close the i2c session + if(tag.closeSession()){ + printf("Session closed\n\r"); + nfcNucleo->getLed3()=1; + }else{ + printf("Error closing the session\n\r"); + }//if-else + + }else + printf("Error opening the session\n\r"); +} + +static volatile bool buttonPress=false; + +static void setButtonPress(){ + buttonPress=true; +}//if buttonPress + +/** + * Write a Ndef URI message linking to st.com site and than read the message from + * the Nfc tag. + * + */ +int main(void){ + + //use default board pinout + I2C i2cChannel(X_NUCLEO_NFC01A1::DEFAULT_SDA_PIN,X_NUCLEO_NFC01A1::DEFAULT_SDL_PIN); + X_NUCLEO_NFC01A1 *nfcNucleo = X_NUCLEO_NFC01A1::Instance(i2cChannel,NULL, + X_NUCLEO_NFC01A1::DEFAULT_GPO_PIN,X_NUCLEO_NFC01A1::DEFAULT_RF_DISABLE_PIN, + X_NUCLEO_NFC01A1::DEFAULT_LED1_PIN,X_NUCLEO_NFC01A1::DEFAULT_LED2_PIN, + X_NUCLEO_NFC01A1::DEFAULT_LED3_PIN); + + printf("System Init done: !\n\r"); + + // write an URI message + writeUrl(nfcNucleo); + +//if run on a nucleo board enable the user button for read the ndef record +#if defined(TARGET_STM) + InterruptIn userButton(USER_BUTTON); + userButton.fall(setButtonPress); + while(true){ + if(buttonPress){ + readUrl(nfcNucleo); + buttonPress=false; + }//if + //wait next event + __WFE(); + }//while +#else + readUrl(nfcNucleo); +#endif +}