DFU: fix transitions between runtime and DFU mode

we now always go through a processor reset to avoid any state that might
be persistent/left-over during the switch.
diff --git a/firmware/libboard/common/source/board_cstartup_gnu.c b/firmware/libboard/common/source/board_cstartup_gnu.c
index f4792f5..bc89b1b 100644
--- a/firmware/libboard/common/source/board_cstartup_gnu.c
+++ b/firmware/libboard/common/source/board_cstartup_gnu.c
@@ -125,6 +125,7 @@
 };

 

 #if defined(BOARD_USB_DFU) && defined(APPLICATION_dfu)

+#include "usb/device/dfu/dfu.h"

 static void BootIntoApp(void)

 {

 	unsigned int *pSrc;

@@ -134,7 +135,7 @@
 	SCB->VTOR = ((unsigned int)(pSrc)) | (0x0 << 7);

 	appReset = pSrc[1];

 

-	printf("Booting into App from %p, PC=%p\r\n", pSrc, appReset);

+	g_dfu->state = DFU_STATE_appIDLE;

 

 	appReset();

 }

@@ -153,8 +154,11 @@
 

 

 #if defined(BOARD_USB_DFU) && defined(APPLICATION_dfu)

-    if (*(unsigned long *)IRAM_ADDR != 0xDFDFDFDF)

+    if (g_dfu->magic != USB_DFU_MAGIC) {

         BootIntoApp();

+        /* Infinite loop */

+        while ( 1 ) ;

+    }

 #endif

 

     /* Initialize the relocate segment */