From bb4b0f1b9c34f7c4901fcd63079940aa33d27c09 Mon Sep 17 00:00:00 2001 From: Stefan `Sec` Zehl Date: Mon, 27 Jun 2011 01:35:32 +0200 Subject: [PATCH] Add global usbMSCenabled flag. Make ISPandReset honor this flag by disabling MSC first --- firmware/basic/basic.h | 3 +++ firmware/basic/reinvoke_isp.c | 10 ++++++++-- firmware/usb/usbmsc.c | 3 +++ firmware/usb/usbmsc.h | 1 + 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/firmware/basic/basic.h b/firmware/basic/basic.h index 8b4281a..02c68d2 100644 --- a/firmware/basic/basic.h +++ b/firmware/basic/basic.h @@ -143,4 +143,7 @@ uint8_t getInput(void); uint32_t GetUUID32(void); uint16_t GetUUID16(void); +// for core/iap/iap.c (no official definition) +void iap_entry(uint32_t param_tab[], uint32_t result_tab[]); + #endif diff --git a/firmware/basic/reinvoke_isp.c b/firmware/basic/reinvoke_isp.c index 5e5afe5..a3d5888 100644 --- a/firmware/basic/reinvoke_isp.c +++ b/firmware/basic/reinvoke_isp.c @@ -1,5 +1,7 @@ #include "lpc134x.h" #include "sysdefs.h" +#include "basic/basic.h" +#include "usb/usbmsc.h" /* Missing from core */ @@ -73,7 +75,11 @@ void EnableWatchdog(uint32_t ms){ }; void ISPandReset(int delay){ - EnableWatchdog(1000*delay); - ReinvokeISP(); + if(usbMSCenabled){ + usbMSCOff(); + delayms(500); + }; + EnableWatchdog(1000*delay); + ReinvokeISP(); }; diff --git a/firmware/usb/usbmsc.c b/firmware/usb/usbmsc.c index acc93c2..20172d1 100644 --- a/firmware/usb/usbmsc.c +++ b/firmware/usb/usbmsc.c @@ -12,6 +12,7 @@ USB_DEV_INFO DeviceInfo; MSC_DEVICE_INFO MscDevInfo; ROM ** rom = (ROM **)0x1fff1ff8; +char usbMSCenabled=0; void usbMSCWrite(uint32_t offset, uint8_t src[], uint32_t length) { dataflash_random_write(src, offset, length); @@ -84,6 +85,7 @@ void usbMSCInit(void) { (*rom)->pUSBD->init(&DeviceInfo); /* USB Initialization */ (*rom)->pUSBD->connect(true); /* USB Connect */ + usbMSCenabled=1; } #ifdef CFG_USBMSC @@ -94,5 +96,6 @@ void USB_IRQHandler() { void usbMSCOff(void) { (*rom)->pUSBD->connect(false); /* USB Disconnect */ + usbMSCenabled=0; } diff --git a/firmware/usb/usbmsc.h b/firmware/usb/usbmsc.h index 84e7bdc..defe55b 100644 --- a/firmware/usb/usbmsc.h +++ b/firmware/usb/usbmsc.h @@ -39,6 +39,7 @@ #include "projectconfig.h" +extern char usbMSCenabled; void usbMSCWrite(uint32_t offset, uint8_t src[], uint32_t length); void usbMSCRead(uint32_t offset, uint8_t dst[], uint32_t length); void usbMSCInit(void);