]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - armsrc/appmain.c
add 14a apdu send framing (based on RRG repo PR86 by Merlokk) (#795)
[proxmark3-svn] / armsrc / appmain.c
index c5c17867d708df5306739389327af9aad08cdfc2..2a16f5f0e70b418b7014259a4b6fce9ff43c8ff2 100644 (file)
 #include "legicrfsim.h"
 #include "hitag2.h"
 #include "hitagS.h"
 #include "legicrfsim.h"
 #include "hitag2.h"
 #include "hitagS.h"
+#include "iso15693.h"
 #include "lfsampling.h"
 #include "BigBuf.h"
 #include "mifareutil.h"
 #include "pcf7931.h"
 #include "i2c.h"
 #include "lfsampling.h"
 #include "BigBuf.h"
 #include "mifareutil.h"
 #include "pcf7931.h"
 #include "i2c.h"
+#include "hfsnoop.h"
+#include "fpgaloader.h"
 #ifdef WITH_LCD
  #include "LCD.h"
 #endif
 
 #ifdef WITH_LCD
  #include "LCD.h"
 #endif
 
+static uint32_t hw_capabilities;
 
 // Craig Young - 14a stand-alone code
 #ifdef WITH_ISO14443a
 
 // Craig Young - 14a stand-alone code
 #ifdef WITH_ISO14443a
@@ -311,8 +315,22 @@ extern struct version_information version_information;
 extern char *_bootphase1_version_pointer, _flash_start, _flash_end, _bootrom_start, _bootrom_end, __data_src_start__;
 
 
 extern char *_bootphase1_version_pointer, _flash_start, _flash_end, _bootrom_start, _bootrom_end, __data_src_start__;
 
 
+void set_hw_capabilities(void)
+{
+       if (I2C_is_available()) {
+               hw_capabilities |= HAS_SMARTCARD_SLOT;
+       }
+       
+       if (false) { // TODO: implement a test
+               hw_capabilities |= HAS_EXTRA_FLASH_MEM;
+       }
+}      
+
+
 void SendVersion(void)
 {
 void SendVersion(void)
 {
+       set_hw_capabilities();
+       
        char temp[USB_CMD_DATA_SIZE]; /* Limited data payload in USB packets */
        char VersionString[USB_CMD_DATA_SIZE] = { '\0' };
 
        char temp[USB_CMD_DATA_SIZE]; /* Limited data payload in USB packets */
        char VersionString[USB_CMD_DATA_SIZE] = { '\0' };
 
@@ -346,7 +364,7 @@ void SendVersion(void)
        // Send Chip ID and used flash memory
        uint32_t text_and_rodata_section_size = (uint32_t)&__data_src_start__ - (uint32_t)&_flash_start;
        uint32_t compressed_data_section_size = common_area.arg1;
        // Send Chip ID and used flash memory
        uint32_t text_and_rodata_section_size = (uint32_t)&__data_src_start__ - (uint32_t)&_flash_start;
        uint32_t compressed_data_section_size = common_area.arg1;
-       cmd_send(CMD_ACK, *(AT91C_DBGU_CIDR), text_and_rodata_section_size + compressed_data_section_size, 0, VersionString, strlen(VersionString));
+       cmd_send(CMD_ACK, *(AT91C_DBGU_CIDR), text_and_rodata_section_size + compressed_data_section_size, hw_capabilities, VersionString, strlen(VersionString));
 }
 
 // measure the USB Speed by sending SpeedTestBufferSize bytes to client and measuring the elapsed time.
 }
 
 // measure the USB Speed by sending SpeedTestBufferSize bytes to client and measuring the elapsed time.
@@ -1059,6 +1077,9 @@ void UsbPacketReceived(uint8_t *packet, int len)
                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_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_PCF7931_BRUTEFORCE:
+                       BruteForcePCF7931(c->arg[0], (c->arg[1] & 0xFF), c->d.asBytes[9], c->d.asBytes[7]-128,c->d.asBytes[8]-128);
+                       break;
                case CMD_EM4X_READ_WORD:
                        EM4xReadWord(c->arg[0], c->arg[1],c->arg[2]);
                        break;
                case CMD_EM4X_READ_WORD:
                        EM4xReadWord(c->arg[0], c->arg[1],c->arg[2]);
                        break;
@@ -1112,8 +1133,9 @@ void UsbPacketReceived(uint8_t *packet, int len)
                case CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_15693:
                        AcquireRawAdcSamplesIso15693();
                        break;
                case CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_15693:
                        AcquireRawAdcSamplesIso15693();
                        break;
-               case CMD_RECORD_RAW_ADC_SAMPLES_ISO_15693:
-                       RecordRawAdcSamplesIso15693();
+                       
+               case CMD_SNOOP_ISO_15693:
+                       SnoopIso15693();
                        break;
                        
                case CMD_ISO_15693_COMMAND:
                        break;
                        
                case CMD_ISO_15693_COMMAND:
@@ -1303,11 +1325,16 @@ void UsbPacketReceived(uint8_t *packet, int len)
                        iClass_Clone(c->arg[0], c->arg[1], c->d.asBytes);
                        break;
 #endif
                        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;
 #ifdef WITH_HFSNOOP
                case CMD_HF_SNIFFER:
                        HfSnoop(c->arg[0], c->arg[1]);
                        break;
+               case CMD_HF_PLOT:
+                       HfPlot();
+                       break;
 #endif
 #endif
+
 #ifdef WITH_SMARTCARD
                case CMD_SMART_ATR: {
                        SmartCardAtr();
 #ifdef WITH_SMARTCARD
                case CMD_SMART_ATR: {
                        SmartCardAtr();
@@ -1357,7 +1384,6 @@ void UsbPacketReceived(uint8_t *packet, int len)
                        break;
 
                case CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K:
                        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) {
                        LED_B_ON();
                        uint8_t *BigBuf = BigBuf_get_addr();
                        for(size_t i=0; i<c->arg[1]; i += USB_CMD_DATA_SIZE) {
Impressum, Datenschutz