// functions, You need to do the setup before calling them!
//-----------------------------------------------------------------------------
+#include "apps.h"
#include "iso14443a.h"
#include "iso14443b.h"
#include "epa.h"
-#include "cmd.h"
+#include "usb_cdc.h"
+#include "fpgaloader.h"
+#include "string.h"
+#include "util.h"
// Protocol and Parameter Selection Request for ISO 14443 type A cards
// use regular (1x) speed in both directions
switch(iso_type)
{
case 'a':
- return iso14_apdu(apdu, (uint16_t) length, response);
+ return iso14_apdu(apdu, (uint16_t) length, false, response, NULL);
break;
case 'b':
return iso14443b_apdu(apdu, length, response);
//-----------------------------------------------------------------------------
// Perform the PACE protocol by replaying given APDUs
//-----------------------------------------------------------------------------
-void EPA_PACE_Replay(UsbCommand *c)
-{
+void EPA_PACE_Replay(UsbCommand *c) {
uint32_t timings[sizeof(apdu_lengths_replay) / sizeof(apdu_lengths_replay[0])] = {0};
- // if an APDU has been passed, save it
+ // if an APDU has been passed, just save it
if (c->arg[0] != 0) {
// make sure it's not too big
- if(c->arg[2] > apdus_replay[c->arg[0] - 1].len)
- {
+ if(c->arg[2] > apdus_replay[c->arg[0] - 1].len) {
cmd_send(CMD_ACK, 1, 0, 0, NULL, 0);
+ return;
}
- memcpy(apdus_replay[c->arg[0] - 1].data + c->arg[1],
- c->d.asBytes,
- c->arg[2]);
+ memcpy(apdus_replay[c->arg[0] - 1].data + c->arg[1], c->d.asBytes, c->arg[2]);
// save/update APDU length
if (c->arg[1] == 0) {
apdu_lengths_replay[c->arg[0] - 1] = c->arg[2];
// power up the field
iso14443a_setup(FPGA_HF_ISO14443A_READER_MOD);
// select the card
- return_code = iso14443a_select_card(uid, &card_select_info, NULL);
+ return_code = iso14443a_select_card(uid, &card_select_info, NULL, true, 0, false);
if (return_code == 1) {
// send the PPS request
ReaderTransmit((uint8_t *)pps, sizeof(pps), NULL);