X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/902cb3c00b49535f0de9a3b6d5ba0c54260ccac1..db132ea0e8bef786f8f1741fed1cbc082e084c8a:/armsrc/appmain.c?ds=inline

diff --git a/armsrc/appmain.c b/armsrc/appmain.c
index e501dfdd..3f309520 100644
--- a/armsrc/appmain.c
+++ b/armsrc/appmain.c
@@ -79,7 +79,8 @@ void ToSendStuffBit(int b)
 
 void DbpString(char *str)
 {
-  cmd_send(CMD_DEBUG_PRINT_STRING,strlen(str),0,0,(byte_t*)str,strlen(str));
+  byte_t len = strlen(str);
+  cmd_send(CMD_DEBUG_PRINT_STRING,len,0,0,(byte_t*)str,len);
 //	/* this holds up stuff unless we're connected to usb */
 //	if (!UsbConnected())
 //		return;
@@ -355,6 +356,8 @@ void SendVersion(void)
 
 	FpgaGatherVersion(temp, sizeof(temp));
 	DbpString(temp);
+	// Send Chip ID
+	cmd_send(CMD_ACK,*(AT91C_DBGU_CIDR),0,0,NULL,0);
 }
 
 #ifdef WITH_LF
@@ -387,8 +390,9 @@ void SamyRun()
 
 	for (;;)
 	{
-		UsbPoll(FALSE);
-		WDT_HIT();
+//		UsbPoll(FALSE);
+		usb_poll();
+    WDT_HIT();
 
 		// Was our button held down or pressed?
 		int button_pressed = BUTTON_HELD(1000);
@@ -624,7 +628,7 @@ void UsbPacketReceived(uint8_t *packet, int len)
 #ifdef WITH_LF
 		case CMD_ACQUIRE_RAW_ADC_SAMPLES_125K:
 			AcquireRawAdcSamples125k(c->arg[0]);
-      cmd_send(CMD_ACK,0,0,0,0,0);
+			cmd_send(CMD_ACK,0,0,0,0,0);
 			break;
 		case CMD_MOD_THEN_ACQUIRE_RAW_ADC_SAMPLES_125K:
 			ModThenAcquireRawAdcSamples125k(c->arg[0],c->arg[1],c->arg[2],c->d.asBytes);
@@ -635,8 +639,8 @@ void UsbPacketReceived(uint8_t *packet, int len)
 		case CMD_HID_SIM_TAG:
 			CmdHIDsimTAG(c->arg[0], c->arg[1], 1);					// Simulate HID tag by ID
 			break;
-		case CMD_HID_CLONE_TAG:
-			CopyHIDtoT55x7(c->arg[0], c->arg[1]);					// Clone HID tag by ID to T55x7
+    case CMD_HID_CLONE_TAG: // Clone HID tag by ID to T55x7
+			CopyHIDtoT55x7(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes[0]);
 			break;
 		case CMD_EM410X_WRITE_TAG:
 			WriteEM410x(c->arg[0], c->arg[1], c->arg[2]);
@@ -661,6 +665,26 @@ void UsbPacketReceived(uint8_t *packet, int len)
 		case CMD_INDALA_CLONE_TAG_L:					// Clone Indala 224-bit tag by UID to T55x7
 			CopyIndala224toT55x7(c->d.asDwords[0], c->d.asDwords[1], c->d.asDwords[2], c->d.asDwords[3], c->d.asDwords[4], c->d.asDwords[5], c->d.asDwords[6]);
 			break;
+		case CMD_T55XX_READ_BLOCK:
+			T55xxReadBlock(c->arg[1], c->arg[2],c->d.asBytes[0]);
+			break;
+		case CMD_T55XX_WRITE_BLOCK:
+			T55xxWriteBlock(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes[0]);
+			break;
+		case CMD_T55XX_READ_TRACE: // Clone HID tag by ID to T55x7
+			T55xxReadTrace();
+			break;
+		case CMD_PCF7931_READ: // Read PCF7931 tag
+			ReadPCF7931();
+			cmd_send(CMD_ACK,0,0,0,0,0);
+//      	UsbSendPacket((uint8_t*)&ack, sizeof(ack));
+			break;
+		case CMD_EM4X_READ_WORD:
+			EM4xReadWord(c->arg[1], c->arg[2],c->d.asBytes[0]);
+			break;
+		case CMD_EM4X_WRITE_WORD:
+			EM4xWriteWord(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes[0]);
+			break;
 #endif
 
 #ifdef WITH_HITAG
@@ -722,10 +746,10 @@ void UsbPacketReceived(uint8_t *packet, int len)
 			AcquireRawAdcSamplesIso14443(c->arg[0]);
 			break;
 		case CMD_READ_SRI512_TAG:
-			ReadSRI512Iso14443(c->arg[0]);
+			ReadSTMemoryIso14443(0x0F);
 			break;
 		case CMD_READ_SRIX4K_TAG:
-			ReadSRIX4KIso14443(c->arg[0]);
+			ReadSTMemoryIso14443(0x7F);
 			break;
 		case CMD_SNOOP_ISO_14443:
 			SnoopIso14443();
@@ -733,6 +757,9 @@ void UsbPacketReceived(uint8_t *packet, int len)
 		case CMD_SIMULATE_TAG_ISO_14443:
 			SimulateIso14443Tag();
 			break;
+		case CMD_ISO_14443B_COMMAND:
+			SendRawCommand14443B(c->arg[0],c->arg[1],c->arg[2],c->d.asBytes);
+			break;
 #endif
 
 #ifdef WITH_ISO14443a
@@ -743,24 +770,36 @@ void UsbPacketReceived(uint8_t *packet, int len)
 			ReaderIso14443a(c);
 			break;
 		case CMD_SIMULATE_TAG_ISO_14443a:
-			SimulateIso14443aTag(c->arg[0], c->arg[1], c->arg[2]);  // ## Simulate iso14443a tag - pass tag type & UID
+			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_READER_MIFARE:
-			ReaderMifare(c->arg[0]);
+            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->d.asBytes);
+			break;
+		case CMD_MIFAREU_READCARD:
+			MifareUReadCard(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_MIFAREU_WRITEBL_COMPAT:
+			MifareUWriteBlock(c->arg[0], c->d.asBytes);
+                        break;
+		case CMD_MIFAREU_WRITEBL:
+                        MifareUWriteBlock_Special(c->arg[0], c->d.asBytes);
+                        break;
 		case CMD_MIFARE_NESTED:
 			MifareNested(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes);
 			break;
@@ -841,7 +880,7 @@ void UsbPacketReceived(uint8_t *packet, int len)
 			LED_D_OFF(); // LED D indicates field ON or OFF
 			break;
 
-		case CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K: {
+		case CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K:
 //			UsbCommand n;
 //			if(c->cmd == CMD_DOWNLOAD_RAW_ADC_SAMPLES_125K) {
 //				n.cmd = CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K;
@@ -855,24 +894,24 @@ void UsbPacketReceived(uint8_t *packet, int len)
       //			UsbSendPacket((uint8_t *)&n, sizeof(n));
       //			LED_B_OFF();
 
-      LED_B_ON();
-      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,0,((byte_t*)BigBuf)+c->arg[0]+i,len);
-      }
-      // Trigger a finish downloading signal with an ACK frame
-      cmd_send(CMD_ACK,0,0,0,0,0);
+			LED_B_ON();
+			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,0,((byte_t*)BigBuf)+c->arg[0]+i,len);
+			}
+			// Trigger a finish downloading signal with an ACK frame
+			cmd_send(CMD_ACK,0,0,0,0,0);
 			LED_B_OFF();
-		} break;
+			break;
 
 		case CMD_DOWNLOADED_SIM_SAMPLES_125K: {
 			uint8_t *b = (uint8_t *)BigBuf;
 			memcpy(b+c->arg[0], c->d.asBytes, 48);
 			//Dbprintf("copied 48 bytes to %i",b+c->arg[0]);
 //			UsbSendPacket((uint8_t*)&ack, sizeof(ack));
-      cmd_send(CMD_ACK,0,0,0,0,0);
-		} break;
-
+			cmd_send(CMD_ACK,0,0,0,0,0);
+			break;
+		}	
 		case CMD_READ_MEM:
 			ReadMem(c->arg[0]);
 			break;
@@ -904,35 +943,35 @@ void UsbPacketReceived(uint8_t *packet, int len)
 #endif
 		case CMD_SETUP_WRITE:
 		case CMD_FINISH_WRITE:
-		case CMD_HARDWARE_RESET: {
-			USB_D_PLUS_PULLUP_OFF();
+		case CMD_HARDWARE_RESET:
+			usb_disable();
 			SpinDelay(1000);
 			SpinDelay(1000);
 			AT91C_BASE_RSTC->RSTC_RCR = RST_CONTROL_KEY | AT91C_RSTC_PROCRST;
 			for(;;) {
 				// We're going to reset, and the bootrom will take control.
 			}
-        } break;
+			break;
 
-		case CMD_START_FLASH: {
+		case CMD_START_FLASH:
 			if(common_area.flags.bootrom_present) {
 				common_area.command = COMMON_AREA_COMMAND_ENTER_FLASH_MODE;
 			}
-			USB_D_PLUS_PULLUP_OFF();
+			usb_disable();
 			AT91C_BASE_RSTC->RSTC_RCR = RST_CONTROL_KEY | AT91C_RSTC_PROCRST;
 			for(;;);
-        } break;
+			break;
 
 		case CMD_DEVICE_INFO: {
 			uint32_t dev_info = DEVICE_INFO_FLAG_OSIMAGE_PRESENT | DEVICE_INFO_FLAG_CURRENT_MODE_OS;
 			if(common_area.flags.bootrom_present) dev_info |= DEVICE_INFO_FLAG_BOOTROM_PRESENT;
 //			UsbSendPacket((uint8_t*)&c, sizeof(c));
-      cmd_send(CMD_DEVICE_INFO,dev_info,0,0,0,0);
-		} break;
-            
-		default: {
+			cmd_send(CMD_DEVICE_INFO,dev_info,0,0,0,0);	
+			break;
+		}
+		default:
 			Dbprintf("%s: 0x%04x","unknown command:",c->cmd);
-        } break;
+			break;
 	}
 }
 
@@ -953,9 +992,8 @@ void  __attribute__((noreturn)) AppMain(void)
 	LED_B_OFF();
 	LED_A_OFF();
 
-  // Init USB device
+  // Init USB device`
   usb_enable();
-  UsbStart();
 //	UsbStart();
 
 	// The FPGA gets its clock from us from PCK0 output, so set that up.