Takes memory from a Nucleo NFC01A1 and sends it via I2C.
Dependencies: mbed NUCLEO-NFC01A1 lib_NFC_M24SR lib_NFC_NDEF
main.cpp@0:bd569d022b29, 2015-08-10 (annotated)
- Committer:
- jbriede
- Date:
- Mon Aug 10 15:01:38 2015 +0000
- Revision:
- 0:bd569d022b29
This program reads the memory from a Nucleo NFC01A1 and sends it via I2C.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jbriede | 0:bd569d022b29 | 1 | // header |
jbriede | 0:bd569d022b29 | 2 | #include "mbed.h" |
jbriede | 0:bd569d022b29 | 3 | #include "lib_TagType4.h" |
jbriede | 0:bd569d022b29 | 4 | #include "lib_NDEF.h" |
jbriede | 0:bd569d022b29 | 5 | #include "I2C.h" |
jbriede | 0:bd569d022b29 | 6 | #define BITSIZE 100 |
jbriede | 0:bd569d022b29 | 7 | #define MAXMEMORY 8190 //pretty sure.... |
jbriede | 0:bd569d022b29 | 8 | |
jbriede | 0:bd569d022b29 | 9 | Serial pc(SERIAL_TX, SERIAL_RX); |
jbriede | 0:bd569d022b29 | 10 | |
jbriede | 0:bd569d022b29 | 11 | I2C isquaredc(D14,D15); // I2C pins are D14 and D15 |
jbriede | 0:bd569d022b29 | 12 | |
jbriede | 0:bd569d022b29 | 13 | DigitalOut myled(LED1); |
jbriede | 0:bd569d022b29 | 14 | //various LEDs on NFC Shield |
jbriede | 0:bd569d022b29 | 15 | DigitalOut nfcled1(D5); |
jbriede | 0:bd569d022b29 | 16 | DigitalOut nfcled2(D4); |
jbriede | 0:bd569d022b29 | 17 | DigitalOut nfcled3(D2); |
jbriede | 0:bd569d022b29 | 18 | //acknowledgement pins |
jbriede | 0:bd569d022b29 | 19 | DigitalOut indicatorM2S(D13); |
jbriede | 0:bd569d022b29 | 20 | DigitalIn indicatorS2M(D10); |
jbriede | 0:bd569d022b29 | 21 | DigitalIn NFC_Written(D12); |
jbriede | 0:bd569d022b29 | 22 | |
jbriede | 0:bd569d022b29 | 23 | int main() { |
jbriede | 0:bd569d022b29 | 24 | // Create NDEF buffer |
jbriede | 0:bd569d022b29 | 25 | uint8_t NDEF_Buffer[BITSIZE], Zero_Buffer[MAXMEMORY]; |
jbriede | 0:bd569d022b29 | 26 | memset(NDEF_Buffer, 0, sizeof(NDEF_Buffer)); |
jbriede | 0:bd569d022b29 | 27 | memset(Zero_Buffer, 0, sizeof(Zero_Buffer)); // will not change |
jbriede | 0:bd569d022b29 | 28 | |
jbriede | 0:bd569d022b29 | 29 | // start up info... the following code is necessary to read the NFC shield |
jbriede | 0:bd569d022b29 | 30 | sCCFileInfo CCFileStruct; |
jbriede | 0:bd569d022b29 | 31 | sCCFileInfo *pCCFile; |
jbriede | 0:bd569d022b29 | 32 | pCCFile = &CCFileStruct; |
jbriede | 0:bd569d022b29 | 33 | |
jbriede | 0:bd569d022b29 | 34 | uint16_t status = SUCCESS; |
jbriede | 0:bd569d022b29 | 35 | uint8_t CCBuffer[15]; |
jbriede | 0:bd569d022b29 | 36 | |
jbriede | 0:bd569d022b29 | 37 | status = TagT4Init( CCBuffer, sizeof(CCBuffer)); |
jbriede | 0:bd569d022b29 | 38 | |
jbriede | 0:bd569d022b29 | 39 | if( status == SUCCESS) |
jbriede | 0:bd569d022b29 | 40 | { |
jbriede | 0:bd569d022b29 | 41 | pCCFile->NumberCCByte = (uint16_t) ((CCBuffer[0x00]<<8) | CCBuffer[0x01]); |
jbriede | 0:bd569d022b29 | 42 | pCCFile->Version = CCBuffer[0x02]; |
jbriede | 0:bd569d022b29 | 43 | pCCFile->MaxReadByte = (uint16_t) ((CCBuffer[0x03]<<8) | CCBuffer[0x04]); |
jbriede | 0:bd569d022b29 | 44 | pCCFile->MaxWriteByte = (uint16_t) ((CCBuffer[0x05]<<8) | CCBuffer[0x06]); |
jbriede | 0:bd569d022b29 | 45 | pCCFile->TField = CCBuffer[0x07]; |
jbriede | 0:bd569d022b29 | 46 | pCCFile->LField = CCBuffer[0x08]; |
jbriede | 0:bd569d022b29 | 47 | pCCFile->FileID = (uint16_t) ((CCBuffer[0x09]<<8) | CCBuffer[0x0A]); |
jbriede | 0:bd569d022b29 | 48 | pCCFile->NDEFFileMaxSize = (uint16_t) ((CCBuffer[0x0B]<<8) | CCBuffer[0x0C]); |
jbriede | 0:bd569d022b29 | 49 | pCCFile->ReadAccess = CCBuffer[0x0D]; |
jbriede | 0:bd569d022b29 | 50 | pCCFile->WriteAccess = CCBuffer[0x0E]; |
jbriede | 0:bd569d022b29 | 51 | } |
jbriede | 0:bd569d022b29 | 52 | |
jbriede | 0:bd569d022b29 | 53 | // open NDEF session |
jbriede | 0:bd569d022b29 | 54 | OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION); |
jbriede | 0:bd569d022b29 | 55 | |
jbriede | 0:bd569d022b29 | 56 | // write all zeros to NDEF memory |
jbriede | 0:bd569d022b29 | 57 | NDEF_WriteNDEF(Zero_Buffer); |
jbriede | 0:bd569d022b29 | 58 | |
jbriede | 0:bd569d022b29 | 59 | // close NDEF session |
jbriede | 0:bd569d022b29 | 60 | CloseNDEFSession(pCCFile->FileID); |
jbriede | 0:bd569d022b29 | 61 | |
jbriede | 0:bd569d022b29 | 62 | // creat while loop |
jbriede | 0:bd569d022b29 | 63 | |
jbriede | 0:bd569d022b29 | 64 | |
jbriede | 0:bd569d022b29 | 65 | indicatorM2S = 0; |
jbriede | 0:bd569d022b29 | 66 | |
jbriede | 0:bd569d022b29 | 67 | pc.printf("init \n"); |
jbriede | 0:bd569d022b29 | 68 | while(1) { |
jbriede | 0:bd569d022b29 | 69 | if (NFC_Written==0) { |
jbriede | 0:bd569d022b29 | 70 | pc.printf("session\n"); |
jbriede | 0:bd569d022b29 | 71 | wait(4); |
jbriede | 0:bd569d022b29 | 72 | //open NDEF session |
jbriede | 0:bd569d022b29 | 73 | OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION); |
jbriede | 0:bd569d022b29 | 74 | |
jbriede | 0:bd569d022b29 | 75 | // read NDEF |
jbriede | 0:bd569d022b29 | 76 | NDEF_ReadNDEF(NDEF_Buffer); |
jbriede | 0:bd569d022b29 | 77 | |
jbriede | 0:bd569d022b29 | 78 | // close NDEF session |
jbriede | 0:bd569d022b29 | 79 | CloseNDEFSession(pCCFile->FileID); |
jbriede | 0:bd569d022b29 | 80 | |
jbriede | 0:bd569d022b29 | 81 | |
jbriede | 0:bd569d022b29 | 82 | // if NDEF is not all 0s, take the store memory in variable |
jbriede | 0:bd569d022b29 | 83 | if ((memcmp(Zero_Buffer, NDEF_Buffer, sizeof(NDEF_Buffer)))!=0){ |
jbriede | 0:bd569d022b29 | 84 | |
jbriede | 0:bd569d022b29 | 85 | pc.printf("Tag Identified...\n"); |
jbriede | 0:bd569d022b29 | 86 | |
jbriede | 0:bd569d022b29 | 87 | indicatorM2S = 1; // Master indicates to slave that there is a message waiting |
jbriede | 0:bd569d022b29 | 88 | |
jbriede | 0:bd569d022b29 | 89 | pc.printf("M2S set HIGH...\n"); |
jbriede | 0:bd569d022b29 | 90 | |
jbriede | 0:bd569d022b29 | 91 | char send[BITSIZE]; // converting to char in order to send via i2c |
jbriede | 0:bd569d022b29 | 92 | memcpy(send, NDEF_Buffer, BITSIZE); |
jbriede | 0:bd569d022b29 | 93 | |
jbriede | 0:bd569d022b29 | 94 | while(1){ // waiting for slave to indicate it is ready to receive message |
jbriede | 0:bd569d022b29 | 95 | if (indicatorS2M.read() == 1) |
jbriede | 0:bd569d022b29 | 96 | |
jbriede | 0:bd569d022b29 | 97 | break; |
jbriede | 0:bd569d022b29 | 98 | // probably should add some type of time out function |
jbriede | 0:bd569d022b29 | 99 | } |
jbriede | 0:bd569d022b29 | 100 | pc.printf("S2M awknowledgement recieved...\n"); |
jbriede | 0:bd569d022b29 | 101 | //Send data via I2C |
jbriede | 0:bd569d022b29 | 102 | isquaredc.write(0x10, send, BITSIZE, 1); |
jbriede | 0:bd569d022b29 | 103 | pc.printf("I2C.write...\n"); |
jbriede | 0:bd569d022b29 | 104 | // turn off M2S signal |
jbriede | 0:bd569d022b29 | 105 | indicatorM2S =0; |
jbriede | 0:bd569d022b29 | 106 | |
jbriede | 0:bd569d022b29 | 107 | // write all 0s to the NFC memory |
jbriede | 0:bd569d022b29 | 108 | OpenNDEFSession(pCCFile->FileID, ASK_FOR_SESSION); |
jbriede | 0:bd569d022b29 | 109 | NDEF_WriteNDEF(Zero_Buffer); |
jbriede | 0:bd569d022b29 | 110 | CloseNDEFSession(pCCFile->FileID); |
jbriede | 0:bd569d022b29 | 111 | memset(NDEF_Buffer, 0, sizeof(NDEF_Buffer)); |
jbriede | 0:bd569d022b29 | 112 | } |
jbriede | 0:bd569d022b29 | 113 | } |
jbriede | 0:bd569d022b29 | 114 | } |
jbriede | 0:bd569d022b29 | 115 | } |