]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
CHG: added timeouts for downloading values from device, to make the client more respo...
authoriceman1001 <iceman@iuse.se>
Tue, 16 Feb 2016 09:54:41 +0000 (10:54 +0100)
committericeman1001 <iceman@iuse.se>
Tue, 16 Feb 2016 09:54:41 +0000 (10:54 +0100)
CHG: still curious for the printf_hex_breaks method, why it behavies strange.

client/cmdhflegic.c
client/util.c

index 3a520f6ae63d341f30e8f14080251608384a013d..8310da8619f01ba53f07f214e88af5984b4410cd 100644 (file)
@@ -57,9 +57,12 @@ int CmdLegicDecode(const char *Cmd) {
        char token_type[4];
 
        // copy data from proxmark into buffer
-       GetFromBigBuf(data_buf,sizeof(data_buf),0);
-       WaitForResponse(CMD_ACK,NULL);
-
+       GetFromBigBuf(data_buf, sizeof(data_buf), 0);
+       if ( !WaitForResponseTimeout(CMD_ACK, NULL, 2000)){
+               PrintAndLog("Command execute timeout");
+               return 1;
+       }
+       
        // Output CDF System area (9 bytes) plus remaining header area (12 bytes)
        crc = data_buf[4];
        uint32_t calc_crc =  CRC8Legic(data_buf, 4);    
@@ -119,6 +122,7 @@ int CmdLegicDecode(const char *Cmd) {
        printf("-------------------------------------\n");
        i = 22;  
        // 64 potential segements
+       // how to detect there is no segments?!?
        for ( segmentNum=0; segmentNum<64; segmentNum++ ) {
                segment_len = ((data_buf[i+1]^crc)&0x0f) * 256 + (data_buf[i]^crc);
                segment_flag = ((data_buf[i+1]^crc)&0xf0)>>4;
@@ -335,7 +339,10 @@ int CmdLegicSave(const char *Cmd) {
        }
 
        GetFromBigBuf(got, requested, offset);
-       WaitForResponse(CMD_ACK, NULL);
+       if ( !WaitForResponseTimeout(CMD_ACK, NULL, 2000)){
+               PrintAndLog("Command execute timeout");
+               return 1;
+       }
 
        for (int j = 0; j < requested; j += 8) {
                fprintf(f, "%02x %02x %02x %02x %02x %02x %02x %02x\n",
@@ -351,6 +358,7 @@ int CmdLegicSave(const char *Cmd) {
        return 0;
 }
 
+//TODO: write a help text (iceman)
 int CmdLegicRfSim(const char *Cmd) {
        UsbCommand c = {CMD_SIMULATE_TAG_LEGIC_RF, {6,3,0}};
        sscanf(Cmd, " %"lli" %"lli" %"lli, &c.arg[0], &c.arg[1], &c.arg[2]);
@@ -359,6 +367,7 @@ int CmdLegicRfSim(const char *Cmd) {
        return 0;
 }
 
+//TODO: write a help text (iceman)
 int CmdLegicRfWrite(const char *Cmd) {
     UsbCommand c = {CMD_WRITER_LEGIC_RF};
     int res = sscanf(Cmd, " 0x%"llx" 0x%"llx, &c.arg[0], &c.arg[1]);
index 04daffc2e1249d8f9835ae0268e402d7e9d96023..ab1582223a5bfff47f802ada8676c7c2e2923c2a 100644 (file)
@@ -110,8 +110,8 @@ void print_hex_break(const uint8_t *data, const size_t len, uint8_t breaks) {
                printf("%02X ", data[i]);
                
                // check if a line break is needed
-               if ( (breaks > 0) && (i > 0) && !(i % breaks) )
-                       printf("(%d %d)\n", i , breaks);
+               if ( breaks > 0 && !(i+1 % breaks) )
+                       printf("(%d %d)\n", i+1 , breaks);
        }
        printf("\n");
 }
Impressum, Datenschutz