]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - armsrc/mifarecmd.c
Patch by jonor, fixes so uart_receive does not block when data is continuosly receive...
[proxmark3-svn] / armsrc / mifarecmd.c
index e7850b3f2c316bd07d4380cd6152518da935467c..02470702a8207d82865c1903b8d6548330d512e5 100644 (file)
@@ -28,7 +28,7 @@ void MifareReadBlock(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)
        // variables\r
        byte_t isOK = 0;\r
        byte_t dataoutbuf[16];\r
-       uint8_t uid[8];\r
+       uint8_t uid[10];\r
        uint32_t cuid;\r
        struct Crypto1State mpcs = {0, 0};\r
        struct Crypto1State *pcs;\r
@@ -82,7 +82,7 @@ void MifareReadBlock(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)
 //     memcpy(ack.d.asBytes, dataoutbuf, 16);\r
        \r
        LED_B_ON();\r
-  cmd_send(CMD_ACK,isOK,0,0,0,0);\r
+  cmd_send(CMD_ACK,isOK,0,0,dataoutbuf,16);\r
 //     UsbSendPacket((uint8_t *)&ack, sizeof(UsbCommand));\r
        LED_B_OFF();\r
 \r
@@ -109,7 +109,7 @@ void MifareReadSector(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)
        // variables\r
        byte_t isOK = 0;\r
        byte_t dataoutbuf[16 * 4];\r
-       uint8_t uid[8];\r
+       uint8_t uid[10];\r
        uint32_t cuid;\r
        struct Crypto1State mpcs = {0, 0};\r
        struct Crypto1State *pcs;\r
@@ -208,7 +208,7 @@ void MifareWriteBlock(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)
        \r
        // variables\r
        byte_t isOK = 0;\r
-       uint8_t uid[8];\r
+       uint8_t uid[10];\r
        uint32_t cuid;\r
        struct Crypto1State mpcs = {0, 0};\r
        struct Crypto1State *pcs;\r
@@ -298,7 +298,7 @@ void MifareNested(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain)
        // variables\r
        int rtr, i, j, m, len;\r
        int davg, dmin, dmax;\r
-       uint8_t uid[8];\r
+       uint8_t uid[10];\r
        uint32_t cuid, nt1, nt2, nttmp, nttest, par, ks1;\r
        uint8_t par_array[4];\r
        nestedVector nvector[NES_MAX_INFO + 1][11];\r
@@ -493,7 +493,6 @@ void MifareNested(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain)
                        }\r
        \r
                        LED_B_ON();\r
-//                     SpinDelay(100);\r
       cmd_send(CMD_ACK,0,ncount,targetBlockNo + (targetKeyType * 0x100),buf,48);\r
 //                     UsbSendPacket((uint8_t *)&ack, sizeof(UsbCommand));\r
                        LED_B_OFF();\r
@@ -507,7 +506,6 @@ void MifareNested(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain)
 //     memset(ack.d.asBytes, 0x00, sizeof(ack.d.asBytes));\r
        \r
        LED_B_ON();\r
-//     SpinDelay(300);\r
 //     UsbSendPacket((uint8_t *)&ack, sizeof(UsbCommand));\r
   cmd_send(CMD_ACK,1,0,0,0,0);\r
        LED_B_OFF();\r
@@ -536,7 +534,7 @@ void MifareChkKeys(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)
        // variables\r
        int i;\r
        byte_t isOK = 0;\r
-       uint8_t uid[8];\r
+       uint8_t uid[10];\r
        uint32_t cuid;\r
        struct Crypto1State mpcs = {0, 0};\r
        struct Crypto1State *pcs;\r
@@ -649,7 +647,7 @@ void MifareECardLoad(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datai
        // variables\r
        byte_t dataoutbuf[16];\r
        byte_t dataoutbuf2[16];\r
-       uint8_t uid[8];\r
+       uint8_t uid[10];\r
 \r
        // clear trace\r
        iso14a_clear_trace();\r
@@ -761,11 +759,11 @@ void MifareCSetBlock(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datai
        \r
        // variables\r
        byte_t isOK = 0;\r
-       uint8_t uid[8];\r
+       uint8_t uid[10];\r
        uint8_t d_block[18];\r
        uint32_t cuid;\r
        \r
-       memset(uid, 0x00, 8);\r
+       memset(uid, 0x00, 10);\r
        uint8_t* receivedAnswer = mifare_get_bigbufptr();\r
        \r
        if (workFlags & 0x08) {\r
@@ -801,7 +799,7 @@ void MifareCSetBlock(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datai
        \r
                // reset chip\r
                if (needWipe){\r
-                       ReaderTransmitShort(wupC1);\r
+      ReaderTransmitBitsPar(wupC1,7,0);\r
                        if(!ReaderReceive(receivedAnswer) || (receivedAnswer[0] != 0x0a)) {\r
                                if (MF_DBGLEVEL >= 1)   Dbprintf("wupC1 error");\r
                                break;\r
@@ -821,7 +819,7 @@ void MifareCSetBlock(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datai
 \r
                // write block\r
                if (workFlags & 0x02) {\r
-                       ReaderTransmitShort(wupC1);\r
+      ReaderTransmitBitsPar(wupC1,7,0);\r
                        if(!ReaderReceive(receivedAnswer) || (receivedAnswer[0] != 0x0a)) {\r
                                if (MF_DBGLEVEL >= 1)   Dbprintf("wupC1 error");\r
                                break;\r
@@ -863,8 +861,14 @@ void MifareCSetBlock(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datai
 //     if (isOK) memcpy(ack.d.asBytes, uid, 4);\r
        \r
        // add trace trailer\r
-       memset(uid, 0x44, 4);\r
-       LogTrace(uid, 4, 0, 0, TRUE);\r
+       /**\r
+       *       Removed by Martin, the uid is overwritten with 0x44, \r
+       *       which can 't be intended. \r
+       *\r
+       *       memset(uid, 0x44, 4);\r
+       *       LogTrace(uid, 4, 0, 0, TRUE);\r
+       **/\r
+       \r
 \r
        LED_B_ON();\r
   cmd_send(CMD_ACK,isOK,0,0,uid,4);\r
@@ -919,7 +923,7 @@ void MifareCGetBlock(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datai
 \r
        while (true) {\r
                if (workFlags & 0x02) {\r
-                       ReaderTransmitShort(wupC1);\r
+      ReaderTransmitBitsPar(wupC1,7,0);\r
                        if(!ReaderReceive(receivedAnswer) || (receivedAnswer[0] != 0x0a)) {\r
                                if (MF_DBGLEVEL >= 1)   Dbprintf("wupC1 error");\r
                                break;\r
@@ -954,9 +958,13 @@ void MifareCGetBlock(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datai
 //     if (isOK) memcpy(ack.d.asBytes, data, 18);\r
        \r
        // add trace trailer\r
-       memset(data, 0x44, 4);\r
-       LogTrace(data, 4, 0, 0, TRUE);\r
-\r
+       /*\r
+       * Removed by Martin, this piece of overwrites the 'data' variable \r
+       * which is sent two lines down, and is obviously not correct. \r
+       * \r
+       * memset(data, 0x44, 4);\r
+       * LogTrace(data, 4, 0, 0, TRUE);\r
+       */\r
        LED_B_ON();\r
   cmd_send(CMD_ACK,isOK,0,0,data,18);\r
 //     UsbSendPacket((uint8_t *)&ack, sizeof(UsbCommand));\r
Impressum, Datenschutz