Cleaner solution to the PrinterHost data send routine problem of embedded NULLs - use a special structure to hold the data string plus the length in bytes of the data.

pull/1469/head
Dean Camera 16 years ago
parent 5d8cdd9bea
commit 4c035b14f1

@ -33,18 +33,18 @@
/** Sends the given data directly to the printer via the data endpoints, for the sending of print commands in printer /** 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). * languages accepted by the attached printer (e.g. PCL).
* *
* \param[in] PrinterCommands Pointer to the input buffer containing the printer data to send * \param[in] PrinterCommands Pointer to a structure containing the commands and length of the data to send
* *
* \return A value from the Pipe_Stream_RW_ErrorCodes_t enum * \return A value from the Pipe_Stream_RW_ErrorCodes_t enum
*/ */
uint8_t Printer_SendData(char* PrinterCommands, uint16_t DataLength) uint8_t Printer_SendData(Printer_Data_t* PrinterCommands)
{ {
uint8_t ErrorCode; uint8_t ErrorCode;
Pipe_SelectPipe(PRINTER_DATA_OUT_PIPE); Pipe_SelectPipe(PRINTER_DATA_OUT_PIPE);
Pipe_Unfreeze(); Pipe_Unfreeze();
if ((ErrorCode = Pipe_Write_Stream_LE(PrinterCommands, DataLength)) != PIPE_RWSTREAM_NoError) if ((ErrorCode = Pipe_Write_Stream_LE(PrinterCommands->Data, PrinterCommands->Length)) != PIPE_RWSTREAM_NoError)
return ErrorCode; return ErrorCode;
Pipe_ClearOUT(); Pipe_ClearOUT();

@ -53,8 +53,15 @@
/** Pipe number of the Printer data OUT pipe */ /** Pipe number of the Printer data OUT pipe */
#define PRINTER_DATA_OUT_PIPE 2 #define PRINTER_DATA_OUT_PIPE 2
/* Type Defines: */
typedef struct
{
char* Data;
uint16_t Length;
} Printer_Data_t;
/* Function Prototypes: */ /* Function Prototypes: */
uint8_t Printer_SendData(char* PrinterCommands, uint16_t DataLength); uint8_t Printer_SendData(Printer_Data_t* PrinterCommands);
uint8_t Printer_GetDeviceID(char* DeviceIDString, uint8_t BufferSize); uint8_t Printer_GetDeviceID(char* DeviceIDString, uint8_t BufferSize);
uint8_t Printer_GetPortStatus(uint8_t* PortStatus); uint8_t Printer_GetPortStatus(uint8_t* PortStatus);
uint8_t Printer_SoftReset(void); uint8_t Printer_SoftReset(void);

@ -204,12 +204,16 @@ void USB_Printer_Host(void)
/* Indicate device busy via the status LEDs */ /* Indicate device busy via the status LEDs */
LEDs_SetAllLEDs(LEDMASK_USB_BUSY); LEDs_SetAllLEDs(LEDMASK_USB_BUSY);
char PCL_Test_Page[] = "\033%-12345X\033E LUFA PCL Test Page \033E\033%-12345X"; Printer_Data_t TestPageData =
// char ESCP2_Test_Page[] = "\033@\033i\001\033X\001\060\000\r\nLUFA ESCP/2 Test Page\r\n"; {
"\033%-12345X\033E LUFA PCL Test Page \033E\033%-12345X",
// "\033@\033i\001\033X\001\060\000\r\nLUFA ESCP/2 Test Page\r\n",
(sizeof(TestPageData.Data) - 1)
};
printf_P(PSTR("Sending Test Page (%d bytes)...\r\n"), (sizeof(PCL_Test_Page) - 1)); printf_P(PSTR("Sending Test Page (%d bytes)...\r\n"), TestPageData.Length);
if ((ErrorCode = Printer_SendData(PCL_Test_Page, (sizeof(PCL_Test_Page) - 1))) != PIPE_RWSTREAM_NoError) if ((ErrorCode = Printer_SendData(&TestPageData)) != PIPE_RWSTREAM_NoError)
{ {
puts_P(PSTR(ESC_FG_RED "Error Sending Test Page.\r\n")); puts_P(PSTR(ESC_FG_RED "Error Sending Test Page.\r\n"));
printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode);

Loading…
Cancel
Save