#include <stdarg.h>
#include "legicrf.h"
-#include <hitag2.h>
+#include "hitag2.h"
+#include "hitagS.h"
#include "lfsampling.h"
#include "BigBuf.h"
#include "mifareutil.h"
// Debug print functions, to go out over USB, to the usual PC-side client.
//=============================================================================
+void DbpStringEx(char *str, uint32_t cmd){
+ byte_t len = strlen(str);
+ cmd_send(CMD_DEBUG_PRINT_STRING,len, cmd,0,(byte_t*)str,len);
+}
+
void DbpString(char *str) {
- byte_t len = strlen(str);
- cmd_send(CMD_DEBUG_PRINT_STRING,len,0,0,(byte_t*)str,len);
+ DbpStringEx(str, 0);
}
#if 0
void DbpIntegers(int x1, int x2, int x3) {
- cmd_send(CMD_DEBUG_PRINT_INTEGERS,x1,x2,x3,0,0);
+ cmd_send(CMD_DEBUG_PRINT_INTEGERS,x1,x2,x3,0,0);
}
#endif
+void DbprintfEx(uint32_t cmd, const char *fmt, ...) {
+ // should probably limit size here; oh well, let's just use a big buffer
+ char output_string[128] = {0x00};
+ va_list ap;
+
+ va_start(ap, fmt);
+ kvsprintf(fmt, output_string, 10, ap);
+ va_end(ap);
+
+ DbpStringEx(output_string, cmd);
+}
void Dbprintf(const char *fmt, ...) {
// should probably limit size here; oh well, let's just use a big buffer
void MeasureAntennaTuningHf(void) {
int vHf = 0; // in mV
-
- DbpString("Measuring HF antenna, press button to exit");
-
// Let the FPGA drive the high-frequency antenna around 13.56 MHz.
FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
FpgaWriteConfWord(FPGA_MAJOR_MODE_HF_READER_RX_XCORR);
- for (;;) {
+ while ( !BUTTON_PRESS() ){
SpinDelay(20);
vHf = (MAX_ADC_HF_VOLTAGE * AvgAdc(ADC_CHAN_HF)) >> 10;
-
- Dbprintf("%d mV",vHf);
- if (BUTTON_PRESS()) break;
+ //Dbprintf("%d mV",vHf);
+ DbprintfEx(CMD_MEASURE_ANTENNA_TUNING_HF, "%d mV",vHf);
}
-
- DbpString("cancelled");
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
+ DbpString("cancelled");
}
SpinDelay(500);
CmdHIDdemodFSK(1, &high[selected], &low[selected], 0);
- Dbprintf("Recorded %x %x %x", selected, high[selected], low[selected]);
+ Dbprintf("Recorded %x %x %08x", selected, high[selected], low[selected]);
LEDsoff();
LED(selected + 1, 0);
LED(LED_ORANGE, 0);
// record
- Dbprintf("Cloning %x %x %x", selected, high[selected], low[selected]);
+ Dbprintf("Cloning %x %x %08x", selected, high[selected], low[selected]);
// wait for button to be released
while(BUTTON_PRESS())
/* need this delay to prevent catching some weird data */
SpinDelay(500);
- CopyHIDtoT55x7(high[selected], low[selected], 0, 0);
- Dbprintf("Cloned %x %x %x", selected, high[selected], low[selected]);
+ CopyHIDtoT55x7(0, high[selected], low[selected], 0);
+ Dbprintf("Cloned %x %x %08x", selected, high[selected], low[selected]);
LEDsoff();
LED(selected + 1, 0);
while(BUTTON_PRESS())
WDT_HIT();
- Dbprintf("%x %x %x", selected, high[selected], low[selected]);
+ Dbprintf("%x %x %08x", selected, high[selected], low[selected]);
CmdHIDsimTAG(high[selected], low[selected], 0);
DbpString("Done playing");
case CMD_READER_HITAG: // Reader for Hitag tags, args = type and function
ReaderHitag((hitag_function)c->arg[0],(hitag_data*)c->d.asBytes);
break;
+ case CMD_SIMULATE_HITAG_S:// Simulate Hitag s tag, args = memory content
+ SimulateHitagSTag((bool)c->arg[0],(byte_t*)c->d.asBytes);
+ break;
+ case CMD_TEST_HITAGS_TRACES:// Tests every challenge within the given file
+ check_challenges((bool)c->arg[0],(byte_t*)c->d.asBytes);
+ break;
+ case CMD_READ_HITAG_S://Reader for only Hitag S tags, args = key or challenge
+ ReadHitagS((hitag_function)c->arg[0],(hitag_data*)c->d.asBytes);
+ break;
+ case CMD_WR_HITAG_S://writer for Hitag tags args=data to write,page and key or challenge
+ WritePageHitagS((hitag_function)c->arg[0],(hitag_data*)c->d.asBytes,c->arg[2]);
+ break;
#endif
#ifdef WITH_ISO15693