From ecf7c18cf24a10df8d843c8f7c195d803e073330 Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
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 cb051cdf1..fefcbbfc7 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 f55d03b0f..cb8f04618 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 b2b4059e9..9d62fdaa2 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 d42ad45e4..cbabdae63 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
-- 
GitLab