#include "lfsampling.h"
#include "BigBuf.h"
#include "mifareutil.h"
+#include "pcf7931.h"
#ifdef WITH_LCD
#include "LCD.h"
#endif
// measure the USB Speed by sending SpeedTestBufferSize bytes to client and measuring the elapsed time.
// Note: this mimics GetFromBigbuf(), i.e. we have the overhead of the UsbCommand structure included.
-void printUSBSpeed(uint32_t SpeedTestBufferSize)
+void printUSBSpeed(void)
{
Dbprintf("USB Speed:");
- Dbprintf(" Sending %d bytes payload...", SpeedTestBufferSize);
+ Dbprintf(" Sending USB packets to client...");
+ #define USB_SPEED_TEST_MIN_TIME 1500 // in milliseconds
uint8_t *test_data = BigBuf_get_addr();
+ uint32_t end_time;
- uint32_t start_time = GetTickCount();
-
+ uint32_t start_time = end_time = GetTickCount();
+ uint32_t bytes_transferred = 0;
+
LED_B_ON();
- for(size_t i=0; i<SpeedTestBufferSize; i += USB_CMD_DATA_SIZE) {
- size_t len = MIN((SpeedTestBufferSize - i), USB_CMD_DATA_SIZE);
- cmd_send(CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K,0,len,0,test_data,len);
+ while(end_time < start_time + USB_SPEED_TEST_MIN_TIME) {
+ cmd_send(CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K, 0, USB_CMD_DATA_SIZE, 0, test_data, USB_CMD_DATA_SIZE);
+ end_time = GetTickCount();
+ bytes_transferred += USB_CMD_DATA_SIZE;
}
LED_B_OFF();
- uint32_t end_time = GetTickCount();
-
- Dbprintf(" Time elapsed: %dms, USB Transfer Speed PM3 -> Client = %d Bytes/s",
- end_time - start_time,
- 1000* SpeedTestBufferSize / (end_time - start_time));
+ Dbprintf(" Time elapsed: %dms", end_time - start_time);
+ Dbprintf(" Bytes transferred: %d", bytes_transferred);
+ Dbprintf(" USB Transfer Speed PM3 -> Client = %d Bytes/s",
+ 1000 * bytes_transferred / (end_time - start_time));
}
/**
* Prints runtime information about the PM3.
**/
-void SendStatus(uint32_t SpeedTestBufferSize)
+void SendStatus(void)
{
BigBuf_print_status();
Fpga_print_status();
printConfig(); //LF Sampling config
- printUSBSpeed(SpeedTestBufferSize);
+ printUSBSpeed();
Dbprintf("Various");
Dbprintf(" MF_DBGLEVEL......%d", MF_DBGLEVEL);
Dbprintf(" ToSendMax........%d",ToSendMax);
break;
case CMD_T55XX_WRITE_BLOCK:
T55xxWriteBlock(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes[0]);
- cmd_send(CMD_ACK,0,0,0,0,0);
break;
case CMD_T55XX_READ_TRACE:
T55xxReadTrace();
break;
case CMD_PCF7931_READ:
ReadPCF7931();
- cmd_send(CMD_ACK,0,0,0,0,0);
+ break;
+ case CMD_PCF7931_WRITE:
+ WritePCF7931(c->d.asBytes[0],c->d.asBytes[1],c->d.asBytes[2],c->d.asBytes[3],c->d.asBytes[4],c->d.asBytes[5],c->d.asBytes[6], c->d.asBytes[9], c->d.asBytes[7]-128,c->d.asBytes[8]-128, c->arg[0], c->arg[1], c->arg[2]);
break;
case CMD_EM4X_READ_WORD:
EM4xReadWord(c->arg[1], c->arg[2],c->d.asBytes[0]);
break;
case CMD_AWID_DEMOD_FSK: // Set realtime AWID demodulation
CmdAWIDdemodFSK(c->arg[0], 0, 0, 1);
- break;
+ break;
#endif
#ifdef WITH_HITAG
ReaderIClass(c->arg[0]);
break;
case CMD_READER_ICLASS_REPLAY:
- ReaderIClass_Replay(c->arg[0], c->d.asBytes);
+ ReaderIClass_Replay(c->arg[0], c->d.asBytes);
break;
- case CMD_ICLASS_EML_MEMSET:
+ 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_READCHECK: // auth step 1
+ iClass_ReadCheck(c->arg[0], c->arg[1]);
+ break;
+ case CMD_ICLASS_READBLOCK:
+ iClass_ReadBlk(c->arg[0]);
+ break;
+ case CMD_ICLASS_AUTHENTICATION: //check
+ iClass_Authentication(c->d.asBytes);
+ 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
case CMD_BUFF_CLEAR:
SendVersion();
break;
case CMD_STATUS:
- SendStatus(c->arg[0]);
+ SendStatus();
break;
case CMD_PING:
cmd_send(CMD_ACK,0,0,0,0,0);