Add explicit requirements for the AppConfig.h headers in the various project asf...
[pub/USBasp.git] / Bootloaders / Printer / BootloaderPrinter.c
index 7741f80..c459e03 100644 (file)
@@ -80,7 +80,7 @@ static bool PageDirty = false;
  *
  * \param[in] Byte  ASCII byte of data to check
  *
- * \return Boolean \c true if the input data is ASCII encoded HEX, false otherwise.
+ * \return Boolean \c true if the input data is ASCII encoded HEX, \c false otherwise.
  */
 static bool IsHex(const char Byte)
 {
@@ -299,7 +299,7 @@ int main(void)
 }
 
 /** Configures the board hardware and chip peripherals for the demo's functionality. */
-void SetupHardware(void)
+static void SetupHardware(void)
 {
        /* Disable watchdog if enabled by bootloader/fuses */
        MCUSR &= ~(1 << WDRF);
@@ -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();
                        }