From 87c14c294b984658ce3969494579b38fea42d1c3 Mon Sep 17 00:00:00 2001 From: Gareth McMullin Date: Sun, 18 Mar 2012 15:15:00 +1300 Subject: Fixed some issues in Windows DFU uploader. --- upgrade/dfu.h | 2 +- upgrade/main.c | 20 +++++++++++++++----- upgrade/stm32mem.c | 10 +++++----- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/upgrade/dfu.h b/upgrade/dfu.h index 1594962..e81ee44 100644 --- a/upgrade/dfu.h +++ b/upgrade/dfu.h @@ -33,7 +33,7 @@ #define STATE_DFU_IDLE 0x02 #define STATE_DFU_DOWNLOAD_SYNC 0x03 #define STATE_DFU_DOWNLOAD_BUSY 0x04 -define STATE_DFU_DOWNLOAD_IDLE 0x05 +#define STATE_DFU_DOWNLOAD_IDLE 0x05 #define STATE_DFU_MANIFEST_SYNC 0x06 #define STATE_DFU_MANIFEST 0x07 #define STATE_DFU_MANIFEST_WAIT_RESET 0x08 diff --git a/upgrade/main.c b/upgrade/main.c index bdb1b6b..651c753 100644 --- a/upgrade/main.c +++ b/upgrade/main.c @@ -21,6 +21,8 @@ #include #include +#include + #include "dfu.h" #include "stm32mem.h" #include "bindata.h" @@ -66,7 +68,7 @@ struct usb_device * find_dev(void) if((dev->descriptor.idProduct == 0x5740) && !strcmp(man, "Black Sphere Technologies") && - !strcmp(prod, "Black Magic Probe")) + !strcmp(prod, "Black Magic Firmware Upgrade")) return dev; if((dev->descriptor.idProduct == 0xDF11) && @@ -98,7 +100,8 @@ usb_dev_handle * get_dfu_interface(struct usb_device *dev, uint16_t *interface) //usb_set_configuration(handle, i); usb_claim_interface(handle, j); //usb_set_altinterface(handle, k); - *interface = j; + //*interface = j; + *interface = iface->bInterfaceNumber; return handle; } } @@ -122,6 +125,9 @@ int main(void) retry: if(!(dev = find_dev()) || !(handle = get_dfu_interface(dev, &iface))) { puts("FATAL: No compatible device found!\n"); +#ifdef WIN32 + system("pause"); +#endif return -1; } @@ -132,9 +138,9 @@ retry: usb_release_interface(handle, iface); usb_close(handle); #ifdef WIN32 - Sleep(3000); + Sleep(5000); #else - sleep(1); + sleep(5); #endif goto retry; } @@ -145,7 +151,7 @@ retry: for(offset = 0; offset < bindatalen; offset += 1024) { printf("Progress: %d%%\r", (offset*100)/bindatalen); fflush(stdout); - stm32_mem_erase(handle, iface, LOAD_ADDRESS + offset); + assert(stm32_mem_erase(handle, iface, LOAD_ADDRESS + offset) == 0); stm32_mem_write(handle, iface, (void*)&bindata[offset], 1024); } stm32_mem_manifest(handle, iface); @@ -155,6 +161,10 @@ retry: puts("All operations complete!\n"); +#ifdef WIN32 + system("pause"); +#endif + return 0; } diff --git a/upgrade/stm32mem.c b/upgrade/stm32mem.c index 10dd744..4731edc 100644 --- a/upgrade/stm32mem.c +++ b/upgrade/stm32mem.c @@ -43,16 +43,16 @@ static int stm32_download(usb_dev_handle *dev, uint16_t iface, while(1) { if((i = dfu_getstatus(dev, iface, &status)) < 0) return i; switch(status.bState) { - case STATE_DFU_DOWNLOAD_BUSY: + case STATE_DFU_DOWNLOAD_BUSY: #ifdef WIN32 Sleep(status.bwPollTimeout); #else usleep(status.bwPollTimeout * 1000); #endif break; - case STATE_DFU_DOWNLOAD_IDLE: + case STATE_DFU_DOWNLOAD_IDLE: return 0; - default: + default: return -1; } } @@ -87,9 +87,9 @@ int stm32_mem_manifest(usb_dev_handle *dev, uint16_t iface) usleep(status.bwPollTimeout * 1000); #endif switch(status.bState) { - case STATE_DFU_MANIFEST: + case STATE_DFU_MANIFEST: return 0; - default: + default: return -1; } } -- cgit v1.2.3