A simple mbed OS application providing an example of asynchronous access to the X-NUCLEO_NFC01A1 Dynamic NFC Tag board.
Dependencies: NDefLib X_NUCLEO_NFC01A1
Fork of mbed-os-example-NFC01A1 by
The application provides a simple example of asynchronous access to the X-NUCLEO-NFC01A1 Dynamic NFC Tag Expansion Board. It represents the multi-threaded mbed OS 5 version of the mbed classic HelloWorld_Async_NFC01A1 application.
The program writes a URI link to the M24SR dynamic tag using the asynchronous programming model.
The URI can then be read and printed on the serial console by pressing the user button and/or via RF from an NFC enabled smartphone/tablet.
Diff: main.cpp
- Revision:
- 1:951cd8fbff34
- Parent:
- 0:3e88cb856f63
- Child:
- 2:e06d881b4b3c
diff -r 3e88cb856f63 -r 951cd8fbff34 main.cpp
--- a/main.cpp Thu Aug 10 16:59:44 2017 +0000
+++ b/main.cpp Fri Aug 11 07:58:12 2017 +0000
@@ -58,23 +58,29 @@
nfcEventsThread.signal_set(NFC_INTERRUPT_FLAG);
}//nfcInterruptCallback
+/** ISR handling button pressure **/
static void set_button_press() {
nfcReadThread.signal_set(BUTTON_PRESSED_FLAG);
}//buttonPressed event
void nfcEvents() {
-
while (true) {
osEvent event = nfcEventsThread.signal_wait(NFC_INTERRUPT_FLAG); // wait for nfc event
- printf("Got an NFC event!\n\r");
+ //printf("Got an NFC event!\n\r");
nfcNucleo->get_M24SR().manage_event();
}
}
void readNfc() {
+ //create the callback to read a tag
ReadUriCallbacks NDefReadCallback(nfcNucleo->get_led1(),nfcNucleo->get_led2(),nfcNucleo->get_led3());
+ //create the callback to write a tag
+ WriteUriCallbacks NDefWriteCallback(nfcNucleo->get_led1(),nfcNucleo->get_led2(),nfcNucleo->get_led3());
+ // write the tag
+ printf("Writing Tag\n\r");
+ tag->open_session();
while (true) {
osEvent event = nfcReadThread.signal_wait(BUTTON_PRESSED_FLAG); // wait for button pressed
@@ -104,20 +110,14 @@
nfcNucleo->get_M24SR().get_session();
nfcNucleo->get_M24SR().manage_I2C_GPO(M24SR::I2C_ANSWER_READY); //switch to async mode
- *tag = nfcNucleo->get_M24SR().get_NDef_tag();
- printf("System Init done! Starting the threads.\n\r");
+ tag = &(nfcNucleo->get_M24SR().get_NDef_tag());
+ printf("System Init done!\n\r");
//Start the nfc event handling thread
nfcEventsThread.start(nfcEvents);
- //Start the button pressed thread
+ //Start the nfc reading thread - also writes the tag once
nfcReadThread.start(readNfc);
-
- printf("Writing Tag\n\r");
- //create the callback to write a tag
- WriteUriCallbacks NDefWriteCallback(nfcNucleo->get_led1(),nfcNucleo->get_led2(),nfcNucleo->get_led3());
- // write the tag
- tag->open_session();
-
+
while (true) {
__WFE();
}
