Document 50 and 500 msec delays before DFU resets (sc_usb_audio 49e2ce9)

This commit is contained in:
Oscar Bailey
2020-12-08 16:02:57 +00:00
parent b9aae2092c
commit 04a991b37e

View File

@@ -66,6 +66,22 @@
#include "xua_dfu.h" #include "xua_dfu.h"
#define DFU_IF_NUM INPUT_INTERFACES + OUTPUT_INTERFACES + MIDI_INTERFACES + 1 #define DFU_IF_NUM INPUT_INTERFACES + OUTPUT_INTERFACES + MIDI_INTERFACES + 1
extern void device_reboot(void); extern void device_reboot(void);
/* Windows core USB/device driver stack may not like device coming off bus for
* a very short period of less than 500ms. Enforce at least 500ms by stalling.
* This may not have the desired effect depending on whether 'off the bus'
* requires device terminations disabled (PHY off). In that case we would be
* better off doing the reboot to DFU and then delaying PHY initialisation
* instead. Suggest revisiting.
*/
#define DELAY_BEFORE_REBOOT_TO_DFU_MS 500
/* Similarly to the delay before reboot to DFU mode, this delay is meant to
* avoid shocking the Windows software stack. Suggest revisiting to establish
* if 50 or 500 is needed.
*/
#define DELAY_BEFORE_REBOOT_FROM_DFU_MS 50
#endif #endif
#if( 0 < HID_CONTROLS ) #if( 0 < HID_CONTROLS )
@@ -814,7 +830,7 @@ void XUA_Endpoint0_loop(XUD_Result_t result, USB_SetupPacket_t sp, chanend c_ep0
if(reset) if(reset)
{ {
DFUDelay(50000000); DFUDelay(DELAY_BEFORE_REBOOT_TO_DFU_MS * 100000);
device_reboot(); device_reboot();
} }
} }
@@ -1035,7 +1051,7 @@ void XUA_Endpoint0_loop(XUD_Result_t result, USB_SetupPacket_t sp, chanend c_ep0
DFU_mode_active = 0; DFU_mode_active = 0;
/* Send reboot command */ /* Send reboot command */
DFUDelay(5000000); DFUDelay(DELAY_BEFORE_REBOOT_FROM_DFU_MS * 100000);
device_reboot(); device_reboot();
} }
} }