X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/5a9506ac45ed0231c1a9b63e16a3e016fb2d4eba..04202e7aa76dd9f0628d8245ae01fd224e5fbf17:/armsrc/iso14443a.c diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index 3757043b..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)); } @@ -2513,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 +}