This program is for reading and writing from /to MIFARE Classic 1k ,MIFARE Ultralight MF0ICU1,MIFARE Ultralight NTAG213,MIFARE Ultralight NTAG203

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
sheralikhan
Date:
Thu May 25 07:16:28 2017 +0000
Parent:
1:27fb38198323
Child:
3:f9ed412458d5
Commit message:
MFRC522 read and write function

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Thu Apr 13 05:33:25 2017 +0000
+++ b/main.cpp	Thu May 25 07:16:28 2017 +0000
@@ -33,7 +33,7 @@
 DigitalOut LedGreen(D7);
 DigitalOut LedRed(D6);
 DigitalOut LedYellow(D5);
-
+char save[1024];
 //Serial connection to PC for output
 Serial pc(USBTX, USBRX);
 
@@ -43,14 +43,15 @@
 void DumpMifareClassicToSerial      (MFRC522::Uid *uid, uint8_t piccType, MFRC522::MIFARE_Key *key);
 void DumpMifareClassicSectorToSerial(MFRC522::Uid *uid, MFRC522::MIFARE_Key *key, uint8_t sector);
 void DumpMifareUltralightToSerial   (void);
-
+void writeDataUL(void);
+void writeDataClassic1k(void);
+uint8_t page;
 /**
  * Dumps debug info about the selected PICC to Serial.
  * On success the PICC is halted after dumping the data.
  * For MIFARE Classic the factory default key of 0xFFFFFFFFFFFF is tried.
  */
 
-
 void DumpToSerial(MFRC522::Uid *uid)
 {
     MFRC522::MIFARE_Key key;
@@ -65,7 +66,7 @@
     // Print Card type
     uint8_t piccType = RfChip.PICC_GetType(RfChip.uid.sak);
     printf("PICC Type: %s \n\r", RfChip.PICC_GetTypeName(piccType));
-    wait_ms(1000);
+    wait_ms(50);
 
     // Dump contents
     switch (piccType) {
@@ -224,11 +225,7 @@
 
         // Dump data
         for (uint8_t index = 0; index < 16; index++) {
-            printf(" %3d", buffer[index]);
-//      if ((index % 4) == 3)
-//      {
-//        printf(" ");
-//      }
+            printf("  %2X", buffer[index]);
         }
 
         // Parse sector trailer data
@@ -273,7 +270,6 @@
                    buffer[1],
                    buffer[0]);
         }
-
         printf("\n\r");
     }
 
@@ -289,10 +285,9 @@
     uint8_t byteCount;
     uint8_t buffer[18];
     uint8_t i;
-
-    printf("Page   0  1  2  3");
+    printf("Page   0   1   2   3 \n");
     // Try the mpages of the original Ultralight. Ultralight C has more pages.
-    for (uint8_t page = 0; page < 16; page +=4) {
+    for ( page = 0; page < 16; page +=4) {
         // Read pages
         byteCount = sizeof(buffer);
         status = RfChip.MIFARE_Read(page, buffer, &byteCount);
@@ -315,6 +310,862 @@
     }
 } // End PICC_DumpMifareUltralightToSerial()
 
+
+//Create function for writting data
+void WriteToRfidTag(MFRC522::Uid *uid)
+{
+
+    MFRC522::MIFARE_Key key;
+
+    // Print Card UID
+    printf("Card UID: ");
+    for (uint8_t i = 0; i < RfChip.uid.size; i++) {
+        printf(" %X", RfChip.uid.uidByte[i]);
+    }
+    printf("\n\r");
+
+    // Print Card type
+    uint8_t piccType = RfChip.PICC_GetType(RfChip.uid.sak);
+    printf("PICC Type: %s \n\r", RfChip.PICC_GetTypeName(piccType));
+    wait_ms(50);
+
+    // Dump contents
+    switch (piccType) {
+        case MFRC522::PICC_TYPE_MIFARE_MINI:
+        case MFRC522::PICC_TYPE_MIFARE_1K:
+        case MFRC522::PICC_TYPE_MIFARE_4K:
+            // All keys are set to FFFFFFFFFFFFh at chip delivery from the factory.
+            for (uint8_t i = 0; i < 6; i++) {
+                key.keyByte[i] = 0xFF;
+            }
+            writeDataClassic1k();  // WriteToRfidTag(&(RfChip.uid))
+            break;
+
+        case MFRC522::PICC_TYPE_MIFARE_UL:
+            writeDataUL();
+            break;
+        case MFRC522::PICC_TYPE_TNP3XXX:
+            printf("Dumping memory contents not implemented for that PICC type. \n\r");
+            break;
+        case MFRC522::PICC_TYPE_ISO_14443_4:
+        case MFRC522::PICC_TYPE_ISO_18092:
+        case MFRC522::PICC_TYPE_MIFARE_PLUS:
+            printf("Dumping memory contents not implemented for that PICC type. \n\r");
+            break;
+
+        case MFRC522::PICC_TYPE_UNKNOWN:
+        case MFRC522::PICC_TYPE_NOT_COMPLETE:
+        default:
+            break; // No memory dump here
+    }
+
+    printf("\n\r");
+
+}
+
+
+void writeDataClassic1k()
+{
+    //Declaration of MFRC522 key
+    MFRC522::MIFARE_Key key;
+    //Declaration of MFRC522 status
+    MFRC522::StatusCode status;
+    uint8_t buffer[16];
+    uint8_t block;
+
+
+    while(true) {
+
+        for (uint8_t i = 0; i < 6; i++) {
+            key.keyByte[i] = 0xFF;
+        }
+        // Look for new cards
+        if ( ! RfChip.PICC_IsNewCardPresent()) {
+            continue;
+        }
+
+        // Select one of the cards
+        if ( ! RfChip.PICC_ReadCardSerial()) {
+            continue;
+        }
+        printf("\n\r");
+
+
+        pc.printf("Enter 1 block: "); // Enter Data
+
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 1;
+
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedYellow = 1;
+            continue;
+        } else {
+            LedGreen=1;
+            pc.printf("Succesfully Written to block 1: ");
+        }
+        printf("\n\r");
+        pc.printf("Enter 2 block: "); // Enter Data
+
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 2;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedYellow = 1;
+            continue;
+        } else {
+            LedGreen = 1;
+            pc.printf("Succesfully Written to block 2: ");
+        }
+        printf("\n\r");
+        pc.printf("Enter 4 block: "); // Enter Data
+
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 4;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedYellow = 1;
+            continue;
+        } else {
+            LedGreen = 1;
+            pc.printf("Succesfully Written to block 4: ");
+        }
+        printf("\n\r");
+        pc.printf("Enter 5 block: "); // Enter Data
+
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 5;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedYellow=1;
+            continue;
+        } else {
+            LedGreen = 1;
+            pc.printf("Succesfully Written to block 5: ");
+        }
+        printf("\n\r");
+        pc.printf("Enter 6 block: "); // Enter Data
+
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 6;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedYellow=1;
+            continue;
+        } else {
+            LedGreen=1;
+            pc.printf("Succesfully Written to block 6: ");
+        }
+        printf("\n\r");
+        printf("\n\r");
+        pc.printf("Enter 8 block: "); // Enter Data
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 8;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        } else {
+            LedYellow=1;
+            pc.printf("Succesfully Written to tag: ");
+        }
+        printf("\n\r");
+        pc.printf("Enter 9 block: "); // Enter Data
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 9;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        } else {
+            LedYellow=1;
+            pc.printf("Succesfully Written to tag: ");
+        }
+        printf("\n\r");
+        pc.printf("Enter 10 block: "); // Enter Data
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 10;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        } else {
+            LedYellow=1;
+            pc.printf("Succesfully Written to tag: ");
+        }
+        printf("\n\r");
+        pc.printf("Enter 12 block: "); // Enter Data
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 12;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        } else {
+            LedYellow=1;
+            pc.printf("Succesfully Written to tag: ");
+        }
+        printf("\n\r");
+        pc.printf("Enter 13 block: "); // Enter Data
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 13;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        } else {
+            LedYellow=1;
+            pc.printf("Succesfully Written to tag: ");
+        }
+        printf("\n\r");
+        pc.printf("Enter 14 block: "); // Enter Data
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 14;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        } else {
+            LedYellow=1;
+            pc.printf("Succesfully Written to tag: ");
+        }
+
+
+        printf("\n\r");
+        pc.printf("Enter 16 block: "); // Enter Data
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 16;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        } else {
+            LedYellow=1;
+            pc.printf("Succesfully Written to tag: ");
+        }
+        printf("\n\r");
+        pc.printf("Enter 17 block: "); // Enter Data
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 17;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        } else {
+            LedYellow=1;
+            pc.printf("Succesfully Written to tag: ");
+        }
+        printf("\n\r");
+        pc.printf("Enter 18 block: "); // Enter Data
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 18;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        } else {
+            LedYellow=1;
+            pc.printf("Succesfully Written to tag: ");
+        }
+
+        printf("\n\r");
+        pc.printf("Enter 20 block: "); // Enter Data
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 20;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        } else {
+            LedYellow=1;
+            pc.printf("Succesfully Written to tag: ");
+        }
+        printf("\n\r");
+        pc.printf("Enter 21 block: "); // Enter Data
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 21;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        } else {
+            LedYellow=1;
+            pc.printf("Succesfully Written to tag: ");
+        }
+        printf("\n\r");
+        pc.printf("Enter 22 block: "); // Enter Data
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 22;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        } else {
+            LedYellow=1;
+            pc.printf("Succesfully Written to tag: ");
+        }
+        printf("\n\r");
+        pc.printf("Enter 24 block: "); // Enter Data
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 24;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        } else {
+            LedYellow=1;
+            pc.printf("Succesfully Written to tag: ");
+        }
+        printf("\n\r");
+        pc.printf("Enter 25 block: "); // Enter Data
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 25;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        } else {
+            LedYellow=1;
+            pc.printf("Succesfully Written to tag: ");
+        }
+        printf("\n\r");
+        pc.printf("Enter 26 block: "); // Enter Data
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 26;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        } else {
+            LedYellow=1;
+            pc.printf("Succesfully Written to tag: ");
+        }
+        printf("\n\r");
+        pc.printf("Enter 28 block: "); // Enter Data
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 28;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        } else {
+            LedYellow=1;
+            pc.printf("Succesfully Written to tag: ");
+        }
+        printf("\n\r");
+        pc.printf("Enter 29 block: "); // Enter Data
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 29;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        } else {
+            LedYellow=1;
+            pc.printf("Succesfully Written to tag: ");
+        }
+        printf("\n\r");
+        pc.printf("Enter 30 block: "); // Enter Data
+        for(uint8_t i = 0; i < 16; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        block = 30;
+        pc.printf("Authenticating using key A...");
+        status = (MFRC522::StatusCode)RfChip.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(RfChip.uid));
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("PCD_Authenticate() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        }
+
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_Write(block, buffer, 16);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedRed=1;
+            continue;
+        } else {
+            LedYellow=1;
+            pc.printf("Succesfully Written to tag: ");
+        }
+        printf("\n\r");
+        pc.printf("Written to Classic card successfully....\n\r");
+        RfChip.PICC_HaltA();
+        RfChip.PCD_StopCrypto1();
+        break;
+        // switchcase();
+    }
+
+
+} // end of void writeDataClassic1k()
+
+
+
+void writeDataUL()
+{
+    //Declaration of MFRC522 status
+    MFRC522::StatusCode status;
+    uint8_t buffer[16];
+    uint8_t page;
+
+    while(true) {
+
+        pc.printf("Enter 4 page: "); // Enter Data
+
+        for(uint8_t i = 0; i < 4; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        page = 4;
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_UltralightWrite(page, buffer, 4);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedYellow=1;
+            continue;
+        } else {
+            LedGreen=1;
+            pc.printf("Succesfully Written to page 4: ");
+        }
+        printf("\n\r");
+
+        pc.printf("Enter 5 page: "); // Enter Data
+
+        for(uint8_t i = 0; i < 4; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        page = 5;
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_UltralightWrite(page, buffer, 4);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedYellow=1;
+            continue;
+        } else {
+            LedGreen=1;
+            pc.printf("Succesfully Written to page 5: ");
+        }
+        printf("\n\r");
+
+        pc.printf("Enter 6 page: "); // Enter Data
+
+        for(uint8_t i = 0; i < 4; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        page = 6;
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_UltralightWrite(page, buffer, 4);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedYellow=1;
+            continue;
+        } else {
+            LedGreen=1;
+            pc.printf("Succesfully Written to page 6: ");
+        }
+        printf("\n\r");
+
+        pc.printf("Enter 7 page: "); // Enter Data
+
+        for(uint8_t i = 0; i < 4; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        page = 7;
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_UltralightWrite(page, buffer, 4);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedYellow=1;
+            continue;
+        } else {
+            LedGreen=1;
+            pc.printf("Succesfully Written to page 7: ");
+        }
+        printf("\n\r");
+
+        pc.printf("Enter 8 page: "); // Enter Data
+
+        for(uint8_t i = 0; i < 4; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        page = 8;
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_UltralightWrite(page, buffer, 4);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedYellow=1;
+            continue;
+        } else {
+            LedGreen=1;
+            pc.printf("Succesfully Written to page 8: ");
+        }
+        printf("\n\r");
+
+        pc.printf("Enter 9 page: "); // Enter Data
+
+        for(uint8_t i = 0; i < 4; i++) {
+            buffer[i] = pc.putc(pc.getc());
+        }
+        printf("\n\r");
+        page = 9;
+        // Write block
+        status = (MFRC522::StatusCode)RfChip.MIFARE_UltralightWrite(page, buffer, 4);
+        if (status != MFRC522::STATUS_OK) {
+            pc.printf("MIFARE_Write() failed: ");
+            pc.printf(RfChip.GetStatusCodeName(status));
+            LedYellow=1;
+            continue;
+        } else {
+            LedGreen=1;
+            pc.printf("Succesfully Written to page 9: ");
+        }
+        printf("Written Succefully to ultralight ......\n\r");
+        RfChip.PICC_HaltA();
+        break;
+    }
+
+} //End writeDataUL()
+
+
+
 int main()
 {
     /* Set debug UART speed */
@@ -329,31 +1180,43 @@
     uint8_t temp = RfChip.PCD_ReadRegister(MFRC522::VersionReg);
     printf("MFRC522 version: %d\n\r", temp & 0x07);
     printf("\n\r");
+    pc.printf("Enter 1 Reading \n");
+    pc.printf("Enter 2 Writing \n");
 
-    while(1) {
-        LedRed   = 1;
+
+    while(true) {
+
+        LedRed   = 0;
         LedGreen = 1;
+        LedYellow = 0;
 
         // Look for new cards
         if ( ! RfChip.PICC_IsNewCardPresent()) {
-            wait_ms(500);
+            wait_ms(50);
             continue;
         }
-
-        LedRed   = 0;
-
+        LedGreen   = 0;
+        wait_ms(50);
         // Select one of the cards
         if ( ! RfChip.PICC_ReadCardSerial()) {
-            wait_ms(500);
+            wait_ms(50);
             continue;
         }
-
-        LedRed   = 1;
-        LedGreen = 0;
+        LedGreen = 1;
+        wait_ms(50);
+        char ch=pc.getc();
+        if(ch=='1') {
+            pc.printf("reading..........\n");
+            // Dump debug info about the card. PICC_HaltA() is automatically called.
+            DumpToSerial(&(RfChip.uid));
+            wait_ms(20);
+        } else if(ch=='2') {
+            pc.printf("Writing..... \n");
+            //Calling WriteToRfidTag()
+            WriteToRfidTag(&(RfChip.uid));
+            wait_ms(50);
 
-        // Dump debug info about the card. PICC_HaltA() is automatically called.
-        DumpToSerial(&(RfChip.uid));
-        wait_ms(200);
+        }
 
     }
 }
\ No newline at end of file