fix(legacy): prevent handling RebootToBootloader recursing by flushing USB write

pull/1989/head
Ondrej Mikle 2 years ago
parent 2bcbbec0a2
commit 199729e57a

@ -0,0 +1 @@
Prevent recursing in handling RebootToBootloader by USB flush.

@ -360,8 +360,7 @@ void fsm_msgRebootToBootloader(void) {
oledRefresh(); oledRefresh();
fsm_sendSuccess(_("Rebooting")); fsm_sendSuccess(_("Rebooting"));
// make sure the outgoing message is sent // make sure the outgoing message is sent
usbPoll(); usbFlush(500);
usbSleep(500);
#if !EMULATOR #if !EMULATOR
svc_reboot_to_bootloader(); svc_reboot_to_bootloader();
#else #else

@ -70,3 +70,5 @@ char usbTiny(char set) {
tiny = set; tiny = set;
return old; return old;
} }
void usbFlush(uint32_t millis) { usbSleep(millis); }

@ -457,3 +457,23 @@ void usbSleep(uint32_t millis) {
} }
} }
} }
void usbFlush(uint32_t millis) {
if (usbd_dev == NULL) {
return;
}
static const uint8_t *data;
data = msg_out_data();
if (data) {
while (usbd_ep_write_packet(usbd_dev, ENDPOINT_ADDRESS_MAIN_IN, data,
USB_PACKET_SIZE) != USB_PACKET_SIZE) {
}
}
uint32_t start = timer_ms();
while ((timer_ms() - start) < millis) {
asm("nop");
}
}

@ -27,5 +27,6 @@ void usbPoll(void);
void usbReconnect(void); void usbReconnect(void);
char usbTiny(char set); char usbTiny(char set);
void usbSleep(uint32_t millis); void usbSleep(uint32_t millis);
void usbFlush(uint32_t millis);
#endif #endif

Loading…
Cancel
Save