diff --git a/firmware/export/config/sansaclipplus.h b/firmware/export/config/sansaclipplus.h index 8a0a040..0d53774 100644 --- a/firmware/export/config/sansaclipplus.h +++ b/firmware/export/config/sansaclipplus.h @@ -179,8 +179,8 @@ /* enable these for the experimental usb stack */ #define HAVE_USBSTACK -#define USB_HANDLED_BY_OF -//#define USE_ROCKBOX_USB +//#define USB_HANDLED_BY_OF +#define USE_ROCKBOX_USB #define USB_VENDOR_ID 0x0781 #define USB_PRODUCT_ID 0x74d1 diff --git a/firmware/target/arm/as3525/usb-drv-as3525v2.c b/firmware/target/arm/as3525/usb-drv-as3525v2.c index 63f6e83..8e090fa 100644 --- a/firmware/target/arm/as3525/usb-drv-as3525v2.c +++ b/firmware/target/arm/as3525/usb-drv-as3525v2.c @@ -31,7 +31,7 @@ #include "panic.h" #include "mmu-arm.h" #include "system.h" -//#define LOGF_ENABLE +#define LOGF_ENABLE #include "logf.h" #include "usb-drv-as3525v2.h" #include "usb_core.h" @@ -90,6 +90,8 @@ static struct usb_endpoint endpoints[USB_NUM_ENDPOINTS][2]; static struct usb_ctrlrequest _ep0_setup_pkt __attribute__((aligned(32))); static struct usb_ctrlrequest *ep0_setup_pkt = AS3525_UNCACHED_ADDR(&_ep0_setup_pkt); +static int g_usbreset_count = 0; + /* state of EP0 */ static enum ep0state ep0_state; @@ -449,6 +451,8 @@ void usb_drv_init(void) wakeup_init(&endpoints[ep][DIR_OUT].complete); /* Enable global interrupts */ enable_global_interrupts(); + + g_usbreset_count = 0; } void usb_drv_exit(void) @@ -587,6 +591,19 @@ void INT_USB(void) { logf("usb-drv: bus reset"); + g_usbreset_count++; + + if(g_usbreset_count == 2) + { + logf("usb-drv: hard reset"); + logf("--------"); + logf("--------"); + DCTL |= DCTL_sftdiscon; + usb_delay(); + usb_drv_exit(); + usb_drv_init(); /* reset g_usbreset_count here */ + } + /* Clear the Remote Wakeup Signalling */ DCTL &= ~DCTL_rmtwkupsig; diff --git a/firmware/usbstack/usb_storage.c b/firmware/usbstack/usb_storage.c index fa723c0..b8cb035 100644 --- a/firmware/usbstack/usb_storage.c +++ b/firmware/usbstack/usb_storage.c @@ -23,7 +23,7 @@ #include "usb_core.h" #include "usb_drv.h" #include "usb_class_driver.h" -/*#define LOGF_ENABLE*/ +#define LOGF_ENABLE #include "logf.h" #include "storage.h" #include "disk.h"