]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmdlft55xx.c
lf ask consolidation
[proxmark3-svn] / client / cmdlft55xx.c
index e0f89153d5f5e779eca02d784b1ef1ede7992fe2..564ad29dbeb3ba29ccd98cb1c2c79f83a0d7a804 100644 (file)
@@ -262,11 +262,10 @@ int CmdT55xxReadBlock(const char *Cmd) {
 \r
 bool DecodeT55xxBlock(){\r
        \r
-       char buf[10] = {0x00};\r
+       char buf[30] = {0x00};\r
        char *cmdStr = buf;\r
        int ans = 0;\r
        uint8_t bitRate[8] = {8,16,32,40,50,64,100,128};\r
-\r
        DemodBufferLen = 0x00;\r
 \r
        //trim 1/2 a clock from beginning\r
@@ -290,7 +289,7 @@ bool DecodeT55xxBlock(){
                        break;\r
                case DEMOD_ASK:\r
                        snprintf(cmdStr, sizeof(buf),"%d %d 0", bitRate[config.bitrate], config.inverted );\r
-                       ans = ASKmanDemod(cmdStr, FALSE, FALSE);\r
+                       ans = ASKDemod(cmdStr, FALSE, FALSE, 1);\r
                        break;\r
                case DEMOD_PSK1:\r
                        snprintf(cmdStr, sizeof(buf),"%d %d 0", bitRate[config.bitrate], config.inverted );\r
@@ -337,72 +336,79 @@ bool tryDetectModulation(){
        char cmdStr[8] = {0};\r
        uint8_t hits = 0;\r
        t55xx_conf_block_t tests[15];\r
-       \r
+       int bitRate=0;\r
        if (GetFskClock("", FALSE, FALSE)){ \r
                uint8_t fc1 = 0, fc2 = 0, clk=0;\r
                fskClocks(&fc1, &fc2, &clk, FALSE);\r
                sprintf(cmdStr,"%d", clk/2);\r
                CmdLtrim(cmdStr);\r
-               if ( FSKrawDemod("0 0", FALSE) && test(DEMOD_FSK, &tests[hits].offset)){\r
+               if ( FSKrawDemod("0 0", FALSE) && test(DEMOD_FSK, &tests[hits].offset, &bitRate)){\r
                        tests[hits].modulation = DEMOD_FSK;\r
                        if (fc1==8 && fc2 == 5)\r
                                tests[hits].modulation = DEMOD_FSK1a;\r
                        else if (fc1==10 && fc2 == 8)\r
                                tests[hits].modulation = DEMOD_FSK2;\r
-\r
+                       tests[hits].bitrate = bitRate;\r
                        tests[hits].inverted = FALSE;\r
                        tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
                        ++hits;\r
                }\r
-               if ( FSKrawDemod("0 1", FALSE) && test(DEMOD_FSK, &tests[hits].offset)) {\r
+               if ( FSKrawDemod("0 1", FALSE) && test(DEMOD_FSK, &tests[hits].offset, &bitRate)) {\r
                        tests[hits].modulation = DEMOD_FSK;\r
-                       if (fc1==8 && fc2 == 5)\r
+                       if (fc1 == 8 && fc2 == 5)\r
                                tests[hits].modulation = DEMOD_FSK1;\r
-                       else if (fc1==10 && fc2 == 8)\r
+                       else if (fc1 == 10 && fc2 == 8)\r
                                tests[hits].modulation = DEMOD_FSK2a;\r
 \r
+                       tests[hits].bitrate = bitRate;\r
                        tests[hits].inverted = TRUE;\r
                        tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
                        ++hits;\r
                }\r
        } else {\r
-               if ( ASKmanDemod("0 0 1", FALSE, FALSE) && test(DEMOD_ASK, &tests[hits].offset)) {\r
+               if ( ASKDemod("0 0 1", FALSE, FALSE, 1) && test(DEMOD_ASK, &tests[hits].offset, &bitRate)) {\r
                        tests[hits].modulation = DEMOD_ASK;\r
+                       tests[hits].bitrate = bitRate;\r
                        tests[hits].inverted = FALSE;\r
                        tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
                        ++hits;\r
-                       }\r
+               }\r
 \r
-               if ( ASKmanDemod("0 1 1", FALSE, FALSE)  && test(DEMOD_ASK, &tests[hits].offset)) {\r
+               if ( ASKDemod("0 1 1", FALSE, FALSE, 1)  && test(DEMOD_ASK, &tests[hits].offset, &bitRate)) {\r
                        tests[hits].modulation = DEMOD_ASK;\r
+                       tests[hits].bitrate = bitRate;\r
                        tests[hits].inverted = TRUE;\r
                        tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
                        ++hits;\r
-                       }\r
+               }\r
                \r
-               if ( NRZrawDemod("0 0 1", FALSE)  && test(DEMOD_NRZ, &tests[hits].offset)) {\r
+               if ( NRZrawDemod("0 0 1", FALSE)  && test(DEMOD_NRZ, &tests[hits].offset, &bitRate)) {\r
                        tests[hits].modulation = DEMOD_NRZ;\r
+                       tests[hits].bitrate = bitRate;\r
                        tests[hits].inverted = FALSE;\r
                        tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
                        ++hits;\r
                }\r
 \r
-               if ( NRZrawDemod("0 1 1", FALSE)  && test(DEMOD_NRZ, &tests[hits].offset)) {\r
+               if ( NRZrawDemod("0 1 1", FALSE)  && test(DEMOD_NRZ, &tests[hits].offset, &bitRate)) {\r
                        tests[hits].modulation = DEMOD_NRZ;\r
+                       tests[hits].bitrate = bitRate;\r
                        tests[hits].inverted = TRUE;\r
                        tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
                        ++hits;\r
-                       }\r
+               }\r
                \r
-               if ( PSKDemod("0 0 1", FALSE) && test(DEMOD_PSK1, &tests[hits].offset)) {\r
+               if ( PSKDemod("0 0 1", FALSE) && test(DEMOD_PSK1, &tests[hits].offset, &bitRate)) {\r
                        tests[hits].modulation = DEMOD_PSK1;\r
+                       tests[hits].bitrate = bitRate;\r
                        tests[hits].inverted = FALSE;\r
                        tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
                        ++hits;\r
                }\r
                \r
-               if ( PSKDemod("0 1 1", FALSE) && test(DEMOD_PSK1, &tests[hits].offset)) {\r
+               if ( PSKDemod("0 1 1", FALSE) && test(DEMOD_PSK1, &tests[hits].offset, &bitRate)) {\r
                        tests[hits].modulation = DEMOD_PSK1;\r
+                       tests[hits].bitrate = bitRate;\r
                        tests[hits].inverted = TRUE;\r
                        tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
                        ++hits;\r
@@ -411,8 +417,9 @@ bool tryDetectModulation(){
                // PSK2 - needs a call to psk1TOpsk2.\r
                if ( PSKDemod("0 0 1", FALSE)) {\r
                        psk1TOpsk2(DemodBuffer, DemodBufferLen);\r
-                       if (test(DEMOD_PSK2, &tests[hits].offset)){\r
+                       if (test(DEMOD_PSK2, &tests[hits].offset, &bitRate)){\r
                                tests[hits].modulation = DEMOD_PSK2;\r
+                               tests[hits].bitrate = bitRate;\r
                                tests[hits].inverted = FALSE;\r
                                tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
                                ++hits;\r
@@ -422,22 +429,25 @@ bool tryDetectModulation(){
                // PSK3 - needs a call to psk1TOpsk2.\r
                if ( PSKDemod("0 0 1", FALSE)) {\r
                        psk1TOpsk2(DemodBuffer, DemodBufferLen);\r
-                       if (test(DEMOD_PSK3, &tests[hits].offset)){\r
+                       if (test(DEMOD_PSK3, &tests[hits].offset, &bitRate)){\r
                                tests[hits].modulation = DEMOD_PSK3;\r
+                               tests[hits].bitrate = bitRate;\r
                                tests[hits].inverted = FALSE;\r
                                tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
                                ++hits;\r
                        }\r
                } // inverse waves does not affect this demod\r
        \r
-               if ( ASKbiphaseDemod("0 0 0 1", FALSE) && test(DEMOD_BI, &tests[hits].offset) ) {\r
+               if ( ASKbiphaseDemod("0 0 0 1", FALSE) && test(DEMOD_BI, &tests[hits].offset, &bitRate) ) {\r
                        tests[hits].modulation = DEMOD_BI;\r
+                       tests[hits].bitrate = bitRate;\r
                        tests[hits].inverted = FALSE;\r
                        tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
                        ++hits;\r
                }\r
-               if ( ASKbiphaseDemod("0 0 1 1", FALSE) && test(DEMOD_BIa, &tests[hits].offset) ) {\r
+               if ( ASKbiphaseDemod("0 0 1 1", FALSE) && test(DEMOD_BIa, &tests[hits].offset, &bitRate) ) {\r
                        tests[hits].modulation = DEMOD_BIa;\r
+                       tests[hits].bitrate = bitRate;\r
                        tests[hits].inverted = TRUE;\r
                        tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
                        ++hits;\r
@@ -445,6 +455,7 @@ bool tryDetectModulation(){
        }               \r
        if ( hits == 1) {\r
                config.modulation = tests[0].modulation;\r
+               config.bitrate = tests[0].bitrate;\r
                config.inverted = tests[0].inverted;\r
                config.offset = tests[0].offset;\r
                config.block0 = tests[0].block0;\r
@@ -504,35 +515,27 @@ bool testBitRate(uint8_t readRate, uint8_t mod){
                case DEMOD_FSK2:\r
                case DEMOD_FSK2a:\r
                        detRate = GetFskClock("",FALSE, FALSE); \r
-                       if (expected[readRate] == detRate) {\r
-                               config.bitrate = readRate;\r
+                       if (expected[readRate] == detRate) \r
                                return TRUE;\r
-                       }\r
                        break;\r
                case DEMOD_ASK:\r
                case DEMOD_BI:\r
                case DEMOD_BIa:\r
                        detRate = GetAskClock("",FALSE, FALSE); \r
-                       if (expected[readRate] == detRate) {\r
-                               config.bitrate = readRate;\r
+                       if (expected[readRate] == detRate) \r
                                return TRUE;\r
-                       }\r
                        break;\r
                case DEMOD_PSK1:\r
                case DEMOD_PSK2:\r
                case DEMOD_PSK3:\r
                        detRate = GetPskClock("",FALSE, FALSE); \r
-                       if (expected[readRate] == detRate) {\r
-                               config.bitrate = readRate;\r
+                       if (expected[readRate] == detRate)\r
                                return TRUE;\r
-                       }\r
                        break;\r
                case DEMOD_NRZ:\r
                        detRate = GetNrzClock("",FALSE, FALSE); \r
-                       if (expected[readRate] == detRate) {\r
-                               config.bitrate = readRate;\r
+                       if (expected[readRate] == detRate)\r
                                return TRUE;\r
-                       }\r
                        break;\r
                default:\r
                        return FALSE;\r
@@ -540,9 +543,9 @@ bool testBitRate(uint8_t readRate, uint8_t mod){
        return FALSE;\r
 }\r
 \r
-bool test(uint8_t mode, uint8_t *offset){\r
+bool test(uint8_t mode, uint8_t *offset, int *fndBitRate){\r
 \r
-       if ( !DemodBufferLen) return FALSE;\r
+       if ( DemodBufferLen < 64 ) return FALSE;\r
        uint8_t si = 0;\r
        for (uint8_t idx = 0; idx < 64; idx++){\r
                si = idx;\r
@@ -555,7 +558,8 @@ bool test(uint8_t mode, uint8_t *offset){
                if ( resv > 0x00) continue;\r
 \r
                uint8_t xtRate   = PackBits(si, 3, DemodBuffer); si += 3;     //extended mode part of rate\r
-               uint8_t bitRate  = PackBits(si, 3, DemodBuffer); si += 3;     //bit rate\r
+               int bitRate  = PackBits(si, 3, DemodBuffer); si += 3;     //bit rate\r
+               if (bitRate > 7) continue;\r
                uint8_t extend   = PackBits(si, 1, DemodBuffer); si += 1;     //bit 15 extended mode\r
                uint8_t modread  = PackBits(si, 5, DemodBuffer); si += 5+2+1; \r
                //uint8_t pskcr   = PackBits(si, 2, DemodBuffer); si += 2+1;  //could check psk cr\r
@@ -571,6 +575,7 @@ bool test(uint8_t mode, uint8_t *offset){
                //test modulation\r
                if (!testModulation(mode, modread)) continue;\r
                if (!testBitRate(bitRate, mode)) continue;\r
+               *fndBitRate = bitRate;\r
                *offset = idx;\r
                return TRUE;\r
        }\r
@@ -760,10 +765,10 @@ int CmdT55xxInfo(const char *Cmd){
        \r
        if (strlen(Cmd)==0)\r
                AquireData( CONFIGURATION_BLOCK );\r
-       \r
+\r
        if (!DecodeT55xxBlock()) return 1;\r
 \r
-       if ( !DemodBufferLen) return 1;\r
+       if ( DemodBufferLen < 32) return 1;\r
 \r
        uint8_t si = config.offset;\r
        uint32_t bl0      = PackBits(si, 32, DemodBuffer);\r
@@ -873,7 +878,8 @@ int AquireData( uint8_t block ){
 }\r
 \r
 char * GetBitRateStr(uint32_t id){\r
-       static char buf[20];\r
+       static char buf[25];\r
+\r
        char *retStr = buf;\r
                switch (id){\r
                case 0: \r
Impressum, Datenschutz