X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/d19929cbe8d681b60496ca6d9d9cbd806822e163..04202e7aa76dd9f0628d8245ae01fd224e5fbf17:/armsrc/iso14443a.c diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index af7b3545..780a7ca0 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -1770,6 +1770,7 @@ void ReaderIso14443a(UsbCommand * c, UsbCommand * ack) iso14a_command_t param = c->arg[0]; uint8_t * cmd = c->d.asBytes; size_t len = c->arg[1]; + uint8_t *receiveBuf = (((uint8_t *)BigBuf) + FREE_BUFFER_OFFSET); if(param & ISO14A_REQUEST_TRIGGER) iso14a_set_trigger(1); @@ -1788,7 +1789,19 @@ void ReaderIso14443a(UsbCommand * c, UsbCommand * ack) } if(param & ISO14A_APDU) { - ack->arg[0] = iso14_apdu(cmd, len, ack->d.asBytes); + memcpy(receiveBuf, ack->d.asBytes, len); + ack->arg[0] = iso14_apdu(cmd, len, receiveBuf); + + while(ack->arg[0] > sizeof(ack->d)) + { + memcpy(ack->d.asBytes, receiveBuf, sizeof(ack->d)); + UsbSendPacket((void *)ack, sizeof(UsbCommand)); + + receiveBuf+=sizeof(ack->d); + ack->arg[0]-=sizeof(ack->d); + } + + memcpy(ack->d.asBytes, receiveBuf, ack->arg[0]); UsbSendPacket((void *)ack, sizeof(UsbCommand)); } @@ -1850,11 +1863,12 @@ void ReaderMifare(uint32_t parameter) while(TRUE) { - LED_C_ON(); + LED_C_OFF(); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - SpinDelay(200); + SpinDelay(50); FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_ISO14443A | FPGA_HF_ISO14443A_READER_MOD); - LED_C_OFF(); + LED_C_ON(); + SpinDelay(2); // Test if the action was cancelled if(BUTTON_PRESS()) { @@ -2512,4 +2526,4 @@ done: Dbprintf("maxDataLen=%x, Uart.state=%x, Uart.byteCnt=%x Uart.byteCntMax=%x", maxDataLen, Uart.state, Uart.byteCnt, Uart.byteCntMax); LEDsoff(); -} \ No newline at end of file +}