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:
1:6d202b62ed68
Parent:
0:674813bd5ec9
Child:
2:0648c1561eb2
--- a/Type4NfcTagSTM24SR.cpp	Thu Nov 19 08:50:18 2015 +0000
+++ b/Type4NfcTagSTM24SR.cpp	Fri Nov 27 15:10:25 2015 +0000
@@ -14,97 +14,113 @@
 
 #define CC_FILE_LENGTH_BYTE 15
 
-bool Type4NfcTagSTM24SR::openSession(bool force){
+bool Type4NfcTagSTM24SR::openSession(bool force) {
 
-	if(mSessionIsOpen)
+	if (mSessionIsOpen)
 		return true;
 	//else
-	if(force)
+	if (force)
 		mDevice.KillSession();
 
-
-	int8_t nTrials=OPENSESSION_NTRIALS;
+	int8_t nTrials = OPENSESSION_NTRIALS;
 	NFC_StatusTypeDef status = NFC_ERROR;
-	while(status != NFC_OK && nTrials){
-		status = mDevice.GetSession( );
+	while (status != NFC_SUCCESS && nTrials) {
+		status = mDevice.GetSession();
 		nTrials--;
 	}
 
-	if (status != NFC_OK){
+	if (status != NFC_SUCCESS) {
 		return false;
-	}//else
+	} //else
 
 	//Select the NFC type 4 application
-	if(mDevice.SelectApplication()!=NFC_OK)
+	if (mDevice.SelectApplication() != NFC_SUCCESS)
 		return false;
 
-	if(mDevice.SelectCCfile()!=NFC_OK)
+	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_OK)
+	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]);
+	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_OK)
+	if (mDevice.SelectNDEFfile(ndefFileId) != NFC_SUCCESS)
 		return false;
 
-	mSessionIsOpen=true;
+	mSessionIsOpen = true;
 	return true;
 }
 
-
-bool Type4NfcTagSTM24SR::closeSession(){
+bool Type4NfcTagSTM24SR::closeSession() {
 
 	//no open session
-	if(!mSessionIsOpen)
+	if (!mSessionIsOpen)
 		return true;
 
 	//close the CC file
-	if(mDevice.Deselect()!=NFC_OK)
+	if (mDevice.Deselect() != NFC_SUCCESS)
 		return false;
 
-	mSessionIsOpen=false;
+	mSessionIsOpen = false;
 	return true;
 }
 
-bool Type4NfcTagSTM24SR::writeByte(uint8_t *buffer,uint16_t length){
+bool Type4NfcTagSTM24SR::writeByte(uint8_t *buffer, uint16_t length) {
 
-	NFC_StatusTypeDef status=NFC_OK;
-	uint16_t offset=0;
+	NFC_StatusTypeDef status = NFC_SUCCESS;
+	uint16_t offset = 0;
 	bool prevSessionStatus = mSessionIsOpen;
-	if(!prevSessionStatus){
+	if (!prevSessionStatus) {
 		//try to acquire a session or fail
-		if(openSession(false))
+		if (openSession(false))
 			return false;
-	}//if
+	} //if
 
-	if( length > mMaxWriteBytes){
-		do{
-			status = mDevice.UpdateBinary (  offset, mMaxWriteBytes , buffer);
+	if (length > mMaxWriteBytes) {
+		do {
+			status = mDevice.UpdateBinary(offset, mMaxWriteBytes, buffer);
 			offset += mMaxWriteBytes;
 			buffer += mMaxWriteBytes;
 			length -= mMaxWriteBytes;
-		}while( length > mMaxWriteBytes && status == NFC_OK);
-	}//if
+		} while (length > mMaxWriteBytes && status == NFC_SUCCESS);
+	} //if
 
 	//finish to write the buffer
-	if( status == NFC_OK && mMaxWriteBytes)
-		status = mDevice.UpdateBinary (  offset,length  , buffer);
+	if (status == NFC_SUCCESS && mMaxWriteBytes)
+		status = mDevice.UpdateBinary(offset, length, buffer);
 
-	if(status==NFC_OK){
-		if(!prevSessionStatus) // if the session was closed, try close it
+	if (status == NFC_SUCCESS) {
+		if (!prevSessionStatus) // if the session was closed, try close it
 			return closeSession();
 		else
 			return true;
-	}else
+	} 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;
+}
+