This application provides a set of demos with X-NUCLEO-NFC01A1 expansion board.

Dependencies:   NDefLib X_NUCLEO_NFC01A1 mbed

Fork of X-MBED-NFC1 by Giovanni Visentini

This application provides a set of demos with X-NUCLEO-NFC01A1 expansion board.

The available demos are:

  • SAMPLE_WRITE_URL: write a tag with the ST home page URL
  • SAMPLE_COUNT_CLICK: create a custom tag to count and report the user button clicks.
  • SAMPLE_WRITE_AND_CHANGE_ALL: write a tag with all the supported records and update the tag contents when the user button is pressed.
  • SAMPLE_LOCK_TAG_CONTENT: use the M24SR component API to set the NFC tag as read-only.

To enable the different demos comment/uncomment the SAMPLE_* macros provided in main.cpp .

Revision:
4:f40b3505070c
Parent:
3:f7f818ee694e
Child:
5:3b300c8235b7
--- a/Type4NfcTagSTM24SR.cpp	Tue Dec 01 16:01:24 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,125 +0,0 @@
-/*
- * Type4NfcTagSTM24SR.cpp
- *
- *  Created on: Nov 5, 2015
- *      Author: giovanni visentini
- */
-
-#include <Type4NfcTagSTM24SR.h>
-
-/* wait 1sec, driver is configured to let 200ms for command to complete */
-/* which is enough for all commands except GetSession if RF session is already opened */
-/* Smartphone generaly release the session within the second, but customer can modify this value */
-#define OPENSESSION_NTRIALS 5
-
-#define CC_FILE_LENGTH_BYTE 15
-
-bool Type4NfcTagSTM24SR::openSession(bool force) {
-
-	if (isSessionOpen())
-		return true;
-	//else
-	if (force)
-		mDevice.KillSession();
-
-	int8_t nTrials = OPENSESSION_NTRIALS;
-	NFC_StatusTypeDef status = NFC_ERROR;
-	while (status != NFC_SUCCESS && nTrials) {
-		status = mDevice.GetSession();
-		nTrials--;
-	}
-
-	if (status != NFC_SUCCESS) {
-		return false;
-	} //else
-
-	//Select the NFC type 4 application
-	if (mDevice.SelectApplication() != NFC_SUCCESS)
-		return false;
-
-	if (mDevice.SelectCCfile() != NFC_SUCCESS)
-		return false;
-
-	uint8_t CCFile[CC_FILE_LENGTH_BYTE];
-	/* read the first 15 bytes of the CC file */
-	if (mDevice.ReadBinary(0x0000, CC_FILE_LENGTH_BYTE, CCFile) != NFC_SUCCESS)
-		return false;
-
-	//read the ndefFileId
-	uint16_t ndefFileId = (uint16_t) ((CCFile[0x09] << 8) | CCFile[0x0A]);
-	mMaxReadBytes = (uint16_t) ((CCFile[0x03] << 8) | CCFile[0x04]);
-	mMaxWriteBytes = (uint16_t) ((CCFile[0x05] << 8) | CCFile[0x06]);
-
-	//openit
-	if (mDevice.SelectNDEFfile(ndefFileId) != NFC_SUCCESS)
-		return false;
-
-	Type4NfcTag::openSession();
-	return true;
-}
-
-bool Type4NfcTagSTM24SR::closeSession() {
-
-	//no open session
-	if (!isSessionOpen())
-		return true;
-
-	//close the CC file
-	if (mDevice.Deselect() != NFC_SUCCESS)
-		return false;
-
-	Type4NfcTag::closeSession();
-	return true;
-}
-
-bool Type4NfcTagSTM24SR::writeByte(const uint8_t *buffer, uint16_t length, uint16_t offset) {
-
-	NFC_StatusTypeDef status = NFC_SUCCESS;
-	bool prevSessionStatus = isSessionOpen();
-	if (!prevSessionStatus) {
-		//try to acquire a session or fail
-		if (openSession(false))
-			return false;
-	} //if
-
-	if (length > mMaxWriteBytes) {
-		do {
-			status = mDevice.UpdateBinary(offset, mMaxWriteBytes,(uint8_t*) buffer);
-			offset += mMaxWriteBytes;
-			buffer += mMaxWriteBytes;
-			length -= mMaxWriteBytes;
-		} while (length > mMaxWriteBytes && status == NFC_SUCCESS);
-	} //if
-
-	//finish to write the buffer
-	if (status == NFC_SUCCESS && mMaxWriteBytes)
-		status = mDevice.UpdateBinary(offset, length,(uint8_t*) buffer);
-
-	if (status == NFC_SUCCESS) {
-		if (!prevSessionStatus) // if the session was closed, try close it
-			return closeSession();
-		else
-			return true;
-	} else
-		return false;
-}
-
-bool Type4NfcTagSTM24SR::readByte(uint16_t byteOffset, uint16_t byteLength,
-		uint8_t *buffer) {
-	NFC_StatusTypeDef status = NFC_SUCCESS;
-	uint16_t offset = byteOffset;
-	if (byteLength > mMaxReadBytes) {
-		do {
-			status = mDevice.ReadBinary(offset, mMaxReadBytes, buffer);
-			offset += mMaxReadBytes;
-			buffer += mMaxReadBytes;
-			byteLength -= mMaxReadBytes;
-		} while (byteLength > mMaxWriteBytes && status == NFC_SUCCESS);
-	} //if
-	  //finish to write the buffer
-	if (status == NFC_SUCCESS && mMaxWriteBytes)
-		status = mDevice.ReadBinary(offset, byteLength, buffer);
-
-	return status == NFC_SUCCESS;
-}
-