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
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 .
Diff: Type4NfcTagSTM24SR.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;
+}
+
