diff options
author | Dean Camera <dean@fourwalledcubicle.com> | 2013-03-27 18:55:30 +0000 |
---|---|---|
committer | Dean Camera <dean@fourwalledcubicle.com> | 2013-03-27 18:55:30 +0000 |
commit | 4ba40977162ef46f328d49c4d48d7d8a0c6cddf0 (patch) | |
tree | 64b89cdabe81d691bc7bd891674386e498578499 /Bootloaders/Printer | |
parent | f2e974954bcc02bb39e3bf2e142a08c9243c654d (diff) | |
download | lufa-4ba40977162ef46f328d49c4d48d7d8a0c6cddf0.tar.gz lufa-4ba40977162ef46f328d49c4d48d7d8a0c6cddf0.tar.bz2 lufa-4ba40977162ef46f328d49c4d48d7d8a0c6cddf0.zip |
Fixed race condition in the DFU class bootloader causing failed device reprogramming in some circumstances (thanks to Luis Mendes).
Diffstat (limited to 'Bootloaders/Printer')
-rw-r--r-- | Bootloaders/Printer/BootloaderPrinter.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/Bootloaders/Printer/BootloaderPrinter.c b/Bootloaders/Printer/BootloaderPrinter.c index 9a6a8c27f..c459e031a 100644 --- a/Bootloaders/Printer/BootloaderPrinter.c +++ b/Bootloaders/Printer/BootloaderPrinter.c @@ -380,6 +380,13 @@ void EVENT_USB_Device_ControlRequest(void) "CLS:PRINTER"; Endpoint_ClearSETUP(); + + while (!(Endpoint_IsINReady())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return; + } + Endpoint_Write_16_BE(sizeof(PrinterIDString)); Endpoint_Write_Control_Stream_LE(PrinterIDString, strlen(PrinterIDString)); Endpoint_ClearStatusStage(); @@ -390,6 +397,13 @@ void EVENT_USB_Device_ControlRequest(void) if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) { Endpoint_ClearSETUP(); + + while (!(Endpoint_IsINReady())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return; + } + Endpoint_Write_8(PRNT_PORTSTATUS_NOTERROR | PRNT_PORTSTATUS_SELECT); Endpoint_ClearStatusStage(); } |