X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/7d4062fa54461c92ab2df02d630b33f672378780..646e63b08944daf0ece6b784eae18cf162601682:/Bootloaders/Printer/BootloaderPrinter.c diff --git a/Bootloaders/Printer/BootloaderPrinter.c b/Bootloaders/Printer/BootloaderPrinter.c index 5d4a89bd3..c459e031a 100644 --- a/Bootloaders/Printer/BootloaderPrinter.c +++ b/Bootloaders/Printer/BootloaderPrinter.c @@ -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); @@ -335,7 +335,7 @@ void EVENT_USB_Device_Connect(void) } /** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via - * the status LEDs and stops the Mass Storage management task. + * the status LEDs and stops the Printer management task. */ void EVENT_USB_Device_Disconnect(void) { @@ -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(); }