]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
Merge branch 'master' of https://github.com/Proxmark/proxmark3
authoriceman1001 <iceman@iuse.se>
Mon, 30 Mar 2015 19:11:37 +0000 (21:11 +0200)
committericeman1001 <iceman@iuse.se>
Mon, 30 Mar 2015 19:11:37 +0000 (21:11 +0200)
Conflicts:
armsrc/iclass.c
armsrc/lfops.c
client/cmdlf.c
common/lfdemod.c
include/usb_cmd.h

CHANGELOG.md [new file with mode: 0644]
armsrc/iclass.c
armsrc/lfops.c
client/cmddata.c
client/cmdhficlass.c
client/graph.c
common/ldscript.common
common/lfdemod.c
common/lfdemod.h
include/usb_cmd.h

diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644 (file)
index 0000000..5f3f84e
--- /dev/null
@@ -0,0 +1,28 @@
+# Change Log
+All notable changes to this project will be documented in this file.
+This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log...
+
+## [Unreleased][unreleased]
+### Changed
+- Iclass read, `hf iclass read` now also reads tag config and prints configuration. (holiman)
+
+### Fixed
+- Fixed issue #19, problems with LF T55xx commands (marshmellow)
+
+### Added
+- Added changelog
+
+## [2.0.0] - 2015-03-25
+### Changed
+- LF sim operations now abort when new commands arrive over the USB - not required to push the device button anymore.
+
+### Fixed
+- Mifare simulation, `hf mf sim` (was broken a long time) (pwpiwi)
+- Major improvements in LF area and data operations. (marshmellow, iceman1001)
+- Issues regarding LF simulation (pwpiwi)
+
+### Added
+- iClass functionality: full simulation of iclass tags, so tags can be simulated with data (not only CSN). Not yet support for write/update, but readers don't seem to enforce update. (holiman).
+- iClass decryption. Proxmark can now decrypt data on an iclass tag, but requires you to have the HID decryption key locally on your computer, as this is not bundled with the sourcecode. 
+
+
index f62d45defda2a3c65f755a2e57f347afcad7598b..e5bd4f42852ef1682962a48aedccb6be08cd7417 100644 (file)
@@ -1628,7 +1628,10 @@ uint8_t handshakeIclassTag(uint8_t *card_data)
        static uint8_t act_all[]     = { 0x0a };
        static uint8_t identify[]    = { 0x0c };
        static uint8_t select[]      = { 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-       static uint8_t readcheck_cc[]= { 0x88, 0x02 };
+
+
+       static uint8_t readcheck_cc[]= { 0x88, 0x02,};
+
        uint8_t resp[ICLASS_BUFFER_SIZE];
 
        uint8_t read_status = 0;
@@ -1663,27 +1666,32 @@ uint8_t handshakeIclassTag(uint8_t *card_data)
        if(ReaderReceiveIClass(resp) == 8) {
                //Save CC (e-purse) in response data
                memcpy(card_data+8,resp,8);
-
-               //Got both
-               read_status = 2;
+               read_status++;
        }
 
        return read_status;
 }
 
+
 // Reader iClass Anticollission
 void ReaderIClass(uint8_t arg0) {
 
-    uint8_t card_data[24]={0};
+       uint8_t card_data[6 * 8]={0xFF};
     uint8_t last_csn[8]={0};
        
+       //Read conf block CRC(0x01) => 0xfa 0x22
+       uint8_t readConf[] = { ICLASS_CMD_READ_OR_IDENTIFY,0x01, 0xfa, 0x22};
+       //Read conf block CRC(0x05) => 0xde  0x64
+       uint8_t readAA[] = { ICLASS_CMD_READ_OR_IDENTIFY,0x05, 0xde, 0x64};
+
+
     int read_status= 0;
+       uint8_t result_status = 0;
     bool abort_after_read = arg0 & FLAG_ICLASS_READER_ONLY_ONCE;
-       bool get_cc = arg0 & FLAG_ICLASS_READER_GET_CC;
+
        set_tracing(TRUE);
     setupIclassReader();
 
-    size_t datasize = 0;
     while(!BUTTON_PRESS())
     {
 
@@ -1696,15 +1704,40 @@ void ReaderIClass(uint8_t arg0) {
                read_status = handshakeIclassTag(card_data);
 
                if(read_status == 0) continue;
-               if(read_status == 1) datasize = 8;
-               if(read_status == 2) datasize = 16;
+               if(read_status == 1) result_status = FLAG_ICLASS_READER_CSN;
+               if(read_status == 2) result_status = FLAG_ICLASS_READER_CSN|FLAG_ICLASS_READER_CC;
+
+               // handshakeIclass returns CSN|CC, but the actual block
+               // layout is CSN|CONFIG|CC, so here we reorder the data,
+               // moving CC forward 8 bytes
+               memcpy(card_data+16,card_data+8, 8);
+               //Read block 1, config
+               if(arg0 & FLAG_ICLASS_READER_CONF)
+               {
+                       if(sendCmdGetResponseWithRetries(readConf, sizeof(readConf),card_data+8, 10, 10))
+                       {
+                               Dbprintf("Failed to dump config block");
+                       }else
+                       {
+                               result_status |= FLAG_ICLASS_READER_CONF;
+                       }
+               }
 
-               //Todo, read the public blocks 1,5 aswell:
-               //
-               // 0 : CSN (we already have)
+               //Read block 5, AA
+               if(arg0 & FLAG_ICLASS_READER_AA){
+                       if(sendCmdGetResponseWithRetries(readAA, sizeof(readAA),card_data+(8*4), 10, 10))
+                       {
+//                             Dbprintf("Failed to dump AA block");
+                       }else
+                       {
+                               result_status |= FLAG_ICLASS_READER_AA;
+                       }
+               }
+
+               // 0 : CSN
                // 1 : Configuration
-               // 2 : e-purse (we already have)
-               // (3,4 write-only)
+               // 2 : e-purse
+               // (3,4 write-only, kc and kd)
                // 5 Application issuer area
                //
                //Then we can 'ship' back the 8 * 5 bytes of data,
@@ -1714,10 +1747,10 @@ void ReaderIClass(uint8_t arg0) {
                     //Send back to client, but don't bother if we already sent this
                     if(memcmp(last_csn, card_data, 8) != 0)
                {
-
-                       if(!get_cc || (get_cc && read_status == 2))
+                       // If caller requires that we get CC, continue until we got it
+                       if( (arg0 & read_status & FLAG_ICLASS_READER_CC) || !(arg0 & FLAG_ICLASS_READER_CC))
                        {
-                        cmd_send(CMD_ACK,read_status,0,0,card_data,datasize);
+                               cmd_send(CMD_ACK,result_status,0,0,card_data,sizeof(card_data));
                                if(abort_after_read) {
                                        LED_A_OFF();
                                        return;
@@ -1725,7 +1758,7 @@ void ReaderIClass(uint8_t arg0) {
                     //Save that we already sent this....
                         memcpy(last_csn, card_data, 8);
                        }
-                       //If 'get_cc' was specified and we didn't get a CC, we'll just keep trying...
+
                }
                LED_B_OFF();
     }
index 6eb89912606930f46e156075e7b19af5b818dcdf..797bc51ce5613486c447de87b95cd912054a2205 100644 (file)
 void ModThenAcquireRawAdcSamples125k(int delay_off, int period_0, int period_1, uint8_t *command)
 {
 
-    int divisor_used = 95; // 125 KHz
-    // see if 'h' was specified
+       int divisor_used = 95; // 125 KHz
+       // see if 'h' was specified
 
-    if (command[strlen((char *) command) - 1] == 'h')
-        divisor_used = 88; // 134.8 KHz
+       if (command[strlen((char *) command) - 1] == 'h')
+               divisor_used = 88; // 134.8 KHz
 
        sample_config sc = { 0,0,1, divisor_used, 0};
        setSamplingConfig(&sc);
 
-    /* Make sure the tag is reset */
-    FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
-    SpinDelay(2500);
+       /* Make sure the tag is reset */
+       FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+       SpinDelay(2500);
 
        LFSetupFPGAForADC(sc.divisor, 1);
 
-    // And a little more time for the tag to fully power up
-    SpinDelay(2000);
+       // And a little more time for the tag to fully power up
+       SpinDelay(2000);
 
-    // now modulate the reader field
-    while(*command != '\0' && *command != ' ') {
-        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
-        LED_D_OFF();
-        SpinDelayUs(delay_off);
+       // now modulate the reader field
+       while(*command != '\0' && *command != ' ') {
+               FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+               LED_D_OFF();
+               SpinDelayUs(delay_off);
                FpgaSendCommand(FPGA_CMD_SET_DIVISOR, sc.divisor);
 
-        FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
-        LED_D_ON();
-        if(*(command++) == '0')
-            SpinDelayUs(period_0);
-        else
-            SpinDelayUs(period_1);
-    }
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
-    LED_D_OFF();
-    SpinDelayUs(delay_off);
+               FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
+               LED_D_ON();
+               if(*(command++) == '0')
+                       SpinDelayUs(period_0);
+               else
+                       SpinDelayUs(period_1);
+       }
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+       LED_D_OFF();
+       SpinDelayUs(delay_off);
        FpgaSendCommand(FPGA_CMD_SET_DIVISOR, sc.divisor);
 
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
 
-    // now do the read
+       // now do the read
        DoAcquisition_config(false);
 }
 
+
+
 /* blank r/w tag data stream
 ...0000000000000000 01111111
 1010101010101010101010101010101010101010101010101010101010101010
@@ -84,228 +86,228 @@ void ModThenAcquireRawAdcSamples125k(int delay_off, int period_0, int period_1,
 */
 void ReadTItag(void)
 {
-    // some hardcoded initial params
-    // when we read a TI tag we sample the zerocross line at 2Mhz
-    // TI tags modulate a 1 as 16 cycles of 123.2Khz
-    // TI tags modulate a 0 as 16 cycles of 134.2Khz
+       // some hardcoded initial params
+       // when we read a TI tag we sample the zerocross line at 2Mhz
+       // TI tags modulate a 1 as 16 cycles of 123.2Khz
+       // TI tags modulate a 0 as 16 cycles of 134.2Khz
  #define FSAMPLE 2000000
  #define FREQLO 123200
  #define FREQHI 134200
 
-    signed char *dest = (signed char *)BigBuf_get_addr();
-    uint16_t n = BigBuf_max_traceLen();
-    // 128 bit shift register [shift3:shift2:shift1:shift0]
-    uint32_t shift3 = 0, shift2 = 0, shift1 = 0, shift0 = 0;
-
-    int i, cycles=0, samples=0;
-    // how many sample points fit in 16 cycles of each frequency
-    uint32_t sampleslo = (FSAMPLE<<4)/FREQLO, sampleshi = (FSAMPLE<<4)/FREQHI;
-    // when to tell if we're close enough to one freq or another
-    uint32_t threshold = (sampleslo - sampleshi + 1)>>1;
-
-    // TI tags charge at 134.2Khz
-    FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
-    FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 88); //134.8Khz
-
-    // Place FPGA in passthrough mode, in this mode the CROSS_LO line
-    // connects to SSP_DIN and the SSP_DOUT logic level controls
-    // whether we're modulating the antenna (high)
-    // or listening to the antenna (low)
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_PASSTHRU);
-
-    // get TI tag data into the buffer
-    AcquireTiType();
-
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
-
-    for (i=0; i<n-1; i++) {
-        // count cycles by looking for lo to hi zero crossings
-        if ( (dest[i]<0) && (dest[i+1]>0) ) {
-            cycles++;
-            // after 16 cycles, measure the frequency
-            if (cycles>15) {
-                cycles=0;
-                samples=i-samples; // number of samples in these 16 cycles
-
-                // TI bits are coming to us lsb first so shift them
-                // right through our 128 bit right shift register
-                shift0 = (shift0>>1) | (shift1 << 31);
-                shift1 = (shift1>>1) | (shift2 << 31);
-                shift2 = (shift2>>1) | (shift3 << 31);
-                shift3 >>= 1;
-
-                // check if the cycles fall close to the number
-                // expected for either the low or high frequency
-                if ( (samples>(sampleslo-threshold)) && (samples<(sampleslo+threshold)) ) {
-                    // low frequency represents a 1
-                    shift3 |= (1<<31);
-                } else if ( (samples>(sampleshi-threshold)) && (samples<(sampleshi+threshold)) ) {
-                    // high frequency represents a 0
-                } else {
-                    // probably detected a gay waveform or noise
-                    // use this as gaydar or discard shift register and start again
-                    shift3 = shift2 = shift1 = shift0 = 0;
-                }
-                samples = i;
-
-                // for each bit we receive, test if we've detected a valid tag
-
-                // if we see 17 zeroes followed by 6 ones, we might have a tag
-                // remember the bits are backwards
-                if ( ((shift0 & 0x7fffff) == 0x7e0000) ) {
-                    // if start and end bytes match, we have a tag so break out of the loop
-                    if ( ((shift0>>16)&0xff) == ((shift3>>8)&0xff) ) {
-                        cycles = 0xF0B; //use this as a flag (ugly but whatever)
-                        break;
-                    }
-                }
-            }
-        }
-    }
-
-    // if flag is set we have a tag
-    if (cycles!=0xF0B) {
-        DbpString("Info: No valid tag detected.");
-    } else {
-        // put 64 bit data into shift1 and shift0
-        shift0 = (shift0>>24) | (shift1 << 8);
-        shift1 = (shift1>>24) | (shift2 << 8);
-
-        // align 16 bit crc into lower half of shift2
-        shift2 = ((shift2>>24) | (shift3 << 8)) & 0x0ffff;
-
-        // if r/w tag, check ident match
+       signed char *dest = (signed char *)BigBuf_get_addr();
+       uint16_t n = BigBuf_max_traceLen();
+       // 128 bit shift register [shift3:shift2:shift1:shift0]
+       uint32_t shift3 = 0, shift2 = 0, shift1 = 0, shift0 = 0;
+
+       int i, cycles=0, samples=0;
+       // how many sample points fit in 16 cycles of each frequency
+       uint32_t sampleslo = (FSAMPLE<<4)/FREQLO, sampleshi = (FSAMPLE<<4)/FREQHI;
+       // when to tell if we're close enough to one freq or another
+       uint32_t threshold = (sampleslo - sampleshi + 1)>>1;
+
+       // TI tags charge at 134.2Khz
+       FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
+       FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 88); //134.8Khz
+
+       // Place FPGA in passthrough mode, in this mode the CROSS_LO line
+       // connects to SSP_DIN and the SSP_DOUT logic level controls
+       // whether we're modulating the antenna (high)
+       // or listening to the antenna (low)
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_PASSTHRU);
+
+       // get TI tag data into the buffer
+       AcquireTiType();
+
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+
+       for (i=0; i<n-1; i++) {
+               // count cycles by looking for lo to hi zero crossings
+               if ( (dest[i]<0) && (dest[i+1]>0) ) {
+                       cycles++;
+                       // after 16 cycles, measure the frequency
+                       if (cycles>15) {
+                               cycles=0;
+                               samples=i-samples; // number of samples in these 16 cycles
+
+                               // TI bits are coming to us lsb first so shift them
+                               // right through our 128 bit right shift register
+                               shift0 = (shift0>>1) | (shift1 << 31);
+                               shift1 = (shift1>>1) | (shift2 << 31);
+                               shift2 = (shift2>>1) | (shift3 << 31);
+                               shift3 >>= 1;
+
+                               // check if the cycles fall close to the number
+                               // expected for either the low or high frequency
+                               if ( (samples>(sampleslo-threshold)) && (samples<(sampleslo+threshold)) ) {
+                                       // low frequency represents a 1
+                                       shift3 |= (1<<31);
+                               } else if ( (samples>(sampleshi-threshold)) && (samples<(sampleshi+threshold)) ) {
+                                       // high frequency represents a 0
+                               } else {
+                                       // probably detected a gay waveform or noise
+                                       // use this as gaydar or discard shift register and start again
+                                       shift3 = shift2 = shift1 = shift0 = 0;
+                               }
+                               samples = i;
+
+                               // for each bit we receive, test if we've detected a valid tag
+
+                               // if we see 17 zeroes followed by 6 ones, we might have a tag
+                               // remember the bits are backwards
+                               if ( ((shift0 & 0x7fffff) == 0x7e0000) ) {
+                                       // if start and end bytes match, we have a tag so break out of the loop
+                                       if ( ((shift0>>16)&0xff) == ((shift3>>8)&0xff) ) {
+                                               cycles = 0xF0B; //use this as a flag (ugly but whatever)
+                                               break;
+                                       }
+                               }
+                       }
+               }
+       }
+
+       // if flag is set we have a tag
+       if (cycles!=0xF0B) {
+               DbpString("Info: No valid tag detected.");
+       } else {
+               // put 64 bit data into shift1 and shift0
+               shift0 = (shift0>>24) | (shift1 << 8);
+               shift1 = (shift1>>24) | (shift2 << 8);
+
+               // align 16 bit crc into lower half of shift2
+               shift2 = ((shift2>>24) | (shift3 << 8)) & 0x0ffff;
+
+               // if r/w tag, check ident match
                if (shift3 & (1<<15) ) {
-            DbpString("Info: TI tag is rewriteable");
-            // only 15 bits compare, last bit of ident is not valid
+                       DbpString("Info: TI tag is rewriteable");
+                       // only 15 bits compare, last bit of ident is not valid
                        if (((shift3 >> 16) ^ shift0) & 0x7fff ) {
-                DbpString("Error: Ident mismatch!");
-            } else {
-                DbpString("Info: TI tag ident is valid");
-            }
-        } else {
-            DbpString("Info: TI tag is readonly");
-        }
-
-        // WARNING the order of the bytes in which we calc crc below needs checking
-        // i'm 99% sure the crc algorithm is correct, but it may need to eat the
-        // bytes in reverse or something
-        // calculate CRC
-        uint32_t crc=0;
-
-        crc = update_crc16(crc, (shift0)&0xff);
-        crc = update_crc16(crc, (shift0>>8)&0xff);
-        crc = update_crc16(crc, (shift0>>16)&0xff);
-        crc = update_crc16(crc, (shift0>>24)&0xff);
-        crc = update_crc16(crc, (shift1)&0xff);
-        crc = update_crc16(crc, (shift1>>8)&0xff);
-        crc = update_crc16(crc, (shift1>>16)&0xff);
-        crc = update_crc16(crc, (shift1>>24)&0xff);
-
-        Dbprintf("Info: Tag data: %x%08x, crc=%x",
-                 (unsigned int)shift1, (unsigned int)shift0, (unsigned int)shift2 & 0xFFFF);
-        if (crc != (shift2&0xffff)) {
-            Dbprintf("Error: CRC mismatch, expected %x", (unsigned int)crc);
-        } else {
-            DbpString("Info: CRC is good");
-        }
-    }
+                               DbpString("Error: Ident mismatch!");
+                       } else {
+                               DbpString("Info: TI tag ident is valid");
+                       }
+               } else {
+                       DbpString("Info: TI tag is readonly");
+               }
+
+               // WARNING the order of the bytes in which we calc crc below needs checking
+               // i'm 99% sure the crc algorithm is correct, but it may need to eat the
+               // bytes in reverse or something
+               // calculate CRC
+               uint32_t crc=0;
+
+               crc = update_crc16(crc, (shift0)&0xff);
+               crc = update_crc16(crc, (shift0>>8)&0xff);
+               crc = update_crc16(crc, (shift0>>16)&0xff);
+               crc = update_crc16(crc, (shift0>>24)&0xff);
+               crc = update_crc16(crc, (shift1)&0xff);
+               crc = update_crc16(crc, (shift1>>8)&0xff);
+               crc = update_crc16(crc, (shift1>>16)&0xff);
+               crc = update_crc16(crc, (shift1>>24)&0xff);
+
+               Dbprintf("Info: Tag data: %x%08x, crc=%x",
+                                (unsigned int)shift1, (unsigned int)shift0, (unsigned int)shift2 & 0xFFFF);
+               if (crc != (shift2&0xffff)) {
+                       Dbprintf("Error: CRC mismatch, expected %x", (unsigned int)crc);
+               } else {
+                       DbpString("Info: CRC is good");
+               }
+       }
 }
 
 void WriteTIbyte(uint8_t b)
 {
-    int i = 0;
-
-    // modulate 8 bits out to the antenna
-    for (i=0; i<8; i++)
-    {
-        if (b&(1<<i)) {
-            // stop modulating antenna
-            LOW(GPIO_SSC_DOUT);
-            SpinDelayUs(1000);
-            // modulate antenna
-            HIGH(GPIO_SSC_DOUT);
-            SpinDelayUs(1000);
-        } else {
-            // stop modulating antenna
-            LOW(GPIO_SSC_DOUT);
-            SpinDelayUs(300);
-            // modulate antenna
-            HIGH(GPIO_SSC_DOUT);
-            SpinDelayUs(1700);
-        }
-    }
+       int i = 0;
+
+       // modulate 8 bits out to the antenna
+       for (i=0; i<8; i++)
+       {
+               if (b&(1<<i)) {
+                       // stop modulating antenna
+                       LOW(GPIO_SSC_DOUT);
+                       SpinDelayUs(1000);
+                       // modulate antenna
+                       HIGH(GPIO_SSC_DOUT);
+                       SpinDelayUs(1000);
+               } else {
+                       // stop modulating antenna
+                       LOW(GPIO_SSC_DOUT);
+                       SpinDelayUs(300);
+                       // modulate antenna
+                       HIGH(GPIO_SSC_DOUT);
+                       SpinDelayUs(1700);
+               }
+       }
 }
 
 void AcquireTiType(void)
 {
-    int i, j, n;
-    // tag transmission is <20ms, sampling at 2M gives us 40K samples max
-    // each sample is 1 bit stuffed into a uint32_t so we need 1250 uint32_t
+       int i, j, n;
+       // tag transmission is <20ms, sampling at 2M gives us 40K samples max
+       // each sample is 1 bit stuffed into a uint32_t so we need 1250 uint32_t
  #define TIBUFLEN 1250
 
-    // clear buffer
+       // clear buffer
        uint32_t *BigBuf = (uint32_t *)BigBuf_get_addr();
-    memset(BigBuf,0,BigBuf_max_traceLen()/sizeof(uint32_t));
-
-    // Set up the synchronous serial port
-    AT91C_BASE_PIOA->PIO_PDR = GPIO_SSC_DIN;
-    AT91C_BASE_PIOA->PIO_ASR = GPIO_SSC_DIN;
-
-    // steal this pin from the SSP and use it to control the modulation
-    AT91C_BASE_PIOA->PIO_PER = GPIO_SSC_DOUT;
-    AT91C_BASE_PIOA->PIO_OER = GPIO_SSC_DOUT;
-
-    AT91C_BASE_SSC->SSC_CR = AT91C_SSC_SWRST;
-    AT91C_BASE_SSC->SSC_CR = AT91C_SSC_RXEN | AT91C_SSC_TXEN;
-
-    // Sample at 2 Mbit/s, so TI tags are 16.2 vs. 14.9 clocks long
-    // 48/2 = 24 MHz clock must be divided by 12
-    AT91C_BASE_SSC->SSC_CMR = 12;
-
-    AT91C_BASE_SSC->SSC_RCMR = SSC_CLOCK_MODE_SELECT(0);
-    AT91C_BASE_SSC->SSC_RFMR = SSC_FRAME_MODE_BITS_IN_WORD(32) | AT91C_SSC_MSBF;
-    AT91C_BASE_SSC->SSC_TCMR = 0;
-    AT91C_BASE_SSC->SSC_TFMR = 0;
-
-    LED_D_ON();
-
-    // modulate antenna
-    HIGH(GPIO_SSC_DOUT);
-
-    // Charge TI tag for 50ms.
-    SpinDelay(50);
-
-    // stop modulating antenna and listen
-    LOW(GPIO_SSC_DOUT);
-
-    LED_D_OFF();
-
-    i = 0;
-    for(;;) {
-        if(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) {
-            BigBuf[i] = AT91C_BASE_SSC->SSC_RHR;       // store 32 bit values in buffer
-            i++; if(i >= TIBUFLEN) break;
-        }
-        WDT_HIT();
-    }
-
-    // return stolen pin to SSP
-    AT91C_BASE_PIOA->PIO_PDR = GPIO_SSC_DOUT;
-    AT91C_BASE_PIOA->PIO_ASR = GPIO_SSC_DIN | GPIO_SSC_DOUT;
-
-    char *dest = (char *)BigBuf_get_addr();
-    n = TIBUFLEN*32;
-    // unpack buffer
-    for (i=TIBUFLEN-1; i>=0; i--) {
-        for (j=0; j<32; j++) {
-            if(BigBuf[i] & (1 << j)) {
-                dest[--n] = 1;
-            } else {
-                dest[--n] = -1;
-            }
-        }
-    }
+       memset(BigBuf,0,BigBuf_max_traceLen()/sizeof(uint32_t));
+
+       // Set up the synchronous serial port
+       AT91C_BASE_PIOA->PIO_PDR = GPIO_SSC_DIN;
+       AT91C_BASE_PIOA->PIO_ASR = GPIO_SSC_DIN;
+
+       // steal this pin from the SSP and use it to control the modulation
+       AT91C_BASE_PIOA->PIO_PER = GPIO_SSC_DOUT;
+       AT91C_BASE_PIOA->PIO_OER = GPIO_SSC_DOUT;
+
+       AT91C_BASE_SSC->SSC_CR = AT91C_SSC_SWRST;
+       AT91C_BASE_SSC->SSC_CR = AT91C_SSC_RXEN | AT91C_SSC_TXEN;
+
+       // Sample at 2 Mbit/s, so TI tags are 16.2 vs. 14.9 clocks long
+       // 48/2 = 24 MHz clock must be divided by 12
+       AT91C_BASE_SSC->SSC_CMR = 12;
+
+       AT91C_BASE_SSC->SSC_RCMR = SSC_CLOCK_MODE_SELECT(0);
+       AT91C_BASE_SSC->SSC_RFMR = SSC_FRAME_MODE_BITS_IN_WORD(32) | AT91C_SSC_MSBF;
+       AT91C_BASE_SSC->SSC_TCMR = 0;
+       AT91C_BASE_SSC->SSC_TFMR = 0;
+
+       LED_D_ON();
+
+       // modulate antenna
+       HIGH(GPIO_SSC_DOUT);
+
+       // Charge TI tag for 50ms.
+       SpinDelay(50);
+
+       // stop modulating antenna and listen
+       LOW(GPIO_SSC_DOUT);
+
+       LED_D_OFF();
+
+       i = 0;
+       for(;;) {
+               if(AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) {
+                       BigBuf[i] = AT91C_BASE_SSC->SSC_RHR;    // store 32 bit values in buffer
+                       i++; if(i >= TIBUFLEN) break;
+               }
+               WDT_HIT();
+       }
+
+       // return stolen pin to SSP
+       AT91C_BASE_PIOA->PIO_PDR = GPIO_SSC_DOUT;
+       AT91C_BASE_PIOA->PIO_ASR = GPIO_SSC_DIN | GPIO_SSC_DOUT;
+
+       char *dest = (char *)BigBuf_get_addr();
+       n = TIBUFLEN*32;
+       // unpack buffer
+       for (i=TIBUFLEN-1; i>=0; i--) {
+               for (j=0; j<32; j++) {
+                       if(BigBuf[i] & (1 << j)) {
+                               dest[--n] = 1;
+                       } else {
+                               dest[--n] = -1;
+                       }
+               }
+       }
 }
 
 // arguments: 64bit data split into 32bit idhi:idlo and optional 16bit crc
@@ -313,128 +315,128 @@ void AcquireTiType(void)
 // if not provided a valid crc will be computed from the data and written.
 void WriteTItag(uint32_t idhi, uint32_t idlo, uint16_t crc)
 {
-    FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
-    if(crc == 0) {
-        crc = update_crc16(crc, (idlo)&0xff);
-        crc = update_crc16(crc, (idlo>>8)&0xff);
-        crc = update_crc16(crc, (idlo>>16)&0xff);
-        crc = update_crc16(crc, (idlo>>24)&0xff);
-        crc = update_crc16(crc, (idhi)&0xff);
-        crc = update_crc16(crc, (idhi>>8)&0xff);
-        crc = update_crc16(crc, (idhi>>16)&0xff);
-        crc = update_crc16(crc, (idhi>>24)&0xff);
-    }
-    Dbprintf("Writing to tag: %x%08x, crc=%x",
-             (unsigned int) idhi, (unsigned int) idlo, crc);
-
-    // TI tags charge at 134.2Khz
-    FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 88); //134.8Khz
-    // Place FPGA in passthrough mode, in this mode the CROSS_LO line
-    // connects to SSP_DIN and the SSP_DOUT logic level controls
-    // whether we're modulating the antenna (high)
-    // or listening to the antenna (low)
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_PASSTHRU);
-    LED_A_ON();
-
-    // steal this pin from the SSP and use it to control the modulation
-    AT91C_BASE_PIOA->PIO_PER = GPIO_SSC_DOUT;
-    AT91C_BASE_PIOA->PIO_OER = GPIO_SSC_DOUT;
-
-    // writing algorithm:
-    // a high bit consists of a field off for 1ms and field on for 1ms
-    // a low bit consists of a field off for 0.3ms and field on for 1.7ms
-    // initiate a charge time of 50ms (field on) then immediately start writing bits
-    // start by writing 0xBB (keyword) and 0xEB (password)
-    // then write 80 bits of data (or 64 bit data + 16 bit crc if you prefer)
-    // finally end with 0x0300 (write frame)
-    // all data is sent lsb firts
-    // finish with 15ms programming time
-
-    // modulate antenna
-    HIGH(GPIO_SSC_DOUT);
-    SpinDelay(50);     // charge time
-
-    WriteTIbyte(0xbb); // keyword
-    WriteTIbyte(0xeb); // password
-    WriteTIbyte( (idlo    )&0xff );
-    WriteTIbyte( (idlo>>8 )&0xff );
-    WriteTIbyte( (idlo>>16)&0xff );
-    WriteTIbyte( (idlo>>24)&0xff );
-    WriteTIbyte( (idhi    )&0xff );
-    WriteTIbyte( (idhi>>8 )&0xff );
-    WriteTIbyte( (idhi>>16)&0xff );
-    WriteTIbyte( (idhi>>24)&0xff ); // data hi to lo
-    WriteTIbyte( (crc     )&0xff ); // crc lo
-    WriteTIbyte( (crc>>8  )&0xff ); // crc hi
-    WriteTIbyte(0x00); // write frame lo
-    WriteTIbyte(0x03); // write frame hi
-    HIGH(GPIO_SSC_DOUT);
-    SpinDelay(50);     // programming time
-
-    LED_A_OFF();
-
-    // get TI tag data into the buffer
-    AcquireTiType();
-
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
-    DbpString("Now use tiread to check");
+       FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
+       if(crc == 0) {
+               crc = update_crc16(crc, (idlo)&0xff);
+               crc = update_crc16(crc, (idlo>>8)&0xff);
+               crc = update_crc16(crc, (idlo>>16)&0xff);
+               crc = update_crc16(crc, (idlo>>24)&0xff);
+               crc = update_crc16(crc, (idhi)&0xff);
+               crc = update_crc16(crc, (idhi>>8)&0xff);
+               crc = update_crc16(crc, (idhi>>16)&0xff);
+               crc = update_crc16(crc, (idhi>>24)&0xff);
+       }
+       Dbprintf("Writing to tag: %x%08x, crc=%x",
+                       (unsigned int) idhi, (unsigned int) idlo, crc);
+
+       // TI tags charge at 134.2Khz
+       FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 88); //134.8Khz
+       // Place FPGA in passthrough mode, in this mode the CROSS_LO line
+       // connects to SSP_DIN and the SSP_DOUT logic level controls
+       // whether we're modulating the antenna (high)
+       // or listening to the antenna (low)
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_PASSTHRU);
+       LED_A_ON();
+
+       // steal this pin from the SSP and use it to control the modulation
+       AT91C_BASE_PIOA->PIO_PER = GPIO_SSC_DOUT;
+       AT91C_BASE_PIOA->PIO_OER = GPIO_SSC_DOUT;
+
+       // writing algorithm:
+       // a high bit consists of a field off for 1ms and field on for 1ms
+       // a low bit consists of a field off for 0.3ms and field on for 1.7ms
+       // initiate a charge time of 50ms (field on) then immediately start writing bits
+       // start by writing 0xBB (keyword) and 0xEB (password)
+       // then write 80 bits of data (or 64 bit data + 16 bit crc if you prefer)
+       // finally end with 0x0300 (write frame)
+       // all data is sent lsb firts
+       // finish with 15ms programming time
+
+       // modulate antenna
+       HIGH(GPIO_SSC_DOUT);
+       SpinDelay(50);  // charge time
+
+       WriteTIbyte(0xbb); // keyword
+       WriteTIbyte(0xeb); // password
+       WriteTIbyte( (idlo    )&0xff );
+       WriteTIbyte( (idlo>>8 )&0xff );
+       WriteTIbyte( (idlo>>16)&0xff );
+       WriteTIbyte( (idlo>>24)&0xff );
+       WriteTIbyte( (idhi    )&0xff );
+       WriteTIbyte( (idhi>>8 )&0xff );
+       WriteTIbyte( (idhi>>16)&0xff );
+       WriteTIbyte( (idhi>>24)&0xff ); // data hi to lo
+       WriteTIbyte( (crc     )&0xff ); // crc lo
+       WriteTIbyte( (crc>>8  )&0xff ); // crc hi
+       WriteTIbyte(0x00); // write frame lo
+       WriteTIbyte(0x03); // write frame hi
+       HIGH(GPIO_SSC_DOUT);
+       SpinDelay(50);  // programming time
+
+       LED_A_OFF();
+
+       // get TI tag data into the buffer
+       AcquireTiType();
+
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+       DbpString("Now use tiread to check");
 }
 
-void SimulateTagLowFrequency(uint16_t period, uint32_t gap, uint8_t ledcontrol)
+void SimulateTagLowFrequency(int period, int gap, int ledcontrol)
 {
-    int i;
-    uint8_t *tab = BigBuf_get_addr();
+       int i;
+       uint8_t *tab = BigBuf_get_addr();
 
-    FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_EDGE_DETECT);
+       FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_EDGE_DETECT);
 
-    AT91C_BASE_PIOA->PIO_PER = GPIO_SSC_DOUT | GPIO_SSC_CLK;
+       AT91C_BASE_PIOA->PIO_PER = GPIO_SSC_DOUT | GPIO_SSC_CLK;
 
-    AT91C_BASE_PIOA->PIO_OER = GPIO_SSC_DOUT;
-    AT91C_BASE_PIOA->PIO_ODR = GPIO_SSC_CLK;
+       AT91C_BASE_PIOA->PIO_OER = GPIO_SSC_DOUT;
+       AT91C_BASE_PIOA->PIO_ODR = GPIO_SSC_CLK;
 
  #define SHORT_COIL()  LOW(GPIO_SSC_DOUT)
  #define OPEN_COIL()           HIGH(GPIO_SSC_DOUT)
 
-    i = 0;
-    for(;;) {
-        //wait until SSC_CLK goes HIGH
-        while(!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)) {
+       i = 0;
+       for(;;) {
+               //wait until SSC_CLK goes HIGH
+               while(!(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK)) {
                        if(BUTTON_PRESS() || usb_poll()) {
-                DbpString("Stopped");
-                return;
-            }
-            WDT_HIT();
-        }
-        if (ledcontrol)
-            LED_D_ON();
-
-        if(tab[i])
-            OPEN_COIL();
-        else
-            SHORT_COIL();
-
-        if (ledcontrol)
-            LED_D_OFF();
-        //wait until SSC_CLK goes LOW
-        while(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK) {
-            if(BUTTON_PRESS()) {
-                DbpString("Stopped");
-                return;
-            }
-            WDT_HIT();
-        }    
-               
-        i++;
-        if(i == period) {
-      
-            i = 0;
-            if (gap) {
-                SHORT_COIL();
-                SpinDelayUs(gap);
-            }
-        }
-    }
+                               DbpString("Stopped");
+                               return;
+                       }
+                       WDT_HIT();
+               }
+               if (ledcontrol)
+                       LED_D_ON();
+
+               if(tab[i])
+                       OPEN_COIL();
+               else
+                       SHORT_COIL();
+
+               if (ledcontrol)
+                       LED_D_OFF();
+               //wait until SSC_CLK goes LOW
+               while(AT91C_BASE_PIOA->PIO_PDSR & GPIO_SSC_CLK) {
+                       if(BUTTON_PRESS()) {
+                               DbpString("Stopped");
+                               return;
+                       }
+                       WDT_HIT();
+               }
+
+               i++;
+               if(i == period) {
+
+                       i = 0;
+                       if (gap) {
+                               SHORT_COIL();
+                               SpinDelayUs(gap);
+                       }
+               }
+       }
 }
 
 #define DEBUG_FRAME_CONTENTS 1
@@ -445,136 +447,136 @@ void SimulateTagLowFrequencyBidir(int divisor, int t0)
 // compose fc/8 fc/10 waveform (FSK2)
 static void fc(int c, int *n)
 {
-    uint8_t *dest = BigBuf_get_addr();
-    int idx;
-
-    // for when we want an fc8 pattern every 4 logical bits
-    if(c==0) {
-        dest[((*n)++)]=1;
-        dest[((*n)++)]=1;
-        dest[((*n)++)]=1;
-        dest[((*n)++)]=1;
-        dest[((*n)++)]=0;
-        dest[((*n)++)]=0;
-        dest[((*n)++)]=0;
-        dest[((*n)++)]=0;
-    }
-  
-    // an fc/8  encoded bit is a bit pattern of  11110000  x6 = 48 samples
-    if(c==8) {
-        for (idx=0; idx<6; idx++) {
-            dest[((*n)++)]=1;
-            dest[((*n)++)]=1;
-            dest[((*n)++)]=1;
-            dest[((*n)++)]=1;
-            dest[((*n)++)]=0;
-            dest[((*n)++)]=0;
-            dest[((*n)++)]=0;
-            dest[((*n)++)]=0;
-        }
-    }
-
-    // an fc/10 encoded bit is a bit pattern of 1111100000 x5 = 50 samples
-    if(c==10) {
-        for (idx=0; idx<5; idx++) {
-            dest[((*n)++)]=1;
-            dest[((*n)++)]=1;
-            dest[((*n)++)]=1;
-            dest[((*n)++)]=1;
-            dest[((*n)++)]=1;
-            dest[((*n)++)]=0;
-            dest[((*n)++)]=0;
-            dest[((*n)++)]=0;
-            dest[((*n)++)]=0;
-            dest[((*n)++)]=0;
-        }
-    }
+       uint8_t *dest = BigBuf_get_addr();
+       int idx;
+
+       // for when we want an fc8 pattern every 4 logical bits
+       if(c==0) {
+               dest[((*n)++)]=1;
+               dest[((*n)++)]=1;
+               dest[((*n)++)]=1;
+               dest[((*n)++)]=1;
+               dest[((*n)++)]=0;
+               dest[((*n)++)]=0;
+               dest[((*n)++)]=0;
+               dest[((*n)++)]=0;
+       }
+
+       //      an fc/8  encoded bit is a bit pattern of  11110000  x6 = 48 samples
+       if(c==8) {
+               for (idx=0; idx<6; idx++) {
+                       dest[((*n)++)]=1;
+                       dest[((*n)++)]=1;
+                       dest[((*n)++)]=1;
+                       dest[((*n)++)]=1;
+                       dest[((*n)++)]=0;
+                       dest[((*n)++)]=0;
+                       dest[((*n)++)]=0;
+                       dest[((*n)++)]=0;
+               }
+       }
+
+       //      an fc/10 encoded bit is a bit pattern of 1111100000 x5 = 50 samples
+       if(c==10) {
+               for (idx=0; idx<5; idx++) {
+                       dest[((*n)++)]=1;
+                       dest[((*n)++)]=1;
+                       dest[((*n)++)]=1;
+                       dest[((*n)++)]=1;
+                       dest[((*n)++)]=1;
+                       dest[((*n)++)]=0;
+                       dest[((*n)++)]=0;
+                       dest[((*n)++)]=0;
+                       dest[((*n)++)]=0;
+                       dest[((*n)++)]=0;
+               }
+       }
 }
 // compose fc/X fc/Y waveform (FSKx)
 static void fcAll(uint8_t fc, int *n, uint8_t clock, uint16_t *modCnt) 
 {
-    uint8_t *dest = BigBuf_get_addr();
-    uint8_t halfFC = fc/2;
-    uint8_t wavesPerClock = clock/fc;
-    uint8_t mod = clock % fc;    //modifier
-    uint8_t modAdj = fc/mod;     //how often to apply modifier
-    bool modAdjOk = !(fc % mod); //if (fc % mod==0) modAdjOk=TRUE;
-    // loop through clock - step field clock
-    for (uint8_t idx=0; idx < wavesPerClock; idx++){
-        // put 1/2 FC length 1's and 1/2 0's per field clock wave (to create the wave)
-        memset(dest+(*n), 0, fc-halfFC);  //in case of odd number use extra here
-        memset(dest+(*n)+(fc-halfFC), 1, halfFC);
-        *n += fc;
-    }
-    if (mod>0) (*modCnt)++;
-    if ((mod>0) && modAdjOk){  //fsk2 
-        if ((*modCnt % modAdj) == 0){ //if 4th 8 length wave in a rf/50 add extra 8 length wave
-            memset(dest+(*n), 0, fc-halfFC);
-            memset(dest+(*n)+(fc-halfFC), 1, halfFC);
-            *n += fc;
-        }
-    }
-    if (mod>0 && !modAdjOk){  //fsk1
-        memset(dest+(*n), 0, mod-(mod/2));
-        memset(dest+(*n)+(mod-(mod/2)), 1, mod/2);
-        *n += mod;
-    }
+       uint8_t *dest = BigBuf_get_addr();
+       uint8_t halfFC = fc/2;
+       uint8_t wavesPerClock = clock/fc;
+       uint8_t mod = clock % fc;    //modifier
+       uint8_t modAdj = fc/mod;     //how often to apply modifier
+       bool modAdjOk = !(fc % mod); //if (fc % mod==0) modAdjOk=TRUE;
+       // loop through clock - step field clock
+       for (uint8_t idx=0; idx < wavesPerClock; idx++){
+               // put 1/2 FC length 1's and 1/2 0's per field clock wave (to create the wave)
+               memset(dest+(*n), 0, fc-halfFC);  //in case of odd number use extra here
+               memset(dest+(*n)+(fc-halfFC), 1, halfFC);
+               *n += fc;
+       }
+       if (mod>0) (*modCnt)++;
+       if ((mod>0) && modAdjOk){  //fsk2 
+               if ((*modCnt % modAdj) == 0){ //if 4th 8 length wave in a rf/50 add extra 8 length wave
+                       memset(dest+(*n), 0, fc-halfFC);
+                       memset(dest+(*n)+(fc-halfFC), 1, halfFC);
+                       *n += fc;
+               }
+       }
+       if (mod>0 && !modAdjOk){  //fsk1
+               memset(dest+(*n), 0, mod-(mod/2));
+               memset(dest+(*n)+(mod-(mod/2)), 1, mod/2);
+               *n += mod;
+       }
 }
 
 // prepare a waveform pattern in the buffer based on the ID given then
 // simulate a HID tag until the button is pressed
 void CmdHIDsimTAG(int hi, int lo, int ledcontrol)
 {
-    int n=0, i=0;
-    /*
-     HID tag bitstream format
-     The tag contains a 44bit unique code. This is sent out MSB first in sets of 4 bits
-     A 1 bit is represented as 6 fc8 and 5 fc10 patterns
-     A 0 bit is represented as 5 fc10 and 6 fc8 patterns
-     A fc8 is inserted before every 4 bits
-     A special start of frame pattern is used consisting a0b0 where a and b are neither 0
-     nor 1 bits, they are special patterns (a = set of 12 fc8 and b = set of 10 fc10)
-    */
-
-    if (hi>0xFFF) {
-        DbpString("Tags can only have 44 bits. - USE lf simfsk for larger tags");
-        return;
-    }
-    fc(0,&n);
-    // special start of frame marker containing invalid bit sequences
-    fc(8,  &n);        fc(8,  &n);     // invalid
-    fc(8,  &n);        fc(10, &n); // logical 0
-    fc(10, &n);        fc(10, &n); // invalid
-    fc(8,  &n);        fc(10, &n); // logical 0
-
-    WDT_HIT();
-    // manchester encode bits 43 to 32
-    for (i=11; i>=0; i--) {
-        if ((i%4)==3) fc(0,&n);
-        if ((hi>>i)&1) {
-            fc(10, &n);        fc(8,  &n);             // low-high transition
-        } else {
-            fc(8,  &n);        fc(10, &n);             // high-low transition
-        }
-    }
-
-    WDT_HIT();
-    // manchester encode bits 31 to 0
-    for (i=31; i>=0; i--) {
-        if ((i%4)==3) fc(0,&n);
-        if ((lo>>i)&1) {
-            fc(10, &n);        fc(8,  &n);             // low-high transition
-        } else {
-            fc(8,  &n);        fc(10, &n);             // high-low transition
-        }
-    }
-
-    if (ledcontrol)
-        LED_A_ON();
-    SimulateTagLowFrequency(n, 0, ledcontrol);
-
-    if (ledcontrol)
-        LED_A_OFF();
+       int n=0, i=0;
+       /*
+        HID tag bitstream format
+        The tag contains a 44bit unique code. This is sent out MSB first in sets of 4 bits
+        A 1 bit is represented as 6 fc8 and 5 fc10 patterns
+        A 0 bit is represented as 5 fc10 and 6 fc8 patterns
+        A fc8 is inserted before every 4 bits
+        A special start of frame pattern is used consisting a0b0 where a and b are neither 0
+        nor 1 bits, they are special patterns (a = set of 12 fc8 and b = set of 10 fc10)
+       */
+
+       if (hi>0xFFF) {
+               DbpString("Tags can only have 44 bits. - USE lf simfsk for larger tags");
+               return;
+       }
+       fc(0,&n);
+       // special start of frame marker containing invalid bit sequences
+       fc(8,  &n);     fc(8,  &n); // invalid
+       fc(8,  &n);     fc(10, &n); // logical 0
+       fc(10, &n);     fc(10, &n); // invalid
+       fc(8,  &n);     fc(10, &n); // logical 0
+
+       WDT_HIT();
+       // manchester encode bits 43 to 32
+       for (i=11; i>=0; i--) {
+               if ((i%4)==3) fc(0,&n);
+               if ((hi>>i)&1) {
+                       fc(10, &n); fc(8,  &n);         // low-high transition
+               } else {
+                       fc(8,  &n); fc(10, &n);         // high-low transition
+               }
+       }
+
+       WDT_HIT();
+       // manchester encode bits 31 to 0
+       for (i=31; i>=0; i--) {
+               if ((i%4)==3) fc(0,&n);
+               if ((lo>>i)&1) {
+                       fc(10, &n); fc(8,  &n);         // low-high transition
+               } else {
+                       fc(8,  &n); fc(10, &n);         // high-low transition
+               }
+       }
+
+       if (ledcontrol)
+               LED_A_ON();
+       SimulateTagLowFrequency(n, 0, ledcontrol);
+
+       if (ledcontrol)
+               LED_A_OFF();
 }
 
 // prepare a waveform pattern in the buffer based on the ID given then
@@ -582,410 +584,392 @@ void CmdHIDsimTAG(int hi, int lo, int ledcontrol)
 // arg1 contains fcHigh and fcLow, arg2 contains invert and clock
 void CmdFSKsimTAG(uint16_t arg1, uint16_t arg2, size_t size, uint8_t *BitStream)
 {
-    int ledcontrol=1;
-    int n=0, i=0;
-    uint8_t fcHigh = arg1 >> 8;
-    uint8_t fcLow = arg1 & 0xFF;
-    uint16_t modCnt = 0;
-    uint8_t clk = arg2 & 0xFF;
-    uint8_t invert = (arg2 >> 8) & 1;
-
-    for (i=0; i<size; i++){
-        if (BitStream[i] == invert){
-            fcAll(fcLow, &n, clk, &modCnt);
-        } else {
-            fcAll(fcHigh, &n, clk, &modCnt);
-        }
-    }
-    Dbprintf("Simulating with fcHigh: %d, fcLow: %d, clk: %d, invert: %d, n: %d",fcHigh, fcLow, clk, invert, n);
-    /*Dbprintf("DEBUG: First 32:");
-    uint8_t *dest = BigBuf_get_addr();
-    i=0;
-    Dbprintf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", dest[i],dest[i+1],dest[i+2],dest[i+3],dest[i+4],dest[i+5],dest[i+6],dest[i+7],dest[i+8],dest[i+9],dest[i+10],dest[i+11],dest[i+12],dest[i+13],dest[i+14],dest[i+15]);
-    i+=16;
-    Dbprintf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", dest[i],dest[i+1],dest[i+2],dest[i+3],dest[i+4],dest[i+5],dest[i+6],dest[i+7],dest[i+8],dest[i+9],dest[i+10],dest[i+11],dest[i+12],dest[i+13],dest[i+14],dest[i+15]);
-    */     
-    if (ledcontrol)
-        LED_A_ON();
-
-    SimulateTagLowFrequency(n, 0, ledcontrol);
-
-    if (ledcontrol)
-        LED_A_OFF();
+       int ledcontrol=1;
+       int n=0, i=0;
+       uint8_t fcHigh = arg1 >> 8;
+       uint8_t fcLow = arg1 & 0xFF;
+       uint16_t modCnt = 0;
+       uint8_t clk = arg2 & 0xFF;
+       uint8_t invert = (arg2 >> 8) & 1;
+
+       for (i=0; i<size; i++){
+               if (BitStream[i] == invert){
+                       fcAll(fcLow, &n, clk, &modCnt);
+               } else {
+                       fcAll(fcHigh, &n, clk, &modCnt);
+               }
+       }
+       Dbprintf("Simulating with fcHigh: %d, fcLow: %d, clk: %d, invert: %d, n: %d",fcHigh, fcLow, clk, invert, n);
+       /*Dbprintf("DEBUG: First 32:");
+       uint8_t *dest = BigBuf_get_addr();
+       i=0;
+       Dbprintf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", dest[i],dest[i+1],dest[i+2],dest[i+3],dest[i+4],dest[i+5],dest[i+6],dest[i+7],dest[i+8],dest[i+9],dest[i+10],dest[i+11],dest[i+12],dest[i+13],dest[i+14],dest[i+15]);
+       i+=16;
+       Dbprintf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", dest[i],dest[i+1],dest[i+2],dest[i+3],dest[i+4],dest[i+5],dest[i+6],dest[i+7],dest[i+8],dest[i+9],dest[i+10],dest[i+11],dest[i+12],dest[i+13],dest[i+14],dest[i+15]);
+       */
+       if (ledcontrol)
+               LED_A_ON();
+
+       SimulateTagLowFrequency(n, 0, ledcontrol);
+
+       if (ledcontrol)
+               LED_A_OFF();
 }
 
 // compose ask waveform for one bit(ASK)
-static void askSimBit(uint8_t c, int *n, uint8_t clock, uint8_t manchester) 
+static void askSimBit(uint8_t c, int *n, uint8_t clock, uint8_t manchester)
 {
-    uint8_t *dest = BigBuf_get_addr();
-    uint8_t halfClk = clock/2;
-    // c = current bit 1 or 0
-    if (manchester==1){
-        memset(dest+(*n), c, halfClk);
-        memset(dest+(*n) + halfClk, c^1, halfClk);
-    } else {
-        memset(dest+(*n), c, clock);
-    }
-    *n += clock;        
+       uint8_t *dest = BigBuf_get_addr();
+       uint8_t halfClk = clock/2;
+       // c = current bit 1 or 0
+       if (manchester==1){
+               memset(dest+(*n), c, halfClk);
+               memset(dest+(*n) + halfClk, c^1, halfClk);
+       } else {
+               memset(dest+(*n), c, clock);
+       }
+       *n += clock;
 }
 
 static void biphaseSimBit(uint8_t c, int *n, uint8_t clock, uint8_t *phase)
 {
-    uint8_t *dest = BigBuf_get_addr();
-    uint8_t halfClk = clock/2;
-    if (c){
-        memset(dest+(*n), c ^ 1 ^ *phase, halfClk);
-        memset(dest+(*n) + halfClk, c ^ *phase, halfClk);        
-    } else {
-        memset(dest+(*n), c ^ *phase, clock);
-        *phase ^= 1;
-    }
+       uint8_t *dest = BigBuf_get_addr();
+       uint8_t halfClk = clock/2;
+       if (c){
+               memset(dest+(*n), c ^ 1 ^ *phase, halfClk);
+               memset(dest+(*n) + halfClk, c ^ *phase, halfClk);
+       } else {
+               memset(dest+(*n), c ^ *phase, clock);
+               *phase ^= 1;
+       }
 
 }
 
 // args clock, ask/man or askraw, invert, transmission separator
 void CmdASKsimTag(uint16_t arg1, uint16_t arg2, size_t size, uint8_t *BitStream)
 {
-    int ledcontrol = 1;
-    int n=0, i=0;
-    uint8_t clk = (arg1 >> 8) & 0xFF;
-    uint8_t encoding = arg1 & 1;
-    uint8_t separator = arg2 & 1;
-    uint8_t invert = (arg2 >> 8) & 1;
-
-    if (encoding==2){  //biphase
-        uint8_t phase=0;
-    for (i=0; i<size; i++){
-            biphaseSimBit(BitStream[i]^invert, &n, clk, &phase);
-    }
-        if (BitStream[0]==BitStream[size-1]){ //run a second set inverted to keep phase in check
-        for (i=0; i<size; i++){
-                biphaseSimBit(BitStream[i]^invert, &n, clk, &phase);
-            }
-        }
-    } else {  // ask/manchester || ask/raw
-        for (i=0; i<size; i++){
-            askSimBit(BitStream[i]^invert, &n, clk, encoding);
-        }
-        if (encoding==0 && BitStream[0]==BitStream[size-1]){ //run a second set inverted (for biphase phase)
-            for (i=0; i<size; i++){
-                askSimBit(BitStream[i]^invert^1, &n, clk, encoding);
-        }    
-        }    
-    }
-    
-    if (separator==1) Dbprintf("sorry but separator option not yet available"); 
-
-    Dbprintf("Simulating with clk: %d, invert: %d, encoding: %d, separator: %d, n: %d",clk, invert, encoding, separator, n);
-    //DEBUG
-    //Dbprintf("First 32:");
-    //uint8_t *dest = BigBuf_get_addr();
-    //i=0;
-    //Dbprintf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", dest[i],dest[i+1],dest[i+2],dest[i+3],dest[i+4],dest[i+5],dest[i+6],dest[i+7],dest[i+8],dest[i+9],dest[i+10],dest[i+11],dest[i+12],dest[i+13],dest[i+14],dest[i+15]);
-    //i+=16;
-    //Dbprintf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", dest[i],dest[i+1],dest[i+2],dest[i+3],dest[i+4],dest[i+5],dest[i+6],dest[i+7],dest[i+8],dest[i+9],dest[i+10],dest[i+11],dest[i+12],dest[i+13],dest[i+14],dest[i+15]);
-
-    if (ledcontrol)
-        LED_A_ON();
-    
-    SimulateTagLowFrequency(n, 0, ledcontrol);
-
-    if (ledcontrol)
-        LED_A_OFF();
+       int ledcontrol = 1;
+       int n=0, i=0;
+       uint8_t clk = (arg1 >> 8) & 0xFF;
+       uint8_t encoding = arg1 & 1;
+       uint8_t separator = arg2 & 1;
+       uint8_t invert = (arg2 >> 8) & 1;
+
+       if (encoding==2){  //biphase
+               uint8_t phase=0;
+               for (i=0; i<size; i++){
+                       biphaseSimBit(BitStream[i]^invert, &n, clk, &phase);
+               }
+               if (BitStream[0]==BitStream[size-1]){ //run a second set inverted to keep phase in check
+                       for (i=0; i<size; i++){
+                               biphaseSimBit(BitStream[i]^invert, &n, clk, &phase);
+                       }
+               }
+       } else {  // ask/manchester || ask/raw
+               for (i=0; i<size; i++){
+                       askSimBit(BitStream[i]^invert, &n, clk, encoding);
+               }
+               if (encoding==0 && BitStream[0]==BitStream[size-1]){ //run a second set inverted (for biphase phase)
+                       for (i=0; i<size; i++){
+                               askSimBit(BitStream[i]^invert^1, &n, clk, encoding);
+                       }
+               }
+       }
+       
+       if (separator==1) Dbprintf("sorry but separator option not yet available"); 
+
+       Dbprintf("Simulating with clk: %d, invert: %d, encoding: %d, separator: %d, n: %d",clk, invert, encoding, separator, n);
+       //DEBUG
+       //Dbprintf("First 32:");
+       //uint8_t *dest = BigBuf_get_addr();
+       //i=0;
+       //Dbprintf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", dest[i],dest[i+1],dest[i+2],dest[i+3],dest[i+4],dest[i+5],dest[i+6],dest[i+7],dest[i+8],dest[i+9],dest[i+10],dest[i+11],dest[i+12],dest[i+13],dest[i+14],dest[i+15]);
+       //i+=16;
+       //Dbprintf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", dest[i],dest[i+1],dest[i+2],dest[i+3],dest[i+4],dest[i+5],dest[i+6],dest[i+7],dest[i+8],dest[i+9],dest[i+10],dest[i+11],dest[i+12],dest[i+13],dest[i+14],dest[i+15]);
+
+       if (ledcontrol)
+               LED_A_ON();
+       
+       SimulateTagLowFrequency(n, 0, ledcontrol);
+
+       if (ledcontrol)
+               LED_A_OFF();
 }
 
 //carrier can be 2,4 or 8
 static void pskSimBit(uint8_t waveLen, int *n, uint8_t clk, uint8_t *curPhase, bool phaseChg)
 {
-    uint8_t *dest = BigBuf_get_addr();
-    uint8_t halfWave = waveLen/2;
-    //uint8_t idx;
-    int i = 0;
-    if (phaseChg){
-        // write phase change
-        memset(dest+(*n), *curPhase^1, halfWave);
-        memset(dest+(*n) + halfWave, *curPhase, halfWave);
-        *n += waveLen;
-        *curPhase ^= 1;
-        i += waveLen;
-    }
-    //write each normal clock wave for the clock duration
-    for (; i < clk; i+=waveLen){
-        memset(dest+(*n), *curPhase, halfWave);
-        memset(dest+(*n) + halfWave, *curPhase^1, halfWave);
-        *n += waveLen;
-    }
+       uint8_t *dest = BigBuf_get_addr();
+       uint8_t halfWave = waveLen/2;
+       //uint8_t idx;
+       int i = 0;
+       if (phaseChg){
+               // write phase change
+               memset(dest+(*n), *curPhase^1, halfWave);
+               memset(dest+(*n) + halfWave, *curPhase, halfWave);
+               *n += waveLen;
+               *curPhase ^= 1;
+               i += waveLen;
+       }
+       //write each normal clock wave for the clock duration
+       for (; i < clk; i+=waveLen){
+               memset(dest+(*n), *curPhase, halfWave);
+               memset(dest+(*n) + halfWave, *curPhase^1, halfWave);
+               *n += waveLen;
+       }
 }
 
 // args clock, carrier, invert,
 void CmdPSKsimTag(uint16_t arg1, uint16_t arg2, size_t size, uint8_t *BitStream)
 {
-    int ledcontrol=1;
-    int n=0, i=0;
-    uint8_t clk = arg1 >> 8;
-    uint8_t carrier = arg1 & 0xFF;
-    uint8_t invert = arg2 & 0xFF;
-    uint8_t curPhase = 0;
-    for (i=0; i<size; i++){
-        if (BitStream[i] == curPhase){
-            pskSimBit(carrier, &n, clk, &curPhase, FALSE);
-        } else {
-            pskSimBit(carrier, &n, clk, &curPhase, TRUE);
-        }            
-    }
-    Dbprintf("Simulating with Carrier: %d, clk: %d, invert: %d, n: %d",carrier, clk, invert, n);
-    //Dbprintf("DEBUG: First 32:");
-    //uint8_t *dest = BigBuf_get_addr();
-    //i=0;
-    //Dbprintf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", dest[i],dest[i+1],dest[i+2],dest[i+3],dest[i+4],dest[i+5],dest[i+6],dest[i+7],dest[i+8],dest[i+9],dest[i+10],dest[i+11],dest[i+12],dest[i+13],dest[i+14],dest[i+15]);
-    //i+=16;
-    //Dbprintf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", dest[i],dest[i+1],dest[i+2],dest[i+3],dest[i+4],dest[i+5],dest[i+6],dest[i+7],dest[i+8],dest[i+9],dest[i+10],dest[i+11],dest[i+12],dest[i+13],dest[i+14],dest[i+15]);
-           
-    if (ledcontrol)
-        LED_A_ON();
-    SimulateTagLowFrequency(n, 0, ledcontrol);
-
-    if (ledcontrol)
-        LED_A_OFF();
+       int ledcontrol=1;
+       int n=0, i=0;
+       uint8_t clk = arg1 >> 8;
+       uint8_t carrier = arg1 & 0xFF;
+       uint8_t invert = arg2 & 0xFF;
+       uint8_t curPhase = 0;
+       for (i=0; i<size; i++){
+               if (BitStream[i] == curPhase){
+                       pskSimBit(carrier, &n, clk, &curPhase, FALSE);
+               } else {
+                       pskSimBit(carrier, &n, clk, &curPhase, TRUE);
+               }
+       }
+       Dbprintf("Simulating with Carrier: %d, clk: %d, invert: %d, n: %d",carrier, clk, invert, n);
+       //Dbprintf("DEBUG: First 32:");
+       //uint8_t *dest = BigBuf_get_addr();
+       //i=0;
+       //Dbprintf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", dest[i],dest[i+1],dest[i+2],dest[i+3],dest[i+4],dest[i+5],dest[i+6],dest[i+7],dest[i+8],dest[i+9],dest[i+10],dest[i+11],dest[i+12],dest[i+13],dest[i+14],dest[i+15]);
+       //i+=16;
+       //Dbprintf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", dest[i],dest[i+1],dest[i+2],dest[i+3],dest[i+4],dest[i+5],dest[i+6],dest[i+7],dest[i+8],dest[i+9],dest[i+10],dest[i+11],dest[i+12],dest[i+13],dest[i+14],dest[i+15]);
+                  
+       if (ledcontrol)
+               LED_A_ON();
+       SimulateTagLowFrequency(n, 0, ledcontrol);
+
+       if (ledcontrol)
+               LED_A_OFF();
 }
 
 // loop to get raw HID waveform then FSK demodulate the TAG ID from it
 void CmdHIDdemodFSK(int findone, int *high, int *low, int ledcontrol)
 {
-    uint8_t *dest = BigBuf_get_addr();
-    const size_t sizeOfBigBuff = BigBuf_max_traceLen();
-    size_t size = 0; 
-    uint32_t hi2=0, hi=0, lo=0;
-    int idx=0;
-    // Configure to go in 125Khz listen mode
-    LFSetupFPGAForADC(95, true);
+       uint8_t *dest = BigBuf_get_addr();
+       const size_t sizeOfBigBuff = BigBuf_max_traceLen();
+       size_t size = 0; 
+       uint32_t hi2=0, hi=0, lo=0;
+       int idx=0;
+       // Configure to go in 125Khz listen mode
+       LFSetupFPGAForADC(95, true);
 
-    while(!BUTTON_PRESS()) {
+       while(!BUTTON_PRESS()) {
 
-        WDT_HIT();
-        if (ledcontrol) LED_A_ON();
+               WDT_HIT();
+               if (ledcontrol) LED_A_ON();
 
                DoAcquisition_default(-1,true);
-        // FSK demodulator
-        size = sizeOfBigBuff;  //variable size will change after demod so re initialize it before use
+               // FSK demodulator
+               size = sizeOfBigBuff;  //variable size will change after demod so re initialize it before use
                idx = HIDdemodFSK(dest, &size, &hi2, &hi, &lo);
-        
+               
                if (idx>0 && lo>0){
-            // final loop, go over previously decoded manchester data and decode into usable tag ID
-            // 111000 bit pattern represent start of frame, 01 pattern represents a 1 and 10 represents a 0
-            if (hi2 != 0){ //extra large HID tags
-                Dbprintf("TAG ID: %x%08x%08x (%d)",
-                         (unsigned int) hi2, (unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF);
-            }else {  //standard HID tags <38 bits
-                //Dbprintf("TAG ID: %x%08x (%d)",(unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF); //old print cmd
-                uint8_t bitlen = 0;
-                uint32_t fc = 0;
-                uint32_t cardnum = 0;
+                       // final loop, go over previously decoded manchester data and decode into usable tag ID
+                       // 111000 bit pattern represent start of frame, 01 pattern represents a 1 and 10 represents a 0
+                       if (hi2 != 0){ //extra large HID tags
+                               Dbprintf("TAG ID: %x%08x%08x (%d)",
+                                 (unsigned int) hi2, (unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF);
+                       }else {  //standard HID tags <38 bits
+                               //Dbprintf("TAG ID: %x%08x (%d)",(unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF); //old print cmd
+                               uint8_t bitlen = 0;
+                               uint32_t fc = 0;
+                               uint32_t cardnum = 0;
                                if (((hi>>5)&1) == 1){//if bit 38 is set then < 37 bit format is used
-                    uint32_t lo2=0;
-                    lo2=(((hi & 31) << 12) | (lo>>20)); //get bits 21-37 to check for format len bit
-                    uint8_t idx3 = 1;
+                                       uint32_t lo2=0;
+                                       lo2=(((hi & 31) << 12) | (lo>>20)); //get bits 21-37 to check for format len bit
+                                       uint8_t idx3 = 1;
                                        while(lo2 > 1){ //find last bit set to 1 (format len bit)
                                                lo2=lo2 >> 1;
-                        idx3++;
-                    }
+                                               idx3++;
+                                       }
                                        bitlen = idx3+19;
-                    fc =0;
-                    cardnum=0;
+                                       fc =0;
+                                       cardnum=0;
                                        if(bitlen == 26){
-                        cardnum = (lo>>1)&0xFFFF;
-                        fc = (lo>>17)&0xFF;
-                    }
+                                               cardnum = (lo>>1)&0xFFFF;
+                                               fc = (lo>>17)&0xFF;
+                                       }
                                        if(bitlen == 37){
-                        cardnum = (lo>>1)&0x7FFFF;
-                        fc = ((hi&0xF)<<12)|(lo>>20);
-                    }
+                                               cardnum = (lo>>1)&0x7FFFF;
+                                               fc = ((hi&0xF)<<12)|(lo>>20);
+                                       }
                                        if(bitlen == 34){
-                        cardnum = (lo>>1)&0xFFFF;
-                        fc= ((hi&1)<<15)|(lo>>17);
-                    }
+                                               cardnum = (lo>>1)&0xFFFF;
+                                               fc= ((hi&1)<<15)|(lo>>17);
+                                       }
                                        if(bitlen == 35){
-                        cardnum = (lo>>1)&0xFFFFF;
-                        fc = ((hi&1)<<11)|(lo>>21);
-                    }
-                }
-                else { //if bit 38 is not set then 37 bit format is used
-                    bitlen= 37;
-                    fc =0;
-                    cardnum=0;
-                    if(bitlen==37){
-                        cardnum = (lo>>1)&0x7FFFF;
-                        fc = ((hi&0xF)<<12)|(lo>>20);
-                    }
-                }
-                //Dbprintf("TAG ID: %x%08x (%d)",
-                // (unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF);
-                Dbprintf("TAG ID: %x%08x (%d) - Format Len: %dbit - FC: %d - Card: %d",
-                         (unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF,
-                         (unsigned int) bitlen, (unsigned int) fc, (unsigned int) cardnum);
-            }
-            if (findone){
-                if (ledcontrol)        LED_A_OFF();
-                *high = hi;
-                *low = lo;
-                return;
-            }
-            // reset
-            hi2 = hi = lo = 0;
-        }
-        WDT_HIT();
-    }
-    DbpString("Stopped");
-    if (ledcontrol) LED_A_OFF();
+                                               cardnum = (lo>>1)&0xFFFFF;
+                                               fc = ((hi&1)<<11)|(lo>>21);
+                                       }
+                               }
+                               else { //if bit 38 is not set then 37 bit format is used
+                                       bitlen= 37;
+                                       fc =0;
+                                       cardnum=0;
+                                       if(bitlen==37){
+                                               cardnum = (lo>>1)&0x7FFFF;
+                                               fc = ((hi&0xF)<<12)|(lo>>20);
+                                       }
+                               }
+                               //Dbprintf("TAG ID: %x%08x (%d)",
+                               // (unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF);
+                               Dbprintf("TAG ID: %x%08x (%d) - Format Len: %dbit - FC: %d - Card: %d",
+                                                (unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF,
+                                                (unsigned int) bitlen, (unsigned int) fc, (unsigned int) cardnum);
+                       }
+                       if (findone){
+                               if (ledcontrol) LED_A_OFF();
+                               *high = hi;
+                               *low = lo;
+                               return;
+                       }
+                       // reset
+                       hi2 = hi = lo = 0;
+               }
+               WDT_HIT();
+       }
+       DbpString("Stopped");
+       if (ledcontrol) LED_A_OFF();
 }
 
 void CmdEM410xdemod(int findone, int *high, int *low, int ledcontrol)
 {
-    uint8_t *dest = BigBuf_get_addr();
+       uint8_t *dest = BigBuf_get_addr();
 
        size_t size=0, idx=0;
-    int clk=0, invert=0, errCnt=0, maxErr=20;
-    uint32_t hi=0;
-    uint64_t lo=0;
-    // Configure to go in 125Khz listen mode
-    LFSetupFPGAForADC(95, true);
+       int clk=0, invert=0, errCnt=0, maxErr=20;
+       uint32_t hi=0;
+       uint64_t lo=0;
+       // Configure to go in 125Khz listen mode
+       LFSetupFPGAForADC(95, true);
 
-    while(!BUTTON_PRESS()) {
+       while(!BUTTON_PRESS()) {
 
-        WDT_HIT();
-        if (ledcontrol) LED_A_ON();
+               WDT_HIT();
+               if (ledcontrol) LED_A_ON();
 
                DoAcquisition_default(-1,true);
-        size  = BigBuf_max_traceLen();
-        //Dbprintf("DEBUG: Buffer got");
+               size  = BigBuf_max_traceLen();
+               //Dbprintf("DEBUG: Buffer got");
                //askdemod and manchester decode
                errCnt = askmandemod(dest, &size, &clk, &invert, maxErr);
-        //Dbprintf("DEBUG: ASK Got");
-        WDT_HIT();
-
-        if (errCnt>=0){
-            errCnt = Em410xDecode(dest, &size, &idx, &hi, &lo);
-            //Dbprintf("DEBUG: EM GOT");
-            if (errCnt){
-                if (size>64){
-                    Dbprintf("EM XL TAG ID: %06x%08x%08x - (%05d_%03d_%08d)",
-                        hi,
-                        (uint32_t)(lo>>32),
-                        (uint32_t)lo,
-                        (uint32_t)(lo&0xFFFF),
-                        (uint32_t)((lo>>16LL) & 0xFF),
-                        (uint32_t)(lo & 0xFFFFFF));
-                } else {
-                               Dbprintf("EM TAG ID: %02x%08x - (%05d_%03d_%08d)",
-                                   (uint32_t)(lo>>32),
-                                   (uint32_t)lo,
-                                   (uint32_t)(lo&0xFFFF),
-                                   (uint32_t)((lo>>16LL) & 0xFF),
-                                   (uint32_t)(lo & 0xFFFFFF));
-            }
-            }
-            if (findone){
-                if (ledcontrol)        LED_A_OFF();
-                *high=lo>>32;
-                *low=lo & 0xFFFFFFFF;
-                return;
-            }
-        } else{
-            //Dbprintf("DEBUG: No Tag");
-        }
-        WDT_HIT();
-        lo = 0;
-        clk=0;
-        invert=0;
-        errCnt=0;
-        size=0;
-    }
-    DbpString("Stopped");
-    if (ledcontrol) LED_A_OFF();
+               //Dbprintf("DEBUG: ASK Got");
+               WDT_HIT();
+
+               if (errCnt>=0){
+                       errCnt = Em410xDecode(dest, &size, &idx, &hi, &lo);
+                       //Dbprintf("DEBUG: EM GOT");
+                       if (errCnt){
+                               if (size>64){
+                                       Dbprintf("EM XL TAG ID: %06x%08x%08x - (%05d_%03d_%08d)",
+                                         hi,
+                                         (uint32_t)(lo>>32),
+                                         (uint32_t)lo,
+                                         (uint32_t)(lo&0xFFFF),
+                                         (uint32_t)((lo>>16LL) & 0xFF),
+                                         (uint32_t)(lo & 0xFFFFFF));
+                               } else {
+                                       Dbprintf("EM TAG ID: %02x%08x - (%05d_%03d_%08d)",
+                                         (uint32_t)(lo>>32),
+                                         (uint32_t)lo,
+                                         (uint32_t)(lo&0xFFFF),
+                                         (uint32_t)((lo>>16LL) & 0xFF),
+                                         (uint32_t)(lo & 0xFFFFFF));
+                               }
+                       }
+                       if (findone){
+                               if (ledcontrol) LED_A_OFF();
+                               *high=lo>>32;
+                               *low=lo & 0xFFFFFFFF;
+                               return;
+                       }
+               } else{
+                       //Dbprintf("DEBUG: No Tag");
+               }
+               WDT_HIT();
+               hi = 0;
+               lo = 0;
+               clk=0;
+               invert=0;
+               errCnt=0;
+               size=0;
+       }
+       DbpString("Stopped");
+       if (ledcontrol) LED_A_OFF();
 }
 
 void CmdIOdemodFSK(int findone, int *high, int *low, int ledcontrol)
 {
-    uint8_t *dest = BigBuf_get_addr();
-    int idx=0;
-    uint32_t code=0, code2=0;
-    uint8_t version=0;
-    uint8_t facilitycode=0;
-    uint16_t number=0;
-       uint8_t crc = 0;
-       uint16_t calccrc = 0;
-    // Configure to go in 125Khz listen mode
-    LFSetupFPGAForADC(95, true);
-
-    while(!BUTTON_PRESS()) {
-        WDT_HIT();
-        if (ledcontrol) LED_A_ON();
+       uint8_t *dest = BigBuf_get_addr();
+       int idx=0;
+       uint32_t code=0, code2=0;
+       uint8_t version=0;
+       uint8_t facilitycode=0;
+       uint16_t number=0;
+       // Configure to go in 125Khz listen mode
+       LFSetupFPGAForADC(95, true);
+
+       while(!BUTTON_PRESS()) {
+               WDT_HIT();
+               if (ledcontrol) LED_A_ON();
                DoAcquisition_default(-1,true);
-        //fskdemod and get start index
-        WDT_HIT();
-        idx = IOdemodFSK(dest, BigBuf_max_traceLen());
-        if (idx>0){
-            //valid tag found
-
-            //Index map
-            //0           10          20          30          40          50          60
-            //|           |           |           |           |           |           |
-            //01234567 8 90123456 7 89012345 6 78901234 5 67890123 4 56789012 3 45678901 23
-            //-----------------------------------------------------------------------------
-            //00000000 0 11110000 1 facility 1 version* 1 code*one 1 code*two 1 checksum 11
-            //
-                       //Checksum:  
-                       //00000000 0 11110000 1 11100000 1 00000001 1 00000011 1 10110110 1 01110101 11
-                       //preamble      F0         E0         01         03         B6         75
-                       // How to calc checksum,
-                       // http://www.proxmark.org/forum/viewtopic.php?id=364&p=6
-                       //   F0 + E0 + 01 + 03 + B6 = 28A
-                       //   28A & FF = 8A
-                       //   FF - 8A = 75
-                       // Checksum: 0x75
-            //XSF(version)facility:codeone+codetwo
-            //Handle the data
-            if(findone){ //only print binary if we are doing one
-                Dbprintf("%d%d%d%d%d%d%d%d %d",dest[idx],   dest[idx+1],   dest[idx+2],dest[idx+3],dest[idx+4],dest[idx+5],dest[idx+6],dest[idx+7],dest[idx+8]);
-                Dbprintf("%d%d%d%d%d%d%d%d %d",dest[idx+9], dest[idx+10],dest[idx+11],dest[idx+12],dest[idx+13],dest[idx+14],dest[idx+15],dest[idx+16],dest[idx+17]);
-                Dbprintf("%d%d%d%d%d%d%d%d %d",dest[idx+18],dest[idx+19],dest[idx+20],dest[idx+21],dest[idx+22],dest[idx+23],dest[idx+24],dest[idx+25],dest[idx+26]);
-                Dbprintf("%d%d%d%d%d%d%d%d %d",dest[idx+27],dest[idx+28],dest[idx+29],dest[idx+30],dest[idx+31],dest[idx+32],dest[idx+33],dest[idx+34],dest[idx+35]);
-                Dbprintf("%d%d%d%d%d%d%d%d %d",dest[idx+36],dest[idx+37],dest[idx+38],dest[idx+39],dest[idx+40],dest[idx+41],dest[idx+42],dest[idx+43],dest[idx+44]);
-                Dbprintf("%d%d%d%d%d%d%d%d %d",dest[idx+45],dest[idx+46],dest[idx+47],dest[idx+48],dest[idx+49],dest[idx+50],dest[idx+51],dest[idx+52],dest[idx+53]);
-                Dbprintf("%d%d%d%d%d%d%d%d %d%d",dest[idx+54],dest[idx+55],dest[idx+56],dest[idx+57],dest[idx+58],dest[idx+59],dest[idx+60],dest[idx+61],dest[idx+62],dest[idx+63]);
-            }
-            code = bytebits_to_byte(dest+idx,32);
-            code2 = bytebits_to_byte(dest+idx+32,32);
-            version = bytebits_to_byte(dest+idx+27,8); //14,4
-            facilitycode = bytebits_to_byte(dest+idx+18,8) ;
-            number = (bytebits_to_byte(dest+idx+36,8)<<8)|(bytebits_to_byte(dest+idx+45,8)); //36,9
-
-                       crc = bytebits_to_byte(dest+idx+54,8);
-                       for (uint8_t i=1; i<6; ++i)
-                               calccrc += bytebits_to_byte(dest+idx+9*i,8);
-                       calccrc &= 0xff;
-                       calccrc = 0xff - calccrc;
-                       
-                       char *crcStr = (crc == calccrc) ? "ok":"!crc";
-
-            Dbprintf("IO Prox XSF(%02d)%02x:%05d (%08x%08x)  [%02x %s]",version,facilitycode,number,code,code2, crc, crcStr);
-            // if we're only looking for one tag
-            if (findone){
-                if (ledcontrol)        LED_A_OFF();
-                //LED_A_OFF();
-                *high=code;
-                *low=code2;
-                return;
-            }
-            code=code2=0;
-            version=facilitycode=0;
-            number=0;
-            idx=0;
-        }
-        WDT_HIT();
-    }
-    DbpString("Stopped");
-    if (ledcontrol) LED_A_OFF();
+               //fskdemod and get start index
+               WDT_HIT();
+               idx = IOdemodFSK(dest, BigBuf_max_traceLen());
+               if (idx>0){
+                       //valid tag found
+
+                       //Index map
+                       //0           10          20          30          40          50          60
+                       //|           |           |           |           |           |           |
+                       //01234567 8 90123456 7 89012345 6 78901234 5 67890123 4 56789012 3 45678901 23
+                       //-----------------------------------------------------------------------------
+                       //00000000 0 11110000 1 facility 1 version* 1 code*one 1 code*two 1 ???????? 11
+                       //
+                       //XSF(version)facility:codeone+codetwo
+                       //Handle the data
+                       if(findone){ //only print binary if we are doing one
+                               Dbprintf("%d%d%d%d%d%d%d%d %d",dest[idx],   dest[idx+1],   dest[idx+2],dest[idx+3],dest[idx+4],dest[idx+5],dest[idx+6],dest[idx+7],dest[idx+8]);
+                               Dbprintf("%d%d%d%d%d%d%d%d %d",dest[idx+9], dest[idx+10],dest[idx+11],dest[idx+12],dest[idx+13],dest[idx+14],dest[idx+15],dest[idx+16],dest[idx+17]);
+                               Dbprintf("%d%d%d%d%d%d%d%d %d",dest[idx+18],dest[idx+19],dest[idx+20],dest[idx+21],dest[idx+22],dest[idx+23],dest[idx+24],dest[idx+25],dest[idx+26]);
+                               Dbprintf("%d%d%d%d%d%d%d%d %d",dest[idx+27],dest[idx+28],dest[idx+29],dest[idx+30],dest[idx+31],dest[idx+32],dest[idx+33],dest[idx+34],dest[idx+35]);
+                               Dbprintf("%d%d%d%d%d%d%d%d %d",dest[idx+36],dest[idx+37],dest[idx+38],dest[idx+39],dest[idx+40],dest[idx+41],dest[idx+42],dest[idx+43],dest[idx+44]);
+                               Dbprintf("%d%d%d%d%d%d%d%d %d",dest[idx+45],dest[idx+46],dest[idx+47],dest[idx+48],dest[idx+49],dest[idx+50],dest[idx+51],dest[idx+52],dest[idx+53]);
+                               Dbprintf("%d%d%d%d%d%d%d%d %d%d",dest[idx+54],dest[idx+55],dest[idx+56],dest[idx+57],dest[idx+58],dest[idx+59],dest[idx+60],dest[idx+61],dest[idx+62],dest[idx+63]);
+                       }
+                       code = bytebits_to_byte(dest+idx,32);
+                       code2 = bytebits_to_byte(dest+idx+32,32);
+                       version = bytebits_to_byte(dest+idx+27,8); //14,4
+                       facilitycode = bytebits_to_byte(dest+idx+18,8) ;
+                       number = (bytebits_to_byte(dest+idx+36,8)<<8)|(bytebits_to_byte(dest+idx+45,8)); //36,9
+
+                       Dbprintf("XSF(%02d)%02x:%05d (%08x%08x)",version,facilitycode,number,code,code2);
+                       // if we're only looking for one tag
+                       if (findone){
+                               if (ledcontrol) LED_A_OFF();
+                               //LED_A_OFF();
+                               *high=code;
+                               *low=code2;
+                               return;
+                       }
+                       code=code2=0;
+                       version=facilitycode=0;
+                       number=0;
+                       idx=0;
+               }
+               WDT_HIT();
+       }
+       DbpString("Stopped");
+       if (ledcontrol) LED_A_OFF();
 }
 
 /*------------------------------
@@ -1048,334 +1032,311 @@ void CmdIOdemodFSK(int findone, int *high, int *low, int ledcontrol)
  * and enlarge the gap ones.
  */
 #define START_GAP 50*8 // 10 - 50fc 250
-#define WRITE_GAP 20*8 //  8 - 30fc
-#define WRITE_0   24*8 // 16 - 31fc 24fc 192
-#define WRITE_1   54*8 // 48 - 63fc 54fc 432 for T55x7; 448 for E5550
-
-//  VALUES TAKEN FROM EM4x function: SendForward
-//  START_GAP = 440;       (55*8) cycles at 125Khz (8us = 1cycle)
-//  WRITE_GAP = 128;       (16*8)
-//  WRITE_1   = 256 32*8;  (32*8) 
-
-//  These timings work for 4469/4269/4305 (with the 55*8 above)
-//  WRITE_0 = 23*8 , 9*8  SpinDelayUs(23*8); 
-
-// Sam7s has several timers, we will use the source TIMER_CLOCK1 (aka AT91C_TC_CLKS_TIMER_DIV1_CLOCK)
-// TIMER_CLOCK1 = MCK/2, MCK is running at 48 MHz, Timer is running at 48/2 = 24 MHz
-// Hitag units (T0) have duration of 8 microseconds (us), which is 1/125000 per second (carrier)
-// T0 = TIMER_CLOCK1 / 125000 = 192
-// 1 Cycle = 8 microseconds(us)
+#define WRITE_GAP 20*8 //    - 30fc 160
+#define WRITE_0   24*8 // 16 - 63fc 54fc 144
+#define WRITE_1   54*8 // 48 - 63fc 54fc 432 for T55x7; 448 for E5550 //400
 
-#define T55xx_SAMPLES_SIZE             12000 // 32 x 32 x 10  (32 bit times numofblock (7), times clock skip..)
+#define T55xx_SAMPLES_SIZE      12000 // 32 x 32 x 10  (32 bit times numofblock (7), times clock skip..)
 
 // Write one bit to card
 void T55xxWriteBit(int bit)
 {
-    FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
-    FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
-       if (!bit)
-        SpinDelayUs(WRITE_0);
-    else
-        SpinDelayUs(WRITE_1);
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
-    SpinDelayUs(WRITE_GAP);
+       FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
+       FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
+       if (bit == 0)
+               SpinDelayUs(WRITE_0);
+       else
+               SpinDelayUs(WRITE_1);
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+       SpinDelayUs(WRITE_GAP);
 }
 
 // Write one card block in page 0, no lock
 void T55xxWriteBlock(uint32_t Data, uint32_t Block, uint32_t Pwd, uint8_t PwdMode)
 {
-    uint32_t i = 0;
-
-    // Set up FPGA, 125kHz
-    // Wait for config.. (192+8190xPOW)x8 == 67ms
-    LFSetupFPGAForADC(0, true);
-
-    // Now start writting
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
-    SpinDelayUs(START_GAP);
-
-    // Opcode
-    T55xxWriteBit(1);
-    T55xxWriteBit(0); //Page 0
-    if (PwdMode == 1){
-        // Pwd
-        for (i = 0x80000000; i != 0; i >>= 1)
-            T55xxWriteBit(Pwd & i);
-    }
-    // Lock bit
-    T55xxWriteBit(0);
-
-    // Data
-    for (i = 0x80000000; i != 0; i >>= 1)
-        T55xxWriteBit(Data & i);
-
-    // Block
-    for (i = 0x04; i != 0; i >>= 1)
-        T55xxWriteBit(Block & i);
-
-    // Now perform write (nominal is 5.6 ms for T55x7 and 18ms for E5550,
-    // so wait a little more)
-    FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
-    SpinDelay(20);
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+       uint32_t i = 0;
+
+       // Set up FPGA, 125kHz
+       // Wait for config.. (192+8190xPOW)x8 == 67ms
+       LFSetupFPGAForADC(0, true);
+
+       // Now start writting
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+       SpinDelayUs(START_GAP);
+
+       // Opcode
+       T55xxWriteBit(1);
+       T55xxWriteBit(0); //Page 0
+       if (PwdMode == 1){
+               // Pwd
+               for (i = 0x80000000; i != 0; i >>= 1)
+                       T55xxWriteBit(Pwd & i);
+       }
+       // Lock bit
+       T55xxWriteBit(0);
+
+       // Data
+       for (i = 0x80000000; i != 0; i >>= 1)
+               T55xxWriteBit(Data & i);
+
+       // Block
+       for (i = 0x04; i != 0; i >>= 1)
+               T55xxWriteBit(Block & i);
+
+       // Now perform write (nominal is 5.6 ms for T55x7 and 18ms for E5550,
+       // so wait a little more)
+       FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
+       SpinDelay(20);
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
 }
 
 void TurnReadLFOn(){
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
-    // Give it a bit of time for the resonant antenna to settle.
-    SpinDelayUs(8*150);
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
+       // Give it a bit of time for the resonant antenna to settle.
+       SpinDelayUs(8*150);
 }
 
 
 // Read one card block in page 0
 void T55xxReadBlock(uint32_t Block, uint32_t Pwd, uint8_t PwdMode)
 {
-    uint32_t i = 0;
-    uint8_t *dest = BigBuf_get_addr();
-    uint16_t bufferlength = BigBuf_max_traceLen();
-    if ( bufferlength > T55xx_SAMPLES_SIZE )
-        bufferlength = T55xx_SAMPLES_SIZE;
-
-    // Clear destination buffer before sending the command
-    memset(dest, 0x80, bufferlength);
-
-    // Set up FPGA, 125kHz
-    // Wait for config.. (192+8190xPOW)x8 == 67ms
-    LFSetupFPGAForADC(0, true);
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
-    SpinDelayUs(START_GAP);
-
-    // Opcode
-    T55xxWriteBit(1);
-    T55xxWriteBit(0); //Page 0
-    if (PwdMode == 1){
-        // Pwd
-        for (i = 0x80000000; i != 0; i >>= 1)
-            T55xxWriteBit(Pwd & i);
-    }
-    // Lock bit
-    T55xxWriteBit(0);
-    // Block
-    for (i = 0x04; i != 0; i >>= 1)
-        T55xxWriteBit(Block & i);
-
-    // Turn field on to read the response
-    TurnReadLFOn();
-    // Now do the acquisition
-    i = 0;
-    for(;;) {
-        if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) {
-            AT91C_BASE_SSC->SSC_THR = 0x43;
-            LED_D_ON();
-        }
-        if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) {
-            dest[i] = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
-            i++;
-            LED_D_OFF();
-            if (i >= bufferlength) break;
-        }
-    }
-
-    cmd_send(CMD_ACK,0,0,0,0,0);    
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off
-    LED_D_OFF();
+       uint32_t i = 0;
+       uint8_t *dest = BigBuf_get_addr();
+       uint16_t bufferlength = BigBuf_max_traceLen();
+       if ( bufferlength > T55xx_SAMPLES_SIZE )
+               bufferlength = T55xx_SAMPLES_SIZE;
+
+       // Clear destination buffer before sending the command
+       memset(dest, 0x80, bufferlength);
+
+       // Set up FPGA, 125kHz
+       // Wait for config.. (192+8190xPOW)x8 == 67ms
+       LFSetupFPGAForADC(0, true);
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+       SpinDelayUs(START_GAP);
+
+       // Opcode
+       T55xxWriteBit(1);
+       T55xxWriteBit(0); //Page 0
+       if (PwdMode == 1){
+               // Pwd
+               for (i = 0x80000000; i != 0; i >>= 1)
+                       T55xxWriteBit(Pwd & i);
+       }
+       // Lock bit
+       T55xxWriteBit(0);
+       // Block
+       for (i = 0x04; i != 0; i >>= 1)
+               T55xxWriteBit(Block & i);
+
+       // Turn field on to read the response
+       TurnReadLFOn();
+       // Now do the acquisition
+       i = 0;
+       for(;;) {
+               if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) {
+                       AT91C_BASE_SSC->SSC_THR = 0x43;
+                       LED_D_ON();
+               }
+               if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) {
+                       dest[i] = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
+                       i++;
+                       LED_D_OFF();
+                       if (i >= bufferlength) break;
+               }
+       }
+
+       cmd_send(CMD_ACK,0,0,0,0,0);    
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off
+       LED_D_OFF();
 }
 
 // Read card traceability data (page 1)
 void T55xxReadTrace(void){
-    
-    uint32_t i = 0;
-    uint8_t *dest = BigBuf_get_addr();
-    uint16_t bufferlength = BigBuf_max_traceLen();
-    if ( bufferlength > T55xx_SAMPLES_SIZE )
-        bufferlength= T55xx_SAMPLES_SIZE;
-
-    // Clear destination buffer before sending the command
-    memset(dest, 0x80, bufferlength);
-
-    LFSetupFPGAForADC(0, true);
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
-    SpinDelayUs(START_GAP);
-
-    // Opcode
-    T55xxWriteBit(1);
-    T55xxWriteBit(1); //Page 1
-
-    // Turn field on to read the response
-    TurnReadLFOn();
-
-    // Now do the acquisition
-    for(;;) {
-        if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) {
-            AT91C_BASE_SSC->SSC_THR = 0x43;
-            LED_D_ON();
-        }
-        if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) {
-            dest[i] = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
-            i++;
-            LED_D_OFF();
-
-            if (i >= bufferlength) break;
+       
+       uint32_t i = 0;
+       uint8_t *dest = BigBuf_get_addr();
+       uint16_t bufferlength = BigBuf_max_traceLen();
+       if ( bufferlength > T55xx_SAMPLES_SIZE )
+               bufferlength= T55xx_SAMPLES_SIZE;
+
+       // Clear destination buffer before sending the command
+       memset(dest, 0x80, bufferlength);
+
+       LFSetupFPGAForADC(0, true);
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+       SpinDelayUs(START_GAP);
+
+       // Opcode
+       T55xxWriteBit(1);
+       T55xxWriteBit(1); //Page 1
+
+       // Turn field on to read the response
+       TurnReadLFOn();
+
+       // Now do the acquisition
+       for(;;) {
+               if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) {
+                       AT91C_BASE_SSC->SSC_THR = 0x43;
+                       LED_D_ON();
+               }
+               if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) {
+                       dest[i] = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
+                       i++;
+                       LED_D_OFF();
+
+                       if (i >= bufferlength) break;
                }
        }
-  
-       cmd_send(CMD_ACK,0,0,0,0,0);
-    cmd_send(CMD_ACK,0,0,0,0,0);
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off
-    LED_D_OFF();
-}
 
-void TurnReadLFOn(){
-       //FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
-       FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
-       // Give it a bit of time for the resonant antenna to settle.
-       //SpinDelay(30);
-       SpinDelayUs(8*150);
+       cmd_send(CMD_ACK,0,0,0,0,0);
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off
+       LED_D_OFF();
 }
 
 /*-------------- Cloning routines -----------*/
 // Copy HID id to card and setup block 0 config
 void CopyHIDtoT55x7(uint32_t hi2, uint32_t hi, uint32_t lo, uint8_t longFMT)
 {
-    int data1=0, data2=0, data3=0, data4=0, data5=0, data6=0; //up to six blocks for long format
-    int last_block = 0;
-
-    if (longFMT){
-        // Ensure no more than 84 bits supplied
-        if (hi2>0xFFFFF) {
-            DbpString("Tags can only have 84 bits.");
-            return;
-        }
-        // Build the 6 data blocks for supplied 84bit ID
-        last_block = 6;
-        data1 = 0x1D96A900; // load preamble (1D) & long format identifier (9E manchester encoded)
-        for (int i=0;i<4;i++) {
-            if (hi2 & (1<<(19-i)))
-                data1 |= (1<<(((3-i)*2)+1)); // 1 -> 10
-            else
-                data1 |= (1<<((3-i)*2)); // 0 -> 01
-        }
-
-        data2 = 0;
-        for (int i=0;i<16;i++) {
-            if (hi2 & (1<<(15-i)))
-                data2 |= (1<<(((15-i)*2)+1)); // 1 -> 10
-            else
-                data2 |= (1<<((15-i)*2)); // 0 -> 01
-        }
-
-        data3 = 0;
-        for (int i=0;i<16;i++) {
-            if (hi & (1<<(31-i)))
-                data3 |= (1<<(((15-i)*2)+1)); // 1 -> 10
-            else
-                data3 |= (1<<((15-i)*2)); // 0 -> 01
-        }
-
-        data4 = 0;
-        for (int i=0;i<16;i++) {
-            if (hi & (1<<(15-i)))
-                data4 |= (1<<(((15-i)*2)+1)); // 1 -> 10
-            else
-                data4 |= (1<<((15-i)*2)); // 0 -> 01
-        }
-
-        data5 = 0;
-        for (int i=0;i<16;i++) {
-            if (lo & (1<<(31-i)))
-                data5 |= (1<<(((15-i)*2)+1)); // 1 -> 10
-            else
-                data5 |= (1<<((15-i)*2)); // 0 -> 01
-        }
-
-        data6 = 0;
-        for (int i=0;i<16;i++) {
-            if (lo & (1<<(15-i)))
-                data6 |= (1<<(((15-i)*2)+1)); // 1 -> 10
-            else
-                data6 |= (1<<((15-i)*2)); // 0 -> 01
-        }
-    }
-    else {
-        // Ensure no more than 44 bits supplied
-        if (hi>0xFFF) {
-            DbpString("Tags can only have 44 bits.");
-            return;
-        }
-
-        // Build the 3 data blocks for supplied 44bit ID
-        last_block = 3;
-
-        data1 = 0x1D000000; // load preamble
-
-        for (int i=0;i<12;i++) {
-            if (hi & (1<<(11-i)))
-                data1 |= (1<<(((11-i)*2)+1)); // 1 -> 10
-            else
-                data1 |= (1<<((11-i)*2)); // 0 -> 01
-        }
-
-        data2 = 0;
-        for (int i=0;i<16;i++) {
-            if (lo & (1<<(31-i)))
-                data2 |= (1<<(((15-i)*2)+1)); // 1 -> 10
-            else
-                data2 |= (1<<((15-i)*2)); // 0 -> 01
-        }
-
-        data3 = 0;
-        for (int i=0;i<16;i++) {
-            if (lo & (1<<(15-i)))
-                data3 |= (1<<(((15-i)*2)+1)); // 1 -> 10
-            else
-                data3 |= (1<<((15-i)*2)); // 0 -> 01
-        }
-    }
-
-    LED_D_ON();
-    // Program the data blocks for supplied ID
-    // and the block 0 for HID format
-    T55xxWriteBlock(data1,1,0,0);
-    T55xxWriteBlock(data2,2,0,0);
-    T55xxWriteBlock(data3,3,0,0);
-
-    if (longFMT) { // if long format there are 6 blocks
-        T55xxWriteBlock(data4,4,0,0);
-        T55xxWriteBlock(data5,5,0,0);
-        T55xxWriteBlock(data6,6,0,0);
-    }
-
-    // Config for HID (RF/50, FSK2a, Maxblock=3 for short/6 for long)
-    T55xxWriteBlock(T55x7_BITRATE_RF_50    |
-                    T55x7_MODULATION_FSK2a |
-                    last_block << T55x7_MAXBLOCK_SHIFT,
-                    0,0,0);
-
-    LED_D_OFF();
-
-    DbpString("DONE!");
+       int data1=0, data2=0, data3=0, data4=0, data5=0, data6=0; //up to six blocks for long format
+       int last_block = 0;
+
+       if (longFMT){
+               // Ensure no more than 84 bits supplied
+               if (hi2>0xFFFFF) {
+                       DbpString("Tags can only have 84 bits.");
+                       return;
+               }
+               // Build the 6 data blocks for supplied 84bit ID
+               last_block = 6;
+               data1 = 0x1D96A900; // load preamble (1D) & long format identifier (9E manchester encoded)
+               for (int i=0;i<4;i++) {
+                       if (hi2 & (1<<(19-i)))
+                               data1 |= (1<<(((3-i)*2)+1)); // 1 -> 10
+                       else
+                               data1 |= (1<<((3-i)*2)); // 0 -> 01
+               }
+
+               data2 = 0;
+               for (int i=0;i<16;i++) {
+                       if (hi2 & (1<<(15-i)))
+                               data2 |= (1<<(((15-i)*2)+1)); // 1 -> 10
+                       else
+                               data2 |= (1<<((15-i)*2)); // 0 -> 01
+               }
+
+               data3 = 0;
+               for (int i=0;i<16;i++) {
+                       if (hi & (1<<(31-i)))
+                               data3 |= (1<<(((15-i)*2)+1)); // 1 -> 10
+                       else
+                               data3 |= (1<<((15-i)*2)); // 0 -> 01
+               }
+
+               data4 = 0;
+               for (int i=0;i<16;i++) {
+                       if (hi & (1<<(15-i)))
+                               data4 |= (1<<(((15-i)*2)+1)); // 1 -> 10
+                       else
+                               data4 |= (1<<((15-i)*2)); // 0 -> 01
+               }
+
+               data5 = 0;
+               for (int i=0;i<16;i++) {
+                       if (lo & (1<<(31-i)))
+                               data5 |= (1<<(((15-i)*2)+1)); // 1 -> 10
+                       else
+                               data5 |= (1<<((15-i)*2)); // 0 -> 01
+               }
+
+               data6 = 0;
+               for (int i=0;i<16;i++) {
+                       if (lo & (1<<(15-i)))
+                               data6 |= (1<<(((15-i)*2)+1)); // 1 -> 10
+                       else
+                               data6 |= (1<<((15-i)*2)); // 0 -> 01
+               }
+       }
+       else {
+               // Ensure no more than 44 bits supplied
+               if (hi>0xFFF) {
+                       DbpString("Tags can only have 44 bits.");
+                       return;
+               }
+
+               // Build the 3 data blocks for supplied 44bit ID
+               last_block = 3;
+
+               data1 = 0x1D000000; // load preamble
+
+               for (int i=0;i<12;i++) {
+                       if (hi & (1<<(11-i)))
+                               data1 |= (1<<(((11-i)*2)+1)); // 1 -> 10
+                       else
+                               data1 |= (1<<((11-i)*2)); // 0 -> 01
+               }
+
+               data2 = 0;
+               for (int i=0;i<16;i++) {
+                       if (lo & (1<<(31-i)))
+                               data2 |= (1<<(((15-i)*2)+1)); // 1 -> 10
+                       else
+                               data2 |= (1<<((15-i)*2)); // 0 -> 01
+               }
+
+               data3 = 0;
+               for (int i=0;i<16;i++) {
+                       if (lo & (1<<(15-i)))
+                               data3 |= (1<<(((15-i)*2)+1)); // 1 -> 10
+                       else
+                               data3 |= (1<<((15-i)*2)); // 0 -> 01
+               }
+       }
+
+       LED_D_ON();
+       // Program the data blocks for supplied ID
+       // and the block 0 for HID format
+       T55xxWriteBlock(data1,1,0,0);
+       T55xxWriteBlock(data2,2,0,0);
+       T55xxWriteBlock(data3,3,0,0);
+
+       if (longFMT) { // if long format there are 6 blocks
+               T55xxWriteBlock(data4,4,0,0);
+               T55xxWriteBlock(data5,5,0,0);
+               T55xxWriteBlock(data6,6,0,0);
+       }
+
+       // Config for HID (RF/50, FSK2a, Maxblock=3 for short/6 for long)
+       T55xxWriteBlock(T55x7_BITRATE_RF_50    |
+                                       T55x7_MODULATION_FSK2a |
+                                       last_block << T55x7_MAXBLOCK_SHIFT,
+                                       0,0,0);
+
+       LED_D_OFF();
+
+       DbpString("DONE!");
 }
 
 void CopyIOtoT55x7(uint32_t hi, uint32_t lo, uint8_t longFMT)
 {
-    int data1=0, data2=0; //up to six blocks for long format
+       int data1=0, data2=0; //up to six blocks for long format
 
-    data1 = hi;  // load preamble
-    data2 = lo;
+       data1 = hi;  // load preamble
+       data2 = lo;
 
-    LED_D_ON();
-    // Program the data blocks for supplied ID
-    // and the block 0 for HID format
-    T55xxWriteBlock(data1,1,0,0);
-    T55xxWriteBlock(data2,2,0,0);
+       LED_D_ON();
+       // Program the data blocks for supplied ID
+       // and the block 0 for HID format
+       T55xxWriteBlock(data1,1,0,0);
+       T55xxWriteBlock(data2,2,0,0);
 
-    //Config Block
-    T55xxWriteBlock(0x00147040,0,0,0);
-    LED_D_OFF();
+       //Config Block
+       T55xxWriteBlock(0x00147040,0,0,0);
+       LED_D_OFF();
 
-    DbpString("DONE!");
+       DbpString("DONE!");
 }
 
 // Define 9bit header for EM410x tags
@@ -1384,151 +1345,151 @@ void CopyIOtoT55x7(uint32_t hi, uint32_t lo, uint8_t longFMT)
 
 void WriteEM410x(uint32_t card, uint32_t id_hi, uint32_t id_lo)
 {
-    int i, id_bit;
-    uint64_t id = EM410X_HEADER;
-    uint64_t rev_id = 0;       // reversed ID
-    int c_parity[4];   // column parity
-    int r_parity = 0;  // row parity
-    uint32_t clock = 0;
-
-    // Reverse ID bits given as parameter (for simpler operations)
-    for (i = 0; i < EM410X_ID_LENGTH; ++i) {
-        if (i < 32) {
-            rev_id = (rev_id << 1) | (id_lo & 1);
-            id_lo >>= 1;
-        } else {
-            rev_id = (rev_id << 1) | (id_hi & 1);
-            id_hi >>= 1;
-        }
-    }
-
-    for (i = 0; i < EM410X_ID_LENGTH; ++i) {
-        id_bit = rev_id & 1;
-
-        if (i % 4 == 0) {
-            // Don't write row parity bit at start of parsing
-            if (i)
-                id = (id << 1) | r_parity;
-            // Start counting parity for new row
-            r_parity = id_bit;
-        } else {
-            // Count row parity
-            r_parity ^= id_bit;
-        }
-
-        // First elements in column?
-        if (i < 4)
-            // Fill out first elements
-            c_parity[i] = id_bit;
-        else
-            // Count column parity
-            c_parity[i % 4] ^= id_bit;
-
-        // Insert ID bit
-        id = (id << 1) | id_bit;
-        rev_id >>= 1;
-    }
-
-    // Insert parity bit of last row
-    id = (id << 1) | r_parity;
-
-    // Fill out column parity at the end of tag
-    for (i = 0; i < 4; ++i)
-        id = (id << 1) | c_parity[i];
-
-    // Add stop bit
-    id <<= 1;
-
-    Dbprintf("Started writing %s tag ...", card ? "T55x7":"T5555");
-    LED_D_ON();
-
-    // Write EM410x ID
-    T55xxWriteBlock((uint32_t)(id >> 32), 1, 0, 0);
-    T55xxWriteBlock((uint32_t)id, 2, 0, 0);
-
-    // Config for EM410x (RF/64, Manchester, Maxblock=2)
-    if (card) {
-        // Clock rate is stored in bits 8-15 of the card value
-        clock = (card & 0xFF00) >> 8;
-        Dbprintf("Clock rate: %d", clock);
-        switch (clock)
-        {
-        case 32:
-            clock = T55x7_BITRATE_RF_32;
-            break;
-        case 16:
-            clock = T55x7_BITRATE_RF_16;
-            break;
-        case 0:
-            // A value of 0 is assumed to be 64 for backwards-compatibility
-            // Fall through...
-        case 64:
-            clock = T55x7_BITRATE_RF_64;
-            break;
-        default:
-            Dbprintf("Invalid clock rate: %d", clock);
-            return;
-        }
-
-        // Writing configuration for T55x7 tag
-        T55xxWriteBlock(clock      |
-                        T55x7_MODULATION_MANCHESTER |
-                        2 << T55x7_MAXBLOCK_SHIFT,
-                        0, 0, 0);
-    }
-    else
-        // Writing configuration for T5555(Q5) tag
-        T55xxWriteBlock(0x1F << T5555_BITRATE_SHIFT |
-                        T5555_MODULATION_MANCHESTER   |
-                        2 << T5555_MAXBLOCK_SHIFT,
-                        0, 0, 0);
-
-    LED_D_OFF();
-    Dbprintf("Tag %s written with 0x%08x%08x\n", card ? "T55x7":"T5555",
-             (uint32_t)(id >> 32), (uint32_t)id);
+       int i, id_bit;
+       uint64_t id = EM410X_HEADER;
+       uint64_t rev_id = 0;    // reversed ID
+       int c_parity[4];        // column parity
+       int r_parity = 0;       // row parity
+       uint32_t clock = 0;
+
+       // Reverse ID bits given as parameter (for simpler operations)
+       for (i = 0; i < EM410X_ID_LENGTH; ++i) {
+               if (i < 32) {
+                       rev_id = (rev_id << 1) | (id_lo & 1);
+                       id_lo >>= 1;
+               } else {
+                       rev_id = (rev_id << 1) | (id_hi & 1);
+                       id_hi >>= 1;
+               }
+       }
+
+       for (i = 0; i < EM410X_ID_LENGTH; ++i) {
+               id_bit = rev_id & 1;
+
+               if (i % 4 == 0) {
+                       // Don't write row parity bit at start of parsing
+                       if (i)
+                               id = (id << 1) | r_parity;
+                       // Start counting parity for new row
+                       r_parity = id_bit;
+               } else {
+                       // Count row parity
+                       r_parity ^= id_bit;
+               }
+
+               // First elements in column?
+               if (i < 4)
+                       // Fill out first elements
+                       c_parity[i] = id_bit;
+               else
+                       // Count column parity
+                       c_parity[i % 4] ^= id_bit;
+
+               // Insert ID bit
+               id = (id << 1) | id_bit;
+               rev_id >>= 1;
+       }
+
+       // Insert parity bit of last row
+       id = (id << 1) | r_parity;
+
+       // Fill out column parity at the end of tag
+       for (i = 0; i < 4; ++i)
+               id = (id << 1) | c_parity[i];
+
+       // Add stop bit
+       id <<= 1;
+
+       Dbprintf("Started writing %s tag ...", card ? "T55x7":"T5555");
+       LED_D_ON();
+
+       // Write EM410x ID
+       T55xxWriteBlock((uint32_t)(id >> 32), 1, 0, 0);
+       T55xxWriteBlock((uint32_t)id, 2, 0, 0);
+
+       // Config for EM410x (RF/64, Manchester, Maxblock=2)
+       if (card) {
+               // Clock rate is stored in bits 8-15 of the card value
+               clock = (card & 0xFF00) >> 8;
+               Dbprintf("Clock rate: %d", clock);
+               switch (clock)
+               {
+               case 32:
+                       clock = T55x7_BITRATE_RF_32;
+                       break;
+               case 16:
+                       clock = T55x7_BITRATE_RF_16;
+                       break;
+               case 0:
+                       // A value of 0 is assumed to be 64 for backwards-compatibility
+                       // Fall through...
+               case 64:
+                       clock = T55x7_BITRATE_RF_64;
+                       break;
+               default:
+                       Dbprintf("Invalid clock rate: %d", clock);
+                       return;
+               }
+
+               // Writing configuration for T55x7 tag
+               T55xxWriteBlock(clock       |
+                                               T55x7_MODULATION_MANCHESTER |
+                                               2 << T55x7_MAXBLOCK_SHIFT,
+                                               0, 0, 0);
+       }
+       else
+               // Writing configuration for T5555(Q5) tag
+               T55xxWriteBlock(0x1F << T5555_BITRATE_SHIFT |
+                                               T5555_MODULATION_MANCHESTER |
+                                               2 << T5555_MAXBLOCK_SHIFT,
+                                               0, 0, 0);
+
+       LED_D_OFF();
+       Dbprintf("Tag %s written with 0x%08x%08x\n", card ? "T55x7":"T5555",
+                        (uint32_t)(id >> 32), (uint32_t)id);
 }
 
 // Clone Indala 64-bit tag by UID to T55x7
 void CopyIndala64toT55x7(int hi, int lo)
 {
 
-    //Program the 2 data blocks for supplied 64bit UID
-    // and the block 0 for Indala64 format
-    T55xxWriteBlock(hi,1,0,0);
-    T55xxWriteBlock(lo,2,0,0);
-    //Config for Indala (RF/32;PSK1 with RF/2;Maxblock=2)
-    T55xxWriteBlock(T55x7_BITRATE_RF_32    |
-                    T55x7_MODULATION_PSK1 |
-                    2 << T55x7_MAXBLOCK_SHIFT,
-                    0, 0, 0);
-    //Alternative config for Indala (Extended mode;RF/32;PSK1 with RF/2;Maxblock=2;Inverse data)
-    // T5567WriteBlock(0x603E1042,0);
+       //Program the 2 data blocks for supplied 64bit UID
+       // and the block 0 for Indala64 format
+       T55xxWriteBlock(hi,1,0,0);
+       T55xxWriteBlock(lo,2,0,0);
+       //Config for Indala (RF/32;PSK1 with RF/2;Maxblock=2)
+       T55xxWriteBlock(T55x7_BITRATE_RF_32    |
+                                       T55x7_MODULATION_PSK1 |
+                                       2 << T55x7_MAXBLOCK_SHIFT,
+                                       0, 0, 0);
+       //Alternative config for Indala (Extended mode;RF/32;PSK1 with RF/2;Maxblock=2;Inverse data)
+       //      T5567WriteBlock(0x603E1042,0);
 
-    DbpString("DONE!");
+       DbpString("DONE!");
 
 }
 
 void CopyIndala224toT55x7(int uid1, int uid2, int uid3, int uid4, int uid5, int uid6, int uid7)
 {
 
-    //Program the 7 data blocks for supplied 224bit UID
-    // and the block 0 for Indala224 format
-    T55xxWriteBlock(uid1,1,0,0);
-    T55xxWriteBlock(uid2,2,0,0);
-    T55xxWriteBlock(uid3,3,0,0);
-    T55xxWriteBlock(uid4,4,0,0);
-    T55xxWriteBlock(uid5,5,0,0);
-    T55xxWriteBlock(uid6,6,0,0);
-    T55xxWriteBlock(uid7,7,0,0);
-    //Config for Indala (RF/32;PSK1 with RF/2;Maxblock=7)
-    T55xxWriteBlock(T55x7_BITRATE_RF_32    |
-                    T55x7_MODULATION_PSK1 |
-                    7 << T55x7_MAXBLOCK_SHIFT,
-                    0,0,0);
-    //Alternative config for Indala (Extended mode;RF/32;PSK1 with RF/2;Maxblock=7;Inverse data)
-    // T5567WriteBlock(0x603E10E2,0);
-
-    DbpString("DONE!");
+       //Program the 7 data blocks for supplied 224bit UID
+       // and the block 0 for Indala224 format
+       T55xxWriteBlock(uid1,1,0,0);
+       T55xxWriteBlock(uid2,2,0,0);
+       T55xxWriteBlock(uid3,3,0,0);
+       T55xxWriteBlock(uid4,4,0,0);
+       T55xxWriteBlock(uid5,5,0,0);
+       T55xxWriteBlock(uid6,6,0,0);
+       T55xxWriteBlock(uid7,7,0,0);
+       //Config for Indala (RF/32;PSK1 with RF/2;Maxblock=7)
+       T55xxWriteBlock(T55x7_BITRATE_RF_32    |
+                                       T55x7_MODULATION_PSK1 |
+                                       7 << T55x7_MAXBLOCK_SHIFT,
+                                       0,0,0);
+       //Alternative config for Indala (Extended mode;RF/32;PSK1 with RF/2;Maxblock=7;Inverse data)
+       //      T5567WriteBlock(0x603E10E2,0);
+
+       DbpString("DONE!");
 
 }
 
@@ -1537,266 +1498,263 @@ void CopyIndala224toT55x7(int uid1, int uid2, int uid3, int uid4, int uid5, int
 #define max(x,y) ( x<y ? y:x)
 
 int DemodPCF7931(uint8_t **outBlocks) {
-
-    uint8_t bits[256] = {0x00};
-       uint8_t blocks[8][16];
-    uint8_t *dest = BigBuf_get_addr();
-    
+       uint8_t BitStream[256];
+       uint8_t Blocks[8][16];
+       uint8_t *GraphBuffer = BigBuf_get_addr();
        int GraphTraceLen = BigBuf_max_traceLen();
-       if (  GraphTraceLen > 18000 )
-               GraphTraceLen = 18000;
-       
-       
-    int i, j, lastval, bitidx, half_switch;
-    int clock = 64;
-    int tolerance = clock / 8;
-    int pmc, block_done;
-    int lc, warnings = 0;
-    int num_blocks = 0;
-    int lmin=128, lmax=128;
-    uint8_t dir;
+       int i, j, lastval, bitidx, half_switch;
+       int clock = 64;
+       int tolerance = clock / 8;
+       int pmc, block_done;
+       int lc, warnings = 0;
+       int num_blocks = 0;
+       int lmin=128, lmax=128;
+       uint8_t dir;
 
        LFSetupFPGAForADC(95, true);
-       DoAcquisition_default(0, true);
-
-    lmin = 64;
-    lmax = 192;
-
-    i = 2;
-
-    /* Find first local max/min */
-    if(dest[1] > dest[0]) {
-        while(i < GraphTraceLen) {
-            if( !(dest[i] > dest[i-1]) && dest[i] > lmax)
-                break;
-            i++;
-        }
-        dir = 0;
-    }
-    else {
-        while(i < GraphTraceLen) {
-            if( !(dest[i] < dest[i-1]) && dest[i] < lmin)
-                break;
-            i++;
-        }
-        dir = 1;
-    }
-
-    lastval = i++;
-    half_switch = 0;
-    pmc = 0;
-    block_done = 0;
-
-    for (bitidx = 0; i < GraphTraceLen; i++)
-    {
-        if ( (dest[i-1] > dest[i] && dir == 1 && dest[i] > lmax) || (dest[i-1] < dest[i] && dir == 0 && dest[i] < lmin))
-        {
-            lc = i - lastval;
-            lastval = i;
-
-            // Switch depending on lc length:
-            // Tolerance is 1/8 of clock rate (arbitrary)
-            if (abs(lc-clock/4) < tolerance) {
-                // 16T0
-                if((i - pmc) == lc) { /* 16T0 was previous one */
-                    /* It's a PMC ! */
-                    i += (128+127+16+32+33+16)-1;
-                    lastval = i;
-                    pmc = 0;
-                    block_done = 1;
-                }
-                else {
-                    pmc = i;
-                }
-            } else if (abs(lc-clock/2) < tolerance) {
-                // 32TO
-                if((i - pmc) == lc) { /* 16T0 was previous one */
-                    /* It's a PMC ! */
-                    i += (128+127+16+32+33)-1;
-                    lastval = i;
-                    pmc = 0;
-                    block_done = 1;
-                }
-                else if(half_switch == 1) {
-                    bits[bitidx++] = 0;
-                    half_switch = 0;
-                }
-                else
-                    half_switch++;
-            } else if (abs(lc-clock) < tolerance) {
-                // 64TO
-                bits[bitidx++] = 1;
-            } else {
-                // Error
-                warnings++;
-                if (warnings > 10)
-                {
-                    Dbprintf("Error: too many detection errors, aborting.");
-                    return 0;
-                }
-            }
-
-            if(block_done == 1) {
-                if(bitidx == 128) {
-                    for(j=0; j<16; j++) {
-                        blocks[num_blocks][j] = 128*bits[j*8+7]+
-                                64*bits[j*8+6]+
-                                32*bits[j*8+5]+
-                                16*bits[j*8+4]+
-                                8*bits[j*8+3]+
-                                4*bits[j*8+2]+
-                                2*bits[j*8+1]+
-                                bits[j*8];
-                                               
-                    }
-                    num_blocks++;
-                }
-                bitidx = 0;
-                block_done = 0;
-                half_switch = 0;
-            }
-            if(i < GraphTraceLen)
-                dir =(dest[i-1] > dest[i]) ? 0 : 1;
-        }
-        if(bitidx==255)
-            bitidx=0;
-        warnings = 0;
-        if(num_blocks == 4) break;
-    }
-    memcpy(outBlocks, blocks, 16*num_blocks);
-    return num_blocks;
+       DoAcquisition_default(0, 0);
+
+
+       lmin = 64;
+       lmax = 192;
+
+       i = 2;
+
+       /* Find first local max/min */
+       if(GraphBuffer[1] > GraphBuffer[0]) {
+               while(i < GraphTraceLen) {
+                       if( !(GraphBuffer[i] > GraphBuffer[i-1]) && GraphBuffer[i] > lmax)
+                               break;
+                       i++;
+               }
+               dir = 0;
+       }
+       else {
+               while(i < GraphTraceLen) {
+                       if( !(GraphBuffer[i] < GraphBuffer[i-1]) && GraphBuffer[i] < lmin)
+                               break;
+                       i++;
+               }
+               dir = 1;
+       }
+
+       lastval = i++;
+       half_switch = 0;
+       pmc = 0;
+       block_done = 0;
+
+       for (bitidx = 0; i < GraphTraceLen; i++)
+       {
+               if ( (GraphBuffer[i-1] > GraphBuffer[i] && dir == 1 && GraphBuffer[i] > lmax) || (GraphBuffer[i-1] < GraphBuffer[i] && dir == 0 && GraphBuffer[i] < lmin))
+               {
+                       lc = i - lastval;
+                       lastval = i;
+
+                       // Switch depending on lc length:
+                       // Tolerance is 1/8 of clock rate (arbitrary)
+                       if (abs(lc-clock/4) < tolerance) {
+                               // 16T0
+                               if((i - pmc) == lc) { /* 16T0 was previous one */
+                                       /* It's a PMC ! */
+                                       i += (128+127+16+32+33+16)-1;
+                                       lastval = i;
+                                       pmc = 0;
+                                       block_done = 1;
+                               }
+                               else {
+                                       pmc = i;
+                               }
+                       } else if (abs(lc-clock/2) < tolerance) {
+                               // 32TO
+                               if((i - pmc) == lc) { /* 16T0 was previous one */
+                                       /* It's a PMC ! */
+                                       i += (128+127+16+32+33)-1;
+                                       lastval = i;
+                                       pmc = 0;
+                                       block_done = 1;
+                               }
+                               else if(half_switch == 1) {
+                                       BitStream[bitidx++] = 0;
+                                       half_switch = 0;
+                               }
+                               else
+                                       half_switch++;
+                       } else if (abs(lc-clock) < tolerance) {
+                               // 64TO
+                               BitStream[bitidx++] = 1;
+                       } else {
+                               // Error
+                               warnings++;
+                               if (warnings > 10)
+                               {
+                                       Dbprintf("Error: too many detection errors, aborting.");
+                                       return 0;
+                               }
+                       }
+
+                       if(block_done == 1) {
+                               if(bitidx == 128) {
+                                       for(j=0; j<16; j++) {
+                                               Blocks[num_blocks][j] = 128*BitStream[j*8+7]+
+                                                               64*BitStream[j*8+6]+
+                                                               32*BitStream[j*8+5]+
+                                                               16*BitStream[j*8+4]+
+                                                               8*BitStream[j*8+3]+
+                                                               4*BitStream[j*8+2]+
+                                                               2*BitStream[j*8+1]+
+                                                               BitStream[j*8];
+                                       }
+                                       num_blocks++;
+                               }
+                               bitidx = 0;
+                               block_done = 0;
+                               half_switch = 0;
+                       }
+                       if(i < GraphTraceLen)
+                       {
+                               if (GraphBuffer[i-1] > GraphBuffer[i]) dir=0;
+                               else dir = 1;
+                       }
+               }
+               if(bitidx==255)
+                       bitidx=0;
+               warnings = 0;
+               if(num_blocks == 4) break;
+       }
+       memcpy(outBlocks, Blocks, 16*num_blocks);
+       return num_blocks;
 }
 
 int IsBlock0PCF7931(uint8_t *Block) {
-    // Assume RFU means 0 :)
-    if((memcmp(Block, "\x00\x00\x00\x00\x00\x00\x00\x01", 8) == 0) && memcmp(Block+9, "\x00\x00\x00\x00\x00\x00\x00", 7) == 0) // PAC enabled
-        return 1;
-    if((memcmp(Block+9, "\x00\x00\x00\x00\x00\x00\x00", 7) == 0) && Block[7] == 0) // PAC disabled, can it *really* happen ?
-        return 1;
-    return 0;
+       // Assume RFU means 0 :)
+       if((memcmp(Block, "\x00\x00\x00\x00\x00\x00\x00\x01", 8) == 0) && memcmp(Block+9, "\x00\x00\x00\x00\x00\x00\x00", 7) == 0) // PAC enabled
+               return 1;
+       if((memcmp(Block+9, "\x00\x00\x00\x00\x00\x00\x00", 7) == 0) && Block[7] == 0) // PAC disabled, can it *really* happen ?
+               return 1;
+       return 0;
 }
 
 int IsBlock1PCF7931(uint8_t *Block) {
-    // Assume RFU means 0 :)
-    if(Block[10] == 0 && Block[11] == 0 && Block[12] == 0 && Block[13] == 0)
-        if((Block[14] & 0x7f) <= 9 && Block[15] <= 9)
-            return 1;
+       // Assume RFU means 0 :)
+       if(Block[10] == 0 && Block[11] == 0 && Block[12] == 0 && Block[13] == 0)
+               if((Block[14] & 0x7f) <= 9 && Block[15] <= 9)
+                       return 1;
 
-    return 0;
+       return 0;
 }
 
 #define ALLOC 16
 
 void ReadPCF7931() {
-    uint8_t Blocks[8][17];
-    uint8_t tmpBlocks[4][16];
-    int i, j, ind, ind2, n;
-    int num_blocks = 0;
-    int max_blocks = 8;
-    int ident = 0;
-    int error = 0;
-    int tries = 0;
-
-    memset(Blocks, 0, 8*17*sizeof(uint8_t));
-
-    do {
-        memset(tmpBlocks, 0, 4*16*sizeof(uint8_t));
-        n = DemodPCF7931((uint8_t**)tmpBlocks);
-        if(!n)
-            error++;
-        if(error==10 && num_blocks == 0) {
-            Dbprintf("Error, no tag or bad tag");
-            return;
-        }
-        else if (tries==20 || error==10) {
-            Dbprintf("Error reading the tag");
-            Dbprintf("Here is the partial content");
-            goto end;
-        }
-
-        for(i=0; i<n; i++)
-            Dbprintf("(dbg) %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x",
-                     tmpBlocks[i][0], tmpBlocks[i][1], tmpBlocks[i][2], tmpBlocks[i][3], tmpBlocks[i][4], tmpBlocks[i][5], tmpBlocks[i][6], tmpBlocks[i][7],
-                    tmpBlocks[i][8], tmpBlocks[i][9], tmpBlocks[i][10], tmpBlocks[i][11], tmpBlocks[i][12], tmpBlocks[i][13], tmpBlocks[i][14], tmpBlocks[i][15]);
-        if(!ident) {
-            for(i=0; i<n; i++) {
-                if(IsBlock0PCF7931(tmpBlocks[i])) {
-                    // Found block 0 ?
-                    if(i < n-1 && IsBlock1PCF7931(tmpBlocks[i+1])) {
-                        // Found block 1!
-                        // \o/
-                        ident = 1;
-                        memcpy(Blocks[0], tmpBlocks[i], 16);
-                        Blocks[0][ALLOC] = 1;
-                        memcpy(Blocks[1], tmpBlocks[i+1], 16);
-                        Blocks[1][ALLOC] = 1;
-                        max_blocks = max((Blocks[1][14] & 0x7f), Blocks[1][15]) + 1;
-                        // Debug print
-                        Dbprintf("(dbg) Max blocks: %d", max_blocks);
-                        num_blocks = 2;
-                        // Handle following blocks
-                        for(j=i+2, ind2=2; j!=i; j++, ind2++, num_blocks++) {
-                            if(j==n) j=0;
-                            if(j==i) break;
-                            memcpy(Blocks[ind2], tmpBlocks[j], 16);
-                            Blocks[ind2][ALLOC] = 1;
-                        }
-                        break;
-                    }
-                }
-            }
-        }
-        else {
-            for(i=0; i<n; i++) { // Look for identical block in known blocks
-                if(memcmp(tmpBlocks[i], "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 16)) { // Block is not full of 00
-                    for(j=0; j<max_blocks; j++) {
-                        if(Blocks[j][ALLOC] == 1 && !memcmp(tmpBlocks[i], Blocks[j], 16)) {
-                            // Found an identical block
-                            for(ind=i-1,ind2=j-1; ind >= 0; ind--,ind2--) {
-                                if(ind2 < 0)
-                                    ind2 = max_blocks;
-                                if(!Blocks[ind2][ALLOC]) { // Block ind2 not already found
-                                    // Dbprintf("Tmp %d -> Block %d", ind, ind2);
-                                    memcpy(Blocks[ind2], tmpBlocks[ind], 16);
-                                    Blocks[ind2][ALLOC] = 1;
-                                    num_blocks++;
-                                    if(num_blocks == max_blocks) goto end;
-                                }
-                            }
-                            for(ind=i+1,ind2=j+1; ind < n; ind++,ind2++) {
-                                if(ind2 > max_blocks)
-                                    ind2 = 0;
-                                if(!Blocks[ind2][ALLOC]) { // Block ind2 not already found
-                                    // Dbprintf("Tmp %d -> Block %d", ind, ind2);
-                                    memcpy(Blocks[ind2], tmpBlocks[ind], 16);
-                                    Blocks[ind2][ALLOC] = 1;
-                                    num_blocks++;
-                                    if(num_blocks == max_blocks) goto end;
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        tries++;
-        if (BUTTON_PRESS()) return;
-    } while (num_blocks != max_blocks);
+       uint8_t Blocks[8][17];
+       uint8_t tmpBlocks[4][16];
+       int i, j, ind, ind2, n;
+       int num_blocks = 0;
+       int max_blocks = 8;
+       int ident = 0;
+       int error = 0;
+       int tries = 0;
+
+       memset(Blocks, 0, 8*17*sizeof(uint8_t));
+
+       do {
+               memset(tmpBlocks, 0, 4*16*sizeof(uint8_t));
+               n = DemodPCF7931((uint8_t**)tmpBlocks);
+               if(!n)
+                       error++;
+               if(error==10 && num_blocks == 0) {
+                       Dbprintf("Error, no tag or bad tag");
+                       return;
+               }
+               else if (tries==20 || error==10) {
+                       Dbprintf("Error reading the tag");
+                       Dbprintf("Here is the partial content");
+                       goto end;
+               }
+
+               for(i=0; i<n; i++)
+                       Dbprintf("(dbg) %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x",
+                                        tmpBlocks[i][0], tmpBlocks[i][1], tmpBlocks[i][2], tmpBlocks[i][3], tmpBlocks[i][4], tmpBlocks[i][5], tmpBlocks[i][6], tmpBlocks[i][7],
+                                       tmpBlocks[i][8], tmpBlocks[i][9], tmpBlocks[i][10], tmpBlocks[i][11], tmpBlocks[i][12], tmpBlocks[i][13], tmpBlocks[i][14], tmpBlocks[i][15]);
+               if(!ident) {
+                       for(i=0; i<n; i++) {
+                               if(IsBlock0PCF7931(tmpBlocks[i])) {
+                                       // Found block 0 ?
+                                       if(i < n-1 && IsBlock1PCF7931(tmpBlocks[i+1])) {
+                                               // Found block 1!
+                                               // \o/
+                                               ident = 1;
+                                               memcpy(Blocks[0], tmpBlocks[i], 16);
+                                               Blocks[0][ALLOC] = 1;
+                                               memcpy(Blocks[1], tmpBlocks[i+1], 16);
+                                               Blocks[1][ALLOC] = 1;
+                                               max_blocks = max((Blocks[1][14] & 0x7f), Blocks[1][15]) + 1;
+                                               // Debug print
+                                               Dbprintf("(dbg) Max blocks: %d", max_blocks);
+                                               num_blocks = 2;
+                                               // Handle following blocks
+                                               for(j=i+2, ind2=2; j!=i; j++, ind2++, num_blocks++) {
+                                                       if(j==n) j=0;
+                                                       if(j==i) break;
+                                                       memcpy(Blocks[ind2], tmpBlocks[j], 16);
+                                                       Blocks[ind2][ALLOC] = 1;
+                                               }
+                                               break;
+                                       }
+                               }
+                       }
+               }
+               else {
+                       for(i=0; i<n; i++) { // Look for identical block in known blocks
+                               if(memcmp(tmpBlocks[i], "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 16)) { // Block is not full of 00
+                                       for(j=0; j<max_blocks; j++) {
+                                               if(Blocks[j][ALLOC] == 1 && !memcmp(tmpBlocks[i], Blocks[j], 16)) {
+                                                       // Found an identical block
+                                                       for(ind=i-1,ind2=j-1; ind >= 0; ind--,ind2--) {
+                                                               if(ind2 < 0)
+                                                                       ind2 = max_blocks;
+                                                               if(!Blocks[ind2][ALLOC]) { // Block ind2 not already found
+                                                                       // Dbprintf("Tmp %d -> Block %d", ind, ind2);
+                                                                       memcpy(Blocks[ind2], tmpBlocks[ind], 16);
+                                                                       Blocks[ind2][ALLOC] = 1;
+                                                                       num_blocks++;
+                                                                       if(num_blocks == max_blocks) goto end;
+                                                               }
+                                                       }
+                                                       for(ind=i+1,ind2=j+1; ind < n; ind++,ind2++) {
+                                                               if(ind2 > max_blocks)
+                                                                       ind2 = 0;
+                                                               if(!Blocks[ind2][ALLOC]) { // Block ind2 not already found
+                                                                       // Dbprintf("Tmp %d -> Block %d", ind, ind2);
+                                                                       memcpy(Blocks[ind2], tmpBlocks[ind], 16);
+                                                                       Blocks[ind2][ALLOC] = 1;
+                                                                       num_blocks++;
+                                                                       if(num_blocks == max_blocks) goto end;
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               }
+               tries++;
+               if (BUTTON_PRESS()) return;
+       } while (num_blocks != max_blocks);
  end:
-    Dbprintf("-----------------------------------------");
-    Dbprintf("Memory content:");
-    Dbprintf("-----------------------------------------");
-    for(i=0; i<max_blocks; i++) {
-        if(Blocks[i][ALLOC]==1)
-            Dbprintf("%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x",
-                     Blocks[i][0], Blocks[i][1], Blocks[i][2], Blocks[i][3], Blocks[i][4], Blocks[i][5], Blocks[i][6], Blocks[i][7],
-                    Blocks[i][8], Blocks[i][9], Blocks[i][10], Blocks[i][11], Blocks[i][12], Blocks[i][13], Blocks[i][14], Blocks[i][15]);
-        else
-            Dbprintf("<missing block %d>", i);
-    }
-    Dbprintf("-----------------------------------------");
-
-    return ;
+       Dbprintf("-----------------------------------------");
+       Dbprintf("Memory content:");
+       Dbprintf("-----------------------------------------");
+       for(i=0; i<max_blocks; i++) {
+               if(Blocks[i][ALLOC]==1)
+                       Dbprintf("%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x",
+                                        Blocks[i][0], Blocks[i][1], Blocks[i][2], Blocks[i][3], Blocks[i][4], Blocks[i][5], Blocks[i][6], Blocks[i][7],
+                                       Blocks[i][8], Blocks[i][9], Blocks[i][10], Blocks[i][11], Blocks[i][12], Blocks[i][13], Blocks[i][14], Blocks[i][15]);
+               else
+                       Dbprintf("<missing block %d>", i);
+       }
+       Dbprintf("-----------------------------------------");
+
+       return ;
 }
 
 
@@ -1820,20 +1778,20 @@ uint8_t * fwd_write_ptr; //forwardlink bit pointer
 //====================================================================
 //--------------------------------------------------------------------
 uint8_t Prepare_Cmd( uint8_t cmd ) {
-    //--------------------------------------------------------------------
+       //--------------------------------------------------------------------
 
-    *forward_ptr++ = 0; //start bit
-    *forward_ptr++ = 0; //second pause for 4050 code
+       *forward_ptr++ = 0; //start bit
+       *forward_ptr++ = 0; //second pause for 4050 code
 
-    *forward_ptr++ = cmd;
-    cmd >>= 1;
-    *forward_ptr++ = cmd;
-    cmd >>= 1;
-    *forward_ptr++ = cmd;
-    cmd >>= 1;
-    *forward_ptr++ = cmd;
+       *forward_ptr++ = cmd;
+       cmd >>= 1;
+       *forward_ptr++ = cmd;
+       cmd >>= 1;
+       *forward_ptr++ = cmd;
+       cmd >>= 1;
+       *forward_ptr++ = cmd;
 
-    return 6; //return number of emited bits
+       return 6; //return number of emited bits
 }
 
 //====================================================================
@@ -1843,21 +1801,21 @@ uint8_t Prepare_Cmd( uint8_t cmd ) {
 
 //--------------------------------------------------------------------
 uint8_t Prepare_Addr( uint8_t addr ) {
-    //--------------------------------------------------------------------
+       //--------------------------------------------------------------------
 
-    register uint8_t line_parity;
+       register uint8_t line_parity;
 
-    uint8_t i;
-    line_parity = 0;
-    for(i=0;i<6;i++) {
-        *forward_ptr++ = addr;
-        line_parity ^= addr;
-        addr >>= 1;
-    }
+       uint8_t i;
+       line_parity = 0;
+       for(i=0;i<6;i++) {
+               *forward_ptr++ = addr;
+               line_parity ^= addr;
+               addr >>= 1;
+       }
 
-    *forward_ptr++ = (line_parity & 1);
+       *forward_ptr++ = (line_parity & 1);
 
-    return 7; //return number of emited bits
+       return 7; //return number of emited bits
 }
 
 //====================================================================
@@ -1867,36 +1825,36 @@ uint8_t Prepare_Addr( uint8_t addr ) {
 
 //--------------------------------------------------------------------
 uint8_t Prepare_Data( uint16_t data_low, uint16_t data_hi) {
-    //--------------------------------------------------------------------
-
-    register uint8_t line_parity;
-    register uint8_t column_parity;
-    register uint8_t i, j;
-    register uint16_t data;
-
-    data = data_low;
-    column_parity = 0;
-
-    for(i=0; i<4; i++) {
-        line_parity = 0;
-        for(j=0; j<8; j++) {
-            line_parity ^= data;
-            column_parity ^= (data & 1) << j;
-            *forward_ptr++ = data;
-            data >>= 1;
-        }
-        *forward_ptr++ = line_parity;
-        if(i == 1)
-            data = data_hi;
-    }
-
-    for(j=0; j<8; j++) {
-        *forward_ptr++ = column_parity;
-        column_parity >>= 1;
-    }
-    *forward_ptr = 0;
-
-    return 45; //return number of emited bits
+       //--------------------------------------------------------------------
+
+       register uint8_t line_parity;
+       register uint8_t column_parity;
+       register uint8_t i, j;
+       register uint16_t data;
+
+       data = data_low;
+       column_parity = 0;
+
+       for(i=0; i<4; i++) {
+               line_parity = 0;
+               for(j=0; j<8; j++) {
+                       line_parity ^= data;
+                       column_parity ^= (data & 1) << j;
+                       *forward_ptr++ = data;
+                       data >>= 1;
+               }
+               *forward_ptr++ = line_parity;
+               if(i == 1)
+                       data = data_hi;
+       }
+
+       for(j=0; j<8; j++) {
+               *forward_ptr++ = column_parity;
+               column_parity >>= 1;
+       }
+       *forward_ptr = 0;
+
+       return 45; //return number of emited bits
 }
 
 //====================================================================
@@ -1906,118 +1864,114 @@ uint8_t Prepare_Data( uint16_t data_low, uint16_t data_hi) {
 //====================================================================
 void SendForward(uint8_t fwd_bit_count) {
 
-    fwd_write_ptr = forwardLink_data;
-    fwd_bit_sz = fwd_bit_count;
-
-    LED_D_ON();
-
-    //Field on
-    FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
-    FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
-
-    // Give it a bit of time for the resonant antenna to settle.
-    // And for the tag to fully power up
-    SpinDelay(150);
-
-    // force 1st mod pulse (start gap must be longer for 4305)
-    fwd_bit_sz--; //prepare next bit modulation
-    fwd_write_ptr++;
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off
-    SpinDelayUs(55*8); //55 cycles off (8us each)for 4305
-    FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);//field on
-    SpinDelayUs(16*8); //16 cycles on (8us each)
-
-    // now start writting
-    while(fwd_bit_sz-- > 0) { //prepare next bit modulation
-        if(((*fwd_write_ptr++) & 1) == 1)
-            SpinDelayUs(32*8); //32 cycles at 125Khz (8us each)
-        else {
-            //These timings work for 4469/4269/4305 (with the 55*8 above)
-            FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off
-            SpinDelayUs(23*8); //16-4 cycles off (8us each)
-            FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
-            FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);//field on
-            SpinDelayUs(9*8); //16 cycles on (8us each)
-        }
-    }
+       fwd_write_ptr = forwardLink_data;
+       fwd_bit_sz = fwd_bit_count;
+
+       LED_D_ON();
+
+       //Field on
+       FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
+       FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);
+
+       // Give it a bit of time for the resonant antenna to settle.
+       // And for the tag to fully power up
+       SpinDelay(150);
+
+       // force 1st mod pulse (start gap must be longer for 4305)
+       fwd_bit_sz--; //prepare next bit modulation
+       fwd_write_ptr++;
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off
+       SpinDelayUs(55*8); //55 cycles off (8us each)for 4305
+       FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);//field on
+       SpinDelayUs(16*8); //16 cycles on (8us each)
+
+       // now start writting
+       while(fwd_bit_sz-- > 0) { //prepare next bit modulation
+               if(((*fwd_write_ptr++) & 1) == 1)
+                       SpinDelayUs(32*8); //32 cycles at 125Khz (8us each)
+               else {
+                       //These timings work for 4469/4269/4305 (with the 55*8 above)
+                       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off
+                       SpinDelayUs(23*8); //16-4 cycles off (8us each)
+                       FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
+                       FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_ADC | FPGA_LF_ADC_READER_FIELD);//field on
+                       SpinDelayUs(9*8); //16 cycles on (8us each)
+               }
+       }
 }
 
 void EM4xLogin(uint32_t Password) {
 
-    uint8_t fwd_bit_count;
+       uint8_t fwd_bit_count;
 
-    forward_ptr = forwardLink_data;
-    fwd_bit_count = Prepare_Cmd( FWD_CMD_LOGIN );
-    fwd_bit_count += Prepare_Data( Password&0xFFFF, Password>>16 );
+       forward_ptr = forwardLink_data;
+       fwd_bit_count = Prepare_Cmd( FWD_CMD_LOGIN );
+       fwd_bit_count += Prepare_Data( Password&0xFFFF, Password>>16 );
 
-    SendForward(fwd_bit_count);
+       SendForward(fwd_bit_count);
 
-    //Wait for command to complete
-    SpinDelay(20);
+       //Wait for command to complete
+       SpinDelay(20);
 
 }
 
 void EM4xReadWord(uint8_t Address, uint32_t Pwd, uint8_t PwdMode) {
 
-       uint8_t *dest =  BigBuf_get_addr();
-       uint16_t bufferlength = BigBuf_max_traceLen();
-       uint32_t i = 0;
+       uint8_t fwd_bit_count;
+       uint8_t *dest = BigBuf_get_addr();
+       int m=0, i=0;
 
-       // Clear destination buffer before sending the command  0x80 = average.
-       memset(dest, 0x80, bufferlength);
-       
-    uint8_t fwd_bit_count;
-
-    //If password mode do login
-    if (PwdMode == 1) EM4xLogin(Pwd);
-
-    forward_ptr = forwardLink_data;
-    fwd_bit_count = Prepare_Cmd( FWD_CMD_READ );
-    fwd_bit_count += Prepare_Addr( Address );
-
-    // Connect the A/D to the peak-detected low-frequency path.
-    SetAdcMuxFor(GPIO_MUXSEL_LOPKD);
-    // Now set up the SSC to get the ADC samples that are now streaming at us.
-    FpgaSetupSsc();
-
-    SendForward(fwd_bit_count);
-
-    // Now do the acquisition
-    i = 0;
-    for(;;) {
-        if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) {
-            AT91C_BASE_SSC->SSC_THR = 0x43;
-        }
-        if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) {
-            dest[i] = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
-                       ++i;
-                       if (i >= bufferlength) break;
+       //If password mode do login
+       if (PwdMode == 1) EM4xLogin(Pwd);
+
+       forward_ptr = forwardLink_data;
+       fwd_bit_count = Prepare_Cmd( FWD_CMD_READ );
+       fwd_bit_count += Prepare_Addr( Address );
+
+       m = BigBuf_max_traceLen();
+       // Clear destination buffer before sending the command
+       memset(dest, 128, m);
+       // Connect the A/D to the peak-detected low-frequency path.
+       SetAdcMuxFor(GPIO_MUXSEL_LOPKD);
+       // Now set up the SSC to get the ADC samples that are now streaming at us.
+       FpgaSetupSsc();
+
+       SendForward(fwd_bit_count);
+
+       // Now do the acquisition
+       i = 0;
+       for(;;) {
+               if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) {
+                       AT91C_BASE_SSC->SSC_THR = 0x43;
+               }
+               if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_RXRDY) {
+                       dest[i] = (uint8_t)AT91C_BASE_SSC->SSC_RHR;
+                       i++;
+                       if (i >= m) break;
                }
        }
-  
-       cmd_send(CMD_ACK,0,0,0,0,0);
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off
-    LED_D_OFF();
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off
+       LED_D_OFF();
 }
 
 void EM4xWriteWord(uint32_t Data, uint8_t Address, uint32_t Pwd, uint8_t PwdMode) {
 
-    uint8_t fwd_bit_count;
+       uint8_t fwd_bit_count;
 
-    //If password mode do login
-    if (PwdMode == 1) EM4xLogin(Pwd);
+       //If password mode do login
+       if (PwdMode == 1) EM4xLogin(Pwd);
 
-    forward_ptr = forwardLink_data;
-    fwd_bit_count = Prepare_Cmd( FWD_CMD_WRITE );
-    fwd_bit_count += Prepare_Addr( Address );
-    fwd_bit_count += Prepare_Data( Data&0xFFFF, Data>>16 );
+       forward_ptr = forwardLink_data;
+       fwd_bit_count = Prepare_Cmd( FWD_CMD_WRITE );
+       fwd_bit_count += Prepare_Addr( Address );
+       fwd_bit_count += Prepare_Data( Data&0xFFFF, Data>>16 );
 
-    SendForward(fwd_bit_count);
+       SendForward(fwd_bit_count);
 
-    //Wait for write to complete
-    SpinDelay(20);
-    FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off
-    LED_D_OFF();
+       //Wait for write to complete
+       SpinDelay(20);
+       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); // field off
+       LED_D_OFF();
 }
index 7854fa51d743191c2c2c297810f9f927cc7b0161..faea2dc30dfff2482996c8211c41732be646ecba 100644 (file)
@@ -49,10 +49,10 @@ void setDemodBuf(uint8_t *buff, size_t size, size_t startIdx)
 
 int CmdSetDebugMode(const char *Cmd)
 {
-  int demod=0;
-  sscanf(Cmd, "%i", &demod);
-  g_debugMode=(uint8_t)demod;
-  return 1;
+       int demod=0;
+       sscanf(Cmd, "%i", &demod);
+       g_debugMode=(uint8_t)demod;
+       return 1;
 }
 
 //by marshmellow
@@ -65,87 +65,88 @@ void printDemodBuff(void)
                return;
        }
        if (bitLen>512) bitLen=512; //max output to 512 bits if we have more - should be plenty
-               
+
        // ensure equally divided by 16
        bitLen &= 0xfff0;
-       
+
        for (i = 0; i <= (bitLen-16); i+=16) {
                PrintAndLog("%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i",
-                       DemodBuffer[i],
-                       DemodBuffer[i+1],
-                       DemodBuffer[i+2],
-                       DemodBuffer[i+3],
-                       DemodBuffer[i+4],
-                       DemodBuffer[i+5],
-                       DemodBuffer[i+6],
-                       DemodBuffer[i+7],
-                       DemodBuffer[i+8],
-                       DemodBuffer[i+9],
-                       DemodBuffer[i+10],
-                       DemodBuffer[i+11],
-                       DemodBuffer[i+12],
-                       DemodBuffer[i+13],
-                       DemodBuffer[i+14],
-                       DemodBuffer[i+15]);
+                   DemodBuffer[i],
+                   DemodBuffer[i+1],
+                   DemodBuffer[i+2],
+                   DemodBuffer[i+3],
+                   DemodBuffer[i+4],
+                   DemodBuffer[i+5],
+                   DemodBuffer[i+6],
+                   DemodBuffer[i+7],
+                   DemodBuffer[i+8],
+                   DemodBuffer[i+9],
+                   DemodBuffer[i+10],
+                   DemodBuffer[i+11],
+                   DemodBuffer[i+12],
+                   DemodBuffer[i+13],
+                   DemodBuffer[i+14],
+                   DemodBuffer[i+15]
+               );
        }
        return;
 }
 
 int CmdPrintDemodBuff(const char *Cmd)
 {
-  char hex;
-  char printBuff[512]={0x00};
-  uint8_t numBits = DemodBufferLen & 0xFFF0;
-  sscanf(Cmd, "%c", &hex);
-  if (hex == 'h'){
-    PrintAndLog("Usage: data printdemodbuffer [x]");
-    PrintAndLog("Options:        ");
-    PrintAndLog("       h       This help");
-    PrintAndLog("       x       output in hex (omit for binary output)");
-    return 0;
-  }
-  if (hex == 'x'){
-    numBits = binarraytohex(printBuff, (char *)DemodBuffer, numBits);
-    if (numBits==0) return 0;
-    PrintAndLog("DemodBuffer: %s",printBuff);
-  } else {
-    printDemodBuff();
-  }
-  return 1;
+       char hex;
+       char printBuff[512]={0x00};
+       uint8_t numBits = DemodBufferLen & 0xFFF0;
+       sscanf(Cmd, "%c", &hex);
+       if (hex == 'h'){
+               PrintAndLog("Usage: data printdemodbuffer [x]");
+               PrintAndLog("Options:        ");
+               PrintAndLog("       h       This help");
+               PrintAndLog("       x       output in hex (omit for binary output)");
+               return 0;
+       }
+       if (hex == 'x'){
+               numBits = binarraytohex(printBuff, (char *)DemodBuffer, numBits);
+               if (numBits==0) return 0;
+               PrintAndLog("DemodBuffer: %s",printBuff);
+       } else {
+               printDemodBuff();
+       }
+       return 1;
 }
 int CmdAmp(const char *Cmd)
 {
-  int i, rising, falling;
-  int max = INT_MIN, min = INT_MAX;
-
-  for (i = 10; i < GraphTraceLen; ++i) {
-    if (GraphBuffer[i] > max)
-      max = GraphBuffer[i];
-    if (GraphBuffer[i] < min)
-      min = GraphBuffer[i];
-  }
-
-  if (max != min) {
-    rising = falling= 0;
-    for (i = 0; i < GraphTraceLen; ++i) {
-      if (GraphBuffer[i + 1] < GraphBuffer[i]) {
-        if (rising) {
-          GraphBuffer[i] = max;
-          rising = 0;
-        }
-        falling = 1;
-      }
-      if (GraphBuffer[i + 1] > GraphBuffer[i]) {
-        if (falling) {
-          GraphBuffer[i] = min;
-          falling = 0;
-        }
-        rising= 1;
-      }
-    }
-  }
-  RepaintGraphWindow();
-  return 0;
+       int i, rising, falling;
+       int max = INT_MIN, min = INT_MAX;
+
+       for (i = 10; i < GraphTraceLen; ++i) {
+               if (GraphBuffer[i] > max)
+                       max = GraphBuffer[i];
+               if (GraphBuffer[i] < min)
+                       min = GraphBuffer[i];
+       }
+
+       if (max != min) {
+               rising = falling= 0;
+               for (i = 0; i < GraphTraceLen; ++i) {
+                       if (GraphBuffer[i + 1] < GraphBuffer[i]) {
+                               if (rising) {
+                                       GraphBuffer[i] = max;
+                                       rising = 0;
+                               }
+                               falling = 1;
+                       }
+                       if (GraphBuffer[i + 1] > GraphBuffer[i]) {
+                               if (falling) {
+                                       GraphBuffer[i] = min;
+                                       falling = 0;
+                               }
+                               rising= 1;
+                       }
+               }
+       }
+       RepaintGraphWindow();
+       return 0;
 }
 
 /*
@@ -164,68 +165,68 @@ int CmdAmp(const char *Cmd)
  //this function strictly converts highs and lows to 1s and 0s for each sample in the graphbuffer
 int Cmdaskdemod(const char *Cmd)
 {
-  int i;
-  int c, high = 0, low = 0;
-
-  sscanf(Cmd, "%i", &c);
-
-  /* Detect high and lows */
-  for (i = 0; i < GraphTraceLen; ++i)
-  {
-    if (GraphBuffer[i] > high)
-      high = GraphBuffer[i];
-    else if (GraphBuffer[i] < low)
-      low = GraphBuffer[i];
-  }
-  high=abs(high*.75);
-  low=abs(low*.75);
-  if (c != 0 && c != 1) {
-    PrintAndLog("Invalid argument: %s", Cmd);
-    return 0;
-  }
-  //prime loop
-  if (GraphBuffer[0] > 0) {
-    GraphBuffer[0] = 1-c;
-  } else {
-    GraphBuffer[0] = c;
-  }
-  for (i = 1; i < GraphTraceLen; ++i) {
-    /* Transitions are detected at each peak
-     * Transitions are either:
-     * - we're low: transition if we hit a high
-     * - we're high: transition if we hit a low
-     * (we need to do it this way because some tags keep high or
-     * low for long periods, others just reach the peak and go
-     * down)
-     */
-    //[marhsmellow] change == to >= for high and <= for low for fuzz
-    if ((GraphBuffer[i] >= high) && (GraphBuffer[i - 1] == c)) {
-      GraphBuffer[i] = 1 - c;
-    } else if ((GraphBuffer[i] <= low) && (GraphBuffer[i - 1] == (1 - c))){
-      GraphBuffer[i] = c;
-    } else {
-      /* No transition */
-      GraphBuffer[i] = GraphBuffer[i - 1];
-    }
-  }
-  RepaintGraphWindow();
-  return 0;
+       int i;
+       int c, high = 0, low = 0;
+
+       sscanf(Cmd, "%i", &c);
+
+       /* Detect high and lows */
+       for (i = 0; i < GraphTraceLen; ++i)
+       {
+               if (GraphBuffer[i] > high)
+                       high = GraphBuffer[i];
+               else if (GraphBuffer[i] < low)
+                       low = GraphBuffer[i];
+       }
+       high=abs(high*.75);
+       low=abs(low*.75);
+       if (c != 0 && c != 1) {
+               PrintAndLog("Invalid argument: %s", Cmd);
+               return 0;
+       }
+       //prime loop
+       if (GraphBuffer[0] > 0) {
+               GraphBuffer[0] = 1-c;
+       } else {
+               GraphBuffer[0] = c;
+       }
+       for (i = 1; i < GraphTraceLen; ++i) {
+               /* Transitions are detected at each peak
+                * Transitions are either:
+                * - we're low: transition if we hit a high
+                * - we're high: transition if we hit a low
+                * (we need to do it this way because some tags keep high or
+                * low for long periods, others just reach the peak and go
+                * down)
+                */
+               //[marhsmellow] change == to >= for high and <= for low for fuzz
+               if ((GraphBuffer[i] >= high) && (GraphBuffer[i - 1] == c)) {
+                       GraphBuffer[i] = 1 - c;
+               } else if ((GraphBuffer[i] <= low) && (GraphBuffer[i - 1] == (1 - c))){
+                       GraphBuffer[i] = c;
+               } else {
+                       /* No transition */
+                       GraphBuffer[i] = GraphBuffer[i - 1];
+               }
+       }
+       RepaintGraphWindow();
+       return 0;
 }
 
 //this function strictly converts >1 to 1 and <1 to 0 for each sample in the graphbuffer
 int CmdGetBitStream(const char *Cmd)
 {
-  int i;
-  CmdHpf(Cmd);
-  for (i = 0; i < GraphTraceLen; i++) {
-    if (GraphBuffer[i] >= 1) {
-      GraphBuffer[i] = 1;
-    } else {
-      GraphBuffer[i] = 0;
-    }
-  }
-  RepaintGraphWindow();
-  return 0;
+       int i;
+       CmdHpf(Cmd);
+       for (i = 0; i < GraphTraceLen; i++) {
+               if (GraphBuffer[i] >= 1) {
+                       GraphBuffer[i] = 1;
+               } else {
+                       GraphBuffer[i] = 0;
+               }
+       }
+       RepaintGraphWindow();
+       return 0;
 }
 
 
@@ -239,28 +240,29 @@ void printBitStream(uint8_t BitStream[], uint32_t bitLen)
        }
        if (bitLen>512) bitLen=512;
 
-         // ensure equally divided by 16
+               // ensure equally divided by 16
        bitLen &= 0xfff0;
 
 
        for (i = 0; i <= (bitLen-16); i+=16) {
                PrintAndLog("%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i",
-                 BitStream[i],
-                 BitStream[i+1],
-                 BitStream[i+2],
-                 BitStream[i+3],
-                 BitStream[i+4],
-                 BitStream[i+5],
-                 BitStream[i+6],
-                 BitStream[i+7],
-                 BitStream[i+8],
-                 BitStream[i+9],
-                 BitStream[i+10],
-                 BitStream[i+11],
-                 BitStream[i+12],
-                 BitStream[i+13],
-                 BitStream[i+14],
-                 BitStream[i+15]);
+                   BitStream[i],
+                   BitStream[i+1],
+                   BitStream[i+2],
+                   BitStream[i+3],
+                   BitStream[i+4],
+                   BitStream[i+5],
+                   BitStream[i+6],
+                   BitStream[i+7],
+                   BitStream[i+8],
+                   BitStream[i+9],
+                   BitStream[i+10],
+                   BitStream[i+11],
+                   BitStream[i+12],
+                   BitStream[i+13],
+                   BitStream[i+14],
+                   BitStream[i+15]
+               );
        }
        return;
 }
@@ -268,117 +270,114 @@ void printBitStream(uint8_t BitStream[], uint32_t bitLen)
 //print 64 bit EM410x ID in multiple formats
 void printEM410x(uint32_t hi, uint64_t id)
 {
-  if (id || hi){
-    uint64_t iii=1;
-    uint64_t id2lo=0;
-    uint32_t ii=0;
-    uint32_t i=0;
-    for (ii=5; ii>0;ii--){
-      for (i=0;i<8;i++){
-        id2lo=(id2lo<<1LL) | ((id & (iii << (i+((ii-1)*8)))) >> (i+((ii-1)*8)));
-      }
-    }
-    if (hi){
-      //output 88 bit em id
-      PrintAndLog("EM TAG ID    : %06x%016llx", hi, id);
-    } else{
-      //output 40 bit em id
-      PrintAndLog("EM TAG ID    : %010llx", id);
-      PrintAndLog("Unique TAG ID: %010llx",  id2lo);
-      PrintAndLog("");
-      PrintAndLog("Possible de-scramble patterns");
-      PrintAndLog("HoneyWell IdentKey");
-      PrintAndLog("DEZ 8        : %08lld",id & 0xFFFFFF);
-      PrintAndLog("DEZ 10       : %010lld",id & 0xFFFFFFFF);
-      PrintAndLog("DEZ 5.5      : %05lld.%05lld",(id>>16LL) & 0xFFFF,(id & 0xFFFF));
-      PrintAndLog("DEZ 3.5A     : %03lld.%05lld",(id>>32ll),(id & 0xFFFF));
-      PrintAndLog("DEZ 3.5B     : %03lld.%05lld",(id & 0xFF000000) >> 24,(id & 0xFFFF));
-      PrintAndLog("DEZ 3.5C     : %03lld.%05lld",(id & 0xFF0000) >> 16,(id & 0xFFFF));
-      PrintAndLog("DEZ 14/IK2   : %014lld",id);
-      PrintAndLog("DEZ 15/IK3   : %015lld",id2lo);
-      PrintAndLog("Other        : %05lld_%03lld_%08lld",(id&0xFFFF),((id>>16LL) & 0xFF),(id & 0xFFFFFF));  
-      PrintAndLog("DEZ 20/ZK    : %02lld%02lld%02lld%02lld%02lld%02lld%02lld%02lld%02lld%02lld",
-        (id2lo & 0xf000000000) >> 36,
-        (id2lo & 0x0f00000000) >> 32,
-        (id2lo & 0x00f0000000) >> 28,
-        (id2lo & 0x000f000000) >> 24,
-        (id2lo & 0x0000f00000) >> 20,
-        (id2lo & 0x00000f0000) >> 16,
-        (id2lo & 0x000000f000) >> 12,
-        (id2lo & 0x0000000f00) >> 8,
-        (id2lo & 0x00000000f0) >> 4,
-        (id2lo & 0x000000000f)
-      );
-
-      PrintAndLog("");                 
-      uint64_t paxton = (((id>>32) << 24) | (id & 0xffffff))  + 0x143e00;
-      PrintAndLog("Pattern Paxton  : %0d", paxton);    
-
-      uint32_t p1id = (id & 0xFFFFFF);
-      uint8_t arr[32] = {0x00};
-      int i =0; 
-      int j = 23;
-      for (; i < 24; ++i, --j  ){
-       arr[i] = (p1id >> i) & 1;
-      }
-
-      uint32_t p1  = 0;        
-
-      p1 |= arr[23] << 21;
-      p1 |= arr[22] << 23;
-      p1 |= arr[21] << 20;
-      p1 |= arr[20] << 22;
-       
-      p1 |= arr[19] << 18;
-      p1 |= arr[18] << 16;
-      p1 |= arr[17] << 19;
-      p1 |= arr[16] << 17;
-       
-      p1 |= arr[15] << 13;
-      p1 |= arr[14] << 15;
-      p1 |= arr[13] << 12;
-      p1 |= arr[12] << 14;     
-
-      p1 |= arr[11] << 6;
-      p1 |= arr[10] << 2;
-      p1 |= arr[9]  << 7;
-      p1 |= arr[8]  << 1;
-
-      p1 |= arr[7]  << 0;
-      p1 |= arr[6]  << 8;
-      p1 |= arr[5]  << 11;
-      p1 |= arr[4]  << 3;      
-
-      p1 |= arr[3]  << 10;
-      p1 |= arr[2]  << 4;
-      p1 |= arr[1]  << 5;
-      p1 |= arr[0]  << 9;      
-      PrintAndLog("Pattern 1       : 0x%X - %d", p1, p1);
-
-      uint16_t sebury1 = id & 0xFFFF;
-      uint8_t  sebury2 = (id >> 16) & 0x7F;
-      uint32_t sebury3 = id & 0x7FFFFF;
-      PrintAndLog("Pattern Sebury  : %d %d %d  (hex: %X %X %X)", sebury1, sebury2, sebury3, sebury1, sebury2, sebury3);
-    }
-  }
-  return;
+       if (id || hi){
+               uint64_t iii=1;
+               uint64_t id2lo=0;
+               uint32_t ii=0;
+               uint32_t i=0;
+               for (ii=5; ii>0;ii--){
+                       for (i=0;i<8;i++){
+                               id2lo=(id2lo<<1LL) | ((id & (iii << (i+((ii-1)*8)))) >> (i+((ii-1)*8)));
+                       }
+               }
+               if (hi){
+                       //output 88 bit em id
+                       PrintAndLog("\nEM TAG ID      : %06x%016llx", hi, id);
+               } else{
+                       //output 40 bit em id
+                       PrintAndLog("\nEM TAG ID      : %010llx", id);
+                       PrintAndLog("Unique TAG ID  : %010llx",  id2lo);
+                       PrintAndLog("\nPossible de-scramble patterns");
+                       PrintAndLog("HoneyWell IdentKey {");
+                       PrintAndLog("DEZ 8          : %08lld",id & 0xFFFFFF);
+                       PrintAndLog("DEZ 10         : %010lld",id & 0xFFFFFFFF);
+                       PrintAndLog("DEZ 5.5        : %05lld.%05lld",(id>>16LL) & 0xFFFF,(id & 0xFFFF));
+                       PrintAndLog("DEZ 3.5A       : %03lld.%05lld",(id>>32ll),(id & 0xFFFF));
+                       PrintAndLog("DEZ 3.5B       : %03lld.%05lld",(id & 0xFF000000) >> 24,(id & 0xFFFF));
+                       PrintAndLog("DEZ 3.5C       : %03lld.%05lld",(id & 0xFF0000) >> 16,(id & 0xFFFF));
+                       PrintAndLog("DEZ 14/IK2     : %014lld",id);
+                       PrintAndLog("DEZ 15/IK3     : %015lld",id2lo);
+                       PrintAndLog("DEZ 20/ZK      : %02lld%02lld%02lld%02lld%02lld%02lld%02lld%02lld%02lld%02lld",
+                           (id2lo & 0xf000000000) >> 36,
+                           (id2lo & 0x0f00000000) >> 32,
+                           (id2lo & 0x00f0000000) >> 28,
+                           (id2lo & 0x000f000000) >> 24,
+                           (id2lo & 0x0000f00000) >> 20,
+                           (id2lo & 0x00000f0000) >> 16,
+                           (id2lo & 0x000000f000) >> 12,
+                           (id2lo & 0x0000000f00) >> 8,
+                           (id2lo & 0x00000000f0) >> 4,
+                           (id2lo & 0x000000000f)
+                       );
+                       uint64_t paxton = (((id>>32) << 24) | (id & 0xffffff))  + 0x143e00;
+                       PrintAndLog("}\nOther          : %05lld_%03lld_%08lld",(id&0xFFFF),((id>>16LL) & 0xFF),(id & 0xFFFFFF));  
+                       PrintAndLog("Pattern Paxton : %0d", paxton);
+
+                       uint32_t p1id = (id & 0xFFFFFF);
+                       uint8_t arr[32] = {0x00};
+                       int i =0; 
+                       int j = 23;
+                       for (; i < 24; ++i, --j ){
+                               arr[i] = (p1id >> i) & 1;
+                       }
+
+                       uint32_t p1  = 0;
+
+                       p1 |= arr[23] << 21;
+                       p1 |= arr[22] << 23;
+                       p1 |= arr[21] << 20;
+                       p1 |= arr[20] << 22;
+                               
+                       p1 |= arr[19] << 18;
+                       p1 |= arr[18] << 16;
+                       p1 |= arr[17] << 19;
+                       p1 |= arr[16] << 17;
+                               
+                       p1 |= arr[15] << 13;
+                       p1 |= arr[14] << 15;
+                       p1 |= arr[13] << 12;
+                       p1 |= arr[12] << 14;
+
+                       p1 |= arr[11] << 6;
+                       p1 |= arr[10] << 2;
+                       p1 |= arr[9]  << 7;
+                       p1 |= arr[8]  << 1;
+
+                       p1 |= arr[7]  << 0;
+                       p1 |= arr[6]  << 8;
+                       p1 |= arr[5]  << 11;
+                       p1 |= arr[4]  << 3;
+
+                       p1 |= arr[3]  << 10;
+                       p1 |= arr[2]  << 4;
+                       p1 |= arr[1]  << 5;
+                       p1 |= arr[0]  << 9;
+                       PrintAndLog("Pattern 1      : 0x%X - %d", p1, p1);
+
+                       uint16_t sebury1 = id & 0xFFFF;
+                       uint8_t  sebury2 = (id >> 16) & 0x7F;
+                       uint32_t sebury3 = id & 0x7FFFFF;
+                       PrintAndLog("Pattern Sebury : %d %d %d  (hex: %X %X %X)", sebury1, sebury2, sebury3, sebury1, sebury2, sebury3);
+               }
+       }
+       return;
 }
 
 
 int AskEm410xDemod(const char *Cmd, uint32_t *hi, uint64_t *lo)
 {
-  int ans = ASKmanDemod(Cmd, FALSE, FALSE);
-  if (!ans) return 0;
+       int ans = ASKmanDemod(Cmd, FALSE, FALSE);
+       if (!ans) return 0;
 
-  size_t idx=0;
-  if (Em410xDecode(DemodBuffer,(size_t *) &DemodBufferLen, &idx, hi, lo)){
-    if (g_debugMode){
-      PrintAndLog("DEBUG: idx: %d, Len: %d, Printing Demod Buffer:", idx, DemodBufferLen);
-      printDemodBuff();
-    }
-    return 1;
-  }
-  return 0;    
+       size_t idx=0;
+       if (Em410xDecode(DemodBuffer,(size_t *) &DemodBufferLen, &idx, hi, lo)){
+               if (g_debugMode){
+                       PrintAndLog("DEBUG: idx: %d, Len: %d, Printing Demod Buffer:", idx, DemodBufferLen);
+                       printDemodBuff();
+               }
+               return 1;
+       }
+       return 0;
 }
 //by marshmellow
 //takes 3 arguments - clock, invert and maxErr as integers
@@ -386,82 +385,82 @@ int AskEm410xDemod(const char *Cmd, uint32_t *hi, uint64_t *lo)
 //prints binary found and saves in graphbuffer for further commands
 int CmdAskEM410xDemod(const char *Cmd)
 {
-  char cmdp = param_getchar(Cmd, 0);
-  if (strlen(Cmd) > 10 || cmdp == 'h' || cmdp == 'H') {
-    PrintAndLog("Usage:  data askem410xdemod [clock] <0|1> [maxError]");
-    PrintAndLog("     [set clock as integer] optional, if not set, autodetect.");
-    PrintAndLog("     <invert>, 1 for invert output");
-    PrintAndLog("     [set maximum allowed errors], default = 100.");
-    PrintAndLog("");
-    PrintAndLog("    sample: data askem410xdemod        = demod an EM410x Tag ID from GraphBuffer");
-    PrintAndLog("          : data askem410xdemod 32     = demod an EM410x Tag ID from GraphBuffer using a clock of RF/32");
-    PrintAndLog("          : data askem410xdemod 32 1   = demod an EM410x Tag ID from GraphBuffer using a clock of RF/32 and inverting data");
-    PrintAndLog("          : data askem410xdemod 1      = demod an EM410x Tag ID from GraphBuffer while inverting data");
-    PrintAndLog("          : data askem410xdemod 64 1 0 = demod an EM410x Tag ID from GraphBuffer using a clock of RF/64 and inverting data and allowing 0 demod errors");
-    return 0;
-  }
-  uint32_t hi;
-  uint64_t lo;
-  if (AskEm410xDemod(Cmd, &hi, &lo)) {
-    PrintAndLog("EM410x pattern found: ");
-    printEM410x(hi, lo);
-    return 1;
-  }
-  return 0;
+       char cmdp = param_getchar(Cmd, 0);
+       if (strlen(Cmd) > 10 || cmdp == 'h' || cmdp == 'H') {
+               PrintAndLog("Usage:  data askem410xdemod [clock] <0|1> [maxError]");
+               PrintAndLog("     [set clock as integer] optional, if not set, autodetect.");
+               PrintAndLog("     <invert>, 1 for invert output");
+               PrintAndLog("     [set maximum allowed errors], default = 100.");
+               PrintAndLog("");
+               PrintAndLog("    sample: data askem410xdemod        = demod an EM410x Tag ID from GraphBuffer");
+               PrintAndLog("          : data askem410xdemod 32     = demod an EM410x Tag ID from GraphBuffer using a clock of RF/32");
+               PrintAndLog("          : data askem410xdemod 32 1   = demod an EM410x Tag ID from GraphBuffer using a clock of RF/32 and inverting data");
+               PrintAndLog("          : data askem410xdemod 1      = demod an EM410x Tag ID from GraphBuffer while inverting data");
+               PrintAndLog("          : data askem410xdemod 64 1 0 = demod an EM410x Tag ID from GraphBuffer using a clock of RF/64 and inverting data and allowing 0 demod errors");
+               return 0;
+       }
+       uint32_t hi = 0;
+       uint64_t lo = 0;
+       if (AskEm410xDemod(Cmd, &hi, &lo)) {
+               PrintAndLog("EM410x pattern found: ");
+               printEM410x(hi, lo);
+               return 1;
+       }
+       return 0;
 }
 
 int ASKmanDemod(const char *Cmd, bool verbose, bool emSearch)
 {
-  int invert=0;
-  int clk=0;
-  int maxErr=100;
-  
-  uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
-  sscanf(Cmd, "%i %i %i", &clk, &invert, &maxErr);
-  if (invert != 0 && invert != 1) {
-    PrintAndLog("Invalid argument: %s", Cmd);
-    return 0;
-  }
-  if (clk==1){
-    invert=1;
-    clk=0;
-  }
-  size_t BitLen = getFromGraphBuf(BitStream);
-  if (g_debugMode==1) PrintAndLog("DEBUG: Bitlen from grphbuff: %d",BitLen);
-  if (BitLen==0) return 0;
-  int errCnt=0;
-  errCnt = askmandemod(BitStream, &BitLen, &clk, &invert, maxErr);
-  if (errCnt<0||BitLen<16){  //if fatal error (or -1)
-    if (g_debugMode==1) PrintAndLog("no data found %d, errors:%d, bitlen:%d, clock:%d",errCnt,invert,BitLen,clk);
-    return 0;
-  }
-  if (verbose || g_debugMode) PrintAndLog("\nUsing Clock: %d - Invert: %d - Bits Found: %d",clk,invert,BitLen);
-
-  //output
-  if (errCnt>0){
-    if (verbose || g_debugMode) PrintAndLog("# Errors during Demoding (shown as 77 in bit stream): %d",errCnt);
-  }
-  if (verbose || g_debugMode) PrintAndLog("ASK/Manchester decoded bitstream:");
-  // Now output the bitstream to the scrollback by line of 16 bits
-  setDemodBuf(BitStream,BitLen,0);
-  if (verbose || g_debugMode) printDemodBuff();
-  uint64_t lo =0;
-  uint32_t hi =0;
-  size_t idx=0;
-  if (emSearch){
-    if (Em410xDecode(BitStream, &BitLen, &idx, &hi, &lo)){
-      //set GraphBuffer for clone or sim command
-      setDemodBuf(BitStream, BitLen, idx);
-      if (g_debugMode){
-        PrintAndLog("DEBUG: idx: %d, Len: %d, Printing Demod Buffer:", idx, BitLen);
-        printDemodBuff();
-      }
-      if (verbose) PrintAndLog("EM410x pattern found: ");
-      if (verbose) printEM410x(hi, lo);
-      return 1;
-    }
-  }
-  return 1;
+       int invert=0;
+       int clk=0;
+       int maxErr=100;
+       
+       uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
+       sscanf(Cmd, "%i %i %i", &clk, &invert, &maxErr);
+       if (invert != 0 && invert != 1) {
+               PrintAndLog("Invalid argument: %s", Cmd);
+               return 0;
+       }
+       if (clk==1){
+               invert=1;
+               clk=0;
+       }
+       size_t BitLen = getFromGraphBuf(BitStream);
+       if (g_debugMode==1) PrintAndLog("DEBUG: Bitlen from grphbuff: %d",BitLen);
+       if (BitLen==0) return 0;
+       int errCnt=0;
+       errCnt = askmandemod(BitStream, &BitLen, &clk, &invert, maxErr);
+       if (errCnt<0||BitLen<16){  //if fatal error (or -1)
+               if (g_debugMode==1) PrintAndLog("no data found %d, errors:%d, bitlen:%d, clock:%d",errCnt,invert,BitLen,clk);
+               return 0;
+       }
+       if (verbose || g_debugMode) PrintAndLog("\nUsing Clock: %d - Invert: %d - Bits Found: %d",clk,invert,BitLen);
+
+       //output
+       if (errCnt>0){
+               if (verbose || g_debugMode) PrintAndLog("# Errors during Demoding (shown as 77 in bit stream): %d",errCnt);
+       }
+       if (verbose || g_debugMode) PrintAndLog("ASK/Manchester decoded bitstream:");
+       // Now output the bitstream to the scrollback by line of 16 bits
+       setDemodBuf(BitStream,BitLen,0);
+       if (verbose || g_debugMode) printDemodBuff();
+       uint64_t lo =0;
+       uint32_t hi =0;
+       size_t idx=0;
+       if (emSearch){
+               if (Em410xDecode(BitStream, &BitLen, &idx, &hi, &lo)){
+                       //set GraphBuffer for clone or sim command
+                       setDemodBuf(BitStream, BitLen, idx);
+                       if (g_debugMode){
+                               PrintAndLog("DEBUG: idx: %d, Len: %d, Printing Demod Buffer:", idx, BitLen);
+                               printDemodBuff();
+                       }
+                       if (verbose) PrintAndLog("EM410x pattern found: ");
+                       if (verbose) printEM410x(hi, lo);
+                       return 1;
+               }
+       }
+       return 1;
 }
 
 //by marshmellow
@@ -470,21 +469,21 @@ int ASKmanDemod(const char *Cmd, bool verbose, bool emSearch)
 //prints binary found and saves in graphbuffer for further commands
 int Cmdaskmandemod(const char *Cmd)
 {
-  char cmdp = param_getchar(Cmd, 0);
-  if (strlen(Cmd) > 10 || cmdp == 'h' || cmdp == 'H') {
-    PrintAndLog("Usage:  data rawdemod am [clock] <0|1> [maxError]");
-    PrintAndLog("     [set clock as integer] optional, if not set, autodetect.");
-    PrintAndLog("     <invert>, 1 for invert output");
-    PrintAndLog("     [set maximum allowed errors], default = 100.");
-    PrintAndLog("");
-    PrintAndLog("    sample: data rawdemod am        = demod an ask/manchester tag from GraphBuffer");
-    PrintAndLog("          : data rawdemod am 32     = demod an ask/manchester tag from GraphBuffer using a clock of RF/32");
-    PrintAndLog("          : data rawdemod am 32 1   = demod an ask/manchester tag from GraphBuffer using a clock of RF/32 and inverting data");
-    PrintAndLog("          : data rawdemod am 1      = demod an ask/manchester tag from GraphBuffer while inverting data");
-    PrintAndLog("          : data rawdemod am 64 1 0 = demod an ask/manchester tag from GraphBuffer using a clock of RF/64, inverting data and allowing 0 demod errors");
-    return 0;
-  }
-  return ASKmanDemod(Cmd, TRUE, TRUE);
+       char cmdp = param_getchar(Cmd, 0);
+       if (strlen(Cmd) > 10 || cmdp == 'h' || cmdp == 'H') {
+               PrintAndLog("Usage:  data rawdemod am [clock] <0|1> [maxError]");
+               PrintAndLog("     [set clock as integer] optional, if not set, autodetect.");
+               PrintAndLog("     <invert>, 1 for invert output");
+               PrintAndLog("     [set maximum allowed errors], default = 100.");
+               PrintAndLog("");
+               PrintAndLog("    sample: data rawdemod am        = demod an ask/manchester tag from GraphBuffer");
+               PrintAndLog("          : data rawdemod am 32     = demod an ask/manchester tag from GraphBuffer using a clock of RF/32");
+               PrintAndLog("          : data rawdemod am 32 1   = demod an ask/manchester tag from GraphBuffer using a clock of RF/32 and inverting data");
+               PrintAndLog("          : data rawdemod am 1      = demod an ask/manchester tag from GraphBuffer while inverting data");
+               PrintAndLog("          : data rawdemod am 64 1 0 = demod an ask/manchester tag from GraphBuffer using a clock of RF/64, inverting data and allowing 0 demod errors");
+               return 0;
+       }
+       return ASKmanDemod(Cmd, TRUE, TRUE);
 }
 
 //by marshmellow
@@ -492,51 +491,51 @@ int Cmdaskmandemod(const char *Cmd)
 //stricktly take 10 and 01 and convert to 0 and 1
 int Cmdmandecoderaw(const char *Cmd)
 {
-  int i =0;
-  int errCnt=0;
-  size_t size=0;
-  size_t maxErr = 20;
-  char cmdp = param_getchar(Cmd, 0);
-  if (strlen(Cmd) > 1 || cmdp == 'h' || cmdp == 'H') {
-    PrintAndLog("Usage:  data manrawdecode");
-    PrintAndLog("     Takes 10 and 01 and converts to 0 and 1 respectively");
-    PrintAndLog("     --must have binary sequence in demodbuffer (run data askrawdemod first)");
-    PrintAndLog("");
-    PrintAndLog("    sample: data manrawdecode   = decode manchester bitstream from the demodbuffer");
-    return 0;
-  }
-  if (DemodBufferLen==0) return 0;
-  uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
-  int high=0,low=0;
-  for (;i<DemodBufferLen;++i){
-    if (DemodBuffer[i]>high) high=DemodBuffer[i];
-    else if(DemodBuffer[i]<low) low=DemodBuffer[i];
-    BitStream[i]=DemodBuffer[i];
-  }
-  if (high>1 || low <0 ){
-    PrintAndLog("Error: please raw demod the wave first then mancheseter raw decode");
-    return 0;
-  }
-  size=i;
-  errCnt=manrawdecode(BitStream, &size);
-  if (errCnt>=maxErr){
-    PrintAndLog("Too many errors: %d",errCnt);
-    return 0;
-  }
-  PrintAndLog("Manchester Decoded - # errors:%d - data:",errCnt);
-  printBitStream(BitStream, size);
-  if (errCnt==0){
-    uint64_t id = 0;
-    uint32_t hi = 0;
-    size_t idx=0;
-    if (Em410xDecode(BitStream, &size, &idx, &hi, &id)){
-      //need to adjust to set bitstream back to manchester encoded data
-      //setDemodBuf(BitStream, size, idx);
-
-      printEM410x(hi, id);
-    }
-  }
-  return 1;
+       int i =0;
+       int errCnt=0;
+       size_t size=0;
+       size_t maxErr = 20;
+       char cmdp = param_getchar(Cmd, 0);
+       if (strlen(Cmd) > 1 || cmdp == 'h' || cmdp == 'H') {
+               PrintAndLog("Usage:  data manrawdecode");
+               PrintAndLog("     Takes 10 and 01 and converts to 0 and 1 respectively");
+               PrintAndLog("     --must have binary sequence in demodbuffer (run data askrawdemod first)");
+               PrintAndLog("");
+               PrintAndLog("    sample: data manrawdecode   = decode manchester bitstream from the demodbuffer");
+               return 0;
+       }
+       if (DemodBufferLen==0) return 0;
+       uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
+       int high=0,low=0;
+       for (;i<DemodBufferLen;++i){
+               if (DemodBuffer[i]>high) high=DemodBuffer[i];
+               else if(DemodBuffer[i]<low) low=DemodBuffer[i];
+               BitStream[i]=DemodBuffer[i];
+       }
+       if (high>1 || low <0 ){
+               PrintAndLog("Error: please raw demod the wave first then mancheseter raw decode");
+               return 0;
+       }
+       size=i;
+       errCnt=manrawdecode(BitStream, &size);
+       if (errCnt>=maxErr){
+               PrintAndLog("Too many errors: %d",errCnt);
+               return 0;
+       }
+       PrintAndLog("Manchester Decoded - # errors:%d - data:",errCnt);
+       printBitStream(BitStream, size);
+       if (errCnt==0){
+               uint64_t id = 0;
+               uint32_t hi = 0;
+               size_t idx=0;
+               if (Em410xDecode(BitStream, &size, &idx, &hi, &id)){
+                       //need to adjust to set bitstream back to manchester encoded data
+                       //setDemodBuf(BitStream, size, idx);
+
+                       printEM410x(hi, id);
+               }
+       }
+       return 1;
 }
 
 //by marshmellow
@@ -558,7 +557,7 @@ int CmdBiphaseDecodeRaw(const char *Cmd)
                PrintAndLog("Usage:  data biphaserawdecode [offset] [invert] [maxErr]");
                PrintAndLog("     Converts 10 or 01 to 1 and 11 or 00 to 0");
                PrintAndLog("     --must have binary sequence in demodbuffer (run data askrawdemod first)");
-    PrintAndLog("     --invert for Conditional Dephase Encoding (CDP) AKA Differential Manchester");
+               PrintAndLog("     --invert for Conditional Dephase Encoding (CDP) AKA Differential Manchester");
                PrintAndLog("");
                PrintAndLog("     [offset <0|1>], set to 0 not to adjust start position or to 1 to adjust decode start position");
                PrintAndLog("     [invert <0|1>], set to 1 to invert output");
@@ -599,25 +598,25 @@ int CmdBiphaseDecodeRaw(const char *Cmd)
 // set demod buffer back to raw after biphase demod
 void setBiphasetoRawDemodBuf(uint8_t *BitStream, size_t size)
 {
-  uint8_t rawStream[512]={0x00};
-  size_t i=0;
-  uint8_t curPhase=0;
-  if (size > 256) {
-    PrintAndLog("ERROR - Biphase Demod Buffer overrun");
-    return;
-  }
-  for (size_t idx=0; idx<size; idx++){
-    if(!BitStream[idx]){
-      rawStream[i++] = curPhase;
-      rawStream[i++] = curPhase;
-      curPhase ^= 1; 
-    } else {
-      rawStream[i++] = curPhase;
-      rawStream[i++] = curPhase ^ 1;
-    }
-  }
-  setDemodBuf(rawStream,i,0);
-  return;
+       uint8_t rawStream[512]={0x00};
+       size_t i=0;
+       uint8_t curPhase=0;
+       if (size > 256) {
+               PrintAndLog("ERROR - Biphase Demod Buffer overrun");
+               return;
+       }
+       for (size_t idx=0; idx<size; idx++){
+               if(!BitStream[idx]){
+                       rawStream[i++] = curPhase;
+                       rawStream[i++] = curPhase;
+                       curPhase ^= 1; 
+               } else {
+                       rawStream[i++] = curPhase;
+                       rawStream[i++] = curPhase ^ 1;
+               }
+       }
+       setDemodBuf(rawStream,i,0);
+       return;
 }
 
 //by marshmellow
@@ -626,46 +625,46 @@ void setBiphasetoRawDemodBuf(uint8_t *BitStream, size_t size)
 //prints binary found and saves in graphbuffer for further commands
 int ASKrawDemod(const char *Cmd, bool verbose)
 {
-  int invert=0;
-  int clk=0;
-  int maxErr=100;
-  uint8_t askAmp = 0;
-  char amp = param_getchar(Cmd, 0);
-  uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
-  sscanf(Cmd, "%i %i %i %c", &clk, &invert, &maxErr, &amp);
-  if (invert != 0 && invert != 1) {
-    if (verbose || g_debugMode) PrintAndLog("Invalid argument: %s", Cmd);
-    return 0;
-  }
-  if (clk==1){
-    invert=1;
-    clk=0;
-  }
-  if (amp == 'a' || amp == 'A') askAmp=1; 
-  size_t BitLen = getFromGraphBuf(BitStream);
-  if (BitLen==0) return 0;
-  int errCnt=0;
-  errCnt = askrawdemod(BitStream, &BitLen, &clk, &invert, maxErr, askAmp);
-  if (errCnt==-1||BitLen<16){  //throw away static - allow 1 and -1 (in case of threshold command first)
-    if (verbose || g_debugMode) PrintAndLog("no data found");
-    if (g_debugMode) PrintAndLog("errCnt: %d, BitLen: %d, clk: %d, invert: %d", errCnt, BitLen, clk, invert);
-    return 0;
-  }
-  if (verbose || g_debugMode) PrintAndLog("Using Clock: %d - invert: %d - Bits Found: %d", clk, invert, BitLen);
-  
-  //move BitStream back to DemodBuffer
-  setDemodBuf(BitStream,BitLen,0);
-
-  //output
-  if (errCnt>0 && (verbose || g_debugMode)){
-    PrintAndLog("# Errors during Demoding (shown as 77 in bit stream): %d", errCnt);
-  }
-  if (verbose || g_debugMode){
-    PrintAndLog("ASK demoded bitstream:");
-    // Now output the bitstream to the scrollback by line of 16 bits
-    printBitStream(BitStream,BitLen);
-  } 
-  return 1;
+       int invert=0;
+       int clk=0;
+       int maxErr=100;
+       uint8_t askAmp = 0;
+       char amp = param_getchar(Cmd, 0);
+       uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
+       sscanf(Cmd, "%i %i %i %c", &clk, &invert, &maxErr, &amp);
+       if (invert != 0 && invert != 1) {
+               if (verbose || g_debugMode) PrintAndLog("Invalid argument: %s", Cmd);
+               return 0;
+       }
+       if (clk==1){
+               invert=1;
+               clk=0;
+       }
+       if (amp == 'a' || amp == 'A') askAmp=1; 
+       size_t BitLen = getFromGraphBuf(BitStream);
+       if (BitLen==0) return 0;
+       int errCnt=0;
+       errCnt = askrawdemod(BitStream, &BitLen, &clk, &invert, maxErr, askAmp);
+       if (errCnt==-1||BitLen<16){  //throw away static - allow 1 and -1 (in case of threshold command first)
+               if (verbose || g_debugMode) PrintAndLog("no data found");
+               if (g_debugMode) PrintAndLog("errCnt: %d, BitLen: %d, clk: %d, invert: %d", errCnt, BitLen, clk, invert);
+               return 0;
+       }
+       if (verbose || g_debugMode) PrintAndLog("Using Clock: %d - invert: %d - Bits Found: %d", clk, invert, BitLen);
+       
+       //move BitStream back to DemodBuffer
+       setDemodBuf(BitStream,BitLen,0);
+
+       //output
+       if (errCnt>0 && (verbose || g_debugMode)){
+               PrintAndLog("# Errors during Demoding (shown as 77 in bit stream): %d", errCnt);
+       }
+       if (verbose || g_debugMode){
+               PrintAndLog("ASK demoded bitstream:");
+               // Now output the bitstream to the scrollback by line of 16 bits
+               printBitStream(BitStream,BitLen);
+       
+       return 1;
 }
 
 //by marshmellow
@@ -709,30 +708,30 @@ int ASKbiphaseDemod(const char *Cmd, bool verbose)
 //by marshmellow - see ASKbiphaseDemod
 int Cmdaskbiphdemod(const char *Cmd)
 {
-  char cmdp = param_getchar(Cmd, 0);
-  if (strlen(Cmd) > 12 || cmdp == 'h' || cmdp == 'H') {
-    PrintAndLog("Usage:  data rawdemod ab [offset] [clock] <invert> [maxError] <amplify>");
-    PrintAndLog("     [offset], offset to begin biphase, default=0");
-    PrintAndLog("     [set clock as integer] optional, if not set, autodetect");
-    PrintAndLog("     <invert>, 1 to invert output");
-    PrintAndLog("     [set maximum allowed errors], default = 100");
-    PrintAndLog("     <amplify>, 'a' to attempt demod with ask amplification, default = no amp");
-    PrintAndLog("     NOTE: <invert>  can be entered as second or third argument");
-    PrintAndLog("     NOTE: <amplify> can be entered as first, second or last argument");
-    PrintAndLog("     NOTE: any other arg must have previous args set to work");
-    PrintAndLog("");
-    PrintAndLog("     NOTE: --invert for Conditional Dephase Encoding (CDP) AKA Differential Manchester");
-    PrintAndLog("");
-    PrintAndLog("    sample: data rawdemod ab            = demod an ask/biph tag from GraphBuffer");
-    PrintAndLog("          : data rawdemod ab a          = demod an ask/biph tag from GraphBuffer, amplified");
-    PrintAndLog("          : data rawdemod ab 1 32       = demod an ask/biph tag from GraphBuffer using an offset of 1 and a clock of RF/32");
-    PrintAndLog("          : data rawdemod ab 0 32 1     = demod an ask/biph tag from GraphBuffer using a clock of RF/32 and inverting data");
-    PrintAndLog("          : data rawdemod ab 0 1        = demod an ask/biph tag from GraphBuffer while inverting data");
-    PrintAndLog("          : data rawdemod ab 0 64 1 0   = demod an ask/biph tag from GraphBuffer using a clock of RF/64, inverting data and allowing 0 demod errors");
-    PrintAndLog("          : data rawdemod ab 0 64 1 0 a = demod an ask/biph tag from GraphBuffer using a clock of RF/64, inverting data and allowing 0 demod errors, and amp");
-    return 0;
-  }
-  return ASKbiphaseDemod(Cmd, TRUE);
+       char cmdp = param_getchar(Cmd, 0);
+       if (strlen(Cmd) > 12 || cmdp == 'h' || cmdp == 'H') {
+               PrintAndLog("Usage:  data rawdemod ab [offset] [clock] <invert> [maxError] <amplify>");
+               PrintAndLog("     [offset], offset to begin biphase, default=0");
+               PrintAndLog("     [set clock as integer] optional, if not set, autodetect");
+               PrintAndLog("     <invert>, 1 to invert output");
+               PrintAndLog("     [set maximum allowed errors], default = 100");
+               PrintAndLog("     <amplify>, 'a' to attempt demod with ask amplification, default = no amp");
+               PrintAndLog("     NOTE: <invert>  can be entered as second or third argument");
+               PrintAndLog("     NOTE: <amplify> can be entered as first, second or last argument");
+               PrintAndLog("     NOTE: any other arg must have previous args set to work");
+               PrintAndLog("");
+               PrintAndLog("     NOTE: --invert for Conditional Dephase Encoding (CDP) AKA Differential Manchester");
+               PrintAndLog("");
+               PrintAndLog("    sample: data rawdemod ab            = demod an ask/biph tag from GraphBuffer");
+               PrintAndLog("          : data rawdemod ab a          = demod an ask/biph tag from GraphBuffer, amplified");
+               PrintAndLog("          : data rawdemod ab 1 32       = demod an ask/biph tag from GraphBuffer using an offset of 1 and a clock of RF/32");
+               PrintAndLog("          : data rawdemod ab 0 32 1     = demod an ask/biph tag from GraphBuffer using a clock of RF/32 and inverting data");
+               PrintAndLog("          : data rawdemod ab 0 1        = demod an ask/biph tag from GraphBuffer while inverting data");
+               PrintAndLog("          : data rawdemod ab 0 64 1 0   = demod an ask/biph tag from GraphBuffer using a clock of RF/64, inverting data and allowing 0 demod errors");
+               PrintAndLog("          : data rawdemod ab 0 64 1 0 a = demod an ask/biph tag from GraphBuffer using a clock of RF/64, inverting data and allowing 0 demod errors, and amp");
+               return 0;
+       }
+       return ASKbiphaseDemod(Cmd, TRUE);
 }
 
 //by marshmellow
@@ -742,194 +741,194 @@ int Cmdaskbiphdemod(const char *Cmd)
 //if successful it will push askraw data back to demod buffer ready for emulation
 int CmdG_Prox_II_Demod(const char *Cmd)
 {
-  if (!ASKbiphaseDemod(Cmd, FALSE)){
-    if (g_debugMode) PrintAndLog("ASKbiphaseDemod failed 1st try");
-    return 0;
-  }
-  size_t size = DemodBufferLen;
-  //call lfdemod.c demod for gProxII
-  int ans = gProxII_Demod(DemodBuffer, &size);
-  if (ans < 0){
-    if (g_debugMode) PrintAndLog("Error gProxII_Demod");
-    return 0;
-  }
-  //got a good demod
-  uint32_t ByteStream[65] = {0x00};
-  uint8_t xorKey=0;
-  uint8_t keyCnt=0;
-  uint8_t bitCnt=0;
-  uint8_t ByteCnt=0;
-  size_t startIdx = ans + 6; //start after preamble
-  for (size_t idx = 0; idx<size-6; idx++){
-    if ((idx+1) % 5 == 0){
-      //spacer bit - should be 0
-      if (DemodBuffer[startIdx+idx] != 0) {
-        if (g_debugMode) PrintAndLog("Error spacer not 0: %d, pos: %d",DemodBuffer[startIdx+idx],startIdx+idx);
-        return 0;
-      }
-      continue;
-    } 
-    if (keyCnt<8){ //lsb first
-      xorKey = xorKey | (DemodBuffer[startIdx+idx]<<keyCnt);
-      keyCnt++;
-      if (keyCnt==8 && g_debugMode) PrintAndLog("xorKey Found: %02x", xorKey);
-      continue;
-    }
-    //lsb first
-    ByteStream[ByteCnt] = ByteStream[ByteCnt] | (DemodBuffer[startIdx+idx]<<bitCnt);
-    bitCnt++;
-    if (bitCnt % 8 == 0){
-      if (g_debugMode) PrintAndLog("byte %d: %02x",ByteCnt,ByteStream[ByteCnt]);
-      bitCnt=0;
-      ByteCnt++;
-    }
-  }
-  for (uint8_t i = 0; i < ByteCnt; i++){
-    ByteStream[i] ^= xorKey; //xor
-    if (g_debugMode) PrintAndLog("byte %d after xor: %02x", i, ByteStream[i]);
-  }
-  //now ByteStream contains 64 bytes of decrypted raw tag data
-  // 
-  uint8_t fmtLen = ByteStream[0]>>2;
-  uint32_t FC = 0;
-  uint32_t Card = 0;
-  uint32_t raw1 = bytebits_to_byte(DemodBuffer+ans,32);
-  uint32_t raw2 = bytebits_to_byte(DemodBuffer+ans+32, 32);
-  uint32_t raw3 = bytebits_to_byte(DemodBuffer+ans+64, 32);
-
-  if (fmtLen==36){
-    FC = ((ByteStream[3] & 0x7F)<<7) | (ByteStream[4]>>1);
-    Card = ((ByteStream[4]&1)<<19) | (ByteStream[5]<<11) | (ByteStream[6]<<3) | (ByteStream[7]>>5);
-    PrintAndLog("G-Prox-II Found: FmtLen %d, FC %d, Card %d",fmtLen,FC,Card);
-  } else if(fmtLen==26){
-    FC = ((ByteStream[3] & 0x7F)<<1) | (ByteStream[4]>>7);
-    Card = ((ByteStream[4]&0x7F)<<9) | (ByteStream[5]<<1) | (ByteStream[6]>>7);
-    PrintAndLog("G-Prox-II Found: FmtLen %d, FC %d, Card %d",fmtLen,FC,Card);    
-  } else {
-    PrintAndLog("Unknown G-Prox-II Fmt Found: FmtLen %d",fmtLen);
-  }
-  PrintAndLog("Raw: %08x%08x%08x", raw1,raw2,raw3);
-  setDemodBuf(DemodBuffer+ans, 96, 0);
-  return 1;
+       if (!ASKbiphaseDemod(Cmd, FALSE)){
+               if (g_debugMode) PrintAndLog("ASKbiphaseDemod failed 1st try");
+               return 0;
+       }
+       size_t size = DemodBufferLen;
+       //call lfdemod.c demod for gProxII
+       int ans = gProxII_Demod(DemodBuffer, &size);
+       if (ans < 0){
+               if (g_debugMode) PrintAndLog("Error gProxII_Demod");
+               return 0;
+       }
+       //got a good demod
+       uint32_t ByteStream[65] = {0x00};
+       uint8_t xorKey=0;
+       uint8_t keyCnt=0;
+       uint8_t bitCnt=0;
+       uint8_t ByteCnt=0;
+       size_t startIdx = ans + 6; //start after preamble
+       for (size_t idx = 0; idx<size-6; idx++){
+               if ((idx+1) % 5 == 0){
+                       //spacer bit - should be 0
+                       if (DemodBuffer[startIdx+idx] != 0) {
+                               if (g_debugMode) PrintAndLog("Error spacer not 0: %d, pos: %d",DemodBuffer[startIdx+idx],startIdx+idx);
+                               return 0;
+                       }
+                       continue;
+               
+               if (keyCnt<8){ //lsb first
+                       xorKey = xorKey | (DemodBuffer[startIdx+idx]<<keyCnt);
+                       keyCnt++;
+                       if (keyCnt==8 && g_debugMode) PrintAndLog("xorKey Found: %02x", xorKey);
+                       continue;
+               }
+               //lsb first
+               ByteStream[ByteCnt] = ByteStream[ByteCnt] | (DemodBuffer[startIdx+idx]<<bitCnt);
+               bitCnt++;
+               if (bitCnt % 8 == 0){
+                       if (g_debugMode) PrintAndLog("byte %d: %02x",ByteCnt,ByteStream[ByteCnt]);
+                       bitCnt=0;
+                       ByteCnt++;
+               }
+       }
+       for (uint8_t i = 0; i < ByteCnt; i++){
+               ByteStream[i] ^= xorKey; //xor
+               if (g_debugMode) PrintAndLog("byte %d after xor: %02x", i, ByteStream[i]);
+       }
+       //now ByteStream contains 64 bytes of decrypted raw tag data
+       // 
+       uint8_t fmtLen = ByteStream[0]>>2;
+       uint32_t FC = 0;
+       uint32_t Card = 0;
+       uint32_t raw1 = bytebits_to_byte(DemodBuffer+ans,32);
+       uint32_t raw2 = bytebits_to_byte(DemodBuffer+ans+32, 32);
+       uint32_t raw3 = bytebits_to_byte(DemodBuffer+ans+64, 32);
+
+       if (fmtLen==36){
+               FC = ((ByteStream[3] & 0x7F)<<7) | (ByteStream[4]>>1);
+               Card = ((ByteStream[4]&1)<<19) | (ByteStream[5]<<11) | (ByteStream[6]<<3) | (ByteStream[7]>>5);
+               PrintAndLog("G-Prox-II Found: FmtLen %d, FC %d, Card %d",fmtLen,FC,Card);
+       } else if(fmtLen==26){
+               FC = ((ByteStream[3] & 0x7F)<<1) | (ByteStream[4]>>7);
+               Card = ((ByteStream[4]&0x7F)<<9) | (ByteStream[5]<<1) | (ByteStream[6]>>7);
+               PrintAndLog("G-Prox-II Found: FmtLen %d, FC %d, Card %d",fmtLen,FC,Card);    
+       } else {
+               PrintAndLog("Unknown G-Prox-II Fmt Found: FmtLen %d",fmtLen);
+       }
+       PrintAndLog("Raw: %08x%08x%08x", raw1,raw2,raw3);
+       setDemodBuf(DemodBuffer+ans, 96, 0);
+       return 1;
 }
 
 //by marshmellow - see ASKrawDemod
 int Cmdaskrawdemod(const char *Cmd)
 {
-  char cmdp = param_getchar(Cmd, 0);
-  if (strlen(Cmd) > 12 || cmdp == 'h' || cmdp == 'H') {
-    PrintAndLog("Usage:  data rawdemod ar [clock] <invert> [maxError] [amplify]");
-    PrintAndLog("     [set clock as integer] optional, if not set, autodetect");
-    PrintAndLog("     <invert>, 1 to invert output");
-    PrintAndLog("     [set maximum allowed errors], default = 100");
-    PrintAndLog("     <amplify>, 'a' to attempt demod with ask amplification, default = no amp");
-    PrintAndLog("");
-    PrintAndLog("    sample: data rawdemod ar          = demod an ask tag from GraphBuffer");
-    PrintAndLog("          : data rawdemod ar a        = demod an ask tag from GraphBuffer, amplified");
-    PrintAndLog("          : data rawdemod ar 32       = demod an ask tag from GraphBuffer using a clock of RF/32");
-    PrintAndLog("          : data rawdemod ar 32 1     = demod an ask tag from GraphBuffer using a clock of RF/32 and inverting data");
-    PrintAndLog("          : data rawdemod ar 1        = demod an ask tag from GraphBuffer while inverting data");
-    PrintAndLog("          : data rawdemod ar 64 1 0   = demod an ask tag from GraphBuffer using a clock of RF/64, inverting data and allowing 0 demod errors");
-    PrintAndLog("          : data rawdemod ar 64 1 0 a = demod an ask tag from GraphBuffer using a clock of RF/64, inverting data and allowing 0 demod errors, and amp");
-    return 0;
-  }
-  return ASKrawDemod(Cmd, TRUE);
+       char cmdp = param_getchar(Cmd, 0);
+       if (strlen(Cmd) > 12 || cmdp == 'h' || cmdp == 'H') {
+               PrintAndLog("Usage:  data rawdemod ar [clock] <invert> [maxError] [amplify]");
+               PrintAndLog("     [set clock as integer] optional, if not set, autodetect");
+               PrintAndLog("     <invert>, 1 to invert output");
+               PrintAndLog("     [set maximum allowed errors], default = 100");
+               PrintAndLog("     <amplify>, 'a' to attempt demod with ask amplification, default = no amp");
+               PrintAndLog("");
+               PrintAndLog("    sample: data rawdemod ar          = demod an ask tag from GraphBuffer");
+               PrintAndLog("          : data rawdemod ar a        = demod an ask tag from GraphBuffer, amplified");
+               PrintAndLog("          : data rawdemod ar 32       = demod an ask tag from GraphBuffer using a clock of RF/32");
+               PrintAndLog("          : data rawdemod ar 32 1     = demod an ask tag from GraphBuffer using a clock of RF/32 and inverting data");
+               PrintAndLog("          : data rawdemod ar 1        = demod an ask tag from GraphBuffer while inverting data");
+               PrintAndLog("          : data rawdemod ar 64 1 0   = demod an ask tag from GraphBuffer using a clock of RF/64, inverting data and allowing 0 demod errors");
+               PrintAndLog("          : data rawdemod ar 64 1 0 a = demod an ask tag from GraphBuffer using a clock of RF/64, inverting data and allowing 0 demod errors, and amp");
+               return 0;
+       }
+       return ASKrawDemod(Cmd, TRUE);
 }
 
 int AutoCorrelate(int window, bool SaveGrph, bool verbose)
 {
-  static int CorrelBuffer[MAX_GRAPH_TRACE_LEN];
-  size_t Correlation = 0;
-  int maxSum = 0;
-  int lastMax = 0;
-  if (verbose) PrintAndLog("performing %d correlations", GraphTraceLen - window);
-  for (int i = 0; i < GraphTraceLen - window; ++i) {
-    int sum = 0;
-    for (int j = 0; j < window; ++j) {
-      sum += (GraphBuffer[j]*GraphBuffer[i + j]) / 256;
-    }
-    CorrelBuffer[i] = sum;
-    if (sum >= maxSum-100 && sum <= maxSum+100){
-      //another max
-      Correlation = i-lastMax;
-      lastMax = i;
-      if (sum > maxSum) maxSum = sum;
-    } else if (sum > maxSum){
-      maxSum=sum;
-      lastMax = i;
-    }
-  }
-  if (Correlation==0){
-    //try again with wider margin
-    for (int i = 0; i < GraphTraceLen - window; i++){
-      if (CorrelBuffer[i] >= maxSum-(maxSum*0.05) && CorrelBuffer[i] <= maxSum+(maxSum*0.05)){
-        //another max
-        Correlation = i-lastMax;
-        lastMax = i;
-        //if (CorrelBuffer[i] > maxSum) maxSum = sum;
-      }
-    }
-  }
-  if (verbose && Correlation > 0) PrintAndLog("Possible Correlation: %d samples",Correlation);
-
-  if (SaveGrph){
-    GraphTraceLen = GraphTraceLen - window;
-    memcpy(GraphBuffer, CorrelBuffer, GraphTraceLen * sizeof (int));
-    RepaintGraphWindow();  
-  }
-  return Correlation;
+       static int CorrelBuffer[MAX_GRAPH_TRACE_LEN];
+       size_t Correlation = 0;
+       int maxSum = 0;
+       int lastMax = 0;
+       if (verbose) PrintAndLog("performing %d correlations", GraphTraceLen - window);
+       for (int i = 0; i < GraphTraceLen - window; ++i) {
+               int sum = 0;
+               for (int j = 0; j < window; ++j) {
+                       sum += (GraphBuffer[j]*GraphBuffer[i + j]) / 256;
+               }
+               CorrelBuffer[i] = sum;
+               if (sum >= maxSum-100 && sum <= maxSum+100){
+                       //another max
+                       Correlation = i-lastMax;
+                       lastMax = i;
+                       if (sum > maxSum) maxSum = sum;
+               } else if (sum > maxSum){
+                       maxSum=sum;
+                       lastMax = i;
+               }
+       }
+       if (Correlation==0){
+               //try again with wider margin
+               for (int i = 0; i < GraphTraceLen - window; i++){
+                       if (CorrelBuffer[i] >= maxSum-(maxSum*0.05) && CorrelBuffer[i] <= maxSum+(maxSum*0.05)){
+                               //another max
+                               Correlation = i-lastMax;
+                               lastMax = i;
+                               //if (CorrelBuffer[i] > maxSum) maxSum = sum;
+                       }
+               }
+       }
+       if (verbose && Correlation > 0) PrintAndLog("Possible Correlation: %d samples",Correlation);
+
+       if (SaveGrph){
+               GraphTraceLen = GraphTraceLen - window;
+               memcpy(GraphBuffer, CorrelBuffer, GraphTraceLen * sizeof (int));
+               RepaintGraphWindow();  
+       }
+       return Correlation;
 }
 
 int usage_data_autocorr(void)
 {
-  //print help
-  PrintAndLog("Usage: data autocorr [window] [g]");
-  PrintAndLog("Options:        ");
-  PrintAndLog("       h              This help");
-  PrintAndLog("       [window]       window length for correlation - default = 4000");
-  PrintAndLog("       g              save back to GraphBuffer (overwrite)");
-  return 0;
+       //print help
+       PrintAndLog("Usage: data autocorr [window] [g]");
+       PrintAndLog("Options:        ");
+       PrintAndLog("       h              This help");
+       PrintAndLog("       [window]       window length for correlation - default = 4000");
+       PrintAndLog("       g              save back to GraphBuffer (overwrite)");
+       return 0;
 }
 
 int CmdAutoCorr(const char *Cmd)
 {
-  char cmdp = param_getchar(Cmd, 0);
-  if (cmdp == 'h' || cmdp == 'H') 
-    return usage_data_autocorr();
-  int window = 4000; //set default
-  char grph=0;
-  bool updateGrph = FALSE;
-  sscanf(Cmd, "%i %c", &window, &grph);
-
-  if (window >= GraphTraceLen) {
-    PrintAndLog("window must be smaller than trace (%d samples)",
-      GraphTraceLen);
-    return 0;
-  }
-  if (grph == 'g') updateGrph=TRUE;
-  return AutoCorrelate(window, updateGrph, TRUE);
+       char cmdp = param_getchar(Cmd, 0);
+       if (cmdp == 'h' || cmdp == 'H') 
+               return usage_data_autocorr();
+       int window = 4000; //set default
+       char grph=0;
+       bool updateGrph = FALSE;
+       sscanf(Cmd, "%i %c", &window, &grph);
+
+       if (window >= GraphTraceLen) {
+               PrintAndLog("window must be smaller than trace (%d samples)",
+                       GraphTraceLen);
+               return 0;
+       }
+       if (grph == 'g') updateGrph=TRUE;
+       return AutoCorrelate(window, updateGrph, TRUE);
 }
 
 int CmdBitsamples(const char *Cmd)
 {
-  int cnt = 0;
-  uint8_t got[12288];
+       int cnt = 0;
+       uint8_t got[12288];
 
-  GetFromBigBuf(got,sizeof(got),0);
-  WaitForResponse(CMD_ACK,NULL);
+       GetFromBigBuf(got,sizeof(got),0);
+       WaitForResponse(CMD_ACK,NULL);
 
-    for (int j = 0; j < sizeof(got); j++) {
-      for (int k = 0; k < 8; k++) {
-        if(got[j] & (1 << (7 - k))) {
-          GraphBuffer[cnt++] = 1;
-        } else {
-          GraphBuffer[cnt++] = 0;
-        }
-      }
-  }
-  GraphTraceLen = cnt;
-  RepaintGraphWindow();
-  return 0;
+               for (int j = 0; j < sizeof(got); j++) {
+                       for (int k = 0; k < 8; k++) {
+                               if(got[j] & (1 << (7 - k))) {
+                                       GraphBuffer[cnt++] = 1;
+                               } else {
+                                       GraphBuffer[cnt++] = 0;
+                               }
+                       }
+       }
+       GraphTraceLen = cnt;
+       RepaintGraphWindow();
+       return 0;
 }
 
 /*
@@ -937,78 +936,78 @@ int CmdBitsamples(const char *Cmd)
  */
 int CmdBitstream(const char *Cmd)
 {
-  int i, j;
-  int bit;
-  int gtl;
-  int clock;
-  int low = 0;
-  int high = 0;
-  int hithigh, hitlow, first;
-
-  /* Detect high and lows and clock */
-  for (i = 0; i < GraphTraceLen; ++i)
-  {
-    if (GraphBuffer[i] > high)
-      high = GraphBuffer[i];
-    else if (GraphBuffer[i] < low)
-      low = GraphBuffer[i];
-  }
-
-  /* Get our clock */
-  clock = GetAskClock(Cmd, high, 1);
-  gtl = ClearGraph(0);
-
-  bit = 0;
-  for (i = 0; i < (int)(gtl / clock); ++i)
-  {
-    hithigh = 0;
-    hitlow = 0;
-    first = 1;
-    /* Find out if we hit both high and low peaks */
-    for (j = 0; j < clock; ++j)
-    {
-      if (GraphBuffer[(i * clock) + j] == high)
-        hithigh = 1;
-      else if (GraphBuffer[(i * clock) + j] == low)
-        hitlow = 1;
-      /* it doesn't count if it's the first part of our read
-         because it's really just trailing from the last sequence */
-      if (first && (hithigh || hitlow))
-        hithigh = hitlow = 0;
-      else
-        first = 0;
-
-      if (hithigh && hitlow)
-        break;
-    }
-
-    /* If we didn't hit both high and low peaks, we had a bit transition */
-    if (!hithigh || !hitlow)
-      bit ^= 1;
-
-    AppendGraph(0, clock, bit);
-  }
-
-  RepaintGraphWindow();
-  return 0;
+       int i, j;
+       int bit;
+       int gtl;
+       int clock;
+       int low = 0;
+       int high = 0;
+       int hithigh, hitlow, first;
+
+       /* Detect high and lows and clock */
+       for (i = 0; i < GraphTraceLen; ++i)
+       {
+               if (GraphBuffer[i] > high)
+                       high = GraphBuffer[i];
+               else if (GraphBuffer[i] < low)
+                       low = GraphBuffer[i];
+       }
+
+       /* Get our clock */
+       clock = GetAskClock(Cmd, high, 1);
+       gtl = ClearGraph(0);
+
+       bit = 0;
+       for (i = 0; i < (int)(gtl / clock); ++i)
+       {
+               hithigh = 0;
+               hitlow = 0;
+               first = 1;
+               /* Find out if we hit both high and low peaks */
+               for (j = 0; j < clock; ++j)
+               {
+                       if (GraphBuffer[(i * clock) + j] == high)
+                               hithigh = 1;
+                       else if (GraphBuffer[(i * clock) + j] == low)
+                               hitlow = 1;
+                       /* it doesn't count if it's the first part of our read
+                                because it's really just trailing from the last sequence */
+                       if (first && (hithigh || hitlow))
+                               hithigh = hitlow = 0;
+                       else
+                               first = 0;
+
+                       if (hithigh && hitlow)
+                               break;
+               }
+
+               /* If we didn't hit both high and low peaks, we had a bit transition */
+               if (!hithigh || !hitlow)
+                       bit ^= 1;
+
+               AppendGraph(0, clock, bit);
+       }
+
+       RepaintGraphWindow();
+       return 0;
 }
 
 int CmdBuffClear(const char *Cmd)
 {
-  UsbCommand c = {CMD_BUFF_CLEAR};
-  SendCommand(&c);
-  ClearGraph(true);
-  return 0;
+       UsbCommand c = {CMD_BUFF_CLEAR};
+       SendCommand(&c);
+       ClearGraph(true);
+       return 0;
 }
 
 int CmdDec(const char *Cmd)
 {
-  for (int i = 0; i < (GraphTraceLen / 2); ++i)
-    GraphBuffer[i] = GraphBuffer[i * 2];
-  GraphTraceLen /= 2;
-  PrintAndLog("decimated by 2");
-  RepaintGraphWindow();
-  return 0;
+       for (int i = 0; i < (GraphTraceLen / 2); ++i)
+               GraphBuffer[i] = GraphBuffer[i * 2];
+       GraphTraceLen /= 2;
+       PrintAndLog("decimated by 2");
+       RepaintGraphWindow();
+       return 0;
 }
 /**
  * Undecimate - I'd call it 'interpolate', but we'll save that
@@ -1053,20 +1052,20 @@ int CmdUndec(const char *Cmd)
 int CmdGraphShiftZero(const char *Cmd)
 {
 
-  int shift=0;
-  //set options from parameters entered with the command
-  sscanf(Cmd, "%i", &shift);
-  int shiftedVal=0;
-  for(int i = 0; i<GraphTraceLen; i++){
-    shiftedVal=GraphBuffer[i]+shift;
-    if (shiftedVal>127) 
-      shiftedVal=127;
-    else if (shiftedVal<-127) 
-      shiftedVal=-127;
-    GraphBuffer[i]= shiftedVal;
-  }
-  CmdNorm("");
-  return 0;
+       int shift=0;
+       //set options from parameters entered with the command
+       sscanf(Cmd, "%i", &shift);
+       int shiftedVal=0;
+       for(int i = 0; i<GraphTraceLen; i++){
+               shiftedVal=GraphBuffer[i]+shift;
+               if (shiftedVal>127) 
+                       shiftedVal=127;
+               else if (shiftedVal<-127) 
+                       shiftedVal=-127;
+               GraphBuffer[i]= shiftedVal;
+       }
+       CmdNorm("");
+       return 0;
 }
 
 //by marshmellow
@@ -1075,27 +1074,27 @@ int CmdGraphShiftZero(const char *Cmd)
 //takes a threshold length which is the measured length between two samples then determines an edge
 int CmdAskEdgeDetect(const char *Cmd)
 {
-  int thresLen = 25;
-  sscanf(Cmd, "%i", &thresLen); 
-  int shift = 127;
-  int shiftedVal=0;
-  for(int i = 1; i<GraphTraceLen; i++){
-    if (GraphBuffer[i]-GraphBuffer[i-1]>=thresLen) //large jump up
-      shift=127;
-    else if(GraphBuffer[i]-GraphBuffer[i-1]<=-1*thresLen) //large jump down
-      shift=-127;
-
-    shiftedVal=GraphBuffer[i]+shift;
-
-    if (shiftedVal>127) 
-      shiftedVal=127;
-    else if (shiftedVal<-127) 
-      shiftedVal=-127;
-    GraphBuffer[i-1] = shiftedVal;
-  }
-  RepaintGraphWindow();
-  //CmdNorm("");
-  return 0;
+       int thresLen = 25;
+       sscanf(Cmd, "%i", &thresLen); 
+       int shift = 127;
+       int shiftedVal=0;
+       for(int i = 1; i<GraphTraceLen; i++){
+               if (GraphBuffer[i]-GraphBuffer[i-1]>=thresLen) //large jump up
+                       shift=127;
+               else if(GraphBuffer[i]-GraphBuffer[i-1]<=-1*thresLen) //large jump down
+                       shift=-127;
+
+               shiftedVal=GraphBuffer[i]+shift;
+
+               if (shiftedVal>127) 
+                       shiftedVal=127;
+               else if (shiftedVal<-127) 
+                       shiftedVal=-127;
+               GraphBuffer[i-1] = shiftedVal;
+       }
+       RepaintGraphWindow();
+       //CmdNorm("");
+       return 0;
 }
 
 /* Print our clock rate */
@@ -1135,61 +1134,61 @@ int CmdDetectClockRate(const char *Cmd)
 //defaults: clock = 50, invert=1, fchigh=10, fclow=8 (RF/10 RF/8 (fsk2a))
 int FSKrawDemod(const char *Cmd, bool verbose)
 {
-  //raw fsk demod  no manchester decoding no start bit finding just get binary from wave
-  //set defaults
-  int rfLen = 0;
-  int invert = 0;
-  int fchigh = 0;
-  int fclow = 0;
-
-  //set options from parameters entered with the command
-  sscanf(Cmd, "%i %i %i %i", &rfLen, &invert, &fchigh, &fclow);
-
-  if (strlen(Cmd)>0 && strlen(Cmd)<=2) {
-     if (rfLen==1){
-      invert=1;   //if invert option only is used
-      rfLen = 0;
-     }
-  }
-
-  uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
-  size_t BitLen = getFromGraphBuf(BitStream);
-  if (BitLen==0) return 0;
-  //get field clock lengths
-  uint16_t fcs=0;
-  uint8_t dummy=0;
-  if (fchigh==0 || fclow == 0){
-    fcs = countFC(BitStream, BitLen, &dummy);
-    if (fcs==0){
-      fchigh=10;
-      fclow=8;
-    }else{
-      fchigh = (fcs >> 8) & 0xFF;
-      fclow = fcs & 0xFF;
-    }
-  }
-  //get bit clock length
-  if (rfLen==0){
-    rfLen = detectFSKClk(BitStream, BitLen, fchigh, fclow);
-    if (rfLen == 0) rfLen = 50;
-  }
-  if (verbose) PrintAndLog("Args invert: %d - Clock:%d - fchigh:%d - fclow: %d",invert,rfLen,fchigh, fclow);
-  int size = fskdemod(BitStream,BitLen,(uint8_t)rfLen,(uint8_t)invert,(uint8_t)fchigh,(uint8_t)fclow);
-  if (size>0){
-    setDemodBuf(BitStream,size,0);
-
-    // Now output the bitstream to the scrollback by line of 16 bits
-    if(size > (8*32)+2) size = (8*32)+2; //only output a max of 8 blocks of 32 bits  most tags will have full bit stream inside that sample size
-    if (verbose) {
-      PrintAndLog("FSK decoded bitstream:");
-      printBitStream(BitStream,size);
-    }
-
-    return 1;
-  } else{
-    if (verbose) PrintAndLog("no FSK data found");
-  }
-  return 0;
+       //raw fsk demod  no manchester decoding no start bit finding just get binary from wave
+       //set defaults
+       int rfLen = 0;
+       int invert = 0;
+       int fchigh = 0;
+       int fclow = 0;
+
+       //set options from parameters entered with the command
+       sscanf(Cmd, "%i %i %i %i", &rfLen, &invert, &fchigh, &fclow);
+
+       if (strlen(Cmd)>0 && strlen(Cmd)<=2) {
+                if (rfLen==1){
+                       invert=1;   //if invert option only is used
+                       rfLen = 0;
+                }
+       }
+
+       uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
+       size_t BitLen = getFromGraphBuf(BitStream);
+       if (BitLen==0) return 0;
+       //get field clock lengths
+       uint16_t fcs=0;
+       uint8_t dummy=0;
+       if (fchigh==0 || fclow == 0){
+               fcs = countFC(BitStream, BitLen, &dummy);
+               if (fcs==0){
+                       fchigh=10;
+                       fclow=8;
+               }else{
+                       fchigh = (fcs >> 8) & 0xFF;
+                       fclow = fcs & 0xFF;
+               }
+       }
+       //get bit clock length
+       if (rfLen==0){
+               rfLen = detectFSKClk(BitStream, BitLen, fchigh, fclow);
+               if (rfLen == 0) rfLen = 50;
+       }
+       if (verbose) PrintAndLog("Args invert: %d - Clock:%d - fchigh:%d - fclow: %d",invert,rfLen,fchigh, fclow);
+       int size = fskdemod(BitStream,BitLen,(uint8_t)rfLen,(uint8_t)invert,(uint8_t)fchigh,(uint8_t)fclow);
+       if (size>0){
+               setDemodBuf(BitStream,size,0);
+
+               // Now output the bitstream to the scrollback by line of 16 bits
+               if(size > (8*32)+2) size = (8*32)+2; //only output a max of 8 blocks of 32 bits  most tags will have full bit stream inside that sample size
+               if (verbose) {
+                       PrintAndLog("FSK decoded bitstream:");
+                       printBitStream(BitStream,size);
+               }
+
+               return 1;
+       } else{
+               if (verbose) PrintAndLog("no FSK data found");
+       }
+       return 0;
 }
 
 //by marshmellow
@@ -1198,24 +1197,24 @@ int FSKrawDemod(const char *Cmd, bool verbose)
 //defaults: clock = 50, invert=1, fchigh=10, fclow=8 (RF/10 RF/8 (fsk2a))
 int CmdFSKrawdemod(const char *Cmd)
 {
-  char cmdp = param_getchar(Cmd, 0);
-  if (strlen(Cmd) > 10 || cmdp == 'h' || cmdp == 'H') {
-    PrintAndLog("Usage:  data rawdemod fs [clock] <invert> [fchigh] [fclow]");
-    PrintAndLog("     [set clock as integer] optional, omit for autodetect.");
-    PrintAndLog("     <invert>, 1 for invert output, can be used even if the clock is omitted");
-    PrintAndLog("     [fchigh], larger field clock length, omit for autodetect");
-    PrintAndLog("     [fclow], small field clock length, omit for autodetect");
-    PrintAndLog("");
-    PrintAndLog("    sample: data rawdemod fs           = demod an fsk tag from GraphBuffer using autodetect");
-    PrintAndLog("          : data rawdemod fs 32        = demod an fsk tag from GraphBuffer using a clock of RF/32, autodetect fc");
-    PrintAndLog("          : data rawdemod fs 1         = demod an fsk tag from GraphBuffer using autodetect, invert output");   
-    PrintAndLog("          : data rawdemod fs 32 1      = demod an fsk tag from GraphBuffer using a clock of RF/32, invert output, autodetect fc");
-    PrintAndLog("          : data rawdemod fs 64 0 8 5  = demod an fsk1 RF/64 tag from GraphBuffer");
-    PrintAndLog("          : data rawdemod fs 50 0 10 8 = demod an fsk2 RF/50 tag from GraphBuffer");
-    PrintAndLog("          : data rawdemod fs 50 1 10 8 = demod an fsk2a RF/50 tag from GraphBuffer");
-    return 0;
-  }
-  return FSKrawDemod(Cmd, TRUE);
+       char cmdp = param_getchar(Cmd, 0);
+       if (strlen(Cmd) > 10 || cmdp == 'h' || cmdp == 'H') {
+               PrintAndLog("Usage:  data rawdemod fs [clock] <invert> [fchigh] [fclow]");
+               PrintAndLog("     [set clock as integer] optional, omit for autodetect.");
+               PrintAndLog("     <invert>, 1 for invert output, can be used even if the clock is omitted");
+               PrintAndLog("     [fchigh], larger field clock length, omit for autodetect");
+               PrintAndLog("     [fclow], small field clock length, omit for autodetect");
+               PrintAndLog("");
+               PrintAndLog("    sample: data rawdemod fs           = demod an fsk tag from GraphBuffer using autodetect");
+               PrintAndLog("          : data rawdemod fs 32        = demod an fsk tag from GraphBuffer using a clock of RF/32, autodetect fc");
+               PrintAndLog("          : data rawdemod fs 1         = demod an fsk tag from GraphBuffer using autodetect, invert output");   
+               PrintAndLog("          : data rawdemod fs 32 1      = demod an fsk tag from GraphBuffer using a clock of RF/32, invert output, autodetect fc");
+               PrintAndLog("          : data rawdemod fs 64 0 8 5  = demod an fsk1 RF/64 tag from GraphBuffer");
+               PrintAndLog("          : data rawdemod fs 50 0 10 8 = demod an fsk2 RF/50 tag from GraphBuffer");
+               PrintAndLog("          : data rawdemod fs 50 1 10 8 = demod an fsk2a RF/50 tag from GraphBuffer");
+               return 0;
+       }
+       return FSKrawDemod(Cmd, TRUE);
 }
 
 //by marshmellow (based on existing demod + holiman's refactor)
@@ -1223,85 +1222,85 @@ int CmdFSKrawdemod(const char *Cmd)
 //print full HID Prox ID and some bit format details if found
 int CmdFSKdemodHID(const char *Cmd)
 {
-  //raw fsk demod no manchester decoding no start bit finding just get binary from wave
-  uint32_t hi2=0, hi=0, lo=0;
-
-  uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
-  size_t BitLen = getFromGraphBuf(BitStream);
-  if (BitLen==0) return 0;
-  //get binary from fsk wave
-  int idx = HIDdemodFSK(BitStream,&BitLen,&hi2,&hi,&lo);
-  if (idx<0){
-    if (g_debugMode){
-      if (idx==-1){
-        PrintAndLog("DEBUG: Just Noise Detected");
-      } else if (idx == -2) {
-        PrintAndLog("DEBUG: Error demoding fsk");
-      } else if (idx == -3) {
-        PrintAndLog("DEBUG: Preamble not found");
-      } else if (idx == -4) {
-        PrintAndLog("DEBUG: Error in Manchester data, SIZE: %d", BitLen);
-      } else {
-        PrintAndLog("DEBUG: Error demoding fsk %d", idx);
-      }   
-    }
-    return 0;
-  }
-  if (hi2==0 && hi==0 && lo==0) {
-    if (g_debugMode) PrintAndLog("DEBUG: Error - no values found");
-    return 0;
-  }
-  if (hi2 != 0){ //extra large HID tags
-    PrintAndLog("HID Prox TAG ID: %x%08x%08x (%d)",
-       (unsigned int) hi2, (unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF);
-  }
-  else {  //standard HID tags <38 bits
-    uint8_t fmtLen = 0;
-    uint32_t fc = 0;
-    uint32_t cardnum = 0;
-    if (((hi>>5)&1)==1){//if bit 38 is set then < 37 bit format is used
-      uint32_t lo2=0;
-      lo2=(((hi & 31) << 12) | (lo>>20)); //get bits 21-37 to check for format len bit
-      uint8_t idx3 = 1;
-      while(lo2>1){ //find last bit set to 1 (format len bit)
-        lo2=lo2>>1;
-        idx3++;
-      }
-      fmtLen =idx3+19;
-      fc =0;
-      cardnum=0;
-      if(fmtLen==26){
-        cardnum = (lo>>1)&0xFFFF;
-        fc = (lo>>17)&0xFF;
-      }
-      if(fmtLen==34){
-        cardnum = (lo>>1)&0xFFFF;
-        fc= ((hi&1)<<15)|(lo>>17);
-      }
-      if(fmtLen==35){
-        cardnum = (lo>>1)&0xFFFFF;
-        fc = ((hi&1)<<11)|(lo>>21);
-      }
-    }
-    else { //if bit 38 is not set then 37 bit format is used
-      fmtLen = 37;
-      fc = 0;
-      cardnum = 0;
-      if(fmtLen == 37){
-        cardnum = (lo>>1)&0x7FFFF;
-        fc = ((hi&0xF)<<12)|(lo>>20);
-      }
-    }
-    PrintAndLog("HID Prox TAG ID: %x%08x (%d) - Format Len: %dbit - FC: %d - Card: %d",
-      (unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF,
-      (unsigned int) fmtLen, (unsigned int) fc, (unsigned int) cardnum);
-  }
-  setDemodBuf(BitStream,BitLen,idx);
-  if (g_debugMode){ 
-    PrintAndLog("DEBUG: idx: %d, Len: %d, Printing Demod Buffer:", idx, BitLen);
-    printDemodBuff();
-  }
-  return 1;
+       //raw fsk demod no manchester decoding no start bit finding just get binary from wave
+       uint32_t hi2=0, hi=0, lo=0;
+
+       uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
+       size_t BitLen = getFromGraphBuf(BitStream);
+       if (BitLen==0) return 0;
+       //get binary from fsk wave
+       int idx = HIDdemodFSK(BitStream,&BitLen,&hi2,&hi,&lo);
+       if (idx<0){
+               if (g_debugMode){
+                       if (idx==-1){
+                               PrintAndLog("DEBUG: Just Noise Detected");
+                       } else if (idx == -2) {
+                               PrintAndLog("DEBUG: Error demoding fsk");
+                       } else if (idx == -3) {
+                               PrintAndLog("DEBUG: Preamble not found");
+                       } else if (idx == -4) {
+                               PrintAndLog("DEBUG: Error in Manchester data, SIZE: %d", BitLen);
+                       } else {
+                               PrintAndLog("DEBUG: Error demoding fsk %d", idx);
+                       }   
+               }
+               return 0;
+       }
+       if (hi2==0 && hi==0 && lo==0) {
+               if (g_debugMode) PrintAndLog("DEBUG: Error - no values found");
+               return 0;
+       }
+       if (hi2 != 0){ //extra large HID tags
+               PrintAndLog("HID Prox TAG ID: %x%08x%08x (%d)",
+                        (unsigned int) hi2, (unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF);
+       }
+       else {  //standard HID tags <38 bits
+               uint8_t fmtLen = 0;
+               uint32_t fc = 0;
+               uint32_t cardnum = 0;
+               if (((hi>>5)&1)==1){//if bit 38 is set then < 37 bit format is used
+                       uint32_t lo2=0;
+                       lo2=(((hi & 31) << 12) | (lo>>20)); //get bits 21-37 to check for format len bit
+                       uint8_t idx3 = 1;
+                       while(lo2>1){ //find last bit set to 1 (format len bit)
+                               lo2=lo2>>1;
+                               idx3++;
+                       }
+                       fmtLen =idx3+19;
+                       fc =0;
+                       cardnum=0;
+                       if(fmtLen==26){
+                               cardnum = (lo>>1)&0xFFFF;
+                               fc = (lo>>17)&0xFF;
+                       }
+                       if(fmtLen==34){
+                               cardnum = (lo>>1)&0xFFFF;
+                               fc= ((hi&1)<<15)|(lo>>17);
+                       }
+                       if(fmtLen==35){
+                               cardnum = (lo>>1)&0xFFFFF;
+                               fc = ((hi&1)<<11)|(lo>>21);
+                       }
+               }
+               else { //if bit 38 is not set then 37 bit format is used
+                       fmtLen = 37;
+                       fc = 0;
+                       cardnum = 0;
+                       if(fmtLen == 37){
+                               cardnum = (lo>>1)&0x7FFFF;
+                               fc = ((hi&0xF)<<12)|(lo>>20);
+                       }
+               }
+               PrintAndLog("HID Prox TAG ID: %x%08x (%d) - Format Len: %dbit - FC: %d - Card: %d",
+                       (unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF,
+                       (unsigned int) fmtLen, (unsigned int) fc, (unsigned int) cardnum);
+       }
+       setDemodBuf(BitStream,BitLen,idx);
+       if (g_debugMode){ 
+               PrintAndLog("DEBUG: idx: %d, Len: %d, Printing Demod Buffer:", idx, BitLen);
+               printDemodBuff();
+       }
+       return 1;
 }
 
 //by marshmellow
@@ -1309,48 +1308,48 @@ int CmdFSKdemodHID(const char *Cmd)
 //print full Paradox Prox ID and some bit format details if found
 int CmdFSKdemodParadox(const char *Cmd)
 {
-  //raw fsk demod no manchester decoding no start bit finding just get binary from wave
-  uint32_t hi2=0, hi=0, lo=0;
-
-  uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
-  size_t BitLen = getFromGraphBuf(BitStream);
-  if (BitLen==0) return 0;
-  //get binary from fsk wave
-  int idx = ParadoxdemodFSK(BitStream,&BitLen,&hi2,&hi,&lo);
-  if (idx<0){
-    if (g_debugMode){
-      if (idx==-1){
-        PrintAndLog("DEBUG: Just Noise Detected");     
-      } else if (idx == -2) {
-        PrintAndLog("DEBUG: Error demoding fsk");
-      } else if (idx == -3) {
-        PrintAndLog("DEBUG: Preamble not found");
-      } else if (idx == -4) {
-        PrintAndLog("DEBUG: Error in Manchester data");
-      } else {
-        PrintAndLog("DEBUG: Error demoding fsk %d", idx);
-      }
-    }
-    return 0;
-  }
-  if (hi2==0 && hi==0 && lo==0){
-    if (g_debugMode) PrintAndLog("DEBUG: Error - no value found");
-    return 0;
-  }
-  uint32_t fc = ((hi & 0x3)<<6) | (lo>>26);
-  uint32_t cardnum = (lo>>10)&0xFFFF;
-  uint32_t rawLo = bytebits_to_byte(BitStream+idx+64,32);
-  uint32_t rawHi = bytebits_to_byte(BitStream+idx+32,32);
-  uint32_t rawHi2 = bytebits_to_byte(BitStream+idx,32);
-
-  PrintAndLog("Paradox TAG ID: %x%08x - FC: %d - Card: %d - Checksum: %02x - RAW: %08x%08x%08x",
-    hi>>10, (hi & 0x3)<<26 | (lo>>10), fc, cardnum, (lo>>2) & 0xFF, rawHi2, rawHi, rawLo);
-  setDemodBuf(BitStream,BitLen,idx);
-  if (g_debugMode){ 
-    PrintAndLog("DEBUG: idx: %d, len: %d, Printing Demod Buffer:", idx, BitLen);
-    printDemodBuff();
-  }
-  return 1;
+       //raw fsk demod no manchester decoding no start bit finding just get binary from wave
+       uint32_t hi2=0, hi=0, lo=0;
+
+       uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
+       size_t BitLen = getFromGraphBuf(BitStream);
+       if (BitLen==0) return 0;
+       //get binary from fsk wave
+       int idx = ParadoxdemodFSK(BitStream,&BitLen,&hi2,&hi,&lo);
+       if (idx<0){
+               if (g_debugMode){
+                       if (idx==-1){
+                               PrintAndLog("DEBUG: Just Noise Detected");     
+                       } else if (idx == -2) {
+                               PrintAndLog("DEBUG: Error demoding fsk");
+                       } else if (idx == -3) {
+                               PrintAndLog("DEBUG: Preamble not found");
+                       } else if (idx == -4) {
+                               PrintAndLog("DEBUG: Error in Manchester data");
+                       } else {
+                               PrintAndLog("DEBUG: Error demoding fsk %d", idx);
+                       }
+               }
+               return 0;
+       }
+       if (hi2==0 && hi==0 && lo==0){
+               if (g_debugMode) PrintAndLog("DEBUG: Error - no value found");
+               return 0;
+       }
+       uint32_t fc = ((hi & 0x3)<<6) | (lo>>26);
+       uint32_t cardnum = (lo>>10)&0xFFFF;
+       uint32_t rawLo = bytebits_to_byte(BitStream+idx+64,32);
+       uint32_t rawHi = bytebits_to_byte(BitStream+idx+32,32);
+       uint32_t rawHi2 = bytebits_to_byte(BitStream+idx,32);
+
+       PrintAndLog("Paradox TAG ID: %x%08x - FC: %d - Card: %d - Checksum: %02x - RAW: %08x%08x%08x",
+               hi>>10, (hi & 0x3)<<26 | (lo>>10), fc, cardnum, (lo>>2) & 0xFF, rawHi2, rawHi, rawLo);
+       setDemodBuf(BitStream,BitLen,idx);
+       if (g_debugMode){ 
+               PrintAndLog("DEBUG: idx: %d, len: %d, Printing Demod Buffer:", idx, BitLen);
+               printDemodBuff();
+       }
+       return 1;
 }
 
 //by marshmellow
@@ -1358,90 +1357,90 @@ int CmdFSKdemodParadox(const char *Cmd)
 //print ioprox ID and some format details
 int CmdFSKdemodIO(const char *Cmd)
 {
-  //raw fsk demod no manchester decoding no start bit finding just get binary from wave
-  //set defaults
-  int idx=0;
-  //something in graphbuffer?
-  if (GraphTraceLen < 65) {
-    if (g_debugMode)PrintAndLog("DEBUG: not enough samples in GraphBuffer");
-    return 0;
-  }
-  uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
-  size_t BitLen = getFromGraphBuf(BitStream);
-  if (BitLen==0) return 0;
-
-  //get binary from fsk wave
-  idx = IOdemodFSK(BitStream,BitLen);
-  if (idx<0){
-    if (g_debugMode){
-      if (idx==-1){
-        PrintAndLog("DEBUG: Just Noise Detected");     
-      } else if (idx == -2) {
-        PrintAndLog("DEBUG: not enough samples");
-      } else if (idx == -3) {
-        PrintAndLog("DEBUG: error during fskdemod");        
-      } else if (idx == -4) {
-        PrintAndLog("DEBUG: Preamble not found");
-      } else if (idx == -5) {
-        PrintAndLog("DEBUG: Separator bits not found");
-      } else {
-        PrintAndLog("DEBUG: Error demoding fsk %d", idx);
-      }
-    }
-    return 0;
-  }
-  if (idx==0){
-    if (g_debugMode==1){
-      PrintAndLog("DEBUG: IO Prox Data not found - FSK Bits: %d",BitLen);
-      if (BitLen > 92) printBitStream(BitStream,92);
-    } 
-    return 0;
-  }
-    //Index map
-    //0           10          20          30          40          50          60
-    //|           |           |           |           |           |           |
-    //01234567 8 90123456 7 89012345 6 78901234 5 67890123 4 56789012 3 45678901 23
-    //-----------------------------------------------------------------------------
-    //00000000 0 11110000 1 facility 1 version* 1 code*one 1 code*two 1 ???????? 11
-    //
-    //XSF(version)facility:codeone+codetwo (raw)
-    //Handle the data
-  if (idx+64>BitLen) {
-    if (g_debugMode==1) PrintAndLog("not enough bits found - bitlen: %d",BitLen);
-    return 0;
-  }
-  PrintAndLog("%d%d%d%d%d%d%d%d %d",BitStream[idx],    BitStream[idx+1],  BitStream[idx+2], BitStream[idx+3], BitStream[idx+4], BitStream[idx+5], BitStream[idx+6], BitStream[idx+7], BitStream[idx+8]);
-  PrintAndLog("%d%d%d%d%d%d%d%d %d",BitStream[idx+9],  BitStream[idx+10], BitStream[idx+11],BitStream[idx+12],BitStream[idx+13],BitStream[idx+14],BitStream[idx+15],BitStream[idx+16],BitStream[idx+17]);
-  PrintAndLog("%d%d%d%d%d%d%d%d %d facility",BitStream[idx+18], BitStream[idx+19], BitStream[idx+20],BitStream[idx+21],BitStream[idx+22],BitStream[idx+23],BitStream[idx+24],BitStream[idx+25],BitStream[idx+26]);
-  PrintAndLog("%d%d%d%d%d%d%d%d %d version",BitStream[idx+27], BitStream[idx+28], BitStream[idx+29],BitStream[idx+30],BitStream[idx+31],BitStream[idx+32],BitStream[idx+33],BitStream[idx+34],BitStream[idx+35]);
-  PrintAndLog("%d%d%d%d%d%d%d%d %d code1",BitStream[idx+36], BitStream[idx+37], BitStream[idx+38],BitStream[idx+39],BitStream[idx+40],BitStream[idx+41],BitStream[idx+42],BitStream[idx+43],BitStream[idx+44]);
-  PrintAndLog("%d%d%d%d%d%d%d%d %d code2",BitStream[idx+45], BitStream[idx+46], BitStream[idx+47],BitStream[idx+48],BitStream[idx+49],BitStream[idx+50],BitStream[idx+51],BitStream[idx+52],BitStream[idx+53]);
-  PrintAndLog("%d%d%d%d%d%d%d%d %d%d checksum",BitStream[idx+54],BitStream[idx+55],BitStream[idx+56],BitStream[idx+57],BitStream[idx+58],BitStream[idx+59],BitStream[idx+60],BitStream[idx+61],BitStream[idx+62],BitStream[idx+63]);
-
-  uint32_t code = bytebits_to_byte(BitStream+idx,32);
-  uint32_t code2 = bytebits_to_byte(BitStream+idx+32,32);
-  uint8_t version = bytebits_to_byte(BitStream+idx+27,8); //14,4
-  uint8_t facilitycode = bytebits_to_byte(BitStream+idx+18,8) ;
-  uint16_t number = (bytebits_to_byte(BitStream+idx+36,8)<<8)|(bytebits_to_byte(BitStream+idx+45,8)); //36,9
-  uint8_t crc = bytebits_to_byte(BitStream+idx+54,8);
-  uint16_t calccrc = 0;
-
-  for (uint8_t i=1; i<6; ++i){
-    calccrc += bytebits_to_byte(BitStream+idx+9*i,8);
-    //PrintAndLog("%d", calccrc);
-  }
-  calccrc &= 0xff;
-  calccrc = 0xff - calccrc;
-
-  char *crcStr = (crc == calccrc) ? "crc ok": "!crc";
-
-  PrintAndLog("IO Prox XSF(%02d)%02x:%05d (%08x%08x) [%02x %s]",version,facilitycode,number,code,code2, crc, crcStr);
-  setDemodBuf(BitStream,64,idx);
-  if (g_debugMode){
-    PrintAndLog("DEBUG: idx: %d, Len: %d, Printing demod buffer:",idx,64);
-    printDemodBuff();
-  }
-  return 1;
+       //raw fsk demod no manchester decoding no start bit finding just get binary from wave
+       //set defaults
+       int idx=0;
+       //something in graphbuffer?
+       if (GraphTraceLen < 65) {
+               if (g_debugMode)PrintAndLog("DEBUG: not enough samples in GraphBuffer");
+               return 0;
+       }
+       uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
+       size_t BitLen = getFromGraphBuf(BitStream);
+       if (BitLen==0) return 0;
+
+       //get binary from fsk wave
+       idx = IOdemodFSK(BitStream,BitLen);
+       if (idx<0){
+               if (g_debugMode){
+                       if (idx==-1){
+                               PrintAndLog("DEBUG: Just Noise Detected");     
+                       } else if (idx == -2) {
+                               PrintAndLog("DEBUG: not enough samples");
+                       } else if (idx == -3) {
+                               PrintAndLog("DEBUG: error during fskdemod");        
+                       } else if (idx == -4) {
+                               PrintAndLog("DEBUG: Preamble not found");
+                       } else if (idx == -5) {
+                               PrintAndLog("DEBUG: Separator bits not found");
+                       } else {
+                               PrintAndLog("DEBUG: Error demoding fsk %d", idx);
+                       }
+               }
+               return 0;
+       }
+       if (idx==0){
+               if (g_debugMode==1){
+                       PrintAndLog("DEBUG: IO Prox Data not found - FSK Bits: %d",BitLen);
+                       if (BitLen > 92) printBitStream(BitStream,92);
+               
+               return 0;
+       }
+               //Index map
+               //0           10          20          30          40          50          60
+               //|           |           |           |           |           |           |
+               //01234567 8 90123456 7 89012345 6 78901234 5 67890123 4 56789012 3 45678901 23
+               //-----------------------------------------------------------------------------
+               //00000000 0 11110000 1 facility 1 version* 1 code*one 1 code*two 1 ???????? 11
+               //
+               //XSF(version)facility:codeone+codetwo (raw)
+               //Handle the data
+       if (idx+64>BitLen) {
+               if (g_debugMode==1) PrintAndLog("not enough bits found - bitlen: %d",BitLen);
+               return 0;
+       }
+       PrintAndLog("%d%d%d%d%d%d%d%d %d",BitStream[idx],    BitStream[idx+1],  BitStream[idx+2], BitStream[idx+3], BitStream[idx+4], BitStream[idx+5], BitStream[idx+6], BitStream[idx+7], BitStream[idx+8]);
+       PrintAndLog("%d%d%d%d%d%d%d%d %d",BitStream[idx+9],  BitStream[idx+10], BitStream[idx+11],BitStream[idx+12],BitStream[idx+13],BitStream[idx+14],BitStream[idx+15],BitStream[idx+16],BitStream[idx+17]);
+       PrintAndLog("%d%d%d%d%d%d%d%d %d facility",BitStream[idx+18], BitStream[idx+19], BitStream[idx+20],BitStream[idx+21],BitStream[idx+22],BitStream[idx+23],BitStream[idx+24],BitStream[idx+25],BitStream[idx+26]);
+       PrintAndLog("%d%d%d%d%d%d%d%d %d version",BitStream[idx+27], BitStream[idx+28], BitStream[idx+29],BitStream[idx+30],BitStream[idx+31],BitStream[idx+32],BitStream[idx+33],BitStream[idx+34],BitStream[idx+35]);
+       PrintAndLog("%d%d%d%d%d%d%d%d %d code1",BitStream[idx+36], BitStream[idx+37], BitStream[idx+38],BitStream[idx+39],BitStream[idx+40],BitStream[idx+41],BitStream[idx+42],BitStream[idx+43],BitStream[idx+44]);
+       PrintAndLog("%d%d%d%d%d%d%d%d %d code2",BitStream[idx+45], BitStream[idx+46], BitStream[idx+47],BitStream[idx+48],BitStream[idx+49],BitStream[idx+50],BitStream[idx+51],BitStream[idx+52],BitStream[idx+53]);
+       PrintAndLog("%d%d%d%d%d%d%d%d %d%d checksum",BitStream[idx+54],BitStream[idx+55],BitStream[idx+56],BitStream[idx+57],BitStream[idx+58],BitStream[idx+59],BitStream[idx+60],BitStream[idx+61],BitStream[idx+62],BitStream[idx+63]);
+
+       uint32_t code = bytebits_to_byte(BitStream+idx,32);
+       uint32_t code2 = bytebits_to_byte(BitStream+idx+32,32);
+       uint8_t version = bytebits_to_byte(BitStream+idx+27,8); //14,4
+       uint8_t facilitycode = bytebits_to_byte(BitStream+idx+18,8) ;
+       uint16_t number = (bytebits_to_byte(BitStream+idx+36,8)<<8)|(bytebits_to_byte(BitStream+idx+45,8)); //36,9
+       uint8_t crc = bytebits_to_byte(BitStream+idx+54,8);
+       uint16_t calccrc = 0;
+
+       for (uint8_t i=1; i<6; ++i){
+               calccrc += bytebits_to_byte(BitStream+idx+9*i,8);
+               //PrintAndLog("%d", calccrc);
+       }
+       calccrc &= 0xff;
+       calccrc = 0xff - calccrc;
+
+       char *crcStr = (crc == calccrc) ? "crc ok": "!crc";
+
+       PrintAndLog("IO Prox XSF(%02d)%02x:%05d (%08x%08x) [%02x %s]",version,facilitycode,number,code,code2, crc, crcStr);
+       setDemodBuf(BitStream,64,idx);
+       if (g_debugMode){
+               PrintAndLog("DEBUG: idx: %d, Len: %d, Printing demod buffer:",idx,64);
+               printDemodBuff();
+       }
+       return 1;
 }
 
 //by marshmellow
@@ -1450,100 +1449,100 @@ int CmdFSKdemodIO(const char *Cmd)
 int CmdFSKdemodAWID(const char *Cmd)
 {
 
-  //int verbose=1;
-  //sscanf(Cmd, "%i", &verbose);
-
-  //raw fsk demod no manchester decoding no start bit finding just get binary from wave
-  uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
-  size_t size = getFromGraphBuf(BitStream);
-  if (size==0) return 0;
-
-  //get binary from fsk wave
-  int idx = AWIDdemodFSK(BitStream, &size);
-  if (idx<=0){
-    if (g_debugMode==1){
-      if (idx == -1)
-        PrintAndLog("DEBUG: Error - not enough samples");
-      else if (idx == -2)
-        PrintAndLog("DEBUG: Error - only noise found");
-      else if (idx == -3)
-        PrintAndLog("DEBUG: Error - problem during FSK demod");
-      else if (idx == -4)
-        PrintAndLog("DEBUG: Error - AWID preamble not found");
-      else if (idx == -5)
-        PrintAndLog("DEBUG: Error - Size not correct: %d", size);
-      else
-        PrintAndLog("DEBUG: Error %d",idx);
-    }
-    return 0;
-  }
-
-  // Index map
-  // 0            10            20            30              40            50              60
-  // |            |             |             |               |             |               |
-  // 01234567 890 1 234 5 678 9 012 3 456 7 890 1 234 5 678 9 012 3 456 7 890 1 234 5 678 9 012 3 - to 96
-  // -----------------------------------------------------------------------------
-  // 00000001 000 1 110 1 101 1 011 1 101 1 010 0 000 1 000 1 010 0 001 0 110 1 100 0 000 1 000 1
-  // premable bbb o bbb o bbw o fff o fff o ffc o ccc o ccc o ccc o ccc o ccc o wxx o xxx o xxx o - to 96
-  //          |---26 bit---|    |-----117----||-------------142-------------|
-  // b = format bit len, o = odd parity of last 3 bits
-  // f = facility code, c = card number
-  // w = wiegand parity
-  // (26 bit format shown)
+       //int verbose=1;
+       //sscanf(Cmd, "%i", &verbose);
+
+       //raw fsk demod no manchester decoding no start bit finding just get binary from wave
+       uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
+       size_t size = getFromGraphBuf(BitStream);
+       if (size==0) return 0;
+
+       //get binary from fsk wave
+       int idx = AWIDdemodFSK(BitStream, &size);
+       if (idx<=0){
+               if (g_debugMode==1){
+                       if (idx == -1)
+                               PrintAndLog("DEBUG: Error - not enough samples");
+                       else if (idx == -2)
+                               PrintAndLog("DEBUG: Error - only noise found");
+                       else if (idx == -3)
+                               PrintAndLog("DEBUG: Error - problem during FSK demod");
+                       else if (idx == -4)
+                               PrintAndLog("DEBUG: Error - AWID preamble not found");
+                       else if (idx == -5)
+                               PrintAndLog("DEBUG: Error - Size not correct: %d", size);
+                       else
+                               PrintAndLog("DEBUG: Error %d",idx);
+               }
+               return 0;
+       }
+
+       // Index map
+       // 0            10            20            30              40            50              60
+       // |            |             |             |               |             |               |
+       // 01234567 890 1 234 5 678 9 012 3 456 7 890 1 234 5 678 9 012 3 456 7 890 1 234 5 678 9 012 3 - to 96
+       // -----------------------------------------------------------------------------
+       // 00000001 000 1 110 1 101 1 011 1 101 1 010 0 000 1 000 1 010 0 001 0 110 1 100 0 000 1 000 1
+       // premable bbb o bbb o bbw o fff o fff o ffc o ccc o ccc o ccc o ccc o ccc o wxx o xxx o xxx o - to 96
+       //          |---26 bit---|    |-----117----||-------------142-------------|
+       // b = format bit len, o = odd parity of last 3 bits
+       // f = facility code, c = card number
+       // w = wiegand parity
+       // (26 bit format shown)
  
-  //get raw ID before removing parities
-  uint32_t rawLo = bytebits_to_byte(BitStream+idx+64,32);
-  uint32_t rawHi = bytebits_to_byte(BitStream+idx+32,32);
-  uint32_t rawHi2 = bytebits_to_byte(BitStream+idx,32);
-  setDemodBuf(BitStream,96,idx);
-
-  size = removeParity(BitStream, idx+8, 4, 1, 88);
-  if (size != 66){
-    if (g_debugMode==1) PrintAndLog("DEBUG: Error - at parity check-tag size does not match AWID format");
-    return 0;
-  }
-  // ok valid card found!
-
-  // Index map
-  // 0           10         20        30          40        50        60
-  // |           |          |         |           |         |         |
-  // 01234567 8 90123456 7890123456789012 3 456789012345678901234567890123456
-  // -----------------------------------------------------------------------------
-  // 00011010 1 01110101 0000000010001110 1 000000000000000000000000000000000
-  // bbbbbbbb w ffffffff cccccccccccccccc w xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-  // |26 bit|   |-117--| |-----142------|
-  // b = format bit len, o = odd parity of last 3 bits
-  // f = facility code, c = card number
-  // w = wiegand parity
-  // (26 bit format shown)
-
-  uint32_t fc = 0;
-  uint32_t cardnum = 0;
-  uint32_t code1 = 0;
-  uint32_t code2 = 0;
-  uint8_t fmtLen = bytebits_to_byte(BitStream,8);
-  if (fmtLen==26){
-    fc = bytebits_to_byte(BitStream+9, 8);
-    cardnum = bytebits_to_byte(BitStream+17, 16);
-    code1 = bytebits_to_byte(BitStream+8,fmtLen);
-    PrintAndLog("AWID Found - BitLength: %d, FC: %d, Card: %d - Wiegand: %x, Raw: %08x%08x%08x", fmtLen, fc, cardnum, code1, rawHi2, rawHi, rawLo);
-  } else {
-    cardnum = bytebits_to_byte(BitStream+8+(fmtLen-17), 16);
-    if (fmtLen>32){
-      code1 = bytebits_to_byte(BitStream+8,fmtLen-32);
-      code2 = bytebits_to_byte(BitStream+8+(fmtLen-32),32);
-      PrintAndLog("AWID Found - BitLength: %d -unknown BitLength- (%d) - Wiegand: %x%08x, Raw: %08x%08x%08x", fmtLen, cardnum, code1, code2, rawHi2, rawHi, rawLo);
-    } else{
-      code1 = bytebits_to_byte(BitStream+8,fmtLen);
-      PrintAndLog("AWID Found - BitLength: %d -unknown BitLength- (%d) - Wiegand: %x, Raw: %08x%08x%08x", fmtLen, cardnum, code1, rawHi2, rawHi, rawLo);
-    }
-  }
-  if (g_debugMode){
-    PrintAndLog("DEBUG: idx: %d, Len: %d Printing Demod Buffer:", idx, 96);
-    printDemodBuff();
-  }
-  //todo - convert hi2, hi, lo to demodbuffer for future sim/clone commands
-  return 1;
+       //get raw ID before removing parities
+       uint32_t rawLo = bytebits_to_byte(BitStream+idx+64,32);
+       uint32_t rawHi = bytebits_to_byte(BitStream+idx+32,32);
+       uint32_t rawHi2 = bytebits_to_byte(BitStream+idx,32);
+       setDemodBuf(BitStream,96,idx);
+
+       size = removeParity(BitStream, idx+8, 4, 1, 88);
+       if (size != 66){
+               if (g_debugMode==1) PrintAndLog("DEBUG: Error - at parity check-tag size does not match AWID format");
+               return 0;
+       }
+       // ok valid card found!
+
+       // Index map
+       // 0           10         20        30          40        50        60
+       // |           |          |         |           |         |         |
+       // 01234567 8 90123456 7890123456789012 3 456789012345678901234567890123456
+       // -----------------------------------------------------------------------------
+       // 00011010 1 01110101 0000000010001110 1 000000000000000000000000000000000
+       // bbbbbbbb w ffffffff cccccccccccccccc w xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+       // |26 bit|   |-117--| |-----142------|
+       // b = format bit len, o = odd parity of last 3 bits
+       // f = facility code, c = card number
+       // w = wiegand parity
+       // (26 bit format shown)
+
+       uint32_t fc = 0;
+       uint32_t cardnum = 0;
+       uint32_t code1 = 0;
+       uint32_t code2 = 0;
+       uint8_t fmtLen = bytebits_to_byte(BitStream,8);
+       if (fmtLen==26){
+               fc = bytebits_to_byte(BitStream+9, 8);
+               cardnum = bytebits_to_byte(BitStream+17, 16);
+               code1 = bytebits_to_byte(BitStream+8,fmtLen);
+               PrintAndLog("AWID Found - BitLength: %d, FC: %d, Card: %d - Wiegand: %x, Raw: %08x%08x%08x", fmtLen, fc, cardnum, code1, rawHi2, rawHi, rawLo);
+       } else {
+               cardnum = bytebits_to_byte(BitStream+8+(fmtLen-17), 16);
+               if (fmtLen>32){
+                       code1 = bytebits_to_byte(BitStream+8,fmtLen-32);
+                       code2 = bytebits_to_byte(BitStream+8+(fmtLen-32),32);
+                       PrintAndLog("AWID Found - BitLength: %d -unknown BitLength- (%d) - Wiegand: %x%08x, Raw: %08x%08x%08x", fmtLen, cardnum, code1, code2, rawHi2, rawHi, rawLo);
+               } else{
+                       code1 = bytebits_to_byte(BitStream+8,fmtLen);
+                       PrintAndLog("AWID Found - BitLength: %d -unknown BitLength- (%d) - Wiegand: %x, Raw: %08x%08x%08x", fmtLen, cardnum, code1, rawHi2, rawHi, rawLo);
+               }
+       }
+       if (g_debugMode){
+               PrintAndLog("DEBUG: idx: %d, Len: %d Printing Demod Buffer:", idx, 96);
+               printDemodBuff();
+       }
+       //todo - convert hi2, hi, lo to demodbuffer for future sim/clone commands
+       return 1;
 }
 
 //by marshmellow
@@ -1551,302 +1550,302 @@ int CmdFSKdemodAWID(const char *Cmd)
 //print full Farpointe Data/Pyramid Prox ID and some bit format details if found
 int CmdFSKdemodPyramid(const char *Cmd)
 {
-  //raw fsk demod no manchester decoding no start bit finding just get binary from wave
-  uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
-  size_t size = getFromGraphBuf(BitStream);
-  if (size==0) return 0;
-
-  //get binary from fsk wave
-  int idx = PyramiddemodFSK(BitStream, &size);
-  if (idx < 0){
-    if (g_debugMode==1){
-      if (idx == -5)
-        PrintAndLog("DEBUG: Error - not enough samples");
-      else if (idx == -1)
-        PrintAndLog("DEBUG: Error - only noise found");
-      else if (idx == -2)
-        PrintAndLog("DEBUG: Error - problem during FSK demod");
-      else if (idx == -3)
-        PrintAndLog("DEBUG: Error - Size not correct: %d", size);
-      else if (idx == -4)
-        PrintAndLog("DEBUG: Error - Pyramid preamble not found");
-      else
-        PrintAndLog("DEBUG: Error - idx: %d",idx);
-    }
-    return 0;
-  }
-  // Index map
-  // 0           10          20          30            40          50          60
-  // |           |           |           |             |           |           |
-  // 0123456 7 8901234 5 6789012 3 4567890 1 2345678 9 0123456 7 8901234 5 6789012 3
-  // -----------------------------------------------------------------------------
-  // 0000000 0 0000000 1 0000000 1 0000000 1 0000000 1 0000000 1 0000000 1 0000000 1
-  // premable  xxxxxxx o xxxxxxx o xxxxxxx o xxxxxxx o xxxxxxx o xxxxxxx o xxxxxxx o
-
-  // 64    70            80          90          100         110           120
-  // |     |             |           |           |           |             |
-  // 4567890 1 2345678 9 0123456 7 8901234 5 6789012 3 4567890 1 2345678 9 0123456 7
-  // -----------------------------------------------------------------------------
-  // 0000000 1 0000000 1 0000000 1 0110111 0 0011000 1 0000001 0 0001100 1 1001010 0
-  // xxxxxxx o xxxxxxx o xxxxxxx o xswffff o ffffccc o ccccccc o ccccccw o ppppppp o
-  //                                  |---115---||---------71---------|
-  // s = format start bit, o = odd parity of last 7 bits
-  // f = facility code, c = card number
-  // w = wiegand parity, x = extra space for other formats
-  // p = unknown checksum
-  // (26 bit format shown)
-
-  //get bytes for checksum calc
-  uint8_t checksum = bytebits_to_byte(BitStream + idx + 120, 8);
-  uint8_t csBuff[14] = {0x00};
-  for (uint8_t i = 0; i < 13; i++){
-    csBuff[i] = bytebits_to_byte(BitStream + idx + 16 + (i*8), 8);
-  }
-  //check checksum calc
-  //checksum calc thanks to ICEMAN!!
-  uint32_t checkCS =  CRC8Maxim(csBuff,13);
-
-  //get raw ID before removing parities
-  uint32_t rawLo = bytebits_to_byte(BitStream+idx+96,32);
-  uint32_t rawHi = bytebits_to_byte(BitStream+idx+64,32);
-  uint32_t rawHi2 = bytebits_to_byte(BitStream+idx+32,32);
-  uint32_t rawHi3 = bytebits_to_byte(BitStream+idx,32);
-  setDemodBuf(BitStream,128,idx);
-
-  size = removeParity(BitStream, idx+8, 8, 1, 120);
-  if (size != 105){
-    if (g_debugMode==1) 
-      PrintAndLog("DEBUG: Error at parity check - tag size does not match Pyramid format, SIZE: %d, IDX: %d, hi3: %x",size, idx, rawHi3);
-    return 0;
-  }
-
-  // ok valid card found!
-
-  // Index map
-  // 0         10        20        30        40        50        60        70
-  // |         |         |         |         |         |         |         |
-  // 01234567890123456789012345678901234567890123456789012345678901234567890
-  // -----------------------------------------------------------------------
-  // 00000000000000000000000000000000000000000000000000000000000000000000000
-  // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-
-  // 71         80         90          100
-  // |          |          |           |
-  // 1 2 34567890 1234567890123456 7 8901234
-  // ---------------------------------------
-  // 1 1 01110011 0000000001000110 0 1001010
-  // s w ffffffff cccccccccccccccc w ppppppp
-  //     |--115-| |------71------|
-  // s = format start bit, o = odd parity of last 7 bits
-  // f = facility code, c = card number
-  // w = wiegand parity, x = extra space for other formats
-  // p = unknown checksum
-  // (26 bit format shown)
-
-  //find start bit to get fmtLen
-  int j;
-  for (j=0; j<size; j++){
-    if(BitStream[j]) break;
-  }
-  uint8_t fmtLen = size-j-8;
-  uint32_t fc = 0;
-  uint32_t cardnum = 0;
-  uint32_t code1 = 0;
-  //uint32_t code2 = 0;
-  if (fmtLen==26){
-    fc = bytebits_to_byte(BitStream+73, 8);
-    cardnum = bytebits_to_byte(BitStream+81, 16);
-    code1 = bytebits_to_byte(BitStream+72,fmtLen);
-    PrintAndLog("Pyramid ID Found - BitLength: %d, FC: %d, Card: %d - Wiegand: %x, Raw: %08x%08x%08x%08x", fmtLen, fc, cardnum, code1, rawHi3, rawHi2, rawHi, rawLo);
-  } else if (fmtLen==45){
-    fmtLen=42; //end = 10 bits not 7 like 26 bit fmt
-    fc = bytebits_to_byte(BitStream+53, 10);
-    cardnum = bytebits_to_byte(BitStream+63, 32);
-    PrintAndLog("Pyramid ID Found - BitLength: %d, FC: %d, Card: %d - Raw: %08x%08x%08x%08x", fmtLen, fc, cardnum, rawHi3, rawHi2, rawHi, rawLo);
-  } else {
-    cardnum = bytebits_to_byte(BitStream+81, 16);
-    if (fmtLen>32){
-      //code1 = bytebits_to_byte(BitStream+(size-fmtLen),fmtLen-32);
-      //code2 = bytebits_to_byte(BitStream+(size-32),32);
-      PrintAndLog("Pyramid ID Found - BitLength: %d -unknown BitLength- (%d), Raw: %08x%08x%08x%08x", fmtLen, cardnum, rawHi3, rawHi2, rawHi, rawLo);
-    } else{
-      //code1 = bytebits_to_byte(BitStream+(size-fmtLen),fmtLen);
-      PrintAndLog("Pyramid ID Found - BitLength: %d -unknown BitLength- (%d), Raw: %08x%08x%08x%08x", fmtLen, cardnum, rawHi3, rawHi2, rawHi, rawLo);
-    }
-  }
-  if (checksum == checkCS)
-    PrintAndLog("Checksum %02x passed", checksum);
-  else
-    PrintAndLog("Checksum %02x failed - should have been %02x", checksum, checkCS);
-
-  if (g_debugMode){
-    PrintAndLog("DEBUG: idx: %d, Len: %d, Printing Demod Buffer:", idx, 128);
-    printDemodBuff();
-  }
-  return 1;
+       //raw fsk demod no manchester decoding no start bit finding just get binary from wave
+       uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
+       size_t size = getFromGraphBuf(BitStream);
+       if (size==0) return 0;
+
+       //get binary from fsk wave
+       int idx = PyramiddemodFSK(BitStream, &size);
+       if (idx < 0){
+               if (g_debugMode==1){
+                       if (idx == -5)
+                               PrintAndLog("DEBUG: Error - not enough samples");
+                       else if (idx == -1)
+                               PrintAndLog("DEBUG: Error - only noise found");
+                       else if (idx == -2)
+                               PrintAndLog("DEBUG: Error - problem during FSK demod");
+                       else if (idx == -3)
+                               PrintAndLog("DEBUG: Error - Size not correct: %d", size);
+                       else if (idx == -4)
+                               PrintAndLog("DEBUG: Error - Pyramid preamble not found");
+                       else
+                               PrintAndLog("DEBUG: Error - idx: %d",idx);
+               }
+               return 0;
+       }
+       // Index map
+       // 0           10          20          30            40          50          60
+       // |           |           |           |             |           |           |
+       // 0123456 7 8901234 5 6789012 3 4567890 1 2345678 9 0123456 7 8901234 5 6789012 3
+       // -----------------------------------------------------------------------------
+       // 0000000 0 0000000 1 0000000 1 0000000 1 0000000 1 0000000 1 0000000 1 0000000 1
+       // premable  xxxxxxx o xxxxxxx o xxxxxxx o xxxxxxx o xxxxxxx o xxxxxxx o xxxxxxx o
+
+       // 64    70            80          90          100         110           120
+       // |     |             |           |           |           |             |
+       // 4567890 1 2345678 9 0123456 7 8901234 5 6789012 3 4567890 1 2345678 9 0123456 7
+       // -----------------------------------------------------------------------------
+       // 0000000 1 0000000 1 0000000 1 0110111 0 0011000 1 0000001 0 0001100 1 1001010 0
+       // xxxxxxx o xxxxxxx o xxxxxxx o xswffff o ffffccc o ccccccc o ccccccw o ppppppp o
+       //                                  |---115---||---------71---------|
+       // s = format start bit, o = odd parity of last 7 bits
+       // f = facility code, c = card number
+       // w = wiegand parity, x = extra space for other formats
+       // p = unknown checksum
+       // (26 bit format shown)
+
+       //get bytes for checksum calc
+       uint8_t checksum = bytebits_to_byte(BitStream + idx + 120, 8);
+       uint8_t csBuff[14] = {0x00};
+       for (uint8_t i = 0; i < 13; i++){
+               csBuff[i] = bytebits_to_byte(BitStream + idx + 16 + (i*8), 8);
+       }
+       //check checksum calc
+       //checksum calc thanks to ICEMAN!!
+       uint32_t checkCS =  CRC8Maxim(csBuff,13);
+
+       //get raw ID before removing parities
+       uint32_t rawLo = bytebits_to_byte(BitStream+idx+96,32);
+       uint32_t rawHi = bytebits_to_byte(BitStream+idx+64,32);
+       uint32_t rawHi2 = bytebits_to_byte(BitStream+idx+32,32);
+       uint32_t rawHi3 = bytebits_to_byte(BitStream+idx,32);
+       setDemodBuf(BitStream,128,idx);
+
+       size = removeParity(BitStream, idx+8, 8, 1, 120);
+       if (size != 105){
+               if (g_debugMode==1) 
+                       PrintAndLog("DEBUG: Error at parity check - tag size does not match Pyramid format, SIZE: %d, IDX: %d, hi3: %x",size, idx, rawHi3);
+               return 0;
+       }
+
+       // ok valid card found!
+
+       // Index map
+       // 0         10        20        30        40        50        60        70
+       // |         |         |         |         |         |         |         |
+       // 01234567890123456789012345678901234567890123456789012345678901234567890
+       // -----------------------------------------------------------------------
+       // 00000000000000000000000000000000000000000000000000000000000000000000000
+       // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+
+       // 71         80         90          100
+       // |          |          |           |
+       // 1 2 34567890 1234567890123456 7 8901234
+       // ---------------------------------------
+       // 1 1 01110011 0000000001000110 0 1001010
+       // s w ffffffff cccccccccccccccc w ppppppp
+       //     |--115-| |------71------|
+       // s = format start bit, o = odd parity of last 7 bits
+       // f = facility code, c = card number
+       // w = wiegand parity, x = extra space for other formats
+       // p = unknown checksum
+       // (26 bit format shown)
+
+       //find start bit to get fmtLen
+       int j;
+       for (j=0; j<size; j++){
+               if(BitStream[j]) break;
+       }
+       uint8_t fmtLen = size-j-8;
+       uint32_t fc = 0;
+       uint32_t cardnum = 0;
+       uint32_t code1 = 0;
+       //uint32_t code2 = 0;
+       if (fmtLen==26){
+               fc = bytebits_to_byte(BitStream+73, 8);
+               cardnum = bytebits_to_byte(BitStream+81, 16);
+               code1 = bytebits_to_byte(BitStream+72,fmtLen);
+               PrintAndLog("Pyramid ID Found - BitLength: %d, FC: %d, Card: %d - Wiegand: %x, Raw: %08x%08x%08x%08x", fmtLen, fc, cardnum, code1, rawHi3, rawHi2, rawHi, rawLo);
+       } else if (fmtLen==45){
+               fmtLen=42; //end = 10 bits not 7 like 26 bit fmt
+               fc = bytebits_to_byte(BitStream+53, 10);
+               cardnum = bytebits_to_byte(BitStream+63, 32);
+               PrintAndLog("Pyramid ID Found - BitLength: %d, FC: %d, Card: %d - Raw: %08x%08x%08x%08x", fmtLen, fc, cardnum, rawHi3, rawHi2, rawHi, rawLo);
+       } else {
+               cardnum = bytebits_to_byte(BitStream+81, 16);
+               if (fmtLen>32){
+                       //code1 = bytebits_to_byte(BitStream+(size-fmtLen),fmtLen-32);
+                       //code2 = bytebits_to_byte(BitStream+(size-32),32);
+                       PrintAndLog("Pyramid ID Found - BitLength: %d -unknown BitLength- (%d), Raw: %08x%08x%08x%08x", fmtLen, cardnum, rawHi3, rawHi2, rawHi, rawLo);
+               } else{
+                       //code1 = bytebits_to_byte(BitStream+(size-fmtLen),fmtLen);
+                       PrintAndLog("Pyramid ID Found - BitLength: %d -unknown BitLength- (%d), Raw: %08x%08x%08x%08x", fmtLen, cardnum, rawHi3, rawHi2, rawHi, rawLo);
+               }
+       }
+       if (checksum == checkCS)
+               PrintAndLog("Checksum %02x passed", checksum);
+       else
+               PrintAndLog("Checksum %02x failed - should have been %02x", checksum, checkCS);
+
+       if (g_debugMode){
+               PrintAndLog("DEBUG: idx: %d, Len: %d, Printing Demod Buffer:", idx, 128);
+               printDemodBuff();
+       }
+       return 1;
 }
 
 int CmdFSKdemod(const char *Cmd) //old CmdFSKdemod needs updating
 {
-  static const int LowTone[]  = {
-    1,  1,  1,  1,  1, -1, -1, -1, -1, -1,
-    1,  1,  1,  1,  1, -1, -1, -1, -1, -1,
-    1,  1,  1,  1,  1, -1, -1, -1, -1, -1,
-    1,  1,  1,  1,  1, -1, -1, -1, -1, -1,
-    1,  1,  1,  1,  1, -1, -1, -1, -1, -1
-  };
-  static const int HighTone[] = {
-    1,  1,  1,  1,  1,     -1, -1, -1, -1,
-    1,  1,  1,  1,         -1, -1, -1, -1,
-    1,  1,  1,  1,         -1, -1, -1, -1,
-    1,  1,  1,  1,         -1, -1, -1, -1,
-    1,  1,  1,  1,         -1, -1, -1, -1,
-    1,  1,  1,  1,     -1, -1, -1, -1, -1,
-  };
-
-  int lowLen = sizeof (LowTone) / sizeof (int);
-  int highLen = sizeof (HighTone) / sizeof (int);
-  int convLen = (highLen > lowLen) ? highLen : lowLen;
-  uint32_t hi = 0, lo = 0;
-
-  int i, j;
-  int minMark = 0, maxMark = 0;
-
-  for (i = 0; i < GraphTraceLen - convLen; ++i) {
-    int lowSum = 0, highSum = 0;
-
-    for (j = 0; j < lowLen; ++j) {
-      lowSum += LowTone[j]*GraphBuffer[i+j];
-    }
-    for (j = 0; j < highLen; ++j) {
-      highSum += HighTone[j] * GraphBuffer[i + j];
-    }
-    lowSum = abs(100 * lowSum / lowLen);
-    highSum = abs(100 * highSum / highLen);
-    GraphBuffer[i] = (highSum << 16) | lowSum;
-  }
-
-  for(i = 0; i < GraphTraceLen - convLen - 16; ++i) {
-    int lowTot = 0, highTot = 0;
-    // 10 and 8 are f_s divided by f_l and f_h, rounded
-    for (j = 0; j < 10; ++j) {
-      lowTot += (GraphBuffer[i+j] & 0xffff);
-    }
-    for (j = 0; j < 8; j++) {
-      highTot += (GraphBuffer[i + j] >> 16);
-    }
-    GraphBuffer[i] = lowTot - highTot;
-    if (GraphBuffer[i] > maxMark) maxMark = GraphBuffer[i];
-    if (GraphBuffer[i] < minMark) minMark = GraphBuffer[i];
-  }
-
-  GraphTraceLen -= (convLen + 16);
-  RepaintGraphWindow();
-
-  // Find bit-sync (3 lo followed by 3 high) (HID ONLY)
-  int max = 0, maxPos = 0;
-  for (i = 0; i < 6000; ++i) {
-    int dec = 0;
-    for (j = 0; j < 3 * lowLen; ++j) {
-      dec -= GraphBuffer[i + j];
-    }
-    for (; j < 3 * (lowLen + highLen ); ++j) {
-      dec += GraphBuffer[i + j];
-    }
-    if (dec > max) {
-      max = dec;
-      maxPos = i;
-    }
-  }
-
-  // place start of bit sync marker in graph
-  GraphBuffer[maxPos] = maxMark;
-  GraphBuffer[maxPos + 1] = minMark;
-
-  maxPos += j;
-
-  // place end of bit sync marker in graph
-  GraphBuffer[maxPos] = maxMark;
-  GraphBuffer[maxPos+1] = minMark;
-
-  PrintAndLog("actual data bits start at sample %d", maxPos);
-  PrintAndLog("length %d/%d", highLen, lowLen);
-
-  uint8_t bits[46] = {0x00};
-
-  // find bit pairs and manchester decode them
-  for (i = 0; i < arraylen(bits) - 1; ++i) {
-    int dec = 0;
-    for (j = 0; j < lowLen; ++j) {
-      dec -= GraphBuffer[maxPos + j];
-    }
-    for (; j < lowLen + highLen; ++j) {
-      dec += GraphBuffer[maxPos + j];
-    }
-    maxPos += j;
-    // place inter bit marker in graph
-    GraphBuffer[maxPos] = maxMark;
-    GraphBuffer[maxPos + 1] = minMark;
-
-    // hi and lo form a 64 bit pair
-    hi = (hi << 1) | (lo >> 31);
-    lo = (lo << 1);
-    // store decoded bit as binary (in hi/lo) and text (in bits[])
-    if(dec < 0) {
-      bits[i] = '1';
-      lo |= 1;
-    } else {
-      bits[i] = '0';
-    }
-  }
-  PrintAndLog("bits: '%s'", bits);
-  PrintAndLog("hex: %08x %08x", hi, lo);
-  return 0;
+       static const int LowTone[]  = {
+               1,  1,  1,  1,  1, -1, -1, -1, -1, -1,
+               1,  1,  1,  1,  1, -1, -1, -1, -1, -1,
+               1,  1,  1,  1,  1, -1, -1, -1, -1, -1,
+               1,  1,  1,  1,  1, -1, -1, -1, -1, -1,
+               1,  1,  1,  1,  1, -1, -1, -1, -1, -1
+       };
+       static const int HighTone[] = {
+               1,  1,  1,  1,  1,     -1, -1, -1, -1,
+               1,  1,  1,  1,         -1, -1, -1, -1,
+               1,  1,  1,  1,         -1, -1, -1, -1,
+               1,  1,  1,  1,         -1, -1, -1, -1,
+               1,  1,  1,  1,         -1, -1, -1, -1,
+               1,  1,  1,  1,     -1, -1, -1, -1, -1,
+       };
+
+       int lowLen = sizeof (LowTone) / sizeof (int);
+       int highLen = sizeof (HighTone) / sizeof (int);
+       int convLen = (highLen > lowLen) ? highLen : lowLen;
+       uint32_t hi = 0, lo = 0;
+
+       int i, j;
+       int minMark = 0, maxMark = 0;
+
+       for (i = 0; i < GraphTraceLen - convLen; ++i) {
+               int lowSum = 0, highSum = 0;
+
+               for (j = 0; j < lowLen; ++j) {
+                       lowSum += LowTone[j]*GraphBuffer[i+j];
+               }
+               for (j = 0; j < highLen; ++j) {
+                       highSum += HighTone[j] * GraphBuffer[i + j];
+               }
+               lowSum = abs(100 * lowSum / lowLen);
+               highSum = abs(100 * highSum / highLen);
+               GraphBuffer[i] = (highSum << 16) | lowSum;
+       }
+
+       for(i = 0; i < GraphTraceLen - convLen - 16; ++i) {
+               int lowTot = 0, highTot = 0;
+               // 10 and 8 are f_s divided by f_l and f_h, rounded
+               for (j = 0; j < 10; ++j) {
+                       lowTot += (GraphBuffer[i+j] & 0xffff);
+               }
+               for (j = 0; j < 8; j++) {
+                       highTot += (GraphBuffer[i + j] >> 16);
+               }
+               GraphBuffer[i] = lowTot - highTot;
+               if (GraphBuffer[i] > maxMark) maxMark = GraphBuffer[i];
+               if (GraphBuffer[i] < minMark) minMark = GraphBuffer[i];
+       }
+
+       GraphTraceLen -= (convLen + 16);
+       RepaintGraphWindow();
+
+       // Find bit-sync (3 lo followed by 3 high) (HID ONLY)
+       int max = 0, maxPos = 0;
+       for (i = 0; i < 6000; ++i) {
+               int dec = 0;
+               for (j = 0; j < 3 * lowLen; ++j) {
+                       dec -= GraphBuffer[i + j];
+               }
+               for (; j < 3 * (lowLen + highLen ); ++j) {
+                       dec += GraphBuffer[i + j];
+               }
+               if (dec > max) {
+                       max = dec;
+                       maxPos = i;
+               }
+       }
+
+       // place start of bit sync marker in graph
+       GraphBuffer[maxPos] = maxMark;
+       GraphBuffer[maxPos + 1] = minMark;
+
+       maxPos += j;
+
+       // place end of bit sync marker in graph
+       GraphBuffer[maxPos] = maxMark;
+       GraphBuffer[maxPos+1] = minMark;
+
+       PrintAndLog("actual data bits start at sample %d", maxPos);
+       PrintAndLog("length %d/%d", highLen, lowLen);
+
+       uint8_t bits[46] = {0x00};
+
+       // find bit pairs and manchester decode them
+       for (i = 0; i < arraylen(bits) - 1; ++i) {
+               int dec = 0;
+               for (j = 0; j < lowLen; ++j) {
+                       dec -= GraphBuffer[maxPos + j];
+               }
+               for (; j < lowLen + highLen; ++j) {
+                       dec += GraphBuffer[maxPos + j];
+               }
+               maxPos += j;
+               // place inter bit marker in graph
+               GraphBuffer[maxPos] = maxMark;
+               GraphBuffer[maxPos + 1] = minMark;
+
+               // hi and lo form a 64 bit pair
+               hi = (hi << 1) | (lo >> 31);
+               lo = (lo << 1);
+               // store decoded bit as binary (in hi/lo) and text (in bits[])
+               if(dec < 0) {
+                       bits[i] = '1';
+                       lo |= 1;
+               } else {
+                       bits[i] = '0';
+               }
+       }
+       PrintAndLog("bits: '%s'", bits);
+       PrintAndLog("hex: %08x %08x", hi, lo);
+       return 0;
 }
 
 //by marshmellow
 //attempt to psk1 demod graph buffer
 int PSKDemod(const char *Cmd, bool verbose)
 {
-  int invert=0;
-  int clk=0;
-  int maxErr=100;
-  sscanf(Cmd, "%i %i %i", &clk, &invert, &maxErr);
-  if (clk==1){
-    invert=1;
-    clk=0;
-  }
-  if (invert != 0 && invert != 1) {
-    if (verbose) PrintAndLog("Invalid argument: %s", Cmd);
-    return 0;
-  }
-  uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
-  size_t BitLen = getFromGraphBuf(BitStream);
-  if (BitLen==0) return -1;
-  uint8_t carrier=countPSK_FC(BitStream, BitLen);
-  if (carrier!=2 && carrier!=4 && carrier!=8){
-    //invalid carrier
-    return 0;
-  }
-  int errCnt=0;
-  errCnt = pskRawDemod(BitStream, &BitLen, &clk, &invert);
-  if (errCnt > maxErr){
-    if (g_debugMode==1 && verbose) PrintAndLog("Too many errors found, clk: %d, invert: %d, numbits: %d, errCnt: %d",clk,invert,BitLen,errCnt);
-    return 0;
-  } 
-  if (errCnt<0|| BitLen<16){  //throw away static - allow 1 and -1 (in case of threshold command first)
-    if (g_debugMode==1 && verbose) PrintAndLog("no data found, clk: %d, invert: %d, numbits: %d, errCnt: %d",clk,invert,BitLen,errCnt);
-    return 0;
-  }
-  if (verbose){
-    PrintAndLog("Tried PSK Demod using Clock: %d - invert: %d - Bits Found: %d",clk,invert,BitLen);
-    if (errCnt>0){
-      PrintAndLog("# Errors during Demoding (shown as 77 in bit stream): %d",errCnt);
-    }
-  }
-  //prime demod buffer for output
-  setDemodBuf(BitStream,BitLen,0);
-  return 1;
+       int invert=0;
+       int clk=0;
+       int maxErr=100;
+       sscanf(Cmd, "%i %i %i", &clk, &invert, &maxErr);
+       if (clk==1){
+               invert=1;
+               clk=0;
+       }
+       if (invert != 0 && invert != 1) {
+               if (verbose) PrintAndLog("Invalid argument: %s", Cmd);
+               return 0;
+       }
+       uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
+       size_t BitLen = getFromGraphBuf(BitStream);
+       if (BitLen==0) return -1;
+       uint8_t carrier=countPSK_FC(BitStream, BitLen);
+       if (carrier!=2 && carrier!=4 && carrier!=8){
+               //invalid carrier
+               return 0;
+       }
+       int errCnt=0;
+       errCnt = pskRawDemod(BitStream, &BitLen, &clk, &invert);
+       if (errCnt > maxErr){
+               if (g_debugMode==1 && verbose) PrintAndLog("Too many errors found, clk: %d, invert: %d, numbits: %d, errCnt: %d",clk,invert,BitLen,errCnt);
+               return 0;
+       
+       if (errCnt<0|| BitLen<16){  //throw away static - allow 1 and -1 (in case of threshold command first)
+               if (g_debugMode==1 && verbose) PrintAndLog("no data found, clk: %d, invert: %d, numbits: %d, errCnt: %d",clk,invert,BitLen,errCnt);
+               return 0;
+       }
+       if (verbose){
+               PrintAndLog("Tried PSK Demod using Clock: %d - invert: %d - Bits Found: %d",clk,invert,BitLen);
+               if (errCnt>0){
+                       PrintAndLog("# Errors during Demoding (shown as 77 in bit stream): %d",errCnt);
+               }
+       }
+       //prime demod buffer for output
+       setDemodBuf(BitStream,BitLen,0);
+       return 1;
 }
 
 // Indala 26 bit decode
@@ -1876,7 +1875,7 @@ int CmdIndalaDecode(const char *Cmd)
        char showbits[251]={0x00};
        if (invert)
                if (g_debugMode==1)
-                       PrintAndLog("Had to invert bits");
+                       PrintAndLog("Had to invert bits");
 
        //convert UID to HEX
        uint32_t uid1, uid2, uid3, uid4, uid5, uid6, uid7;
@@ -1937,61 +1936,61 @@ int CmdIndalaDecode(const char *Cmd)
 
 int NRZrawDemod(const char *Cmd, bool verbose)
 {
-  int invert=0;
-  int clk=0;
-  int maxErr=100;
-  sscanf(Cmd, "%i %i %i", &clk, &invert, &maxErr);
-  if (clk==1){
-    invert=1;
-    clk=0;
-  }
-  if (invert != 0 && invert != 1) {
-    PrintAndLog("Invalid argument: %s", Cmd);
-    return 0;
-  }
-  uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
-  size_t BitLen = getFromGraphBuf(BitStream);
-  if (BitLen==0) return 0;
-  int errCnt=0;
-  errCnt = nrzRawDemod(BitStream, &BitLen, &clk, &invert, maxErr);
-  if (errCnt > maxErr){
-    if (g_debugMode) PrintAndLog("Too many errors found, clk: %d, invert: %d, numbits: %d, errCnt: %d",clk,invert,BitLen,errCnt);
-    return 0;
-  } 
-  if (errCnt<0|| BitLen<16){  //throw away static - allow 1 and -1 (in case of threshold command first)
-    if (g_debugMode) PrintAndLog("no data found, clk: %d, invert: %d, numbits: %d, errCnt: %d",clk,invert,BitLen,errCnt);
-    return 0;
-  }
-  if (verbose || g_debugMode) PrintAndLog("Tried NRZ Demod using Clock: %d - invert: %d - Bits Found: %d",clk,invert,BitLen);
-  //prime demod buffer for output
-  setDemodBuf(BitStream,BitLen,0);
-
-  if (errCnt>0 && (verbose || g_debugMode)) PrintAndLog("# Errors during Demoding (shown as 77 in bit stream): %d",errCnt);
-  if (verbose || g_debugMode) {
-    PrintAndLog("NRZ demoded bitstream:");
-    // Now output the bitstream to the scrollback by line of 16 bits
-    printDemodBuff();
-  }
-  return 1; 
+       int invert=0;
+       int clk=0;
+       int maxErr=100;
+       sscanf(Cmd, "%i %i %i", &clk, &invert, &maxErr);
+       if (clk==1){
+               invert=1;
+               clk=0;
+       }
+       if (invert != 0 && invert != 1) {
+               PrintAndLog("Invalid argument: %s", Cmd);
+               return 0;
+       }
+       uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
+       size_t BitLen = getFromGraphBuf(BitStream);
+       if (BitLen==0) return 0;
+       int errCnt=0;
+       errCnt = nrzRawDemod(BitStream, &BitLen, &clk, &invert, maxErr);
+       if (errCnt > maxErr){
+               if (g_debugMode) PrintAndLog("Too many errors found, clk: %d, invert: %d, numbits: %d, errCnt: %d",clk,invert,BitLen,errCnt);
+               return 0;
+       
+       if (errCnt<0|| BitLen<16){  //throw away static - allow 1 and -1 (in case of threshold command first)
+               if (g_debugMode) PrintAndLog("no data found, clk: %d, invert: %d, numbits: %d, errCnt: %d",clk,invert,BitLen,errCnt);
+               return 0;
+       }
+       if (verbose || g_debugMode) PrintAndLog("Tried NRZ Demod using Clock: %d - invert: %d - Bits Found: %d",clk,invert,BitLen);
+       //prime demod buffer for output
+       setDemodBuf(BitStream,BitLen,0);
+
+       if (errCnt>0 && (verbose || g_debugMode)) PrintAndLog("# Errors during Demoding (shown as 77 in bit stream): %d",errCnt);
+       if (verbose || g_debugMode) {
+               PrintAndLog("NRZ demoded bitstream:");
+               // Now output the bitstream to the scrollback by line of 16 bits
+               printDemodBuff();
+       }
+       return 1; 
 }
 
 int CmdNRZrawDemod(const char *Cmd)
 {
-  char cmdp = param_getchar(Cmd, 0);
-  if (strlen(Cmd) > 10 || cmdp == 'h' || cmdp == 'H') {
-    PrintAndLog("Usage:  data rawdemod nr [clock] <0|1> [maxError]");
-    PrintAndLog("     [set clock as integer] optional, if not set, autodetect.");
-    PrintAndLog("     <invert>, 1 for invert output");
-    PrintAndLog("     [set maximum allowed errors], default = 100.");
-    PrintAndLog("");
-    PrintAndLog("    sample: data rawdemod nr        = demod a nrz/direct tag from GraphBuffer");
-    PrintAndLog("          : data rawdemod nr 32     = demod a nrz/direct tag from GraphBuffer using a clock of RF/32");
-    PrintAndLog("          : data rawdemod nr 32 1   = demod a nrz/direct tag from GraphBuffer using a clock of RF/32 and inverting data");
-    PrintAndLog("          : data rawdemod nr 1      = demod a nrz/direct tag from GraphBuffer while inverting data");
-    PrintAndLog("          : data rawdemod nr 64 1 0 = demod a nrz/direct tag from GraphBuffer using a clock of RF/64, inverting data and allowing 0 demod errors");
-    return 0;
-  }
-  return NRZrawDemod(Cmd, TRUE);
+       char cmdp = param_getchar(Cmd, 0);
+       if (strlen(Cmd) > 10 || cmdp == 'h' || cmdp == 'H') {
+               PrintAndLog("Usage:  data rawdemod nr [clock] <0|1> [maxError]");
+               PrintAndLog("     [set clock as integer] optional, if not set, autodetect.");
+               PrintAndLog("     <invert>, 1 for invert output");
+               PrintAndLog("     [set maximum allowed errors], default = 100.");
+               PrintAndLog("");
+               PrintAndLog("    sample: data rawdemod nr        = demod a nrz/direct tag from GraphBuffer");
+               PrintAndLog("          : data rawdemod nr 32     = demod a nrz/direct tag from GraphBuffer using a clock of RF/32");
+               PrintAndLog("          : data rawdemod nr 32 1   = demod a nrz/direct tag from GraphBuffer using a clock of RF/32 and inverting data");
+               PrintAndLog("          : data rawdemod nr 1      = demod a nrz/direct tag from GraphBuffer while inverting data");
+               PrintAndLog("          : data rawdemod nr 64 1 0 = demod a nrz/direct tag from GraphBuffer using a clock of RF/64, inverting data and allowing 0 demod errors");
+               return 0;
+       }
+       return NRZrawDemod(Cmd, TRUE);
 }
 
 // by marshmellow
@@ -2000,63 +1999,63 @@ int CmdNRZrawDemod(const char *Cmd)
 // prints binary found and saves in demodbuffer for further commands
 int CmdPSK1rawDemod(const char *Cmd)
 {
-  int ans;
-  char cmdp = param_getchar(Cmd, 0);
-  if (strlen(Cmd) > 10 || cmdp == 'h' || cmdp == 'H') {
-    PrintAndLog("Usage:  data rawdemod p1 [clock] <0|1> [maxError]");
-    PrintAndLog("     [set clock as integer] optional, if not set, autodetect.");
-    PrintAndLog("     <invert>, 1 for invert output");
-    PrintAndLog("     [set maximum allowed errors], default = 100.");
-    PrintAndLog("");
-    PrintAndLog("    sample: data rawdemod p1        = demod a psk1 tag from GraphBuffer");
-    PrintAndLog("          : data rawdemod p1 32     = demod a psk1 tag from GraphBuffer using a clock of RF/32");
-    PrintAndLog("          : data rawdemod p1 32 1   = demod a psk1 tag from GraphBuffer using a clock of RF/32 and inverting data");
-    PrintAndLog("          : data rawdemod p1 1      = demod a psk1 tag from GraphBuffer while inverting data");
-    PrintAndLog("          : data rawdemod p1 64 1 0 = demod a psk1 tag from GraphBuffer using a clock of RF/64, inverting data and allowing 0 demod errors");
-    return 0;
-  }
-  ans = PSKDemod(Cmd, TRUE);
-  //output
-  if (!ans){
-    if (g_debugMode) PrintAndLog("Error demoding: %d",ans); 
-    return 0;
-  }
+       int ans;
+       char cmdp = param_getchar(Cmd, 0);
+       if (strlen(Cmd) > 10 || cmdp == 'h' || cmdp == 'H') {
+               PrintAndLog("Usage:  data rawdemod p1 [clock] <0|1> [maxError]");
+               PrintAndLog("     [set clock as integer] optional, if not set, autodetect.");
+               PrintAndLog("     <invert>, 1 for invert output");
+               PrintAndLog("     [set maximum allowed errors], default = 100.");
+               PrintAndLog("");
+               PrintAndLog("    sample: data rawdemod p1        = demod a psk1 tag from GraphBuffer");
+               PrintAndLog("          : data rawdemod p1 32     = demod a psk1 tag from GraphBuffer using a clock of RF/32");
+               PrintAndLog("          : data rawdemod p1 32 1   = demod a psk1 tag from GraphBuffer using a clock of RF/32 and inverting data");
+               PrintAndLog("          : data rawdemod p1 1      = demod a psk1 tag from GraphBuffer while inverting data");
+               PrintAndLog("          : data rawdemod p1 64 1 0 = demod a psk1 tag from GraphBuffer using a clock of RF/64, inverting data and allowing 0 demod errors");
+               return 0;
+       }
+       ans = PSKDemod(Cmd, TRUE);
+       //output
+       if (!ans){
+               if (g_debugMode) PrintAndLog("Error demoding: %d",ans); 
+               return 0;
+       }
  
-  PrintAndLog("PSK demoded bitstream:");
-  // Now output the bitstream to the scrollback by line of 16 bits
-  printDemodBuff();
-  return 1;
+       PrintAndLog("PSK demoded bitstream:");
+       // Now output the bitstream to the scrollback by line of 16 bits
+       printDemodBuff();
+       return 1;
 }
 
 // by marshmellow
 // takes same args as cmdpsk1rawdemod
 int CmdPSK2rawDemod(const char *Cmd)
 {
-  int ans=0;
-  char cmdp = param_getchar(Cmd, 0);
-  if (strlen(Cmd) > 10 || cmdp == 'h' || cmdp == 'H') {
-    PrintAndLog("Usage:  data rawdemod p2 [clock] <0|1> [maxError]");
-    PrintAndLog("     [set clock as integer] optional, if not set, autodetect.");
-    PrintAndLog("     <invert>, 1 for invert output");
-    PrintAndLog("     [set maximum allowed errors], default = 100.");
-    PrintAndLog("");
-    PrintAndLog("    sample: data rawdemod p2         = demod a psk2 tag from GraphBuffer, autodetect clock");
-    PrintAndLog("          : data rawdemod p2 32      = demod a psk2 tag from GraphBuffer using a clock of RF/32");
-    PrintAndLog("          : data rawdemod p2 32 1    = demod a psk2 tag from GraphBuffer using a clock of RF/32 and inverting output");
-    PrintAndLog("          : data rawdemod p2 1       = demod a psk2 tag from GraphBuffer, autodetect clock and invert output");
-    PrintAndLog("          : data rawdemod p2 64 1 0  = demod a psk2 tag from GraphBuffer using a clock of RF/64, inverting output and allowing 0 demod errors");
-    return 0;
-  }
-  ans=PSKDemod(Cmd, TRUE);
-  if (!ans){
-    if (g_debugMode) PrintAndLog("Error demoding: %d",ans);  
-    return 0;
-  } 
-  psk1TOpsk2(DemodBuffer, DemodBufferLen);
-  PrintAndLog("PSK2 demoded bitstream:");
-  // Now output the bitstream to the scrollback by line of 16 bits
-  printDemodBuff();  
-  return 1;
+       int ans=0;
+       char cmdp = param_getchar(Cmd, 0);
+       if (strlen(Cmd) > 10 || cmdp == 'h' || cmdp == 'H') {
+               PrintAndLog("Usage:  data rawdemod p2 [clock] <0|1> [maxError]");
+               PrintAndLog("     [set clock as integer] optional, if not set, autodetect.");
+               PrintAndLog("     <invert>, 1 for invert output");
+               PrintAndLog("     [set maximum allowed errors], default = 100.");
+               PrintAndLog("");
+               PrintAndLog("    sample: data rawdemod p2         = demod a psk2 tag from GraphBuffer, autodetect clock");
+               PrintAndLog("          : data rawdemod p2 32      = demod a psk2 tag from GraphBuffer using a clock of RF/32");
+               PrintAndLog("          : data rawdemod p2 32 1    = demod a psk2 tag from GraphBuffer using a clock of RF/32 and inverting output");
+               PrintAndLog("          : data rawdemod p2 1       = demod a psk2 tag from GraphBuffer, autodetect clock and invert output");
+               PrintAndLog("          : data rawdemod p2 64 1 0  = demod a psk2 tag from GraphBuffer using a clock of RF/64, inverting output and allowing 0 demod errors");
+               return 0;
+       }
+       ans=PSKDemod(Cmd, TRUE);
+       if (!ans){
+               if (g_debugMode) PrintAndLog("Error demoding: %d",ans);  
+               return 0;
+       
+       psk1TOpsk2(DemodBuffer, DemodBufferLen);
+       PrintAndLog("PSK2 demoded bitstream:");
+       // Now output the bitstream to the scrollback by line of 16 bits
+       printDemodBuff();  
+       return 1;
 }
 
 // by marshmellow - combines all raw demod functions into one menu command
@@ -2105,76 +2104,76 @@ int CmdRawDemod(const char *Cmd)
 
 int CmdGrid(const char *Cmd)
 {
-  sscanf(Cmd, "%i %i", &PlotGridX, &PlotGridY);
-  PlotGridXdefault= PlotGridX;
-  PlotGridYdefault= PlotGridY;
-  RepaintGraphWindow();
-  return 0;
+       sscanf(Cmd, "%i %i", &PlotGridX, &PlotGridY);
+       PlotGridXdefault= PlotGridX;
+       PlotGridYdefault= PlotGridY;
+       RepaintGraphWindow();
+       return 0;
 }
 
 int CmdHexsamples(const char *Cmd)
 {
-  int i, j;
-  int requested = 0;
-  int offset = 0;
-  char string_buf[25];
-  char* string_ptr = string_buf;
-  uint8_t got[BIGBUF_SIZE];
-
-  sscanf(Cmd, "%i %i", &requested, &offset);
-
-  /* if no args send something */
-  if (requested == 0) {
-    requested = 8;
-  }
-  if (offset + requested > sizeof(got)) {
-    PrintAndLog("Tried to read past end of buffer, <bytes> + <offset> > %d", BIGBUF_SIZE);
-    return 0;
-       }
-
-  GetFromBigBuf(got,requested,offset);
-  WaitForResponse(CMD_ACK,NULL);
-
-  i = 0;
-  for (j = 0; j < requested; j++) {
-    i++;
-    string_ptr += sprintf(string_ptr, "%02x ", got[j]);
-    if (i == 8) {
-      *(string_ptr - 1) = '\0';    // remove the trailing space
-      PrintAndLog("%s", string_buf);
-      string_buf[0] = '\0';
-      string_ptr = string_buf;
-      i = 0;
-    }
-    if (j == requested - 1 && string_buf[0] != '\0') { // print any remaining bytes
-      *(string_ptr - 1) = '\0';
-      PrintAndLog("%s", string_buf);
-      string_buf[0] = '\0';
-    }
-  }
-  return 0;
+       int i, j;
+       int requested = 0;
+       int offset = 0;
+       char string_buf[25];
+       char* string_ptr = string_buf;
+       uint8_t got[BIGBUF_SIZE];
+
+       sscanf(Cmd, "%i %i", &requested, &offset);
+
+       /* if no args send something */
+       if (requested == 0) {
+               requested = 8;
+       }
+       if (offset + requested > sizeof(got)) {
+               PrintAndLog("Tried to read past end of buffer, <bytes> + <offset> > %d", BIGBUF_SIZE);
+               return 0;
+       }
+
+       GetFromBigBuf(got,requested,offset);
+       WaitForResponse(CMD_ACK,NULL);
+
+       i = 0;
+       for (j = 0; j < requested; j++) {
+               i++;
+               string_ptr += sprintf(string_ptr, "%02x ", got[j]);
+               if (i == 8) {
+                       *(string_ptr - 1) = '\0';    // remove the trailing space
+                       PrintAndLog("%s", string_buf);
+                       string_buf[0] = '\0';
+                       string_ptr = string_buf;
+                       i = 0;
+               }
+               if (j == requested - 1 && string_buf[0] != '\0') { // print any remaining bytes
+                       *(string_ptr - 1) = '\0';
+                       PrintAndLog("%s", string_buf);
+                       string_buf[0] = '\0';
+               }
+       }
+       return 0;
 }
 
 int CmdHide(const char *Cmd)
 {
-  HideGraphWindow();
-  return 0;
+       HideGraphWindow();
+       return 0;
 }
 
 //zero mean GraphBuffer
 int CmdHpf(const char *Cmd)
 {
-  int i;
-  int accum = 0;
+       int i;
+       int accum = 0;
 
-  for (i = 10; i < GraphTraceLen; ++i)
-    accum += GraphBuffer[i];
-  accum /= (GraphTraceLen - 10);
-  for (i = 0; i < GraphTraceLen; ++i)
-    GraphBuffer[i] -= accum;
+       for (i = 10; i < GraphTraceLen; ++i)
+               accum += GraphBuffer[i];
+       accum /= (GraphTraceLen - 10);
+       for (i = 0; i < GraphTraceLen; ++i)
+               GraphBuffer[i] -= accum;
 
-  RepaintGraphWindow();
-  return 0;
+       RepaintGraphWindow();
+       return 0;
 }
 typedef struct {
        uint8_t * buffer;
@@ -2202,62 +2201,62 @@ uint8_t getByte(uint8_t bits_per_sample, BitstreamOut* b)
 
 int getSamples(const char *Cmd, bool silent)
 {
-  //If we get all but the last byte in bigbuf,
-  // we don't have to worry about remaining trash
-  // in the last byte in case the bits-per-sample
-  // does not line up on byte boundaries
-
-  uint8_t got[BIGBUF_SIZE-1] = { 0 };
-
-  int n = strtol(Cmd, NULL, 0);
-
-  if (n == 0)
-    n = sizeof(got);
-
-  if (n > sizeof(got))
-    n = sizeof(got);
-
-  PrintAndLog("Reading %d bytes from device memory\n", n);
-  GetFromBigBuf(got,n,0);
-  PrintAndLog("Data fetched");
-  UsbCommand response;
-  WaitForResponse(CMD_ACK, &response);
-  uint8_t bits_per_sample = 8;
-
-  //Old devices without this feature would send 0 at arg[0]
-  if(response.arg[0] > 0)
-  {
-    sample_config *sc = (sample_config *) response.d.asBytes;
-    PrintAndLog("Samples @ %d bits/smpl, decimation 1:%d ", sc->bits_per_sample
-          , sc->decimation);
-    bits_per_sample = sc->bits_per_sample;
-  }
-  if(bits_per_sample < 8)
-  {
-    PrintAndLog("Unpacking...");
-    BitstreamOut bout = { got, bits_per_sample * n,  0};
-    int j =0;
-    for (j = 0; j * bits_per_sample < n * 8 && j < sizeof(GraphBuffer); j++) {
-      uint8_t sample = getByte(bits_per_sample, &bout);
-      GraphBuffer[j] = ((int) sample )- 128;
-    }
-    GraphTraceLen = j;
-    PrintAndLog("Unpacked %d samples" , j );
-  }else
-  {
-    for (int j = 0; j < n; j++) {
-      GraphBuffer[j] = ((int)got[j]) - 128;
-    }
-    GraphTraceLen = n;
-  }
-
-  RepaintGraphWindow();
-  return 0;
+       //If we get all but the last byte in bigbuf,
+       // we don't have to worry about remaining trash
+       // in the last byte in case the bits-per-sample
+       // does not line up on byte boundaries
+
+       uint8_t got[BIGBUF_SIZE-1] = { 0 };
+
+       int n = strtol(Cmd, NULL, 0);
+
+       if (n == 0)
+               n = sizeof(got);
+
+       if (n > sizeof(got))
+               n = sizeof(got);
+
+       PrintAndLog("Reading %d bytes from device memory\n", n);
+       GetFromBigBuf(got,n,0);
+       PrintAndLog("Data fetched");
+       UsbCommand response;
+       WaitForResponse(CMD_ACK, &response);
+       uint8_t bits_per_sample = 8;
+
+       //Old devices without this feature would send 0 at arg[0]
+       if(response.arg[0] > 0)
+       {
+               sample_config *sc = (sample_config *) response.d.asBytes;
+               PrintAndLog("Samples @ %d bits/smpl, decimation 1:%d ", sc->bits_per_sample
+                   , sc->decimation);
+               bits_per_sample = sc->bits_per_sample;
+       }
+       if(bits_per_sample < 8)
+       {
+               PrintAndLog("Unpacking...");
+               BitstreamOut bout = { got, bits_per_sample * n,  0};
+               int j =0;
+               for (j = 0; j * bits_per_sample < n * 8 && j < sizeof(GraphBuffer); j++) {
+                       uint8_t sample = getByte(bits_per_sample, &bout);
+                       GraphBuffer[j] = ((int) sample )- 128;
+               }
+               GraphTraceLen = j;
+               PrintAndLog("Unpacked %d samples" , j );
+       }else
+       {
+               for (int j = 0; j < n; j++) {
+                       GraphBuffer[j] = ((int)got[j]) - 128;
+               }
+               GraphTraceLen = n;
+       }
+
+       RepaintGraphWindow();
+       return 0;
 }
 
 int CmdSamples(const char *Cmd)
 {
-  return getSamples(Cmd, false);
+       return getSamples(Cmd, false);
 }
 
 int CmdTuneSamples(const char *Cmd)
@@ -2322,52 +2321,52 @@ int CmdTuneSamples(const char *Cmd)
 
 int CmdLoad(const char *Cmd)
 {
-  char filename[FILE_PATH_SIZE] = {0x00};
-  int len = 0;
+       char filename[FILE_PATH_SIZE] = {0x00};
+       int len = 0;
 
-  len = strlen(Cmd);
-  if (len > FILE_PATH_SIZE) len = FILE_PATH_SIZE;
-  memcpy(filename, Cmd, len);
+       len = strlen(Cmd);
+       if (len > FILE_PATH_SIZE) len = FILE_PATH_SIZE;
+       memcpy(filename, Cmd, len);
        
-  FILE *f = fopen(filename, "r");
-  if (!f) {
-     PrintAndLog("couldn't open '%s'", filename);
-    return 0;
-  }
-
-  GraphTraceLen = 0;
-  char line[80];
-  while (fgets(line, sizeof (line), f)) {
-    GraphBuffer[GraphTraceLen] = atoi(line);
-    GraphTraceLen++;
-  }
-  fclose(f);
-  PrintAndLog("loaded %d samples", GraphTraceLen);
-  RepaintGraphWindow();
-  return 0;
+       FILE *f = fopen(filename, "r");
+       if (!f) {
+                PrintAndLog("couldn't open '%s'", filename);
+               return 0;
+       }
+
+       GraphTraceLen = 0;
+       char line[80];
+       while (fgets(line, sizeof (line), f)) {
+               GraphBuffer[GraphTraceLen] = atoi(line);
+               GraphTraceLen++;
+       }
+       fclose(f);
+       PrintAndLog("loaded %d samples", GraphTraceLen);
+       RepaintGraphWindow();
+       return 0;
 }
 
 int CmdLtrim(const char *Cmd)
 {
-  int ds = atoi(Cmd);
+       int ds = atoi(Cmd);
 
-  for (int i = ds; i < GraphTraceLen; ++i)
-    GraphBuffer[i-ds] = GraphBuffer[i];
-  GraphTraceLen -= ds;
+       for (int i = ds; i < GraphTraceLen; ++i)
+               GraphBuffer[i-ds] = GraphBuffer[i];
+       GraphTraceLen -= ds;
 
-  RepaintGraphWindow();
-  return 0;
+       RepaintGraphWindow();
+       return 0;
 }
 
 // trim graph to input argument length
 int CmdRtrim(const char *Cmd)
 {
-  int ds = atoi(Cmd);
+       int ds = atoi(Cmd);
 
-  GraphTraceLen = ds;
+       GraphTraceLen = ds;
 
-  RepaintGraphWindow();
-  return 0;
+       RepaintGraphWindow();
+       return 0;
 }
 
 /*
@@ -2385,431 +2384,431 @@ int CmdRtrim(const char *Cmd)
  */
 int CmdManchesterDemod(const char *Cmd)
 {
-  int i, j, invert= 0;
-  int bit;
-  int clock;
-  int lastval = 0;
-  int low = 0;
-  int high = 0;
-  int hithigh, hitlow, first;
-  int lc = 0;
-  int bitidx = 0;
-  int bit2idx = 0;
-  int warnings = 0;
-
-  /* check if we're inverting output */
-  if (*Cmd == 'i')
-  {
-    PrintAndLog("Inverting output");
-    invert = 1;
-    ++Cmd;
-    do
-      ++Cmd;
-    while(*Cmd == ' '); // in case a 2nd argument was given
-  }
-
-  /* Holds the decoded bitstream: each clock period contains 2 bits       */
-  /* later simplified to 1 bit after manchester decoding.                 */
-  /* Add 10 bits to allow for noisy / uncertain traces without aborting   */
-  /* int BitStream[GraphTraceLen*2/clock+10]; */
-
-  /* But it does not work if compiling on WIndows: therefore we just allocate a */
-  /* large array */
-  uint8_t BitStream[MAX_GRAPH_TRACE_LEN] = {0};
-
-  /* Detect high and lows */
-  for (i = 0; i < GraphTraceLen; i++)
-  {
-    if (GraphBuffer[i] > high)
-      high = GraphBuffer[i];
-    else if (GraphBuffer[i] < low)
-      low = GraphBuffer[i];
-  }
-
-  /* Get our clock */
-  clock = GetAskClock(Cmd, high, 1);
-
-  int tolerance = clock/4;
-
-  /* Detect first transition */
-  /* Lo-Hi (arbitrary)       */
-  /* skip to the first high */
-  for (i= 0; i < GraphTraceLen; i++)
-    if (GraphBuffer[i] == high)
-      break;
-  /* now look for the first low */
-  for (; i < GraphTraceLen; i++)
-  {
-    if (GraphBuffer[i] == low)
-    {
-      lastval = i;
-      break;
-    }
-  }
-
-  /* If we're not working with 1/0s, demod based off clock */
-  if (high != 1)
-  {
-    bit = 0; /* We assume the 1st bit is zero, it may not be
-              * the case: this routine (I think) has an init problem.
-              * Ed.
-              */
-    for (; i < (int)(GraphTraceLen / clock); i++)
-    {
-      hithigh = 0;
-      hitlow = 0;
-      first = 1;
-
-      /* Find out if we hit both high and low peaks */
-      for (j = 0; j < clock; j++)
-      {
-        if (GraphBuffer[(i * clock) + j] == high)
-          hithigh = 1;
-        else if (GraphBuffer[(i * clock) + j] == low)
-          hitlow = 1;
-
-        /* it doesn't count if it's the first part of our read
-           because it's really just trailing from the last sequence */
-        if (first && (hithigh || hitlow))
-          hithigh = hitlow = 0;
-        else
-          first = 0;
-
-        if (hithigh && hitlow)
-          break;
-      }
-
-      /* If we didn't hit both high and low peaks, we had a bit transition */
-      if (!hithigh || !hitlow)
-        bit ^= 1;
-
-      BitStream[bit2idx++] = bit ^ invert;
-    }
-  }
-
-  /* standard 1/0 bitstream */
-  else
-  {
-
-    /* Then detect duration between 2 successive transitions */
-    for (bitidx = 1; i < GraphTraceLen; i++)
-    {
-      if (GraphBuffer[i-1] != GraphBuffer[i])
-      {
-        lc = i-lastval;
-        lastval = i;
-
-        // Error check: if bitidx becomes too large, we do not
-        // have a Manchester encoded bitstream or the clock is really
-        // wrong!
-        if (bitidx > (GraphTraceLen*2/clock+8) ) {
-          PrintAndLog("Error: the clock you gave is probably wrong, aborting.");
-          return 0;
-        }
-        // Then switch depending on lc length:
-        // Tolerance is 1/4 of clock rate (arbitrary)
-        if (abs(lc-clock/2) < tolerance) {
-          // Short pulse : either "1" or "0"
-          BitStream[bitidx++]=GraphBuffer[i-1];
-        } else if (abs(lc-clock) < tolerance) {
-          // Long pulse: either "11" or "00"
-          BitStream[bitidx++]=GraphBuffer[i-1];
-          BitStream[bitidx++]=GraphBuffer[i-1];
-        } else {
-        // Error
-          warnings++;
-          PrintAndLog("Warning: Manchester decode error for pulse width detection.");
-          PrintAndLog("(too many of those messages mean either the stream is not Manchester encoded, or clock is wrong)");
-
-          if (warnings > 10)
-          {
-            PrintAndLog("Error: too many detection errors, aborting.");
-            return 0;
-          }
-        }
-      }
-    }
-
-    // At this stage, we now have a bitstream of "01" ("1") or "10" ("0"), parse it into final decoded bitstream
-    // Actually, we overwrite BitStream with the new decoded bitstream, we just need to be careful
-    // to stop output at the final bitidx2 value, not bitidx
-    for (i = 0; i < bitidx; i += 2) {
-      if ((BitStream[i] == 0) && (BitStream[i+1] == 1)) {
-        BitStream[bit2idx++] = 1 ^ invert;
-      } else if ((BitStream[i] == 1) && (BitStream[i+1] == 0)) {
-        BitStream[bit2idx++] = 0 ^ invert;
-      } else {
-        // We cannot end up in this state, this means we are unsynchronized,
-        // move up 1 bit:
-        i++;
-        warnings++;
-        PrintAndLog("Unsynchronized, resync...");
-        PrintAndLog("(too many of those messages mean the stream is not Manchester encoded)");
-
-        if (warnings > 10)
-        {
-          PrintAndLog("Error: too many decode errors, aborting.");
-          return 0;
-        }
-      }
-    }
-  }
-
-  PrintAndLog("Manchester decoded bitstream");
-  // Now output the bitstream to the scrollback by line of 16 bits
-  for (i = 0; i < (bit2idx-16); i+=16) {
-    PrintAndLog("%i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i",
-      BitStream[i],
-      BitStream[i+1],
-      BitStream[i+2],
-      BitStream[i+3],
-      BitStream[i+4],
-      BitStream[i+5],
-      BitStream[i+6],
-      BitStream[i+7],
-      BitStream[i+8],
-      BitStream[i+9],
-      BitStream[i+10],
-      BitStream[i+11],
-      BitStream[i+12],
-      BitStream[i+13],
-      BitStream[i+14],
-      BitStream[i+15]);
-  }
-  return 0;
+       int i, j, invert= 0;
+       int bit;
+       int clock;
+       int lastval = 0;
+       int low = 0;
+       int high = 0;
+       int hithigh, hitlow, first;
+       int lc = 0;
+       int bitidx = 0;
+       int bit2idx = 0;
+       int warnings = 0;
+
+       /* check if we're inverting output */
+       if (*Cmd == 'i')
+       {
+               PrintAndLog("Inverting output");
+               invert = 1;
+               ++Cmd;
+               do
+                       ++Cmd;
+               while(*Cmd == ' '); // in case a 2nd argument was given
+       }
+
+       /* Holds the decoded bitstream: each clock period contains 2 bits       */
+       /* later simplified to 1 bit after manchester decoding.                 */
+       /* Add 10 bits to allow for noisy / uncertain traces without aborting   */
+       /* int BitStream[GraphTraceLen*2/clock+10]; */
+
+       /* But it does not work if compiling on WIndows: therefore we just allocate a */
+       /* large array */
+       uint8_t BitStream[MAX_GRAPH_TRACE_LEN] = {0};
+
+       /* Detect high and lows */
+       for (i = 0; i < GraphTraceLen; i++)
+       {
+               if (GraphBuffer[i] > high)
+                       high = GraphBuffer[i];
+               else if (GraphBuffer[i] < low)
+                       low = GraphBuffer[i];
+       }
+
+       /* Get our clock */
+       clock = GetAskClock(Cmd, high, 1);
+
+       int tolerance = clock/4;
+
+       /* Detect first transition */
+       /* Lo-Hi (arbitrary)       */
+       /* skip to the first high */
+       for (i= 0; i < GraphTraceLen; i++)
+               if (GraphBuffer[i] == high)
+                       break;
+       /* now look for the first low */
+       for (; i < GraphTraceLen; i++)
+       {
+               if (GraphBuffer[i] == low)
+               {
+                       lastval = i;
+                       break;
+               }
+       }
+
+       /* If we're not working with 1/0s, demod based off clock */
+       if (high != 1)
+       {
+               bit = 0; /* We assume the 1st bit is zero, it may not be
+                                                       * the case: this routine (I think) has an init problem.
+                                                       * Ed.
+                                                       */
+               for (; i < (int)(GraphTraceLen / clock); i++)
+               {
+                       hithigh = 0;
+                       hitlow = 0;
+                       first = 1;
+
+                       /* Find out if we hit both high and low peaks */
+                       for (j = 0; j < clock; j++)
+                       {
+                               if (GraphBuffer[(i * clock) + j] == high)
+                                       hithigh = 1;
+                               else if (GraphBuffer[(i * clock) + j] == low)
+                                       hitlow = 1;
+
+                               /* it doesn't count if it's the first part of our read
+                                        because it's really just trailing from the last sequence */
+                               if (first && (hithigh || hitlow))
+                                       hithigh = hitlow = 0;
+                               else
+                                       first = 0;
+
+                               if (hithigh && hitlow)
+                                       break;
+                       }
+
+                       /* If we didn't hit both high and low peaks, we had a bit transition */
+                       if (!hithigh || !hitlow)
+                               bit ^= 1;
+
+                       BitStream[bit2idx++] = bit ^ invert;
+               }
+       }
+
+       /* standard 1/0 bitstream */
+       else
+       {
+
+               /* Then detect duration between 2 successive transitions */
+               for (bitidx = 1; i < GraphTraceLen; i++)
+               {
+                       if (GraphBuffer[i-1] != GraphBuffer[i])
+                       {
+                               lc = i-lastval;
+                               lastval = i;
+
+                               // Error check: if bitidx becomes too large, we do not
+                               // have a Manchester encoded bitstream or the clock is really
+                               // wrong!
+                               if (bitidx > (GraphTraceLen*2/clock+8) ) {
+                                       PrintAndLog("Error: the clock you gave is probably wrong, aborting.");
+                                       return 0;
+                               }
+                               // Then switch depending on lc length:
+                               // Tolerance is 1/4 of clock rate (arbitrary)
+                               if (abs(lc-clock/2) < tolerance) {
+                                       // Short pulse : either "1" or "0"
+                                       BitStream[bitidx++]=GraphBuffer[i-1];
+                               } else if (abs(lc-clock) < tolerance) {
+                                       // Long pulse: either "11" or "00"
+                                       BitStream[bitidx++]=GraphBuffer[i-1];
+                                       BitStream[bitidx++]=GraphBuffer[i-1];
+                               } else {
+                               // Error
+                                       warnings++;
+                                       PrintAndLog("Warning: Manchester decode error for pulse width detection.");
+                                       PrintAndLog("(too many of those messages mean either the stream is not Manchester encoded, or clock is wrong)");
+
+                                       if (warnings > 10)
+                                       {
+                                               PrintAndLog("Error: too many detection errors, aborting.");
+                                               return 0;
+                                       }
+                               }
+                       }
+               }
+
+               // At this stage, we now have a bitstream of "01" ("1") or "10" ("0"), parse it into final decoded bitstream
+               // Actually, we overwrite BitStream with the new decoded bitstream, we just need to be careful
+               // to stop output at the final bitidx2 value, not bitidx
+               for (i = 0; i < bitidx; i += 2) {
+                       if ((BitStream[i] == 0) && (BitStream[i+1] == 1)) {
+                               BitStream[bit2idx++] = 1 ^ invert;
+                       } else if ((BitStream[i] == 1) && (BitStream[i+1] == 0)) {
+                               BitStream[bit2idx++] = 0 ^ invert;
+                       } else {
+                               // We cannot end up in this state, this means we are unsynchronized,
+                               // move up 1 bit:
+                               i++;
+                               warnings++;
+                               PrintAndLog("Unsynchronized, resync...");
+                               PrintAndLog("(too many of those messages mean the stream is not Manchester encoded)");
+
+                               if (warnings > 10)
+                               {
+                                       PrintAndLog("Error: too many decode errors, aborting.");
+                                       return 0;
+                               }
+                       }
+               }
+       }
+
+       PrintAndLog("Manchester decoded bitstream");
+       // Now output the bitstream to the scrollback by line of 16 bits
+       for (i = 0; i < (bit2idx-16); i+=16) {
+               PrintAndLog("%i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i",
+                       BitStream[i],
+                       BitStream[i+1],
+                       BitStream[i+2],
+                       BitStream[i+3],
+                       BitStream[i+4],
+                       BitStream[i+5],
+                       BitStream[i+6],
+                       BitStream[i+7],
+                       BitStream[i+8],
+                       BitStream[i+9],
+                       BitStream[i+10],
+                       BitStream[i+11],
+                       BitStream[i+12],
+                       BitStream[i+13],
+                       BitStream[i+14],
+                       BitStream[i+15]);
+       }
+       return 0;
 }
 
 /* Modulate our data into manchester */
 int CmdManchesterMod(const char *Cmd)
 {
-  int i, j;
-  int clock;
-  int bit, lastbit, wave;
+       int i, j;
+       int clock;
+       int bit, lastbit, wave;
 
-  /* Get our clock */
-  clock = GetAskClock(Cmd, 0, 1);
+       /* Get our clock */
+       clock = GetAskClock(Cmd, 0, 1);
 
-  wave = 0;
-  lastbit = 1;
-  for (i = 0; i < (int)(GraphTraceLen / clock); i++)
-  {
-    bit = GraphBuffer[i * clock] ^ 1;
+       wave = 0;
+       lastbit = 1;
+       for (i = 0; i < (int)(GraphTraceLen / clock); i++)
+       {
+               bit = GraphBuffer[i * clock] ^ 1;
 
-    for (j = 0; j < (int)(clock/2); j++)
-      GraphBuffer[(i * clock) + j] = bit ^ lastbit ^ wave;
-    for (j = (int)(clock/2); j < clock; j++)
-      GraphBuffer[(i * clock) + j] = bit ^ lastbit ^ wave ^ 1;
+               for (j = 0; j < (int)(clock/2); j++)
+                       GraphBuffer[(i * clock) + j] = bit ^ lastbit ^ wave;
+               for (j = (int)(clock/2); j < clock; j++)
+                       GraphBuffer[(i * clock) + j] = bit ^ lastbit ^ wave ^ 1;
 
-    /* Keep track of how we start our wave and if we changed or not this time */
-    wave ^= bit ^ lastbit;
-    lastbit = bit;
-  }
+               /* Keep track of how we start our wave and if we changed or not this time */
+               wave ^= bit ^ lastbit;
+               lastbit = bit;
+       }
 
-  RepaintGraphWindow();
-  return 0;
+       RepaintGraphWindow();
+       return 0;
 }
 
 int CmdNorm(const char *Cmd)
 {
-  int i;
-  int max = INT_MIN, min = INT_MAX;
+       int i;
+       int max = INT_MIN, min = INT_MAX;
 
-  for (i = 10; i < GraphTraceLen; ++i) {
-    if (GraphBuffer[i] > max)
-      max = GraphBuffer[i];
-    if (GraphBuffer[i] < min)
-      min = GraphBuffer[i];
-  }
+       for (i = 10; i < GraphTraceLen; ++i) {
+               if (GraphBuffer[i] > max)
+                       max = GraphBuffer[i];
+               if (GraphBuffer[i] < min)
+                       min = GraphBuffer[i];
+       }
 
-  if (max != min) {
-    for (i = 0; i < GraphTraceLen; ++i) {
+       if (max != min) {
+               for (i = 0; i < GraphTraceLen; ++i) {
                        GraphBuffer[i] = (GraphBuffer[i] - ((max + min) / 2)) * 256 /
-        (max - min);
+                               (max - min);
                                //marshmelow: adjusted *1000 to *256 to make +/- 128 so demod commands still work
-    }
-  }
-  RepaintGraphWindow();
-  return 0;
+               }
+       }
+       RepaintGraphWindow();
+       return 0;
 }
 
 int CmdPlot(const char *Cmd)
 {
-  ShowGraphWindow();
-  return 0;
+       ShowGraphWindow();
+       return 0;
 }
 
 int CmdSave(const char *Cmd)
 {
-  char filename[FILE_PATH_SIZE] = {0x00};
-  int len = 0;
+       char filename[FILE_PATH_SIZE] = {0x00};
+       int len = 0;
 
-  len = strlen(Cmd);
-  if (len > FILE_PATH_SIZE) len = FILE_PATH_SIZE;
-  memcpy(filename, Cmd, len);
-   
+       len = strlen(Cmd);
+       if (len > FILE_PATH_SIZE) len = FILE_PATH_SIZE;
+       memcpy(filename, Cmd, len);
+        
 
-  FILE *f = fopen(filename, "w");
-  if(!f) {
-    PrintAndLog("couldn't open '%s'", filename);
-    return 0;
-  }
-  int i;
-  for (i = 0; i < GraphTraceLen; i++) {
-    fprintf(f, "%d\n", GraphBuffer[i]);
-  }
-  fclose(f);
-  PrintAndLog("saved to '%s'", Cmd);
-  return 0;
+       FILE *f = fopen(filename, "w");
+       if(!f) {
+               PrintAndLog("couldn't open '%s'", filename);
+               return 0;
+       }
+       int i;
+       for (i = 0; i < GraphTraceLen; i++) {
+               fprintf(f, "%d\n", GraphBuffer[i]);
+       }
+       fclose(f);
+       PrintAndLog("saved to '%s'", Cmd);
+       return 0;
 }
 
 int CmdScale(const char *Cmd)
 {
-  CursorScaleFactor = atoi(Cmd);
-  if (CursorScaleFactor == 0) {
-    PrintAndLog("bad, can't have zero scale");
-    CursorScaleFactor = 1;
-  }
-  RepaintGraphWindow();
-  return 0;
+       CursorScaleFactor = atoi(Cmd);
+       if (CursorScaleFactor == 0) {
+               PrintAndLog("bad, can't have zero scale");
+               CursorScaleFactor = 1;
+       }
+       RepaintGraphWindow();
+       return 0;
 }
 
 int CmdThreshold(const char *Cmd)
 {
-  int threshold = atoi(Cmd);
+       int threshold = atoi(Cmd);
 
-  for (int i = 0; i < GraphTraceLen; ++i) {
-    if (GraphBuffer[i] >= threshold)
-      GraphBuffer[i] = 1;
-    else
-      GraphBuffer[i] = -1;
-  }
-  RepaintGraphWindow();
-  return 0;
+       for (int i = 0; i < GraphTraceLen; ++i) {
+               if (GraphBuffer[i] >= threshold)
+                       GraphBuffer[i] = 1;
+               else
+                       GraphBuffer[i] = -1;
+       }
+       RepaintGraphWindow();
+       return 0;
 }
 
 int CmdDirectionalThreshold(const char *Cmd)
 {
-  int8_t upThres = param_get8(Cmd, 0);
-  int8_t downThres = param_get8(Cmd, 1);
-
-  printf("Applying Up Threshold: %d, Down Threshold: %d\n", upThres, downThres);
-
-  int lastValue = GraphBuffer[0];
-  GraphBuffer[0] = 0; // Will be changed at the end, but init 0 as we adjust to last samples value if no threshold kicks in.
-
-  for (int i = 1; i < GraphTraceLen; ++i) {
-    // Apply first threshold to samples heading up
-    if (GraphBuffer[i] >= upThres && GraphBuffer[i] > lastValue)
-    {
-      lastValue = GraphBuffer[i]; // Buffer last value as we overwrite it.
-      GraphBuffer[i] = 1;
-    }
-    // Apply second threshold to samples heading down
-    else if (GraphBuffer[i] <= downThres && GraphBuffer[i] < lastValue)
-    {
-      lastValue = GraphBuffer[i]; // Buffer last value as we overwrite it.
-      GraphBuffer[i] = -1;
-    }
-    else
-    {
-      lastValue = GraphBuffer[i]; // Buffer last value as we overwrite it.
-      GraphBuffer[i] = GraphBuffer[i-1];
-
-    }
-  }
-  GraphBuffer[0] = GraphBuffer[1]; // Aline with first edited sample.
-  RepaintGraphWindow();
-  return 0;
+       int8_t upThres = param_get8(Cmd, 0);
+       int8_t downThres = param_get8(Cmd, 1);
+
+       printf("Applying Up Threshold: %d, Down Threshold: %d\n", upThres, downThres);
+
+       int lastValue = GraphBuffer[0];
+       GraphBuffer[0] = 0; // Will be changed at the end, but init 0 as we adjust to last samples value if no threshold kicks in.
+
+       for (int i = 1; i < GraphTraceLen; ++i) {
+               // Apply first threshold to samples heading up
+               if (GraphBuffer[i] >= upThres && GraphBuffer[i] > lastValue)
+               {
+                       lastValue = GraphBuffer[i]; // Buffer last value as we overwrite it.
+                       GraphBuffer[i] = 1;
+               }
+               // Apply second threshold to samples heading down
+               else if (GraphBuffer[i] <= downThres && GraphBuffer[i] < lastValue)
+               {
+                       lastValue = GraphBuffer[i]; // Buffer last value as we overwrite it.
+                       GraphBuffer[i] = -1;
+               }
+               else
+               {
+                       lastValue = GraphBuffer[i]; // Buffer last value as we overwrite it.
+                       GraphBuffer[i] = GraphBuffer[i-1];
+
+               }
+       }
+       GraphBuffer[0] = GraphBuffer[1]; // Aline with first edited sample.
+       RepaintGraphWindow();
+       return 0;
 }
 
 int CmdZerocrossings(const char *Cmd)
 {
-  // Zero-crossings aren't meaningful unless the signal is zero-mean.
-  CmdHpf("");
-
-  int sign = 1;
-  int zc = 0;
-  int lastZc = 0;
-
-  for (int i = 0; i < GraphTraceLen; ++i) {
-    if (GraphBuffer[i] * sign >= 0) {
-      // No change in sign, reproduce the previous sample count.
-      zc++;
-      GraphBuffer[i] = lastZc;
-    } else {
-      // Change in sign, reset the sample count.
-      sign = -sign;
-      GraphBuffer[i] = lastZc;
-      if (sign > 0) {
-        lastZc = zc;
-        zc = 0;
-      }
-    }
-  }
-
-  RepaintGraphWindow();
-  return 0;
+       // Zero-crossings aren't meaningful unless the signal is zero-mean.
+       CmdHpf("");
+
+       int sign = 1;
+       int zc = 0;
+       int lastZc = 0;
+
+       for (int i = 0; i < GraphTraceLen; ++i) {
+               if (GraphBuffer[i] * sign >= 0) {
+                       // No change in sign, reproduce the previous sample count.
+                       zc++;
+                       GraphBuffer[i] = lastZc;
+               } else {
+                       // Change in sign, reset the sample count.
+                       sign = -sign;
+                       GraphBuffer[i] = lastZc;
+                       if (sign > 0) {
+                               lastZc = zc;
+                               zc = 0;
+                       }
+               }
+       }
+
+       RepaintGraphWindow();
+       return 0;
 }
 
 static command_t CommandTable[] =
 {
-  {"help",            CmdHelp,            1, "This help"},
-  {"amp",             CmdAmp,             1, "Amplify peaks"},
-  //{"askdemod",      Cmdaskdemod,        1, "<0 or 1> -- Attempt to demodulate simple ASK tags"},
-  {"askedgedetect",   CmdAskEdgeDetect,   1, "[threshold] Adjust Graph for manual ask demod using length of sample differences to detect the edge of a wave (default = 25)"},
-  {"askem410xdemod",  CmdAskEM410xDemod,  1, "[clock] [invert<0|1>] [maxErr] -- Demodulate an EM410x tag from GraphBuffer (args optional)"},
-  {"askgproxiidemod", CmdG_Prox_II_Demod, 1, "Demodulate a G Prox II tag from GraphBuffer"},
-  {"autocorr",        CmdAutoCorr,        1, "[window length] [g] -- Autocorrelation over window - g to save back to GraphBuffer (overwrite)"},
-  {"biphaserawdecode",CmdBiphaseDecodeRaw,1,"[offset] [invert<0|1>] Biphase decode bin stream in DemodBuffer (offset = 0|1 bits to shift the decode start)"},
-  {"bitsamples",      CmdBitsamples,      0, "Get raw samples as bitstring"},
-  //{"bitstream",     CmdBitstream,       1, "[clock rate] -- Convert waveform into a bitstream"},
-  {"buffclear",       CmdBuffClear,       1, "Clear sample buffer and graph window"},
-  {"dec",             CmdDec,             1, "Decimate samples"},
-  {"detectclock",     CmdDetectClockRate, 1, "[modulation] Detect clock rate of wave in GraphBuffer (options: 'a','f','n','p' for ask, fsk, nrz, psk respectively)"},
-  //{"fskdemod",      CmdFSKdemod,        1, "Demodulate graph window as a HID FSK"},
-  {"fskawiddemod",    CmdFSKdemodAWID,    1, "Demodulate an AWID FSK tag from GraphBuffer"},
-  //{"fskfcdetect",   CmdFSKfcDetect,     1, "Try to detect the Field Clock of an FSK wave"},
-  {"fskhiddemod",     CmdFSKdemodHID,     1, "Demodulate a HID FSK tag from GraphBuffer"},
-  {"fskiodemod",      CmdFSKdemodIO,      1, "Demodulate an IO Prox FSK tag from GraphBuffer"},
-  {"fskpyramiddemod", CmdFSKdemodPyramid, 1, "Demodulate a Pyramid FSK tag from GraphBuffer"},
-  {"fskparadoxdemod", CmdFSKdemodParadox, 1, "Demodulate a Paradox FSK tag from GraphBuffer"},
-  {"getbitstream",    CmdGetBitStream,    1, "Convert GraphBuffer's >=1 values to 1 and <1 to 0"},
-  {"grid",            CmdGrid,            1, "<x> <y> -- overlay grid on graph window, use zero value to turn off either"},
-  {"hexsamples",      CmdHexsamples,      0, "<bytes> [<offset>] -- Dump big buffer as hex bytes"},
-  {"hide",            CmdHide,            1, "Hide graph window"},
-  {"hpf",             CmdHpf,             1, "Remove DC offset from trace"},
-  {"load",            CmdLoad,            1, "<filename> -- Load trace (to graph window"},
-  {"ltrim",           CmdLtrim,           1, "<samples> -- Trim samples from left of trace"},
-  {"rtrim",           CmdRtrim,           1, "<location to end trace> -- Trim samples from right of trace"},
-  //{"mandemod",      CmdManchesterDemod, 1, "[i] [clock rate] -- Manchester demodulate binary stream (option 'i' to invert output)"},
-  {"manrawdecode",    Cmdmandecoderaw,    1, "Manchester decode binary stream in DemodBuffer"},
-  {"manmod",          CmdManchesterMod,   1, "[clock rate] -- Manchester modulate a binary stream"},
-  {"norm",            CmdNorm,            1, "Normalize max/min to +/-128"},
-  {"plot",            CmdPlot,            1, "Show graph window (hit 'h' in window for keystroke help)"},
-  {"printdemodbuffer",CmdPrintDemodBuff,  1, "[x] -- print the data in the DemodBuffer - 'x' for hex output"},
-  {"pskindalademod",  CmdIndalaDecode,    1, "[clock] [invert<0|1>] -- Demodulate an indala tag (PSK1) from GraphBuffer (args optional)"},
-  {"rawdemod",        CmdRawDemod,        1, "[modulation] ... <options> -see help (h option) -- Demodulate the data in the GraphBuffer and output binary"},  
-  {"samples",         CmdSamples,         0, "[512 - 40000] -- Get raw samples for graph window (GraphBuffer)"},
-  {"save",            CmdSave,            1, "<filename> -- Save trace (from graph window)"},
-  {"scale",           CmdScale,           1, "<int> -- Set cursor display scale"},
-  {"setdebugmode",    CmdSetDebugMode,    1, "<0|1> -- Turn on or off Debugging Mode for demods"},
-  {"shiftgraphzero",  CmdGraphShiftZero,  1, "<shift> -- Shift 0 for Graphed wave + or - shift value"},
-  //{"threshold",     CmdThreshold,       1, "<threshold> -- Maximize/minimize every value in the graph window depending on threshold"},
-  {"dirthreshold",    CmdDirectionalThreshold,   1, "<thres up> <thres down> -- Max rising higher up-thres/ Min falling lower down-thres, keep rest as prev."},
-  {"tune",            CmdTuneSamples,     0, "Get hw tune samples for graph window"},
-  {"undec",           CmdUndec,           1, "Un-decimate samples by 2"},
-  {"zerocrossings",   CmdZerocrossings,   1, "Count time between zero-crossings"},
-  {NULL, NULL, 0, NULL}
+       {"help",            CmdHelp,            1, "This help"},
+       {"amp",             CmdAmp,             1, "Amplify peaks"},
+       //{"askdemod",      Cmdaskdemod,        1, "<0 or 1> -- Attempt to demodulate simple ASK tags"},
+       {"askedgedetect",   CmdAskEdgeDetect,   1, "[threshold] Adjust Graph for manual ask demod using length of sample differences to detect the edge of a wave (default = 25)"},
+       {"askem410xdemod",  CmdAskEM410xDemod,  1, "[clock] [invert<0|1>] [maxErr] -- Demodulate an EM410x tag from GraphBuffer (args optional)"},
+       {"askgproxiidemod", CmdG_Prox_II_Demod, 1, "Demodulate a G Prox II tag from GraphBuffer"},
+       {"autocorr",        CmdAutoCorr,        1, "[window length] [g] -- Autocorrelation over window - g to save back to GraphBuffer (overwrite)"},
+       {"biphaserawdecode",CmdBiphaseDecodeRaw,1,"[offset] [invert<0|1>] Biphase decode bin stream in DemodBuffer (offset = 0|1 bits to shift the decode start)"},
+       {"bitsamples",      CmdBitsamples,      0, "Get raw samples as bitstring"},
+       //{"bitstream",     CmdBitstream,       1, "[clock rate] -- Convert waveform into a bitstream"},
+       {"buffclear",       CmdBuffClear,       1, "Clear sample buffer and graph window"},
+       {"dec",             CmdDec,             1, "Decimate samples"},
+       {"detectclock",     CmdDetectClockRate, 1, "[modulation] Detect clock rate of wave in GraphBuffer (options: 'a','f','n','p' for ask, fsk, nrz, psk respectively)"},
+       //{"fskdemod",      CmdFSKdemod,        1, "Demodulate graph window as a HID FSK"},
+       {"fskawiddemod",    CmdFSKdemodAWID,    1, "Demodulate an AWID FSK tag from GraphBuffer"},
+       //{"fskfcdetect",   CmdFSKfcDetect,     1, "Try to detect the Field Clock of an FSK wave"},
+       {"fskhiddemod",     CmdFSKdemodHID,     1, "Demodulate a HID FSK tag from GraphBuffer"},
+       {"fskiodemod",      CmdFSKdemodIO,      1, "Demodulate an IO Prox FSK tag from GraphBuffer"},
+       {"fskpyramiddemod", CmdFSKdemodPyramid, 1, "Demodulate a Pyramid FSK tag from GraphBuffer"},
+       {"fskparadoxdemod", CmdFSKdemodParadox, 1, "Demodulate a Paradox FSK tag from GraphBuffer"},
+       {"getbitstream",    CmdGetBitStream,    1, "Convert GraphBuffer's >=1 values to 1 and <1 to 0"},
+       {"grid",            CmdGrid,            1, "<x> <y> -- overlay grid on graph window, use zero value to turn off either"},
+       {"hexsamples",      CmdHexsamples,      0, "<bytes> [<offset>] -- Dump big buffer as hex bytes"},
+       {"hide",            CmdHide,            1, "Hide graph window"},
+       {"hpf",             CmdHpf,             1, "Remove DC offset from trace"},
+       {"load",            CmdLoad,            1, "<filename> -- Load trace (to graph window"},
+       {"ltrim",           CmdLtrim,           1, "<samples> -- Trim samples from left of trace"},
+       {"rtrim",           CmdRtrim,           1, "<location to end trace> -- Trim samples from right of trace"},
+       //{"mandemod",      CmdManchesterDemod, 1, "[i] [clock rate] -- Manchester demodulate binary stream (option 'i' to invert output)"},
+       {"manrawdecode",    Cmdmandecoderaw,    1, "Manchester decode binary stream in DemodBuffer"},
+       {"manmod",          CmdManchesterMod,   1, "[clock rate] -- Manchester modulate a binary stream"},
+       {"norm",            CmdNorm,            1, "Normalize max/min to +/-128"},
+       {"plot",            CmdPlot,            1, "Show graph window (hit 'h' in window for keystroke help)"},
+       {"printdemodbuffer",CmdPrintDemodBuff,  1, "[x] -- print the data in the DemodBuffer - 'x' for hex output"},
+       {"pskindalademod",  CmdIndalaDecode,    1, "[clock] [invert<0|1>] -- Demodulate an indala tag (PSK1) from GraphBuffer (args optional)"},
+       {"rawdemod",        CmdRawDemod,        1, "[modulation] ... <options> -see help (h option) -- Demodulate the data in the GraphBuffer and output binary"},  
+       {"samples",         CmdSamples,         0, "[512 - 40000] -- Get raw samples for graph window (GraphBuffer)"},
+       {"save",            CmdSave,            1, "<filename> -- Save trace (from graph window)"},
+       {"scale",           CmdScale,           1, "<int> -- Set cursor display scale"},
+       {"setdebugmode",    CmdSetDebugMode,    1, "<0|1> -- Turn on or off Debugging Mode for demods"},
+       {"shiftgraphzero",  CmdGraphShiftZero,  1, "<shift> -- Shift 0 for Graphed wave + or - shift value"},
+       //{"threshold",     CmdThreshold,       1, "<threshold> -- Maximize/minimize every value in the graph window depending on threshold"},
+       {"dirthreshold",    CmdDirectionalThreshold,   1, "<thres up> <thres down> -- Max rising higher up-thres/ Min falling lower down-thres, keep rest as prev."},
+       {"tune",            CmdTuneSamples,     0, "Get hw tune samples for graph window"},
+       {"undec",           CmdUndec,           1, "Un-decimate samples by 2"},
+       {"zerocrossings",   CmdZerocrossings,   1, "Count time between zero-crossings"},
+       {NULL, NULL, 0, NULL}
 };
 
 int CmdData(const char *Cmd)
 {
-  CmdsParse(CommandTable, Cmd);
-  return 0;
+       CmdsParse(CommandTable, Cmd);
+       return 0;
 }
 
 int CmdHelp(const char *Cmd)
 {
-  CmdsHelp(CommandTable);
-  return 0;
+       CmdsHelp(CommandTable);
+       return 0;
 }
index 31f7ba973f8d2a956194d9152fdf65584b3f76a7..44b074b35cc8de0acb1ee65c42b25a9f93a0d442 100644 (file)
@@ -30,6 +30,7 @@
 #include "loclass/elite_crack.h"
 #include "loclass/fileutils.h"
 #include "protocols.h"
+#include "usb_cmd.h"
 
 static int CmdHelp(const char *Cmd);
 
@@ -166,29 +167,25 @@ int CmdHFiClassSim(const char *Cmd)
 
 int CmdHFiClassReader(const char *Cmd)
 {
-       UsbCommand c = {CMD_READER_ICLASS, {0}};
+       UsbCommand c = {CMD_READER_ICLASS, {FLAG_ICLASS_READER_CSN|
+                                       FLAG_ICLASS_READER_CONF|FLAG_ICLASS_READER_AA}};
        SendCommand(&c);
        UsbCommand resp;
        while(!ukbhit()){
                if (WaitForResponseTimeout(CMD_ACK,&resp,4500)) {
-                       uint8_t isOK    = resp.arg[0] & 0xff;
+                       uint8_t readStatus    = resp.arg[0] & 0xff;
                        uint8_t * data  = resp.d.asBytes;
 
-                       PrintAndLog("isOk:%02x", isOK);
-                       if( isOK == 0){
+                       PrintAndLog("Readstatus:%02x", readStatus);
+                       if( readStatus == 0){
                                //Aborted
                                PrintAndLog("Quitting...");
                                return 0;
                        }
-                       if(isOK > 0)
-                       {
-                               PrintAndLog("CSN: %s",sprint_hex(data,8));
-                       }
-                       if(isOK >= 1)
-                       {
-                               PrintAndLog("CC: %s",sprint_hex(data+8,8));
-                       }else{
-                               PrintAndLog("No CC obtained");
+                       if( readStatus & FLAG_ICLASS_READER_CSN) PrintAndLog("CSN: %s",sprint_hex(data,8));
+                       if( readStatus & FLAG_ICLASS_READER_CC)  PrintAndLog("CC: %s",sprint_hex(data+16,8));
+                       if( readStatus & FLAG_ICLASS_READER_CONF){
+                               printIclassDumpInfo(data);
                        }
                } else {
                        PrintAndLog("Command execute timeout");
@@ -269,7 +266,7 @@ int CmdHFiClassReader_Dump(const char *Cmd)
        uint8_t key_sel_p[8] = { 0 };
 
        UsbCommand c = {CMD_READER_ICLASS, {0}};
-       c.arg[0] = FLAG_ICLASS_READER_ONLY_ONCE| FLAG_ICLASS_READER_GET_CC;
+       c.arg[0] = FLAG_ICLASS_READER_ONLY_ONCE| FLAG_ICLASS_READER_CC;
        SendCommand(&c);
 
 
@@ -284,7 +281,7 @@ int CmdHFiClassReader_Dump(const char *Cmd)
        uint8_t * data  = resp.d.asBytes;
 
        memcpy(CSN,data,8);
-       memcpy(CCNR,data+8,8);
+       memcpy(CCNR,data+16,8);
 
        PrintAndLog("isOk:%02x", isOK);
 
index 190dfe8f731dc9fbcd1a299261312e02c409b569..f4acc579298317a07dfd8e9b1ed315e05442738d 100644 (file)
@@ -146,7 +146,7 @@ uint8_t GetPskCarrier(const char str[], bool printAns, bool verbose)
        }
        //uint8_t countPSK_FC(uint8_t *BitStream, size_t size)
 
-       carrier = countPSK_FC(grph,size);
+       carrier = countFC(grph,size,0);
        // Only print this message if we're not looping something
        if (printAns){
                PrintAndLog("Auto-detected PSK carrier rate: %d", carrier);
@@ -232,8 +232,7 @@ uint8_t fskClocks(uint8_t *fc1, uint8_t *fc2, uint8_t *rf1, bool verbose)
        uint8_t BitStream[MAX_GRAPH_TRACE_LEN]={0};
        size_t size = getFromGraphBuf(BitStream);
        if (size==0) return 0;
-       uint8_t dummy = 0;
-       uint16_t ans = countFC(BitStream, size, &dummy); 
+       uint16_t ans = countFC(BitStream, size, 1); 
        if (ans==0) {
                if (verbose) PrintAndLog("DEBUG: No data found");
                return 0;
index f1b63550df86f05f50625a4e0fb2be5891d506c7..c1a48dfc5bc8903e3350349eb603fe45d8c97cf8 100644 (file)
@@ -14,6 +14,7 @@ MEMORY
        bootphase1 : ORIGIN = 0x00100000, LENGTH = 0x200             /* Phase 1 bootloader: Copies real bootloader to RAM */
        bootphase2 : ORIGIN = 0x00100200, LENGTH = 0x2000 - 0x200    /* Main bootloader code, stored in Flash, executed from RAM */
        fpgaimage  : ORIGIN = 0x00102000, LENGTH = 96k - 0x2000      /* Place where the FPGA image will end up */
+       //osimage    : ORIGIN = 0x00118000, LENGTH = 256K - 96k        /* Place where the main OS will end up */
        osimage    : ORIGIN = 0x00118000, LENGTH = 256K - 96k        /* Place where the main OS will end up */
        ram        : ORIGIN = 0x00200000, LENGTH = 64K - 0x20        /* RAM, minus small common area */
        commonarea : ORIGIN = 0x00200000 + 64K - 0x20, LENGTH = 0x20 /* Communication between bootloader and main OS */
index 3305c8b0c53e84adb4cdd992c28c3a51fac531b2..fae612060b462392bd4e1e99457b4d40577a2b01 100644 (file)
@@ -58,69 +58,65 @@ uint8_t parityTest(uint32_t bits, uint8_t bitLen, uint8_t pType)
 //search for given preamble in given BitStream and return success=1 or fail=0 and startIndex and length
 uint8_t preambleSearch(uint8_t *BitStream, uint8_t *preamble, size_t pLen, size_t *size, size_t *startIdx)
 {
-  uint8_t foundCnt=0;
-  for (int idx=0; idx < *size - pLen; idx++){
-    if (memcmp(BitStream+idx, preamble, pLen) == 0){
-      //first index found
-      foundCnt++;
-      if (foundCnt == 1){
-        *startIdx = idx;
-      }
-      if (foundCnt == 2){
-        *size = idx - *startIdx;
-        return 1;
-      }
-    }
-  }
-  return 0;
+       uint8_t foundCnt=0;
+       for (int idx=0; idx < *size - pLen; idx++){
+               if (memcmp(BitStream+idx, preamble, pLen) == 0){
+                       //first index found
+                       foundCnt++;
+                       if (foundCnt == 1){
+                               *startIdx = idx;
+                       }
+                       if (foundCnt == 2){
+                               *size = idx - *startIdx;
+                               return 1;
+                       }
+               }
+       }
+       return 0;
 }
 
 //by marshmellow
 //takes 1s and 0s and searches for EM410x format - output EM ID
 uint8_t Em410xDecode(uint8_t *BitStream, size_t *size, size_t *startIdx, uint32_t *hi, uint64_t *lo)
 {
-  //no arguments needed - built this way in case we want this to be a direct call from "data " cmds in the future
-  //  otherwise could be a void with no arguments
-  //set defaults
-  uint32_t i = 0;
-  if (BitStream[1]>1){  //allow only 1s and 0s
-    // PrintAndLog("no data found");
-    return 0;
-  }
-  // 111111111 bit pattern represent start of frame
-  uint8_t preamble[] = {1,1,1,1,1,1,1,1,1};
-  uint32_t idx = 0;
-  uint32_t parityBits = 0;
-  uint8_t errChk = 0;
-  uint8_t FmtLen = 10;
-  *startIdx = 0;
-  for (uint8_t extraBitChk=0; extraBitChk<5; extraBitChk++){
-    errChk = preambleSearch(BitStream+extraBitChk+*startIdx, preamble, sizeof(preamble), size, startIdx);
-    if (errChk == 0) return 0;
-       if (*size<64) return 0;
-    if (*size>64) FmtLen = 22;
-    if (*size<64) return 0;
-    idx = *startIdx + 9;
-    for (i=0; i<FmtLen; i++){ //loop through 10 or 22 sets of 5 bits (50-10p = 40 bits or 88 bits)
-      parityBits = bytebits_to_byte(BitStream+(i*5)+idx,5);
-      //check even parity
-      if (parityTest(parityBits, 5, 0) == 0){
-        //parity failed try next bit (in the case of 1111111111) but last 9 = preamble
-        startIdx++;
-        errChk = 0;
-        break;
-      }
-      //set uint64 with ID from BitStream
-      for (uint8_t ii=0; ii<4; ii++){
-        *hi = (*hi << 1) | (*lo >> 63);
-        *lo = (*lo << 1) | (BitStream[(i*5)+ii+idx]);
-      }
-    }
-    if (errChk != 0) return 1;
-    //skip last 5 bit parity test for simplicity.
-    // *size = 64 | 128;
-  }
-  return 0;
+       //no arguments needed - built this way in case we want this to be a direct call from "data " cmds in the future
+       //  otherwise could be a void with no arguments
+       //set defaults
+       uint32_t i = 0;
+       if (BitStream[1]>1){  //allow only 1s and 0s
+               // PrintAndLog("no data found");
+               return 0;
+       }
+       // 111111111 bit pattern represent start of frame
+       //  include 0 in front to help get start pos
+       uint8_t preamble[] = {0,1,1,1,1,1,1,1,1,1};
+       uint32_t idx = 0;
+       uint32_t parityBits = 0;
+       uint8_t errChk = 0;
+       uint8_t FmtLen = 10;
+       *startIdx = 0;
+       errChk = preambleSearch(BitStream, preamble, sizeof(preamble), size, startIdx);
+       if (errChk == 0 || *size < 64) return 0;
+       if (*size > 64) FmtLen = 22;
+       *startIdx += 1; //get rid of 0 from preamble
+       idx = *startIdx + 9;
+       for (i=0; i<FmtLen; i++){ //loop through 10 or 22 sets of 5 bits (50-10p = 40 bits or 88 bits)
+               parityBits = bytebits_to_byte(BitStream+(i*5)+idx,5);
+               //check even parity
+               if (parityTest(parityBits, 5, 0) == 0){
+                       //parity failed quit
+                       return 0;
+               }
+               //set uint64 with ID from BitStream
+               for (uint8_t ii=0; ii<4; ii++){
+                       *hi = (*hi << 1) | (*lo >> 63);
+                       *lo = (*lo << 1) | (BitStream[(i*5)+ii+idx]);
+               }
+       }
+       if (errChk != 0) return 1;
+       //skip last 5 bit parity test for simplicity.
+       // *size = 64 | 128;
+       return 0;
 }
 
 //by marshmellow
@@ -447,9 +443,9 @@ int askrawdemod(uint8_t *BinStream, size_t *size, int *clk, int *invert, int max
        int lastBit = 0;  //set first clock check
        uint32_t bitnum = 0;     //output counter
        uint8_t tol = 0;  //clock tolerance adjust - waves will be accepted as within the clock
-                         //  if they fall + or - this value + clock from last valid wave
+                                                                               //  if they fall + or - this value + clock from last valid wave
        if (*clk == 32) tol=0;    //clock tolerance may not be needed anymore currently set to
-                                 //  + or - 1 but could be increased for poor waves or removed entirely
+                                                                                                               //  + or - 1 but could be increased for poor waves or removed entirely
        uint32_t iii = 0;
        uint32_t gLen = *size;
        if (gLen > 500) gLen=500;
@@ -651,7 +647,7 @@ uint32_t myround2(float f)
 
 //translate 11111100000 to 10
 size_t aggregate_bits(uint8_t *dest, size_t size, uint8_t rfLen, uint8_t maxConsequtiveBits,
-    uint8_t invert, uint8_t fchigh, uint8_t fclow)
+               uint8_t invert, uint8_t fchigh, uint8_t fclow)
 {
        uint8_t lastval=dest[0];
        uint32_t idx=0;
@@ -723,33 +719,33 @@ int fskdemod(uint8_t *dest, size_t size, uint8_t rfLen, uint8_t invert, uint8_t
 // loop to get raw HID waveform then FSK demodulate the TAG ID from it
 int HIDdemodFSK(uint8_t *dest, size_t *size, uint32_t *hi2, uint32_t *hi, uint32_t *lo)
 {
-  if (justNoise(dest, *size)) return -1;
-
-  size_t numStart=0, size2=*size, startIdx=0; 
-  // FSK demodulator
-  *size = fskdemod(dest, size2,50,1,10,8); //fsk2a
-  if (*size < 96) return -2;
-  // 00011101 bit pattern represent start of frame, 01 pattern represents a 0 and 10 represents a 1
-  uint8_t preamble[] = {0,0,0,1,1,1,0,1};
-  // find bitstring in array  
-  uint8_t errChk = preambleSearch(dest, preamble, sizeof(preamble), size, &startIdx);
-  if (errChk == 0) return -3; //preamble not found
-
-  numStart = startIdx + sizeof(preamble);
-  // final loop, go over previously decoded FSK data and manchester decode into usable tag ID
-  for (size_t idx = numStart; (idx-numStart) < *size - sizeof(preamble); idx+=2){
-    if (dest[idx] == dest[idx+1]){
-      return -4; //not manchester data
-    }
-    *hi2 = (*hi2<<1)|(*hi>>31);
-    *hi = (*hi<<1)|(*lo>>31);
-    //Then, shift in a 0 or one into low
-    if (dest[idx] && !dest[idx+1])  // 1 0
-      *lo=(*lo<<1)|1;
-    else // 0 1
-      *lo=(*lo<<1)|0;
-  }
-  return (int)startIdx;
+       if (justNoise(dest, *size)) return -1;
+
+       size_t numStart=0, size2=*size, startIdx=0; 
+       // FSK demodulator
+       *size = fskdemod(dest, size2,50,1,10,8); //fsk2a
+       if (*size < 96) return -2;
+       // 00011101 bit pattern represent start of frame, 01 pattern represents a 0 and 10 represents a 1
+       uint8_t preamble[] = {0,0,0,1,1,1,0,1};
+       // find bitstring in array  
+       uint8_t errChk = preambleSearch(dest, preamble, sizeof(preamble), size, &startIdx);
+       if (errChk == 0) return -3; //preamble not found
+
+       numStart = startIdx + sizeof(preamble);
+       // final loop, go over previously decoded FSK data and manchester decode into usable tag ID
+       for (size_t idx = numStart; (idx-numStart) < *size - sizeof(preamble); idx+=2){
+               if (dest[idx] == dest[idx+1]){
+                       return -4; //not manchester data
+               }
+               *hi2 = (*hi2<<1)|(*hi>>31);
+               *hi = (*hi<<1)|(*lo>>31);
+               //Then, shift in a 0 or one into low
+               if (dest[idx] && !dest[idx+1])  // 1 0
+                       *lo=(*lo<<1)|1;
+               else // 0 1
+                       *lo=(*lo<<1)|0;
+       }
+       return (int)startIdx;
 }
 
 // loop to get raw paradox waveform then FSK demodulate the TAG ID from it
@@ -913,7 +909,7 @@ uint8_t DetectCleanAskWave(uint8_t dest[], size_t size, int high, int low)
 int DetectStrongAskClock(uint8_t dest[], size_t size)
 {
        int clk[]={0,8,16,32,40,50,64,100,128,256};
-  size_t idx = 40;
+       size_t idx = 40;
        uint8_t high=0;
        size_t cnt = 0;
        size_t highCnt = 0;
@@ -964,87 +960,87 @@ int DetectStrongAskClock(uint8_t dest[], size_t size)
 // return start index of best starting position for that clock and return clock (by reference)
 int DetectASKClock(uint8_t dest[], size_t size, int *clock, int maxErr)
 {
-  int i=0;
-  int clk[]={8,16,32,40,50,64,100,128,256};
-  int loopCnt = 256;  //don't need to loop through entire array...
-  if (size == 0) return -1;
-  if (size<loopCnt) loopCnt = size;
-  //if we already have a valid clock quit
-  
-  for (;i<8;++i)
-    if (clk[i] == *clock) return 0;
-
-  //get high and low peak
-  int peak, low;
-  getHiLo(dest, loopCnt, &peak, &low, 75, 75);
-  
-  //test for large clean peaks
-  if (DetectCleanAskWave(dest, size, peak, low)==1){
-       int ans = DetectStrongAskClock(dest, size);
-         for (i=7; i>0; i--){
-               if (clk[i] == ans) {
-                       *clock=ans;
-                       return 0;
-               }
-         }
-  }
-  int ii;
-  int clkCnt;
-  int tol = 0;
-  int bestErr[]={1000,1000,1000,1000,1000,1000,1000,1000,1000};
-  int bestStart[]={0,0,0,0,0,0,0,0,0};
-  int errCnt=0;
-  //test each valid clock from smallest to greatest to see which lines up
-  for(clkCnt=0; clkCnt < 8; clkCnt++){
-    if (clk[clkCnt] == 32){
-      tol=1;
-    }else{
-      tol=0;
-    }
-       if (!maxErr) loopCnt=clk[clkCnt]*2;
-    bestErr[clkCnt]=1000;
-    //try lining up the peaks by moving starting point (try first 256)
-    for (ii=0; ii < loopCnt; ii++){
-      if ((dest[ii] >= peak) || (dest[ii] <= low)){
-        errCnt=0;
-        // now that we have the first one lined up test rest of wave array
-        for (i=0; i<((int)((size-ii-tol)/clk[clkCnt])-1); ++i){
-          if (dest[ii+(i*clk[clkCnt])]>=peak || dest[ii+(i*clk[clkCnt])]<=low){
-          }else if(dest[ii+(i*clk[clkCnt])-tol]>=peak || dest[ii+(i*clk[clkCnt])-tol]<=low){
-          }else if(dest[ii+(i*clk[clkCnt])+tol]>=peak || dest[ii+(i*clk[clkCnt])+tol]<=low){
-          }else{  //error no peak detected
-            errCnt++;
-          }
-        }
-        //if we found no errors then we can stop here
-        //  this is correct one - return this clock
-            //PrintAndLog("DEBUG: clk %d, err %d, ii %d, i %d",clk[clkCnt],errCnt,ii,i);
-        if(errCnt==0 && clkCnt<6) {
-          *clock = clk[clkCnt];
-          return ii;
-        }
-        //if we found errors see if it is lowest so far and save it as best run
-        if(errCnt<bestErr[clkCnt]){
-          bestErr[clkCnt]=errCnt;
-          bestStart[clkCnt]=ii;
-        }
-      }
-    }
-  }
-  uint8_t iii=0;
-  uint8_t best=0;
-  for (iii=0; iii<8; ++iii){
-    if (bestErr[iii]<bestErr[best]){
-      if (bestErr[iii]==0) bestErr[iii]=1;
-      // current best bit to error ratio     vs  new bit to error ratio
-      if (((size/clk[best])/bestErr[best] < (size/clk[iii])/bestErr[iii]) ){
-        best = iii;
-      }
-    }
-  }
-  if (bestErr[best]>maxErr) return -1;
-  *clock=clk[best];
-  return bestStart[best];
+       int i=0;
+       int clk[]={8,16,32,40,50,64,100,128,256};
+       int loopCnt = 256;  //don't need to loop through entire array...
+       if (size == 0) return -1;
+       if (size<loopCnt) loopCnt = size;
+       //if we already have a valid clock quit
+       
+       for (;i<8;++i)
+               if (clk[i] == *clock) return 0;
+
+       //get high and low peak
+       int peak, low;
+       getHiLo(dest, loopCnt, &peak, &low, 75, 75);
+       
+       //test for large clean peaks
+       if (DetectCleanAskWave(dest, size, peak, low)==1){
+               int ans = DetectStrongAskClock(dest, size);
+               for (i=7; i>0; i--){
+                       if (clk[i] == ans) {
+                               *clock=ans;
+                               return 0;
+                       }
+               }
+       }
+       int ii;
+       int clkCnt;
+       int tol = 0;
+       int bestErr[]={1000,1000,1000,1000,1000,1000,1000,1000,1000};
+       int bestStart[]={0,0,0,0,0,0,0,0,0};
+       int errCnt=0;
+       //test each valid clock from smallest to greatest to see which lines up
+       for(clkCnt=0; clkCnt < 8; clkCnt++){
+               if (clk[clkCnt] == 32){
+                       tol=1;
+               }else{
+                       tol=0;
+               }
+               if (!maxErr) loopCnt=clk[clkCnt]*2;
+               bestErr[clkCnt]=1000;
+               //try lining up the peaks by moving starting point (try first 256)
+               for (ii=0; ii < loopCnt; ii++){
+                       if ((dest[ii] >= peak) || (dest[ii] <= low)){
+                               errCnt=0;
+                               // now that we have the first one lined up test rest of wave array
+                               for (i=0; i<((int)((size-ii-tol)/clk[clkCnt])-1); ++i){
+                                       if (dest[ii+(i*clk[clkCnt])]>=peak || dest[ii+(i*clk[clkCnt])]<=low){
+                                       }else if(dest[ii+(i*clk[clkCnt])-tol]>=peak || dest[ii+(i*clk[clkCnt])-tol]<=low){
+                                       }else if(dest[ii+(i*clk[clkCnt])+tol]>=peak || dest[ii+(i*clk[clkCnt])+tol]<=low){
+                                       }else{  //error no peak detected
+                                               errCnt++;
+                                       }
+                               }
+                               //if we found no errors then we can stop here
+                               //  this is correct one - return this clock
+                                               //PrintAndLog("DEBUG: clk %d, err %d, ii %d, i %d",clk[clkCnt],errCnt,ii,i);
+                               if(errCnt==0 && clkCnt<6) {
+                                       *clock = clk[clkCnt];
+                                       return ii;
+                               }
+                               //if we found errors see if it is lowest so far and save it as best run
+                               if(errCnt<bestErr[clkCnt]){
+                                       bestErr[clkCnt]=errCnt;
+                                       bestStart[clkCnt]=ii;
+                               }
+                       }
+               }
+       }
+       uint8_t iii=0;
+       uint8_t best=0;
+       for (iii=0; iii<8; ++iii){
+               if (bestErr[iii]<bestErr[best]){
+                       if (bestErr[iii]==0) bestErr[iii]=1;
+                       // current best bit to error ratio     vs  new bit to error ratio
+                       if (((size/clk[best])/bestErr[best] < (size/clk[iii])/bestErr[iii]) ){
+                               best = iii;
+                       }
+               }
+       }
+       if (bestErr[best]>maxErr) return -1;
+       *clock=clk[best];
+       return bestStart[best];
 }
 
 //by marshmellow
@@ -1052,165 +1048,165 @@ int DetectASKClock(uint8_t dest[], size_t size, int *clock, int maxErr)
 // a phase shift is determined by measuring the sample length of each wave
 int DetectPSKClock(uint8_t dest[], size_t size, int clock)
 {
-  uint8_t clk[]={255,16,32,40,50,64,100,128,255}; //255 is not a valid clock
-  uint16_t loopCnt = 4096;  //don't need to loop through entire array...
-  if (size == 0) return 0;
-  if (size<loopCnt) loopCnt = size;
-
-  //if we already have a valid clock quit
-  size_t i=1;
-  for (; i < 8; ++i)
-    if (clk[i] == clock) return clock;
-
-  size_t waveStart=0, waveEnd=0, firstFullWave=0, lastClkBit=0;
-  uint8_t clkCnt, fc=0, fullWaveLen=0, tol=1;
-  uint16_t peakcnt=0, errCnt=0, waveLenCnt=0;
-  uint16_t bestErr[]={1000,1000,1000,1000,1000,1000,1000,1000,1000};
-  uint16_t peaksdet[]={0,0,0,0,0,0,0,0,0};
-  countFC(dest, size, &fc);
-  //PrintAndLog("DEBUG: FC: %d",fc);
-
-  //find first full wave
-  for (i=0; i<loopCnt; i++){
-    if (dest[i] < dest[i+1] && dest[i+1] >= dest[i+2]){
-      if (waveStart == 0) {
-        waveStart = i+1;
-        //PrintAndLog("DEBUG: waveStart: %d",waveStart);
-      } else {
-        waveEnd = i+1;
-        //PrintAndLog("DEBUG: waveEnd: %d",waveEnd);
-        waveLenCnt = waveEnd-waveStart;
-        if (waveLenCnt > fc){
-          firstFullWave = waveStart;
-          fullWaveLen=waveLenCnt;
-          break;
-        } 
-        waveStart=0;
-      }
-    }
-  }
-  //PrintAndLog("DEBUG: firstFullWave: %d, waveLen: %d",firstFullWave,fullWaveLen);
-  
-  //test each valid clock from greatest to smallest to see which lines up
-  for(clkCnt=7; clkCnt >= 1 ; clkCnt--){
-    lastClkBit = firstFullWave; //set end of wave as clock align
-    waveStart = 0;
-    errCnt=0;
-    peakcnt=0;
-    //PrintAndLog("DEBUG: clk: %d, lastClkBit: %d",clk[clkCnt],lastClkBit);
-
-    for (i = firstFullWave+fullWaveLen-1; i < loopCnt-2; i++){
-      //top edge of wave = start of new wave 
-      if (dest[i] < dest[i+1] && dest[i+1] >= dest[i+2]){
-        if (waveStart == 0) {
-          waveStart = i+1;
-          waveLenCnt=0;
-        } else { //waveEnd
-          waveEnd = i+1;
-          waveLenCnt = waveEnd-waveStart;
-          if (waveLenCnt > fc){ 
-            //if this wave is a phase shift
-            //PrintAndLog("DEBUG: phase shift at: %d, len: %d, nextClk: %d, ii: %d, fc: %d",waveStart,waveLenCnt,lastClkBit+clk[clkCnt]-tol,ii+1,fc);
-            if (i+1 >= lastClkBit + clk[clkCnt] - tol){ //should be a clock bit
-              peakcnt++;
-              lastClkBit+=clk[clkCnt];
-            } else if (i<lastClkBit+8){
-              //noise after a phase shift - ignore
-            } else { //phase shift before supposed to based on clock
-              errCnt++;
-            }
-          } else if (i+1 > lastClkBit + clk[clkCnt] + tol + fc){
-            lastClkBit+=clk[clkCnt]; //no phase shift but clock bit
-          }
-          waveStart=i+1;
-        }
-      }
-    }
-    if (errCnt == 0){
-      return clk[clkCnt];
-    }
-    if (errCnt <= bestErr[clkCnt]) bestErr[clkCnt]=errCnt;
-    if (peakcnt > peaksdet[clkCnt]) peaksdet[clkCnt]=peakcnt;
-  } 
-  //all tested with errors 
-  //return the highest clk with the most peaks found
-  uint8_t best=7;
-  for (i=7; i>=1; i--){
-    if (peaksdet[i] > peaksdet[best]) {
-      best = i;
-    }
-    //PrintAndLog("DEBUG: Clk: %d, peaks: %d, errs: %d, bestClk: %d",clk[iii],peaksdet[iii],bestErr[iii],clk[best]);
-  }
-  return clk[best];
+       uint8_t clk[]={255,16,32,40,50,64,100,128,255}; //255 is not a valid clock
+       uint16_t loopCnt = 4096;  //don't need to loop through entire array...
+       if (size == 0) return 0;
+       if (size<loopCnt) loopCnt = size;
+
+       //if we already have a valid clock quit
+       size_t i=1;
+       for (; i < 8; ++i)
+               if (clk[i] == clock) return clock;
+
+       size_t waveStart=0, waveEnd=0, firstFullWave=0, lastClkBit=0;
+       uint8_t clkCnt, fc=0, fullWaveLen=0, tol=1;
+       uint16_t peakcnt=0, errCnt=0, waveLenCnt=0;
+       uint16_t bestErr[]={1000,1000,1000,1000,1000,1000,1000,1000,1000};
+       uint16_t peaksdet[]={0,0,0,0,0,0,0,0,0};
+       countFC(dest, size, &fc);
+       //PrintAndLog("DEBUG: FC: %d",fc);
+
+       //find first full wave
+       for (i=0; i<loopCnt; i++){
+               if (dest[i] < dest[i+1] && dest[i+1] >= dest[i+2]){
+                       if (waveStart == 0) {
+                               waveStart = i+1;
+                               //PrintAndLog("DEBUG: waveStart: %d",waveStart);
+                       } else {
+                               waveEnd = i+1;
+                               //PrintAndLog("DEBUG: waveEnd: %d",waveEnd);
+                               waveLenCnt = waveEnd-waveStart;
+                               if (waveLenCnt > fc){
+                                       firstFullWave = waveStart;
+                                       fullWaveLen=waveLenCnt;
+                                       break;
+                               
+                               waveStart=0;
+                       }
+               }
+       }
+       //PrintAndLog("DEBUG: firstFullWave: %d, waveLen: %d",firstFullWave,fullWaveLen);
+       
+       //test each valid clock from greatest to smallest to see which lines up
+       for(clkCnt=7; clkCnt >= 1 ; clkCnt--){
+               lastClkBit = firstFullWave; //set end of wave as clock align
+               waveStart = 0;
+               errCnt=0;
+               peakcnt=0;
+               //PrintAndLog("DEBUG: clk: %d, lastClkBit: %d",clk[clkCnt],lastClkBit);
+
+               for (i = firstFullWave+fullWaveLen-1; i < loopCnt-2; i++){
+                       //top edge of wave = start of new wave 
+                       if (dest[i] < dest[i+1] && dest[i+1] >= dest[i+2]){
+                               if (waveStart == 0) {
+                                       waveStart = i+1;
+                                       waveLenCnt=0;
+                               } else { //waveEnd
+                                       waveEnd = i+1;
+                                       waveLenCnt = waveEnd-waveStart;
+                                       if (waveLenCnt > fc){ 
+                                               //if this wave is a phase shift
+                                               //PrintAndLog("DEBUG: phase shift at: %d, len: %d, nextClk: %d, ii: %d, fc: %d",waveStart,waveLenCnt,lastClkBit+clk[clkCnt]-tol,ii+1,fc);
+                                               if (i+1 >= lastClkBit + clk[clkCnt] - tol){ //should be a clock bit
+                                                       peakcnt++;
+                                                       lastClkBit+=clk[clkCnt];
+                                               } else if (i<lastClkBit+8){
+                                                       //noise after a phase shift - ignore
+                                               } else { //phase shift before supposed to based on clock
+                                                       errCnt++;
+                                               }
+                                       } else if (i+1 > lastClkBit + clk[clkCnt] + tol + fc){
+                                               lastClkBit+=clk[clkCnt]; //no phase shift but clock bit
+                                       }
+                                       waveStart=i+1;
+                               }
+                       }
+               }
+               if (errCnt == 0){
+                       return clk[clkCnt];
+               }
+               if (errCnt <= bestErr[clkCnt]) bestErr[clkCnt]=errCnt;
+               if (peakcnt > peaksdet[clkCnt]) peaksdet[clkCnt]=peakcnt;
+       
+       //all tested with errors 
+       //return the highest clk with the most peaks found
+       uint8_t best=7;
+       for (i=7; i>=1; i--){
+               if (peaksdet[i] > peaksdet[best]) {
+                       best = i;
+               }
+               //PrintAndLog("DEBUG: Clk: %d, peaks: %d, errs: %d, bestClk: %d",clk[iii],peaksdet[iii],bestErr[iii],clk[best]);
+       }
+       return clk[best];
 }
 
 //by marshmellow
 //detect nrz clock by reading #peaks vs no peaks(or errors)
 int DetectNRZClock(uint8_t dest[], size_t size, int clock)
 {
-  int i=0;
-  int clk[]={8,16,32,40,50,64,100,128,256};
-  int loopCnt = 4096;  //don't need to loop through entire array...
-  if (size == 0) return 0;
-  if (size<loopCnt) loopCnt = size;
-
-  //if we already have a valid clock quit
-  for (; i < 8; ++i)
-    if (clk[i] == clock) return clock;
-
-  //get high and low peak
-  int peak, low;
-  getHiLo(dest, loopCnt, &peak, &low, 75, 75);
-
-  //PrintAndLog("DEBUG: peak: %d, low: %d",peak,low);
-  int ii;
-  uint8_t clkCnt;
-  uint8_t tol = 0;
-  int peakcnt=0;
-  int peaksdet[]={0,0,0,0,0,0,0,0};
-  int maxPeak=0;
-  //test for large clipped waves
-  for (i=0; i<loopCnt; i++){
-       if (dest[i] >= peak || dest[i] <= low){
-               peakcnt++;
-       } else {
-               if (peakcnt>0 && maxPeak < peakcnt){
-                       maxPeak = peakcnt;
-               }
-               peakcnt=0;
-       }
-  }
-  peakcnt=0;
-  //test each valid clock from smallest to greatest to see which lines up
-  for(clkCnt=0; clkCnt < 8; ++clkCnt){
-       //ignore clocks smaller than largest peak
-       if (clk[clkCnt]<maxPeak) continue;
-
-    //try lining up the peaks by moving starting point (try first 256)
-    for (ii=0; ii< loopCnt; ++ii){
-      if ((dest[ii] >= peak) || (dest[ii] <= low)){
-        peakcnt=0;
-        // now that we have the first one lined up test rest of wave array
-        for (i=0; i < ((int)((size-ii-tol)/clk[clkCnt])-1); ++i){
-          if (dest[ii+(i*clk[clkCnt])]>=peak || dest[ii+(i*clk[clkCnt])]<=low){
-            peakcnt++;
-          }
-        }
-        if(peakcnt>peaksdet[clkCnt]) {
-          peaksdet[clkCnt]=peakcnt;
-        }
-      }
-    }
-  }
-  int iii=7;
-  int best=0;
-  for (iii=7; iii > 0; iii--){
-    if (peaksdet[iii] > peaksdet[best]){
-       best = iii;
-    }
-    //PrintAndLog("DEBUG: Clk: %d, peaks: %d, errs: %d, bestClk: %d",clk[iii],peaksdet[iii],bestErr[iii],clk[best]);
-  }
-  return clk[best];
+       int i=0;
+       int clk[]={8,16,32,40,50,64,100,128,256};
+       int loopCnt = 4096;  //don't need to loop through entire array...
+       if (size == 0) return 0;
+       if (size<loopCnt) loopCnt = size;
+
+       //if we already have a valid clock quit
+       for (; i < 8; ++i)
+               if (clk[i] == clock) return clock;
+
+       //get high and low peak
+       int peak, low;
+       getHiLo(dest, loopCnt, &peak, &low, 75, 75);
+
+       //PrintAndLog("DEBUG: peak: %d, low: %d",peak,low);
+       int ii;
+       uint8_t clkCnt;
+       uint8_t tol = 0;
+       int peakcnt=0;
+       int peaksdet[]={0,0,0,0,0,0,0,0};
+       int maxPeak=0;
+       //test for large clipped waves
+       for (i=0; i<loopCnt; i++){
+               if (dest[i] >= peak || dest[i] <= low){
+                       peakcnt++;
+               } else {
+                       if (peakcnt>0 && maxPeak < peakcnt){
+                               maxPeak = peakcnt;
+                       }
+                       peakcnt=0;
+               }
+       }
+       peakcnt=0;
+       //test each valid clock from smallest to greatest to see which lines up
+       for(clkCnt=0; clkCnt < 8; ++clkCnt){
+               //ignore clocks smaller than largest peak
+               if (clk[clkCnt]<maxPeak) continue;
+
+               //try lining up the peaks by moving starting point (try first 256)
+               for (ii=0; ii< loopCnt; ++ii){
+                       if ((dest[ii] >= peak) || (dest[ii] <= low)){
+                               peakcnt=0;
+                               // now that we have the first one lined up test rest of wave array
+                               for (i=0; i < ((int)((size-ii-tol)/clk[clkCnt])-1); ++i){
+                                       if (dest[ii+(i*clk[clkCnt])]>=peak || dest[ii+(i*clk[clkCnt])]<=low){
+                                               peakcnt++;
+                                       }
+                               }
+                               if(peakcnt>peaksdet[clkCnt]) {
+                                       peaksdet[clkCnt]=peakcnt;
+                               }
+                       }
+               }
+       }
+       int iii=7;
+       int best=0;
+       for (iii=7; iii > 0; iii--){
+               if (peaksdet[iii] > peaksdet[best]){
+                       best = iii;
+               }
+               //PrintAndLog("DEBUG: Clk: %d, peaks: %d, errs: %d, bestClk: %d",clk[iii],peaksdet[iii],bestErr[iii],clk[best]);
+       }
+       return clk[best];
 }
 
 // by marshmellow
@@ -1317,275 +1313,275 @@ int indala26decode(uint8_t *bitStream, size_t *size, uint8_t *invert)
 // there probably is a much simpler way to do this.... 
 int nrzRawDemod(uint8_t *dest, size_t *size, int *clk, int *invert, int maxErr)
 {
-  if (justNoise(dest, *size)) return -1;
-  *clk = DetectNRZClock(dest, *size, *clk);
-  if (*clk==0) return -2;
-  uint32_t i;
-  uint32_t gLen = 4096;
-  if (gLen>*size) gLen = *size;
-  int high, low;
-  if (getHiLo(dest, gLen, &high, &low, 75, 75) < 1) return -3; //25% fuzz on high 25% fuzz on low
-  int lastBit = 0;  //set first clock check
-  uint32_t bitnum = 0;     //output counter
-  uint8_t tol = 1;  //clock tolerance adjust - waves will be accepted as within the clock if they fall + or - this value + clock from last valid wave
-  uint32_t iii = 0;
-  uint16_t errCnt =0;
-  uint16_t MaxBits = 1000;
-  uint32_t bestErrCnt = maxErr+1;
-  uint32_t bestPeakCnt = 0;
-  uint32_t bestPeakStart=0;
-  uint8_t bestFirstPeakHigh=0;
-  uint8_t firstPeakHigh=0;
-  uint8_t curBit=0;
-  uint8_t bitHigh=0;
-  uint8_t errBitHigh=0;
-  uint16_t peakCnt=0;
-  uint8_t ignoreWindow=4;
-  uint8_t ignoreCnt=ignoreWindow; //in case of noice near peak
-  //loop to find first wave that works - align to clock
-  for (iii=0; iii < gLen; ++iii){
-    if ((dest[iii]>=high) || (dest[iii]<=low)){
-      if (dest[iii]>=high) firstPeakHigh=1;
-      else firstPeakHigh=0;
-      lastBit=iii-*clk;
-      peakCnt=0;
-      errCnt=0;
-      bitnum=0;
-      //loop through to see if this start location works
-      for (i = iii; i < *size; ++i) {
-        //if we found a high bar and we are at a clock bit
-        if ((dest[i]>=high ) && (i>=lastBit+*clk-tol && i<=lastBit+*clk+tol)){
-          bitHigh=1;
-          lastBit+=*clk;
-          bitnum++;
-          peakCnt++;
-          errBitHigh=0;
-          ignoreCnt=ignoreWindow;
-        //else if low bar found and we are at a clock point
-        }else if ((dest[i]<=low ) && (i>=lastBit+*clk-tol && i<=lastBit+*clk+tol)){
-          bitHigh=1;
-          lastBit+=*clk;
-          bitnum++;
-          peakCnt++;
-          errBitHigh=0;
-          ignoreCnt=ignoreWindow;
-        //else if no bars found
-        }else if(dest[i] < high && dest[i] > low) {
-          if (ignoreCnt==0){
-            bitHigh=0;
-            if (errBitHigh==1){
-              errCnt++;
-            }
-            errBitHigh=0;
-          } else {
-            ignoreCnt--;
-          }
-          //if we are past a clock point
-          if (i >= lastBit+*clk+tol){ //clock val
-            lastBit+=*clk;
-            bitnum++;
-          }
-        //else if bar found but we are not at a clock bit and we did not just have a clock bit
-        }else if ((dest[i]>=high || dest[i]<=low) && (i<lastBit+*clk-tol || i>lastBit+*clk+tol) && (bitHigh==0)){
-          //error bar found no clock...
-          errBitHigh=1;
-        }
-        if (bitnum>=MaxBits) break;
-      }
-      //we got more than 64 good bits and not all errors
-      if (bitnum > (64) && (errCnt <= (maxErr))) {
-        //possible good read
-        if (errCnt == 0){
-          //bestStart = iii;
-          bestFirstPeakHigh=firstPeakHigh;
-          bestErrCnt = errCnt;
-          bestPeakCnt = peakCnt;
-          bestPeakStart = iii;
-          break;  //great read - finish
-        }
-        if (errCnt < bestErrCnt){  //set this as new best run
-          bestErrCnt = errCnt;
-          //bestStart = iii;
-        }
-        if (peakCnt > bestPeakCnt){
-          bestFirstPeakHigh=firstPeakHigh;
-          bestPeakCnt=peakCnt;
-          bestPeakStart=iii;
-        } 
-      }
-    }
-  }
-  //PrintAndLog("DEBUG: bestErrCnt: %d, maxErr: %d, bestStart: %d, bestPeakCnt: %d, bestPeakStart: %d",bestErrCnt,maxErr,bestStart,bestPeakCnt,bestPeakStart);
-  if (bestErrCnt <= maxErr){
-    //best run is good enough set to best run and set overwrite BinStream
-    iii=bestPeakStart;
-    lastBit=bestPeakStart-*clk;
-    bitnum=0;
-    memset(dest, bestFirstPeakHigh^1, bestPeakStart / *clk);
-    bitnum += (bestPeakStart / *clk);
-    for (i = iii; i < *size; ++i) {
-      //if we found a high bar and we are at a clock bit
-      if ((dest[i] >= high ) && (i>=lastBit+*clk-tol && i<=lastBit+*clk+tol)){
-        bitHigh=1;
-        lastBit+=*clk;
-        curBit=1-*invert;
-        dest[bitnum]=curBit;
-        bitnum++;
-        errBitHigh=0;
-        ignoreCnt=ignoreWindow;
-      //else if low bar found and we are at a clock point
-      }else if ((dest[i]<=low ) && (i>=lastBit+*clk-tol && i<=lastBit+*clk+tol)){
-        bitHigh=1;
-        lastBit+=*clk;
-        curBit=*invert;
-        dest[bitnum]=curBit;
-        bitnum++;
-        errBitHigh=0;
-        ignoreCnt=ignoreWindow;
-      //else if no bars found
-      }else if(dest[i]<high && dest[i]>low) {
-        if (ignoreCnt==0){
-          bitHigh=0;
-          //if peak is done was it an error peak?
-          if (errBitHigh==1){
-            dest[bitnum]=77;
-            bitnum++;
-            errCnt++;
-          }
-          errBitHigh=0;
-        } else {
-          ignoreCnt--;
-        }
-        //if we are past a clock point
-        if (i>=lastBit+*clk+tol){ //clock val
-          lastBit+=*clk;
-          dest[bitnum]=curBit;
-          bitnum++;
-        }
-      //else if bar found but we are not at a clock bit and we did not just have a clock bit
-      }else if ((dest[i]>=high || dest[i]<=low) && ((i<lastBit+*clk-tol) || (i>lastBit+*clk+tol)) && (bitHigh==0)){
-        //error bar found no clock...
-        errBitHigh=1;
-      }
-      if (bitnum >= MaxBits) break;
-    }
-    *size=bitnum;
-  } else{
-    *size=bitnum;
-    return bestErrCnt;
-  }
-
-  if (bitnum>16){
-    *size=bitnum;
-  } else return -5;
-  return errCnt;
+       if (justNoise(dest, *size)) return -1;
+       *clk = DetectNRZClock(dest, *size, *clk);
+       if (*clk==0) return -2;
+       uint32_t i;
+       uint32_t gLen = 4096;
+       if (gLen>*size) gLen = *size;
+       int high, low;
+       if (getHiLo(dest, gLen, &high, &low, 75, 75) < 1) return -3; //25% fuzz on high 25% fuzz on low
+       int lastBit = 0;  //set first clock check
+       uint32_t bitnum = 0;     //output counter
+       uint8_t tol = 1;  //clock tolerance adjust - waves will be accepted as within the clock if they fall + or - this value + clock from last valid wave
+       uint32_t iii = 0;
+       uint16_t errCnt =0;
+       uint16_t MaxBits = 1000;
+       uint32_t bestErrCnt = maxErr+1;
+       uint32_t bestPeakCnt = 0;
+       uint32_t bestPeakStart=0;
+       uint8_t bestFirstPeakHigh=0;
+       uint8_t firstPeakHigh=0;
+       uint8_t curBit=0;
+       uint8_t bitHigh=0;
+       uint8_t errBitHigh=0;
+       uint16_t peakCnt=0;
+       uint8_t ignoreWindow=4;
+       uint8_t ignoreCnt=ignoreWindow; //in case of noice near peak
+       //loop to find first wave that works - align to clock
+       for (iii=0; iii < gLen; ++iii){
+               if ((dest[iii]>=high) || (dest[iii]<=low)){
+                       if (dest[iii]>=high) firstPeakHigh=1;
+                       else firstPeakHigh=0;
+                       lastBit=iii-*clk;
+                       peakCnt=0;
+                       errCnt=0;
+                       bitnum=0;
+                       //loop through to see if this start location works
+                       for (i = iii; i < *size; ++i) {
+                               //if we found a high bar and we are at a clock bit
+                               if ((dest[i]>=high ) && (i>=lastBit+*clk-tol && i<=lastBit+*clk+tol)){
+                                       bitHigh=1;
+                                       lastBit+=*clk;
+                                       bitnum++;
+                                       peakCnt++;
+                                       errBitHigh=0;
+                                       ignoreCnt=ignoreWindow;
+                               //else if low bar found and we are at a clock point
+                               }else if ((dest[i]<=low ) && (i>=lastBit+*clk-tol && i<=lastBit+*clk+tol)){
+                                       bitHigh=1;
+                                       lastBit+=*clk;
+                                       bitnum++;
+                                       peakCnt++;
+                                       errBitHigh=0;
+                                       ignoreCnt=ignoreWindow;
+                               //else if no bars found
+                               }else if(dest[i] < high && dest[i] > low) {
+                                       if (ignoreCnt==0){
+                                               bitHigh=0;
+                                               if (errBitHigh==1){
+                                                       errCnt++;
+                                               }
+                                               errBitHigh=0;
+                                       } else {
+                                               ignoreCnt--;
+                                       }
+                                       //if we are past a clock point
+                                       if (i >= lastBit+*clk+tol){ //clock val
+                                               lastBit+=*clk;
+                                               bitnum++;
+                                       }
+                               //else if bar found but we are not at a clock bit and we did not just have a clock bit
+                               }else if ((dest[i]>=high || dest[i]<=low) && (i<lastBit+*clk-tol || i>lastBit+*clk+tol) && (bitHigh==0)){
+                                       //error bar found no clock...
+                                       errBitHigh=1;
+                               }
+                               if (bitnum>=MaxBits) break;
+                       }
+                       //we got more than 64 good bits and not all errors
+                       if (bitnum > (64) && (errCnt <= (maxErr))) {
+                               //possible good read
+                               if (errCnt == 0){
+                                       //bestStart = iii;
+                                       bestFirstPeakHigh=firstPeakHigh;
+                                       bestErrCnt = errCnt;
+                                       bestPeakCnt = peakCnt;
+                                       bestPeakStart = iii;
+                                       break;  //great read - finish
+                               }
+                               if (errCnt < bestErrCnt){  //set this as new best run
+                                       bestErrCnt = errCnt;
+                                       //bestStart = iii;
+                               }
+                               if (peakCnt > bestPeakCnt){
+                                       bestFirstPeakHigh=firstPeakHigh;
+                                       bestPeakCnt=peakCnt;
+                                       bestPeakStart=iii;
+                               
+                       }
+               }
+       }
+       //PrintAndLog("DEBUG: bestErrCnt: %d, maxErr: %d, bestStart: %d, bestPeakCnt: %d, bestPeakStart: %d",bestErrCnt,maxErr,bestStart,bestPeakCnt,bestPeakStart);
+       if (bestErrCnt <= maxErr){
+               //best run is good enough set to best run and set overwrite BinStream
+               iii=bestPeakStart;
+               lastBit=bestPeakStart-*clk;
+               bitnum=0;
+               memset(dest, bestFirstPeakHigh^1, bestPeakStart / *clk);
+               bitnum += (bestPeakStart / *clk);
+               for (i = iii; i < *size; ++i) {
+                       //if we found a high bar and we are at a clock bit
+                       if ((dest[i] >= high ) && (i>=lastBit+*clk-tol && i<=lastBit+*clk+tol)){
+                               bitHigh=1;
+                               lastBit+=*clk;
+                               curBit=1-*invert;
+                               dest[bitnum]=curBit;
+                               bitnum++;
+                               errBitHigh=0;
+                               ignoreCnt=ignoreWindow;
+                       //else if low bar found and we are at a clock point
+                       }else if ((dest[i]<=low ) && (i>=lastBit+*clk-tol && i<=lastBit+*clk+tol)){
+                               bitHigh=1;
+                               lastBit+=*clk;
+                               curBit=*invert;
+                               dest[bitnum]=curBit;
+                               bitnum++;
+                               errBitHigh=0;
+                               ignoreCnt=ignoreWindow;
+                       //else if no bars found
+                       }else if(dest[i]<high && dest[i]>low) {
+                               if (ignoreCnt==0){
+                                       bitHigh=0;
+                                       //if peak is done was it an error peak?
+                                       if (errBitHigh==1){
+                                               dest[bitnum]=77;
+                                               bitnum++;
+                                               errCnt++;
+                                       }
+                                       errBitHigh=0;
+                               } else {
+                                       ignoreCnt--;
+                               }
+                               //if we are past a clock point
+                               if (i>=lastBit+*clk+tol){ //clock val
+                                       lastBit+=*clk;
+                                       dest[bitnum]=curBit;
+                                       bitnum++;
+                               }
+                       //else if bar found but we are not at a clock bit and we did not just have a clock bit
+                       }else if ((dest[i]>=high || dest[i]<=low) && ((i<lastBit+*clk-tol) || (i>lastBit+*clk+tol)) && (bitHigh==0)){
+                               //error bar found no clock...
+                               errBitHigh=1;
+                       }
+                       if (bitnum >= MaxBits) break;
+               }
+               *size=bitnum;
+       } else{
+               *size=bitnum;
+               return bestErrCnt;
+       }
+
+       if (bitnum>16){
+               *size=bitnum;
+       } else return -5;
+       return errCnt;
 }
 
 //by marshmellow
 //detects the bit clock for FSK given the high and low Field Clocks
 uint8_t detectFSKClk(uint8_t *BitStream, size_t size, uint8_t fcHigh, uint8_t fcLow)
 {
-  uint8_t clk[] = {8,16,32,40,50,64,100,128,0};
-  uint16_t rfLens[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
-  uint8_t rfCnts[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
-  uint8_t rfLensFnd = 0;
-  uint8_t lastFCcnt=0;
-  uint32_t fcCounter = 0;
-  uint16_t rfCounter = 0;
-  uint8_t firstBitFnd = 0;
-  size_t i;
-  if (size == 0) return 0;
-
-  uint8_t fcTol = (uint8_t)(0.5+(float)(fcHigh-fcLow)/2);
-  rfLensFnd=0;
-  fcCounter=0;
-  rfCounter=0;
-  firstBitFnd=0;
-  //PrintAndLog("DEBUG: fcTol: %d",fcTol);
-  // prime i to first up transition
-  for (i = 1; i < size-1; i++)
-    if (BitStream[i] > BitStream[i-1] && BitStream[i]>=BitStream[i+1])
-      break;
-
-  for (; i < size-1; i++){
-    if (BitStream[i] > BitStream[i-1] && BitStream[i]>=BitStream[i+1]){
-      // new peak 
-      fcCounter++;
-      rfCounter++;
-      // if we got less than the small fc + tolerance then set it to the small fc
-      if (fcCounter < fcLow+fcTol) 
-        fcCounter = fcLow;
-      else //set it to the large fc
-        fcCounter = fcHigh;
-
-      //look for bit clock  (rf/xx)
-      if ((fcCounter<lastFCcnt || fcCounter>lastFCcnt)){
-        //not the same size as the last wave - start of new bit sequence
-
-        if (firstBitFnd>1){ //skip first wave change - probably not a complete bit
-          for (int ii=0; ii<15; ii++){
-            if (rfLens[ii]==rfCounter){
-              rfCnts[ii]++;
-              rfCounter=0;
-              break;
-            }
-          }
-          if (rfCounter>0 && rfLensFnd<15){
-            //PrintAndLog("DEBUG: rfCntr %d, fcCntr %d",rfCounter,fcCounter);
-            rfCnts[rfLensFnd]++;
-            rfLens[rfLensFnd++]=rfCounter;
-          }
-        } else {
-          firstBitFnd++;
-        }
-        rfCounter=0;
-        lastFCcnt=fcCounter;
-      }
-      fcCounter=0;
-    } else {
-      // count sample
-      fcCounter++;
-      rfCounter++;
-    }
-  }
-  uint8_t rfHighest=15, rfHighest2=15, rfHighest3=15;
-
-  for (i=0; i<15; i++){
-    //PrintAndLog("DEBUG: RF %d, cnts %d",rfLens[i], rfCnts[i]);
-    //get highest 2 RF values  (might need to get more values to compare or compare all?)
-    if (rfCnts[i]>rfCnts[rfHighest]){
-      rfHighest3=rfHighest2;
-      rfHighest2=rfHighest;
-      rfHighest=i;
-    } else if(rfCnts[i]>rfCnts[rfHighest2]){
-      rfHighest3=rfHighest2;
-      rfHighest2=i;
-    } else if(rfCnts[i]>rfCnts[rfHighest3]){
-      rfHighest3=i;
-    }
-  }  
-  // set allowed clock remainder tolerance to be 1 large field clock length+1 
-  //   we could have mistakenly made a 9 a 10 instead of an 8 or visa versa so rfLens could be 1 FC off  
-  uint8_t tol1 = fcHigh+1; 
-  
-  //PrintAndLog("DEBUG: hightest: 1 %d, 2 %d, 3 %d",rfLens[rfHighest],rfLens[rfHighest2],rfLens[rfHighest3]);
-
-  // loop to find the highest clock that has a remainder less than the tolerance
-  //   compare samples counted divided by
-  int ii=7;
-  for (; ii>=0; ii--){
-    if (rfLens[rfHighest] % clk[ii] < tol1 || rfLens[rfHighest] % clk[ii] > clk[ii]-tol1){
-      if (rfLens[rfHighest2] % clk[ii] < tol1 || rfLens[rfHighest2] % clk[ii] > clk[ii]-tol1){
-        if (rfLens[rfHighest3] % clk[ii] < tol1 || rfLens[rfHighest3] % clk[ii] > clk[ii]-tol1){
-          break;
-        }
-      }
-    }
-  }
-
-  if (ii<0) return 0; // oops we went too far
-
-  return clk[ii];
+       uint8_t clk[] = {8,16,32,40,50,64,100,128,0};
+       uint16_t rfLens[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+       uint8_t rfCnts[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+       uint8_t rfLensFnd = 0;
+       uint8_t lastFCcnt=0;
+       uint32_t fcCounter = 0;
+       uint16_t rfCounter = 0;
+       uint8_t firstBitFnd = 0;
+       size_t i;
+       if (size == 0) return 0;
+
+       uint8_t fcTol = (uint8_t)(0.5+(float)(fcHigh-fcLow)/2);
+       rfLensFnd=0;
+       fcCounter=0;
+       rfCounter=0;
+       firstBitFnd=0;
+       //PrintAndLog("DEBUG: fcTol: %d",fcTol);
+       // prime i to first up transition
+       for (i = 1; i < size-1; i++)
+               if (BitStream[i] > BitStream[i-1] && BitStream[i]>=BitStream[i+1])
+                       break;
+
+       for (; i < size-1; i++){
+               if (BitStream[i] > BitStream[i-1] && BitStream[i]>=BitStream[i+1]){
+                       // new peak 
+                       fcCounter++;
+                       rfCounter++;
+                       // if we got less than the small fc + tolerance then set it to the small fc
+                       if (fcCounter < fcLow+fcTol) 
+                               fcCounter = fcLow;
+                       else //set it to the large fc
+                               fcCounter = fcHigh;
+
+                       //look for bit clock  (rf/xx)
+                       if ((fcCounter<lastFCcnt || fcCounter>lastFCcnt)){
+                               //not the same size as the last wave - start of new bit sequence
+
+                               if (firstBitFnd>1){ //skip first wave change - probably not a complete bit
+                                       for (int ii=0; ii<15; ii++){
+                                               if (rfLens[ii]==rfCounter){
+                                                       rfCnts[ii]++;
+                                                       rfCounter=0;
+                                                       break;
+                                               }
+                                       }
+                                       if (rfCounter>0 && rfLensFnd<15){
+                                               //PrintAndLog("DEBUG: rfCntr %d, fcCntr %d",rfCounter,fcCounter);
+                                               rfCnts[rfLensFnd]++;
+                                               rfLens[rfLensFnd++]=rfCounter;
+                                       }
+                               } else {
+                                       firstBitFnd++;
+                               }
+                               rfCounter=0;
+                               lastFCcnt=fcCounter;
+                       }
+                       fcCounter=0;
+               } else {
+                       // count sample
+                       fcCounter++;
+                       rfCounter++;
+               }
+       }
+       uint8_t rfHighest=15, rfHighest2=15, rfHighest3=15;
+
+       for (i=0; i<15; i++){
+               //PrintAndLog("DEBUG: RF %d, cnts %d",rfLens[i], rfCnts[i]);
+               //get highest 2 RF values  (might need to get more values to compare or compare all?)
+               if (rfCnts[i]>rfCnts[rfHighest]){
+                       rfHighest3=rfHighest2;
+                       rfHighest2=rfHighest;
+                       rfHighest=i;
+               } else if(rfCnts[i]>rfCnts[rfHighest2]){
+                       rfHighest3=rfHighest2;
+                       rfHighest2=i;
+               } else if(rfCnts[i]>rfCnts[rfHighest3]){
+                       rfHighest3=i;
+               }
+       }  
+       // set allowed clock remainder tolerance to be 1 large field clock length+1 
+       //   we could have mistakenly made a 9 a 10 instead of an 8 or visa versa so rfLens could be 1 FC off  
+       uint8_t tol1 = fcHigh+1; 
+       
+       //PrintAndLog("DEBUG: hightest: 1 %d, 2 %d, 3 %d",rfLens[rfHighest],rfLens[rfHighest2],rfLens[rfHighest3]);
+
+       // loop to find the highest clock that has a remainder less than the tolerance
+       //   compare samples counted divided by
+       int ii=7;
+       for (; ii>=0; ii--){
+               if (rfLens[rfHighest] % clk[ii] < tol1 || rfLens[rfHighest] % clk[ii] > clk[ii]-tol1){
+                       if (rfLens[rfHighest2] % clk[ii] < tol1 || rfLens[rfHighest2] % clk[ii] > clk[ii]-tol1){
+                               if (rfLens[rfHighest3] % clk[ii] < tol1 || rfLens[rfHighest3] % clk[ii] > clk[ii]-tol1){
+                                       break;
+                               }
+                       }
+               }
+       }
+
+       if (ii<0) return 0; // oops we went too far
+
+       return clk[ii];
 }
 
 //by marshmellow
@@ -1594,84 +1590,84 @@ uint8_t detectFSKClk(uint8_t *BitStream, size_t size, uint8_t fcHigh, uint8_t fc
 //mainly used for FSK field clock detection
 uint16_t countFC(uint8_t *BitStream, size_t size, uint8_t *mostFC)
 {
-  uint8_t fcLens[] = {0,0,0,0,0,0,0,0,0,0};
-  uint16_t fcCnts[] = {0,0,0,0,0,0,0,0,0,0};
-  uint8_t fcLensFnd = 0;
-  uint8_t lastFCcnt=0;
-  uint32_t fcCounter = 0;
-  size_t i;
-  if (size == 0) return 0;
-
-  // prime i to first up transition
-  for (i = 1; i < size-1; i++)
-    if (BitStream[i] > BitStream[i-1] && BitStream[i] >= BitStream[i+1])
-      break;
-
-  for (; i < size-1; i++){
-    if (BitStream[i] > BitStream[i-1] && BitStream[i] >= BitStream[i+1]){
-       // new up transition
-       fcCounter++;
-       
-      //if we had 5 and now have 9 then go back to 8 (for when we get a fc 9 instead of an 8)
-      if (lastFCcnt==5 && fcCounter==9) fcCounter--;
-      //if odd and not rc/5 add one (for when we get a fc 9 instead of 10)
-      if ((fcCounter==9 && fcCounter & 1) || fcCounter==4) fcCounter++;
-
-      // save last field clock count  (fc/xx)
-      // find which fcLens to save it to:
-      for (int ii=0; ii<10; ii++){
-        if (fcLens[ii]==fcCounter){
-          fcCnts[ii]++;
-          fcCounter=0;
-          break;
-        }
-      }
-      if (fcCounter>0 && fcLensFnd<10){
-        //add new fc length 
-        fcCnts[fcLensFnd]++;
-        fcLens[fcLensFnd++]=fcCounter;
-      }
-      fcCounter=0;
-    } else {
-      // count sample
-      fcCounter++;
-    }
-  }
-  
-  uint8_t best1=9, best2=9, best3=9;
-  uint16_t maxCnt1=0;
-  // go through fclens and find which ones are bigest 2  
-  for (i=0; i<10; i++){
-    // PrintAndLog("DEBUG: FC %d, Cnt %d, Errs %d",fcLens[i],fcCnts[i],errCnt);    
-    // get the 3 best FC values
-    if (fcCnts[i]>maxCnt1) {
-      best3=best2;
-      best2=best1;
-      maxCnt1=fcCnts[i];
-      best1=i;
-    } else if(fcCnts[i]>fcCnts[best2]){
-      best3=best2;
-      best2=i;
-    } else if(fcCnts[i]>fcCnts[best3]){
-      best3=i;
-    }
-  }
-  uint8_t fcH=0, fcL=0;
-  if (fcLens[best1]>fcLens[best2]){
-    fcH=fcLens[best1];
-    fcL=fcLens[best2];
-  } else{
-    fcH=fcLens[best2];
-    fcL=fcLens[best1];
-  }
-
-  *mostFC=fcLens[best1]; 
-  // TODO: take top 3 answers and compare to known Field clocks to get top 2
-
-  uint16_t fcs = (((uint16_t)fcH)<<8) | fcL;
-  // PrintAndLog("DEBUG: Best %d  best2 %d best3 %d",fcLens[best1],fcLens[best2],fcLens[best3]);
-  
-  return fcs;
+       uint8_t fcLens[] = {0,0,0,0,0,0,0,0,0,0};
+       uint16_t fcCnts[] = {0,0,0,0,0,0,0,0,0,0};
+       uint8_t fcLensFnd = 0;
+       uint8_t lastFCcnt=0;
+       uint32_t fcCounter = 0;
+       size_t i;
+       if (size == 0) return 0;
+
+       // prime i to first up transition
+       for (i = 1; i < size-1; i++)
+               if (BitStream[i] > BitStream[i-1] && BitStream[i] >= BitStream[i+1])
+                       break;
+
+       for (; i < size-1; i++){
+               if (BitStream[i] > BitStream[i-1] && BitStream[i] >= BitStream[i+1]){
+                       // new up transition
+                       fcCounter++;
+                       
+                       //if we had 5 and now have 9 then go back to 8 (for when we get a fc 9 instead of an 8)
+                       if (lastFCcnt==5 && fcCounter==9) fcCounter--;
+                       //if odd and not rc/5 add one (for when we get a fc 9 instead of 10)
+                       if ((fcCounter==9 && fcCounter & 1) || fcCounter==4) fcCounter++;
+
+                       // save last field clock count  (fc/xx)
+                       // find which fcLens to save it to:
+                       for (int ii=0; ii<10; ii++){
+                               if (fcLens[ii]==fcCounter){
+                                       fcCnts[ii]++;
+                                       fcCounter=0;
+                                       break;
+                               }
+                       }
+                       if (fcCounter>0 && fcLensFnd<10){
+                               //add new fc length 
+                               fcCnts[fcLensFnd]++;
+                               fcLens[fcLensFnd++]=fcCounter;
+                       }
+                       fcCounter=0;
+               } else {
+                       // count sample
+                       fcCounter++;
+               }
+       }
+       
+       uint8_t best1=9, best2=9, best3=9;
+       uint16_t maxCnt1=0;
+       // go through fclens and find which ones are bigest 2  
+       for (i=0; i<10; i++){
+               // PrintAndLog("DEBUG: FC %d, Cnt %d, Errs %d",fcLens[i],fcCnts[i],errCnt);    
+               // get the 3 best FC values
+               if (fcCnts[i]>maxCnt1) {
+                       best3=best2;
+                       best2=best1;
+                       maxCnt1=fcCnts[i];
+                       best1=i;
+               } else if(fcCnts[i]>fcCnts[best2]){
+                       best3=best2;
+                       best2=i;
+               } else if(fcCnts[i]>fcCnts[best3]){
+                       best3=i;
+               }
+       }
+       uint8_t fcH=0, fcL=0;
+       if (fcLens[best1]>fcLens[best2]){
+               fcH=fcLens[best1];
+               fcL=fcLens[best2];
+       } else{
+               fcH=fcLens[best2];
+               fcL=fcLens[best1];
+       }
+
+       *mostFC=fcLens[best1]; 
+       // TODO: take top 3 answers and compare to known Field clocks to get top 2
+
+       uint16_t fcs = (((uint16_t)fcH)<<8) | fcL;
+       // PrintAndLog("DEBUG: Best %d  best2 %d best3 %d",fcLens[best1],fcLens[best2],fcLens[best3]);
+       
+       return fcs;
 }
 
 //by marshmellow
@@ -1679,140 +1675,140 @@ uint16_t countFC(uint8_t *BitStream, size_t size, uint8_t *mostFC)
 //counts and returns the 1 most common wave length
 uint8_t countPSK_FC(uint8_t *BitStream, size_t size)
 {
-  uint8_t fcLens[] = {0,0,0,0,0,0,0,0,0,0};
-  uint16_t fcCnts[] = {0,0,0,0,0,0,0,0,0,0};
-  uint8_t fcLensFnd = 0;
-  uint32_t fcCounter = 0;
-  size_t i;
-  if (size == 0) return 0;
-  
-  // prime i to first up transition
-  for (i = 1; i < size-1; i++)
-    if (BitStream[i] > BitStream[i-1] && BitStream[i] >= BitStream[i+1])
-      break;
-
-  for (; i < size-1; i++){
-    if (BitStream[i] > BitStream[i-1] && BitStream[i] >= BitStream[i+1]){
-      // new up transition
-      fcCounter++;
-      
-      // save last field clock count  (fc/xx)
-      // find which fcLens to save it to:
-      for (int ii=0; ii<10; ii++){
-        if (fcLens[ii]==fcCounter){
-          fcCnts[ii]++;
-          fcCounter=0;
-          break;
-        }
-      }
-      if (fcCounter>0 && fcLensFnd<10){
-        //add new fc length 
-        fcCnts[fcLensFnd]++;
-        fcLens[fcLensFnd++]=fcCounter;
-      }
-      fcCounter=0;
-    } else {
-      // count sample
-      fcCounter++;
-    }
-  }
-  
-  uint8_t best1=9;
-  uint16_t maxCnt1=0;
-  // go through fclens and find which ones are bigest  
-  for (i=0; i<10; i++){
-    //PrintAndLog("DEBUG: FC %d, Cnt %d",fcLens[i],fcCnts[i]);    
-    // get the best FC value
-    if (fcCnts[i]>maxCnt1) {
-      maxCnt1=fcCnts[i];
-      best1=i;
-    }
-  }
-  return fcLens[best1]; 
+       uint8_t fcLens[] = {0,0,0,0,0,0,0,0,0,0};
+       uint16_t fcCnts[] = {0,0,0,0,0,0,0,0,0,0};
+       uint8_t fcLensFnd = 0;
+       uint32_t fcCounter = 0;
+       size_t i;
+       if (size == 0) return 0;
+       
+       // prime i to first up transition
+       for (i = 1; i < size-1; i++)
+               if (BitStream[i] > BitStream[i-1] && BitStream[i] >= BitStream[i+1])
+                       break;
+
+       for (; i < size-1; i++){
+               if (BitStream[i] > BitStream[i-1] && BitStream[i] >= BitStream[i+1]){
+                       // new up transition
+                       fcCounter++;
+                       
+                       // save last field clock count  (fc/xx)
+                       // find which fcLens to save it to:
+                       for (int ii=0; ii<10; ii++){
+                               if (fcLens[ii]==fcCounter){
+                                       fcCnts[ii]++;
+                                       fcCounter=0;
+                                       break;
+                               }
+                       }
+                       if (fcCounter>0 && fcLensFnd<10){
+                               //add new fc length 
+                               fcCnts[fcLensFnd]++;
+                               fcLens[fcLensFnd++]=fcCounter;
+                       }
+                       fcCounter=0;
+               } else {
+                       // count sample
+                       fcCounter++;
+               }
+       }
+       
+       uint8_t best1=9;
+       uint16_t maxCnt1=0;
+       // go through fclens and find which ones are bigest  
+       for (i=0; i<10; i++){
+               //PrintAndLog("DEBUG: FC %d, Cnt %d",fcLens[i],fcCnts[i]);    
+               // get the best FC value
+               if (fcCnts[i]>maxCnt1) {
+                       maxCnt1=fcCnts[i];
+                       best1=i;
+               }
+       }
+       return fcLens[best1]; 
 }
 
 //by marshmellow - demodulate PSK1 wave 
 //uses wave lengths (# Samples) 
 int pskRawDemod(uint8_t dest[], size_t *size, int *clock, int *invert)
 {
-  uint16_t loopCnt = 4096;  //don't need to loop through entire array...
-  if (size == 0) return -1;
-  if (*size<loopCnt) loopCnt = *size;
-
-  uint8_t curPhase = *invert;
-  size_t i, waveStart=1, waveEnd=0, firstFullWave=0, lastClkBit=0;
-  uint8_t fc=0, fullWaveLen=0, tol=1;
-  uint16_t errCnt=0, waveLenCnt=0;
-  fc = countPSK_FC(dest, *size);
-  if (fc!=2 && fc!=4 && fc!=8) return -1;
-  //PrintAndLog("DEBUG: FC: %d",fc);
-  *clock = DetectPSKClock(dest, *size, *clock);
-  if (*clock==0) return -1;
-  int avgWaveVal=0, lastAvgWaveVal=0;
-  //find first phase shift
-  for (i=0; i<loopCnt; i++){
-    if (dest[i]+fc < dest[i+1] && dest[i+1] >= dest[i+2]){
-        waveEnd = i+1;
-        //PrintAndLog("DEBUG: waveEnd: %d",waveEnd);
-        waveLenCnt = waveEnd-waveStart;
-      if (waveLenCnt > fc && waveStart > fc){ //not first peak and is a large wave 
-        lastAvgWaveVal = avgWaveVal/(waveLenCnt);
-          firstFullWave = waveStart;
-          fullWaveLen=waveLenCnt;
-          //if average wave value is > graph 0 then it is an up wave or a 1
-        if (lastAvgWaveVal > 123) curPhase^=1;  //fudge graph 0 a little 123 vs 128
-          break;
-        } 
-      waveStart = i+1;
-      avgWaveVal = 0;
-      }
-    avgWaveVal+=dest[i+2];
-    }
-  //PrintAndLog("DEBUG: firstFullWave: %d, waveLen: %d",firstFullWave,fullWaveLen);  
-  lastClkBit = firstFullWave; //set start of wave as clock align
-  //PrintAndLog("DEBUG: clk: %d, lastClkBit: %d", *clock, lastClkBit);
-  waveStart = 0;
-  errCnt=0;
-  size_t numBits=0;
-  //set skipped bits
-  memset(dest,curPhase^1,firstFullWave / *clock);
-  numBits += (firstFullWave / *clock);
-  dest[numBits++] = curPhase; //set first read bit
-  for (i = firstFullWave+fullWaveLen-1; i < *size-3; i++){
-    //top edge of wave = start of new wave 
-    if (dest[i]+fc < dest[i+1] && dest[i+1] >= dest[i+2]){
-      if (waveStart == 0) {
-        waveStart = i+1;
-        waveLenCnt=0;
-        avgWaveVal = dest[i+1];
-      } else { //waveEnd
-        waveEnd = i+1;
-        waveLenCnt = waveEnd-waveStart;
-        lastAvgWaveVal = avgWaveVal/waveLenCnt;
-        if (waveLenCnt > fc){ 
-          //PrintAndLog("DEBUG: avgWaveVal: %d, waveSum: %d",lastAvgWaveVal,avgWaveVal);
-          //if this wave is a phase shift
-          //PrintAndLog("DEBUG: phase shift at: %d, len: %d, nextClk: %d, i: %d, fc: %d",waveStart,waveLenCnt,lastClkBit+*clock-tol,i+1,fc);
-          if (i+1 >= lastClkBit + *clock - tol){ //should be a clock bit
-            curPhase^=1;
-            dest[numBits++] = curPhase;
-            lastClkBit += *clock;
-          } else if (i<lastClkBit+10+fc){
-            //noise after a phase shift - ignore
-          } else { //phase shift before supposed to based on clock
-            errCnt++;
-            dest[numBits++] = 77;
-          }
-        } else if (i+1 > lastClkBit + *clock + tol + fc){
-          lastClkBit += *clock; //no phase shift but clock bit
-          dest[numBits++] = curPhase;
-        }
-        avgWaveVal=0;
-        waveStart=i+1;
-      }
-    }
-    avgWaveVal+=dest[i+1];
-  }
-  *size = numBits;
-  return errCnt;
+       uint16_t loopCnt = 4096;  //don't need to loop through entire array...
+       if (size == 0) return -1;
+       if (*size<loopCnt) loopCnt = *size;
+
+       uint8_t curPhase = *invert;
+       size_t i, waveStart=1, waveEnd=0, firstFullWave=0, lastClkBit=0;
+       uint8_t fc=0, fullWaveLen=0, tol=1;
+       uint16_t errCnt=0, waveLenCnt=0;
+       fc = countPSK_FC(dest, *size);
+       if (fc!=2 && fc!=4 && fc!=8) return -1;
+       //PrintAndLog("DEBUG: FC: %d",fc);
+       *clock = DetectPSKClock(dest, *size, *clock);
+       if (*clock==0) return -1;
+       int avgWaveVal=0, lastAvgWaveVal=0;
+       //find first phase shift
+       for (i=0; i<loopCnt; i++){
+               if (dest[i]+fc < dest[i+1] && dest[i+1] >= dest[i+2]){
+                       waveEnd = i+1;
+                       //PrintAndLog("DEBUG: waveEnd: %d",waveEnd);
+                       waveLenCnt = waveEnd-waveStart;
+                       if (waveLenCnt > fc && waveStart > fc){ //not first peak and is a large wave 
+                               lastAvgWaveVal = avgWaveVal/(waveLenCnt);
+                               firstFullWave = waveStart;
+                               fullWaveLen=waveLenCnt;
+                               //if average wave value is > graph 0 then it is an up wave or a 1
+                               if (lastAvgWaveVal > 123) curPhase^=1;  //fudge graph 0 a little 123 vs 128
+                               break;
+                       
+                       waveStart = i+1;
+                       avgWaveVal = 0;
+               }
+               avgWaveVal+=dest[i+2];
+       }
+       //PrintAndLog("DEBUG: firstFullWave: %d, waveLen: %d",firstFullWave,fullWaveLen);  
+       lastClkBit = firstFullWave; //set start of wave as clock align
+       //PrintAndLog("DEBUG: clk: %d, lastClkBit: %d", *clock, lastClkBit);
+       waveStart = 0;
+       errCnt=0;
+       size_t numBits=0;
+       //set skipped bits
+       memset(dest,curPhase^1,firstFullWave / *clock);
+       numBits += (firstFullWave / *clock);
+       dest[numBits++] = curPhase; //set first read bit
+       for (i = firstFullWave+fullWaveLen-1; i < *size-3; i++){
+               //top edge of wave = start of new wave 
+               if (dest[i]+fc < dest[i+1] && dest[i+1] >= dest[i+2]){
+                       if (waveStart == 0) {
+                               waveStart = i+1;
+                               waveLenCnt=0;
+                               avgWaveVal = dest[i+1];
+                       } else { //waveEnd
+                               waveEnd = i+1;
+                               waveLenCnt = waveEnd-waveStart;
+                               lastAvgWaveVal = avgWaveVal/waveLenCnt;
+                               if (waveLenCnt > fc){  
+                                       //PrintAndLog("DEBUG: avgWaveVal: %d, waveSum: %d",lastAvgWaveVal,avgWaveVal);
+                                       //if this wave is a phase shift
+                                       //PrintAndLog("DEBUG: phase shift at: %d, len: %d, nextClk: %d, i: %d, fc: %d",waveStart,waveLenCnt,lastClkBit+*clock-tol,i+1,fc);
+                                       if (i+1 >= lastClkBit + *clock - tol){ //should be a clock bit
+                                               curPhase^=1;
+                                               dest[numBits++] = curPhase;
+                                               lastClkBit += *clock;
+                                       } else if (i<lastClkBit+10+fc){
+                                               //noise after a phase shift - ignore
+                                       } else { //phase shift before supposed to based on clock
+                                               errCnt++;
+                                               dest[numBits++] = 77;
+                                       }
+                               } else if (i+1 > lastClkBit + *clock + tol + fc){
+                                       lastClkBit += *clock; //no phase shift but clock bit
+                                       dest[numBits++] = curPhase;
+                               }
+                               avgWaveVal=0;
+                               waveStart=i+1;
+                       }
+               }
+               avgWaveVal+=dest[i+1];
+       }
+       *size = numBits;
+       return errCnt;
 }
index 46e2bdd574d040268b2c4950a7d53e108ceca813..15121cbff408ffc7274cb55fcdaa14f35bc4656b 100644 (file)
@@ -19,7 +19,6 @@ int DetectASKClock(uint8_t dest[], size_t size, int *clock, int maxErr);
 uint8_t DetectCleanAskWave(uint8_t dest[], size_t size, int high, int low);
 int askmandemod(uint8_t *BinStream, size_t *size, int *clk, int *invert, int maxErr);
 uint8_t Em410xDecode(uint8_t *BitStream, size_t *size, size_t *startIdx, uint32_t *hi, uint64_t *lo);
-//uint64_t Em410xDecode(uint8_t *BitStream, size_t *size, size_t *startIdx);
 int ManchesterEncode(uint8_t *BitStream, size_t size);
 int manrawdecode(uint8_t *BitStream, size_t *size);
 int BiphaseRawDecode(uint8_t * BitStream, size_t *size, int offset, int invert);
@@ -34,20 +33,16 @@ void psk1TOpsk2(uint8_t *BitStream, size_t size);
 void psk2TOpsk1(uint8_t *BitStream, size_t size);
 int DetectNRZClock(uint8_t dest[], size_t size, int clock);
 int indala26decode(uint8_t *bitStream, size_t *size, uint8_t *invert);
-void pskCleanWave(uint8_t *bitStream, size_t size);
 int PyramiddemodFSK(uint8_t *dest, size_t *size);
 int AWIDdemodFSK(uint8_t *dest, size_t *size);
 size_t removeParity(uint8_t *BitStream, size_t startIdx, uint8_t pLen, uint8_t pType, size_t bLen);
-uint16_t countFC(uint8_t *BitStream, size_t size, uint8_t *mostFC);
+uint16_t countFC(uint8_t *BitStream, size_t size, uint8_t fskAdj);
 uint8_t detectFSKClk(uint8_t *BitStream, size_t size, uint8_t fcHigh, uint8_t fcLow);
 int getHiLo(uint8_t *BitStream, size_t size, int *high, int *low, uint8_t fuzzHi, uint8_t fuzzLo);
 int ParadoxdemodFSK(uint8_t *dest, size_t *size, uint32_t *hi2, uint32_t *hi, uint32_t *lo);
 uint8_t preambleSearch(uint8_t *BitStream, uint8_t *preamble, size_t pLen, size_t *size, size_t *startIdx);
 uint8_t parityTest(uint32_t bits, uint8_t bitLen, uint8_t pType);
-uint8_t justNoise(uint8_t *BitStream, size_t size);
-uint8_t countPSK_FC(uint8_t *BitStream, size_t size);
 int pskRawDemod(uint8_t dest[], size_t *size, int *clock, int *invert);
 int DetectPSKClock(uint8_t dest[], size_t size, int clock);
-void askAmp(uint8_t *BitStream, size_t size);
 
 #endif
index b6caf94f16c22d8b88ecded8f8051ca33922bce5..74d494c276ab41ca1d5ce15890985717d4c148f8 100644 (file)
@@ -205,7 +205,11 @@ typedef struct{
 
 //Iclass reader flags
 #define FLAG_ICLASS_READER_ONLY_ONCE 0x01
-#define FLAG_ICLASS_READER_GET_CC       0x02
+#define FLAG_ICLASS_READER_CC       0x02
+#define FLAG_ICLASS_READER_CSN         0x04
+#define FLAG_ICLASS_READER_CONF                0x08
+#define FLAG_ICLASS_READER_AA          0x10
+
 
 
 // CMD_DEVICE_INFO response packet has flags in arg[0], flag definitions:
Impressum, Datenschutz