From 17db533dfc3dd73c140cc51487b5c5776f39fff9 Mon Sep 17 00:00:00 2001
From: Michal Ludvig <mludvig@logix.net.nz>
Date: Thu, 8 Oct 2009 05:00:41 +0000
Subject: [PATCH] * buspirate.c: Optimised buspirate_cmd() - reading 1kB EEPROM
 now   takes only 14 sec instead of almost 2 mins with the original  
 implementation.

git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk@844 81a1dc3b-b13d-400b-aceb-764788c761c2
---
 avrdude/ChangeLog   | 6 ++++++
 avrdude/buspirate.c | 8 +++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/avrdude/ChangeLog b/avrdude/ChangeLog
index 79b18758..591c74e2 100644
--- a/avrdude/ChangeLog
+++ b/avrdude/ChangeLog
@@ -1,3 +1,9 @@
+2009-10-08  Michal Ludvig  <mludvig@logix.net.nz>
+
+	* buspirate.c: Optimised buspirate_cmd() - reading 1kB EEPROM now
+	  takes only 14 sec instead of almost 2 mins with the original
+	  implementation.
+
 2009-10-08  Michal Ludvig  <mludvig@logix.net.nz>
 
 	* buspirate.c, buspirate.h: Support for the BusPirate programmer
diff --git a/avrdude/buspirate.c b/avrdude/buspirate.c
index ad7e385a..dc9313df 100644
--- a/avrdude/buspirate.c
+++ b/avrdude/buspirate.c
@@ -280,7 +280,7 @@ static int buspirate_cmd(struct programmer_t *pgm,
 	snprintf(buf, sizeof(buf), "0x%02x 0x%02x 0x%02x 0x%02x\n",
 			 cmd[0], cmd[1], cmd[2], cmd[3]);
 	buspirate_send(pgm, buf);
-	while (1) {
+	while (i < 4) {
 		rcvd = buspirate_readline(pgm, NULL, 0);
 		/* WRITE: 0xAC READ: 0x04 */
 		if (sscanf(rcvd, "WRITE: 0x%x READ: 0x%x", &spi_write, &spi_read) == 2) {
@@ -289,10 +289,16 @@ static int buspirate_cmd(struct programmer_t *pgm,
 		if (buspirate_is_prompt(rcvd))
 			break;
 	}
+
 	if (i != 4) {
 		fprintf(stderr, "%s: error: SPI has not read 4 bytes back\n", progname);
 		return -1;
 	}
+
+	/* wait for prompt */
+	while (buspirate_getc(pgm) != '>')
+		/* do nothing */;
+
 	return 0;
 }