+
+#ifdef WITH_ISO14443a
+ case CMD_SNOOP_ISO_14443a:
+ SnoopIso14443a(c->arg[0]);
+ break;
+ case CMD_READER_ISO_14443a:
+ ReaderIso14443a(c);
+ break;
+ case CMD_SIMULATE_TAG_ISO_14443a:
+ SimulateIso14443aTag(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes); // ## Simulate iso14443a tag - pass tag type & UID
+ break;
+
+ case CMD_EPA_PACE_COLLECT_NONCE:
+ EPA_PACE_Collect_Nonce(c);
+ break;
+ case CMD_EPA_PACE_REPLAY:
+ EPA_PACE_Replay(c);
+ break;
+
+ case CMD_READER_MIFARE:
+ ReaderMifare(c->arg[0]);
+ break;
+ case CMD_MIFARE_READBL:
+ MifareReadBlock(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+ break;
+ case CMD_MIFAREU_READBL:
+ MifareUReadBlock(c->arg[0],c->arg[1], c->d.asBytes);
+ break;
+ case CMD_MIFAREUC_AUTH:
+ MifareUC_Auth(c->arg[0],c->d.asBytes);
+ break;
+ case CMD_MIFAREU_READCARD:
+ MifareUReadCard(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+ break;
+ case CMD_MIFAREUC_SETPWD:
+ MifareUSetPwd(c->arg[0], c->d.asBytes);
+ break;
+ case CMD_MIFARE_READSC:
+ MifareReadSector(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+ break;
+ case CMD_MIFARE_WRITEBL:
+ MifareWriteBlock(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+ break;
+ case CMD_MIFARE_PERSONALIZE_UID:
+ MifarePersonalizeUID(c->arg[0], c->arg[1], c->d.asBytes);
+ break;
+ //case CMD_MIFAREU_WRITEBL_COMPAT:
+ //MifareUWriteBlockCompat(c->arg[0], c->d.asBytes);
+ //break;
+ case CMD_MIFAREU_WRITEBL:
+ MifareUWriteBlock(c->arg[0], c->arg[1], c->d.asBytes);
+ break;
+ case CMD_MIFARE_ACQUIRE_ENCRYPTED_NONCES:
+ MifareAcquireEncryptedNonces(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+ break;
+ case CMD_MIFARE_NESTED:
+ MifareNested(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+ break;
+ case CMD_MIFARE_CHKKEYS:
+ MifareChkKeys(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+ break;
+ case CMD_SIMULATE_MIFARE_CARD:
+ MifareSim(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+ break;
+
+ // emulator
+ case CMD_MIFARE_SET_DBGMODE:
+ MifareSetDbgLvl(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+ break;
+ case CMD_MIFARE_EML_MEMCLR:
+ MifareEMemClr(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+ break;
+ case CMD_MIFARE_EML_MEMSET:
+ MifareEMemSet(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+ break;
+ case CMD_MIFARE_EML_MEMGET:
+ MifareEMemGet(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+ break;
+ case CMD_MIFARE_EML_CARDLOAD:
+ MifareECardLoad(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+ break;
+
+ // Work with "magic Chinese" card
+ case CMD_MIFARE_CWIPE:
+ MifareCWipe(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+ break;
+ case CMD_MIFARE_CSETBLOCK:
+ MifareCSetBlock(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+ break;
+ case CMD_MIFARE_CGETBLOCK:
+ MifareCGetBlock(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+ break;
+ case CMD_MIFARE_CIDENT:
+ MifareCIdent();
+ break;
+
+ // mifare sniffer
+ case CMD_MIFARE_SNIFFER:
+ SniffMifare(c->arg[0]);
+ break;
+
+#endif
+
+#ifdef WITH_ICLASS
+ // Makes use of ISO14443a FPGA Firmware
+ case CMD_SNOOP_ICLASS:
+ SnoopIClass(c->arg[0], c->d.asBytes);
+ break;
+ case CMD_SIMULATE_TAG_ICLASS:
+ SimulateIClass(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
+ break;
+ case CMD_READER_ICLASS:
+ ReaderIClass(c->arg[0]);
+ break;
+ case CMD_ICLASS_EML_MEMSET:
+ emlSet(c->d.asBytes,c->arg[0], c->arg[1]);
+ break;
+ case CMD_ICLASS_WRITEBLOCK:
+ iClass_WriteBlock(c->arg[0], c->d.asBytes);
+ break;
+ case CMD_ICLASS_READBLOCK:
+ iClass_ReadBlk(c->arg[0]);
+ break;
+ case CMD_ICLASS_CHECK:
+ iClass_Check(c->d.asBytes);
+ break;
+ case CMD_ICLASS_READCHECK:
+ iClass_Readcheck(c->arg[0], c->arg[1]);
+ break;
+ case CMD_ICLASS_DUMP:
+ iClass_Dump(c->arg[0], c->arg[1]);
+ break;
+ case CMD_ICLASS_CLONE:
+ iClass_Clone(c->arg[0], c->arg[1], c->d.asBytes);
+ break;
+#endif
+
+#ifdef WITH_HFSNOOP
+ case CMD_HF_SNIFFER:
+ HfSnoop(c->arg[0], c->arg[1]);
+ break;
+ case CMD_HF_PLOT:
+ HfPlot();
+ break;
+#endif
+
+#ifdef WITH_SMARTCARD
+ case CMD_SMART_ATR: {
+ SmartCardAtr();
+ break;
+ }
+ case CMD_SMART_SETCLOCK:{
+ SmartCardSetClock(c->arg[0]);
+ break;
+ }
+ case CMD_SMART_RAW: {
+ SmartCardRaw(c->arg[0], c->arg[1], c->d.asBytes);
+ break;
+ }
+ case CMD_SMART_UPLOAD: {
+ // upload file from client
+ uint8_t *mem = BigBuf_get_addr();
+ memcpy( mem + c->arg[0], c->d.asBytes, USB_CMD_DATA_SIZE);
+ cmd_send(CMD_ACK,1,0,0,0,0);
+ break;
+ }
+ case CMD_SMART_UPGRADE: {
+ SmartCardUpgrade(c->arg[0]);
+ break;
+ }
+#endif
+
+ case CMD_BUFF_CLEAR:
+ BigBuf_Clear();
+ break;
+
+ case CMD_MEASURE_ANTENNA_TUNING:
+ MeasureAntennaTuning(c->arg[0]);
+ break;
+
+ case CMD_MEASURE_ANTENNA_TUNING_HF:
+ MeasureAntennaTuningHf();
+ break;
+
+ case CMD_LISTEN_READER_FIELD:
+ ListenReaderField(c->arg[0]);
+ break;
+
+ case CMD_FPGA_MAJOR_MODE_OFF: // ## FPGA Control
+ LED_A_ON();
+ FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+ SpinDelay(200);
+ LED_D_OFF(); // LED D indicates field ON or OFF
+ LED_A_OFF();
+ break;
+
+ case CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K:
+ LED_B_ON();
+ uint8_t *BigBuf = BigBuf_get_addr();
+ for(size_t i=0; i<c->arg[1]; i += USB_CMD_DATA_SIZE) {
+ size_t len = MIN((c->arg[1] - i),USB_CMD_DATA_SIZE);
+ cmd_send(CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K,i,len,BigBuf_get_traceLen(),BigBuf+c->arg[0]+i,len);
+ }
+ // Trigger a finish downloading signal with an ACK frame
+ cmd_send(CMD_ACK,1,0,BigBuf_get_traceLen(),getSamplingConfig(),sizeof(sample_config));
+ LED_B_OFF();
+ break;
+
+ case CMD_DOWNLOADED_SIM_SAMPLES_125K: {
+ // iceman; since changing fpga_bitstreams clears bigbuff, Its better to call it before.
+ // to be able to use this one for uploading data to device
+ // arg1 = 0 upload for LF usage
+ // 1 upload for HF usage
+ if (c->arg[1] == 0)
+ FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
+ else
+ FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
+
+ uint8_t *b = BigBuf_get_addr();
+ memcpy(b+c->arg[0], c->d.asBytes, USB_CMD_DATA_SIZE);
+ cmd_send(CMD_ACK,0,0,0,0,0);
+ break;
+ }