From ecf7c18cf24a10df8d843c8f7c195d803e073330 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Wed, 2 Sep 2009 00:27:52 +0000 Subject: [PATCH] Fixed error in PrinterHost preventing the full page data from being sent to the attached device. --- .../LowLevel/PrinterHost/Lib/PrinterCommands.c | 7 ++++--- .../LowLevel/PrinterHost/Lib/PrinterCommands.h | 12 +----------- Demos/Host/LowLevel/PrinterHost/PrinterHost.c | 15 ++++++--------- LUFA/ManPages/ChangeLog.txt | 1 + 4 files changed, 12 insertions(+), 23 deletions(-) diff --git a/Demos/Host/LowLevel/PrinterHost/Lib/PrinterCommands.c b/Demos/Host/LowLevel/PrinterHost/Lib/PrinterCommands.c index cb051cdf11..fefcbbfc71 100644 --- a/Demos/Host/LowLevel/PrinterHost/Lib/PrinterCommands.c +++ b/Demos/Host/LowLevel/PrinterHost/Lib/PrinterCommands.c @@ -39,18 +39,19 @@ /** Sends the given data directly to the printer via the data endpoints, for the sending of print commands in printer * languages accepted by the attached printer (e.g. PCL). * - * \param[in] PrinterCommands Pointer to a structure containing the commands and length of the data to send + * \param[in] PrinterCommands Pointer to the data to send to the attached printer + * \param[in] CommandSize Size of the data to send to the attached printer * * \return A value from the Pipe_Stream_RW_ErrorCodes_t enum */ -uint8_t Printer_SendData(Printer_Data_t* PrinterCommands) +uint8_t Printer_SendData(void* PrinterCommands, uint16_t CommandSize) { uint8_t ErrorCode; Pipe_SelectPipe(PRINTER_DATA_OUT_PIPE); Pipe_Unfreeze(); - if ((ErrorCode = Pipe_Write_Stream_LE(PrinterCommands->Data, PrinterCommands->Length)) != PIPE_RWSTREAM_NoError) + if ((ErrorCode = Pipe_Write_Stream_LE(PrinterCommands, CommandSize)) != PIPE_RWSTREAM_NoError) return ErrorCode; Pipe_ClearOUT(); diff --git a/Demos/Host/LowLevel/PrinterHost/Lib/PrinterCommands.h b/Demos/Host/LowLevel/PrinterHost/Lib/PrinterCommands.h index f55d03b0f7..cb8f046188 100644 --- a/Demos/Host/LowLevel/PrinterHost/Lib/PrinterCommands.h +++ b/Demos/Host/LowLevel/PrinterHost/Lib/PrinterCommands.h @@ -58,18 +58,8 @@ /** Pipe number of the Printer data OUT pipe */ #define PRINTER_DATA_OUT_PIPE 2 - /* Type Defines: */ - /** Type define for a Printer Command Data structure, for the encapsulation of raw printer commands to - * send to an attached printer device. - */ - typedef struct - { - char* Data; /**< Printer commands to send to the attached printer */ - uint16_t Length; /**< Length in bytes of the commands to send to the attached printer */ - } Printer_Data_t; - /* Function Prototypes: */ - uint8_t Printer_SendData(Printer_Data_t* PrinterCommands); + uint8_t Printer_SendData(void* PrinterCommands, uint16_t CommandSize); uint8_t Printer_GetDeviceID(char* DeviceIDString, uint16_t BufferSize); uint8_t Printer_GetPortStatus(uint8_t* PortStatus); uint8_t Printer_SoftReset(void); diff --git a/Demos/Host/LowLevel/PrinterHost/PrinterHost.c b/Demos/Host/LowLevel/PrinterHost/PrinterHost.c index b2b4059e9e..9d62fdaa28 100644 --- a/Demos/Host/LowLevel/PrinterHost/PrinterHost.c +++ b/Demos/Host/LowLevel/PrinterHost/PrinterHost.c @@ -197,10 +197,10 @@ void USB_Printer_Host(void) puts_P(PSTR("Retrieving Device ID...\r\n")); - char DeviceIDString[256]; + char DeviceIDString[300]; if ((ErrorCode = Printer_GetDeviceID(DeviceIDString, sizeof(DeviceIDString))) != HOST_SENDCONTROL_Successful) { - printf_P(PSTR(ESC_FG_RED "Control Error (Get DeviceID).\r\n" + printf_P(PSTR(ESC_FG_RED "Control Error (Get Device ID).\r\n" " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); /* Indicate error via status LEDs */ @@ -221,15 +221,12 @@ void USB_Printer_Host(void) /* Indicate device busy via the status LEDs */ LEDs_SetAllLEDs(LEDMASK_USB_BUSY); - Printer_Data_t TestPageData = - { - "\033%-12345X\033E" "LUFA PCL Test Page" "\033E\033%-12345X", - (sizeof(TestPageData.Data) - 1) - }; + char TestPageData[] = "\033%-12345X\033E" "LUFA PCL Test Page" "\033E\033%-12345X"; + uint16_t TestPageLength = strlen(TestPageData); - printf_P(PSTR("Sending Test Page (%d bytes)...\r\n"), TestPageData.Length); + printf_P(PSTR("Sending Test Page (%d bytes)...\r\n"), TestPageLength); - if ((ErrorCode = Printer_SendData(&TestPageData)) != PIPE_RWSTREAM_NoError) + if ((ErrorCode = Printer_SendData(&TestPageData, TestPageLength)) != PIPE_RWSTREAM_NoError) { printf_P(PSTR(ESC_FG_RED "Error Sending Test Page.\r\n" " -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt index d42ad45e4d..cbabdae632 100644 --- a/LUFA/ManPages/ChangeLog.txt +++ b/LUFA/ManPages/ChangeLog.txt @@ -49,6 +49,7 @@ * - Fixed Device mode HID Class driver not explicitly initializing the ReportSize parameter to zero before calling callback * routine, so that ignored callbacks don't cause incorrect data to be sent * - Fixed StillImageHost not correctly freezing and unfreezing data pipes while waiting for a response block header + * - Fixed error in PrinterHost preventing the full page data from being sent to the attached device * * * \section Sec_ChangeLog090810 Version 090810