X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/3a8464f0679d86904aa4ae2abb0cafe02e222ce8..f39c4119e0687fd35689fb971687e9bb1585ffe8:/client/flasher.c?ds=sidebyside

diff --git a/client/flasher.c b/client/flasher.c
index bcbe2d77..ebcd3391 100644
--- a/client/flasher.c
+++ b/client/flasher.c
@@ -2,19 +2,30 @@
 #include <stdio.h>
 #include <unistd.h>
 #include <stdlib.h>
+#include <stdint.h>
+#include <stdbool.h>
 #include <strings.h>
 #include <string.h>
 #include <errno.h>
 #include <ctype.h>
 
-#include "translate.h"
 #include "prox.h"
 #include "proxmark3.h"
 
-static DWORD ExpectedAddr;
-static BYTE QueuedToSend[256];
-static BOOL AllWritten;
+static uint32_t ExpectedAddr;
+static uint8_t QueuedToSend[256];
+static bool AllWritten;
 #define PHYSICAL_FLASH_START 0x100000
+unsigned int current_command = CMD_UNKNOWN;
+
+void WaitForAck(void) {
+	UsbCommand ack;
+	ReceiveCommand(&ack);
+	if(ack.cmd != CMD_ACK) {
+		printf("bad ACK\n");
+		exit(-1);
+	}
+}
 
 struct partition {
 	int start;
@@ -43,7 +54,8 @@ static void FlushPrevious(int translate)
 		c.cmd = CMD_SETUP_WRITE;
 		memcpy(c.d.asBytes, QueuedToSend+i, 48);
 		c.arg[0] = (i/4);
-		SendCommand(&c, TRUE);
+		SendCommand(&c);
+		WaitForAck();
 	}
 
 	c.cmd = CMD_FINISH_WRITE;
@@ -53,16 +65,17 @@ static void FlushPrevious(int translate)
 	}
 	printf("c.arg[0] = %08x\r", c.arg[0]);
 	memcpy(c.d.asBytes, QueuedToSend+240, 16);
-	SendCommand(&c, TRUE);
+	SendCommand(&c);
+	WaitForAck();
 
-	AllWritten = TRUE;
+	AllWritten = true;
 }
 
 /* Where must be between start_addr (inclusive) and end_addr (exclusive).
  */
-static void GotByte(DWORD where, BYTE which, int start_addr, int end_addr, int translate)
+static void GotByte(uint32_t where, uint8_t which, int start_addr, int end_addr, int translate)
 {
-	AllWritten = FALSE;
+	AllWritten = false;
 	
 	if(where < start_addr || where >= end_addr) {
 		printf("bad: got byte at %08x, outside of range %08x-%08x\n", where, start_addr, end_addr);
@@ -95,7 +108,7 @@ static int HexVal(int c)
 	}
 }
 
-static BYTE HexByte(char *s)
+static uint8_t HexByte(char *s)
 {
 	return (HexVal(s[0]) << 4) | HexVal(s[1]);
 }
@@ -120,7 +133,7 @@ static void LoadFlashFromSRecords(const char *file, int start_addr, int end_addr
 			char addrStr[9];
 			memcpy(addrStr, s, 8);
 			addrStr[8] = '\0';
-			DWORD addr;
+			uint32_t addr;
 			sscanf(addrStr, "%x", &addr);
 			s += 8;
 			
@@ -160,7 +173,8 @@ static int PrepareFlash(struct partition *p, const char *filename, unsigned int
 		} else {
 			c.arg[2] = 0;
 		}
-		SendCommand(&c, TRUE);
+		SendCommand(&c);
+		WaitForAck();
 		translate = 0;
 	} else {
 		fprintf(stderr, "Warning: Your bootloader does not understand the new START_FLASH command\n");
@@ -178,7 +192,7 @@ static unsigned int GetProxmarkState(void)
 	
 	UsbCommand c;
 	c.cmd = CMD_DEVICE_INFO;
-	SendCommand(&c, FALSE);
+	SendCommand(&c);
 	
 	UsbCommand resp;
 	ReceiveCommand(&resp);
@@ -233,13 +247,13 @@ static unsigned int EnterFlashState(void)
 			 * enter the bootrom on the next boot.
 			 */
 			c.cmd = CMD_START_FLASH;
-			SendCommand(&c, FALSE);
+			SendCommand(&c);
 			fprintf(stderr,"(You don't have to do anything. Press and release the button only if you want to abort)\n");
 			fprintf(stderr,"Waiting for Proxmark to reappear on USB... ");
 		} else {
 			/* Old style handover: Ask the user to press the button, then reset the board */
 			c.cmd = CMD_HARDWARE_RESET;
-			SendCommand(&c, FALSE);
+			SendCommand(&c);
 			fprintf(stderr,"(Press and hold down button NOW if your bootloader requires it)\n");
 			fprintf(stderr,"Waiting for Proxmark to reappear on USB... ");
 		}
@@ -345,7 +359,7 @@ int main(int argc, char **argv) {
 	UsbCommand c;
 	bzero(&c, sizeof(c));
 	c.cmd = CMD_HARDWARE_RESET;
-	SendCommand(&c, FALSE);
+	SendCommand(&c);
 
 	CloseProxmark();