From dde2f8e09c773518c3a538afe6075a53a8fdacf7 Mon Sep 17 00:00:00 2001
From: laforge <laforge@6dc7ffe9-61d6-0310-9af1-9938baff3ed1>
Date: Sun, 17 Feb 2008 16:14:00 +0000
Subject: allow GETSTATE and GETSTATUS requests in MANIFEST state
 (compatibility with dfu-util)

git-svn-id: https://svn.openpcd.org:2342/trunk@413 6dc7ffe9-61d6-0310-9af1-9938baff3ed1
---
 firmware/src/dfu/dfu.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

(limited to 'firmware/src')

diff --git a/firmware/src/dfu/dfu.c b/firmware/src/dfu/dfu.c
index 07b7401..f740800 100644
--- a/firmware/src/dfu/dfu.c
+++ b/firmware/src/dfu/dfu.c
@@ -474,8 +474,19 @@ int __dfufunc dfu_ep0_handler(u_int8_t req_type, u_int8_t req,
 		}
 		break;
 	case DFU_STATE_dfuMANIFEST:
-		dfu_state = DFU_STATE_dfuERROR;
-		ret = RET_STALL;
+		switch (req) {
+		case USB_REQ_DFU_GETSTATUS:
+			dfu_state = DFU_STATE_dfuIDLE;
+			handle_getstatus();
+			break;
+		case USB_REQ_DFU_GETSTATE:
+			handle_getstate();
+			break;
+		default:
+			dfu_state = DFU_STATE_dfuERROR;
+			ret = RET_STALL;
+			break;
+		}
 		break;
 	case DFU_STATE_dfuMANIFEST_WAIT_RST:
 		/* we should never go here */
@@ -557,8 +568,13 @@ __dfustruct const struct usb_device_descriptor dfu_dev_descriptor = {
 	.idVendor		= USB_VENDOR_ID,
 	.idProduct		= USB_PRODUCT_ID,
 	.bcdDevice		= 0x0000,
+#ifdef CONFIG_USB_STRING
 	.iManufacturer		= 1,
 	.iProduct		= 2,
+#else
+	.iManufacturer		= 0,
+	.iProduct		= 0,
+#endif
 	.iSerialNumber		= 0x00,
 	.bNumConfigurations	= 0x01,
 };
@@ -876,7 +892,7 @@ void __dfufunc dfu_main(void)
 
 	AT91F_DBGU_Init();
 	AT91F_DBGU_Printk("\n\r\n\rsam7dfu - AT91SAM7 USB DFU bootloader\n\r"
-		 "(C) 2006 by Harald Welte <hwelte@hmw-consulting.de>\n\r"
+		 "(C) 2006-2008 by Harald Welte <hwelte@hmw-consulting.de>\n\r"
 		 "This software is FREE SOFTWARE licensed under GNU GPL\n\r");
 	AT91F_DBGU_Printk("Version " COMPILE_SVNREV 
 			  " compiled " COMPILE_DATE 
-- 
cgit v1.2.3